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

package bindings

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

	ethereum "github.com/autonity/autonity"
	"github.com/autonity/autonity/accounts/abi"
	"github.com/autonity/autonity/accounts/abi/bind"
	"github.com/autonity/autonity/common"
	"github.com/autonity/autonity/core/types"
	"github.com/autonity/autonity/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
)

// AuctionLibAuction is an auto generated low-level Go binding around an user-defined struct.
type AuctionLibAuction struct {
	Id             *big.Int
	Amount         *big.Int
	StartPrice     *big.Int
	StartTimestamp *big.Int
}

// AuctioneerConfig is an auto generated low-level Go binding around an user-defined struct.
type AuctioneerConfig struct {
	LiquidationAuctionDuration *big.Int
	InterestAuctionDuration    *big.Int
	InterestAuctionDiscount    *big.Int
	InterestAuctionThreshold   *big.Int
}

// AutonityFinalizeResult is an auto generated low-level Go binding around an user-defined struct.
type AutonityFinalizeResult struct {
	ContractUpgradeReady bool
	EpochEnded           bool
	Epoch                IAutonityEpochInfo
	Config               IAutonityClientAwareConfig
}

// IAccountabilityBaseSlashingRates is an auto generated low-level Go binding around an user-defined struct.
type IAccountabilityBaseSlashingRates struct {
	Low  *big.Int
	Mid  *big.Int
	High *big.Int
}

// IAccountabilityConfig is an auto generated low-level Go binding around an user-defined struct.
type IAccountabilityConfig struct {
	InnocenceProofSubmissionWindow *big.Int
	Delta                          *big.Int
	Range                          *big.Int
	BaseSlashingRates              IAccountabilityBaseSlashingRates
	Factors                        IAccountabilityFactors
}

// IAccountabilityEvent is an auto generated low-level Go binding around an user-defined struct.
type IAccountabilityEvent struct {
	EventType      uint8
	Rule           uint8
	Reporter       common.Address
	Offender       common.Address
	RawProof       []byte
	Id             *big.Int
	Block          *big.Int
	Epoch          *big.Int
	ReportingBlock *big.Int
	MessageHash    *big.Int
}

// IAccountabilityFactors is an auto generated low-level Go binding around an user-defined struct.
type IAccountabilityFactors struct {
	Collusion *big.Int
	History   *big.Int
	Jail      *big.Int
}

// IAutonityAccountability is an auto generated low-level Go binding around an user-defined struct.
type IAutonityAccountability struct {
	Range       *big.Int
	Delta       *big.Int
	GracePeriod *big.Int
}

// IAutonityBondingRequest is an auto generated low-level Go binding around an user-defined struct.
type IAutonityBondingRequest struct {
	Delegator    common.Address
	Delegatee    common.Address
	Amount       *big.Int
	RequestBlock *big.Int
}

// IAutonityClientAwareConfig is an auto generated low-level Go binding around an user-defined struct.
type IAutonityClientAwareConfig struct {
	EpochPeriod         *big.Int
	BlockPeriod         *big.Int
	GasLimit            *big.Int
	ClusteringThreshold *big.Int
	Accountability      IAutonityAccountability
	Eip1559             IAutonityEip1559
}

// IAutonityCommitteeMember is an auto generated low-level Go binding around an user-defined struct.
type IAutonityCommitteeMember struct {
	Addr         common.Address
	VotingPower  *big.Int
	ConsensusKey []byte
}

// IAutonityConfig is an auto generated low-level Go binding around an user-defined struct.
type IAutonityConfig struct {
	Policy          IAutonityPolicy
	Contracts       IAutonityContracts
	Protocol        IAutonityProtocol
	ContractVersion *big.Int
}

// IAutonityContracts is an auto generated low-level Go binding around an user-defined struct.
type IAutonityContracts struct {
	AccountabilityContract         common.Address
	OracleContract                 common.Address
	AcuContract                    common.Address
	SupplyControlContract          common.Address
	StabilizationContract          common.Address
	UpgradeManagerContract         common.Address
	InflationControllerContract    common.Address
	OmissionAccountabilityContract common.Address
	AuctioneerContract             common.Address
}

// IAutonityEip1559 is an auto generated low-level Go binding around an user-defined struct.
type IAutonityEip1559 struct {
	MinBaseFee               *big.Int
	BaseFeeChangeDenominator *big.Int
	ElasticityMultiplier     *big.Int
	GasLimitBoundDivisor     *big.Int
}

// IAutonityEpochInfo is an auto generated low-level Go binding around an user-defined struct.
type IAutonityEpochInfo struct {
	Committee          []IAutonityCommitteeMember
	PreviousEpochBlock *big.Int
	EpochBlock         *big.Int
	NextEpochBlock     *big.Int
	OmissionDelta      *big.Int
	Eip1559            IAutonityEip1559
}

// IAutonityPolicy is an auto generated low-level Go binding around an user-defined struct.
type IAutonityPolicy struct {
	TreasuryFee              *big.Int
	MinBaseFee               *big.Int
	DelegationRate           *big.Int
	UnbondingPeriod          *big.Int
	InitialInflationReserve  *big.Int
	WithholdingThreshold     *big.Int
	ProposerRewardRate       *big.Int
	OracleRewardRate         *big.Int
	WithheldRewardsPool      common.Address
	TreasuryAccount          common.Address
	BaseFeeChangeDenominator *big.Int
	ElasticityMultiplier     *big.Int
}

// IAutonityProtocol is an auto generated low-level Go binding around an user-defined struct.
type IAutonityProtocol struct {
	OperatorAccount      common.Address
	EpochPeriod          *big.Int
	BlockPeriod          *big.Int
	CommitteeSize        *big.Int
	MaxScheduleDuration  *big.Int
	GasLimit             *big.Int
	GasLimitBoundDivisor *big.Int
	ClusteringThreshold  *big.Int
}

// IAutonityUnbondingRequest is an auto generated low-level Go binding around an user-defined struct.
type IAutonityUnbondingRequest struct {
	Delegator      common.Address
	Delegatee      common.Address
	Amount         *big.Int
	UnbondingShare *big.Int
	RequestBlock   *big.Int
	Unlocked       bool
	Released       bool
	SelfDelegation bool
}

// IAutonityValidator is an auto generated low-level Go binding around an user-defined struct.
type IAutonityValidator struct {
	Treasury                 common.Address
	NodeAddress              common.Address
	OracleAddress            common.Address
	Enode                    string
	CommissionRate           *big.Int
	BondedStake              *big.Int
	UnbondingStake           *big.Int
	UnbondingShares          *big.Int
	SelfBondedStake          *big.Int
	SelfUnbondingStake       *big.Int
	SelfUnbondingShares      *big.Int
	SelfUnbondingStakeLocked *big.Int
	LiquidStateContract      common.Address
	LiquidSupply             *big.Int
	RegistrationBlock        *big.Int
	TotalSlashed             *big.Int
	JailReleaseBlock         *big.Int
	ConsensusKey             []byte
	State                    uint8
	ConversionRatio          *big.Int
}

// IOracleReport is an auto generated low-level Go binding around an user-defined struct.
type IOracleReport struct {
	Price      *big.Int
	Confidence uint8
}

// IOracleRoundData is an auto generated low-level Go binding around an user-defined struct.
type IOracleRoundData struct {
	Round     *big.Int
	Price     *big.Int
	Timestamp *big.Int
	Success   bool
}

// IScheduleControllerSchedule is an auto generated low-level Go binding around an user-defined struct.
type IScheduleControllerSchedule struct {
	TotalAmount    *big.Int
	UnlockedAmount *big.Int
	Start          *big.Int
	TotalDuration  *big.Int
	LastUnlockTime *big.Int
}

// IStabilizationCDP is an auto generated low-level Go binding around an user-defined struct.
type IStabilizationCDP struct {
	Timestamp                      *big.Int
	Collateral                     *big.Int
	Principal                      *big.Int
	Interest                       *big.Int
	LastAggregatedInterestExponent *big.Int
}

// IStabilizationConfig is an auto generated low-level Go binding around an user-defined struct.
type IStabilizationConfig struct {
	BorrowInterestRate        *big.Int
	AnnouncementWindow        *big.Int
	LiquidationRatio          *big.Int
	MinCollateralizationRatio *big.Int
	MinDebtRequirement        *big.Int
	TargetPrice               *big.Int
	DefaultNTNATNPrice        *big.Int
	DefaultNTNUSDPrice        *big.Int
	DefaultACUUSDPrice        *big.Int
}

// IStabilizationLastUpdated is an auto generated low-level Go binding around an user-defined struct.
type IStabilizationLastUpdated struct {
	BorrowInterestRateTimestamp        *big.Int
	AnnouncementWindowTimestamp        *big.Int
	LiquidationRatioTimestamp          *big.Int
	MinCollateralizationRatioTimestamp *big.Int
}

// InflationControllerParams is an auto generated low-level Go binding around an user-defined struct.
type InflationControllerParams struct {
	InflationRateInitial      *big.Int
	InflationRateTransition   *big.Int
	InflationCurveConvexity   *big.Int
	InflationTransitionPeriod *big.Int
	InflationReserveDecayRate *big.Int
}

// OmissionAccountabilityConfig is an auto generated low-level Go binding around an user-defined struct.
type OmissionAccountabilityConfig struct {
	InactivityThreshold    *big.Int
	LookbackWindow         *big.Int
	PastPerformanceWeight  *big.Int
	InitialJailingPeriod   *big.Int
	InitialProbationPeriod *big.Int
	InitialSlashingRate    *big.Int
	Delta                  *big.Int
}

// OracleConfig is an auto generated low-level Go binding around an user-defined struct.
type OracleConfig struct {
	Autonity                  common.Address
	Operator                  common.Address
	VotePeriod                *big.Int
	OutlierDetectionThreshold *big.Int
	OutlierSlashingThreshold  *big.Int
	BaseSlashingRate          *big.Int
	NonRevealThreshold        *big.Int
	RevealResetInterval       *big.Int
	SlashingRateCap           *big.Int
}

// OracleVoterInfo is an auto generated low-level Go binding around an user-defined struct.
type OracleVoterInfo struct {
	Round           *big.Int
	Commit          *big.Int
	Performance     *big.Int
	NonRevealCount  *big.Int
	IsVoter         bool
	ReportAvailable bool
}

// ACUMetaData contains all meta data concerning the ACU contract.
var ACUMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"symbols_\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"quantities_\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"scale_\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidBasket\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoACUValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValue\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"quantities\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scale\",\"type\":\"uint256\"}],\"name\":\"BasketModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newQuantityMultiplier\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldQuantityMultiplier\",\"type\":\"uint256\"}],\"name\":\"Rescaled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Updated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScaleFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"symbols_\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"quantities_\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"scale_\",\"type\":\"uint256\"}],\"name\":\"modifyBasket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"multiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"quantities\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newQuantityMultiplier\",\"type\":\"uint256\"}],\"name\":\"rescale\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledQuantities\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"update\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"9f8743f7": "getRound()",
		"b5cddab8": "getScale()",
		"7f5e2f11": "getScaleFactor()",
		"44b4708a": "modifyBasket(string[],uint256[],uint256)",
		"1b3ed722": "multiplier()",
		"d54d2799": "quantities()",
		"4bca9e20": "rescale(uint256)",
		"11adc910": "scaledQuantities()",
		"b3ab15fb": "setOperator(address)",
		"7adbf973": "setOracle(address)",
		"07039ff9": "symbols()",
		"a2e62045": "update()",
		"3fa4f245": "value()",
	},
	Bin: "0x608060405234801561001057600080fd5b50604051611c16380380611c1683398101604081905261002f9161032f565b8585805182511461005357604051634ff799c560e01b815260040160405180910390fd5b60005b81518110156100a8576001600160ff1b03828281518110610079576100796104ca565b602002602001015111156100a057604051634ff799c560e01b815260040160405180910390fd5b600101610056565b5087516100bc9060059060208b0190610131565b5086516100d09060069060208a0190610187565b5060028690556100e186600a6105df565b60038190556004555050600880546001600160a01b039485166001600160a01b0319918216179091556009805493851693821693909317909255600a805491909316911617905550610739915050565b828054828255906000526020600020908101928215610177579160200282015b828111156101775782518290610167908261067b565b5091602001919060010190610151565b506101839291506101ce565b5090565b8280548282559060005260206000209081019282156101c2579160200282015b828111156101c25782518255916020019190600101906101a7565b506101839291506101eb565b808211156101835760006101e28282610200565b506001016101ce565b5b8082111561018357600081556001016101ec565b50805461020c906105f2565b6000825580601f1061021c575050565b601f01602090049060005260206000209081019061023a91906101eb565b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561027b5761027b61023d565b604052919050565b60006001600160401b0382111561029c5761029c61023d565b5060051b60200190565b600082601f8301126102b757600080fd5b81516102ca6102c582610283565b610253565b8082825260208201915060208360051b8601019250858311156102ec57600080fd5b602085015b838110156103095780518352602092830192016102f1565b5095945050505050565b80516001600160a01b038116811461032a57600080fd5b919050565b60008060008060008060c0878903121561034857600080fd5b86516001600160401b0381111561035e57600080fd5b8701601f8101891361036f57600080fd5b805161037d6102c582610283565b8082825260208201915060208360051b85010192508b83111561039f57600080fd5b602084015b8381101561045d5780516001600160401b038111156103c257600080fd5b8501603f81018e136103d357600080fd5b60208101516001600160401b038111156103ef576103ef61023d565b610402601f8201601f1916602001610253565b8181528f6020808486010101111561041957600080fd5b60005b8281101561043c578084016040015160208383018101919091520161041c565b506000602083830101528086525050506020830192506020810190506103a4565b5060208b0151909950925050506001600160401b0381111561047e57600080fd5b61048a89828a016102a6565b604089015190965094506104a2905060608801610313565b92506104b060808801610313565b91506104be60a08801610313565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001815b600184111561053157808504811115610515576105156104e0565b600184161561052357908102905b60019390931c9280026104fa565b935093915050565b600082610548575060016105d9565b81610555575060006105d9565b816001811461056b576002811461057557610591565b60019150506105d9565b60ff841115610586576105866104e0565b50506001821b6105d9565b5060208310610133831016604e8410600b84101617156105b4575081810a6105d9565b6105c160001984846104f6565b80600019048211156105d5576105d56104e0565b0290505b92915050565b60006105eb8383610539565b9392505050565b600181811c9082168061060657607f821691505b60208210810361062657634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561067657806000526020600020601f840160051c810160208510156106535750805b601f840160051c820191505b81811015610673576000815560010161065f565b50505b505050565b81516001600160401b038111156106945761069461023d565b6106a8816106a284546105f2565b8461062c565b6020601f8211600181146106dc57600083156106c45750848201515b600019600385901b1c1916600184901b178455610673565b600084815260208120601f198516915b8281101561070c57878501518255602094850194600190920191016106ec565b508482101561072a5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6114ce806107486000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637adbf9731161008c578063a2e6204511610066578063a2e620451461016c578063b3ab15fb14610184578063b5cddab814610197578063d54d27991461019f57600080fd5b80637adbf973146101495780637f5e2f111461015c5780639f8743f71461016457600080fd5b806307039ff9146100d457806311adc910146100f25780631b3ed722146101075780633fa4f2451461011957806344b4708a146101215780634bca9e2014610136575b600080fd5b6100dc6101a7565b6040516100e99190610d12565b60405180910390f35b6100fa610280565b6040516100e99190610d68565b6004545b6040519081526020016100e9565b61010b61033d565b61013461012f366004610e53565b6103db565b005b610134610144366004610fa2565b610528565b610134610157366004610fbb565b6105b9565b60035461010b565b61010b61066e565b6101746106c8565b60405190151581526020016100e9565b610134610192366004610fbb565b610a17565b60025461010b565b6100fa610ace565b60606005805480602002602001604051908101604052809291908181526020016000905b828210156102775783829060005260206000200180546101ea90610fe4565b80601f016020809104026020016040519081016040528092919081815260200182805461021690610fe4565b80156102635780601f1061023857610100808354040283529160200191610263565b820191906000526020600020905b81548152906001019060200180831161024657829003601f168201915b5050505050815260200190600101906101cb565b50505050905090565b60065460609060009067ffffffffffffffff8111156102a1576102a1610d7b565b6040519080825280602002602001820160405280156102ca578160200160208202803683370190505b50905060005b60065481101561033757600354600454600683815481106102f3576102f3611018565b90600052602060002001546103089190611044565b6103129190611061565b82828151811061032457610324611018565b60209081029190910101526001016102d0565b50919050565b600080546001036103955760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e637920646574656374656400000060448201526064015b60405180910390fd5b6001546000036103b857604051631d3e00bb60e11b815260040160405180910390fd5b6003546007546004546103cb9190611044565b6103d59190611061565b90505b90565b828280518251146103ff57604051634ff799c560e01b815260040160405180910390fd5b60005b8151811015610454576001600160ff1b0382828151811061042557610425611018565b6020026020010151111561044c57604051634ff799c560e01b815260040160405180910390fd5b600101610402565b506009546001600160a01b0316331461047f576040516282b42960e81b815260040160405180910390fd5b8451610492906005906020880190610b73565b5083516104a6906006906020870190610bc9565b5060028390556003546104ba84600a61116a565b6004546104c79190611044565b6104d19190611061565b6004556002546104e290600a61116a565b6003556040517fdbdcd10543a20811a4a332247f28d03b22686d3281043de35824a06075c06c099061051990879087908790611176565b60405180910390a15050505050565b6009546001600160a01b03163314610552576040516282b42960e81b815260040160405180910390fd5b600454600082900361057757604051637c946ed760e01b815260040160405180910390fd5b600482905560408051838152602081018390527fcbf58d411e9aab8c9178366fd983f89114daf78cc7b9fc074460b1ab122e3d63910160405180910390a15050565b6008546001600160a01b031633146105e3576040516282b42960e81b815260040160405180910390fd5b600a54604080516080808252600690820152656f7261636c6560d01b60a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a1600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001036106c15760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604482015260640161038c565b5060015490565b6008546000906001600160a01b031633146106f5576040516282b42960e81b815260040160405180910390fd5b6106fd610b26565b60006001600a60009054906101000a90046001600160a01b03166001600160a01b0316639f8743f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610754573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077891906111ac565b61078291906111c5565b90508060015410610797576000915050610a0e565b600080600a60009054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081191906111d8565b60ff16905060005b6005548110156109a057604051661554d10b5554d160ca1b6020820152600090602701604051602081830303815290604052805190602001206005838154811061086557610865611018565b9060005260206000200160405160200161087f91906111fb565b60405160208183030381529060405280519060200120036108ac576108a583600a61116a565b9050610962565b600a54600580546000926001600160a01b031691633c8510fd91899190879081106108d9576108d9611018565b906000526020600020016040518363ffffffff1660e01b8152600401610900929190611270565b608060405180830381865afa15801561091d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109419190611303565b9050806060015161095b5760009650505050505050610a0e565b6020015190505b6006828154811061097557610975611018565b90600052602060002001548161098b9190611044565b6109959085611377565b935050600101610819565b506109ac81600a61116a565b6109b69083611061565b60078190556001849055604080514381524260208201528082018690526060810192909252517fe75d396a479695bf8384579b621262055952455623ff38da02affb3a52455d8d9181900360800190a1600193505050505b6103d860008055565b6008546001600160a01b03163314610a41576040516282b42960e81b815260040160405180910390fd5b6009546040805160808082526008908201526737b832b930ba37b960c11b60a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a1600980546001600160a01b0319166001600160a01b0392909216919091179055565b60606006805480602002602001604051908101604052809291908181526020018280548015610b1c57602002820191906000526020600020905b815481526020019060010190808311610b08575b5050505050905090565b60005415610b6c5760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b604482015260640161038c565b6001600055565b828054828255906000526020600020908101928215610bb9579160200282015b82811115610bb95782518290610ba990826113d9565b5091602001919060010190610b93565b50610bc5929150610c10565b5090565b828054828255906000526020600020908101928215610c04579160200282015b82811115610c04578251825591602001919060010190610be9565b50610bc5929150610c2d565b80821115610bc5576000610c248282610c42565b50600101610c10565b5b80821115610bc55760008155600101610c2e565b508054610c4e90610fe4565b6000825580601f10610c5e575050565b601f016020900490600052602060002090810190610c7c9190610c2d565b50565b600082825180855260208501945060208160051b8301016020850160005b83811015610d0657848303601f190188528151805180855260005b81811015610cd457602081840181015187830182015201610cb8565b506000602082870101526020601f19601f83011686010194505050602082019150602088019750600181019050610c9d565b50909695505050505050565b602081526000610d256020830184610c7f565b9392505050565b600081518084526020840193506020830160005b82811015610d5e578151865260209586019590910190600101610d40565b5093949350505050565b602081526000610d256020830184610d2c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610dba57610dba610d7b565b604052919050565b600067ffffffffffffffff821115610ddc57610ddc610d7b565b5060051b60200190565b600082601f830112610df757600080fd5b8135610e0a610e0582610dc2565b610d91565b8082825260208201915060208360051b860101925085831115610e2c57600080fd5b602085015b83811015610e49578035835260209283019201610e31565b5095945050505050565b600080600060608486031215610e6857600080fd5b833567ffffffffffffffff811115610e7f57600080fd5b8401601f81018613610e9057600080fd5b8035610e9e610e0582610dc2565b8082825260208201915060208360051b850101925088831115610ec057600080fd5b602084015b83811015610f6457803567ffffffffffffffff811115610ee457600080fd5b8501603f81018b13610ef557600080fd5b602081013567ffffffffffffffff811115610f1257610f12610d7b565b610f25601f8201601f1916602001610d91565b8181526040838301018d1015610f3a57600080fd5b81604084016020830137600060208383010152808652505050602083019250602081019050610ec5565b509550505050602084013567ffffffffffffffff811115610f8457600080fd5b610f9086828701610de6565b93969395505050506040919091013590565b600060208284031215610fb457600080fd5b5035919050565b600060208284031215610fcd57600080fd5b81356001600160a01b0381168114610d2557600080fd5b600181811c90821680610ff857607f821691505b60208210810361033757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761105b5761105b61102e565b92915050565b60008261107e57634e487b7160e01b600052601260045260246000fd5b500490565b6001815b60018411156110be578085048111156110a2576110a261102e565b60018416156110b057908102905b60019390931c928002611087565b935093915050565b6000826110d55750600161105b565b816110e25750600061105b565b81600181146110f857600281146111025761111e565b600191505061105b565b60ff8411156111135761111361102e565b50506001821b61105b565b5060208310610133831016604e8410600b8410161715611141575081810a61105b565b61114e6000198484611083565b80600019048211156111625761116261102e565b029392505050565b6000610d2583836110c6565b6060815260006111896060830186610c7f565b828103602084015261119b8186610d2c565b915050826040830152949350505050565b6000602082840312156111be57600080fd5b5051919050565b8181038181111561105b5761105b61102e565b6000602082840312156111ea57600080fd5b815160ff81168114610d2557600080fd5b600080835461120981610fe4565b600182168015611220576001811461123557611265565b60ff1983168652811515820286019350611265565b86600052602060002060005b8381101561125d57815488820152600190910190602001611241565b505081860193505b509195945050505050565b82815260406020820152600080835461128881610fe4565b80604086015260018216600081146112a757600181146112c3576112f7565b60ff1983166060870152606082151560051b87010193506112f7565b86600052602060002060005b838110156112ee578154888201606001526001909101906020016112cf565b87016060019450505b50919695505050505050565b6000608082840312801561131657600080fd5b506040516000906080810167ffffffffffffffff8111828210171561133d5761133d610d7b565b6040908152845182526020808601519083015284810151908201526060840151801515811461136a578283fd5b6060820152949350505050565b8082018082111561105b5761105b61102e565b601f8211156113d457806000526020600020601f840160051c810160208510156113b15750805b601f840160051c820191505b818110156113d157600081556001016113bd565b50505b505050565b815167ffffffffffffffff8111156113f3576113f3610d7b565b611407816114018454610fe4565b8461138a565b6020601f82116001811461143b57600083156114235750848201515b600019600385901b1c1916600184901b1784556113d1565b600084815260208120601f198516915b8281101561146b578785015182556020948501946001909201910161144b565b50848210156114895786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fea2646970667358221220bfef2cb4b43a284a20dc8796af57d1d31e0e6d8da6ca6d8d8c86fea1eeb25c0864736f6c634300081e0033",
}

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

// Deprecated: Use ACUMetaData.Sigs instead.
// ACUFuncSigs maps the 4-byte function signature to its string representation.
var ACUFuncSigs = ACUMetaData.Sigs

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

// DeployACU deploys a new Ethereum contract, binding an instance of ACU to it.
func DeployACU(auth *bind.TransactOpts, backend bind.ContractBackend, symbols_ []string, quantities_ []*big.Int, scale_ *big.Int, autonity common.Address, operator common.Address, oracle common.Address) (common.Address, *types.Transaction, *ACU, error) {
	parsed, err := ACUMetaData.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(ACUBin), backend, symbols_, quantities_, scale_, autonity, operator, oracle)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &ACU{ACUCaller: ACUCaller{contract: contract}, ACUTransactor: ACUTransactor{contract: contract}, ACUFilterer: ACUFilterer{contract: contract}}, nil
}

// ACU is an auto generated Go binding around an Ethereum contract.
type ACU struct {
	ACUCaller     // Read-only binding to the contract
	ACUTransactor // Write-only binding to the contract
	ACUFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewACU creates a new instance of ACU, bound to a specific deployed contract.
func NewACU(address common.Address, backend bind.ContractBackend) (*ACU, error) {
	contract, err := bindACU(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &ACU{ACUCaller: ACUCaller{contract: contract}, ACUTransactor: ACUTransactor{contract: contract}, ACUFilterer: ACUFilterer{contract: contract}}, nil
}

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

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

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

// bindACU binds a generic wrapper to an already deployed contract.
func bindACU(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(ACUABI))
	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 (_ACU *ACURaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ACU.Contract.ACUCaller.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 (_ACU *ACURaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ACU.Contract.ACUTransactor.contract.Transfer(opts)
}

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

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

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

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

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

	return out0, err

}

// GetRound is a free data retrieval call binding the contract method 0x9f8743f7.
//
// Solidity: function getRound() view returns(uint256)
func (_ACU *ACUSession) GetRound() (*big.Int, error) {
	return _ACU.Contract.GetRound(&_ACU.CallOpts)
}

// GetRound is a free data retrieval call binding the contract method 0x9f8743f7.
//
// Solidity: function getRound() view returns(uint256)
func (_ACU *ACUCallerSession) GetRound() (*big.Int, error) {
	return _ACU.Contract.GetRound(&_ACU.CallOpts)
}

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

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

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

	return out0, err

}

// GetScale is a free data retrieval call binding the contract method 0xb5cddab8.
//
// Solidity: function getScale() view returns(uint256)
func (_ACU *ACUSession) GetScale() (*big.Int, error) {
	return _ACU.Contract.GetScale(&_ACU.CallOpts)
}

// GetScale is a free data retrieval call binding the contract method 0xb5cddab8.
//
// Solidity: function getScale() view returns(uint256)
func (_ACU *ACUCallerSession) GetScale() (*big.Int, error) {
	return _ACU.Contract.GetScale(&_ACU.CallOpts)
}

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

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

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

	return out0, err

}

// GetScaleFactor is a free data retrieval call binding the contract method 0x7f5e2f11.
//
// Solidity: function getScaleFactor() view returns(uint256)
func (_ACU *ACUSession) GetScaleFactor() (*big.Int, error) {
	return _ACU.Contract.GetScaleFactor(&_ACU.CallOpts)
}

// GetScaleFactor is a free data retrieval call binding the contract method 0x7f5e2f11.
//
// Solidity: function getScaleFactor() view returns(uint256)
func (_ACU *ACUCallerSession) GetScaleFactor() (*big.Int, error) {
	return _ACU.Contract.GetScaleFactor(&_ACU.CallOpts)
}

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

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

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

	return out0, err

}

// Multiplier is a free data retrieval call binding the contract method 0x1b3ed722.
//
// Solidity: function multiplier() view returns(uint256)
func (_ACU *ACUSession) Multiplier() (*big.Int, error) {
	return _ACU.Contract.Multiplier(&_ACU.CallOpts)
}

// Multiplier is a free data retrieval call binding the contract method 0x1b3ed722.
//
// Solidity: function multiplier() view returns(uint256)
func (_ACU *ACUCallerSession) Multiplier() (*big.Int, error) {
	return _ACU.Contract.Multiplier(&_ACU.CallOpts)
}

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

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

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

	return out0, err

}

// Quantities is a free data retrieval call binding the contract method 0xd54d2799.
//
// Solidity: function quantities() view returns(uint256[])
func (_ACU *ACUSession) Quantities() ([]*big.Int, error) {
	return _ACU.Contract.Quantities(&_ACU.CallOpts)
}

// Quantities is a free data retrieval call binding the contract method 0xd54d2799.
//
// Solidity: function quantities() view returns(uint256[])
func (_ACU *ACUCallerSession) Quantities() ([]*big.Int, error) {
	return _ACU.Contract.Quantities(&_ACU.CallOpts)
}

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

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

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

	return out0, err

}

// ScaledQuantities is a free data retrieval call binding the contract method 0x11adc910.
//
// Solidity: function scaledQuantities() view returns(uint256[])
func (_ACU *ACUSession) ScaledQuantities() ([]*big.Int, error) {
	return _ACU.Contract.ScaledQuantities(&_ACU.CallOpts)
}

// ScaledQuantities is a free data retrieval call binding the contract method 0x11adc910.
//
// Solidity: function scaledQuantities() view returns(uint256[])
func (_ACU *ACUCallerSession) ScaledQuantities() ([]*big.Int, error) {
	return _ACU.Contract.ScaledQuantities(&_ACU.CallOpts)
}

// Symbols is a free data retrieval call binding the contract method 0x07039ff9.
//
// Solidity: function symbols() view returns(string[])
func (_ACU *ACUCaller) Symbols(opts *bind.CallOpts) ([]string, error) {
	var out []interface{}
	err := _ACU.contract.Call(opts, &out, "symbols")

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

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

	return out0, err

}

// Symbols is a free data retrieval call binding the contract method 0x07039ff9.
//
// Solidity: function symbols() view returns(string[])
func (_ACU *ACUSession) Symbols() ([]string, error) {
	return _ACU.Contract.Symbols(&_ACU.CallOpts)
}

// Symbols is a free data retrieval call binding the contract method 0x07039ff9.
//
// Solidity: function symbols() view returns(string[])
func (_ACU *ACUCallerSession) Symbols() ([]string, error) {
	return _ACU.Contract.Symbols(&_ACU.CallOpts)
}

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

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

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

	return out0, err

}

// Value is a free data retrieval call binding the contract method 0x3fa4f245.
//
// Solidity: function value() view returns(uint256)
func (_ACU *ACUSession) Value() (*big.Int, error) {
	return _ACU.Contract.Value(&_ACU.CallOpts)
}

// Value is a free data retrieval call binding the contract method 0x3fa4f245.
//
// Solidity: function value() view returns(uint256)
func (_ACU *ACUCallerSession) Value() (*big.Int, error) {
	return _ACU.Contract.Value(&_ACU.CallOpts)
}

// ModifyBasket is a paid mutator transaction binding the contract method 0x44b4708a.
//
// Solidity: function modifyBasket(string[] symbols_, uint256[] quantities_, uint256 scale_) returns()
func (_ACU *ACUTransactor) ModifyBasket(opts *bind.TransactOpts, symbols_ []string, quantities_ []*big.Int, scale_ *big.Int) (*types.Transaction, error) {
	return _ACU.contract.Transact(opts, "modifyBasket", symbols_, quantities_, scale_)
}

// ModifyBasket is a paid mutator transaction binding the contract method 0x44b4708a.
//
// Solidity: function modifyBasket(string[] symbols_, uint256[] quantities_, uint256 scale_) returns()
func (_ACU *ACUSession) ModifyBasket(symbols_ []string, quantities_ []*big.Int, scale_ *big.Int) (*types.Transaction, error) {
	return _ACU.Contract.ModifyBasket(&_ACU.TransactOpts, symbols_, quantities_, scale_)
}

// ModifyBasket is a paid mutator transaction binding the contract method 0x44b4708a.
//
// Solidity: function modifyBasket(string[] symbols_, uint256[] quantities_, uint256 scale_) returns()
func (_ACU *ACUTransactorSession) ModifyBasket(symbols_ []string, quantities_ []*big.Int, scale_ *big.Int) (*types.Transaction, error) {
	return _ACU.Contract.ModifyBasket(&_ACU.TransactOpts, symbols_, quantities_, scale_)
}

// Rescale is a paid mutator transaction binding the contract method 0x4bca9e20.
//
// Solidity: function rescale(uint256 newQuantityMultiplier) returns()
func (_ACU *ACUTransactor) Rescale(opts *bind.TransactOpts, newQuantityMultiplier *big.Int) (*types.Transaction, error) {
	return _ACU.contract.Transact(opts, "rescale", newQuantityMultiplier)
}

// Rescale is a paid mutator transaction binding the contract method 0x4bca9e20.
//
// Solidity: function rescale(uint256 newQuantityMultiplier) returns()
func (_ACU *ACUSession) Rescale(newQuantityMultiplier *big.Int) (*types.Transaction, error) {
	return _ACU.Contract.Rescale(&_ACU.TransactOpts, newQuantityMultiplier)
}

// Rescale is a paid mutator transaction binding the contract method 0x4bca9e20.
//
// Solidity: function rescale(uint256 newQuantityMultiplier) returns()
func (_ACU *ACUTransactorSession) Rescale(newQuantityMultiplier *big.Int) (*types.Transaction, error) {
	return _ACU.Contract.Rescale(&_ACU.TransactOpts, newQuantityMultiplier)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_ACU *ACUTransactor) SetOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
	return _ACU.contract.Transact(opts, "setOperator", operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_ACU *ACUSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _ACU.Contract.SetOperator(&_ACU.TransactOpts, operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_ACU *ACUTransactorSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _ACU.Contract.SetOperator(&_ACU.TransactOpts, operator)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_ACU *ACUTransactor) SetOracle(opts *bind.TransactOpts, oracle common.Address) (*types.Transaction, error) {
	return _ACU.contract.Transact(opts, "setOracle", oracle)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_ACU *ACUSession) SetOracle(oracle common.Address) (*types.Transaction, error) {
	return _ACU.Contract.SetOracle(&_ACU.TransactOpts, oracle)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_ACU *ACUTransactorSession) SetOracle(oracle common.Address) (*types.Transaction, error) {
	return _ACU.Contract.SetOracle(&_ACU.TransactOpts, oracle)
}

// Update is a paid mutator transaction binding the contract method 0xa2e62045.
//
// Solidity: function update() returns(bool status)
func (_ACU *ACUTransactor) Update(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ACU.contract.Transact(opts, "update")
}

// Update is a paid mutator transaction binding the contract method 0xa2e62045.
//
// Solidity: function update() returns(bool status)
func (_ACU *ACUSession) Update() (*types.Transaction, error) {
	return _ACU.Contract.Update(&_ACU.TransactOpts)
}

// Update is a paid mutator transaction binding the contract method 0xa2e62045.
//
// Solidity: function update() returns(bool status)
func (_ACU *ACUTransactorSession) Update() (*types.Transaction, error) {
	return _ACU.Contract.Update(&_ACU.TransactOpts)
}

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

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

// ACUBasketModified represents a BasketModified event raised by the ACU contract.
type ACUBasketModified struct {
	Symbols    []string
	Quantities []*big.Int
	Scale      *big.Int
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterBasketModified is a free log retrieval operation binding the contract event 0xdbdcd10543a20811a4a332247f28d03b22686d3281043de35824a06075c06c09.
//
// Solidity: event BasketModified(string[] symbols, uint256[] quantities, uint256 scale)
func (_ACU *ACUFilterer) FilterBasketModified(opts *bind.FilterOpts) (*ACUBasketModifiedIterator, error) {

	logs, sub, err := _ACU.contract.FilterLogs(opts, "BasketModified")
	if err != nil {
		return nil, err
	}
	return &ACUBasketModifiedIterator{contract: _ACU.contract, event: "BasketModified", logs: logs, sub: sub}, nil
}

// WatchBasketModified is a free log subscription operation binding the contract event 0xdbdcd10543a20811a4a332247f28d03b22686d3281043de35824a06075c06c09.
//
// Solidity: event BasketModified(string[] symbols, uint256[] quantities, uint256 scale)
func (_ACU *ACUFilterer) WatchBasketModified(opts *bind.WatchOpts, sink chan<- *ACUBasketModified) (event.Subscription, error) {

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

// ParseBasketModified is a log parse operation binding the contract event 0xdbdcd10543a20811a4a332247f28d03b22686d3281043de35824a06075c06c09.
//
// Solidity: event BasketModified(string[] symbols, uint256[] quantities, uint256 scale)
func (_ACU *ACUFilterer) ParseBasketModified(log types.Log) (*ACUBasketModified, error) {
	event := new(ACUBasketModified)
	if err := _ACU.contract.UnpackLog(event, "BasketModified", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// ACUConfigUpdateAddress represents a ConfigUpdateAddress event raised by the ACU contract.
type ACUConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*ACUConfigUpdateAddressIterator, error) {

	logs, sub, err := _ACU.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &ACUConfigUpdateAddressIterator{contract: _ACU.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *ACUConfigUpdateAddress) (event.Subscription, error) {

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

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) ParseConfigUpdateAddress(log types.Log) (*ACUConfigUpdateAddress, error) {
	event := new(ACUConfigUpdateAddress)
	if err := _ACU.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// ACUConfigUpdateBool represents a ConfigUpdateBool event raised by the ACU contract.
type ACUConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*ACUConfigUpdateBoolIterator, error) {

	logs, sub, err := _ACU.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &ACUConfigUpdateBoolIterator{contract: _ACU.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *ACUConfigUpdateBool) (event.Subscription, error) {

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

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) ParseConfigUpdateBool(log types.Log) (*ACUConfigUpdateBool, error) {
	event := new(ACUConfigUpdateBool)
	if err := _ACU.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// ACUConfigUpdateInt represents a ConfigUpdateInt event raised by the ACU contract.
type ACUConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*ACUConfigUpdateIntIterator, error) {

	logs, sub, err := _ACU.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &ACUConfigUpdateIntIterator{contract: _ACU.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *ACUConfigUpdateInt) (event.Subscription, error) {

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

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) ParseConfigUpdateInt(log types.Log) (*ACUConfigUpdateInt, error) {
	event := new(ACUConfigUpdateInt)
	if err := _ACU.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// ACUConfigUpdateUint represents a ConfigUpdateUint event raised by the ACU contract.
type ACUConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*ACUConfigUpdateUintIterator, error) {

	logs, sub, err := _ACU.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &ACUConfigUpdateUintIterator{contract: _ACU.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *ACUConfigUpdateUint) (event.Subscription, error) {

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

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_ACU *ACUFilterer) ParseConfigUpdateUint(log types.Log) (*ACUConfigUpdateUint, error) {
	event := new(ACUConfigUpdateUint)
	if err := _ACU.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// ACURescaled represents a Rescaled event raised by the ACU contract.
type ACURescaled struct {
	NewQuantityMultiplier *big.Int
	OldQuantityMultiplier *big.Int
	Raw                   types.Log // Blockchain specific contextual infos
}

// FilterRescaled is a free log retrieval operation binding the contract event 0xcbf58d411e9aab8c9178366fd983f89114daf78cc7b9fc074460b1ab122e3d63.
//
// Solidity: event Rescaled(uint256 newQuantityMultiplier, uint256 oldQuantityMultiplier)
func (_ACU *ACUFilterer) FilterRescaled(opts *bind.FilterOpts) (*ACURescaledIterator, error) {

	logs, sub, err := _ACU.contract.FilterLogs(opts, "Rescaled")
	if err != nil {
		return nil, err
	}
	return &ACURescaledIterator{contract: _ACU.contract, event: "Rescaled", logs: logs, sub: sub}, nil
}

// WatchRescaled is a free log subscription operation binding the contract event 0xcbf58d411e9aab8c9178366fd983f89114daf78cc7b9fc074460b1ab122e3d63.
//
// Solidity: event Rescaled(uint256 newQuantityMultiplier, uint256 oldQuantityMultiplier)
func (_ACU *ACUFilterer) WatchRescaled(opts *bind.WatchOpts, sink chan<- *ACURescaled) (event.Subscription, error) {

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

// ParseRescaled is a log parse operation binding the contract event 0xcbf58d411e9aab8c9178366fd983f89114daf78cc7b9fc074460b1ab122e3d63.
//
// Solidity: event Rescaled(uint256 newQuantityMultiplier, uint256 oldQuantityMultiplier)
func (_ACU *ACUFilterer) ParseRescaled(log types.Log) (*ACURescaled, error) {
	event := new(ACURescaled)
	if err := _ACU.contract.UnpackLog(event, "Rescaled", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// ACUUpdated represents a Updated event raised by the ACU contract.
type ACUUpdated struct {
	Height    *big.Int
	Timestamp *big.Int
	Round     *big.Int
	Value     *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterUpdated is a free log retrieval operation binding the contract event 0xe75d396a479695bf8384579b621262055952455623ff38da02affb3a52455d8d.
//
// Solidity: event Updated(uint256 height, uint256 timestamp, uint256 round, uint256 value)
func (_ACU *ACUFilterer) FilterUpdated(opts *bind.FilterOpts) (*ACUUpdatedIterator, error) {

	logs, sub, err := _ACU.contract.FilterLogs(opts, "Updated")
	if err != nil {
		return nil, err
	}
	return &ACUUpdatedIterator{contract: _ACU.contract, event: "Updated", logs: logs, sub: sub}, nil
}

// WatchUpdated is a free log subscription operation binding the contract event 0xe75d396a479695bf8384579b621262055952455623ff38da02affb3a52455d8d.
//
// Solidity: event Updated(uint256 height, uint256 timestamp, uint256 round, uint256 value)
func (_ACU *ACUFilterer) WatchUpdated(opts *bind.WatchOpts, sink chan<- *ACUUpdated) (event.Subscription, error) {

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

// ParseUpdated is a log parse operation binding the contract event 0xe75d396a479695bf8384579b621262055952455623ff38da02affb3a52455d8d.
//
// Solidity: event Updated(uint256 height, uint256 timestamp, uint256 round, uint256 value)
func (_ACU *ACUFilterer) ParseUpdated(log types.Log) (*ACUUpdated, error) {
	event := new(ACUUpdated)
	if err := _ACU.contract.UnpackLog(event, "Updated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AccessAutonityMetaData contains all meta data concerning the AccessAutonity contract.
var AccessAutonityMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"contractIAutonity\",\"name\":\"_autonity\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]",
	Bin: "0x6080604052348015600f57600080fd5b5060405160c838038060c8833981016040819052602a91604e565b600080546001600160a01b0319166001600160a01b0392909216919091179055607c565b600060208284031215605f57600080fd5b81516001600160a01b0381168114607557600080fd5b9392505050565b603f8060896000396000f3fe6080604052600080fdfea2646970667358221220ac353966428cb905f1b81ca05327d92ef20fc90a7ae65d813ea92c52514f835864736f6c634300081e0033",
}

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

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

// DeployAccessAutonity deploys a new Ethereum contract, binding an instance of AccessAutonity to it.
func DeployAccessAutonity(auth *bind.TransactOpts, backend bind.ContractBackend, _autonity common.Address) (common.Address, *types.Transaction, *AccessAutonity, error) {
	parsed, err := AccessAutonityMetaData.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(AccessAutonityBin), backend, _autonity)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &AccessAutonity{AccessAutonityCaller: AccessAutonityCaller{contract: contract}, AccessAutonityTransactor: AccessAutonityTransactor{contract: contract}, AccessAutonityFilterer: AccessAutonityFilterer{contract: contract}}, nil
}

// AccessAutonity is an auto generated Go binding around an Ethereum contract.
type AccessAutonity struct {
	AccessAutonityCaller     // Read-only binding to the contract
	AccessAutonityTransactor // Write-only binding to the contract
	AccessAutonityFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewAccessAutonity creates a new instance of AccessAutonity, bound to a specific deployed contract.
func NewAccessAutonity(address common.Address, backend bind.ContractBackend) (*AccessAutonity, error) {
	contract, err := bindAccessAutonity(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &AccessAutonity{AccessAutonityCaller: AccessAutonityCaller{contract: contract}, AccessAutonityTransactor: AccessAutonityTransactor{contract: contract}, AccessAutonityFilterer: AccessAutonityFilterer{contract: contract}}, nil
}

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

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

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

// bindAccessAutonity binds a generic wrapper to an already deployed contract.
func bindAccessAutonity(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(AccessAutonityABI))
	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 (_AccessAutonity *AccessAutonityRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _AccessAutonity.Contract.AccessAutonityCaller.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 (_AccessAutonity *AccessAutonityRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _AccessAutonity.Contract.AccessAutonityTransactor.contract.Transfer(opts)
}

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

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

// AccountabilityMetaData contains all meta data concerning the Accountability contract.
var AccountabilityMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"contractIAutonity\",\"name\":\"_autonity\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"range\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"baseSlashingRates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Factors\",\"name\":\"factors\",\"type\":\"tuple\"}],\"internalType\":\"structIAccountability.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.Factors\",\"name\":\"oldFactors\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.Factors\",\"name\":\"newFactors\",\"type\":\"tuple\"}],\"name\":\"AccountabilityFactorsUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"oldRates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"newRates\",\"type\":\"tuple\"}],\"name\":\"BaseSlashingRateUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_reporter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_atnReward\",\"type\":\"uint256\"}],\"name\":\"ReporterRewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canAccuse\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_result\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canSlash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"}],\"name\":\"getBeneficiary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"range\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"baseSlashingRates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Factors\",\"name\":\"factors\",\"type\":\"tuple\"}],\"internalType\":\"structIAccountability.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getEvent\",\"outputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEventsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGracePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"getHistory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"getSlashingHistory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorAccusation\",\"outputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorFaults\",\"outputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleAccusation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleInnocenceProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleMisbehaviour\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"_rates\",\"type\":\"tuple\"}],\"name\":\"setBaseSlashingRates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newCommittee\",\"type\":\"address[]\"}],\"name\":\"setCommittee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delta\",\"type\":\"uint256\"}],\"name\":\"setDelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Factors\",\"name\":\"_factors\",\"type\":\"tuple\"}],\"name\":\"setFactors\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_window\",\"type\":\"uint256\"}],\"name\":\"setInnocenceProofSubmissionWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_range\",\"type\":\"uint256\"}],\"name\":\"setRange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"7ccecadd": "canAccuse(address,uint8,uint256)",
		"4108a95a": "canSlash(address,uint8,uint256)",
		"a8031a1d": "distributeRewards(address,uint256)",
		"6c9789b0": "finalize(bool)",
		"505a1b31": "getBeneficiary(address)",
		"c3f909d4": "getConfig()",
		"6d1884e0": "getEvent(uint256)",
		"47fc216e": "getEventsLength()",
		"dbd18388": "getGracePeriod()",
		"80396811": "getHistory(address)",
		"a6b0aaae": "getSlashingHistory(address,uint256)",
		"9cb22b06": "getValidatorAccusation(address)",
		"bebaa8fc": "getValidatorFaults(address)",
		"1e85f2e5": "handleAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))",
		"e05f8786": "handleInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))",
		"a48a9b50": "handleMisbehaviour((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))",
		"a2652078": "setBaseSlashingRates((uint256,uint256,uint256))",
		"e08b14ed": "setCommittee(address[])",
		"025ff0a5": "setDelta(uint256)",
		"8975e977": "setFactors((uint256,uint256,uint256))",
		"433afda8": "setInnocenceProofSubmissionWindow(uint256)",
		"6a91991b": "setRange(uint256)",
	},
	Bin: "0x6080604052600060195534801561001557600080fd5b5060405161530638038061530683398101604081905261003491610570565b600080546001600160a01b0319166001600160a01b038416179055606081015161005d9061026b565b608081015161006b906103ab565b80602001518160400151116100db5760405162461bcd60e51b815260206004820152602b60248201527f6865696768742072616e6765206e6565647320746f206265206772656174657260448201526a207468616e2064656c746160a81b60648201526084015b60405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b031663ab8f6ffe6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561012f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101579190810190610615565b905060005b8151811015610209576014828281518110610179576101796107b4565b6020908102919091018101515182546001808201855560009485529284200180546001600160a01b0319166001600160a01b03909216919091179055835190916015918590859081106101ce576101ce6107b4565b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161015c565b50508051600355602080820151600481905560408084015160058190556060850151805160065580850151600755820151600855608090940151805160095592830151600a559190910151600b55600c91909155600d55506000600e556108dc565b6020810151815111156102cc5760405162461bcd60e51b8152602060048201526024808201527f736c617368696e6720726174653a206c6f772063616e6e6f7420657863656564604482015263081b5a5960e21b60648201526084016100d2565b8060400151816020015111156103325760405162461bcd60e51b815260206004820152602560248201527f736c617368696e6720726174653a206d69642063616e6e6f7420657863656564604482015264040d0d2ced60db1b60648201526084016100d2565b61033e6004600a6108c9565b816040015111156103a85760405162461bcd60e51b815260206004820152602e60248201527f736c617368696e6720726174653a20686967682063616e6e6f7420657863656560448201526d321039b1b0b632903330b1ba37b960911b60648201526084016100d2565b50565b6103b76004600a6108c9565b8151111561042d5760405162461bcd60e51b815260206004820152603960248201527f636f6c6c7573696f6e20666163746f722063616e6e6f7420657863656564207360448201527f6c617368696e672072617465207363616c6520666163746f720000000000000060648201526084016100d2565b6104396004600a6108c9565b816020015111156103a85760405162461bcd60e51b815260206004820152603760248201527f686973746f727920666163746f722063616e6e6f742065786365656420736c6160448201527f7368696e672072617465207363616c6520666163746f7200000000000000000060648201526084016100d2565b6001600160a01b03811681146103a857600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156104ff576104ff6104c7565b60405290565b604051601f8201601f191681016001600160401b038111828210171561052d5761052d6104c7565b604052919050565b60006060828403121561054757600080fd5b61054f6104dd565b82518152602080840151908201526040928301519281019290925250919050565b60008082840361014081121561058557600080fd5b8351610590816104b2565b9250610120601f19820112156105a557600080fd5b5060405160a081016001600160401b03811182821017156105c8576105c86104c7565b6040908152602085810151835285820151908301526060850151908201526105f38560808601610535565b60608201526106058560e08601610535565b6080820152809150509250929050565b60006020828403121561062757600080fd5b81516001600160401b0381111561063d57600080fd5b8201601f8101841361064e57600080fd5b80516001600160401b03811115610667576106676104c7565b8060051b61067760208201610505565b9182526020818401810192908101908784111561069357600080fd5b6020850192505b838310156107a95782516001600160401b038111156106b857600080fd5b85016060818a03601f190112156106ce57600080fd5b6106d66104dd565b60208201516106e4816104b2565b81526040820151602082015260608201516001600160401b0381111561070957600080fd5b60208184010192505089601f83011261072157600080fd5b81516001600160401b0381111561073a5761073a6104c7565b61074d601f8201601f1916602001610505565b8181528b602083860101111561076257600080fd5b60005b8281101561078157602081860181015183830182015201610765565b506000602083830101528060408401525050808452505060208201915060208301925061069a565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001815b600184111561081b578085048111156107ff576107ff6107ca565b600184161561080d57908102905b60019390931c9280026107e4565b935093915050565b600082610832575060016108c3565b8161083f575060006108c3565b8160018114610855576002811461085f5761087b565b60019150506108c3565b60ff841115610870576108706107ca565b50506001821b6108c3565b5060208310610133831016604e8410600b841016171561089e575081810a6108c3565b6108ab60001984846107e0565b80600019048211156108bf576108bf6107ca565b0290505b92915050565b60006108d58383610823565b9392505050565b614a1b806108eb6000396000f3fe6080604052600436106101355760003560e01c80638975e977116100ab578063a8031a1d1161006f578063a8031a1d146103ab578063bebaa8fc146103be578063c3f909d4146103eb578063dbd183881461040d578063e05f878614610422578063e08b14ed1461044257600080fd5b80638975e9771461030b5780639cb22b061461032b578063a26520781461034b578063a48a9b501461036b578063a6b0aaae1461038b57600080fd5b8063505a1b31116100fd578063505a1b31146101f45780636a91991b1461022c5780636c9789b01461024c5780636d1884e0146102875780637ccecadd146102b457806380396811146102eb57600080fd5b8063025ff0a51461013a5780631e85f2e51461015c5780634108a95a1461017c578063433afda8146101b157806347fc216e146101d1575b600080fd5b34801561014657600080fd5b5061015a610155366004613b5d565b610462565b005b34801561016857600080fd5b5061015a610177366004613cc3565b6105c0565b34801561018857600080fd5b5061019c610197366004613dad565b6106a0565b60405190151581526020015b60405180910390f35b3480156101bd57600080fd5b5061015a6101cc366004613b5d565b6107f2565b3480156101dd57600080fd5b506101e6610902565b6040519081526020016101a8565b34801561020057600080fd5b5061021461020f366004613dec565b610933565b6040516001600160a01b0390911681526020016101a8565b34801561023857600080fd5b5061015a610247366004613b5d565b61097f565b34801561025857600080fd5b5061026c610267366004613e17565b610ba4565b604080519384526020840192909252908201526060016101a8565b34801561029357600080fd5b506102a76102a2366004613b5d565b610c73565b6040516101a89190613f71565b3480156102c057600080fd5b506102d46102cf366004613dad565b610e1d565b6040805192151583526020830191909152016101a8565b3480156102f757600080fd5b506101e6610306366004613dec565b611012565b34801561031757600080fd5b5061015a610326366004613fdc565b611058565b34801561033757600080fd5b506102a7610346366004613dec565b611145565b34801561035757600080fd5b5061015a610366366004613fdc565b6111fb565b34801561037757600080fd5b5061015a610386366004613cc3565b6112e8565b34801561039757600080fd5b506101e66103a6366004613ff8565b6113c5565b61015a6103b9366004613ff8565b61141b565b3480156103ca57600080fd5b506103de6103d9366004613dec565b611742565b6040516101a89190614024565b3480156103f757600080fd5b506104006119d7565b6040516101a89190614089565b34801561041957600080fd5b506101e6611a71565b34801561042e57600080fd5b5061015a61043d366004613cc3565b611aa2565b34801561044e57600080fd5b5061015a61045d3660046140f7565b611b81565b60005460408051631cfe878d60e31b8152905133926001600160a01b03169163e7f43c689160048083019260209291908290030181865afa1580156104ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cf91906141b9565b6001600160a01b0316146104fe5760405162461bcd60e51b81526004016104f5906141d6565b60405180910390fd5b600c54811061055b5760405162461bcd60e51b8152602060048201526024808201527f64656c7461206e6565647320746f20626520736d616c6c6572207468616e2072604482015263616e676560e01b60648201526084016104f5565b6004546040805160808082526005908201526464656c746160d81b60a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1600d55565b6105c8611cb1565b3360009081526015602052604090205460ff1615156001146105fc5760405162461bcd60e51b81526004016104f59061420d565b60408101516001600160a01b031633146106285760405162461bcd60e51b81526004016104f590614256565b60018151600281111561063d5761063d613e34565b1461068a5760405162461bcd60e51b815260206004820152601f60248201527f77726f6e67206576656e74207479706520666f722061636375736174696f6e0060448201526064016104f5565b61069381611cfd565b61069d6000600155565b50565b60006106ad600180541490565b156106ca5760405162461bcd60e51b81526004016104f59061428d565b60008360098111156106de576106de613e34565b101580156106fe575060098360098111156106fb576106fb613e34565b11155b6107425760405162461bcd60e51b81526020600482015260156024820152741c9d5b19481a59081b5d5cdd081899481d985b1a59605a1b60448201526064016104f5565b600061074d84611e80565b600080546040516396b477cb60e01b81526004810187905292935090916001600160a01b03909116906396b477cb90602401602060405180830381865afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c091906142c4565b6001600160a01b03871660009081526016602090815260408083209383529290522054919091109150505b9392505050565b60005460408051631cfe878d60e31b8152905133926001600160a01b03169163e7f43c689160048083019260209291908290030181865afa15801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f91906141b9565b6001600160a01b0316146108855760405162461bcd60e51b81526004016104f5906141d6565b600354604080516080808252601e908201527f696e6e6f63656e636550726f6f665375626d697373696f6e57696e646f77000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1600355565b600061090f600180541490565b1561092c5760405162461bcd60e51b81526004016104f59061428d565b5060025490565b6000610940600180541490565b1561095d5760405162461bcd60e51b81526004016104f59061428d565b506001600160a01b038082166000908152600f6020526040902054165b919050565b60005460408051631cfe878d60e31b8152905133926001600160a01b03169163e7f43c689160048083019260209291908290030181865afa1580156109c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ec91906141b9565b6001600160a01b031614610a125760405162461bcd60e51b81526004016104f5906141d6565b600e5415610a755760405162461bcd60e51b815260206004820152602a60248201527f6865696768742072616e6765206368616e676520697320616c726561647920696044820152696e2070726f677265737360b01b60648201526084016104f5565b610a806004826142f3565b15610ad95760405162461bcd60e51b8152602060048201526024808201527f6865696768742072616e6765206d7573742062652061206d756c7469706c65206044820152631bd9880d60e21b60648201526084016104f5565b600d548111610b3e5760405162461bcd60e51b815260206004820152602b60248201527f6865696768742072616e6765206e6565647320746f206265206772656174657260448201526a207468616e2064656c746160a81b60648201526084016104f5565b600580546040805160808082528101939093526472616e676560d81b60a0840152602083019190915281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1600c55565b6000806000610bb1611cb1565b6000546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016104f590614307565b610be3611ffa565b8315610bf157610bf161239c565b600e5415610c0f57600e8054906000610c0983614365565b91905055505b600554600c541115610c4957600554600c54600091610c2d9161437c565b9050610c3a60048261438f565b610c44908261437c565b600e55505b5050600c546005819055600d546004819055600e5491925090610c6c6000600155565b9193909250565b610c7b61398f565b6001805403610c9c5760405162461bcd60e51b81526004016104f59061428d565b60028281548110610caf57610caf6143a3565b600091825260209091206040805161014081019091526008909202018054829060ff166002811115610ce357610ce3613e34565b6002811115610cf457610cf4613e34565b81528154602090910190610100900460ff166009811115610d1757610d17613e34565b6009811115610d2857610d28613e34565b815281546001600160a01b0362010000909104811660208301526001830154166040820152600282018054606090920191610d62906143b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8e906143b9565b8015610ddb5780601f10610db057610100808354040283529160200191610ddb565b820191906000526020600020905b815481529060010190602001808311610dbe57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b600080610e2b600180541490565b15610e485760405162461bcd60e51b81526004016104f59061428d565b6000846009811115610e5c57610e5c613e34565b10158015610e7c57506009846009811115610e7957610e79613e34565b11155b610ec05760405162461bcd60e51b81526020600482015260156024820152741c9d5b19481a59081b5d5cdd081899481d985b1a59605a1b60448201526064016104f5565b6000610ecb85611e80565b600080546040516396b477cb60e01b81526004810188905292935090916001600160a01b03909116906396b477cb90602401602060405180830381865afa158015610f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3e91906142c4565b6001600160a01b03881660009081526016602090815260408083208484529091529020549091508211610f78576000935060009250611008565b6001600160a01b03871660009081526012602052604090205415610fff576001600160a01b038716600090815260126020526040812054600290610fbe9060019061437c565b81548110610fce57610fce6143a3565b90600052602060002090600802019050600094506003600001548160060154610ff791906143f3565b935050611008565b60019350600092505b5050935093915050565b600061101f600180541490565b1561103c5760405162461bcd60e51b81526004016104f59061428d565b506001600160a01b031660009081526011602052604090205490565b60005460408051631cfe878d60e31b8152905133926001600160a01b03169163e7f43c689160048083019260209291908290030181865afa1580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c591906141b9565b6001600160a01b0316146110eb5760405162461bcd60e51b81526004016104f5906141d6565b6110f4816126ba565b6040517feda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f90611127906009908490614406565b60405180910390a180516009556020810151600a5560400151600b55565b61114d61398f565b600180540361116e5760405162461bcd60e51b81526004016104f59061428d565b6001600160a01b0382166000908152601260205260409020546111c35760405162461bcd60e51b815260206004820152600d60248201526c37379030b1b1bab9b0ba34b7b760991b60448201526064016104f5565b6001600160a01b0382166000908152601260205260409020546002906111eb9060019061437c565b81548110610caf57610caf6143a3565b60005460408051631cfe878d60e31b8152905133926001600160a01b03169163e7f43c689160048083019260209291908290030181865afa158015611244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126891906141b9565b6001600160a01b03161461128e5760405162461bcd60e51b81526004016104f5906141d6565b611297816127c1565b6040517f6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a906112ca906006908490614406565b60405180910390a18051600655602081015160075560400151600855565b6112f0611cb1565b3360009081526015602052604090205460ff1615156001146113245760405162461bcd60e51b81526004016104f59061420d565b60408101516001600160a01b031633146113505760405162461bcd60e51b81526004016104f590614256565b60008151600281111561136557611365613e34565b146113bc5760405162461bcd60e51b815260206004820152602160248201527f77726f6e67206576656e74207479706520666f72206d69736265686176696f756044820152603960f91b60648201526084016104f5565b610693816128fe565b60006113d2600180541490565b156113ef5760405162461bcd60e51b81526004016104f59061428d565b506001600160a01b03821660009081526016602090815260408083208484529091529020545b92915050565b611423611cb1565b6000546001600160a01b0316331461144d5760405162461bcd60e51b81526004016104f590614307565b6001600160a01b038281166000908152600f602052604080822080546001600160a01b0319811690915582549151630c825d9760e11b81529084166004820181905234949093921690631904bb2e90602401600060405180830381865afa1580156114bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114e491908101906144a1565b9050831561155f57600080546020830151604051630f7fcc5160e41b81526001600160a01b039182166004820152602481018890526044810193909352169063f7fcc51090606401600060405180830381600087803b15801561154657600080fd5b505af115801561155a573d6000803e3d6000fd5b505050505b82156116df5780516040516000916001600160a01b0316906108fc90869084818181858888f193505050503d80600081146115b6576040519150601f19603f3d011682016040523d82523d6000602084013e6115bb565b606091505b50509050806116dd5760008060009054906101000a90046001600160a01b03166001600160a01b031663f7866ee36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163c91906141b9565b9050600080826001600160a01b03168760405160006040518083038185875af1925050503d806000811461168c576040519150601f19603f3d011682016040523d82523d6000602084013e611691565b606091505b5091509150816116d5577f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d35283826040516116cc929190614624565b60405180910390a15b600096505050505b505b602080820151604080516001600160a01b03928316815292830187905282018590528616907fd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e99060600160405180910390a250505061173e6000600155565b5050565b606061174f600180541490565b1561176c5760405162461bcd60e51b81526004016104f59061428d565b6001600160a01b0382166000908152601060205260408120546001600160401b0381111561179c5761179c613b76565b6040519080825280602002602001820160405280156117d557816020015b6117c261398f565b8152602001906001900390816117ba5790505b50905060005b6001600160a01b0384166000908152601060205260409020548110156119d0576001600160a01b038416600090815260106020526040902080546002919083908110611829576118296143a3565b906000526020600020015481548110611844576118446143a3565b600091825260209091206040805161014081019091526008909202018054829060ff16600281111561187857611878613e34565b600281111561188957611889613e34565b81528154602090910190610100900460ff1660098111156118ac576118ac613e34565b60098111156118bd576118bd613e34565b815281546001600160a01b03620100009091048116602083015260018301541660408201526002820180546060909201916118f7906143b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611923906143b9565b80156119705780601f1061194557610100808354040283529160200191611970565b820191906000526020600020905b81548152906001019060200180831161195357829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250508282815181106119bd576119bd6143a3565b60209081029190910101526001016117db565b5092915050565b6119df6139f5565b6001805403611a005760405162461bcd60e51b81526004016104f59061428d565b506040805160a0810182526003548152600454602080830191909152600554828401528251606081810185526006548252600754828401526008548286015280840191909152835190810184526009548152600a5491810191909152600b5492810192909252608081019190915290565b6000611a7e600180541490565b15611a9b5760405162461bcd60e51b81526004016104f59061428d565b50600e5490565b611aaa611cb1565b3360009081526015602052604090205460ff161515600114611ade5760405162461bcd60e51b81526004016104f59061420d565b60408101516001600160a01b03163314611b0a5760405162461bcd60e51b81526004016104f590614256565b600281516002811115611b1f57611b1f613e34565b14611b785760405162461bcd60e51b8152602060048201526024808201527f77726f6e67206576656e74207479706520666f7220696e6e6f63656e636520706044820152633937b7b360e11b60648201526084016104f5565b61069381612af9565b611b89611cb1565b6000546001600160a01b03163314611bb35760405162461bcd60e51b81526004016104f590614307565b611c166013805480602002602001604051908101604052809291908181526020018280548015611c0c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611bee575b5050505050612c3f565b611c796014805480602002602001604051908101604052809291908181526020018280548015611c6f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611c51575b5050505050612cd7565b60148054611c8991601391613a67565b50611c9381612cd7565b8051611ca6906014906020840190613ab7565b5061069d6000600155565b60015415611cf75760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b60448201526064016104f5565b60018055565b6000806000806000611d218660800151600360020154600360010154600e54612d89565b9450945094509450945084611d785760405162461bcd60e51b815260206004820152601e60248201527f6661696c65642061636375736174696f6e20766572696669636174696f6e000060448201526064016104f5565b85606001516001600160a01b0316846001600160a01b031614611dad5760405162461bcd60e51b81526004016104f59061465b565b85602001516009811115611dc357611dc3613e34565b8314611de15760405162461bcd60e51b81526004016104f590614686565b600080546040516396b477cb60e01b8152600481018590526001600160a01b03909116906396b477cb90602401602060405180830381865afa158015611e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4f91906142c4565b60c0880184905260e088018190524361010089015261012088018390529050611e7787612e15565b50505050505050565b60006009826009811115611e9657611e96613e34565b03611ea357600192915050565b6000826009811115611eb757611eb7613e34565b03611ec3576002611415565b6001826009811115611ed757611ed7613e34565b03611ee3576002611415565b6002826009811115611ef757611ef7613e34565b03611f03576002611415565b6003826009811115611f1757611f17613e34565b03611f23576002611415565b6004826009811115611f3757611f37613e34565b03611f43576002611415565b6005826009811115611f5757611f57613e34565b03611f63576002611415565b6006826009811115611f7757611f77613e34565b03611f83576002611415565b6007826009811115611f9757611f97613e34565b03611fa3576003611415565b6008826009811115611fb757611fb7613e34565b03611fc3576003611415565b60405162461bcd60e51b815260206004820152600c60248201526b756e6b6e6f776e2072756c6560a01b60448201526064016104f5565b6019546000805460408051636fc5351560e01b815290516001600160a01b0390921691636fc53515916004808201926020929091908290030181865afa158015612048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206c91906142c4565b90505b6018548210156123965760006018838154811061208e5761208e6143a3565b90600052602060002001549050806000036120a9575061238b565b6120b460018261437c565b90506000600282815481106120cb576120cb6143a3565b600091825260209091206040805161014081019091526008909202018054829060ff1660028111156120ff576120ff613e34565b600281111561211057612110613e34565b81528154602090910190610100900460ff16600981111561213357612133613e34565b600981111561214457612144613e34565b815281546001600160a01b036201000090910481166020830152600183015416604082015260028201805460609092019161217e906143b9565b80601f01602080910402602001604051908101604052809291908181526020018280546121aa906143b9565b80156121f75780601f106121cc576101008083540402835291602001916121f7565b820191906000526020600020905b8154815290600101906020018083116121da57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505090504360036000015482610100015161224b91906143f3565b1115612258575050612396565b60608101516001600160a01b03166000908152601260209081526040822082905582015161228590611e80565b60608301516001600160a01b0316600090815260166020908152604080832060e0870151845290915290205490915081116122c25750505061238b565b606082810180516001600160a01b03908116600090815260166020908152604080832060e08901518452825280832087905584518416835260108252808320805460018082018355918552838520018a90556017805491820181559093527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159092018890559251815186815293840188905290830188905216917f5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7910160405180910390a25050505b60019091019061206f565b50601955565b6000805460408051636fc5351560e01b8152905183926001600160a01b031691636fc535159160048083019260209291908290030181865afa1580156123e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240a91906142c4565b905060005b601754811015612477578160026017838154811061242f5761242f6143a3565b90600052602060002001548154811061244a5761244a6143a3565b9060005260206000209060080201600501540361246f5761246c6001846143f3565b92505b60010161240f565b5060008060009054906101000a90046001600160a01b03166001600160a01b0316630aac2da16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f091906142c4565b905060005b6017548110156126a8576126a0600260178381548110612517576125176143a3565b906000526020600020015481548110612532576125326143a3565b600091825260209091206040805161014081019091526008909202018054829060ff16600281111561256657612566613e34565b600281111561257757612577613e34565b81528154602090910190610100900460ff16600981111561259a5761259a613e34565b60098111156125ab576125ab613e34565b815281546001600160a01b03620100009091048116602083015260018301541660408201526002820180546060909201916125e5906143b9565b80601f0160208091040260200160405190810160405280929190818152602001828054612611906143b9565b801561265e5780601f106126335761010080835404028352916020019161265e565b820191906000526020600020905b81548152906001019060200180831161264157829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050858461309e565b6001016124f5565b506126b560176000613b0c565b505050565b6126c66004600a614797565b8151111561273c5760405162461bcd60e51b815260206004820152603960248201527f636f6c6c7573696f6e20666163746f722063616e6e6f7420657863656564207360448201527f6c617368696e672072617465207363616c6520666163746f720000000000000060648201526084016104f5565b6127486004600a614797565b8160200151111561069d5760405162461bcd60e51b815260206004820152603760248201527f686973746f727920666163746f722063616e6e6f742065786365656420736c6160448201527f7368696e672072617465207363616c6520666163746f7200000000000000000060648201526084016104f5565b6020810151815111156128225760405162461bcd60e51b8152602060048201526024808201527f736c617368696e6720726174653a206c6f772063616e6e6f7420657863656564604482015263081b5a5960e21b60648201526084016104f5565b8060400151816020015111156128885760405162461bcd60e51b815260206004820152602560248201527f736c617368696e6720726174653a206d69642063616e6e6f7420657863656564604482015264040d0d2ced60db1b60648201526084016104f5565b6128946004600a614797565b8160400151111561069d5760405162461bcd60e51b815260206004820152602e60248201527f736c617368696e6720726174653a20686967682063616e6e6f7420657863656560448201526d321039b1b0b632903330b1ba37b960911b60648201526084016104f5565b600080600080600061291560fe8760800151613319565b945094509450945094508461296c5760405162461bcd60e51b815260206004820152601960248201527f6661696c65642070726f6f6620766572696669636174696f6e0000000000000060448201526064016104f5565b85606001516001600160a01b0316846001600160a01b0316146129a15760405162461bcd60e51b81526004016104f59061465b565b856020015160098111156129b7576129b7613e34565b83146129d55760405162461bcd60e51b81526004016104f590614686565b438210612a1d5760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b60448201526064016104f5565b60008211612a635760405162461bcd60e51b815260206004820152601360248201527263616e27742062652061742067656e6573697360681b60448201526064016104f5565b600080546040516396b477cb60e01b8152600481018590526001600160a01b03909116906396b477cb90602401602060405180830381865afa158015612aad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad191906142c4565b60c0880184905260e088018190524361010089015261012088018390529050611e7787613372565b6000806000806000612b1060fd8760800151613319565b9450945094509450945084612b675760405162461bcd60e51b815260206004820152601d60248201527f6661696c656420696e6e6f63656e636520766572696669636174696f6e00000060448201526064016104f5565b85606001516001600160a01b0316846001600160a01b031614612b9c5760405162461bcd60e51b81526004016104f59061465b565b85602001516009811115612bb257612bb2613e34565b8314612bd05760405162461bcd60e51b81526004016104f590614686565b438210612c185760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b60448201526064016104f5565b60c08601829052610120860181905243610100870152612c3786613624565b505050505050565b60005b815181101561173e5760156000838381518110612c6157612c616143a3565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615612ccf5760156000838381518110612ca357612ca36143a3565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191690555b600101612c42565b60005b815181101561173e5760156000838381518110612cf957612cf96143a3565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161515600114612d8157600160156000848481518110612d4157612d416143a3565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600101612cda565b60008060008060008060fc905060008989898d604051602001612daf94939291906147a3565b6040516020818303038152906040529050612dc8613b2a565b60a081835160208501865afa612ddd57600080fd5b8051600103612deb57600197505b602081015160408201516060830151608090930151999e919d509b50909950969750505050505050565b60608101516001600160a01b031660009081526012602052604090205415612e7f5760405162461bcd60e51b815260206004820181905260248201527f616c72656164792070726f63657373696e6720616e2061636375736174696f6e60448201526064016104f5565b6000612e8e8260200151611e80565b60608301516001600160a01b0316600090815260166020908152604080832060e087015184529091529020549091508111612edb5760405162461bcd60e51b81526004016104f5906147d7565b6002805460a08401819052600180820183556000839052845160089092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180548694919392849260ff19909216918490811115612f3c57612f3c613e34565b021790555060208201518154829061ff001916610100836009811115612f6457612f64613e34565b02179055506040820151815462010000600160b01b031916620100006001600160a01b039283160217825560608301516001830180546001600160a01b0319169190921617905560808201516002820190612fbf9082614869565b5060a082810151600383015560c0830151600483015560e083015160058301556101008301516006830155610120909201516007909101558201516130059060016143f3565b60608301516001600160a01b031660009081526012602052604090205560a08201516018906130359060016143f3565b815460018101835560009283526020928390200155606083015160a084015160408051858152938401919091526001600160a01b03909116917f2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba4035191015b60405180910390a25050565b60608301516040808501516001600160a01b038084166000818152600f60205284812080549484166001600160a01b03199095169490941790935591549251632dbeb61b60e11b815260048101929092526003921690635b7d6c3690602401602060405180830381865afa15801561311a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313e9190614927565b600581111561314f5761314f613e34565b0361315a5750505050565b600061317161316c8660200151611e80565b613922565b600a546001600160a01b0384166000908152601160205260408120549293509161319b9190614942565b6009546131a89087614942565b6131b290846143f3565b6131bc91906143f3565b6001600160a01b038416600090815260116020526040812080549293506001929091906131ea9084906143f3565b90915550506001600160a01b038316600090815260116020526040812054600b54869161321691614942565b6132209190614942565b60008054604051630915a09160e11b81529293509091829182916001600160a01b039091169063122b412290613264908a9089908990600290600390600401614969565b6060604051808303816000875af1158015613283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a791906149ab565b60a0808e0151604080516001600160a01b038e168152602081018790529081018590528315156060820152608081019190915293965091945092507f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9910160405180910390a150505050505050505050565b6000806000806000613329613b2a565b60a081885160208a018b5afa61333e57600080fd5b805160010361334c57600195505b602081015160408201516060830151608090930151979a91995097509095945092505050565b60006133818260200151611e80565b60608301516001600160a01b0316600090815260166020908152604080832060e0870151845290915290205490915081116133ce5760405162461bcd60e51b81526004016104f5906147d7565b6002805460a08401819052600180820183556000839052845160089092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180548694919392849260ff1990921691849081111561342f5761342f613e34565b021790555060208201518154829061ff00191661010083600981111561345757613457613e34565b02179055506040820151815462010000600160b01b031916620100006001600160a01b039283160217825560608301516001830180546001600160a01b03191691909216179055608082015160028201906134b29082614869565b5060a082810151600383015560c083015160048084019190915560e08085015160058501556101008501516006850155610120909401516007909301929092556060850180516001600160a01b039081166000908152601060209081526040808320958a018051875460018181018a559886528486200155805160178054988901815585527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159097019690965584518416835260168252808320978a015183529681528682208890559251935190548651636fc5351560e01b81529651948316967f5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d796899693959290941693636fc535159382820193929091908290030181865afa1580156135e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360991906142c4565b60408051938452602084019290925290820152606001613092565b60608101516001600160a01b0316600090815260126020526040812054908190036136915760405162461bcd60e51b815260206004820152601860248201527f6e6f206173736f6369617465642061636375736174696f6e000000000000000060448201526064016104f5565b816020015160098111156136a7576136a7613e34565b60026136b460018461437c565b815481106136c4576136c46143a3565b6000918252602090912060089091020154610100900460ff1660098111156136ee576136ee613e34565b1461374b5760405162461bcd60e51b815260206004820152602760248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152661c9d5b19481a5960ca1b60648201526084016104f5565b60c0820151600261375d60018461437c565b8154811061376d5761376d6143a3565b906000526020600020906008020160040154146137da5760405162461bcd60e51b815260206004820152602560248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e20604482015264626c6f636b60d81b60648201526084016104f5565b61012082015160026137ed60018461437c565b815481106137fd576137fd6143a3565b906000526020600020906008020160070154146138685760405162461bcd60e51b8152602060048201526024808201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152630d0c2e6d60e31b60648201526084016104f5565b6019545b6018548110156138c857816018828154811061388a5761388a6143a3565b9060005260206000200154036138c0576000601882815481106138af576138af6143a3565b6000918252602090912001556138c8565b60010161386c565b506060820180516001600160a01b0390811660009081526012602090815260408083208390559351935191825292909116917f1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f9101613092565b60006001820361393457505060065490565b6002820361394457505060075490565b6003820361395457505060085490565b60405162461bcd60e51b815260206004820152601060248201526f756e6b6e6f776e20736576657269747960801b60448201526064016104f5565b60408051610140810190915280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a00160405280600081526020016000815260200160008152602001613a3960405180606001604052806000815260200160008152602001600081525090565b8152602001613a6260405180606001604052806000815260200160008152602001600081525090565b905290565b828054828255906000526020600020908101928215613aa75760005260206000209182015b82811115613aa7578254825591600101919060010190613a8c565b50613ab3929150613b48565b5090565b828054828255906000526020600020908101928215613aa7579160200282015b82811115613aa757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613ad7565b508054600082559060005260206000209081019061069d9190613b48565b6040518060a001604052806005906020820280368337509192915050565b5b80821115613ab35760008155600101613b49565b600060208284031215613b6f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613baf57613baf613b76565b60405290565b60405161028081016001600160401b0381118282101715613baf57613baf613b76565b604051601f8201601f191681016001600160401b0381118282101715613c0057613c00613b76565b604052919050565b80356003811061097a57600080fd5b8035600a811061097a57600080fd5b6001600160a01b038116811461069d57600080fd5b803561097a81613c26565b60006001600160401b03821115613c5f57613c5f613b76565b50601f01601f191660200190565b600082601f830112613c7e57600080fd5b8135613c91613c8c82613c46565b613bd8565b818152846020838601011115613ca657600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613cd557600080fd5b81356001600160401b03811115613ceb57600080fd5b82016101408185031215613cfe57600080fd5b613d06613b8c565b613d0f82613c08565b8152613d1d60208301613c17565b6020820152613d2e60408301613c3b565b6040820152613d3f60608301613c3b565b606082015260808201356001600160401b03811115613d5d57600080fd5b613d6986828501613c6d565b60808301525060a0828101359082015260c0808301359082015260e08083013590820152610100808301359082015261012091820135918101919091529392505050565b600080600060608486031215613dc257600080fd5b8335613dcd81613c26565b9250613ddb60208501613c17565b929592945050506040919091013590565b600060208284031215613dfe57600080fd5b81356107eb81613c26565b801515811461069d57600080fd5b600060208284031215613e2957600080fd5b81356107eb81613e09565b634e487b7160e01b600052602160045260246000fd5b60038110613e5a57613e5a613e34565b9052565b600a8110613e5a57613e5a613e34565b60005b83811015613e89578181015183820152602001613e71565b50506000910152565b60008151808452613eaa816020860160208601613e6e565b601f01601f19169290920160200192915050565b613ec9828251613e4a565b60006020820151613edd6020850182613e5e565b506040820151613ef860408501826001600160a01b03169052565b506060820151613f1360608501826001600160a01b03169052565b5060808201516101406080850152613f2f610140850182613e92565b905060a083015160a085015260c083015160c085015260e083015160e08501526101008301516101008501526101208301516101208501528091505092915050565b6020815260006107eb6020830184613ebe565b600060608284031215613f9657600080fd5b604051606081016001600160401b0381118282101715613fb857613fb8613b76565b60409081528335825260208085013590830152928301359281019290925250919050565b600060608284031215613fee57600080fd5b6107eb8383613f84565b6000806040838503121561400b57600080fd5b823561401681613c26565b946020939093013593505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561407d57603f19878603018452614068858351613ebe565b9450602093840193919091019060010161404c565b50929695505050505050565b60006101208201905082518252602083015160208301526040830151604083015260608301516140d060608401828051825260208082015190830152604090810151910152565b5060809290920151805160c0830152602081015160e0830152604001516101009091015290565b60006020828403121561410957600080fd5b81356001600160401b0381111561411f57600080fd5b8201601f8101841361413057600080fd5b80356001600160401b0381111561414957614149613b76565b8060051b61415960208201613bd8565b9182526020818401810192908101908784111561417557600080fd5b6020850194505b838510156141a3578435925061419183613c26565b8282526020948501949091019061417c565b979650505050505050565b805161097a81613c26565b6000602082840312156141cb57600080fd5b81516107eb81613c26565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526029908201527f66756e6374696f6e207265737472696374656420746f206120636f6d6d69747460408201526832b29036b2b6b132b960b91b606082015260800190565b6020808252601d908201527f6576656e74207265706f72746572206d7573742062652063616c6c6572000000604082015260600190565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b6000602082840312156142d657600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b600082614302576143026142dd565b500690565b60208082526028908201527f66756e6374696f6e207265737472696374656420746f204175746f6e6974792060408201526718dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000816143745761437461434f565b506000190190565b818103818111156114155761141561434f565b60008261439e5761439e6142dd565b500490565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806143cd57607f821691505b6020821081036143ed57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156114155761141561434f565b82548152600183015460208201526002830154604082015260c081018251606083015260208301516080830152604083015160a08301526107eb565b600082601f83011261445357600080fd5b8151602083016000614467613c8c84613c46565b905082815285838301111561447b57600080fd5b614489836020830184613e6e565b95945050505050565b80516006811061097a57600080fd5b6000602082840312156144b357600080fd5b81516001600160401b038111156144c957600080fd5b820161028081850312156144dc57600080fd5b6144e4613bb5565b6144ed826141ae565b81526144fb602083016141ae565b602082015261450c604083016141ae565b604082015260608201516001600160401b0381111561452a57600080fd5b61453686828501614442565b6060830152506080828101519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261459d61018083016141ae565b6101808201526101a082810151908201526101c080830151908201526101e0808301519082015261020080830151908201526102208201516001600160401b038111156145e957600080fd5b6145f586828501614442565b610220830152506146096102408301614492565b61024082015261026091820151918101919091529392505050565b60018060a01b038316815260606020820152600060608201526080604082015260006146536080830184613e92565b949350505050565b6020808252601190820152700decccccadcc8cae440dad2e6dac2e8c6d607b1b604082015260600190565b60208082526010908201526f0e4ead8ca40d2c840dad2e6dac2e8c6d60831b604082015260600190565b6001815b60018411156146eb578085048111156146cf576146cf61434f565b60018416156146dd57908102905b60019390931c9280026146b4565b935093915050565b60008261470257506001611415565b8161470f57506000611415565b8160018114614725576002811461472f5761474b565b6001915050611415565b60ff8411156147405761474061434f565b50506001821b611415565b5060208310610133831016604e8410600b841016171561476e575081810a611415565b61477b60001984846146b0565b806000190482111561478f5761478f61434f565b029392505050565b60006107eb83836146f3565b848152836020820152826040820152600082516147c7816060850160208701613e6e565b9190910160600195945050505050565b60208082526024908201527f616c726561647920736c6173686564206174207468652070726f6f66277320656040820152630e0dec6d60e31b606082015260800190565b601f8211156126b557806000526020600020601f840160051c810160208510156148425750805b601f840160051c820191505b81811015614862576000815560010161484e565b5050505050565b81516001600160401b0381111561488257614882613b76565b6148968161489084546143b9565b8461481b565b6020601f8211600181146148ca57600083156148b25750848201515b600019600385901b1c1916600184901b178455614862565b600084815260208120601f198516915b828110156148fa57878501518255602094850194600190920191016148da565b50848210156149185786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561493957600080fd5b6107eb82614492565b80820281158282048414176114155761141561434f565b60068110613e5a57613e5a613e34565b6001600160a01b0386168152602081018590526040810184905260a081016149946060830185614959565b6149a16080830184614959565b9695505050505050565b6000806000606084860312156149c057600080fd5b83516020850151604086015191945092506149da81613e09565b80915050925092509256fea264697066735822122089622e3aab3e9084768ff8dc62ed7350b56a56d044c3b084c3d94a55d3d55b6164736f6c634300081e0033",
}

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

// Deprecated: Use AccountabilityMetaData.Sigs instead.
// AccountabilityFuncSigs maps the 4-byte function signature to its string representation.
var AccountabilityFuncSigs = AccountabilityMetaData.Sigs

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

// DeployAccountability deploys a new Ethereum contract, binding an instance of Accountability to it.
func DeployAccountability(auth *bind.TransactOpts, backend bind.ContractBackend, _autonity common.Address, _config IAccountabilityConfig) (common.Address, *types.Transaction, *Accountability, error) {
	parsed, err := AccountabilityMetaData.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(AccountabilityBin), backend, _autonity, _config)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Accountability{AccountabilityCaller: AccountabilityCaller{contract: contract}, AccountabilityTransactor: AccountabilityTransactor{contract: contract}, AccountabilityFilterer: AccountabilityFilterer{contract: contract}}, nil
}

// Accountability is an auto generated Go binding around an Ethereum contract.
type Accountability struct {
	AccountabilityCaller     // Read-only binding to the contract
	AccountabilityTransactor // Write-only binding to the contract
	AccountabilityFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewAccountability creates a new instance of Accountability, bound to a specific deployed contract.
func NewAccountability(address common.Address, backend bind.ContractBackend) (*Accountability, error) {
	contract, err := bindAccountability(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Accountability{AccountabilityCaller: AccountabilityCaller{contract: contract}, AccountabilityTransactor: AccountabilityTransactor{contract: contract}, AccountabilityFilterer: AccountabilityFilterer{contract: contract}}, nil
}

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

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

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

// bindAccountability binds a generic wrapper to an already deployed contract.
func bindAccountability(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(AccountabilityABI))
	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 (_Accountability *AccountabilityRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Accountability.Contract.AccountabilityCaller.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 (_Accountability *AccountabilityRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Accountability.Contract.AccountabilityTransactor.contract.Transfer(opts)
}

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

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

// CanAccuse is a free data retrieval call binding the contract method 0x7ccecadd.
//
// Solidity: function canAccuse(address _offender, uint8 _rule, uint256 _block) view returns(bool _result, uint256 _deadline)
func (_Accountability *AccountabilityCaller) CanAccuse(opts *bind.CallOpts, _offender common.Address, _rule uint8, _block *big.Int) (struct {
	Result   bool
	Deadline *big.Int
}, error) {
	var out []interface{}
	err := _Accountability.contract.Call(opts, &out, "canAccuse", _offender, _rule, _block)

	outstruct := new(struct {
		Result   bool
		Deadline *big.Int
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.Result = *abi.ConvertType(out[0], new(bool)).(*bool)
	outstruct.Deadline = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)

	return *outstruct, err

}

// CanAccuse is a free data retrieval call binding the contract method 0x7ccecadd.
//
// Solidity: function canAccuse(address _offender, uint8 _rule, uint256 _block) view returns(bool _result, uint256 _deadline)
func (_Accountability *AccountabilitySession) CanAccuse(_offender common.Address, _rule uint8, _block *big.Int) (struct {
	Result   bool
	Deadline *big.Int
}, error) {
	return _Accountability.Contract.CanAccuse(&_Accountability.CallOpts, _offender, _rule, _block)
}

// CanAccuse is a free data retrieval call binding the contract method 0x7ccecadd.
//
// Solidity: function canAccuse(address _offender, uint8 _rule, uint256 _block) view returns(bool _result, uint256 _deadline)
func (_Accountability *AccountabilityCallerSession) CanAccuse(_offender common.Address, _rule uint8, _block *big.Int) (struct {
	Result   bool
	Deadline *big.Int
}, error) {
	return _Accountability.Contract.CanAccuse(&_Accountability.CallOpts, _offender, _rule, _block)
}

// CanSlash is a free data retrieval call binding the contract method 0x4108a95a.
//
// Solidity: function canSlash(address _offender, uint8 _rule, uint256 _block) view returns(bool)
func (_Accountability *AccountabilityCaller) CanSlash(opts *bind.CallOpts, _offender common.Address, _rule uint8, _block *big.Int) (bool, error) {
	var out []interface{}
	err := _Accountability.contract.Call(opts, &out, "canSlash", _offender, _rule, _block)

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

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

	return out0, err

}

// CanSlash is a free data retrieval call binding the contract method 0x4108a95a.
//
// Solidity: function canSlash(address _offender, uint8 _rule, uint256 _block) view returns(bool)
func (_Accountability *AccountabilitySession) CanSlash(_offender common.Address, _rule uint8, _block *big.Int) (bool, error) {
	return _Accountability.Contract.CanSlash(&_Accountability.CallOpts, _offender, _rule, _block)
}

// CanSlash is a free data retrieval call binding the contract method 0x4108a95a.
//
// Solidity: function canSlash(address _offender, uint8 _rule, uint256 _block) view returns(bool)
func (_Accountability *AccountabilityCallerSession) CanSlash(_offender common.Address, _rule uint8, _block *big.Int) (bool, error) {
	return _Accountability.Contract.CanSlash(&_Accountability.CallOpts, _offender, _rule, _block)
}

// GetBeneficiary is a free data retrieval call binding the contract method 0x505a1b31.
//
// Solidity: function getBeneficiary(address _offender) view returns(address)
func (_Accountability *AccountabilityCaller) GetBeneficiary(opts *bind.CallOpts, _offender common.Address) (common.Address, error) {
	var out []interface{}
	err := _Accountability.contract.Call(opts, &out, "getBeneficiary", _offender)

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

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

	return out0, err

}

// GetBeneficiary is a free data retrieval call binding the contract method 0x505a1b31.
//
// Solidity: function getBeneficiary(address _offender) view returns(address)
func (_Accountability *AccountabilitySession) GetBeneficiary(_offender common.Address) (common.Address, error) {
	return _Accountability.Contract.GetBeneficiary(&_Accountability.CallOpts, _offender)
}

// GetBeneficiary is a free data retrieval call binding the contract method 0x505a1b31.
//
// Solidity: function getBeneficiary(address _offender) view returns(address)
func (_Accountability *AccountabilityCallerSession) GetBeneficiary(_offender common.Address) (common.Address, error) {
	return _Accountability.Contract.GetBeneficiary(&_Accountability.CallOpts, _offender)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256)))
func (_Accountability *AccountabilityCaller) GetConfig(opts *bind.CallOpts) (IAccountabilityConfig, error) {
	var out []interface{}
	err := _Accountability.contract.Call(opts, &out, "getConfig")

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

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

	return out0, err

}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256)))
func (_Accountability *AccountabilitySession) GetConfig() (IAccountabilityConfig, error) {
	return _Accountability.Contract.GetConfig(&_Accountability.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256)))
func (_Accountability *AccountabilityCallerSession) GetConfig() (IAccountabilityConfig, error) {
	return _Accountability.Contract.GetConfig(&_Accountability.CallOpts)
}

// GetEvent is a free data retrieval call binding the contract method 0x6d1884e0.
//
// Solidity: function getEvent(uint256 _id) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_Accountability *AccountabilityCaller) GetEvent(opts *bind.CallOpts, _id *big.Int) (IAccountabilityEvent, error) {
	var out []interface{}
	err := _Accountability.contract.Call(opts, &out, "getEvent", _id)

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

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

	return out0, err

}

// GetEvent is a free data retrieval call binding the contract method 0x6d1884e0.
//
// Solidity: function getEvent(uint256 _id) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_Accountability *AccountabilitySession) GetEvent(_id *big.Int) (IAccountabilityEvent, error) {
	return _Accountability.Contract.GetEvent(&_Accountability.CallOpts, _id)
}

// GetEvent is a free data retrieval call binding the contract method 0x6d1884e0.
//
// Solidity: function getEvent(uint256 _id) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_Accountability *AccountabilityCallerSession) GetEvent(_id *big.Int) (IAccountabilityEvent, error) {
	return _Accountability.Contract.GetEvent(&_Accountability.CallOpts, _id)
}

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

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

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

	return out0, err

}

// GetEventsLength is a free data retrieval call binding the contract method 0x47fc216e.
//
// Solidity: function getEventsLength() view returns(uint256)
func (_Accountability *AccountabilitySession) GetEventsLength() (*big.Int, error) {
	return _Accountability.Contract.GetEventsLength(&_Accountability.CallOpts)
}

// GetEventsLength is a free data retrieval call binding the contract method 0x47fc216e.
//
// Solidity: function getEventsLength() view returns(uint256)
func (_Accountability *AccountabilityCallerSession) GetEventsLength() (*big.Int, error) {
	return _Accountability.Contract.GetEventsLength(&_Accountability.CallOpts)
}

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

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

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

	return out0, err

}

// GetGracePeriod is a free data retrieval call binding the contract method 0xdbd18388.
//
// Solidity: function getGracePeriod() view returns(uint256)
func (_Accountability *AccountabilitySession) GetGracePeriod() (*big.Int, error) {
	return _Accountability.Contract.GetGracePeriod(&_Accountability.CallOpts)
}

// GetGracePeriod is a free data retrieval call binding the contract method 0xdbd18388.
//
// Solidity: function getGracePeriod() view returns(uint256)
func (_Accountability *AccountabilityCallerSession) GetGracePeriod() (*big.Int, error) {
	return _Accountability.Contract.GetGracePeriod(&_Accountability.CallOpts)
}

// GetHistory is a free data retrieval call binding the contract method 0x80396811.
//
// Solidity: function getHistory(address _validator) view returns(uint256)
func (_Accountability *AccountabilityCaller) GetHistory(opts *bind.CallOpts, _validator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _Accountability.contract.Call(opts, &out, "getHistory", _validator)

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

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

	return out0, err

}

// GetHistory is a free data retrieval call binding the contract method 0x80396811.
//
// Solidity: function getHistory(address _validator) view returns(uint256)
func (_Accountability *AccountabilitySession) GetHistory(_validator common.Address) (*big.Int, error) {
	return _Accountability.Contract.GetHistory(&_Accountability.CallOpts, _validator)
}

// GetHistory is a free data retrieval call binding the contract method 0x80396811.
//
// Solidity: function getHistory(address _validator) view returns(uint256)
func (_Accountability *AccountabilityCallerSession) GetHistory(_validator common.Address) (*big.Int, error) {
	return _Accountability.Contract.GetHistory(&_Accountability.CallOpts, _validator)
}

// GetSlashingHistory is a free data retrieval call binding the contract method 0xa6b0aaae.
//
// Solidity: function getSlashingHistory(address _validator, uint256 _epoch) view returns(uint256)
func (_Accountability *AccountabilityCaller) GetSlashingHistory(opts *bind.CallOpts, _validator common.Address, _epoch *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Accountability.contract.Call(opts, &out, "getSlashingHistory", _validator, _epoch)

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

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

	return out0, err

}

// GetSlashingHistory is a free data retrieval call binding the contract method 0xa6b0aaae.
//
// Solidity: function getSlashingHistory(address _validator, uint256 _epoch) view returns(uint256)
func (_Accountability *AccountabilitySession) GetSlashingHistory(_validator common.Address, _epoch *big.Int) (*big.Int, error) {
	return _Accountability.Contract.GetSlashingHistory(&_Accountability.CallOpts, _validator, _epoch)
}

// GetSlashingHistory is a free data retrieval call binding the contract method 0xa6b0aaae.
//
// Solidity: function getSlashingHistory(address _validator, uint256 _epoch) view returns(uint256)
func (_Accountability *AccountabilityCallerSession) GetSlashingHistory(_validator common.Address, _epoch *big.Int) (*big.Int, error) {
	return _Accountability.Contract.GetSlashingHistory(&_Accountability.CallOpts, _validator, _epoch)
}

// GetValidatorAccusation is a free data retrieval call binding the contract method 0x9cb22b06.
//
// Solidity: function getValidatorAccusation(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_Accountability *AccountabilityCaller) GetValidatorAccusation(opts *bind.CallOpts, _val common.Address) (IAccountabilityEvent, error) {
	var out []interface{}
	err := _Accountability.contract.Call(opts, &out, "getValidatorAccusation", _val)

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

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

	return out0, err

}

// GetValidatorAccusation is a free data retrieval call binding the contract method 0x9cb22b06.
//
// Solidity: function getValidatorAccusation(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_Accountability *AccountabilitySession) GetValidatorAccusation(_val common.Address) (IAccountabilityEvent, error) {
	return _Accountability.Contract.GetValidatorAccusation(&_Accountability.CallOpts, _val)
}

// GetValidatorAccusation is a free data retrieval call binding the contract method 0x9cb22b06.
//
// Solidity: function getValidatorAccusation(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_Accountability *AccountabilityCallerSession) GetValidatorAccusation(_val common.Address) (IAccountabilityEvent, error) {
	return _Accountability.Contract.GetValidatorAccusation(&_Accountability.CallOpts, _val)
}

// GetValidatorFaults is a free data retrieval call binding the contract method 0xbebaa8fc.
//
// Solidity: function getValidatorFaults(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256)[])
func (_Accountability *AccountabilityCaller) GetValidatorFaults(opts *bind.CallOpts, _val common.Address) ([]IAccountabilityEvent, error) {
	var out []interface{}
	err := _Accountability.contract.Call(opts, &out, "getValidatorFaults", _val)

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

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

	return out0, err

}

// GetValidatorFaults is a free data retrieval call binding the contract method 0xbebaa8fc.
//
// Solidity: function getValidatorFaults(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256)[])
func (_Accountability *AccountabilitySession) GetValidatorFaults(_val common.Address) ([]IAccountabilityEvent, error) {
	return _Accountability.Contract.GetValidatorFaults(&_Accountability.CallOpts, _val)
}

// GetValidatorFaults is a free data retrieval call binding the contract method 0xbebaa8fc.
//
// Solidity: function getValidatorFaults(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256)[])
func (_Accountability *AccountabilityCallerSession) GetValidatorFaults(_val common.Address) ([]IAccountabilityEvent, error) {
	return _Accountability.Contract.GetValidatorFaults(&_Accountability.CallOpts, _val)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d.
//
// Solidity: function distributeRewards(address _offender, uint256 _ntnReward) payable returns()
func (_Accountability *AccountabilityTransactor) DistributeRewards(opts *bind.TransactOpts, _offender common.Address, _ntnReward *big.Int) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "distributeRewards", _offender, _ntnReward)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d.
//
// Solidity: function distributeRewards(address _offender, uint256 _ntnReward) payable returns()
func (_Accountability *AccountabilitySession) DistributeRewards(_offender common.Address, _ntnReward *big.Int) (*types.Transaction, error) {
	return _Accountability.Contract.DistributeRewards(&_Accountability.TransactOpts, _offender, _ntnReward)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d.
//
// Solidity: function distributeRewards(address _offender, uint256 _ntnReward) payable returns()
func (_Accountability *AccountabilityTransactorSession) DistributeRewards(_offender common.Address, _ntnReward *big.Int) (*types.Transaction, error) {
	return _Accountability.Contract.DistributeRewards(&_Accountability.TransactOpts, _offender, _ntnReward)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnd) returns(uint256, uint256, uint256)
func (_Accountability *AccountabilityTransactor) Finalize(opts *bind.TransactOpts, _epochEnd bool) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "finalize", _epochEnd)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnd) returns(uint256, uint256, uint256)
func (_Accountability *AccountabilitySession) Finalize(_epochEnd bool) (*types.Transaction, error) {
	return _Accountability.Contract.Finalize(&_Accountability.TransactOpts, _epochEnd)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnd) returns(uint256, uint256, uint256)
func (_Accountability *AccountabilityTransactorSession) Finalize(_epochEnd bool) (*types.Transaction, error) {
	return _Accountability.Contract.Finalize(&_Accountability.TransactOpts, _epochEnd)
}

// HandleAccusation is a paid mutator transaction binding the contract method 0x1e85f2e5.
//
// Solidity: function handleAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_Accountability *AccountabilityTransactor) HandleAccusation(opts *bind.TransactOpts, _event IAccountabilityEvent) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "handleAccusation", _event)
}

// HandleAccusation is a paid mutator transaction binding the contract method 0x1e85f2e5.
//
// Solidity: function handleAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_Accountability *AccountabilitySession) HandleAccusation(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _Accountability.Contract.HandleAccusation(&_Accountability.TransactOpts, _event)
}

// HandleAccusation is a paid mutator transaction binding the contract method 0x1e85f2e5.
//
// Solidity: function handleAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_Accountability *AccountabilityTransactorSession) HandleAccusation(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _Accountability.Contract.HandleAccusation(&_Accountability.TransactOpts, _event)
}

// HandleInnocenceProof is a paid mutator transaction binding the contract method 0xe05f8786.
//
// Solidity: function handleInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_Accountability *AccountabilityTransactor) HandleInnocenceProof(opts *bind.TransactOpts, _event IAccountabilityEvent) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "handleInnocenceProof", _event)
}

// HandleInnocenceProof is a paid mutator transaction binding the contract method 0xe05f8786.
//
// Solidity: function handleInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_Accountability *AccountabilitySession) HandleInnocenceProof(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _Accountability.Contract.HandleInnocenceProof(&_Accountability.TransactOpts, _event)
}

// HandleInnocenceProof is a paid mutator transaction binding the contract method 0xe05f8786.
//
// Solidity: function handleInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_Accountability *AccountabilityTransactorSession) HandleInnocenceProof(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _Accountability.Contract.HandleInnocenceProof(&_Accountability.TransactOpts, _event)
}

// HandleMisbehaviour is a paid mutator transaction binding the contract method 0xa48a9b50.
//
// Solidity: function handleMisbehaviour((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_Accountability *AccountabilityTransactor) HandleMisbehaviour(opts *bind.TransactOpts, _event IAccountabilityEvent) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "handleMisbehaviour", _event)
}

// HandleMisbehaviour is a paid mutator transaction binding the contract method 0xa48a9b50.
//
// Solidity: function handleMisbehaviour((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_Accountability *AccountabilitySession) HandleMisbehaviour(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _Accountability.Contract.HandleMisbehaviour(&_Accountability.TransactOpts, _event)
}

// HandleMisbehaviour is a paid mutator transaction binding the contract method 0xa48a9b50.
//
// Solidity: function handleMisbehaviour((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_Accountability *AccountabilityTransactorSession) HandleMisbehaviour(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _Accountability.Contract.HandleMisbehaviour(&_Accountability.TransactOpts, _event)
}

// SetBaseSlashingRates is a paid mutator transaction binding the contract method 0xa2652078.
//
// Solidity: function setBaseSlashingRates((uint256,uint256,uint256) _rates) returns()
func (_Accountability *AccountabilityTransactor) SetBaseSlashingRates(opts *bind.TransactOpts, _rates IAccountabilityBaseSlashingRates) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "setBaseSlashingRates", _rates)
}

// SetBaseSlashingRates is a paid mutator transaction binding the contract method 0xa2652078.
//
// Solidity: function setBaseSlashingRates((uint256,uint256,uint256) _rates) returns()
func (_Accountability *AccountabilitySession) SetBaseSlashingRates(_rates IAccountabilityBaseSlashingRates) (*types.Transaction, error) {
	return _Accountability.Contract.SetBaseSlashingRates(&_Accountability.TransactOpts, _rates)
}

// SetBaseSlashingRates is a paid mutator transaction binding the contract method 0xa2652078.
//
// Solidity: function setBaseSlashingRates((uint256,uint256,uint256) _rates) returns()
func (_Accountability *AccountabilityTransactorSession) SetBaseSlashingRates(_rates IAccountabilityBaseSlashingRates) (*types.Transaction, error) {
	return _Accountability.Contract.SetBaseSlashingRates(&_Accountability.TransactOpts, _rates)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe08b14ed.
//
// Solidity: function setCommittee(address[] _newCommittee) returns()
func (_Accountability *AccountabilityTransactor) SetCommittee(opts *bind.TransactOpts, _newCommittee []common.Address) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "setCommittee", _newCommittee)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe08b14ed.
//
// Solidity: function setCommittee(address[] _newCommittee) returns()
func (_Accountability *AccountabilitySession) SetCommittee(_newCommittee []common.Address) (*types.Transaction, error) {
	return _Accountability.Contract.SetCommittee(&_Accountability.TransactOpts, _newCommittee)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe08b14ed.
//
// Solidity: function setCommittee(address[] _newCommittee) returns()
func (_Accountability *AccountabilityTransactorSession) SetCommittee(_newCommittee []common.Address) (*types.Transaction, error) {
	return _Accountability.Contract.SetCommittee(&_Accountability.TransactOpts, _newCommittee)
}

// SetDelta is a paid mutator transaction binding the contract method 0x025ff0a5.
//
// Solidity: function setDelta(uint256 _delta) returns()
func (_Accountability *AccountabilityTransactor) SetDelta(opts *bind.TransactOpts, _delta *big.Int) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "setDelta", _delta)
}

// SetDelta is a paid mutator transaction binding the contract method 0x025ff0a5.
//
// Solidity: function setDelta(uint256 _delta) returns()
func (_Accountability *AccountabilitySession) SetDelta(_delta *big.Int) (*types.Transaction, error) {
	return _Accountability.Contract.SetDelta(&_Accountability.TransactOpts, _delta)
}

// SetDelta is a paid mutator transaction binding the contract method 0x025ff0a5.
//
// Solidity: function setDelta(uint256 _delta) returns()
func (_Accountability *AccountabilityTransactorSession) SetDelta(_delta *big.Int) (*types.Transaction, error) {
	return _Accountability.Contract.SetDelta(&_Accountability.TransactOpts, _delta)
}

// SetFactors is a paid mutator transaction binding the contract method 0x8975e977.
//
// Solidity: function setFactors((uint256,uint256,uint256) _factors) returns()
func (_Accountability *AccountabilityTransactor) SetFactors(opts *bind.TransactOpts, _factors IAccountabilityFactors) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "setFactors", _factors)
}

// SetFactors is a paid mutator transaction binding the contract method 0x8975e977.
//
// Solidity: function setFactors((uint256,uint256,uint256) _factors) returns()
func (_Accountability *AccountabilitySession) SetFactors(_factors IAccountabilityFactors) (*types.Transaction, error) {
	return _Accountability.Contract.SetFactors(&_Accountability.TransactOpts, _factors)
}

// SetFactors is a paid mutator transaction binding the contract method 0x8975e977.
//
// Solidity: function setFactors((uint256,uint256,uint256) _factors) returns()
func (_Accountability *AccountabilityTransactorSession) SetFactors(_factors IAccountabilityFactors) (*types.Transaction, error) {
	return _Accountability.Contract.SetFactors(&_Accountability.TransactOpts, _factors)
}

// SetInnocenceProofSubmissionWindow is a paid mutator transaction binding the contract method 0x433afda8.
//
// Solidity: function setInnocenceProofSubmissionWindow(uint256 _window) returns()
func (_Accountability *AccountabilityTransactor) SetInnocenceProofSubmissionWindow(opts *bind.TransactOpts, _window *big.Int) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "setInnocenceProofSubmissionWindow", _window)
}

// SetInnocenceProofSubmissionWindow is a paid mutator transaction binding the contract method 0x433afda8.
//
// Solidity: function setInnocenceProofSubmissionWindow(uint256 _window) returns()
func (_Accountability *AccountabilitySession) SetInnocenceProofSubmissionWindow(_window *big.Int) (*types.Transaction, error) {
	return _Accountability.Contract.SetInnocenceProofSubmissionWindow(&_Accountability.TransactOpts, _window)
}

// SetInnocenceProofSubmissionWindow is a paid mutator transaction binding the contract method 0x433afda8.
//
// Solidity: function setInnocenceProofSubmissionWindow(uint256 _window) returns()
func (_Accountability *AccountabilityTransactorSession) SetInnocenceProofSubmissionWindow(_window *big.Int) (*types.Transaction, error) {
	return _Accountability.Contract.SetInnocenceProofSubmissionWindow(&_Accountability.TransactOpts, _window)
}

// SetRange is a paid mutator transaction binding the contract method 0x6a91991b.
//
// Solidity: function setRange(uint256 _range) returns()
func (_Accountability *AccountabilityTransactor) SetRange(opts *bind.TransactOpts, _range *big.Int) (*types.Transaction, error) {
	return _Accountability.contract.Transact(opts, "setRange", _range)
}

// SetRange is a paid mutator transaction binding the contract method 0x6a91991b.
//
// Solidity: function setRange(uint256 _range) returns()
func (_Accountability *AccountabilitySession) SetRange(_range *big.Int) (*types.Transaction, error) {
	return _Accountability.Contract.SetRange(&_Accountability.TransactOpts, _range)
}

// SetRange is a paid mutator transaction binding the contract method 0x6a91991b.
//
// Solidity: function setRange(uint256 _range) returns()
func (_Accountability *AccountabilityTransactorSession) SetRange(_range *big.Int) (*types.Transaction, error) {
	return _Accountability.Contract.SetRange(&_Accountability.TransactOpts, _range)
}

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

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

// AccountabilityAccountabilityFactorsUpdate represents a AccountabilityFactorsUpdate event raised by the Accountability contract.
type AccountabilityAccountabilityFactorsUpdate struct {
	OldFactors IAccountabilityFactors
	NewFactors IAccountabilityFactors
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterAccountabilityFactorsUpdate is a free log retrieval operation binding the contract event 0xeda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f.
//
// Solidity: event AccountabilityFactorsUpdate((uint256,uint256,uint256) oldFactors, (uint256,uint256,uint256) newFactors)
func (_Accountability *AccountabilityFilterer) FilterAccountabilityFactorsUpdate(opts *bind.FilterOpts) (*AccountabilityAccountabilityFactorsUpdateIterator, error) {

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "AccountabilityFactorsUpdate")
	if err != nil {
		return nil, err
	}
	return &AccountabilityAccountabilityFactorsUpdateIterator{contract: _Accountability.contract, event: "AccountabilityFactorsUpdate", logs: logs, sub: sub}, nil
}

// WatchAccountabilityFactorsUpdate is a free log subscription operation binding the contract event 0xeda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f.
//
// Solidity: event AccountabilityFactorsUpdate((uint256,uint256,uint256) oldFactors, (uint256,uint256,uint256) newFactors)
func (_Accountability *AccountabilityFilterer) WatchAccountabilityFactorsUpdate(opts *bind.WatchOpts, sink chan<- *AccountabilityAccountabilityFactorsUpdate) (event.Subscription, error) {

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

// ParseAccountabilityFactorsUpdate is a log parse operation binding the contract event 0xeda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f.
//
// Solidity: event AccountabilityFactorsUpdate((uint256,uint256,uint256) oldFactors, (uint256,uint256,uint256) newFactors)
func (_Accountability *AccountabilityFilterer) ParseAccountabilityFactorsUpdate(log types.Log) (*AccountabilityAccountabilityFactorsUpdate, error) {
	event := new(AccountabilityAccountabilityFactorsUpdate)
	if err := _Accountability.contract.UnpackLog(event, "AccountabilityFactorsUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityBaseSlashingRateUpdate represents a BaseSlashingRateUpdate event raised by the Accountability contract.
type AccountabilityBaseSlashingRateUpdate struct {
	OldRates IAccountabilityBaseSlashingRates
	NewRates IAccountabilityBaseSlashingRates
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterBaseSlashingRateUpdate is a free log retrieval operation binding the contract event 0x6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a.
//
// Solidity: event BaseSlashingRateUpdate((uint256,uint256,uint256) oldRates, (uint256,uint256,uint256) newRates)
func (_Accountability *AccountabilityFilterer) FilterBaseSlashingRateUpdate(opts *bind.FilterOpts) (*AccountabilityBaseSlashingRateUpdateIterator, error) {

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "BaseSlashingRateUpdate")
	if err != nil {
		return nil, err
	}
	return &AccountabilityBaseSlashingRateUpdateIterator{contract: _Accountability.contract, event: "BaseSlashingRateUpdate", logs: logs, sub: sub}, nil
}

// WatchBaseSlashingRateUpdate is a free log subscription operation binding the contract event 0x6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a.
//
// Solidity: event BaseSlashingRateUpdate((uint256,uint256,uint256) oldRates, (uint256,uint256,uint256) newRates)
func (_Accountability *AccountabilityFilterer) WatchBaseSlashingRateUpdate(opts *bind.WatchOpts, sink chan<- *AccountabilityBaseSlashingRateUpdate) (event.Subscription, error) {

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

// ParseBaseSlashingRateUpdate is a log parse operation binding the contract event 0x6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a.
//
// Solidity: event BaseSlashingRateUpdate((uint256,uint256,uint256) oldRates, (uint256,uint256,uint256) newRates)
func (_Accountability *AccountabilityFilterer) ParseBaseSlashingRateUpdate(log types.Log) (*AccountabilityBaseSlashingRateUpdate, error) {
	event := new(AccountabilityBaseSlashingRateUpdate)
	if err := _Accountability.contract.UnpackLog(event, "BaseSlashingRateUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityCallFailed represents a CallFailed event raised by the Accountability contract.
type AccountabilityCallFailed struct {
	To              common.Address
	MethodSignature string
	ReturnData      []byte
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterCallFailed is a free log retrieval operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_Accountability *AccountabilityFilterer) FilterCallFailed(opts *bind.FilterOpts) (*AccountabilityCallFailedIterator, error) {

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "CallFailed")
	if err != nil {
		return nil, err
	}
	return &AccountabilityCallFailedIterator{contract: _Accountability.contract, event: "CallFailed", logs: logs, sub: sub}, nil
}

// WatchCallFailed is a free log subscription operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_Accountability *AccountabilityFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *AccountabilityCallFailed) (event.Subscription, error) {

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

// ParseCallFailed is a log parse operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_Accountability *AccountabilityFilterer) ParseCallFailed(log types.Log) (*AccountabilityCallFailed, error) {
	event := new(AccountabilityCallFailed)
	if err := _Accountability.contract.UnpackLog(event, "CallFailed", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityConfigUpdateAddress represents a ConfigUpdateAddress event raised by the Accountability contract.
type AccountabilityConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*AccountabilityConfigUpdateAddressIterator, error) {

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &AccountabilityConfigUpdateAddressIterator{contract: _Accountability.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *AccountabilityConfigUpdateAddress) (event.Subscription, error) {

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

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) ParseConfigUpdateAddress(log types.Log) (*AccountabilityConfigUpdateAddress, error) {
	event := new(AccountabilityConfigUpdateAddress)
	if err := _Accountability.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityConfigUpdateBool represents a ConfigUpdateBool event raised by the Accountability contract.
type AccountabilityConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*AccountabilityConfigUpdateBoolIterator, error) {

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &AccountabilityConfigUpdateBoolIterator{contract: _Accountability.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *AccountabilityConfigUpdateBool) (event.Subscription, error) {

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

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) ParseConfigUpdateBool(log types.Log) (*AccountabilityConfigUpdateBool, error) {
	event := new(AccountabilityConfigUpdateBool)
	if err := _Accountability.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityConfigUpdateInt represents a ConfigUpdateInt event raised by the Accountability contract.
type AccountabilityConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*AccountabilityConfigUpdateIntIterator, error) {

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &AccountabilityConfigUpdateIntIterator{contract: _Accountability.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *AccountabilityConfigUpdateInt) (event.Subscription, error) {

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

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) ParseConfigUpdateInt(log types.Log) (*AccountabilityConfigUpdateInt, error) {
	event := new(AccountabilityConfigUpdateInt)
	if err := _Accountability.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityConfigUpdateUint represents a ConfigUpdateUint event raised by the Accountability contract.
type AccountabilityConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*AccountabilityConfigUpdateUintIterator, error) {

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &AccountabilityConfigUpdateUintIterator{contract: _Accountability.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *AccountabilityConfigUpdateUint) (event.Subscription, error) {

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

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Accountability *AccountabilityFilterer) ParseConfigUpdateUint(log types.Log) (*AccountabilityConfigUpdateUint, error) {
	event := new(AccountabilityConfigUpdateUint)
	if err := _Accountability.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityInnocenceProven represents a InnocenceProven event raised by the Accountability contract.
type AccountabilityInnocenceProven struct {
	Offender common.Address
	Id       *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterInnocenceProven is a free log retrieval operation binding the contract event 0x1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f.
//
// Solidity: event InnocenceProven(address indexed _offender, uint256 _id)
func (_Accountability *AccountabilityFilterer) FilterInnocenceProven(opts *bind.FilterOpts, _offender []common.Address) (*AccountabilityInnocenceProvenIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "InnocenceProven", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &AccountabilityInnocenceProvenIterator{contract: _Accountability.contract, event: "InnocenceProven", logs: logs, sub: sub}, nil
}

// WatchInnocenceProven is a free log subscription operation binding the contract event 0x1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f.
//
// Solidity: event InnocenceProven(address indexed _offender, uint256 _id)
func (_Accountability *AccountabilityFilterer) WatchInnocenceProven(opts *bind.WatchOpts, sink chan<- *AccountabilityInnocenceProven, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _Accountability.contract.WatchLogs(opts, "InnocenceProven", _offenderRule)
	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(AccountabilityInnocenceProven)
				if err := _Accountability.contract.UnpackLog(event, "InnocenceProven", 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
}

// ParseInnocenceProven is a log parse operation binding the contract event 0x1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f.
//
// Solidity: event InnocenceProven(address indexed _offender, uint256 _id)
func (_Accountability *AccountabilityFilterer) ParseInnocenceProven(log types.Log) (*AccountabilityInnocenceProven, error) {
	event := new(AccountabilityInnocenceProven)
	if err := _Accountability.contract.UnpackLog(event, "InnocenceProven", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityNewAccusation represents a NewAccusation event raised by the Accountability contract.
type AccountabilityNewAccusation struct {
	Offender common.Address
	Severity *big.Int
	Id       *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterNewAccusation is a free log retrieval operation binding the contract event 0x2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351.
//
// Solidity: event NewAccusation(address indexed _offender, uint256 _severity, uint256 _id)
func (_Accountability *AccountabilityFilterer) FilterNewAccusation(opts *bind.FilterOpts, _offender []common.Address) (*AccountabilityNewAccusationIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "NewAccusation", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &AccountabilityNewAccusationIterator{contract: _Accountability.contract, event: "NewAccusation", logs: logs, sub: sub}, nil
}

// WatchNewAccusation is a free log subscription operation binding the contract event 0x2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351.
//
// Solidity: event NewAccusation(address indexed _offender, uint256 _severity, uint256 _id)
func (_Accountability *AccountabilityFilterer) WatchNewAccusation(opts *bind.WatchOpts, sink chan<- *AccountabilityNewAccusation, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _Accountability.contract.WatchLogs(opts, "NewAccusation", _offenderRule)
	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(AccountabilityNewAccusation)
				if err := _Accountability.contract.UnpackLog(event, "NewAccusation", 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
}

// ParseNewAccusation is a log parse operation binding the contract event 0x2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351.
//
// Solidity: event NewAccusation(address indexed _offender, uint256 _severity, uint256 _id)
func (_Accountability *AccountabilityFilterer) ParseNewAccusation(log types.Log) (*AccountabilityNewAccusation, error) {
	event := new(AccountabilityNewAccusation)
	if err := _Accountability.contract.UnpackLog(event, "NewAccusation", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityNewFaultProof represents a NewFaultProof event raised by the Accountability contract.
type AccountabilityNewFaultProof struct {
	Offender common.Address
	Severity *big.Int
	Id       *big.Int
	Epoch    *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterNewFaultProof is a free log retrieval operation binding the contract event 0x5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7.
//
// Solidity: event NewFaultProof(address indexed _offender, uint256 _severity, uint256 _id, uint256 _epoch)
func (_Accountability *AccountabilityFilterer) FilterNewFaultProof(opts *bind.FilterOpts, _offender []common.Address) (*AccountabilityNewFaultProofIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "NewFaultProof", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &AccountabilityNewFaultProofIterator{contract: _Accountability.contract, event: "NewFaultProof", logs: logs, sub: sub}, nil
}

// WatchNewFaultProof is a free log subscription operation binding the contract event 0x5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7.
//
// Solidity: event NewFaultProof(address indexed _offender, uint256 _severity, uint256 _id, uint256 _epoch)
func (_Accountability *AccountabilityFilterer) WatchNewFaultProof(opts *bind.WatchOpts, sink chan<- *AccountabilityNewFaultProof, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _Accountability.contract.WatchLogs(opts, "NewFaultProof", _offenderRule)
	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(AccountabilityNewFaultProof)
				if err := _Accountability.contract.UnpackLog(event, "NewFaultProof", 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
}

// ParseNewFaultProof is a log parse operation binding the contract event 0x5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7.
//
// Solidity: event NewFaultProof(address indexed _offender, uint256 _severity, uint256 _id, uint256 _epoch)
func (_Accountability *AccountabilityFilterer) ParseNewFaultProof(log types.Log) (*AccountabilityNewFaultProof, error) {
	event := new(AccountabilityNewFaultProof)
	if err := _Accountability.contract.UnpackLog(event, "NewFaultProof", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityReporterRewarded represents a ReporterRewarded event raised by the Accountability contract.
type AccountabilityReporterRewarded struct {
	Reporter  common.Address
	Offender  common.Address
	NtnReward *big.Int
	AtnReward *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterReporterRewarded is a free log retrieval operation binding the contract event 0xd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e9.
//
// Solidity: event ReporterRewarded(address _reporter, address indexed _offender, uint256 _ntnReward, uint256 _atnReward)
func (_Accountability *AccountabilityFilterer) FilterReporterRewarded(opts *bind.FilterOpts, _offender []common.Address) (*AccountabilityReporterRewardedIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "ReporterRewarded", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &AccountabilityReporterRewardedIterator{contract: _Accountability.contract, event: "ReporterRewarded", logs: logs, sub: sub}, nil
}

// WatchReporterRewarded is a free log subscription operation binding the contract event 0xd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e9.
//
// Solidity: event ReporterRewarded(address _reporter, address indexed _offender, uint256 _ntnReward, uint256 _atnReward)
func (_Accountability *AccountabilityFilterer) WatchReporterRewarded(opts *bind.WatchOpts, sink chan<- *AccountabilityReporterRewarded, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _Accountability.contract.WatchLogs(opts, "ReporterRewarded", _offenderRule)
	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(AccountabilityReporterRewarded)
				if err := _Accountability.contract.UnpackLog(event, "ReporterRewarded", 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
}

// ParseReporterRewarded is a log parse operation binding the contract event 0xd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e9.
//
// Solidity: event ReporterRewarded(address _reporter, address indexed _offender, uint256 _ntnReward, uint256 _atnReward)
func (_Accountability *AccountabilityFilterer) ParseReporterRewarded(log types.Log) (*AccountabilityReporterRewarded, error) {
	event := new(AccountabilityReporterRewarded)
	if err := _Accountability.contract.UnpackLog(event, "ReporterRewarded", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilitySlashingEvent represents a SlashingEvent event raised by the Accountability contract.
type AccountabilitySlashingEvent struct {
	Validator    common.Address
	Amount       *big.Int
	ReleaseBlock *big.Int
	IsJailbound  bool
	EventId      *big.Int
	Raw          types.Log // Blockchain specific contextual infos
}

// FilterSlashingEvent is a free log retrieval operation binding the contract event 0x6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9.
//
// Solidity: event SlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound, uint256 eventId)
func (_Accountability *AccountabilityFilterer) FilterSlashingEvent(opts *bind.FilterOpts) (*AccountabilitySlashingEventIterator, error) {

	logs, sub, err := _Accountability.contract.FilterLogs(opts, "SlashingEvent")
	if err != nil {
		return nil, err
	}
	return &AccountabilitySlashingEventIterator{contract: _Accountability.contract, event: "SlashingEvent", logs: logs, sub: sub}, nil
}

// WatchSlashingEvent is a free log subscription operation binding the contract event 0x6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9.
//
// Solidity: event SlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound, uint256 eventId)
func (_Accountability *AccountabilityFilterer) WatchSlashingEvent(opts *bind.WatchOpts, sink chan<- *AccountabilitySlashingEvent) (event.Subscription, error) {

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

// ParseSlashingEvent is a log parse operation binding the contract event 0x6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9.
//
// Solidity: event SlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound, uint256 eventId)
func (_Accountability *AccountabilityFilterer) ParseSlashingEvent(log types.Log) (*AccountabilitySlashingEvent, error) {
	event := new(AccountabilitySlashingEvent)
	if err := _Accountability.contract.UnpackLog(event, "SlashingEvent", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AccountabilityTestMetaData contains all meta data concerning the AccountabilityTest contract.
var AccountabilityTestMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"contractIAutonity\",\"name\":\"_autonity\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"range\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"baseSlashingRates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Factors\",\"name\":\"factors\",\"type\":\"tuple\"}],\"internalType\":\"structIAccountability.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.Factors\",\"name\":\"oldFactors\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.Factors\",\"name\":\"newFactors\",\"type\":\"tuple\"}],\"name\":\"AccountabilityFactorsUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"oldRates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"newRates\",\"type\":\"tuple\"}],\"name\":\"BaseSlashingRateUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_reporter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_atnReward\",\"type\":\"uint256\"}],\"name\":\"ReporterRewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_reporter\",\"type\":\"address\"}],\"name\":\"addBeneficiary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canAccuse\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_result\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"_rule\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"canSlash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"}],\"name\":\"getBeneficiary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"range\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"baseSlashingRates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Factors\",\"name\":\"factors\",\"type\":\"tuple\"}],\"internalType\":\"structIAccountability.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getEvent\",\"outputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEventsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGracePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"getHistory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"getSlashingHistory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorAccusation\",\"outputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_val\",\"type\":\"address\"}],\"name\":\"getValidatorFaults\",\"outputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleAccusation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleInnocenceProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleMisbehaviour\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleValidAccusation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleValidFaultProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"}],\"name\":\"handleValidInnocenceProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"performSlashingTasks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"promoteGuiltyAccusations\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"_rates\",\"type\":\"tuple\"}],\"name\":\"setBaseSlashingRates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newCommittee\",\"type\":\"address[]\"}],\"name\":\"setCommittee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delta\",\"type\":\"uint256\"}],\"name\":\"setDelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Factors\",\"name\":\"_factors\",\"type\":\"tuple\"}],\"name\":\"setFactors\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_window\",\"type\":\"uint256\"}],\"name\":\"setInnocenceProofSubmissionWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_range\",\"type\":\"uint256\"}],\"name\":\"setRange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumIAccountability.EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"enumIAccountability.Rule\",\"name\":\"rule\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"rawProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"messageHash\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Event\",\"name\":\"_event\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_epochOffencesCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_epochPeriod\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"0af86dc2": "addBeneficiary(address,address)",
		"7ccecadd": "canAccuse(address,uint8,uint256)",
		"4108a95a": "canSlash(address,uint8,uint256)",
		"a8031a1d": "distributeRewards(address,uint256)",
		"6c9789b0": "finalize(bool)",
		"505a1b31": "getBeneficiary(address)",
		"c3f909d4": "getConfig()",
		"6d1884e0": "getEvent(uint256)",
		"47fc216e": "getEventsLength()",
		"dbd18388": "getGracePeriod()",
		"80396811": "getHistory(address)",
		"a6b0aaae": "getSlashingHistory(address,uint256)",
		"9cb22b06": "getValidatorAccusation(address)",
		"bebaa8fc": "getValidatorFaults(address)",
		"1e85f2e5": "handleAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))",
		"e05f8786": "handleInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))",
		"a48a9b50": "handleMisbehaviour((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))",
		"239a49ba": "handleValidAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))",
		"51772af9": "handleValidFaultProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))",
		"653cd199": "handleValidInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))",
		"633b5e5e": "performSlashingTasks()",
		"7ec8be1d": "promoteGuiltyAccusations()",
		"a2652078": "setBaseSlashingRates((uint256,uint256,uint256))",
		"e08b14ed": "setCommittee(address[])",
		"025ff0a5": "setDelta(uint256)",
		"8975e977": "setFactors((uint256,uint256,uint256))",
		"433afda8": "setInnocenceProofSubmissionWindow(uint256)",
		"6a91991b": "setRange(uint256)",
		"0d20e5ea": "slash((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256),uint256,uint256)",
	},
	Bin: "0x6080604052600060195534801561001557600080fd5b5060405161555638038061555683398101604081905261003491610576565b600080546001600160a01b0319166001600160a01b03841617905560608101518290829061006190610271565b608081015161006f906103b1565b80602001518160400151116100df5760405162461bcd60e51b815260206004820152602b60248201527f6865696768742072616e6765206e6565647320746f206265206772656174657260448201526a207468616e2064656c746160a81b60648201526084015b60405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b031663ab8f6ffe6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610133573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261015b919081019061061b565b905060005b815181101561020d57601482828151811061017d5761017d6107ba565b6020908102919091018101515182546001808201855560009485529284200180546001600160a01b0319166001600160a01b03909216919091179055835190916015918590859081106101d2576101d26107ba565b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610160565b50508051600355602080820151600481905560408084015160058190556060850151805160065580850151600755820151600855608090940151805160095592830151600a559190910151600b55600c91909155600d5550506000600e55506108e2565b6020810151815111156102d25760405162461bcd60e51b8152602060048201526024808201527f736c617368696e6720726174653a206c6f772063616e6e6f7420657863656564604482015263081b5a5960e21b60648201526084016100d6565b8060400151816020015111156103385760405162461bcd60e51b815260206004820152602560248201527f736c617368696e6720726174653a206d69642063616e6e6f7420657863656564604482015264040d0d2ced60db1b60648201526084016100d6565b6103446004600a6108cf565b816040015111156103ae5760405162461bcd60e51b815260206004820152602e60248201527f736c617368696e6720726174653a20686967682063616e6e6f7420657863656560448201526d321039b1b0b632903330b1ba37b960911b60648201526084016100d6565b50565b6103bd6004600a6108cf565b815111156104335760405162461bcd60e51b815260206004820152603960248201527f636f6c6c7573696f6e20666163746f722063616e6e6f7420657863656564207360448201527f6c617368696e672072617465207363616c6520666163746f720000000000000060648201526084016100d6565b61043f6004600a6108cf565b816020015111156103ae5760405162461bcd60e51b815260206004820152603760248201527f686973746f727920666163746f722063616e6e6f742065786365656420736c6160448201527f7368696e672072617465207363616c6520666163746f7200000000000000000060648201526084016100d6565b6001600160a01b03811681146103ae57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715610505576105056104cd565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610533576105336104cd565b604052919050565b60006060828403121561054d57600080fd5b6105556104e3565b82518152602080840151908201526040928301519281019290925250919050565b60008082840361014081121561058b57600080fd5b8351610596816104b8565b9250610120601f19820112156105ab57600080fd5b5060405160a081016001600160401b03811182821017156105ce576105ce6104cd565b6040908152602085810151835285820151908301526060850151908201526105f9856080860161053b565b606082015261060b8560e0860161053b565b6080820152809150509250929050565b60006020828403121561062d57600080fd5b81516001600160401b0381111561064357600080fd5b8201601f8101841361065457600080fd5b80516001600160401b0381111561066d5761066d6104cd565b8060051b61067d6020820161050b565b9182526020818401810192908101908784111561069957600080fd5b6020850192505b838310156107af5782516001600160401b038111156106be57600080fd5b85016060818a03601f190112156106d457600080fd5b6106dc6104e3565b60208201516106ea816104b8565b81526040820151602082015260608201516001600160401b0381111561070f57600080fd5b60208184010192505089601f83011261072757600080fd5b81516001600160401b03811115610740576107406104cd565b610753601f8201601f191660200161050b565b8181528b602083860101111561076857600080fd5b60005b828110156107875760208186018101518383018201520161076b565b50600060208383010152806040840152505080845250506020820191506020830192506106a0565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001815b600184111561082157808504811115610805576108056107d0565b600184161561081357908102905b60019390931c9280026107ea565b935093915050565b600082610838575060016108c9565b81610845575060006108c9565b816001811461085b576002811461086557610881565b60019150506108c9565b60ff841115610876576108766107d0565b50506001821b6108c9565b5060208310610133831016604e8410600b84101617156108a4575081810a6108c9565b6108b160001984846107e6565b80600019048211156108c5576108c56107d0565b0290505b92915050565b60006108db8383610829565b9392505050565b614c65806108f16000396000f3fe6080604052600436106101c25760003560e01c80636d1884e0116100f7578063a48a9b5011610095578063c3f909d411610064578063c3f909d41461056b578063dbd183881461058d578063e05f8786146105a2578063e08b14ed146105c257600080fd5b8063a48a9b50146104eb578063a6b0aaae1461050b578063a8031a1d1461052b578063bebaa8fc1461053e57600080fd5b806380396811116100d1578063803968111461046b5780638975e9771461048b5780639cb22b06146104ab578063a2652078146104cb57600080fd5b80636d1884e0146103f25780637ccecadd1461041f5780637ec8be1d1461045657600080fd5b806347fc216e11610164578063633b5e5e1161013e578063633b5e5e14610362578063653cd199146103775780636a91991b146103975780636c9789b0146103b757600080fd5b806347fc216e146102e7578063505a1b311461030a57806351772af91461034257600080fd5b80631e85f2e5116101a05780631e85f2e514610252578063239a49ba146102725780634108a95a14610292578063433afda8146102c757600080fd5b8063025ff0a5146101c75780630af86dc2146101e95780630d20e5ea14610232575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613d15565b6105e2565b005b3480156101f557600080fd5b506101e7610204366004613d4e565b6001600160a01b039182166000908152600f6020526040902080546001600160a01b03191691909216179055565b34801561023e57600080fd5b506101e761024d366004613f76565b610740565b34801561025e57600080fd5b506101e761026d366004613fc3565b610750565b34801561027e57600080fd5b506101e761028d366004613fc3565b610830565b34801561029e57600080fd5b506102b26102ad366004613fff565b610839565b60405190151581526020015b60405180910390f35b3480156102d357600080fd5b506101e76102e2366004613d15565b61098b565b3480156102f357600080fd5b506102fc610a9b565b6040519081526020016102be565b34801561031657600080fd5b5061032a61032536600461403e565b610acc565b6040516001600160a01b0390911681526020016102be565b34801561034e57600080fd5b506101e761035d366004613fc3565b610b18565b34801561036e57600080fd5b506101e7610b21565b34801561038357600080fd5b506101e7610392366004613fc3565b610b2b565b3480156103a357600080fd5b506101e76103b2366004613d15565b610b34565b3480156103c357600080fd5b506103d76103d2366004614069565b610d59565b604080519384526020840192909252908201526060016102be565b3480156103fe57600080fd5b5061041261040d366004613d15565b610e28565b6040516102be91906141c3565b34801561042b57600080fd5b5061043f61043a366004613fff565b610fd2565b6040805192151583526020830191909152016102be565b34801561046257600080fd5b506101e76111c7565b34801561047757600080fd5b506102fc61048636600461403e565b6111cf565b34801561049757600080fd5b506101e76104a636600461422e565b611215565b3480156104b757600080fd5b506104126104c636600461403e565b611302565b3480156104d757600080fd5b506101e76104e636600461422e565b6113b8565b3480156104f757600080fd5b506101e7610506366004613fc3565b6114a5565b34801561051757600080fd5b506102fc61052636600461424a565b611582565b6101e761053936600461424a565b6115d8565b34801561054a57600080fd5b5061055e61055936600461403e565b6118ff565b6040516102be9190614276565b34801561057757600080fd5b50610580611b94565b6040516102be91906142db565b34801561059957600080fd5b506102fc611c2e565b3480156105ae57600080fd5b506101e76105bd366004613fc3565b611c5f565b3480156105ce57600080fd5b506101e76105dd366004614349565b611d3e565b60005460408051631cfe878d60e31b8152905133926001600160a01b03169163e7f43c689160048083019260209291908290030181865afa15801561062b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064f919061440b565b6001600160a01b03161461067e5760405162461bcd60e51b815260040161067590614428565b60405180910390fd5b600c5481106106db5760405162461bcd60e51b8152602060048201526024808201527f64656c7461206e6565647320746f20626520736d616c6c6572207468616e2072604482015263616e676560e01b6064820152608401610675565b6004546040805160808082526005908201526464656c746160d81b60a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1600d55565b61074b838383611e6e565b505050565b6107586120e9565b3360009081526015602052604090205460ff16151560011461078c5760405162461bcd60e51b81526004016106759061445f565b60408101516001600160a01b031633146107b85760405162461bcd60e51b8152600401610675906144a8565b6001815160028111156107cd576107cd614086565b1461081a5760405162461bcd60e51b815260206004820152601f60248201527f77726f6e67206576656e74207479706520666f722061636375736174696f6e006044820152606401610675565b61082381612135565b61082d6000600155565b50565b61082d816122b8565b6000610846600180541490565b156108635760405162461bcd60e51b8152600401610675906144df565b600083600981111561087757610877614086565b101580156108975750600983600981111561089457610894614086565b11155b6108db5760405162461bcd60e51b81526020600482015260156024820152741c9d5b19481a59081b5d5cdd081899481d985b1a59605a1b6044820152606401610675565b60006108e684612541565b600080546040516396b477cb60e01b81526004810187905292935090916001600160a01b03909116906396b477cb90602401602060405180830381865afa158015610935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109599190614516565b6001600160a01b03871660009081526016602090815260408083209383529290522054919091109150505b9392505050565b60005460408051631cfe878d60e31b8152905133926001600160a01b03169163e7f43c689160048083019260209291908290030181865afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f8919061440b565b6001600160a01b031614610a1e5760405162461bcd60e51b815260040161067590614428565b600354604080516080808252601e908201527f696e6e6f63656e636550726f6f665375626d697373696f6e57696e646f77000060a0820152602081019290925281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1600355565b6000610aa8600180541490565b15610ac55760405162461bcd60e51b8152600401610675906144df565b5060025490565b6000610ad9600180541490565b15610af65760405162461bcd60e51b8152600401610675906144df565b506001600160a01b038082166000908152600f6020526040902054165b919050565b61082d816126bb565b610b2961296d565b565b61082d81612c86565b60005460408051631cfe878d60e31b8152905133926001600160a01b03169163e7f43c689160048083019260209291908290030181865afa158015610b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba1919061440b565b6001600160a01b031614610bc75760405162461bcd60e51b815260040161067590614428565b600e5415610c2a5760405162461bcd60e51b815260206004820152602a60248201527f6865696768742072616e6765206368616e676520697320616c726561647920696044820152696e2070726f677265737360b01b6064820152608401610675565b610c35600482614545565b15610c8e5760405162461bcd60e51b8152602060048201526024808201527f6865696768742072616e6765206d7573742062652061206d756c7469706c65206044820152631bd9880d60e21b6064820152608401610675565b600d548111610cf35760405162461bcd60e51b815260206004820152602b60248201527f6865696768742072616e6765206e6565647320746f206265206772656174657260448201526a207468616e2064656c746160a81b6064820152608401610675565b600580546040805160808082528101939093526472616e676560d81b60a0840152602083019190915281018290524360608201527f207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba9060c00160405180910390a1600c55565b6000806000610d666120e9565b6000546001600160a01b03163314610d905760405162461bcd60e51b815260040161067590614559565b610d98612f84565b8315610da657610da661296d565b600e5415610dc457600e8054906000610dbe836145b7565b91905055505b600554600c541115610dfe57600554600c54600091610de2916145ce565b9050610def6004826145e1565b610df990826145ce565b600e55505b5050600c546005819055600d546004819055600e5491925090610e216000600155565b9193909250565b610e30613b47565b6001805403610e515760405162461bcd60e51b8152600401610675906144df565b60028281548110610e6457610e646145f5565b600091825260209091206040805161014081019091526008909202018054829060ff166002811115610e9857610e98614086565b6002811115610ea957610ea9614086565b81528154602090910190610100900460ff166009811115610ecc57610ecc614086565b6009811115610edd57610edd614086565b815281546001600160a01b0362010000909104811660208301526001830154166040820152600282018054606090920191610f179061460b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f439061460b565b8015610f905780601f10610f6557610100808354040283529160200191610f90565b820191906000526020600020905b815481529060010190602001808311610f7357829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050919050565b600080610fe0600180541490565b15610ffd5760405162461bcd60e51b8152600401610675906144df565b600084600981111561101157611011614086565b101580156110315750600984600981111561102e5761102e614086565b11155b6110755760405162461bcd60e51b81526020600482015260156024820152741c9d5b19481a59081b5d5cdd081899481d985b1a59605a1b6044820152606401610675565b600061108085612541565b600080546040516396b477cb60e01b81526004810188905292935090916001600160a01b03909116906396b477cb90602401602060405180830381865afa1580156110cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f39190614516565b6001600160a01b0388166000908152601660209081526040808320848452909152902054909150821161112d5760009350600092506111bd565b6001600160a01b038716600090815260126020526040902054156111b4576001600160a01b038716600090815260126020526040812054600290611173906001906145ce565b81548110611183576111836145f5565b906000526020600020906008020190506000945060036000015481600601546111ac9190614645565b9350506111bd565b60019350600092505b5050935093915050565b610b29612f84565b60006111dc600180541490565b156111f95760405162461bcd60e51b8152600401610675906144df565b506001600160a01b031660009081526011602052604090205490565b60005460408051631cfe878d60e31b8152905133926001600160a01b03169163e7f43c689160048083019260209291908290030181865afa15801561125e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611282919061440b565b6001600160a01b0316146112a85760405162461bcd60e51b815260040161067590614428565b6112b181613326565b6040517feda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f906112e4906009908490614658565b60405180910390a180516009556020810151600a5560400151600b55565b61130a613b47565b600180540361132b5760405162461bcd60e51b8152600401610675906144df565b6001600160a01b0382166000908152601260205260409020546113805760405162461bcd60e51b815260206004820152600d60248201526c37379030b1b1bab9b0ba34b7b760991b6044820152606401610675565b6001600160a01b0382166000908152601260205260409020546002906113a8906001906145ce565b81548110610e6457610e646145f5565b60005460408051631cfe878d60e31b8152905133926001600160a01b03169163e7f43c689160048083019260209291908290030181865afa158015611401573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611425919061440b565b6001600160a01b03161461144b5760405162461bcd60e51b815260040161067590614428565b6114548161342d565b6040517f6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a90611487906006908490614658565b60405180910390a18051600655602081015160075560400151600855565b6114ad6120e9565b3360009081526015602052604090205460ff1615156001146114e15760405162461bcd60e51b81526004016106759061445f565b60408101516001600160a01b0316331461150d5760405162461bcd60e51b8152600401610675906144a8565b60008151600281111561152257611522614086565b146115795760405162461bcd60e51b815260206004820152602160248201527f77726f6e67206576656e74207479706520666f72206d69736265686176696f756044820152603960f91b6064820152608401610675565b6108238161356a565b600061158f600180541490565b156115ac5760405162461bcd60e51b8152600401610675906144df565b506001600160a01b03821660009081526016602090815260408083208484529091529020545b92915050565b6115e06120e9565b6000546001600160a01b0316331461160a5760405162461bcd60e51b815260040161067590614559565b6001600160a01b038281166000908152600f602052604080822080546001600160a01b0319811690915582549151630c825d9760e11b81529084166004820181905234949093921690631904bb2e90602401600060405180830381865afa158015611679573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116a191908101906146f3565b9050831561171c57600080546020830151604051630f7fcc5160e41b81526001600160a01b039182166004820152602481018890526044810193909352169063f7fcc51090606401600060405180830381600087803b15801561170357600080fd5b505af1158015611717573d6000803e3d6000fd5b505050505b821561189c5780516040516000916001600160a01b0316906108fc90869084818181858888f193505050503d8060008114611773576040519150601f19603f3d011682016040523d82523d6000602084013e611778565b606091505b505090508061189a5760008060009054906101000a90046001600160a01b03166001600160a01b031663f7866ee36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f9919061440b565b9050600080826001600160a01b03168760405160006040518083038185875af1925050503d8060008114611849576040519150601f19603f3d011682016040523d82523d6000602084013e61184e565b606091505b509150915081611892577f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d3528382604051611889929190614876565b60405180910390a15b600096505050505b505b602080820151604080516001600160a01b03928316815292830187905282018590528616907fd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e99060600160405180910390a25050506118fb6000600155565b5050565b606061190c600180541490565b156119295760405162461bcd60e51b8152600401610675906144df565b6001600160a01b0382166000908152601060205260408120546001600160401b0381111561195957611959613d87565b60405190808252806020026020018201604052801561199257816020015b61197f613b47565b8152602001906001900390816119775790505b50905060005b6001600160a01b038416600090815260106020526040902054811015611b8d576001600160a01b0384166000908152601060205260409020805460029190839081106119e6576119e66145f5565b906000526020600020015481548110611a0157611a016145f5565b600091825260209091206040805161014081019091526008909202018054829060ff166002811115611a3557611a35614086565b6002811115611a4657611a46614086565b81528154602090910190610100900460ff166009811115611a6957611a69614086565b6009811115611a7a57611a7a614086565b815281546001600160a01b0362010000909104811660208301526001830154166040820152600282018054606090920191611ab49061460b565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae09061460b565b8015611b2d5780601f10611b0257610100808354040283529160200191611b2d565b820191906000526020600020905b815481529060010190602001808311611b1057829003601f168201915b5050505050815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481525050828281518110611b7a57611b7a6145f5565b6020908102919091010152600101611998565b5092915050565b611b9c613bad565b6001805403611bbd5760405162461bcd60e51b8152600401610675906144df565b506040805160a0810182526003548152600454602080830191909152600554828401528251606081810185526006548252600754828401526008548286015280840191909152835190810184526009548152600a5491810191909152600b5492810192909252608081019190915290565b6000611c3b600180541490565b15611c585760405162461bcd60e51b8152600401610675906144df565b50600e5490565b611c676120e9565b3360009081526015602052604090205460ff161515600114611c9b5760405162461bcd60e51b81526004016106759061445f565b60408101516001600160a01b03163314611cc75760405162461bcd60e51b8152600401610675906144a8565b600281516002811115611cdc57611cdc614086565b14611d355760405162461bcd60e51b8152602060048201526024808201527f77726f6e67206576656e74207479706520666f7220696e6e6f63656e636520706044820152633937b7b360e11b6064820152608401610675565b61082381613765565b611d466120e9565b6000546001600160a01b03163314611d705760405162461bcd60e51b815260040161067590614559565b611dd36013805480602002602001604051908101604052809291908181526020018280548015611dc957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611dab575b50505050506138ab565b611e366014805480602002602001604051908101604052809291908181526020018280548015611e2c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e0e575b5050505050613943565b60148054611e4691601391613c1f565b50611e5081613943565b8051611e63906014906020840190613c6f565b5061082d6000600155565b60608301516040808501516001600160a01b038084166000818152600f60205284812080549484166001600160a01b03199095169490941790935591549251632dbeb61b60e11b815260048101929092526003921690635b7d6c3690602401602060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0e91906148a5565b6005811115611f1f57611f1f614086565b03611f2a5750505050565b6000611f41611f3c8660200151612541565b6139f5565b600a546001600160a01b03841660009081526011602052604081205492935091611f6b91906148c0565b600954611f7890876148c0565b611f829084614645565b611f8c9190614645565b6001600160a01b03841660009081526011602052604081208054929350600192909190611fba908490614645565b90915550506001600160a01b038316600090815260116020526040812054600b548691611fe6916148c0565b611ff091906148c0565b60008054604051630915a09160e11b81529293509091829182916001600160a01b039091169063122b412290612034908a90899089906002906003906004016148e7565b6060604051808303816000875af1158015612053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120779190614929565b60a0808e0151604080516001600160a01b038e168152602081018790529081018590528315156060820152608081019190915293965091945092507f6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9910160405180910390a150505050505050505050565b6001541561212f5760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b6044820152606401610675565b60018055565b60008060008060006121598660800151600360020154600360010154600e54613a62565b94509450945094509450846121b05760405162461bcd60e51b815260206004820152601e60248201527f6661696c65642061636375736174696f6e20766572696669636174696f6e00006044820152606401610675565b85606001516001600160a01b0316846001600160a01b0316146121e55760405162461bcd60e51b815260040161067590614963565b856020015160098111156121fb576121fb614086565b83146122195760405162461bcd60e51b81526004016106759061498e565b600080546040516396b477cb60e01b8152600481018590526001600160a01b03909116906396b477cb90602401602060405180830381865afa158015612263573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122879190614516565b60c0880184905260e0880181905243610100890152610120880183905290506122af876122b8565b50505050505050565b60608101516001600160a01b0316600090815260126020526040902054156123225760405162461bcd60e51b815260206004820181905260248201527f616c72656164792070726f63657373696e6720616e2061636375736174696f6e6044820152606401610675565b60006123318260200151612541565b60608301516001600160a01b0316600090815260166020908152604080832060e08701518452909152902054909150811161237e5760405162461bcd60e51b8152600401610675906149b8565b6002805460a08401819052600180820183556000839052845160089092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180548694919392849260ff199092169184908111156123df576123df614086565b021790555060208201518154829061ff00191661010083600981111561240757612407614086565b02179055506040820151815462010000600160b01b031916620100006001600160a01b039283160217825560608301516001830180546001600160a01b03191691909216179055608082015160028201906124629082614a4a565b5060a082810151600383015560c0830151600483015560e083015160058301556101008301516006830155610120909201516007909101558201516124a8906001614645565b60608301516001600160a01b031660009081526012602052604090205560a08201516018906124d8906001614645565b815460018101835560009283526020928390200155606083015160a084015160408051858152938401919091526001600160a01b03909116917f2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba4035191015b60405180910390a25050565b6000600982600981111561255757612557614086565b0361256457600192915050565b600082600981111561257857612578614086565b036125845760026115d2565b600182600981111561259857612598614086565b036125a45760026115d2565b60028260098111156125b8576125b8614086565b036125c45760026115d2565b60038260098111156125d8576125d8614086565b036125e45760026115d2565b60048260098111156125f8576125f8614086565b036126045760026115d2565b600582600981111561261857612618614086565b036126245760026115d2565b600682600981111561263857612638614086565b036126445760026115d2565b600782600981111561265857612658614086565b036126645760036115d2565b600882600981111561267857612678614086565b036126845760036115d2565b60405162461bcd60e51b815260206004820152600c60248201526b756e6b6e6f776e2072756c6560a01b6044820152606401610675565b60006126ca8260200151612541565b60608301516001600160a01b0316600090815260166020908152604080832060e0870151845290915290205490915081116127175760405162461bcd60e51b8152600401610675906149b8565b6002805460a08401819052600180820183556000839052845160089092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180548694919392849260ff1990921691849081111561277857612778614086565b021790555060208201518154829061ff0019166101008360098111156127a0576127a0614086565b02179055506040820151815462010000600160b01b031916620100006001600160a01b039283160217825560608301516001830180546001600160a01b03191691909216179055608082015160028201906127fb9082614a4a565b5060a082810151600383015560c083015160048084019190915560e08085015160058501556101008501516006850155610120909401516007909301929092556060850180516001600160a01b039081166000908152601060209081526040808320958a018051875460018181018a559886528486200155805160178054988901815585527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159097019690965584518416835260168252808320978a015183529681528682208890559251935190548651636fc5351560e01b81529651948316967f5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d796899693959290941693636fc535159382820193929091908290030181865afa15801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190614516565b60408051938452602084019290925290820152606001612535565b6000805460408051636fc5351560e01b8152905183926001600160a01b031691636fc535159160048083019260209291908290030181865afa1580156129b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129db9190614516565b905060005b601754811015612a485781600260178381548110612a0057612a006145f5565b906000526020600020015481548110612a1b57612a1b6145f5565b90600052602060002090600802016005015403612a4057612a3d600184614645565b92505b6001016129e0565b5060008060009054906101000a90046001600160a01b03166001600160a01b0316630aac2da16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac19190614516565b905060005b601754811015612c7957612c71600260178381548110612ae857612ae86145f5565b906000526020600020015481548110612b0357612b036145f5565b600091825260209091206040805161014081019091526008909202018054829060ff166002811115612b3757612b37614086565b6002811115612b4857612b48614086565b81528154602090910190610100900460ff166009811115612b6b57612b6b614086565b6009811115612b7c57612b7c614086565b815281546001600160a01b0362010000909104811660208301526001830154166040820152600282018054606090920191612bb69061460b565b80601f0160208091040260200160405190810160405280929190818152602001828054612be29061460b565b8015612c2f5780601f10612c0457610100808354040283529160200191612c2f565b820191906000526020600020905b815481529060010190602001808311612c1257829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250508584611e6e565b600101612ac6565b5061074b60176000613cc4565b60608101516001600160a01b031660009081526012602052604081205490819003612cf35760405162461bcd60e51b815260206004820152601860248201527f6e6f206173736f6369617465642061636375736174696f6e00000000000000006044820152606401610675565b81602001516009811115612d0957612d09614086565b6002612d166001846145ce565b81548110612d2657612d266145f5565b6000918252602090912060089091020154610100900460ff166009811115612d5057612d50614086565b14612dad5760405162461bcd60e51b815260206004820152602760248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152661c9d5b19481a5960ca1b6064820152608401610675565b60c08201516002612dbf6001846145ce565b81548110612dcf57612dcf6145f5565b90600052602060002090600802016004015414612e3c5760405162461bcd60e51b815260206004820152602560248201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e20604482015264626c6f636b60d81b6064820152608401610675565b6101208201516002612e4f6001846145ce565b81548110612e5f57612e5f6145f5565b90600052602060002090600802016007015414612eca5760405162461bcd60e51b8152602060048201526024808201527f756e6d61746368696e672070726f6f6620616e642061636375736174696f6e206044820152630d0c2e6d60e31b6064820152608401610675565b6019545b601854811015612f2a578160188281548110612eec57612eec6145f5565b906000526020600020015403612f2257600060188281548110612f1157612f116145f5565b600091825260209091200155612f2a565b600101612ece565b506060820180516001600160a01b0390811660009081526012602090815260408083208390559351935191825292909116917f1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f9101612535565b6019546000805460408051636fc5351560e01b815290516001600160a01b0390921691636fc53515916004808201926020929091908290030181865afa158015612fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff69190614516565b90505b60185482101561332057600060188381548110613018576130186145f5565b90600052602060002001549050806000036130335750613315565b61303e6001826145ce565b9050600060028281548110613055576130556145f5565b600091825260209091206040805161014081019091526008909202018054829060ff16600281111561308957613089614086565b600281111561309a5761309a614086565b81528154602090910190610100900460ff1660098111156130bd576130bd614086565b60098111156130ce576130ce614086565b815281546001600160a01b03620100009091048116602083015260018301541660408201526002820180546060909201916131089061460b565b80601f01602080910402602001604051908101604052809291908181526020018280546131349061460b565b80156131815780601f1061315657610100808354040283529160200191613181565b820191906000526020600020905b81548152906001019060200180831161316457829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250509050436003600001548261010001516131d59190614645565b11156131e2575050613320565b60608101516001600160a01b03166000908152601260209081526040822082905582015161320f90612541565b60608301516001600160a01b0316600090815260166020908152604080832060e08701518452909152902054909150811161324c57505050613315565b606082810180516001600160a01b03908116600090815260166020908152604080832060e08901518452825280832087905584518416835260108252808320805460018082018355918552838520018a90556017805491820181559093527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159092018890559251815186815293840188905290830188905216917f5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7910160405180910390a25050505b600190910190612ff9565b50601955565b6133326004600a614bef565b815111156133a85760405162461bcd60e51b815260206004820152603960248201527f636f6c6c7573696f6e20666163746f722063616e6e6f7420657863656564207360448201527f6c617368696e672072617465207363616c6520666163746f72000000000000006064820152608401610675565b6133b46004600a614bef565b8160200151111561082d5760405162461bcd60e51b815260206004820152603760248201527f686973746f727920666163746f722063616e6e6f742065786365656420736c6160448201527f7368696e672072617465207363616c6520666163746f720000000000000000006064820152608401610675565b60208101518151111561348e5760405162461bcd60e51b8152602060048201526024808201527f736c617368696e6720726174653a206c6f772063616e6e6f7420657863656564604482015263081b5a5960e21b6064820152608401610675565b8060400151816020015111156134f45760405162461bcd60e51b815260206004820152602560248201527f736c617368696e6720726174653a206d69642063616e6e6f7420657863656564604482015264040d0d2ced60db1b6064820152608401610675565b6135006004600a614bef565b8160400151111561082d5760405162461bcd60e51b815260206004820152602e60248201527f736c617368696e6720726174653a20686967682063616e6e6f7420657863656560448201526d321039b1b0b632903330b1ba37b960911b6064820152608401610675565b600080600080600061358160fe8760800151613aee565b94509450945094509450846135d85760405162461bcd60e51b815260206004820152601960248201527f6661696c65642070726f6f6620766572696669636174696f6e000000000000006044820152606401610675565b85606001516001600160a01b0316846001600160a01b03161461360d5760405162461bcd60e51b815260040161067590614963565b8560200151600981111561362357613623614086565b83146136415760405162461bcd60e51b81526004016106759061498e565b4382106136895760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b6044820152606401610675565b600082116136cf5760405162461bcd60e51b815260206004820152601360248201527263616e27742062652061742067656e6573697360681b6044820152606401610675565b600080546040516396b477cb60e01b8152600481018590526001600160a01b03909116906396b477cb90602401602060405180830381865afa158015613719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061373d9190614516565b60c0880184905260e0880181905243610100890152610120880183905290506122af876126bb565b600080600080600061377c60fd8760800151613aee565b94509450945094509450846137d35760405162461bcd60e51b815260206004820152601d60248201527f6661696c656420696e6e6f63656e636520766572696669636174696f6e0000006044820152606401610675565b85606001516001600160a01b0316846001600160a01b0316146138085760405162461bcd60e51b815260040161067590614963565b8560200151600981111561381e5761381e614086565b831461383c5760405162461bcd60e51b81526004016106759061498e565b4382106138845760405162461bcd60e51b815260206004820152601660248201527563616e277420626520696e207468652066757475726560501b6044820152606401610675565b60c086018290526101208601819052436101008701526138a386612c86565b505050505050565b60005b81518110156118fb57601560008383815181106138cd576138cd6145f5565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161561393b576015600083838151811061390f5761390f6145f5565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191690555b6001016138ae565b60005b81518110156118fb5760156000838381518110613965576139656145f5565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615156001146139ed576001601560008484815181106139ad576139ad6145f5565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600101613946565b600060018203613a0757505060065490565b60028203613a1757505060075490565b60038203613a2757505060085490565b60405162461bcd60e51b815260206004820152601060248201526f756e6b6e6f776e20736576657269747960801b6044820152606401610675565b60008060008060008060fc905060008989898d604051602001613a889493929190614bfb565b6040516020818303038152906040529050613aa1613ce2565b60a081835160208501865afa613ab657600080fd5b8051600103613ac457600197505b602081015160408201516060830151608090930151999e919d509b50909950969750505050505050565b6000806000806000613afe613ce2565b60a081885160208a018b5afa613b1357600080fd5b8051600103613b2157600195505b602081015160408201516060830151608090930151979a91995097509095945092505050565b60408051610140810190915280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a00160405280600081526020016000815260200160008152602001613bf160405180606001604052806000815260200160008152602001600081525090565b8152602001613c1a60405180606001604052806000815260200160008152602001600081525090565b905290565b828054828255906000526020600020908101928215613c5f5760005260206000209182015b82811115613c5f578254825591600101919060010190613c44565b50613c6b929150613d00565b5090565b828054828255906000526020600020908101928215613c5f579160200282015b82811115613c5f57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c8f565b508054600082559060005260206000209081019061082d9190613d00565b6040518060a001604052806005906020820280368337509192915050565b5b80821115613c6b5760008155600101613d01565b600060208284031215613d2757600080fd5b5035919050565b6001600160a01b038116811461082d57600080fd5b8035610b1381613d2e565b60008060408385031215613d6157600080fd5b8235613d6c81613d2e565b91506020830135613d7c81613d2e565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715613dc057613dc0613d87565b60405290565b60405161028081016001600160401b0381118282101715613dc057613dc0613d87565b604051601f8201601f191681016001600160401b0381118282101715613e1157613e11613d87565b604052919050565b803560038110610b1357600080fd5b8035600a8110610b1357600080fd5b60006001600160401b03821115613e5057613e50613d87565b50601f01601f191660200190565b600082601f830112613e6f57600080fd5b8135613e82613e7d82613e37565b613de9565b818152846020838601011115613e9757600080fd5b816020850160208301376000918101602001919091529392505050565b60006101408284031215613ec757600080fd5b613ecf613d9d565b9050613eda82613e19565b8152613ee860208301613e28565b6020820152613ef960408301613d43565b6040820152613f0a60608301613d43565b606082015260808201356001600160401b03811115613f2857600080fd5b613f3484828501613e5e565b60808301525060a0828101359082015260c0808301359082015260e0808301359082015261010080830135908201526101209182013591810191909152919050565b600080600060608486031215613f8b57600080fd5b83356001600160401b03811115613fa157600080fd5b613fad86828701613eb4565b9660208601359650604090950135949350505050565b600060208284031215613fd557600080fd5b81356001600160401b03811115613feb57600080fd5b613ff784828501613eb4565b949350505050565b60008060006060848603121561401457600080fd5b833561401f81613d2e565b925061402d60208501613e28565b929592945050506040919091013590565b60006020828403121561405057600080fd5b813561098481613d2e565b801515811461082d57600080fd5b60006020828403121561407b57600080fd5b81356109848161405b565b634e487b7160e01b600052602160045260246000fd5b600381106140ac576140ac614086565b9052565b600a81106140ac576140ac614086565b60005b838110156140db5781810151838201526020016140c3565b50506000910152565b600081518084526140fc8160208601602086016140c0565b601f01601f19169290920160200192915050565b61411b82825161409c565b6000602082015161412f60208501826140b0565b50604082015161414a60408501826001600160a01b03169052565b50606082015161416560608501826001600160a01b03169052565b50608082015161014060808501526141816101408501826140e4565b905060a083015160a085015260c083015160c085015260e083015160e08501526101008301516101008501526101208301516101208501528091505092915050565b6020815260006109846020830184614110565b6000606082840312156141e857600080fd5b604051606081016001600160401b038111828210171561420a5761420a613d87565b60409081528335825260208085013590830152928301359281019290925250919050565b60006060828403121561424057600080fd5b61098483836141d6565b6000806040838503121561425d57600080fd5b823561426881613d2e565b946020939093013593505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156142cf57603f198786030184526142ba858351614110565b9450602093840193919091019060010161429e565b50929695505050505050565b600061012082019050825182526020830151602083015260408301516040830152606083015161432260608401828051825260208082015190830152604090810151910152565b5060809290920151805160c0830152602081015160e0830152604001516101009091015290565b60006020828403121561435b57600080fd5b81356001600160401b0381111561437157600080fd5b8201601f8101841361438257600080fd5b80356001600160401b0381111561439b5761439b613d87565b8060051b6143ab60208201613de9565b918252602081840181019290810190878411156143c757600080fd5b6020850194505b838510156143f557843592506143e383613d2e565b828252602094850194909101906143ce565b979650505050505050565b8051610b1381613d2e565b60006020828403121561441d57600080fd5b815161098481613d2e565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60208082526029908201527f66756e6374696f6e207265737472696374656420746f206120636f6d6d69747460408201526832b29036b2b6b132b960b91b606082015260800190565b6020808252601d908201527f6576656e74207265706f72746572206d7573742062652063616c6c6572000000604082015260600190565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b60006020828403121561452857600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826145545761455461452f565b500690565b60208082526028908201527f66756e6374696f6e207265737472696374656420746f204175746f6e6974792060408201526718dbdb9d1c9858dd60c21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000816145c6576145c66145a1565b506000190190565b818103818111156115d2576115d26145a1565b6000826145f0576145f061452f565b500490565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061461f57607f821691505b60208210810361463f57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156115d2576115d26145a1565b82548152600183015460208201526002830154604082015260c081018251606083015260208301516080830152604083015160a0830152610984565b600082601f8301126146a557600080fd5b81516020830160006146b9613e7d84613e37565b90508281528583830111156146cd57600080fd5b6146db8360208301846140c0565b95945050505050565b805160068110610b1357600080fd5b60006020828403121561470557600080fd5b81516001600160401b0381111561471b57600080fd5b8201610280818503121561472e57600080fd5b614736613dc6565b61473f82614400565b815261474d60208301614400565b602082015261475e60408301614400565b604082015260608201516001600160401b0381111561477c57600080fd5b61478886828501614694565b6060830152506080828101519082015260a0808301519082015260c0808301519082015260e0808301519082015261010080830151908201526101208083015190820152610140808301519082015261016080830151908201526147ef6101808301614400565b6101808201526101a082810151908201526101c080830151908201526101e0808301519082015261020080830151908201526102208201516001600160401b0381111561483b57600080fd5b61484786828501614694565b6102208301525061485b61024083016146e4565b61024082015261026091820151918101919091529392505050565b60018060a01b03831681526060602082015260006060820152608060408201526000613ff760808301846140e4565b6000602082840312156148b757600080fd5b610984826146e4565b80820281158282048414176115d2576115d26145a1565b600681106140ac576140ac614086565b6001600160a01b0386168152602081018590526040810184905260a0810161491260608301856148d7565b61491f60808301846148d7565b9695505050505050565b60008060006060848603121561493e57600080fd5b83516020850151604086015191945092506149588161405b565b809150509250925092565b6020808252601190820152700decccccadcc8cae440dad2e6dac2e8c6d607b1b604082015260600190565b60208082526010908201526f0e4ead8ca40d2c840dad2e6dac2e8c6d60831b604082015260600190565b60208082526024908201527f616c726561647920736c6173686564206174207468652070726f6f66277320656040820152630e0dec6d60e31b606082015260800190565b601f82111561074b57806000526020600020601f840160051c81016020851015614a235750805b601f840160051c820191505b81811015614a435760008155600101614a2f565b5050505050565b81516001600160401b03811115614a6357614a63613d87565b614a7781614a71845461460b565b846149fc565b6020601f821160018114614aab5760008315614a935750848201515b600019600385901b1c1916600184901b178455614a43565b600084815260208120601f198516915b82811015614adb5787850151825560209485019460019092019101614abb565b5084821015614af95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6001815b6001841115614b4357808504811115614b2757614b276145a1565b6001841615614b3557908102905b60019390931c928002614b0c565b935093915050565b600082614b5a575060016115d2565b81614b67575060006115d2565b8160018114614b7d5760028114614b8757614ba3565b60019150506115d2565b60ff841115614b9857614b986145a1565b50506001821b6115d2565b5060208310610133831016604e8410600b8410161715614bc6575081810a6115d2565b614bd36000198484614b08565b8060001904821115614be757614be76145a1565b029392505050565b60006109848383614b4b565b84815283602082015282604082015260008251614c1f8160608501602087016140c0565b919091016060019594505050505056fea2646970667358221220cfb74d75b6400f268524d4402f6048e636e4902a1968729ee2c099953197dee564736f6c634300081e0033",
}

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

// Deprecated: Use AccountabilityTestMetaData.Sigs instead.
// AccountabilityTestFuncSigs maps the 4-byte function signature to its string representation.
var AccountabilityTestFuncSigs = AccountabilityTestMetaData.Sigs

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

// DeployAccountabilityTest deploys a new Ethereum contract, binding an instance of AccountabilityTest to it.
func DeployAccountabilityTest(auth *bind.TransactOpts, backend bind.ContractBackend, _autonity common.Address, _config IAccountabilityConfig) (common.Address, *types.Transaction, *AccountabilityTest, error) {
	parsed, err := AccountabilityTestMetaData.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(AccountabilityTestBin), backend, _autonity, _config)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &AccountabilityTest{AccountabilityTestCaller: AccountabilityTestCaller{contract: contract}, AccountabilityTestTransactor: AccountabilityTestTransactor{contract: contract}, AccountabilityTestFilterer: AccountabilityTestFilterer{contract: contract}}, nil
}

// AccountabilityTest is an auto generated Go binding around an Ethereum contract.
type AccountabilityTest struct {
	AccountabilityTestCaller     // Read-only binding to the contract
	AccountabilityTestTransactor // Write-only binding to the contract
	AccountabilityTestFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewAccountabilityTest creates a new instance of AccountabilityTest, bound to a specific deployed contract.
func NewAccountabilityTest(address common.Address, backend bind.ContractBackend) (*AccountabilityTest, error) {
	contract, err := bindAccountabilityTest(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &AccountabilityTest{AccountabilityTestCaller: AccountabilityTestCaller{contract: contract}, AccountabilityTestTransactor: AccountabilityTestTransactor{contract: contract}, AccountabilityTestFilterer: AccountabilityTestFilterer{contract: contract}}, nil
}

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

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

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

// bindAccountabilityTest binds a generic wrapper to an already deployed contract.
func bindAccountabilityTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(AccountabilityTestABI))
	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 (_AccountabilityTest *AccountabilityTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _AccountabilityTest.Contract.AccountabilityTestCaller.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 (_AccountabilityTest *AccountabilityTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.AccountabilityTestTransactor.contract.Transfer(opts)
}

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

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

// CanAccuse is a free data retrieval call binding the contract method 0x7ccecadd.
//
// Solidity: function canAccuse(address _offender, uint8 _rule, uint256 _block) view returns(bool _result, uint256 _deadline)
func (_AccountabilityTest *AccountabilityTestCaller) CanAccuse(opts *bind.CallOpts, _offender common.Address, _rule uint8, _block *big.Int) (struct {
	Result   bool
	Deadline *big.Int
}, error) {
	var out []interface{}
	err := _AccountabilityTest.contract.Call(opts, &out, "canAccuse", _offender, _rule, _block)

	outstruct := new(struct {
		Result   bool
		Deadline *big.Int
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.Result = *abi.ConvertType(out[0], new(bool)).(*bool)
	outstruct.Deadline = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)

	return *outstruct, err

}

// CanAccuse is a free data retrieval call binding the contract method 0x7ccecadd.
//
// Solidity: function canAccuse(address _offender, uint8 _rule, uint256 _block) view returns(bool _result, uint256 _deadline)
func (_AccountabilityTest *AccountabilityTestSession) CanAccuse(_offender common.Address, _rule uint8, _block *big.Int) (struct {
	Result   bool
	Deadline *big.Int
}, error) {
	return _AccountabilityTest.Contract.CanAccuse(&_AccountabilityTest.CallOpts, _offender, _rule, _block)
}

// CanAccuse is a free data retrieval call binding the contract method 0x7ccecadd.
//
// Solidity: function canAccuse(address _offender, uint8 _rule, uint256 _block) view returns(bool _result, uint256 _deadline)
func (_AccountabilityTest *AccountabilityTestCallerSession) CanAccuse(_offender common.Address, _rule uint8, _block *big.Int) (struct {
	Result   bool
	Deadline *big.Int
}, error) {
	return _AccountabilityTest.Contract.CanAccuse(&_AccountabilityTest.CallOpts, _offender, _rule, _block)
}

// CanSlash is a free data retrieval call binding the contract method 0x4108a95a.
//
// Solidity: function canSlash(address _offender, uint8 _rule, uint256 _block) view returns(bool)
func (_AccountabilityTest *AccountabilityTestCaller) CanSlash(opts *bind.CallOpts, _offender common.Address, _rule uint8, _block *big.Int) (bool, error) {
	var out []interface{}
	err := _AccountabilityTest.contract.Call(opts, &out, "canSlash", _offender, _rule, _block)

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

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

	return out0, err

}

// CanSlash is a free data retrieval call binding the contract method 0x4108a95a.
//
// Solidity: function canSlash(address _offender, uint8 _rule, uint256 _block) view returns(bool)
func (_AccountabilityTest *AccountabilityTestSession) CanSlash(_offender common.Address, _rule uint8, _block *big.Int) (bool, error) {
	return _AccountabilityTest.Contract.CanSlash(&_AccountabilityTest.CallOpts, _offender, _rule, _block)
}

// CanSlash is a free data retrieval call binding the contract method 0x4108a95a.
//
// Solidity: function canSlash(address _offender, uint8 _rule, uint256 _block) view returns(bool)
func (_AccountabilityTest *AccountabilityTestCallerSession) CanSlash(_offender common.Address, _rule uint8, _block *big.Int) (bool, error) {
	return _AccountabilityTest.Contract.CanSlash(&_AccountabilityTest.CallOpts, _offender, _rule, _block)
}

// GetBeneficiary is a free data retrieval call binding the contract method 0x505a1b31.
//
// Solidity: function getBeneficiary(address _offender) view returns(address)
func (_AccountabilityTest *AccountabilityTestCaller) GetBeneficiary(opts *bind.CallOpts, _offender common.Address) (common.Address, error) {
	var out []interface{}
	err := _AccountabilityTest.contract.Call(opts, &out, "getBeneficiary", _offender)

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

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

	return out0, err

}

// GetBeneficiary is a free data retrieval call binding the contract method 0x505a1b31.
//
// Solidity: function getBeneficiary(address _offender) view returns(address)
func (_AccountabilityTest *AccountabilityTestSession) GetBeneficiary(_offender common.Address) (common.Address, error) {
	return _AccountabilityTest.Contract.GetBeneficiary(&_AccountabilityTest.CallOpts, _offender)
}

// GetBeneficiary is a free data retrieval call binding the contract method 0x505a1b31.
//
// Solidity: function getBeneficiary(address _offender) view returns(address)
func (_AccountabilityTest *AccountabilityTestCallerSession) GetBeneficiary(_offender common.Address) (common.Address, error) {
	return _AccountabilityTest.Contract.GetBeneficiary(&_AccountabilityTest.CallOpts, _offender)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256)))
func (_AccountabilityTest *AccountabilityTestCaller) GetConfig(opts *bind.CallOpts) (IAccountabilityConfig, error) {
	var out []interface{}
	err := _AccountabilityTest.contract.Call(opts, &out, "getConfig")

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

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

	return out0, err

}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256)))
func (_AccountabilityTest *AccountabilityTestSession) GetConfig() (IAccountabilityConfig, error) {
	return _AccountabilityTest.Contract.GetConfig(&_AccountabilityTest.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256)))
func (_AccountabilityTest *AccountabilityTestCallerSession) GetConfig() (IAccountabilityConfig, error) {
	return _AccountabilityTest.Contract.GetConfig(&_AccountabilityTest.CallOpts)
}

// GetEvent is a free data retrieval call binding the contract method 0x6d1884e0.
//
// Solidity: function getEvent(uint256 _id) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_AccountabilityTest *AccountabilityTestCaller) GetEvent(opts *bind.CallOpts, _id *big.Int) (IAccountabilityEvent, error) {
	var out []interface{}
	err := _AccountabilityTest.contract.Call(opts, &out, "getEvent", _id)

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

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

	return out0, err

}

// GetEvent is a free data retrieval call binding the contract method 0x6d1884e0.
//
// Solidity: function getEvent(uint256 _id) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_AccountabilityTest *AccountabilityTestSession) GetEvent(_id *big.Int) (IAccountabilityEvent, error) {
	return _AccountabilityTest.Contract.GetEvent(&_AccountabilityTest.CallOpts, _id)
}

// GetEvent is a free data retrieval call binding the contract method 0x6d1884e0.
//
// Solidity: function getEvent(uint256 _id) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_AccountabilityTest *AccountabilityTestCallerSession) GetEvent(_id *big.Int) (IAccountabilityEvent, error) {
	return _AccountabilityTest.Contract.GetEvent(&_AccountabilityTest.CallOpts, _id)
}

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

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

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

	return out0, err

}

// GetEventsLength is a free data retrieval call binding the contract method 0x47fc216e.
//
// Solidity: function getEventsLength() view returns(uint256)
func (_AccountabilityTest *AccountabilityTestSession) GetEventsLength() (*big.Int, error) {
	return _AccountabilityTest.Contract.GetEventsLength(&_AccountabilityTest.CallOpts)
}

// GetEventsLength is a free data retrieval call binding the contract method 0x47fc216e.
//
// Solidity: function getEventsLength() view returns(uint256)
func (_AccountabilityTest *AccountabilityTestCallerSession) GetEventsLength() (*big.Int, error) {
	return _AccountabilityTest.Contract.GetEventsLength(&_AccountabilityTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetGracePeriod is a free data retrieval call binding the contract method 0xdbd18388.
//
// Solidity: function getGracePeriod() view returns(uint256)
func (_AccountabilityTest *AccountabilityTestSession) GetGracePeriod() (*big.Int, error) {
	return _AccountabilityTest.Contract.GetGracePeriod(&_AccountabilityTest.CallOpts)
}

// GetGracePeriod is a free data retrieval call binding the contract method 0xdbd18388.
//
// Solidity: function getGracePeriod() view returns(uint256)
func (_AccountabilityTest *AccountabilityTestCallerSession) GetGracePeriod() (*big.Int, error) {
	return _AccountabilityTest.Contract.GetGracePeriod(&_AccountabilityTest.CallOpts)
}

// GetHistory is a free data retrieval call binding the contract method 0x80396811.
//
// Solidity: function getHistory(address _validator) view returns(uint256)
func (_AccountabilityTest *AccountabilityTestCaller) GetHistory(opts *bind.CallOpts, _validator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _AccountabilityTest.contract.Call(opts, &out, "getHistory", _validator)

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

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

	return out0, err

}

// GetHistory is a free data retrieval call binding the contract method 0x80396811.
//
// Solidity: function getHistory(address _validator) view returns(uint256)
func (_AccountabilityTest *AccountabilityTestSession) GetHistory(_validator common.Address) (*big.Int, error) {
	return _AccountabilityTest.Contract.GetHistory(&_AccountabilityTest.CallOpts, _validator)
}

// GetHistory is a free data retrieval call binding the contract method 0x80396811.
//
// Solidity: function getHistory(address _validator) view returns(uint256)
func (_AccountabilityTest *AccountabilityTestCallerSession) GetHistory(_validator common.Address) (*big.Int, error) {
	return _AccountabilityTest.Contract.GetHistory(&_AccountabilityTest.CallOpts, _validator)
}

// GetSlashingHistory is a free data retrieval call binding the contract method 0xa6b0aaae.
//
// Solidity: function getSlashingHistory(address _validator, uint256 _epoch) view returns(uint256)
func (_AccountabilityTest *AccountabilityTestCaller) GetSlashingHistory(opts *bind.CallOpts, _validator common.Address, _epoch *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _AccountabilityTest.contract.Call(opts, &out, "getSlashingHistory", _validator, _epoch)

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

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

	return out0, err

}

// GetSlashingHistory is a free data retrieval call binding the contract method 0xa6b0aaae.
//
// Solidity: function getSlashingHistory(address _validator, uint256 _epoch) view returns(uint256)
func (_AccountabilityTest *AccountabilityTestSession) GetSlashingHistory(_validator common.Address, _epoch *big.Int) (*big.Int, error) {
	return _AccountabilityTest.Contract.GetSlashingHistory(&_AccountabilityTest.CallOpts, _validator, _epoch)
}

// GetSlashingHistory is a free data retrieval call binding the contract method 0xa6b0aaae.
//
// Solidity: function getSlashingHistory(address _validator, uint256 _epoch) view returns(uint256)
func (_AccountabilityTest *AccountabilityTestCallerSession) GetSlashingHistory(_validator common.Address, _epoch *big.Int) (*big.Int, error) {
	return _AccountabilityTest.Contract.GetSlashingHistory(&_AccountabilityTest.CallOpts, _validator, _epoch)
}

// GetValidatorAccusation is a free data retrieval call binding the contract method 0x9cb22b06.
//
// Solidity: function getValidatorAccusation(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_AccountabilityTest *AccountabilityTestCaller) GetValidatorAccusation(opts *bind.CallOpts, _val common.Address) (IAccountabilityEvent, error) {
	var out []interface{}
	err := _AccountabilityTest.contract.Call(opts, &out, "getValidatorAccusation", _val)

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

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

	return out0, err

}

// GetValidatorAccusation is a free data retrieval call binding the contract method 0x9cb22b06.
//
// Solidity: function getValidatorAccusation(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_AccountabilityTest *AccountabilityTestSession) GetValidatorAccusation(_val common.Address) (IAccountabilityEvent, error) {
	return _AccountabilityTest.Contract.GetValidatorAccusation(&_AccountabilityTest.CallOpts, _val)
}

// GetValidatorAccusation is a free data retrieval call binding the contract method 0x9cb22b06.
//
// Solidity: function getValidatorAccusation(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256))
func (_AccountabilityTest *AccountabilityTestCallerSession) GetValidatorAccusation(_val common.Address) (IAccountabilityEvent, error) {
	return _AccountabilityTest.Contract.GetValidatorAccusation(&_AccountabilityTest.CallOpts, _val)
}

// GetValidatorFaults is a free data retrieval call binding the contract method 0xbebaa8fc.
//
// Solidity: function getValidatorFaults(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256)[])
func (_AccountabilityTest *AccountabilityTestCaller) GetValidatorFaults(opts *bind.CallOpts, _val common.Address) ([]IAccountabilityEvent, error) {
	var out []interface{}
	err := _AccountabilityTest.contract.Call(opts, &out, "getValidatorFaults", _val)

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

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

	return out0, err

}

// GetValidatorFaults is a free data retrieval call binding the contract method 0xbebaa8fc.
//
// Solidity: function getValidatorFaults(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256)[])
func (_AccountabilityTest *AccountabilityTestSession) GetValidatorFaults(_val common.Address) ([]IAccountabilityEvent, error) {
	return _AccountabilityTest.Contract.GetValidatorFaults(&_AccountabilityTest.CallOpts, _val)
}

// GetValidatorFaults is a free data retrieval call binding the contract method 0xbebaa8fc.
//
// Solidity: function getValidatorFaults(address _val) view returns((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256)[])
func (_AccountabilityTest *AccountabilityTestCallerSession) GetValidatorFaults(_val common.Address) ([]IAccountabilityEvent, error) {
	return _AccountabilityTest.Contract.GetValidatorFaults(&_AccountabilityTest.CallOpts, _val)
}

// AddBeneficiary is a paid mutator transaction binding the contract method 0x0af86dc2.
//
// Solidity: function addBeneficiary(address _offender, address _reporter) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) AddBeneficiary(opts *bind.TransactOpts, _offender common.Address, _reporter common.Address) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "addBeneficiary", _offender, _reporter)
}

// AddBeneficiary is a paid mutator transaction binding the contract method 0x0af86dc2.
//
// Solidity: function addBeneficiary(address _offender, address _reporter) returns()
func (_AccountabilityTest *AccountabilityTestSession) AddBeneficiary(_offender common.Address, _reporter common.Address) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.AddBeneficiary(&_AccountabilityTest.TransactOpts, _offender, _reporter)
}

// AddBeneficiary is a paid mutator transaction binding the contract method 0x0af86dc2.
//
// Solidity: function addBeneficiary(address _offender, address _reporter) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) AddBeneficiary(_offender common.Address, _reporter common.Address) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.AddBeneficiary(&_AccountabilityTest.TransactOpts, _offender, _reporter)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d.
//
// Solidity: function distributeRewards(address _offender, uint256 _ntnReward) payable returns()
func (_AccountabilityTest *AccountabilityTestTransactor) DistributeRewards(opts *bind.TransactOpts, _offender common.Address, _ntnReward *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "distributeRewards", _offender, _ntnReward)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d.
//
// Solidity: function distributeRewards(address _offender, uint256 _ntnReward) payable returns()
func (_AccountabilityTest *AccountabilityTestSession) DistributeRewards(_offender common.Address, _ntnReward *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.DistributeRewards(&_AccountabilityTest.TransactOpts, _offender, _ntnReward)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d.
//
// Solidity: function distributeRewards(address _offender, uint256 _ntnReward) payable returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) DistributeRewards(_offender common.Address, _ntnReward *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.DistributeRewards(&_AccountabilityTest.TransactOpts, _offender, _ntnReward)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnd) returns(uint256, uint256, uint256)
func (_AccountabilityTest *AccountabilityTestTransactor) Finalize(opts *bind.TransactOpts, _epochEnd bool) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "finalize", _epochEnd)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnd) returns(uint256, uint256, uint256)
func (_AccountabilityTest *AccountabilityTestSession) Finalize(_epochEnd bool) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.Finalize(&_AccountabilityTest.TransactOpts, _epochEnd)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnd) returns(uint256, uint256, uint256)
func (_AccountabilityTest *AccountabilityTestTransactorSession) Finalize(_epochEnd bool) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.Finalize(&_AccountabilityTest.TransactOpts, _epochEnd)
}

// HandleAccusation is a paid mutator transaction binding the contract method 0x1e85f2e5.
//
// Solidity: function handleAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) HandleAccusation(opts *bind.TransactOpts, _event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "handleAccusation", _event)
}

// HandleAccusation is a paid mutator transaction binding the contract method 0x1e85f2e5.
//
// Solidity: function handleAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestSession) HandleAccusation(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleAccusation(&_AccountabilityTest.TransactOpts, _event)
}

// HandleAccusation is a paid mutator transaction binding the contract method 0x1e85f2e5.
//
// Solidity: function handleAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) HandleAccusation(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleAccusation(&_AccountabilityTest.TransactOpts, _event)
}

// HandleInnocenceProof is a paid mutator transaction binding the contract method 0xe05f8786.
//
// Solidity: function handleInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) HandleInnocenceProof(opts *bind.TransactOpts, _event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "handleInnocenceProof", _event)
}

// HandleInnocenceProof is a paid mutator transaction binding the contract method 0xe05f8786.
//
// Solidity: function handleInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestSession) HandleInnocenceProof(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleInnocenceProof(&_AccountabilityTest.TransactOpts, _event)
}

// HandleInnocenceProof is a paid mutator transaction binding the contract method 0xe05f8786.
//
// Solidity: function handleInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) HandleInnocenceProof(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleInnocenceProof(&_AccountabilityTest.TransactOpts, _event)
}

// HandleMisbehaviour is a paid mutator transaction binding the contract method 0xa48a9b50.
//
// Solidity: function handleMisbehaviour((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) HandleMisbehaviour(opts *bind.TransactOpts, _event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "handleMisbehaviour", _event)
}

// HandleMisbehaviour is a paid mutator transaction binding the contract method 0xa48a9b50.
//
// Solidity: function handleMisbehaviour((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestSession) HandleMisbehaviour(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleMisbehaviour(&_AccountabilityTest.TransactOpts, _event)
}

// HandleMisbehaviour is a paid mutator transaction binding the contract method 0xa48a9b50.
//
// Solidity: function handleMisbehaviour((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) HandleMisbehaviour(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleMisbehaviour(&_AccountabilityTest.TransactOpts, _event)
}

// HandleValidAccusation is a paid mutator transaction binding the contract method 0x239a49ba.
//
// Solidity: function handleValidAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) HandleValidAccusation(opts *bind.TransactOpts, _event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "handleValidAccusation", _event)
}

// HandleValidAccusation is a paid mutator transaction binding the contract method 0x239a49ba.
//
// Solidity: function handleValidAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestSession) HandleValidAccusation(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleValidAccusation(&_AccountabilityTest.TransactOpts, _event)
}

// HandleValidAccusation is a paid mutator transaction binding the contract method 0x239a49ba.
//
// Solidity: function handleValidAccusation((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) HandleValidAccusation(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleValidAccusation(&_AccountabilityTest.TransactOpts, _event)
}

// HandleValidFaultProof is a paid mutator transaction binding the contract method 0x51772af9.
//
// Solidity: function handleValidFaultProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) HandleValidFaultProof(opts *bind.TransactOpts, _event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "handleValidFaultProof", _event)
}

// HandleValidFaultProof is a paid mutator transaction binding the contract method 0x51772af9.
//
// Solidity: function handleValidFaultProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestSession) HandleValidFaultProof(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleValidFaultProof(&_AccountabilityTest.TransactOpts, _event)
}

// HandleValidFaultProof is a paid mutator transaction binding the contract method 0x51772af9.
//
// Solidity: function handleValidFaultProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) HandleValidFaultProof(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleValidFaultProof(&_AccountabilityTest.TransactOpts, _event)
}

// HandleValidInnocenceProof is a paid mutator transaction binding the contract method 0x653cd199.
//
// Solidity: function handleValidInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) HandleValidInnocenceProof(opts *bind.TransactOpts, _event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "handleValidInnocenceProof", _event)
}

// HandleValidInnocenceProof is a paid mutator transaction binding the contract method 0x653cd199.
//
// Solidity: function handleValidInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestSession) HandleValidInnocenceProof(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleValidInnocenceProof(&_AccountabilityTest.TransactOpts, _event)
}

// HandleValidInnocenceProof is a paid mutator transaction binding the contract method 0x653cd199.
//
// Solidity: function handleValidInnocenceProof((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) HandleValidInnocenceProof(_event IAccountabilityEvent) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.HandleValidInnocenceProof(&_AccountabilityTest.TransactOpts, _event)
}

// PerformSlashingTasks is a paid mutator transaction binding the contract method 0x633b5e5e.
//
// Solidity: function performSlashingTasks() returns()
func (_AccountabilityTest *AccountabilityTestTransactor) PerformSlashingTasks(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "performSlashingTasks")
}

// PerformSlashingTasks is a paid mutator transaction binding the contract method 0x633b5e5e.
//
// Solidity: function performSlashingTasks() returns()
func (_AccountabilityTest *AccountabilityTestSession) PerformSlashingTasks() (*types.Transaction, error) {
	return _AccountabilityTest.Contract.PerformSlashingTasks(&_AccountabilityTest.TransactOpts)
}

// PerformSlashingTasks is a paid mutator transaction binding the contract method 0x633b5e5e.
//
// Solidity: function performSlashingTasks() returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) PerformSlashingTasks() (*types.Transaction, error) {
	return _AccountabilityTest.Contract.PerformSlashingTasks(&_AccountabilityTest.TransactOpts)
}

// PromoteGuiltyAccusations is a paid mutator transaction binding the contract method 0x7ec8be1d.
//
// Solidity: function promoteGuiltyAccusations() returns()
func (_AccountabilityTest *AccountabilityTestTransactor) PromoteGuiltyAccusations(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "promoteGuiltyAccusations")
}

// PromoteGuiltyAccusations is a paid mutator transaction binding the contract method 0x7ec8be1d.
//
// Solidity: function promoteGuiltyAccusations() returns()
func (_AccountabilityTest *AccountabilityTestSession) PromoteGuiltyAccusations() (*types.Transaction, error) {
	return _AccountabilityTest.Contract.PromoteGuiltyAccusations(&_AccountabilityTest.TransactOpts)
}

// PromoteGuiltyAccusations is a paid mutator transaction binding the contract method 0x7ec8be1d.
//
// Solidity: function promoteGuiltyAccusations() returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) PromoteGuiltyAccusations() (*types.Transaction, error) {
	return _AccountabilityTest.Contract.PromoteGuiltyAccusations(&_AccountabilityTest.TransactOpts)
}

// SetBaseSlashingRates is a paid mutator transaction binding the contract method 0xa2652078.
//
// Solidity: function setBaseSlashingRates((uint256,uint256,uint256) _rates) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) SetBaseSlashingRates(opts *bind.TransactOpts, _rates IAccountabilityBaseSlashingRates) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "setBaseSlashingRates", _rates)
}

// SetBaseSlashingRates is a paid mutator transaction binding the contract method 0xa2652078.
//
// Solidity: function setBaseSlashingRates((uint256,uint256,uint256) _rates) returns()
func (_AccountabilityTest *AccountabilityTestSession) SetBaseSlashingRates(_rates IAccountabilityBaseSlashingRates) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetBaseSlashingRates(&_AccountabilityTest.TransactOpts, _rates)
}

// SetBaseSlashingRates is a paid mutator transaction binding the contract method 0xa2652078.
//
// Solidity: function setBaseSlashingRates((uint256,uint256,uint256) _rates) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) SetBaseSlashingRates(_rates IAccountabilityBaseSlashingRates) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetBaseSlashingRates(&_AccountabilityTest.TransactOpts, _rates)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe08b14ed.
//
// Solidity: function setCommittee(address[] _newCommittee) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) SetCommittee(opts *bind.TransactOpts, _newCommittee []common.Address) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "setCommittee", _newCommittee)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe08b14ed.
//
// Solidity: function setCommittee(address[] _newCommittee) returns()
func (_AccountabilityTest *AccountabilityTestSession) SetCommittee(_newCommittee []common.Address) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetCommittee(&_AccountabilityTest.TransactOpts, _newCommittee)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe08b14ed.
//
// Solidity: function setCommittee(address[] _newCommittee) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) SetCommittee(_newCommittee []common.Address) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetCommittee(&_AccountabilityTest.TransactOpts, _newCommittee)
}

// SetDelta is a paid mutator transaction binding the contract method 0x025ff0a5.
//
// Solidity: function setDelta(uint256 _delta) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) SetDelta(opts *bind.TransactOpts, _delta *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "setDelta", _delta)
}

// SetDelta is a paid mutator transaction binding the contract method 0x025ff0a5.
//
// Solidity: function setDelta(uint256 _delta) returns()
func (_AccountabilityTest *AccountabilityTestSession) SetDelta(_delta *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetDelta(&_AccountabilityTest.TransactOpts, _delta)
}

// SetDelta is a paid mutator transaction binding the contract method 0x025ff0a5.
//
// Solidity: function setDelta(uint256 _delta) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) SetDelta(_delta *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetDelta(&_AccountabilityTest.TransactOpts, _delta)
}

// SetFactors is a paid mutator transaction binding the contract method 0x8975e977.
//
// Solidity: function setFactors((uint256,uint256,uint256) _factors) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) SetFactors(opts *bind.TransactOpts, _factors IAccountabilityFactors) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "setFactors", _factors)
}

// SetFactors is a paid mutator transaction binding the contract method 0x8975e977.
//
// Solidity: function setFactors((uint256,uint256,uint256) _factors) returns()
func (_AccountabilityTest *AccountabilityTestSession) SetFactors(_factors IAccountabilityFactors) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetFactors(&_AccountabilityTest.TransactOpts, _factors)
}

// SetFactors is a paid mutator transaction binding the contract method 0x8975e977.
//
// Solidity: function setFactors((uint256,uint256,uint256) _factors) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) SetFactors(_factors IAccountabilityFactors) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetFactors(&_AccountabilityTest.TransactOpts, _factors)
}

// SetInnocenceProofSubmissionWindow is a paid mutator transaction binding the contract method 0x433afda8.
//
// Solidity: function setInnocenceProofSubmissionWindow(uint256 _window) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) SetInnocenceProofSubmissionWindow(opts *bind.TransactOpts, _window *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "setInnocenceProofSubmissionWindow", _window)
}

// SetInnocenceProofSubmissionWindow is a paid mutator transaction binding the contract method 0x433afda8.
//
// Solidity: function setInnocenceProofSubmissionWindow(uint256 _window) returns()
func (_AccountabilityTest *AccountabilityTestSession) SetInnocenceProofSubmissionWindow(_window *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetInnocenceProofSubmissionWindow(&_AccountabilityTest.TransactOpts, _window)
}

// SetInnocenceProofSubmissionWindow is a paid mutator transaction binding the contract method 0x433afda8.
//
// Solidity: function setInnocenceProofSubmissionWindow(uint256 _window) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) SetInnocenceProofSubmissionWindow(_window *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetInnocenceProofSubmissionWindow(&_AccountabilityTest.TransactOpts, _window)
}

// SetRange is a paid mutator transaction binding the contract method 0x6a91991b.
//
// Solidity: function setRange(uint256 _range) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) SetRange(opts *bind.TransactOpts, _range *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "setRange", _range)
}

// SetRange is a paid mutator transaction binding the contract method 0x6a91991b.
//
// Solidity: function setRange(uint256 _range) returns()
func (_AccountabilityTest *AccountabilityTestSession) SetRange(_range *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetRange(&_AccountabilityTest.TransactOpts, _range)
}

// SetRange is a paid mutator transaction binding the contract method 0x6a91991b.
//
// Solidity: function setRange(uint256 _range) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) SetRange(_range *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.SetRange(&_AccountabilityTest.TransactOpts, _range)
}

// Slash is a paid mutator transaction binding the contract method 0x0d20e5ea.
//
// Solidity: function slash((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event, uint256 _epochOffencesCount, uint256 _epochPeriod) returns()
func (_AccountabilityTest *AccountabilityTestTransactor) Slash(opts *bind.TransactOpts, _event IAccountabilityEvent, _epochOffencesCount *big.Int, _epochPeriod *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.contract.Transact(opts, "slash", _event, _epochOffencesCount, _epochPeriod)
}

// Slash is a paid mutator transaction binding the contract method 0x0d20e5ea.
//
// Solidity: function slash((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event, uint256 _epochOffencesCount, uint256 _epochPeriod) returns()
func (_AccountabilityTest *AccountabilityTestSession) Slash(_event IAccountabilityEvent, _epochOffencesCount *big.Int, _epochPeriod *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.Slash(&_AccountabilityTest.TransactOpts, _event, _epochOffencesCount, _epochPeriod)
}

// Slash is a paid mutator transaction binding the contract method 0x0d20e5ea.
//
// Solidity: function slash((uint8,uint8,address,address,bytes,uint256,uint256,uint256,uint256,uint256) _event, uint256 _epochOffencesCount, uint256 _epochPeriod) returns()
func (_AccountabilityTest *AccountabilityTestTransactorSession) Slash(_event IAccountabilityEvent, _epochOffencesCount *big.Int, _epochPeriod *big.Int) (*types.Transaction, error) {
	return _AccountabilityTest.Contract.Slash(&_AccountabilityTest.TransactOpts, _event, _epochOffencesCount, _epochPeriod)
}

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

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

// AccountabilityTestAccountabilityFactorsUpdate represents a AccountabilityFactorsUpdate event raised by the AccountabilityTest contract.
type AccountabilityTestAccountabilityFactorsUpdate struct {
	OldFactors IAccountabilityFactors
	NewFactors IAccountabilityFactors
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterAccountabilityFactorsUpdate is a free log retrieval operation binding the contract event 0xeda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f.
//
// Solidity: event AccountabilityFactorsUpdate((uint256,uint256,uint256) oldFactors, (uint256,uint256,uint256) newFactors)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterAccountabilityFactorsUpdate(opts *bind.FilterOpts) (*AccountabilityTestAccountabilityFactorsUpdateIterator, error) {

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "AccountabilityFactorsUpdate")
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestAccountabilityFactorsUpdateIterator{contract: _AccountabilityTest.contract, event: "AccountabilityFactorsUpdate", logs: logs, sub: sub}, nil
}

// WatchAccountabilityFactorsUpdate is a free log subscription operation binding the contract event 0xeda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f.
//
// Solidity: event AccountabilityFactorsUpdate((uint256,uint256,uint256) oldFactors, (uint256,uint256,uint256) newFactors)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchAccountabilityFactorsUpdate(opts *bind.WatchOpts, sink chan<- *AccountabilityTestAccountabilityFactorsUpdate) (event.Subscription, error) {

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

// ParseAccountabilityFactorsUpdate is a log parse operation binding the contract event 0xeda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f.
//
// Solidity: event AccountabilityFactorsUpdate((uint256,uint256,uint256) oldFactors, (uint256,uint256,uint256) newFactors)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseAccountabilityFactorsUpdate(log types.Log) (*AccountabilityTestAccountabilityFactorsUpdate, error) {
	event := new(AccountabilityTestAccountabilityFactorsUpdate)
	if err := _AccountabilityTest.contract.UnpackLog(event, "AccountabilityFactorsUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestBaseSlashingRateUpdate represents a BaseSlashingRateUpdate event raised by the AccountabilityTest contract.
type AccountabilityTestBaseSlashingRateUpdate struct {
	OldRates IAccountabilityBaseSlashingRates
	NewRates IAccountabilityBaseSlashingRates
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterBaseSlashingRateUpdate is a free log retrieval operation binding the contract event 0x6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a.
//
// Solidity: event BaseSlashingRateUpdate((uint256,uint256,uint256) oldRates, (uint256,uint256,uint256) newRates)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterBaseSlashingRateUpdate(opts *bind.FilterOpts) (*AccountabilityTestBaseSlashingRateUpdateIterator, error) {

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "BaseSlashingRateUpdate")
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestBaseSlashingRateUpdateIterator{contract: _AccountabilityTest.contract, event: "BaseSlashingRateUpdate", logs: logs, sub: sub}, nil
}

// WatchBaseSlashingRateUpdate is a free log subscription operation binding the contract event 0x6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a.
//
// Solidity: event BaseSlashingRateUpdate((uint256,uint256,uint256) oldRates, (uint256,uint256,uint256) newRates)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchBaseSlashingRateUpdate(opts *bind.WatchOpts, sink chan<- *AccountabilityTestBaseSlashingRateUpdate) (event.Subscription, error) {

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

// ParseBaseSlashingRateUpdate is a log parse operation binding the contract event 0x6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a.
//
// Solidity: event BaseSlashingRateUpdate((uint256,uint256,uint256) oldRates, (uint256,uint256,uint256) newRates)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseBaseSlashingRateUpdate(log types.Log) (*AccountabilityTestBaseSlashingRateUpdate, error) {
	event := new(AccountabilityTestBaseSlashingRateUpdate)
	if err := _AccountabilityTest.contract.UnpackLog(event, "BaseSlashingRateUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestCallFailed represents a CallFailed event raised by the AccountabilityTest contract.
type AccountabilityTestCallFailed struct {
	To              common.Address
	MethodSignature string
	ReturnData      []byte
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterCallFailed is a free log retrieval operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterCallFailed(opts *bind.FilterOpts) (*AccountabilityTestCallFailedIterator, error) {

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "CallFailed")
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestCallFailedIterator{contract: _AccountabilityTest.contract, event: "CallFailed", logs: logs, sub: sub}, nil
}

// WatchCallFailed is a free log subscription operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *AccountabilityTestCallFailed) (event.Subscription, error) {

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

// ParseCallFailed is a log parse operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseCallFailed(log types.Log) (*AccountabilityTestCallFailed, error) {
	event := new(AccountabilityTestCallFailed)
	if err := _AccountabilityTest.contract.UnpackLog(event, "CallFailed", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestConfigUpdateAddress represents a ConfigUpdateAddress event raised by the AccountabilityTest contract.
type AccountabilityTestConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*AccountabilityTestConfigUpdateAddressIterator, error) {

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestConfigUpdateAddressIterator{contract: _AccountabilityTest.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *AccountabilityTestConfigUpdateAddress) (event.Subscription, error) {

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

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseConfigUpdateAddress(log types.Log) (*AccountabilityTestConfigUpdateAddress, error) {
	event := new(AccountabilityTestConfigUpdateAddress)
	if err := _AccountabilityTest.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestConfigUpdateBool represents a ConfigUpdateBool event raised by the AccountabilityTest contract.
type AccountabilityTestConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*AccountabilityTestConfigUpdateBoolIterator, error) {

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestConfigUpdateBoolIterator{contract: _AccountabilityTest.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *AccountabilityTestConfigUpdateBool) (event.Subscription, error) {

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

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseConfigUpdateBool(log types.Log) (*AccountabilityTestConfigUpdateBool, error) {
	event := new(AccountabilityTestConfigUpdateBool)
	if err := _AccountabilityTest.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestConfigUpdateInt represents a ConfigUpdateInt event raised by the AccountabilityTest contract.
type AccountabilityTestConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*AccountabilityTestConfigUpdateIntIterator, error) {

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestConfigUpdateIntIterator{contract: _AccountabilityTest.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *AccountabilityTestConfigUpdateInt) (event.Subscription, error) {

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

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseConfigUpdateInt(log types.Log) (*AccountabilityTestConfigUpdateInt, error) {
	event := new(AccountabilityTestConfigUpdateInt)
	if err := _AccountabilityTest.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestConfigUpdateUint represents a ConfigUpdateUint event raised by the AccountabilityTest contract.
type AccountabilityTestConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*AccountabilityTestConfigUpdateUintIterator, error) {

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestConfigUpdateUintIterator{contract: _AccountabilityTest.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *AccountabilityTestConfigUpdateUint) (event.Subscription, error) {

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

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseConfigUpdateUint(log types.Log) (*AccountabilityTestConfigUpdateUint, error) {
	event := new(AccountabilityTestConfigUpdateUint)
	if err := _AccountabilityTest.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestInnocenceProven represents a InnocenceProven event raised by the AccountabilityTest contract.
type AccountabilityTestInnocenceProven struct {
	Offender common.Address
	Id       *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterInnocenceProven is a free log retrieval operation binding the contract event 0x1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f.
//
// Solidity: event InnocenceProven(address indexed _offender, uint256 _id)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterInnocenceProven(opts *bind.FilterOpts, _offender []common.Address) (*AccountabilityTestInnocenceProvenIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "InnocenceProven", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestInnocenceProvenIterator{contract: _AccountabilityTest.contract, event: "InnocenceProven", logs: logs, sub: sub}, nil
}

// WatchInnocenceProven is a free log subscription operation binding the contract event 0x1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f.
//
// Solidity: event InnocenceProven(address indexed _offender, uint256 _id)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchInnocenceProven(opts *bind.WatchOpts, sink chan<- *AccountabilityTestInnocenceProven, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _AccountabilityTest.contract.WatchLogs(opts, "InnocenceProven", _offenderRule)
	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(AccountabilityTestInnocenceProven)
				if err := _AccountabilityTest.contract.UnpackLog(event, "InnocenceProven", 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
}

// ParseInnocenceProven is a log parse operation binding the contract event 0x1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f.
//
// Solidity: event InnocenceProven(address indexed _offender, uint256 _id)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseInnocenceProven(log types.Log) (*AccountabilityTestInnocenceProven, error) {
	event := new(AccountabilityTestInnocenceProven)
	if err := _AccountabilityTest.contract.UnpackLog(event, "InnocenceProven", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestNewAccusation represents a NewAccusation event raised by the AccountabilityTest contract.
type AccountabilityTestNewAccusation struct {
	Offender common.Address
	Severity *big.Int
	Id       *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterNewAccusation is a free log retrieval operation binding the contract event 0x2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351.
//
// Solidity: event NewAccusation(address indexed _offender, uint256 _severity, uint256 _id)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterNewAccusation(opts *bind.FilterOpts, _offender []common.Address) (*AccountabilityTestNewAccusationIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "NewAccusation", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestNewAccusationIterator{contract: _AccountabilityTest.contract, event: "NewAccusation", logs: logs, sub: sub}, nil
}

// WatchNewAccusation is a free log subscription operation binding the contract event 0x2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351.
//
// Solidity: event NewAccusation(address indexed _offender, uint256 _severity, uint256 _id)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchNewAccusation(opts *bind.WatchOpts, sink chan<- *AccountabilityTestNewAccusation, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _AccountabilityTest.contract.WatchLogs(opts, "NewAccusation", _offenderRule)
	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(AccountabilityTestNewAccusation)
				if err := _AccountabilityTest.contract.UnpackLog(event, "NewAccusation", 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
}

// ParseNewAccusation is a log parse operation binding the contract event 0x2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351.
//
// Solidity: event NewAccusation(address indexed _offender, uint256 _severity, uint256 _id)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseNewAccusation(log types.Log) (*AccountabilityTestNewAccusation, error) {
	event := new(AccountabilityTestNewAccusation)
	if err := _AccountabilityTest.contract.UnpackLog(event, "NewAccusation", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestNewFaultProof represents a NewFaultProof event raised by the AccountabilityTest contract.
type AccountabilityTestNewFaultProof struct {
	Offender common.Address
	Severity *big.Int
	Id       *big.Int
	Epoch    *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterNewFaultProof is a free log retrieval operation binding the contract event 0x5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7.
//
// Solidity: event NewFaultProof(address indexed _offender, uint256 _severity, uint256 _id, uint256 _epoch)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterNewFaultProof(opts *bind.FilterOpts, _offender []common.Address) (*AccountabilityTestNewFaultProofIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "NewFaultProof", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestNewFaultProofIterator{contract: _AccountabilityTest.contract, event: "NewFaultProof", logs: logs, sub: sub}, nil
}

// WatchNewFaultProof is a free log subscription operation binding the contract event 0x5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7.
//
// Solidity: event NewFaultProof(address indexed _offender, uint256 _severity, uint256 _id, uint256 _epoch)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchNewFaultProof(opts *bind.WatchOpts, sink chan<- *AccountabilityTestNewFaultProof, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _AccountabilityTest.contract.WatchLogs(opts, "NewFaultProof", _offenderRule)
	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(AccountabilityTestNewFaultProof)
				if err := _AccountabilityTest.contract.UnpackLog(event, "NewFaultProof", 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
}

// ParseNewFaultProof is a log parse operation binding the contract event 0x5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7.
//
// Solidity: event NewFaultProof(address indexed _offender, uint256 _severity, uint256 _id, uint256 _epoch)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseNewFaultProof(log types.Log) (*AccountabilityTestNewFaultProof, error) {
	event := new(AccountabilityTestNewFaultProof)
	if err := _AccountabilityTest.contract.UnpackLog(event, "NewFaultProof", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestReporterRewarded represents a ReporterRewarded event raised by the AccountabilityTest contract.
type AccountabilityTestReporterRewarded struct {
	Reporter  common.Address
	Offender  common.Address
	NtnReward *big.Int
	AtnReward *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterReporterRewarded is a free log retrieval operation binding the contract event 0xd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e9.
//
// Solidity: event ReporterRewarded(address _reporter, address indexed _offender, uint256 _ntnReward, uint256 _atnReward)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterReporterRewarded(opts *bind.FilterOpts, _offender []common.Address) (*AccountabilityTestReporterRewardedIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "ReporterRewarded", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestReporterRewardedIterator{contract: _AccountabilityTest.contract, event: "ReporterRewarded", logs: logs, sub: sub}, nil
}

// WatchReporterRewarded is a free log subscription operation binding the contract event 0xd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e9.
//
// Solidity: event ReporterRewarded(address _reporter, address indexed _offender, uint256 _ntnReward, uint256 _atnReward)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchReporterRewarded(opts *bind.WatchOpts, sink chan<- *AccountabilityTestReporterRewarded, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _AccountabilityTest.contract.WatchLogs(opts, "ReporterRewarded", _offenderRule)
	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(AccountabilityTestReporterRewarded)
				if err := _AccountabilityTest.contract.UnpackLog(event, "ReporterRewarded", 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
}

// ParseReporterRewarded is a log parse operation binding the contract event 0xd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e9.
//
// Solidity: event ReporterRewarded(address _reporter, address indexed _offender, uint256 _ntnReward, uint256 _atnReward)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseReporterRewarded(log types.Log) (*AccountabilityTestReporterRewarded, error) {
	event := new(AccountabilityTestReporterRewarded)
	if err := _AccountabilityTest.contract.UnpackLog(event, "ReporterRewarded", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AccountabilityTestSlashingEvent represents a SlashingEvent event raised by the AccountabilityTest contract.
type AccountabilityTestSlashingEvent struct {
	Validator    common.Address
	Amount       *big.Int
	ReleaseBlock *big.Int
	IsJailbound  bool
	EventId      *big.Int
	Raw          types.Log // Blockchain specific contextual infos
}

// FilterSlashingEvent is a free log retrieval operation binding the contract event 0x6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9.
//
// Solidity: event SlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound, uint256 eventId)
func (_AccountabilityTest *AccountabilityTestFilterer) FilterSlashingEvent(opts *bind.FilterOpts) (*AccountabilityTestSlashingEventIterator, error) {

	logs, sub, err := _AccountabilityTest.contract.FilterLogs(opts, "SlashingEvent")
	if err != nil {
		return nil, err
	}
	return &AccountabilityTestSlashingEventIterator{contract: _AccountabilityTest.contract, event: "SlashingEvent", logs: logs, sub: sub}, nil
}

// WatchSlashingEvent is a free log subscription operation binding the contract event 0x6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9.
//
// Solidity: event SlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound, uint256 eventId)
func (_AccountabilityTest *AccountabilityTestFilterer) WatchSlashingEvent(opts *bind.WatchOpts, sink chan<- *AccountabilityTestSlashingEvent) (event.Subscription, error) {

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

// ParseSlashingEvent is a log parse operation binding the contract event 0x6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9.
//
// Solidity: event SlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound, uint256 eventId)
func (_AccountabilityTest *AccountabilityTestFilterer) ParseSlashingEvent(log types.Log) (*AccountabilityTestSlashingEvent, error) {
	event := new(AccountabilityTestSlashingEvent)
	if err := _AccountabilityTest.contract.UnpackLog(event, "SlashingEvent", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AuctionLibMetaData contains all meta data concerning the AuctionLib contract.
var AuctionLibMetaData = &bind.MetaData{
	ABI: "[]",
	Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200d8432cce4639b3e8836327e6261c48df9fdf44042983bfb86a8766c5c48dbf264736f6c634300081e0033",
}

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

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

// DeployAuctionLib deploys a new Ethereum contract, binding an instance of AuctionLib to it.
func DeployAuctionLib(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AuctionLib, error) {
	parsed, err := AuctionLibMetaData.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(AuctionLibBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &AuctionLib{AuctionLibCaller: AuctionLibCaller{contract: contract}, AuctionLibTransactor: AuctionLibTransactor{contract: contract}, AuctionLibFilterer: AuctionLibFilterer{contract: contract}}, nil
}

// AuctionLib is an auto generated Go binding around an Ethereum contract.
type AuctionLib struct {
	AuctionLibCaller     // Read-only binding to the contract
	AuctionLibTransactor // Write-only binding to the contract
	AuctionLibFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewAuctionLib creates a new instance of AuctionLib, bound to a specific deployed contract.
func NewAuctionLib(address common.Address, backend bind.ContractBackend) (*AuctionLib, error) {
	contract, err := bindAuctionLib(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &AuctionLib{AuctionLibCaller: AuctionLibCaller{contract: contract}, AuctionLibTransactor: AuctionLibTransactor{contract: contract}, AuctionLibFilterer: AuctionLibFilterer{contract: contract}}, nil
}

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

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

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

// bindAuctionLib binds a generic wrapper to an already deployed contract.
func bindAuctionLib(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(AuctionLibABI))
	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 (_AuctionLib *AuctionLibRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _AuctionLib.Contract.AuctionLibCaller.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 (_AuctionLib *AuctionLibRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _AuctionLib.Contract.AuctionLibTransactor.contract.Transfer(opts)
}

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

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

// AuctioneerMetaData contains all meta data concerning the Auctioneer contract.
var AuctioneerMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"liquidationAuctionDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestAuctionDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestAuctionDiscount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestAuctionThreshold\",\"type\":\"uint256\"}],\"internalType\":\"structAuctioneer.Config\",\"name\":\"config_\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"stabilization_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracle_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"collateralToken_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"autonity_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumBid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bid\",\"type\":\"uint256\"}],\"name\":\"BidTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAuctionId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"InvalidParameter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"name\":\"InvalidRound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotLiquidatable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv18_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"UD60x18\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"PRBMath_UD60x18_Sqrt_Overflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"biddor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtAmount\",\"type\":\"uint256\"}],\"name\":\"AuctionedDebt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"biddor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"interestAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paymentAmount\",\"type\":\"uint256\"}],\"name\":\"AuctionedInterest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"auctionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"}],\"name\":\"NewInterestAuction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"PriceUnavailable\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidatableRound\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ntnAmount\",\"type\":\"uint256\"}],\"name\":\"bidDebt\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"auction\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ntnAmount\",\"type\":\"uint256\"}],\"name\":\"bidInterest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"auction\",\"type\":\"uint256\"}],\"name\":\"getAuction\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structAuctionLib.Auction\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"liquidationAuctionDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestAuctionDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestAuctionDiscount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestAuctionThreshold\",\"type\":\"uint256\"}],\"internalType\":\"structAuctioneer.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProceedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"debtor\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidatableRound\",\"type\":\"uint256\"}],\"name\":\"maxLiquidationReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"auction\",\"type\":\"uint256\"}],\"name\":\"minInterestPayment\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"openAuctions\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structAuctionLib.Auction[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paidInterest\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"discount\",\"type\":\"uint256\"}],\"name\":\"setInterestAuctionDiscount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setInterestAuctionDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"setInterestAuctionThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setLiquidationAuctionDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator_\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oracle_\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proceedAddress_\",\"type\":\"address\"}],\"name\":\"setProceedAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stabilization_\",\"type\":\"address\"}],\"name\":\"setStabilization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"7c54e42e": "bidDebt(address,uint256,uint256)",
		"c0d1aa55": "bidInterest(uint256,uint256)",
		"78bd7935": "getAuction(uint256)",
		"96423663": "getCollateralToken()",
		"c3f909d4": "getConfig()",
		"9cab0d30": "getProceedAddress()",
		"c0ef46a2": "maxLiquidationReturn(address,uint256)",
		"09064f9b": "minInterestPayment(uint256)",
		"1100f18e": "openAuctions()",
		"96e4547c": "paidInterest()",
		"89886033": "setInterestAuctionDiscount(uint256)",
		"629fc8e6": "setInterestAuctionDuration(uint256)",
		"8cd52869": "setInterestAuctionThreshold(uint256)",
		"dc6687e2": "setLiquidationAuctionDuration(uint256)",
		"b3ab15fb": "setOperator(address)",
		"7adbf973": "setOracle(address)",
		"1bfa43ac": "setProceedAddress(address)",
		"4f505895": "setStabilization(address)",
	},
	Bin: "0x608060405234801561001057600080fd5b50604051612cc4380380612cc483398101604081905261002f91610236565b610038866100b7565b855160015560208601516002556040860151600355606090950151600455600780546001600160a01b03199081166001600160a01b0396871617909155600a805482169486169490941790935560058054841692851692909217909155600980548316918416919091179055600880549091169190921617905561041a565b805160000361010e576040516305519d6f60e51b815260206004820152601a60248201527f6c69717569646174696f6e41756374696f6e4475726174696f6e00000000000060448201526064015b60405180910390fd5b8060200151600003610163576040516305519d6f60e51b815260206004820152601760248201527f696e74657265737441756374696f6e4475726174696f6e0000000000000000006044820152606401610105565b61016f6012600a610407565b8160400151106101c2576040516305519d6f60e51b815260206004820152601760248201527f696e74657265737441756374696f6e446973636f756e740000000000000000006044820152606401610105565b8060600151600003610217576040516305519d6f60e51b815260206004820152601860248201527f696e74657265737441756374696f6e5468726573686f6c6400000000000000006044820152606401610105565b50565b80516001600160a01b038116811461023157600080fd5b919050565b60008060008060008086880361012081121561025157600080fd5b608081121561025f57600080fd5b50604051608081016001600160401b038111828210171561029057634e487b7160e01b600052604160045260246000fd5b6040908152885182526020808a01519083015288810151908201526060808901519082015295506102c36080880161021a565b94506102d160a0880161021a565b93506102df60c0880161021a565b92506102ed60e0880161021a565b91506102fc610100880161021a565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156103595780850481111561033d5761033d610308565b600184161561034b57908102905b60019390931c928002610322565b935093915050565b60008261037057506001610401565b8161037d57506000610401565b8160018114610393576002811461039d576103b9565b6001915050610401565b60ff8411156103ae576103ae610308565b50506001821b610401565b5060208310610133831016604e8410600b84101617156103dc575081810a610401565b6103e9600019848461031e565b80600019048211156103fd576103fd610308565b0290505b92915050565b60006104138383610361565b9392505050565b61289b806104296000396000f3fe6080604052600436106101095760003560e01c80638cd5286911610095578063b3ab15fb11610064578063b3ab15fb146102bd578063c0d1aa55146102dd578063c0ef46a2146102fd578063c3f909d41461031d578063dc6687e21461033257600080fd5b80638cd5286914610245578063964236631461026557806396e4547c146102975780639cab0d301461029f57600080fd5b8063629fc8e6116100dc578063629fc8e6146101a557806378bd7935146101c55780637adbf973146101f25780637c54e42e14610212578063898860331461022557600080fd5b806309064f9b1461010e5780631100f18e146101415780631bfa43ac146101635780634f50589514610185575b600080fd5b34801561011a57600080fd5b5061012e6101293660046121a6565b610352565b6040519081526020015b60405180910390f35b34801561014d57600080fd5b5061015661038f565b60405161013891906121bf565b34801561016f57600080fd5b5061018361017e366004612245565b6103c9565b005b34801561019157600080fd5b506101836101a0366004612245565b610474565b3480156101b157600080fd5b506101836101c03660046121a6565b610566565b3480156101d157600080fd5b506101e56101e03660046121a6565b610637565b6040516101389190612260565b3480156101fe57600080fd5b5061018361020d366004612245565b6106c7565b61018361022036600461228b565b6107ab565b34801561023157600080fd5b506101836102403660046121a6565b610bcd565b34801561025157600080fd5b506101836102603660046121a6565b610ca8565b34801561027157600080fd5b506005546001600160a01b03165b6040516001600160a01b039091168152602001610138565b610183610d7a565b3480156102ab57600080fd5b506006546001600160a01b031661027f565b3480156102c957600080fd5b506101836102d8366004612245565b610ec9565b3480156102e957600080fd5b506101836102f83660046122be565b610fb2565b34801561030957600080fd5b5061012e6103183660046122e0565b61130e565b34801561032957600080fd5b506101e56113d9565b34801561033e57600080fd5b5061018361034d3660046121a6565b611431565b6000805460010361037e5760405162461bcd60e51b81526004016103759061230a565b60405180910390fd5b61038782611502565b90505b919050565b606061039d60005460011490565b156103ba5760405162461bcd60e51b81526004016103759061230a565b6103c4600b611561565b905090565b6008546001600160a01b031633146103f3576040516282b42960e81b815260040160405180910390fd5b600654604080516080808252600e908201526d70726f636565644164647265737360901b60a08201526001600160a01b03928316602082015291831682820152436060830152516000805160206128268339815191529181900360c00190a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b0316331461049e576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381166104e6576040516305519d6f60e51b815260206004820152600e60248201526d73746162696c697a6174696f6e5f60901b6044820152606401610375565b600754604080516080808252600d908201526c39ba30b134b634bd30ba34b7b760991b60a08201526001600160a01b03928316602082015291831682820152436060830152516000805160206128268339815191529181900360c00190a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314610590576040516282b42960e81b815260040160405180910390fd5b806000036105cc576040516305519d6f60e51b8152602060048201526008602482015267323ab930ba34b7b760c11b6044820152606401610375565b6002546040805160808082526017908201527f696e74657265737441756374696f6e4475726174696f6e00000000000000000060a0820152602081019290925281018290524360608201526000805160206128468339815191529060c00160405180910390a1600255565b6106626040518060800160405280600081526020016000815260200160008152602001600081525090565b6000546001036106845760405162461bcd60e51b81526004016103759061230a565b6000828152600b60205260409020604080516080810182528254815260018301546020820152600283015491810191909152600390910154606082015292915050565b6009546001600160a01b031633146106f1576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116610732576040516305519d6f60e51b81526020600482015260076024820152666f7261636c655f60c81b6044820152606401610375565b600a54604080516080808252600690820152656f7261636c6560d01b60a08201526001600160a01b03928316602082015291831682820152436060830152516000805160206128268339815191529181900360c00190a1600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6107b3611688565b6007546040516321031f8960e21b81526001600160a01b038581166004830152600092169063840c7e249060240160a060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082291906123c0565b600a546040805180820182526007815266272a2716a0aa2760c91b60208201529051633c8510fd60e01b81529293506000926001600160a01b0390921691633c8510fd9161087591889190600401612440565b608060405180830381865afa158015610892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b691906124a5565b90506108c281836116d5565b156108e35760405163376cc6d960e21b815260048101859052602401610375565b600754604051638ffba9dd60e01b81526001600160a01b0387811660048301524260248301526000921690638ffba9dd90604401602060405180830381865afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095891906124f1565b90508034101561097b5760405163162908e360e11b815260040160405180910390fd5b602080840151908301516007546040808601519051638ffba9dd60e01b8152610a949493926001600160a01b031691638ffba9dd916109d2918d916004016001600160a01b03929092168252602082015260400190565b602060405180830381865afa1580156109ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1391906124f1565b600760009054906101000a90046001600160a01b03166001600160a01b03166379502c556040518163ffffffff1660e01b815260040161012060405180830381865afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8b919061250a565b6040015161177c565b610ab45760405163376cc6d960e21b815260048101869052602401610375565b6000610ac48784604001516117b0565b905080851115610af15760405163f0defc6160e01b81526004810182905260248101869052604401610375565b600754604051630922980160e31b81526001600160a01b0389811660048301526024820188905233604483015290911690634914c0089034906064016000604051808303818588803b158015610b4657600080fd5b505af193505050508015610b58575060015b610b7557604051636ef5bcdd60e11b815260040160405180910390fd5b604080513481526020810184905233916001600160a01b038a16917f224679169afb6db5d7c66f92137a4d654d1d4967d6c0cb5cb3bb09223e8edad8910160405180910390a350505050610bc860008055565b505050565b6008546001600160a01b03163314610bf7576040516282b42960e81b815260040160405180910390fd5b610c036012600a612686565b8110610c3d576040516305519d6f60e51b8152602060048201526008602482015267191a5cd8dbdd5b9d60c21b6044820152606401610375565b6003546040805160808082526017908201527f696e74657265737441756374696f6e446973636f756e7400000000000000000060a0820152602081019290925281018290524360608201526000805160206128468339815191529060c00160405180910390a1600355565b6008546001600160a01b03163314610cd2576040516282b42960e81b815260040160405180910390fd5b80600003610d0f576040516305519d6f60e51b81526020600482015260096024820152681d1a1c995cda1bdb1960ba1b6044820152606401610375565b6004546040805160808082526018908201527f696e74657265737441756374696f6e5468726573686f6c64000000000000000060a0820152602081019290925281018290524360608201526000805160206128468339815191529060c00160405180910390a1600455565b6007546001600160a01b03163314610da4576040516282b42960e81b815260040160405180910390fd5b34600e6000828254610db69190612692565b9091555050600454600e5410610ec757600760009054906101000a90046001600160a01b03166001600160a01b0316635891de726040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e35575060408051601f3d908101601f19168201909252610e32918101906124f1565b60015b610e64576040517fcb08be81e7070984d3fcbcbc4a7b99c01a8d7722fd659fa8d2c1d6c5715a7ae890600090a1565b600e54600090610e7890600b9084426118b2565b600e5460408051838152602081019290925242908201529091507f7f1eca098adf942b2cb7f72f640e98b93298c0260ca26104cbd94c55d1324b139060600160405180910390a150506000600e555b565b6009546001600160a01b03163314610ef3576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116610f36576040516305519d6f60e51b81526020600482015260096024820152686f70657261746f725f60b81b6044820152606401610375565b600880546040805160808082528101939093526737b832b930ba37b960c11b60a08401526001600160a01b03918216602084015290831682820152436060830152516000805160206128268339815191529181900360c00190a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b610fba611688565b6000828152600b6020526040812090610fd284611502565b6001830154909150818410156110055760405163f0defc6160e01b81526004810183905260248101859052604401610375565b600554604051636eb1769f60e11b815233600482015230602482015285916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107791906124f1565b1015611096576040516313be252b60e01b815260040160405180910390fd5b6005546040516323b872dd60e01b8152336004820152306024820152604481018690526000916001600160a01b0316906323b872dd906064016020604051808303816000875af11580156110ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111291906126a5565b905080611132576040516312171d8360e31b815260040160405180910390fd5b61113d600b87611981565b6006546001600160a01b031615611253576005546006546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa1580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c791906124f1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611212573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123691906126a5565b611253576040516312171d8360e31b815260040160405180910390fd5b604080518381526020810185905233917f115e690ff81160b136b2c20b2c2aa15264cd58226271082852b22a79e0f971f3910160405180910390a260405160009033906108fc90859084818181858888f193505050503d80600081146112d5576040519150601f19603f3d011682016040523d82523d6000602084013e6112da565b606091505b50509050806112fc576040516312171d8360e31b815260040160405180910390fd5b505050505061130a60008055565b5050565b600080546001036113315760405162461bcd60e51b81526004016103759061230a565b600a546040805180820182526007815266272a2716a0aa2760c91b60208201529051633c8510fd60e01b81526000926001600160a01b031691633c8510fd9161137e918791600401612440565b608060405180830381865afa15801561139b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bf91906124a5565b90506113cf8482604001516117b0565b9150505b92915050565b6114046040518060800160405280600081526020016000815260200160008152602001600081525090565b50604080516080810182526001548152600254602082015260035491810191909152600454606082015290565b6008546001600160a01b0316331461145b576040516282b42960e81b815260040160405180910390fd5b80600003611497576040516305519d6f60e51b8152602060048201526008602482015267323ab930ba34b7b760c11b6044820152606401610375565b600154604080516080808252601a908201527f6c69717569646174696f6e41756374696f6e4475726174696f6e00000000000060a0820152602081019290925281018290524360608201526000805160206128468339815191529060c00160405180910390a1600155565b6000818152600b60205260408120806003015460000361153557604051636850579960e01b815260040160405180910390fd5b61155a8160030154426000611552856001015486600201546119b5565b600254611a8b565b9392505050565b6060600061157183600101611b01565b90506000815167ffffffffffffffff81111561158f5761158f612341565b6040519080825280602002602001820160405280156115eb57816020015b6115d86040518060800160405280600081526020016000815260200160008152602001600081525090565b8152602001906001900390816115ad5790505b50905060005b825181101561168057846000016000848381518110611612576116126126c0565b6020026020010151815260200190815260200160002060405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505082828151811061166d5761166d6126c0565b60209081029190910101526001016115f1565b509392505050565b600054156116ce5760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b6044820152606401610375565b6001600055565b60008260200151600014806116ee575081516040840151105b8061155a5750600760009054906101000a90046001600160a01b03166001600160a01b031663d0b06f5d6040518163ffffffff1660e01b8152600401608060405180830381865afa158015611747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176b91906126d6565b604001518360400151109392505050565b60008260000361178e575060006117a8565b818361179a8688612721565b6117a4919061274e565b1090505b949350505050565b6007546040516321031f8960e21b81526001600160a01b038481166004830152600092839291169063840c7e249060240160a060405180830381865afa1580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182291906123c0565b90506113cf83428360200151600760009054906101000a90046001600160a01b03166001600160a01b03166379502c556040518163ffffffff1660e01b815260040161012060405180830381865afa158015611882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a6919061250a565b60400151600154611b0e565b600080806118c260018801611bfc565b11156118fb576118ed60016118d988600101611bfc565b6118e39190612770565b6001880190611c06565b6118f8906001612692565b90505b6119086001870182611c12565b1561191f578061191781612783565b9150506118fb565b604080516080810182528281526020808201888152828401888152606084018881526000878152938c905294909220925183555160018084019190915590516002830155915160039091015561197790870182611c2a565b5095945050505050565b61198e6001830182611c36565b50600090815260209190915260408120818155600181018290556002810182905560030155565b600080600a60009054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2f919061279c565b611a3a90600a6127bf565b90506000611a4a6012600a612686565b600354611a579086612721565b611a61919061274e565b611a6b9085612770565b905080611a788387612721565b611a82919061274e565b95945050505050565b600085851015611aae576040516305519d6f60e51b8152600401610375906127ce565b6000611aba8787612770565b9050828110611acc5784915050611a82565b8281611ad88787612770565b611ae29190612721565b611aec919061274e565b611af69085612770565b979650505050505050565b6060600061155a83611c42565b600085851015611b31576040516305519d6f60e51b8152600401610375906127ce565b6000611b3d8787612770565b9050828110611b4f5784915050611a82565b83856000611b6f611b626012600a612686565b611b6c9086612721565b90565b90506000611b8c611b826012600a612686565b611b6c9089612721565b90506000611ba2611b9d8484611c9e565b611cb6565b90506000611bb5611b6c6012600a612686565b90506000611bea611be3611bdc611bcc8587611d0c565b611bd68b87611d0c565b90611d1b565b8490611d2a565b8790611c9e565b9e9d5050505050505050505050505050565b6000610387825490565b600061155a8383611d39565b6000818152600183016020526040812054151561155a565b600061155a8383611d63565b600061155a8383611db2565b606081600001805480602002602001604051908101604052809291908181526020018280548015611c9257602002820191906000526020600020905b815481526020019060010190808311611c7e575b50505050509050919050565b600061155a611b6c84670de0b6b3a764000085611ea5565b6000817812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f21811115611cf65760405163edc236ad60e01b815260048101849052602401610375565b61155a611b6c670de0b6b3a76400008302611f78565b600061155a611b6c8385612770565b600061155a611b6c84846120f0565b600061155a611b6c8385612692565b6000826000018281548110611d5057611d506126c0565b9060005260206000200154905092915050565b6000818152600183016020526040812054611daa575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556113d3565b5060006113d3565b60008181526001830160205260408120548015611e9b576000611dd6600183612770565b8554909150600090611dea90600190612770565b9050808214611e4f576000866000018281548110611e0a57611e0a6126c0565b9060005260206000200154905080876000018481548110611e2d57611e2d6126c0565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611e6057611e6061280f565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506113d3565b60009150506113d3565b6000808060001985870985870292508281108382030391505080600003611edf57838281611ed557611ed5612738565b049250505061155a565b838110611f1057604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610375565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600081600003611f8a57506000919050565b50600181600160801b8110611fa45760409190911b9060801c5b680100000000000000008110611fbf5760209190911b9060401c5b6401000000008110611fd65760109190911b9060201c5b620100008110611feb5760089190911b9060101c5b6101008110611fff5760049190911b9060081c5b601081106120125760029190911b9060041c5b6004811061202257600182901b91505b600182848161203357612033612738565b048301901c9150600182848161204b5761204b612738565b048301901c9150600182848161206357612063612738565b048301901c9150600182848161207b5761207b612738565b048301901c9150600182848161209357612093612738565b048301901c915060018284816120ab576120ab612738565b048301901c915060018284816120c3576120c3612738565b048301901c915060008284816120db576120db612738565b0490508083106120e9578092505b5050919050565b60008080600019848609848602925082811083820303915050806000036121245750670de0b6b3a7640000900490506113d3565b670de0b6b3a7640000811061215657604051635173648d60e01b81526004810186905260248101859052604401610375565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b6000602082840312156121b857600080fd5b5035919050565b602080825282518282018190526000918401906040840190835b818110156122235761220d838551805182526020810151602083015260408101516040830152606081015160608301525050565b60209390930192608092909201916001016121d9565b509095945050505050565b80356001600160a01b038116811461038a57600080fd5b60006020828403121561225757600080fd5b61155a8261222e565b81518152602080830151908201526040808301519082015260608083015190820152608081016113d3565b6000806000606084860312156122a057600080fd5b6122a98461222e565b95602085013595506040909401359392505050565b600080604083850312156122d157600080fd5b50508035926020909101359150565b600080604083850312156122f357600080fd5b6122fc8361222e565b946020939093013593505050565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561238857634e487b7160e01b600052604160045260246000fd5b60405290565b604051610120810167ffffffffffffffff8111828210171561238857634e487b7160e01b600052604160045260246000fd5b600060a08284031280156123d357600080fd5b5060405160009060a0810167ffffffffffffffff8111828210171561240657634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b828152604060208201526000825180604084015260005b818110156124745760208186018101516060868401015201612457565b506000606082850101526060601f19601f8301168401019150509392505050565b8051801515811461038a57600080fd5b600060808284031280156124b857600080fd5b506124c1612357565b8251815260208084015190820152604080840151908201526124e560608401612495565b60608201529392505050565b60006020828403121561250357600080fd5b5051919050565b600061012082840312801561251e57600080fd5b50600061252961238e565b835181526020808501519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e080850151908201526101009384015193810193909352509092915050565b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156125da578085048111156125be576125be612589565b60018416156125cc57908102905b60019390931c9280026125a3565b935093915050565b6000826125f1575060016113d3565b816125fe575060006113d3565b8160018114612614576002811461261e5761263a565b60019150506113d3565b60ff84111561262f5761262f612589565b50506001821b6113d3565b5060208310610133831016604e8410600b841016171561265d575081810a6113d3565b61266a600019848461259f565b806000190482111561267e5761267e612589565b029392505050565b600061155a83836125e2565b808201808211156113d3576113d3612589565b6000602082840312156126b757600080fd5b61155a82612495565b634e487b7160e01b600052603260045260246000fd5b600060808284031280156126e957600080fd5b5060006126f4612357565b83518152602080850151908201526040808501519082015260609384015193810193909352509092915050565b80820281158282048414176113d3576113d3612589565b634e487b7160e01b600052601260045260246000fd5b60008261276b57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156113d3576113d3612589565b60006001820161279557612795612589565b5060010190565b6000602082840312156127ae57600080fd5b815160ff8116811461155a57600080fd5b600061155a60ff8416836125e2565b60208082526021908201527f63757272656e7454696d657374616d70203e20737461727454696d657374616d6040820152600760fc1b606082015260800190565b634e487b7160e01b600052603160045260246000fdfee821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1baa2646970667358221220b25389297fa701e1a6803b8fb89c5e6a3290029680196ddca0faf96b3766358564736f6c634300081e0033",
}

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

// Deprecated: Use AuctioneerMetaData.Sigs instead.
// AuctioneerFuncSigs maps the 4-byte function signature to its string representation.
var AuctioneerFuncSigs = AuctioneerMetaData.Sigs

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

// DeployAuctioneer deploys a new Ethereum contract, binding an instance of Auctioneer to it.
func DeployAuctioneer(auth *bind.TransactOpts, backend bind.ContractBackend, config_ AuctioneerConfig, stabilization_ common.Address, oracle_ common.Address, collateralToken_ common.Address, autonity_ common.Address, operator_ common.Address) (common.Address, *types.Transaction, *Auctioneer, error) {
	parsed, err := AuctioneerMetaData.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(AuctioneerBin), backend, config_, stabilization_, oracle_, collateralToken_, autonity_, operator_)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Auctioneer{AuctioneerCaller: AuctioneerCaller{contract: contract}, AuctioneerTransactor: AuctioneerTransactor{contract: contract}, AuctioneerFilterer: AuctioneerFilterer{contract: contract}}, nil
}

// Auctioneer is an auto generated Go binding around an Ethereum contract.
type Auctioneer struct {
	AuctioneerCaller     // Read-only binding to the contract
	AuctioneerTransactor // Write-only binding to the contract
	AuctioneerFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewAuctioneer creates a new instance of Auctioneer, bound to a specific deployed contract.
func NewAuctioneer(address common.Address, backend bind.ContractBackend) (*Auctioneer, error) {
	contract, err := bindAuctioneer(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Auctioneer{AuctioneerCaller: AuctioneerCaller{contract: contract}, AuctioneerTransactor: AuctioneerTransactor{contract: contract}, AuctioneerFilterer: AuctioneerFilterer{contract: contract}}, nil
}

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

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

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

// bindAuctioneer binds a generic wrapper to an already deployed contract.
func bindAuctioneer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(AuctioneerABI))
	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 (_Auctioneer *AuctioneerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Auctioneer.Contract.AuctioneerCaller.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 (_Auctioneer *AuctioneerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Auctioneer.Contract.AuctioneerTransactor.contract.Transfer(opts)
}

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

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

// GetAuction is a free data retrieval call binding the contract method 0x78bd7935.
//
// Solidity: function getAuction(uint256 auction) view returns((uint256,uint256,uint256,uint256))
func (_Auctioneer *AuctioneerCaller) GetAuction(opts *bind.CallOpts, auction *big.Int) (AuctionLibAuction, error) {
	var out []interface{}
	err := _Auctioneer.contract.Call(opts, &out, "getAuction", auction)

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

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

	return out0, err

}

// GetAuction is a free data retrieval call binding the contract method 0x78bd7935.
//
// Solidity: function getAuction(uint256 auction) view returns((uint256,uint256,uint256,uint256))
func (_Auctioneer *AuctioneerSession) GetAuction(auction *big.Int) (AuctionLibAuction, error) {
	return _Auctioneer.Contract.GetAuction(&_Auctioneer.CallOpts, auction)
}

// GetAuction is a free data retrieval call binding the contract method 0x78bd7935.
//
// Solidity: function getAuction(uint256 auction) view returns((uint256,uint256,uint256,uint256))
func (_Auctioneer *AuctioneerCallerSession) GetAuction(auction *big.Int) (AuctionLibAuction, error) {
	return _Auctioneer.Contract.GetAuction(&_Auctioneer.CallOpts, auction)
}

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

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

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

	return out0, err

}

// GetCollateralToken is a free data retrieval call binding the contract method 0x96423663.
//
// Solidity: function getCollateralToken() view returns(address)
func (_Auctioneer *AuctioneerSession) GetCollateralToken() (common.Address, error) {
	return _Auctioneer.Contract.GetCollateralToken(&_Auctioneer.CallOpts)
}

// GetCollateralToken is a free data retrieval call binding the contract method 0x96423663.
//
// Solidity: function getCollateralToken() view returns(address)
func (_Auctioneer *AuctioneerCallerSession) GetCollateralToken() (common.Address, error) {
	return _Auctioneer.Contract.GetCollateralToken(&_Auctioneer.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,uint256))
func (_Auctioneer *AuctioneerCaller) GetConfig(opts *bind.CallOpts) (AuctioneerConfig, error) {
	var out []interface{}
	err := _Auctioneer.contract.Call(opts, &out, "getConfig")

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

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

	return out0, err

}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,uint256))
func (_Auctioneer *AuctioneerSession) GetConfig() (AuctioneerConfig, error) {
	return _Auctioneer.Contract.GetConfig(&_Auctioneer.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,uint256))
func (_Auctioneer *AuctioneerCallerSession) GetConfig() (AuctioneerConfig, error) {
	return _Auctioneer.Contract.GetConfig(&_Auctioneer.CallOpts)
}

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

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

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

	return out0, err

}

// GetProceedAddress is a free data retrieval call binding the contract method 0x9cab0d30.
//
// Solidity: function getProceedAddress() view returns(address)
func (_Auctioneer *AuctioneerSession) GetProceedAddress() (common.Address, error) {
	return _Auctioneer.Contract.GetProceedAddress(&_Auctioneer.CallOpts)
}

// GetProceedAddress is a free data retrieval call binding the contract method 0x9cab0d30.
//
// Solidity: function getProceedAddress() view returns(address)
func (_Auctioneer *AuctioneerCallerSession) GetProceedAddress() (common.Address, error) {
	return _Auctioneer.Contract.GetProceedAddress(&_Auctioneer.CallOpts)
}

// MaxLiquidationReturn is a free data retrieval call binding the contract method 0xc0ef46a2.
//
// Solidity: function maxLiquidationReturn(address debtor, uint256 liquidatableRound) view returns(uint256)
func (_Auctioneer *AuctioneerCaller) MaxLiquidationReturn(opts *bind.CallOpts, debtor common.Address, liquidatableRound *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Auctioneer.contract.Call(opts, &out, "maxLiquidationReturn", debtor, liquidatableRound)

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

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

	return out0, err

}

// MaxLiquidationReturn is a free data retrieval call binding the contract method 0xc0ef46a2.
//
// Solidity: function maxLiquidationReturn(address debtor, uint256 liquidatableRound) view returns(uint256)
func (_Auctioneer *AuctioneerSession) MaxLiquidationReturn(debtor common.Address, liquidatableRound *big.Int) (*big.Int, error) {
	return _Auctioneer.Contract.MaxLiquidationReturn(&_Auctioneer.CallOpts, debtor, liquidatableRound)
}

// MaxLiquidationReturn is a free data retrieval call binding the contract method 0xc0ef46a2.
//
// Solidity: function maxLiquidationReturn(address debtor, uint256 liquidatableRound) view returns(uint256)
func (_Auctioneer *AuctioneerCallerSession) MaxLiquidationReturn(debtor common.Address, liquidatableRound *big.Int) (*big.Int, error) {
	return _Auctioneer.Contract.MaxLiquidationReturn(&_Auctioneer.CallOpts, debtor, liquidatableRound)
}

// MinInterestPayment is a free data retrieval call binding the contract method 0x09064f9b.
//
// Solidity: function minInterestPayment(uint256 auction) view returns(uint256)
func (_Auctioneer *AuctioneerCaller) MinInterestPayment(opts *bind.CallOpts, auction *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Auctioneer.contract.Call(opts, &out, "minInterestPayment", auction)

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

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

	return out0, err

}

// MinInterestPayment is a free data retrieval call binding the contract method 0x09064f9b.
//
// Solidity: function minInterestPayment(uint256 auction) view returns(uint256)
func (_Auctioneer *AuctioneerSession) MinInterestPayment(auction *big.Int) (*big.Int, error) {
	return _Auctioneer.Contract.MinInterestPayment(&_Auctioneer.CallOpts, auction)
}

// MinInterestPayment is a free data retrieval call binding the contract method 0x09064f9b.
//
// Solidity: function minInterestPayment(uint256 auction) view returns(uint256)
func (_Auctioneer *AuctioneerCallerSession) MinInterestPayment(auction *big.Int) (*big.Int, error) {
	return _Auctioneer.Contract.MinInterestPayment(&_Auctioneer.CallOpts, auction)
}

// OpenAuctions is a free data retrieval call binding the contract method 0x1100f18e.
//
// Solidity: function openAuctions() view returns((uint256,uint256,uint256,uint256)[])
func (_Auctioneer *AuctioneerCaller) OpenAuctions(opts *bind.CallOpts) ([]AuctionLibAuction, error) {
	var out []interface{}
	err := _Auctioneer.contract.Call(opts, &out, "openAuctions")

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

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

	return out0, err

}

// OpenAuctions is a free data retrieval call binding the contract method 0x1100f18e.
//
// Solidity: function openAuctions() view returns((uint256,uint256,uint256,uint256)[])
func (_Auctioneer *AuctioneerSession) OpenAuctions() ([]AuctionLibAuction, error) {
	return _Auctioneer.Contract.OpenAuctions(&_Auctioneer.CallOpts)
}

// OpenAuctions is a free data retrieval call binding the contract method 0x1100f18e.
//
// Solidity: function openAuctions() view returns((uint256,uint256,uint256,uint256)[])
func (_Auctioneer *AuctioneerCallerSession) OpenAuctions() ([]AuctionLibAuction, error) {
	return _Auctioneer.Contract.OpenAuctions(&_Auctioneer.CallOpts)
}

// BidDebt is a paid mutator transaction binding the contract method 0x7c54e42e.
//
// Solidity: function bidDebt(address debtor, uint256 liquidatableRound, uint256 ntnAmount) payable returns()
func (_Auctioneer *AuctioneerTransactor) BidDebt(opts *bind.TransactOpts, debtor common.Address, liquidatableRound *big.Int, ntnAmount *big.Int) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "bidDebt", debtor, liquidatableRound, ntnAmount)
}

// BidDebt is a paid mutator transaction binding the contract method 0x7c54e42e.
//
// Solidity: function bidDebt(address debtor, uint256 liquidatableRound, uint256 ntnAmount) payable returns()
func (_Auctioneer *AuctioneerSession) BidDebt(debtor common.Address, liquidatableRound *big.Int, ntnAmount *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.BidDebt(&_Auctioneer.TransactOpts, debtor, liquidatableRound, ntnAmount)
}

// BidDebt is a paid mutator transaction binding the contract method 0x7c54e42e.
//
// Solidity: function bidDebt(address debtor, uint256 liquidatableRound, uint256 ntnAmount) payable returns()
func (_Auctioneer *AuctioneerTransactorSession) BidDebt(debtor common.Address, liquidatableRound *big.Int, ntnAmount *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.BidDebt(&_Auctioneer.TransactOpts, debtor, liquidatableRound, ntnAmount)
}

// BidInterest is a paid mutator transaction binding the contract method 0xc0d1aa55.
//
// Solidity: function bidInterest(uint256 auction, uint256 ntnAmount) returns()
func (_Auctioneer *AuctioneerTransactor) BidInterest(opts *bind.TransactOpts, auction *big.Int, ntnAmount *big.Int) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "bidInterest", auction, ntnAmount)
}

// BidInterest is a paid mutator transaction binding the contract method 0xc0d1aa55.
//
// Solidity: function bidInterest(uint256 auction, uint256 ntnAmount) returns()
func (_Auctioneer *AuctioneerSession) BidInterest(auction *big.Int, ntnAmount *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.BidInterest(&_Auctioneer.TransactOpts, auction, ntnAmount)
}

// BidInterest is a paid mutator transaction binding the contract method 0xc0d1aa55.
//
// Solidity: function bidInterest(uint256 auction, uint256 ntnAmount) returns()
func (_Auctioneer *AuctioneerTransactorSession) BidInterest(auction *big.Int, ntnAmount *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.BidInterest(&_Auctioneer.TransactOpts, auction, ntnAmount)
}

// PaidInterest is a paid mutator transaction binding the contract method 0x96e4547c.
//
// Solidity: function paidInterest() payable returns()
func (_Auctioneer *AuctioneerTransactor) PaidInterest(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "paidInterest")
}

// PaidInterest is a paid mutator transaction binding the contract method 0x96e4547c.
//
// Solidity: function paidInterest() payable returns()
func (_Auctioneer *AuctioneerSession) PaidInterest() (*types.Transaction, error) {
	return _Auctioneer.Contract.PaidInterest(&_Auctioneer.TransactOpts)
}

// PaidInterest is a paid mutator transaction binding the contract method 0x96e4547c.
//
// Solidity: function paidInterest() payable returns()
func (_Auctioneer *AuctioneerTransactorSession) PaidInterest() (*types.Transaction, error) {
	return _Auctioneer.Contract.PaidInterest(&_Auctioneer.TransactOpts)
}

// SetInterestAuctionDiscount is a paid mutator transaction binding the contract method 0x89886033.
//
// Solidity: function setInterestAuctionDiscount(uint256 discount) returns()
func (_Auctioneer *AuctioneerTransactor) SetInterestAuctionDiscount(opts *bind.TransactOpts, discount *big.Int) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "setInterestAuctionDiscount", discount)
}

// SetInterestAuctionDiscount is a paid mutator transaction binding the contract method 0x89886033.
//
// Solidity: function setInterestAuctionDiscount(uint256 discount) returns()
func (_Auctioneer *AuctioneerSession) SetInterestAuctionDiscount(discount *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetInterestAuctionDiscount(&_Auctioneer.TransactOpts, discount)
}

// SetInterestAuctionDiscount is a paid mutator transaction binding the contract method 0x89886033.
//
// Solidity: function setInterestAuctionDiscount(uint256 discount) returns()
func (_Auctioneer *AuctioneerTransactorSession) SetInterestAuctionDiscount(discount *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetInterestAuctionDiscount(&_Auctioneer.TransactOpts, discount)
}

// SetInterestAuctionDuration is a paid mutator transaction binding the contract method 0x629fc8e6.
//
// Solidity: function setInterestAuctionDuration(uint256 duration) returns()
func (_Auctioneer *AuctioneerTransactor) SetInterestAuctionDuration(opts *bind.TransactOpts, duration *big.Int) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "setInterestAuctionDuration", duration)
}

// SetInterestAuctionDuration is a paid mutator transaction binding the contract method 0x629fc8e6.
//
// Solidity: function setInterestAuctionDuration(uint256 duration) returns()
func (_Auctioneer *AuctioneerSession) SetInterestAuctionDuration(duration *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetInterestAuctionDuration(&_Auctioneer.TransactOpts, duration)
}

// SetInterestAuctionDuration is a paid mutator transaction binding the contract method 0x629fc8e6.
//
// Solidity: function setInterestAuctionDuration(uint256 duration) returns()
func (_Auctioneer *AuctioneerTransactorSession) SetInterestAuctionDuration(duration *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetInterestAuctionDuration(&_Auctioneer.TransactOpts, duration)
}

// SetInterestAuctionThreshold is a paid mutator transaction binding the contract method 0x8cd52869.
//
// Solidity: function setInterestAuctionThreshold(uint256 threshold) returns()
func (_Auctioneer *AuctioneerTransactor) SetInterestAuctionThreshold(opts *bind.TransactOpts, threshold *big.Int) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "setInterestAuctionThreshold", threshold)
}

// SetInterestAuctionThreshold is a paid mutator transaction binding the contract method 0x8cd52869.
//
// Solidity: function setInterestAuctionThreshold(uint256 threshold) returns()
func (_Auctioneer *AuctioneerSession) SetInterestAuctionThreshold(threshold *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetInterestAuctionThreshold(&_Auctioneer.TransactOpts, threshold)
}

// SetInterestAuctionThreshold is a paid mutator transaction binding the contract method 0x8cd52869.
//
// Solidity: function setInterestAuctionThreshold(uint256 threshold) returns()
func (_Auctioneer *AuctioneerTransactorSession) SetInterestAuctionThreshold(threshold *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetInterestAuctionThreshold(&_Auctioneer.TransactOpts, threshold)
}

// SetLiquidationAuctionDuration is a paid mutator transaction binding the contract method 0xdc6687e2.
//
// Solidity: function setLiquidationAuctionDuration(uint256 duration) returns()
func (_Auctioneer *AuctioneerTransactor) SetLiquidationAuctionDuration(opts *bind.TransactOpts, duration *big.Int) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "setLiquidationAuctionDuration", duration)
}

// SetLiquidationAuctionDuration is a paid mutator transaction binding the contract method 0xdc6687e2.
//
// Solidity: function setLiquidationAuctionDuration(uint256 duration) returns()
func (_Auctioneer *AuctioneerSession) SetLiquidationAuctionDuration(duration *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetLiquidationAuctionDuration(&_Auctioneer.TransactOpts, duration)
}

// SetLiquidationAuctionDuration is a paid mutator transaction binding the contract method 0xdc6687e2.
//
// Solidity: function setLiquidationAuctionDuration(uint256 duration) returns()
func (_Auctioneer *AuctioneerTransactorSession) SetLiquidationAuctionDuration(duration *big.Int) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetLiquidationAuctionDuration(&_Auctioneer.TransactOpts, duration)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator_) returns()
func (_Auctioneer *AuctioneerTransactor) SetOperator(opts *bind.TransactOpts, operator_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "setOperator", operator_)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator_) returns()
func (_Auctioneer *AuctioneerSession) SetOperator(operator_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetOperator(&_Auctioneer.TransactOpts, operator_)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator_) returns()
func (_Auctioneer *AuctioneerTransactorSession) SetOperator(operator_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetOperator(&_Auctioneer.TransactOpts, operator_)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle_) returns()
func (_Auctioneer *AuctioneerTransactor) SetOracle(opts *bind.TransactOpts, oracle_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "setOracle", oracle_)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle_) returns()
func (_Auctioneer *AuctioneerSession) SetOracle(oracle_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetOracle(&_Auctioneer.TransactOpts, oracle_)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle_) returns()
func (_Auctioneer *AuctioneerTransactorSession) SetOracle(oracle_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetOracle(&_Auctioneer.TransactOpts, oracle_)
}

// SetProceedAddress is a paid mutator transaction binding the contract method 0x1bfa43ac.
//
// Solidity: function setProceedAddress(address proceedAddress_) returns()
func (_Auctioneer *AuctioneerTransactor) SetProceedAddress(opts *bind.TransactOpts, proceedAddress_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "setProceedAddress", proceedAddress_)
}

// SetProceedAddress is a paid mutator transaction binding the contract method 0x1bfa43ac.
//
// Solidity: function setProceedAddress(address proceedAddress_) returns()
func (_Auctioneer *AuctioneerSession) SetProceedAddress(proceedAddress_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetProceedAddress(&_Auctioneer.TransactOpts, proceedAddress_)
}

// SetProceedAddress is a paid mutator transaction binding the contract method 0x1bfa43ac.
//
// Solidity: function setProceedAddress(address proceedAddress_) returns()
func (_Auctioneer *AuctioneerTransactorSession) SetProceedAddress(proceedAddress_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetProceedAddress(&_Auctioneer.TransactOpts, proceedAddress_)
}

// SetStabilization is a paid mutator transaction binding the contract method 0x4f505895.
//
// Solidity: function setStabilization(address stabilization_) returns()
func (_Auctioneer *AuctioneerTransactor) SetStabilization(opts *bind.TransactOpts, stabilization_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.contract.Transact(opts, "setStabilization", stabilization_)
}

// SetStabilization is a paid mutator transaction binding the contract method 0x4f505895.
//
// Solidity: function setStabilization(address stabilization_) returns()
func (_Auctioneer *AuctioneerSession) SetStabilization(stabilization_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetStabilization(&_Auctioneer.TransactOpts, stabilization_)
}

// SetStabilization is a paid mutator transaction binding the contract method 0x4f505895.
//
// Solidity: function setStabilization(address stabilization_) returns()
func (_Auctioneer *AuctioneerTransactorSession) SetStabilization(stabilization_ common.Address) (*types.Transaction, error) {
	return _Auctioneer.Contract.SetStabilization(&_Auctioneer.TransactOpts, stabilization_)
}

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

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

// AuctioneerAuctionedDebt represents a AuctionedDebt event raised by the Auctioneer contract.
type AuctioneerAuctionedDebt struct {
	Debtor           common.Address
	Biddor           common.Address
	CollateralAmount *big.Int
	DebtAmount       *big.Int
	Raw              types.Log // Blockchain specific contextual infos
}

// FilterAuctionedDebt is a free log retrieval operation binding the contract event 0x224679169afb6db5d7c66f92137a4d654d1d4967d6c0cb5cb3bb09223e8edad8.
//
// Solidity: event AuctionedDebt(address indexed debtor, address indexed biddor, uint256 collateralAmount, uint256 debtAmount)
func (_Auctioneer *AuctioneerFilterer) FilterAuctionedDebt(opts *bind.FilterOpts, debtor []common.Address, biddor []common.Address) (*AuctioneerAuctionedDebtIterator, error) {

	var debtorRule []interface{}
	for _, debtorItem := range debtor {
		debtorRule = append(debtorRule, debtorItem)
	}
	var biddorRule []interface{}
	for _, biddorItem := range biddor {
		biddorRule = append(biddorRule, biddorItem)
	}

	logs, sub, err := _Auctioneer.contract.FilterLogs(opts, "AuctionedDebt", debtorRule, biddorRule)
	if err != nil {
		return nil, err
	}
	return &AuctioneerAuctionedDebtIterator{contract: _Auctioneer.contract, event: "AuctionedDebt", logs: logs, sub: sub}, nil
}

// WatchAuctionedDebt is a free log subscription operation binding the contract event 0x224679169afb6db5d7c66f92137a4d654d1d4967d6c0cb5cb3bb09223e8edad8.
//
// Solidity: event AuctionedDebt(address indexed debtor, address indexed biddor, uint256 collateralAmount, uint256 debtAmount)
func (_Auctioneer *AuctioneerFilterer) WatchAuctionedDebt(opts *bind.WatchOpts, sink chan<- *AuctioneerAuctionedDebt, debtor []common.Address, biddor []common.Address) (event.Subscription, error) {

	var debtorRule []interface{}
	for _, debtorItem := range debtor {
		debtorRule = append(debtorRule, debtorItem)
	}
	var biddorRule []interface{}
	for _, biddorItem := range biddor {
		biddorRule = append(biddorRule, biddorItem)
	}

	logs, sub, err := _Auctioneer.contract.WatchLogs(opts, "AuctionedDebt", debtorRule, biddorRule)
	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(AuctioneerAuctionedDebt)
				if err := _Auctioneer.contract.UnpackLog(event, "AuctionedDebt", 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
}

// ParseAuctionedDebt is a log parse operation binding the contract event 0x224679169afb6db5d7c66f92137a4d654d1d4967d6c0cb5cb3bb09223e8edad8.
//
// Solidity: event AuctionedDebt(address indexed debtor, address indexed biddor, uint256 collateralAmount, uint256 debtAmount)
func (_Auctioneer *AuctioneerFilterer) ParseAuctionedDebt(log types.Log) (*AuctioneerAuctionedDebt, error) {
	event := new(AuctioneerAuctionedDebt)
	if err := _Auctioneer.contract.UnpackLog(event, "AuctionedDebt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AuctioneerAuctionedInterest represents a AuctionedInterest event raised by the Auctioneer contract.
type AuctioneerAuctionedInterest struct {
	Biddor         common.Address
	InterestAmount *big.Int
	PaymentAmount  *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterAuctionedInterest is a free log retrieval operation binding the contract event 0x115e690ff81160b136b2c20b2c2aa15264cd58226271082852b22a79e0f971f3.
//
// Solidity: event AuctionedInterest(address indexed biddor, uint256 interestAmount, uint256 paymentAmount)
func (_Auctioneer *AuctioneerFilterer) FilterAuctionedInterest(opts *bind.FilterOpts, biddor []common.Address) (*AuctioneerAuctionedInterestIterator, error) {

	var biddorRule []interface{}
	for _, biddorItem := range biddor {
		biddorRule = append(biddorRule, biddorItem)
	}

	logs, sub, err := _Auctioneer.contract.FilterLogs(opts, "AuctionedInterest", biddorRule)
	if err != nil {
		return nil, err
	}
	return &AuctioneerAuctionedInterestIterator{contract: _Auctioneer.contract, event: "AuctionedInterest", logs: logs, sub: sub}, nil
}

// WatchAuctionedInterest is a free log subscription operation binding the contract event 0x115e690ff81160b136b2c20b2c2aa15264cd58226271082852b22a79e0f971f3.
//
// Solidity: event AuctionedInterest(address indexed biddor, uint256 interestAmount, uint256 paymentAmount)
func (_Auctioneer *AuctioneerFilterer) WatchAuctionedInterest(opts *bind.WatchOpts, sink chan<- *AuctioneerAuctionedInterest, biddor []common.Address) (event.Subscription, error) {

	var biddorRule []interface{}
	for _, biddorItem := range biddor {
		biddorRule = append(biddorRule, biddorItem)
	}

	logs, sub, err := _Auctioneer.contract.WatchLogs(opts, "AuctionedInterest", biddorRule)
	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(AuctioneerAuctionedInterest)
				if err := _Auctioneer.contract.UnpackLog(event, "AuctionedInterest", 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
}

// ParseAuctionedInterest is a log parse operation binding the contract event 0x115e690ff81160b136b2c20b2c2aa15264cd58226271082852b22a79e0f971f3.
//
// Solidity: event AuctionedInterest(address indexed biddor, uint256 interestAmount, uint256 paymentAmount)
func (_Auctioneer *AuctioneerFilterer) ParseAuctionedInterest(log types.Log) (*AuctioneerAuctionedInterest, error) {
	event := new(AuctioneerAuctionedInterest)
	if err := _Auctioneer.contract.UnpackLog(event, "AuctionedInterest", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AuctioneerConfigUpdateAddress represents a ConfigUpdateAddress event raised by the Auctioneer contract.
type AuctioneerConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*AuctioneerConfigUpdateAddressIterator, error) {

	logs, sub, err := _Auctioneer.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &AuctioneerConfigUpdateAddressIterator{contract: _Auctioneer.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *AuctioneerConfigUpdateAddress) (event.Subscription, error) {

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

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) ParseConfigUpdateAddress(log types.Log) (*AuctioneerConfigUpdateAddress, error) {
	event := new(AuctioneerConfigUpdateAddress)
	if err := _Auctioneer.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AuctioneerConfigUpdateBool represents a ConfigUpdateBool event raised by the Auctioneer contract.
type AuctioneerConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*AuctioneerConfigUpdateBoolIterator, error) {

	logs, sub, err := _Auctioneer.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &AuctioneerConfigUpdateBoolIterator{contract: _Auctioneer.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *AuctioneerConfigUpdateBool) (event.Subscription, error) {

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

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) ParseConfigUpdateBool(log types.Log) (*AuctioneerConfigUpdateBool, error) {
	event := new(AuctioneerConfigUpdateBool)
	if err := _Auctioneer.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AuctioneerConfigUpdateInt represents a ConfigUpdateInt event raised by the Auctioneer contract.
type AuctioneerConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*AuctioneerConfigUpdateIntIterator, error) {

	logs, sub, err := _Auctioneer.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &AuctioneerConfigUpdateIntIterator{contract: _Auctioneer.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *AuctioneerConfigUpdateInt) (event.Subscription, error) {

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

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) ParseConfigUpdateInt(log types.Log) (*AuctioneerConfigUpdateInt, error) {
	event := new(AuctioneerConfigUpdateInt)
	if err := _Auctioneer.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AuctioneerConfigUpdateUint represents a ConfigUpdateUint event raised by the Auctioneer contract.
type AuctioneerConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*AuctioneerConfigUpdateUintIterator, error) {

	logs, sub, err := _Auctioneer.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &AuctioneerConfigUpdateUintIterator{contract: _Auctioneer.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *AuctioneerConfigUpdateUint) (event.Subscription, error) {

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

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Auctioneer *AuctioneerFilterer) ParseConfigUpdateUint(log types.Log) (*AuctioneerConfigUpdateUint, error) {
	event := new(AuctioneerConfigUpdateUint)
	if err := _Auctioneer.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AuctioneerNewInterestAuction represents a NewInterestAuction event raised by the Auctioneer contract.
type AuctioneerNewInterestAuction struct {
	AuctionId      *big.Int
	Amount         *big.Int
	StartTimestamp *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterNewInterestAuction is a free log retrieval operation binding the contract event 0x7f1eca098adf942b2cb7f72f640e98b93298c0260ca26104cbd94c55d1324b13.
//
// Solidity: event NewInterestAuction(uint256 auctionId, uint256 amount, uint256 startTimestamp)
func (_Auctioneer *AuctioneerFilterer) FilterNewInterestAuction(opts *bind.FilterOpts) (*AuctioneerNewInterestAuctionIterator, error) {

	logs, sub, err := _Auctioneer.contract.FilterLogs(opts, "NewInterestAuction")
	if err != nil {
		return nil, err
	}
	return &AuctioneerNewInterestAuctionIterator{contract: _Auctioneer.contract, event: "NewInterestAuction", logs: logs, sub: sub}, nil
}

// WatchNewInterestAuction is a free log subscription operation binding the contract event 0x7f1eca098adf942b2cb7f72f640e98b93298c0260ca26104cbd94c55d1324b13.
//
// Solidity: event NewInterestAuction(uint256 auctionId, uint256 amount, uint256 startTimestamp)
func (_Auctioneer *AuctioneerFilterer) WatchNewInterestAuction(opts *bind.WatchOpts, sink chan<- *AuctioneerNewInterestAuction) (event.Subscription, error) {

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

// ParseNewInterestAuction is a log parse operation binding the contract event 0x7f1eca098adf942b2cb7f72f640e98b93298c0260ca26104cbd94c55d1324b13.
//
// Solidity: event NewInterestAuction(uint256 auctionId, uint256 amount, uint256 startTimestamp)
func (_Auctioneer *AuctioneerFilterer) ParseNewInterestAuction(log types.Log) (*AuctioneerNewInterestAuction, error) {
	event := new(AuctioneerNewInterestAuction)
	if err := _Auctioneer.contract.UnpackLog(event, "NewInterestAuction", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AuctioneerPriceUnavailable represents a PriceUnavailable event raised by the Auctioneer contract.
type AuctioneerPriceUnavailable struct {
	Raw types.Log // Blockchain specific contextual infos
}

// FilterPriceUnavailable is a free log retrieval operation binding the contract event 0xcb08be81e7070984d3fcbcbc4a7b99c01a8d7722fd659fa8d2c1d6c5715a7ae8.
//
// Solidity: event PriceUnavailable()
func (_Auctioneer *AuctioneerFilterer) FilterPriceUnavailable(opts *bind.FilterOpts) (*AuctioneerPriceUnavailableIterator, error) {

	logs, sub, err := _Auctioneer.contract.FilterLogs(opts, "PriceUnavailable")
	if err != nil {
		return nil, err
	}
	return &AuctioneerPriceUnavailableIterator{contract: _Auctioneer.contract, event: "PriceUnavailable", logs: logs, sub: sub}, nil
}

// WatchPriceUnavailable is a free log subscription operation binding the contract event 0xcb08be81e7070984d3fcbcbc4a7b99c01a8d7722fd659fa8d2c1d6c5715a7ae8.
//
// Solidity: event PriceUnavailable()
func (_Auctioneer *AuctioneerFilterer) WatchPriceUnavailable(opts *bind.WatchOpts, sink chan<- *AuctioneerPriceUnavailable) (event.Subscription, error) {

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

// ParsePriceUnavailable is a log parse operation binding the contract event 0xcb08be81e7070984d3fcbcbc4a7b99c01a8d7722fd659fa8d2c1d6c5715a7ae8.
//
// Solidity: event PriceUnavailable()
func (_Auctioneer *AuctioneerFilterer) ParsePriceUnavailable(log types.Log) (*AuctioneerPriceUnavailable, error) {
	event := new(AuctioneerPriceUnavailable)
	if err := _Auctioneer.contract.UnpackLog(event, "PriceUnavailable", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AutonityMetaData contains all meta data concerning the Autonity contract.
var AutonityMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator[]\",\"name\":\"_validators\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialInflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withholdingThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposerRewardRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oracleRewardRate\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"withheldRewardsPool\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractIUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"},{\"internalType\":\"contractIInflationController\",\"name\":\"inflationControllerContract\",\"type\":\"address\"},{\"internalType\":\"contractIOmissionAccountability\",\"name\":\"omissionAccountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIAuctioneer\",\"name\":\"auctioneerContract\",\"type\":\"address\"}],\"internalType\":\"structIAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxScheduleDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"clusteringThreshold\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"BondingApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"oldParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"newParams\",\"type\":\"tuple\"}],\"name\":\"Eip1559ParamsUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"oldEnode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newEnode\",\"type\":\"string\"}],\"name\":\"EnodeUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliedAtBlock\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"headBondingID\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inflationReserve\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeCirculating\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"scheduleVault\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDuration\",\"type\":\"uint256\"}],\"name\":\"NewSchedule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"headUnbondingID\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidStateContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnSelfAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnDelegatedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnSelfAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnDelegatedAmount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"STANDARD_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STANDARD_SCALE_FACTOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approveBonding\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_selfBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_delegated\",\"type\":\"uint256\"}],\"name\":\"autobond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bondFrom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"}],\"name\":\"bondingAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"circulatingSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"completeContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheduleVault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalDuration\",\"type\":\"uint256\"}],\"name\":\"createSchedule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"contractUpgradeReady\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"epochEnded\",\"type\":\"bool\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"committee\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"previousEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"omissionDelta\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.EpochInfo\",\"name\":\"epoch\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"clusteringThreshold\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"range\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gracePeriod\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Accountability\",\"name\":\"accountability\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.ClientAwareConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structAutonity.FinalizeResult\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_omissionDelta\",\"type\":\"uint256\"}],\"name\":\"finalizeInitialization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBondingRequestByID\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.BondingRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getClientConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"clusteringThreshold\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"range\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gracePeriod\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Accountability\",\"name\":\"accountability\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.ClientAwareConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialInflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withholdingThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposerRewardRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oracleRewardRate\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"withheldRewardsPool\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractIUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"},{\"internalType\":\"contractIInflationController\",\"name\":\"inflationControllerContract\",\"type\":\"address\"},{\"internalType\":\"contractIOmissionAccountability\",\"name\":\"omissionAccountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIAuctioneer\",\"name\":\"auctioneerContract\",\"type\":\"address\"}],\"internalType\":\"structIAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxScheduleDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"clusteringThreshold\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"}],\"name\":\"getEpochByHeight\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"committee\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"previousEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"omissionDelta\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochInfo\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"committee\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"previousEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"omissionDelta\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInflationReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidLogicContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxScheduleDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewContract\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getSchedule\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unlockedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastUnlockTime\",\"type\":\"uint256\"}],\"internalType\":\"structIScheduleController.Schedule\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSlasher\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"}],\"name\":\"getTotalSchedules\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getUnbondingRequestByID\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"released\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"selfDelegation\",\"type\":\"bool\"}],\"internalType\":\"structIAutonity.UnbondingRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondingID\",\"type\":\"uint256\"}],\"name\":\"getUnbondingShare\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidatorState\",\"outputs\":[{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondingID\",\"type\":\"uint256\"}],\"name\":\"isUnbondingReleased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_jailtime\",\"type\":\"uint256\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailedState\",\"type\":\"uint8\"}],\"name\":\"jail\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailboundState\",\"type\":\"uint8\"}],\"name\":\"jailbound\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAcuContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAuctioneerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"setClusteringThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"_params\",\"type\":\"tuple\"}],\"name\":\"setEip1559Params\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIInflationController\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setInflationControllerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"}],\"name\":\"setLiquidLogicContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxDuration\",\"type\":\"uint256\"}],\"name\":\"setMaxScheduleDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOmissionAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOmissionAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperatorAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOracleContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_oracleRewardRate\",\"type\":\"uint256\"}],\"name\":\"setOracleRewardRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_proposerRewardRate\",\"type\":\"uint256\"}],\"name\":\"setProposerRewardRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"setSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStabilizationContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSupplyControlContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setTreasuryAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"setTreasuryFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractUpgradeManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setUpgradeManagerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"setWithheldRewardsPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_withholdingThreshold\",\"type\":\"uint256\"}],\"name\":\"setWithholdingThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRate\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"slashingAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jailtime\",\"type\":\"uint256\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailedState\",\"type\":\"uint8\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailboundState\",\"type\":\"uint8\"}],\"name\":\"slashAndJail\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"slashingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondFrom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"}],\"name\":\"updateEnode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bytecode\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_abi\",\"type\":\"string\"}],\"name\":\"upgradeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
	Sigs: map[string]string{
		"f3c70aad": "STANDARD_DECIMALS()",
		"d144f00a": "STANDARD_SCALE_FACTOR()",
		"b46e5520": "activateValidator(address)",
		"dd62ed3e": "allowance(address,address)",
		"095ea7b3": "approve(address,uint256)",
		"50492571": "approveBonding(address,uint256)",
		"f7fcc510": "autobond(address,uint256,uint256)",
		"70a08231": "balanceOf(address)",
		"a515366a": "bond(address,uint256)",
		"41de7400": "bondFrom(address,address,uint256)",
		"e0e01d54": "bondingAllowance(address,address)",
		"9dc29fac": "burn(address,uint256)",
		"852c4849": "changeCommissionRate(address,uint256)",
		"9358928b": "circulatingSupply()",
		"872cf059": "completeContractUpgrade()",
		"354c40a7": "createSchedule(address,uint256,uint256,uint256)",
		"313ce567": "decimals()",
		"4bb278f3": "finalize()",
		"4da3baec": "finalizeInitialization(uint256)",
		"43645969": "getBlockPeriod()",
		"8ebb48b7": "getBondingRequestByID(uint256)",
		"f3f759c1": "getClientConfig()",
		"ab8f6ffe": "getCommittee()",
		"a8b2216e": "getCommitteeEnodes()",
		"c3f909d4": "getConfig()",
		"2b56feac": "getCurrentCommitteeSize()",
		"0aac2da1": "getCurrentEpochPeriod()",
		"affb1cf1": "getEpochByHeight(uint256)",
		"96b477cb": "getEpochFromBlock(uint256)",
		"6fc53515": "getEpochID()",
		"a9fd1a8f": "getEpochInfo()",
		"dfb1a4d2": "getEpochPeriod()",
		"4efcd15f": "getEpochTotalBondedStake()",
		"4651e07b": "getInflationReserve()",
		"731b3a03": "getLastEpochBlock()",
		"ba522458": "getLastEpochTime()",
		"4c1f1c77": "getLiquidLogicContract()",
		"819b6463": "getMaxCommitteeSize()",
		"fed76a56": "getMaxScheduleDuration()",
		"11220633": "getMinimumBaseFee()",
		"b66b3e79": "getNewContract()",
		"25ce1bb9": "getNextEpochBlock()",
		"e7f43c68": "getOperator()",
		"833b1fce": "getOracle()",
		"7264c4da": "getSchedule(address,uint256)",
		"d0c80f13": "getSlasher()",
		"088566e9": "getTotalSchedules(address)",
		"f7866ee3": "getTreasuryAccount()",
		"29070c6d": "getTreasuryFee()",
		"6fd2c80b": "getUnbondingPeriod()",
		"4bfe23f1": "getUnbondingRequestByID(uint256)",
		"8d347287": "getUnbondingShare(uint256)",
		"1904bb2e": "getValidator(address)",
		"5b7d6c36": "getValidatorState(address)",
		"b7ab4db5": "getValidators()",
		"0d8e6e2c": "getVersion()",
		"e294df7c": "isUnbondingReleased(uint256)",
		"154d76d7": "jail(address,uint256,uint8)",
		"8ef8c2fd": "jailbound(address,uint8)",
		"40c10f19": "mint(address,uint256)",
		"06fdde03": "name()",
		"0ae65e7a": "pauseValidator(address)",
		"84467fdb": "registerValidator(string,address,bytes,bytes)",
		"cf9c5719": "resetContractUpgrade()",
		"1250a28d": "setAccountabilityContract(address)",
		"d372c07e": "setAcuContract(address)",
		"5a061362": "setAuctioneerContract(address)",
		"12e7b45d": "setClusteringThreshold(uint256)",
		"8bac7dad": "setCommitteeSize(uint256)",
		"56176bc4": "setEip1559Params((uint256,uint256,uint256,uint256))",
		"6b5f444c": "setEpochPeriod(uint256)",
		"ee7d72b4": "setGasLimit(uint256)",
		"f03b959d": "setInflationControllerContract(address)",
		"15ef30f8": "setLiquidLogicContract(address)",
		"8bb2e477": "setMaxScheduleDuration(uint256)",
		"b47c3eaa": "setOmissionAccountabilityContract(address)",
		"520fdbbc": "setOperatorAccount(address)",
		"496ccd9b": "setOracleContract(address)",
		"ed5676e9": "setOracleRewardRate(uint256)",
		"416f86a2": "setProposerRewardRate(uint256)",
		"aabc2496": "setSlasher(address)",
		"cfd19fb9": "setStabilizationContract(address)",
		"b3ecbadd": "setSupplyControlContract(address)",
		"d886f8a2": "setTreasuryAccount(address)",
		"77e741c7": "setTreasuryFee(uint256)",
		"114eaf55": "setUnbondingPeriod(uint256)",
		"ceaad455": "setUpgradeManagerContract(address)",
		"39f9eb1f": "setWithheldRewardsPool(address)",
		"905d76e9": "setWithholdingThreshold(uint256)",
		"02fb4d85": "slash(address,uint256)",
		"122b4122": "slashAndJail(address,uint256,uint256,uint8,uint8)",
		"95d89b41": "symbol()",
		"18160ddd": "totalSupply()",
		"a9059cbb": "transfer(address,uint256)",
		"23b872dd": "transferFrom(address,address,uint256)",
		"a5d059ca": "unbond(address,uint256)",
		"a9a7d7c9": "unbondFrom(address,address,uint256)",
		"784304b5": "updateEnode(address,string)",
		"b2ea9adb": "upgradeContract(bytes,string)",
	},
	Bin: "0x60806040526000600e556000600f5534801561001a57600080fd5b5060405162010a4938038062010a4983398101604081905261003b91611434565b602d5460000361006157604780546001600160a01b031916331790556100618282610068565b5050611a32565b805180516010556020808201516011819055604080840151601255606080850151601355608080860151601481905560a08088015160155560c08089015160165560e0808a0151601755610100808b0151601880546001600160a01b03199081166001600160a01b03938416179091556101208d01516019805483169184169190911790556101408d0151601a819055610160909d0151601b8190558c8f01518051601c80548516918616919091179055808e0151601d80548516918616919091179055808c0151601e80548516918616919091179055808b0151601f80548516918616919091179055808a01518e548416908516178e5580880151602180548516918616919091179055808701516022805485169186169190911790558086015160238054851691861691909117905590930151602480548316918416919091179055898e01518051602580549093169316929092179055808b01516026819055818a0151602755818901516028558188015160295594810151602a81905593810151602b819055920151602c819055878d0151602d55603194909455603a9390935586519485018752878552978401899052838601829052929093018690526035949094556036959095556037556038929092556039929092556046919091555161025490610fff565b604051809103906000f080158015610270573d6000803e3d6000fd5b50604880546001600160a01b0319166001600160a01b039290921691909117905560405161029d9061100d565b604051809103906000f0801580156102b9573d6000803e3d6000fd5b50604980546001600160a01b0319166001600160a01b039290921691909117905560005b82518110156107735760008382815181106102fa576102fa611684565b602002602001015160a001519050600084838151811061031c5761031c611684565b60209081029190910101516101a001526103386012600a611799565b84838151811061034a5761034a611684565b6020026020010151610260018181525050600084838151811061036f5761036f611684565b602002602001015161018001906001600160a01b031690816001600160a01b03168152505060008483815181106103a8576103a8611684565b602002602001015160a001818152505060008483815181106103cc576103cc611684565b602002602001015161010001818152505060008483815181106103f1576103f1611684565b60209081029190910101516101c00152601254845185908490811061041857610418611684565b60200260200101516080018181525050600084838151811061043c5761043c611684565b60200260200101516102400190600581111561045a5761045a6117ac565b9081600581111561046d5761046d6117ac565b81525050600084838151811061048557610485611684565b602002602001015161016001818152505060008483815181106104aa576104aa611684565b602002602001015160c001818152505060008483815181106104ce576104ce611684565b602002602001015161012001818152505060008483815181106104f3576104f3611684565b602002602001015160e0018181525050600084838151811061051757610517611684565b602002602001015161014001818152505061055084838151811061053d5761053d611684565b602002602001015161077860201b60201c565b61057c84838151811061056557610565611684565b6020026020010151604001516108b560201b60201c565b6105a484838151811061059157610591611684565b602002602001015161093860201b60201c565b80604160008685815181106105bb576105bb611684565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546105f691906117c2565b92505081905550806044600082825461060f91906117c2565b92505081905550806045600082825461062891906117c2565b925050819055507f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c84838151811061066257610662611684565b60200260200101516000015185848151811061068057610680611684565b60200260200101516020015186858151811061069e5761069e611684565b6020026020010151604001518786815181106106bc576106bc611684565b6020026020010151606001518887815181106106da576106da611684565b602002602001015161018001516040516106f8959493929190611801565b60405180910390a161076984838151811061071557610715611684565b6020026020010151602001518286858151811061073457610734611684565b60200260200101516000015187868151811061075257610752611684565b602002602001015160000151610bd560201b60201c565b50506001016102dd565b505050565b600061078d8260600151610eac60201b60201c565b6001600160a01b039091166020840152905080156107e05760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b60448201526064015b60405180910390fd5b6020808301516001600160a01b039081166000908152604290925260409091206001015416156108525760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c726561647920726567697374657265640000000060448201526064016107d7565b61085e6004600a611799565b826080015111156108b15760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e207261746500000000000000000060448201526064016107d7565b5050565b6001600160a01b0381166000908152604360205260409020541561091b5760405162461bcd60e51b815260206004820152601460248201527f6f7261636c65207365727665722065786973747300000000000000000000000060448201526064016107d7565b6001600160a01b0316600090815260436020526040902060019055565b6101808101516001600160a01b0316610a2d576048546001600160a01b03166109ae5760405162461bcd60e51b815260206004820152602260248201527f6c6971756964206c6f67696320636f6e7472616374206e6f74206465706c6f79604482015261195960f21b60648201526084016107d7565b602e546000906109bd90610ef7565b905081602001518260000151836080015183604860009054906101000a90046001600160a01b03166040516109f19061101b565b6109ff95949392919061184f565b604051809103906000f080158015610a1b573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051602e80546001808201835560009283527f37fa166cbdbfbb1561ccd9ea985ec0218b5e68502e230525f544285b2bdf3d7e90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352604290955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190610add908261190a565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190610b9a908261190a565b5061024082015160128201805460ff19166001836005811115610bbf57610bbf6117ac565b0217905550610260820151816013015590505050565b6001600160a01b0384166000818152604260205260408120909115801590610c0c575060018101546001600160a01b038781169116145b610c585760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f742072656769737465726564000000000000000060448201526064016107d7565b6000601282015460ff166005811115610c7357610c736117ac565b14610cc05760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f20626520616374697665000000000060448201526064016107d7565b60008511610d1c5760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b60648201526084016107d7565b6001600160a01b038416600090815260416020526040902054851115610d845760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e6365000000000060448201526064016107d7565b6001600160a01b03841660009081526041602052604081208054879290610dac9084906119c8565b9091555050604080516080810182526001600160a01b0386811680835289821660208085018281528587018c8152436060808901918252600880546000908152600687528b90208a518154908b166001600160a01b03199182161782559551600182018054918c16919097161790955592516002850155905160039093019290925588549054885191871686148083529382018e90529781019790975294959094938916937fcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2910160405180910390a460088054906000610e8c836119db565b91905055506001600854610ea091906119c8565b98975050505050505050565b600080610eb7611029565b60008060ff9050604083875160208901845afa610ed357600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b606081600003610f1e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610f485780610f32816119db565b9150610f419050600a83611a0a565b9150610f22565b6000816001600160401b03811115610f6257610f62611047565b6040519080825280601f01601f191660200182016040528015610f8c576020820181803683370190505b5090505b8415610ff757610fa16001836119c8565b9150610fae600a86611a1e565b610fb99060306117c2565b60f81b818381518110610fce57610fce611684565b60200101906001600160f81b031916908160001a905350610ff0600a86611a0a565b9450610f90565b949350505050565b611abc806200dc1e83390190565b610da0806200f6da83390190565b6105cf806201047a83390190565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561108057611080611047565b60405290565b60405161010081016001600160401b038111828210171561108057611080611047565b604051608081016001600160401b038111828210171561108057611080611047565b60405161018081016001600160401b038111828210171561108057611080611047565b60405161028081016001600160401b038111828210171561108057611080611047565b604051601f8201601f191681016001600160401b038111828210171561113957611139611047565b604052919050565b6001600160a01b038116811461115657600080fd5b50565b805161116481611141565b919050565b60005b8381101561118457818101518382015260200161116c565b50506000910152565b600082601f83011261119e57600080fd5b8151602083016000806001600160401b038411156111be576111be611047565b50601f8301601f19166020016111d381611111565b9150508281528583830111156111e857600080fd5b6111f6836020830184611169565b95945050505050565b80516006811061116457600080fd5b6000610120828403121561122157600080fd5b61122961105d565b905061123482611159565b815261124260208301611159565b602082015261125360408301611159565b604082015261126460608301611159565b606082015261127560808301611159565b608082015261128660a08301611159565b60a082015261129760c08301611159565b60c08201526112a860e08301611159565b60e08201526112ba6101008301611159565b61010082015292915050565b600061010082840312156112d957600080fd5b6112e1611086565b905081516112ee81611141565b81526020828101519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e09182015191810191909152919050565b60008183036103c081121561135257600080fd5b61135a6110a9565b915061018081121561136b57600080fd5b506113746110cb565b825181526020808401519082015260408084015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e080840151908201526113cb6101008401611159565b6101008201526113de6101208401611159565b61012082015261014083810151908201526101608084015190820152815261140a83610180840161120e565b602082015261141d836102a084016112c6565b60408201526103a091909101516060820152919050565b6000806103e0838503121561144857600080fd5b82516001600160401b0381111561145e57600080fd5b8301601f8101851361146f57600080fd5b80516001600160401b0381111561148857611488611047565b8060051b61149860208201611111565b918252602081840181019290810190888411156114b457600080fd5b6020850192505b838310156116665782516001600160401b038111156114d957600080fd5b8501610280818b03601f190112156114f057600080fd5b6114f86110ee565b61150460208301611159565b815261151260408301611159565b602082015261152360608301611159565b604082015260808201516001600160401b0381111561154157600080fd5b6115508c60208386010161118d565b60608301525060a082810151608083015260c0808401519183019190915260e080840151918301919091526101008084015191830191909152610120808401519183019190915261014080840151918301919091526101608084015191830191909152610180830151908201526115ca6101a08301611159565b6101808201526101c0828101516101a08301526101e080840151918301919091526102008084015191830191909152610220830151908201526102408201516001600160401b0381111561161d57600080fd5b61162c8c60208386010161118d565b6102208301525061164061026083016111ff565b6102408201526102809190910151610260820152825260209283019291909101906114bb565b809650505050505061167b846020850161133e565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156116eb578085048111156116cf576116cf61169a565b60018416156116dd57908102905b60019390931c9280026116b4565b935093915050565b60008261170257506001611793565b8161170f57506000611793565b8160018114611725576002811461172f5761174b565b6001915050611793565b60ff8411156117405761174061169a565b50506001821b611793565b5060208310610133831016604e8410600b841016171561176e575081810a611793565b61177b60001984846116b0565b806000190482111561178f5761178f61169a565b0290505b92915050565b60006117a583836116f3565b9392505050565b634e487b7160e01b600052602160045260246000fd5b808201808211156117935761179361169a565b600081518084526117ed816020860160208601611169565b601f01601f19169290920160200192915050565b6001600160a01b03868116825285811660208301528416604082015260a060608201819052600090611835908301856117d5565b905060018060a01b03831660808301529695505050505050565b6001600160a01b038681168252851660208201526040810184905260a060608201819052600090611835908301856117d5565b600181811c9082168061189657607f821691505b6020821081036118b657634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561077357806000526020600020601f840160051c810160208510156118e35750805b601f840160051c820191505b8181101561190357600081556001016118ef565b5050505050565b81516001600160401b0381111561192357611923611047565b611937816119318454611882565b846118bc565b6020601f82116001811461196b57600083156119535750848201515b600019600385901b1c1916600184901b178455611903565b600084815260208120601f198516915b8281101561199b578785015182556020948501946001909201910161197b565b50848210156119b95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b818103818111156117935761179361169a565b6000600182016119ed576119ed61169a565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082611a1957611a196119f4565b500490565b600082611a2d57611a2d6119f4565b500690565b61c1dc8062001a426000396000f3fe60806040526004361061053e5760003560e01c806384467fdb116102ba578063b47c3eaa11610171578063dd62ed3e116100de578063ee7d72b41161009a578063f3f759c111610077578063f3f759c114611182578063f7866ee3146111a4578063f7fcc510146111c2578063fed76a56146111e257005b8063ee7d72b41461112d578063f03b959d1461114d578063f3c70aad1461116d57005b8063dd62ed3e1461107a578063dfb1a4d21461109a578063e0e01d54146110af578063e294df7c146110cf578063e7f43c68146110ef578063ed5676e91461110d57005b8063cf9c57191161012d578063cf9c571914610fd2578063cfd19fb914610fe7578063d0c80f1314611007578063d144f00a14611025578063d372c07e1461103a578063d886f8a21461105a57005b8063b47c3eaa14610f16578063b66b3e7914610f36578063b7ab4db514610f59578063ba52245814610f7b578063c3f909d414610f90578063ceaad45514610fb257005b80639dc29fac11610227578063a9fd1a8f116101e3578063affb1cf1116101c0578063affb1cf114610e96578063b2ea9adb14610eb6578063b3ecbadd14610ed6578063b46e552014610ef657005b8063a9fd1a8f14610e32578063aabc249614610e54578063ab8f6ffe14610e7457005b80639dc29fac14610d70578063a515366a14610d90578063a5d059ca14610db0578063a8b2216e14610dd0578063a9059cbb14610df2578063a9a7d7c914610e1257005b80638ebb48b7116102765780638ebb48b714610c6e5780638ef8c2fd14610ccf578063905d76e914610cef5780639358928b14610d0f57806395d89b4114610d2457806396b477cb14610d5057005b806384467fdb14610bb9578063852c484914610bd9578063872cf05914610bf95780638bac7dad14610c0e5780638bb2e47714610c2e5780638d34728714610c4e57005b8063416f86a21161040e57806356176bc41161037b57806370a082311161033757806377e741c71161031457806377e741c714610b46578063784304b514610b66578063819b646314610b86578063833b1fce14610b9b57005b806370a0823114610a9d5780637264c4da14610abd578063731b3a0314610b1f57005b806356176bc4146109e65780635a06136214610a065780635b7d6c3614610a265780636b5f444c14610a535780636fc5351514610a735780636fd2c80b14610a8857005b80634bfe23f1116103ca5780634bfe23f1146109125780634c1f1c771461093f5780634da3baec146109715780634efcd15f1461099157806350492571146109a6578063520fdbbc146109c657005b8063416f86a21461086657806341de74001461088657806343645969146108a65780634651e07b146108bb578063496ccd9b146108d05780634bb278f3146108f057005b8063154d76d7116104ac57806329070c6d1161046857806329070c6d146107c05780632b56feac146107d5578063313ce567146107ea578063354c40a71461080657806339f9eb1f1461082657806340c10f191461084657005b8063154d76d7146106f757806315ef30f81461071757806318160ddd146107375780631904bb2e1461074c57806323b872dd1461077957806325ce1bb91461079957005b80630d8e6e2c116104fb5780630d8e6e2c146106305780631122063314610645578063114eaf551461065a578063122b41221461067a5780631250a28d146106b757806312e7b45d146106d757005b806302fb4d851461054057806306fdde0314610573578063088566e9146105ab578063095ea7b3146105cb5780630aac2da1146105fb5780630ae65e7a14610610575b005b34801561054c57600080fd5b5061056061055b36600461a196565b6111f7565b6040519081526020015b60405180910390f35b34801561057f57600080fd5b506040805180820190915260068152652732bbba37b760d11b60208201525b60405161056a919061a212565b3480156105b757600080fd5b506105606105c636600461a225565b6114a4565b3480156105d757600080fd5b506105eb6105e636600461a196565b6114c4565b604051901515815260200161056a565b34801561060757600080fd5b50602654610560565b34801561061c57600080fd5b5061053e61062b36600461a225565b6114e5565b34801561063c57600080fd5b50602d54610560565b34801561065157600080fd5b50601154610560565b34801561066657600080fd5b5061053e61067536600461a242565b611578565b34801561068657600080fd5b5061069a61069536600461a268565b6115ff565b60408051938452602084019290925215159082015260600161056a565b3480156106c357600080fd5b5061053e6106d236600461a225565b6118c0565b3480156106e357600080fd5b5061053e6106f236600461a242565b611973565b34801561070357600080fd5b5061056061071236600461a2c7565b611a4e565b34801561072357600080fd5b5061053e61073236600461a225565b611ca5565b34801561074357600080fd5b50610560611dbd565b34801561075857600080fd5b5061076c61076736600461a225565b611de8565b60405161056a919061a48f565b34801561078557600080fd5b506105eb61079436600461a4a2565b611e31565b3480156107a557600080fd5b50602f546000908152603c6020526040902060030154610560565b3480156107cc57600080fd5b50601054610560565b3480156107e157600080fd5b50603b54610560565b3480156107f657600080fd5b506040516012815260200161056a565b34801561081257600080fd5b5061053e61082136600461a4e3565b611f39565b34801561083257600080fd5b5061053e61084136600461a225565b612006565b34801561085257600080fd5b5061053e61086136600461a196565b61210c565b34801561087257600080fd5b5061053e61088136600461a242565b612144565b34801561089257600080fd5b506105606108a136600461a4a2565b6121f9565b3480156108b257600080fd5b50602754610560565b3480156108c757600080fd5b50604654610560565b3480156108dc57600080fd5b5061053e6108eb36600461a225565b61230c565b3480156108fc57600080fd5b506109056124cc565b60405161056a919061a696565b34801561091e57600080fd5b5061093261092d36600461a242565b612e8b565b60405161056a919061a6e0565b34801561094b57600080fd5b506048546001600160a01b03165b6040516001600160a01b03909116815260200161056a565b34801561097d57600080fd5b5061053e61098c36600461a242565b612f75565b34801561099d57600080fd5b50603454610560565b3480156109b257600080fd5b506105eb6109c136600461a196565b613144565b3480156109d257600080fd5b5061053e6109e136600461a225565b613159565b3480156109f257600080fd5b5061053e610a0136600461a7c2565b613465565b348015610a1257600080fd5b5061053e610a2136600461a225565b613659565b348015610a3257600080fd5b50610a46610a4136600461a225565b61373f565b60405161056a919061a82b565b348015610a5f57600080fd5b5061053e610a6e36600461a242565b6137a1565b348015610a7f57600080fd5b50602f54610560565b348015610a9457600080fd5b50601354610560565b348015610aa957600080fd5b50610560610ab836600461a225565b613b80565b348015610ac957600080fd5b50610add610ad836600461a196565b613bbf565b60405161056a9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b348015610b2b57600080fd5b50602f546000908152603c6020526040902060020154610560565b348015610b5257600080fd5b5061053e610b6136600461a242565b613bfb565b348015610b7257600080fd5b5061053e610b8136600461a8b9565b613c7e565b348015610b9257600080fd5b50602854610560565b348015610ba757600080fd5b50601d546001600160a01b0316610959565b348015610bc557600080fd5b5061053e610bd436600461a908565b613e72565b348015610be557600080fd5b5061053e610bf436600461a196565b613faf565b348015610c0557600080fd5b5061053e61414c565b348015610c1a57600080fd5b5061053e610c2936600461a242565b61418a565b348015610c3a57600080fd5b5061053e610c4936600461a242565b61425f565b348015610c5a57600080fd5b50610560610c6936600461a242565b6142ea565b348015610c7a57600080fd5b50610c8e610c8936600461a242565b614384565b60405161056a919081516001600160a01b03908116825260208084015190911690820152604080830151908201526060918201519181019190915260800190565b348015610cdb57600080fd5b5061053e610cea36600461a9ac565b614419565b348015610cfb57600080fd5b5061053e610d0a36600461a242565b61465f565b348015610d1b57600080fd5b50610560614716565b348015610d3057600080fd5b50604080518082019091526003815262272a2760e91b602082015261059e565b348015610d5c57600080fd5b50610560610d6b36600461a242565b614740565b348015610d7c57600080fd5b5061053e610d8b36600461a196565b6147d3565b348015610d9c57600080fd5b50610560610dab36600461a196565b614900565b348015610dbc57600080fd5b50610560610dcb36600461a196565b614921565b348015610ddc57600080fd5b50610de5614937565b60405161056a919061a9e5565b348015610dfe57600080fd5b506105eb610e0d36600461a196565b614a10565b348015610e1e57600080fd5b50610560610e2d36600461a4a2565b614a71565b348015610e3e57600080fd5b50610e47614a92565b60405161056a919061aa4a565b348015610e6057600080fd5b5061053e610e6f36600461a225565b614c28565b348015610e8057600080fd5b50610e89614d36565b60405161056a919061aa5d565b348015610ea257600080fd5b50610e47610eb136600461a242565b614e3e565b348015610ec257600080fd5b5061053e610ed136600461aa70565b61507c565b348015610ee257600080fd5b5061053e610ef136600461a225565b6150b0565b348015610f0257600080fd5b5061053e610f1136600461a225565b61519b565b348015610f2257600080fd5b5061053e610f3136600461a225565b615480565b348015610f4257600080fd5b50610f4b61553a565b60405161056a92919061aac1565b348015610f6557600080fd5b50610f6e615661565b60405161056a919061ab34565b348015610f8757600080fd5b50603354610560565b348015610f9c57600080fd5b50610fa56156ec565b60405161056a919061ac2e565b348015610fbe57600080fd5b5061053e610fcd36600461a225565b615852565b348015610fde57600080fd5b5061053e615905565b348015610ff357600080fd5b5061053e61100236600461a225565b615937565b34801561101357600080fd5b506049546001600160a01b0316610959565b34801561103157600080fd5b50610560615a95565b34801561104657600080fd5b5061053e61105536600461a225565b615aa4565b34801561106657600080fd5b5061053e61107536600461a225565b615b85565b34801561108657600080fd5b5061056061109536600461ad5d565b615c31565b3480156110a657600080fd5b50603154610560565b3480156110bb57600080fd5b506105606110ca36600461ad5d565b615c80565b3480156110db57600080fd5b506105eb6110ea36600461a242565b615cce565b3480156110fb57600080fd5b506025546001600160a01b0316610959565b34801561111957600080fd5b5061053e61112836600461a242565b615d0f565b34801561113957600080fd5b5061053e61114836600461a242565b615dc2565b34801561115957600080fd5b5061053e61116836600461a225565b615ea1565b34801561117957600080fd5b50610560600481565b34801561118e57600080fd5b50611197615f5b565b60405161056a919061ad8b565b3480156111b057600080fd5b506019546001600160a01b0316610959565b3480156111ce57600080fd5b5061053e6111dd36600461ad9a565b6160c7565b3480156111ee57600080fd5b50602954610560565b601c546000906001600160a01b031633148061121d57506023546001600160a01b031633145b806112325750601d546001600160a01b031633145b6112575760405162461bcd60e51b815260040161124e9061adcf565b60405180910390fd5b61125f619d96565b6049546001600160a01b03166399ac2d4861127986616302565b856040518363ffffffff1660e01b815260040161129792919061ae17565b6000604051808303816000875af11580156112b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112de919081019061aff1565b6019546001600160a01b03166000908152604160205260408120805492955092935084929161130e90849061b04d565b90915550506001600160a01b03808516600090815260426020908152604091829020845181549085166001600160a01b031991821617825591850151600182018054918616918416919091179055918401516002830180549190941691161790915560608201518291906003820190611387908261b0e1565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190611444908261b0e1565b5061024082015160128201805460ff191660018360058111156114695761146961a309565b021790555061026091909101516013909101556001600160a01b038416600090815260426020526040902061149d906165ec565b5092915050565b6001600160a01b0381166000908152600160205260408120545b92915050565b60006114ce616637565b6114d9338484616684565b5060016114be60008055565b6114ed616637565b6001600160a01b038082166000818152604260205260409020600101549091161461152a5760405162461bcd60e51b815260040161124e9061b1a2565b6001600160a01b038181166000908152604260205260409020541633146115635760405162461bcd60e51b815260040161124e9061b1d9565b61156c816167a9565b61157560008055565b50565b6025546001600160a01b031633146115a25760405162461bcd60e51b815260040161124e9061b225565b601354604080516080808252600f908201526e1d5b989bdb991a5b99d4195c9a5bd9608a1b60a08201526020810192909252810182905243606082015260008051602061c1878339815191529060c00160405180910390a1601355565b601c54600090819081906001600160a01b031633148061162957506023546001600160a01b031633145b8061163e5750601d546001600160a01b031633145b61165a5760405162461bcd60e51b815260040161124e9061adcf565b611662619d96565b6049546001600160a01b031663a00f313f61167c8b616302565b8a438b8b8b6040518763ffffffff1660e01b81526004016116a29695949392919061b25c565b6000604051808303816000875af11580156116c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116e9919081019061b2ad565b6102008301516019546001600160a01b03166000908152604160205260408120805494995091975091955092935086929161172590849061b04d565b90915550506001600160a01b03808a16600090815260426020908152604091829020845181549085166001600160a01b03199182161782559185015160018201805491861691841691909117905591840151600283018054919094169116179091556060820151829190600382019061179e908261b0e1565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f8201556102008201516010820155610220820151601182019061185b908261b0e1565b5061024082015160128201805460ff191660018360058111156118805761188061a309565b021790555061026091909101516013909101556001600160a01b03891660009081526042602052604090206118b4906165ec565b50955095509592505050565b6025546001600160a01b031633146118ea5760405162461bcd60e51b815260040161124e9061b225565b601c54604080516080808252601690820152751858d8dbdd5b9d18589a5b1a5d1e50dbdb9d1c9858dd60521b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6025546001600160a01b0316331461199d5760405162461bcd60e51b815260040161124e9061b225565b600081116119ed5760405162461bcd60e51b815260206004820181905260248201527f636c7573746572696e67207468726573686f6c642063616e6e6f742062652030604482015260640161124e565b602c546040805160808082526013908201527218db1d5cdd195c9a5b99d51a1c995cda1bdb19606a1b60a08201526020810192909252810182905243606082015260008051602061c1878339815191529060c00160405180910390a1603a55565b601c546000906001600160a01b0316331480611a7457506023546001600160a01b031633145b80611a895750601d546001600160a01b031633145b611aa55760405162461bcd60e51b815260040161124e9061adcf565b6049546000906001600160a01b03166341b6cb0f611ac287616302565b4387876040518563ffffffff1660e01b8152600401611ae4949392919061b2fc565b6000604051808303816000875af1158015611b03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b2b919081019061b32a565b6001600160a01b03808716600090815260426020908152604091829020845181549085166001600160a01b0319918216178255918501516001820180549186169184169190911790559184015160028301805491909416911617909155606082015191925082916003820190611ba1908261b0e1565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190611c5e908261b0e1565b5061024082015160128201805460ff19166001836005811115611c8357611c8361a309565b02179055506102609190910151601390910155610200015190505b9392505050565b6025546001600160a01b03163314611ccf5760405162461bcd60e51b815260040161124e9061b225565b6001600160a01b038116611d375760405162461bcd60e51b815260206004820152602960248201527f696e76616c696420636f6e7472616374206164647265737320666f72206c6971604482015268756964206c6f67696360b81b606482015260840161124e565b604854604080516080808252601390820152721b1a5c5d5a59131bd9da58d0dbdb9d1c9858dd606a1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1604880546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600103611de05760405162461bcd60e51b815260040161124e9061b35e565b506044545b90565b611df0619d96565b6000546001141580611e0c5750601c546001600160a01b031633145b611e285760405162461bcd60e51b815260040161124e9061b35e565b6114be82616302565b6000611e3b616637565b6001600160a01b0384166000908152603f6020908152604080832033845290915290205482811015611ec05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161124e565b611ecb858585616894565b611edf8533611eda868561b395565b616684565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611f2491815260200190565b60405180910390a35050600080556001611c9e565b6025546001600160a01b03163314611f635760405162461bcd60e51b815260040161124e9061b225565b602954811115611fd25760405162461bcd60e51b815260206004820152603460248201527f7363686564756c6520746f74616c206475726174696f6e20657863656564732060448201527336b0bc1030b63637bbb2b210323ab930ba34b7b760611b606482015260840161124e565b611fdc8484616954565b8260456000828254611fee919061b395565b909155506120009050848484846169ee565b50505050565b6025546001600160a01b031633146120305760405162461bcd60e51b815260040161124e9061b225565b6001600160a01b0381166120865760405162461bcd60e51b815260206004820152601b60248201527f706f6f6c2063616e6e6f74206265207a65726f20616464726573730000000000604482015260640161124e565b601854604080516080808252601390820152721dda5d1a1a195b1914995dd85c991cd41bdbdb606a1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1601880546001600160a01b0319166001600160a01b0392909216919091179055565b6025546001600160a01b031633146121365760405162461bcd60e51b815260040161124e9061b225565b6121408282616954565b5050565b6025546001600160a01b0316331461216e5760405162461bcd60e51b815260040161124e9061b225565b61217a6004600a61b48f565b8111156121995760405162461bcd60e51b815260040161124e9061b49b565b6016546040805160808082526012908201527170726f706f7365725265776172645261746560701b60a08201526020810192909252810182905243606082015260008051602061c1878339815191529060c00160405180910390a1601655565b6000612203616637565b6001600160a01b0383811660009081526042602052604090205481861691160361226f5760405162461bcd60e51b815260206004820152601f60248201527f63616e6e6f7420626f6e6420504153207573696e6720616c6c6f77616e636500604482015260640161124e565b6001600160a01b0384166000908152604060208181528183203384529052902054828110156122e05760405162461bcd60e51b815260206004820152601960248201527f616d6f756e7420657863656564656420616c6c6f77616e636500000000000000604482015260640161124e565b6122f485336122ef868561b395565b616c67565b61230084848733616d69565b915050611c9e60008055565b6025546001600160a01b031633146123365760405162461bcd60e51b815260040161124e9061b225565b601d54604080516080808252600e908201526d1bdc9858db1950dbdb9d1c9858dd60921b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1601d80546001600160a01b0319166001600160a01b03838116918217909255601e54604051637adbf97360e01b8152600481019290925290911690637adbf97390602401600060405180830381600087803b1580156123f357600080fd5b505af1158015612407573d6000803e3d6000fd5b5050602054604051637adbf97360e01b81526001600160a01b0385811660048301529091169250637adbf9739150602401600060405180830381600087803b15801561245257600080fd5b505af1158015612466573d6000803e3d6000fd5b505060248054604051637adbf97360e01b81526001600160a01b0386811660048301529091169350637adbf9739250015b600060405180830381600087803b1580156124b157600080fd5b505af11580156124c5573d6000803e3d6000fd5b5050505050565b6124d4619e64565b6047546001600160a01b031633146124fe5760405162461bcd60e51b815260040161124e9061b4c7565b612506616637565b436032819055602f546000828152603060209081526040808320849055928252603c905281812060030154603954602a55601c5492516306c9789b60e41b815293101560048401819052929091829182916001600160a01b031690636c9789b0906024016060604051808303816000875af1158015612589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ad919061b50a565b6023546040516306c9789b60e41b8152881515600482015293965091945092506000916001600160a01b0390911690636c9789b0906024016020604051808303816000875af1158015612604573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612628919061b538565b601d5460408051634bb278f360e01b815290519293506000926001600160a01b0390921691634bb278f391600480820192602092909190829003018187875af1158015612679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269d919061b551565b90508515612b80576022546045546046546033546040516392eff3cd60e01b81526004810193909352602483019190915260448201524260648201526000916001600160a01b0316906392eff3cd90608401602060405180830381865afa15801561270c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612730919061b538565b905080604654101561274157506046545b61274b3082616954565b806046600082825461275d919061b395565b9091555061276c905042617010565b6045600082825461277d919061b04d565b90915550503060009081526041602052604090205461279d90479061719b565b6127a5617db7565b6127ad617e82565b60008060006127ba617f93565b601d54604051636d3c088760e11b815293965091945092506001600160a01b03169063da78110e906127f49086908590879060040161b56c565b600060405180830381600087803b15801561280e57600080fd5b505af1158015612822573d6000803e3d6000fd5b5050601c5460405163e08b14ed60e01b81526001600160a01b03909116925063e08b14ed915061285690859060040161ab34565b600060405180830381600087803b15801561287057600080fd5b505af1158015612884573d6000803e3d6000fd5b50506023546040516338f7bbe760e21b81526001600160a01b03909116925063e3deef9c91506128bb90603d90859060040161b632565b600060405180830381600087803b1580156128d557600080fd5b505af11580156128e9573d6000803e3d6000fd5b50506031546026555050603554601155603654601a55603754601b55603854602b55603a54602c55602354604051633009330b60e21b81524360048201526001600160a01b039091169063c024cc2c90602401600060405180830381600087803b15801561295657600080fd5b505af115801561296a573d6000803e3d6000fd5b5050602f546000908152603c6020526040812060020154602654909350909150612994904361b04d565b9050426033819055506001602f60008282546129b0919061b04d565b9091555050602f5460408051603d805460e0602082028401810190945260c08301818152612b329594849391929060009085015b82821015612ac8576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191612a379061b060565b80601f0160208091040260200160405190810160405280929190818152602001828054612a639061b060565b8015612ab05780601f10612a8557610100808354040283529160200191612ab0565b820191906000526020600020905b815481529060010190602001808311612a9357829003601f168201915b505050505081525050815260200190600101906129e4565b5050505081526020018581526020014381526020018481526020018b8152602001604051806080016040528060106000016001015481526020016010600001600a015481526020016010600001600b01548152602001601060150160060154815250815250618289565b602f5460465460455460408051938452602084019290925282820152517f3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b589181900360600190a15050505050505b8015612c5357601d54604080516303d961d760e21b815290516001600160a01b0390921691630f65875c9160048082019260009290919082900301818387803b158015612bcc57600080fd5b505af1158015612be0573d6000803e3d6000fd5b5050601e546040805163a2e6204560e01b815290516001600160a01b03909216935063a2e62045925060048082019260209290919082900301816000875af1925050508015612c4c575060408051601f3d908101601f19168201909252612c499181019061b551565b60015b15612c5357505b6040805160c080820183526026548252602754602080840191909152602a5483850152602c54606080850191909152845180820186528a81528083018a9052808601899052608080860191909152855180820187526011548152601a5481850152601b5481880152602b549281019290925260a08501919091528451908101855260055460ff16151581528a151581830152602f546000908152603c83528581208651815460e0958102820186018952958101868152969793969387019590949193859390928592919085015b82821015612e04576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191612d739061b060565b80601f0160208091040260200160405190810160405280929190818152602001828054612d9f9061b060565b8015612dec5780601f10612dc157610100808354040283529160200191612dec565b820191906000526020600020905b815481529060010190602001808311612dcf57829003601f168201915b50505050508152505081526020019060010190612d20565b505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081525050815260200182815250975050505050505050611de560008055565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290529054600103612eec5760405162461bcd60e51b815260040161124e9061b35e565b506000818152600960209081526040918290208251610100808201855282546001600160a01b0390811683526001840154169382019390935260028201549381019390935260038101546060840152600481015460808401526005015460ff808216151560a08501529181048216151560c084015262010000900416151560e08201525b919050565b6047546001600160a01b03163314612f9f5760405162461bcd60e51b815260040161124e9061b4c7565b612fa7617db7565b612faf617f93565b505042603355504360328190556000908152603060209081526040808320839055602f548151603d805460e09581028301860190945260c0820184815261157596939592948594919390919085015b828210156130e2576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916130519061b060565b80601f016020809104026020016040519081016040528092919081815260200182805461307d9061b060565b80156130ca5780601f1061309f576101008083540402835291602001916130ca565b820191906000526020600020905b8154815290600101906020018083116130ad57829003601f168201915b50505050508152505081526020019060010190612ffe565b505050908252506000602080830191909152436040808401919091526026546060808501919091526080808501899052825190810183526011548152601a5493810193909352601b5491830191909152602b549082015260a090910152618289565b600061314e616637565b6114d9338484616c67565b6025546001600160a01b031633146131835760405162461bcd60e51b815260040161124e9061b225565b602554604080516080808252600f908201526e1bdc195c985d1bdc9058d8dbdd5b9d608a1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1602580546001600160a01b0319166001600160a01b03838116918217909255601d5460405163b3ab15fb60e01b815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b15801561324157600080fd5b505af1158015613255573d6000803e3d6000fd5b5050601e5460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b1580156132a057600080fd5b505af11580156132b4573d6000803e3d6000fd5b5050601f5460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b1580156132ff57600080fd5b505af1158015613313573d6000803e3d6000fd5b505060205460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801561335e57600080fd5b505af1158015613372573d6000803e3d6000fd5b505060215460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b1580156133bd57600080fd5b505af11580156133d1573d6000803e3d6000fd5b505060235460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801561341c57600080fd5b505af1158015613430573d6000803e3d6000fd5b50506024805460405163b3ab15fb60e01b81526001600160a01b038681166004830152909116935063b3ab15fb925001612497565b6025546001600160a01b0316331461348f5760405162461bcd60e51b815260040161124e9061b225565b60008160600151116134fe5760405162461bcd60e51b815260206004820152603260248201527f676173206c696d697420626f756e642064697669736f72206e6565647320746f60448201527102062652067726561746572207468616e20360741b606482015260840161124e565b60008160200151116135715760405162461bcd60e51b815260206004820152603660248201527f6261736520666565206368616e67652064656e6f6d696e61746f72206e65656460448201527507320746f2062652067726561746572207468616e20360541b606482015260840161124e565b60008160400151116135de5760405162461bcd60e51b815260206004820152603060248201527f656c6173746963697479206d756c7469706c696572206e6565647320746f206260448201526f0652067726561746572207468616e20360841b606482015260840161124e565b604080516080810182526011548152601a546020820152601b5481830152602b54606082015290517fa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc9161363391849061b6cd565b60405180910390a180516035556020810151603655604081015160375560600151603855565b6025546001600160a01b031633146136835760405162461bcd60e51b815260040161124e9061b225565b60245460408051608080825260129082015271185d58dd1a5bdb99595c90dbdb9d1c9858dd60721b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1602480546001600160a01b0319166001600160a01b0383811691909117909155602054161561157557602054604051623b79f960e21b81526001600160a01b0383811660048301529091169062ede7e490602401612497565b60008054600114158061375c5750601c546001600160a01b031633145b8061377157506023546001600160a01b031633145b61378d5760405162461bcd60e51b815260040161124e9061b35e565b61379682616302565b610240015192915050565b6025546001600160a01b031633146137cb5760405162461bcd60e51b815260040161124e9061b225565b60235460408051631728602760e21b815290516000926001600160a01b031691635ca1809c9160048083019260209291908290030181865afa158015613815573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613839919061b538565b602354604080516362a48bb760e11b815290519293506000926001600160a01b039092169163c549176e916004808201926020929091908290030181865afa158015613889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ad919061b538565b9050600083116138ff5760405162461bcd60e51b815260206004820152601860248201527f65706f636820706572696f642063616e6e6f7420626520300000000000000000604482015260640161124e565b600161390b838361b04d565b613915919061b395565b83116139975760405162461bcd60e51b8152602060048201526044602482018190527f65706f636820706572696f64206e6565647320746f2062652067726561746572908201527f207468616e206f6d697373696f6e44656c74612b6c6f6f6b6261636b57696e646064820152636f772d3160e01b608482015260a40161124e565b601d5460408051635bc6f62960e11b815290516000926001600160a01b03169163b78dec529160048083019260209291908290030181865afa1580156139e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a05919061b538565b905083613a1382600261b719565b1115613a5d5760405162461bcd60e51b8152602060048201526019602482015278195c1bd8da081c195c9a5bd9081a5cc81d1bdbc81cdb585b1b603a1b604482015260640161124e565b601d54604080516357eba75960e01b815290516000926001600160a01b0316916357eba7599160048083019260209291908290030181865afa158015613aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acb919061b538565b905084613ad982600261b719565b1115613b235760405162461bcd60e51b8152602060048201526019602482015278195c1bd8da081c195c9a5bd9081a5cc81d1bdbc81cdb585b1b603a1b604482015260640161124e565b6031859055602f546000908152603c6020908152604091829020600301548251888152918201819052917f2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7910160405180910390a1505050505050565b60008054600103613ba35760405162461bcd60e51b815260040161124e9061b35e565b506001600160a01b031660009081526041602052604090205490565b613bf16040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b611c9e8383618377565b6025546001600160a01b03163314613c255760405162461bcd60e51b815260040161124e9061b225565b601054604080516080808252600b908201526a747265617375727946656560a81b60a08201526020810192909252810182905243606082015260008051602061c1878339815191529060c00160405180910390a1601055565b613c86616637565b6001600160a01b038083166000818152604260205260409020600181015490921614613cc45760405162461bcd60e51b815260040161124e9061b730565b80546001600160a01b03163314613ced5760405162461bcd60e51b815260040161124e9061b767565b613cf683618477565b15613d4e5760405162461bcd60e51b815260206004820152602260248201527f76616c696461746f72206d757374206e6f7420626520696e20636f6d6d697474604482015261656560f01b606482015260840161124e565b600080613d5a846184d6565b925090508115613d9a5760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640161124e565b60018301546001600160a01b03828116911614613e095760405162461bcd60e51b815260206004820152602760248201527f76616c696461746f72206e6f646520616464726573732063616e2774206265206044820152661d5c19185d195960ca1b606482015260840161124e565b60018301546040517f0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b91613e4f916001600160a01b03909116906003870190889061b7b6565b60405180910390a160038301613e65858261b0e1565b5050505061214060008055565b613e7a616637565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b0316815260200186815260200160106000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001438152602001600081526020016000815260200184815260200160006005811115613f3f57613f3f61a309565b8152602001613f506012600a61b48f565b90529050613f5e8183618518565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c92613f9d92339289918b9161b7ec565b60405180910390a15061200060008055565b613fb7616637565b6001600160a01b0380831660008181526042602052604090206001015490911614613ff45760405162461bcd60e51b815260040161124e9061b1a2565b6001600160a01b0382811660009081526042602052604090205416331461402d5760405162461bcd60e51b815260040161124e9061b1d9565b6140396004600a61b48f565b8111156140885760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640161124e565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600f80546000908152600d909352958220855181546001600160a01b0319169516949094178455915160018085019190915591516002909301929092558354929390929091906140ff90849061b04d565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a25061214060008055565b6025546001600160a01b031633146141765760405162461bcd60e51b815260040161124e9061b225565b6141886005805460ff19166001179055565b565b6025546001600160a01b031633146141b45760405162461bcd60e51b815260040161124e9061b225565b600081116142045760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640161124e565b602854604080516080808252600d908201526c636f6d6d697474656553697a6560981b60a08201526020810192909252810182905243606082015260008051602061c1878339815191529060c00160405180910390a1602855565b6025546001600160a01b031633146142895760405162461bcd60e51b815260040161124e9061b225565b6029546040805160808082526013908201527236b0bc29b1b432b23ab632a23ab930ba34b7b760691b60a08201526020810192909252810182905243606082015260008051602061c1878339815191529060c00160405180910390a1602955565b6000805460010361430d5760405162461bcd60e51b815260040161124e9061b35e565b60008281526009602052604090206005015460ff1661436e5760405162461bcd60e51b815260206004820152601960248201527f756e626f6e64696e67206e6f74206170706c6965642079657400000000000000604482015260640161124e565b5060009081526009602052604090206003015490565b604080516080810182526000808252602082018190529181018290526060810182905290546001036143c85760405162461bcd60e51b815260040161124e9061b35e565b50600090815260066020908152604091829020825160808101845281546001600160a01b03908116825260018301541692810192909252600281015492820192909252600390910154606082015290565b601c546001600160a01b031633148061443c57506023546001600160a01b031633145b806144515750601d546001600160a01b031633145b61446d5760405162461bcd60e51b815260040161124e9061adcf565b6049546000906001600160a01b0316630273a3ee61448a85616302565b846040518363ffffffff1660e01b81526004016144a892919061b83a565b6000604051808303816000875af11580156144c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144ef919081019061b32a565b6001600160a01b03808516600090815260426020908152604091829020845181549085166001600160a01b0319918216178255918501516001820180549186169184169190911790559184015160028301805491909416911617909155606082015191925082916003820190614565908261b0e1565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190614622908261b0e1565b5061024082015160128201805460ff191660018360058111156146475761464761a309565b02179055506102608201518160130155905050505050565b6025546001600160a01b031633146146895760405162461bcd60e51b815260040161124e9061b225565b6146956004600a61b48f565b8111156146b45760405162461bcd60e51b815260040161124e9061b49b565b601554604080516080808252601490820152731dda5d1a1a1bdb191a5b99d51a1c995cda1bdb1960621b60a08201526020810192909252810182905243606082015260008051602061c1878339815191529060c00160405180910390a1601555565b600080546001036147395760405162461bcd60e51b815260040161124e9061b35e565b5060455490565b60006032546001614751919061b04d565b8211156147af5760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74206765742065706f636820696420666f7220612066757475726560448201526520626c6f636b60d01b606482015260840161124e565b60325482116147cb575060009081526030602052604090205490565b5050602f5490565b6025546001600160a01b031633146147fd5760405162461bcd60e51b815260040161124e9061b225565b6001600160a01b03821660009081526041602052604090205481111561485e5760405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b604482015260640161124e565b6001600160a01b0382166000908152604160205260408120805483929061488690849061b395565b92505081905550806044600082825461489f919061b395565b9250508190555080604560008282546148b8919061b395565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020015b60405180910390a25050565b600061490a616637565b61491683833333616d69565b90506114be60008055565b600061492b616637565b61491683833333618950565b6060603e805480602002602001604051908101604052809291908181526020016000905b82821015614a0757838290600052602060002001805461497a9061b060565b80601f01602080910402602001604051908101604052809291908181526020018280546149a69061b060565b80156149f35780601f106149c8576101008083540402835291602001916149f3565b820191906000526020600020905b8154815290600101906020018083116149d657829003601f168201915b50505050508152602001906001019061495b565b50505050905090565b6000614a1a616637565b614a25338484616894565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060016114be60008055565b6000614a7b616637565b614a8783838633618950565b9050611c9e60008055565b614a9a619e95565b602f546000908152603c602090815260408083208151815460e09481028201850190935260c08101838152909491938593919285929185015b82821015614bb7576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191614b269061b060565b80601f0160208091040260200160405190810160405280929190818152602001828054614b529061b060565b8015614b9f5780601f10614b7457610100808354040283529160200191614b9f565b820191906000526020600020905b815481529060010190602001808311614b8257829003601f168201915b50505050508152505081526020019060010190614ad3565b505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081525050905090565b6025546001600160a01b03163314614c525760405162461bcd60e51b815260040161124e9061b225565b6001600160a01b038116614cbc5760405162461bcd60e51b815260206004820152602b60248201527f736c617368657220636f6e74726163742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b606482015260840161124e565b6049546040805160808082526007908201526639b630b9b432b960c91b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1604980546001600160a01b0319166001600160a01b0392909216919091179055565b6060603d805480602002602001604051908101604052809291908181526020016000905b82821015614a07576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191614dad9061b060565b80601f0160208091040260200160405190810160405280929190818152602001828054614dd99061b060565b8015614e265780601f10614dfb57610100808354040283529160200191614e26565b820191906000526020600020905b815481529060010190602001808311614e0957829003601f168201915b50505050508152505081526020019060010190614d5a565b614e46619e95565b600054600103614e685760405162461bcd60e51b815260040161124e9061b35e565b603254614e7690600161b04d565b821115614ed15760405162461bcd60e51b815260206004820152602360248201527f63616e6e6f74206765742065706f636820666f7220612066757475726520626c6044820152626f636b60e81b606482015260840161124e565b602f546032548311614eee57506000828152603060205260409020545b6000818152603c602090815260408083208151815460e09481028201850190935260c08101838152909491938593919285929185015b82821015615008576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191614f779061b060565b80601f0160208091040260200160405190810160405280929190818152602001828054614fa39061b060565b8015614ff05780601f10614fc557610100808354040283529160200191614ff0565b820191906000526020600020905b815481529060010190602001808311614fd357829003601f168201915b50505050508152505081526020019060010190614f24565b505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081525050915050919050565b6025546001600160a01b031633146150a65760405162461bcd60e51b815260040161124e9061b225565b6121408282618e46565b6025546001600160a01b031633146150da5760405162461bcd60e51b815260040161124e9061b225565b601f54604080516080808252601590820152741cdd5c1c1b1e50dbdb9d1c9bdb10dbdb9d1c9858dd605a1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1601f80546001600160a01b0319166001600160a01b038381169190911790915560205416156115755760205460405163052e5a0560e41b81526001600160a01b038381166004830152909116906352e5a05090602401612497565b6151a3616637565b6001600160a01b03808216600081815260426020526040902060010154909116146151e05760405162461bcd60e51b815260040161124e9061b1a2565b6001600160a01b0380821660009081526042602052604090208054909116331461521c5760405162461bcd60e51b815260040161124e9061b767565b6000601282015460ff1660058111156152375761523761a309565b036152845760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640161124e565b6002601282015460ff16600581111561529f5761529f61a309565b1480156152af5750438160100154115b156152fc5760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640161124e565b6004601282015460ff1660058111156153175761531761a309565b1480156153275750438160100154115b156153835760405162461bcd60e51b815260206004820152602660248201527f76616c696461746f72207374696c6c20696e206a61696c20666f7220696e616360448201526574697669747960d01b606482015260840161124e565b6003601282015460ff16600581111561539e5761539e61a309565b141580156153c557506005601282015460ff1660058111156153c2576153c261a309565b14155b6154115760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640161124e565b60128101805460ff191690558054602f546000908152603c60209081526040918290206003015491519182526001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5910160405180910390a35061157560008055565b6025546001600160a01b031633146154aa5760405162461bcd60e51b815260040161124e9061b225565b602354604080516080808252601e908201527f6f6d697373696f6e4163636f756e746162696c697479436f6e7472616374000060a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1602380546001600160a01b0319166001600160a01b0392909216919091179055565b6060806003600481805461554d9061b060565b80601f01602080910402602001604051908101604052809291908181526020018280546155799061b060565b80156155c65780601f1061559b576101008083540402835291602001916155c6565b820191906000526020600020905b8154815290600101906020018083116155a957829003601f168201915b505050505091508080546155d99061b060565b80601f01602080910402602001604051908101604052809291908181526020018280546156059061b060565b80156156525780601f1061562757610100808354040283529160200191615652565b820191906000526020600020905b81548152906001019060200180831161563557829003601f168201915b50505050509050915091509091565b606061566f60005460011490565b1561568c5760405162461bcd60e51b815260040161124e9061b35e565b602e8054806020026020016040519081016040528092919081815260200182805480156156e257602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116156c4575b5050505050905090565b6156f4619eee565b506040805161020081018252601054608080830191825260115460a08085019190915260125460c08086019190915260135460e08087019190915260145461010080880191909152601554610120808901919091526016546101408901526017546101608901526018546001600160a01b039081166101808a015260195481166101a08a0152601a546101c08a0152601b546101e08a015296885288519081018952601c5487168152601d548716602082810191909152601e548816828b0152601f5488166060808401919091528154891683890152602154891683880152602254891683870152602354891683860152602454891683850152818a019290925289519283018a52602554909716825260265496820196909652602754818901526028548187015260295494810194909452602a5492840192909252602b5490830152602c549082015292820192909252602d549181019190915290565b6025546001600160a01b0316331461587c5760405162461bcd60e51b815260040161124e9061b225565b602154604080516080808252601690820152751d5c19dc98591953585b9859d95c90dbdb9d1c9858dd60521b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1602180546001600160a01b0319166001600160a01b0392909216919091179055565b6025546001600160a01b0316331461592f5760405162461bcd60e51b815260040161124e9061b225565b614188618e5c565b6025546001600160a01b031633146159615760405162461bcd60e51b815260040161124e9061b225565b60208054604080516080808252601590820152741cdd18589a5b1a5e985d1a5bdb90dbdb9d1c9858dd605a1b60a08201526001600160a01b0392831693810193909352908316828201524360608301525160008051602061c1678339815191529181900360c00190a1602080546001600160a01b0319166001600160a01b03838116919091179091556024541615615a525760248054604051634f50589560e01b81526001600160a01b03848116600483015290911691634f5058959101600060405180830381600087803b158015615a3957600080fd5b505af1158015615a4d573d6000803e3d6000fd5b505050505b601f546001600160a01b03161561157557601f54604051636dbfa90d60e11b81526001600160a01b0383811660048301529091169063db7f521a90602401612497565b615aa16004600a61b48f565b81565b6025546001600160a01b03163314615ace5760405162461bcd60e51b815260040161124e9061b225565b601e54604080516080808252600b908201526a1858dd50dbdb9d1c9858dd60aa1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1601e80546001600160a01b0319166001600160a01b0383811691909117909155602054161561157557602054604051634b8ef94360e01b81526001600160a01b03838116600483015290911690634b8ef94390602401612497565b6025546001600160a01b03163314615baf5760405162461bcd60e51b815260040161124e9061b225565b601954604080516080808252600f908201526e1d1c99585cdd5c9e5058d8dbdd5b9d608a1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1601980546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600103615c545760405162461bcd60e51b815260040161124e9061b35e565b506001600160a01b039182166000908152603f6020908152604080832093909416825291909152205490565b60008054600103615ca35760405162461bcd60e51b815260040161124e9061b35e565b506001600160a01b039182166000908152604060208181528183209390941682529190925290205490565b60008054600103615cf15760405162461bcd60e51b815260040161124e9061b35e565b50600090815260096020526040902060050154610100900460ff1690565b6025546001600160a01b03163314615d395760405162461bcd60e51b815260040161124e9061b225565b615d456004600a61b48f565b811115615d645760405162461bcd60e51b815260040161124e9061b49b565b6017546040805160808082526010908201526f6f7261636c655265776172645261746560801b60a08201526020810192909252810182905243606082015260008051602061c1878339815191529060c00160405180910390a1601755565b6025546001600160a01b03163314615dec5760405162461bcd60e51b815260040161124e9061b225565b60008111615e485760405162461bcd60e51b8152602060048201526024808201527f676173206c696d6974206e6565647320746f20626520677265617465722074686044820152630616e20360e41b606482015260840161124e565b6039819055602a546040805160808082526008908201526719d85cd31a5b5a5d60c21b60a08201526020810192909252810182905243606082015260008051602061c1878339815191529060c00160405180910390a150565b6025546001600160a01b03163314615ecb5760405162461bcd60e51b815260040161124e9061b225565b602254604080516080808252601b908201527f696e666c6174696f6e436f6e74726f6c6c6572436f6e7472616374000000000060a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1678339815191529181900360c00190a1602280546001600160a01b0319166001600160a01b0392909216919091179055565b615f6361a011565b601c54604080516330fe427560e21b815290516000926001600160a01b03169163c3f909d4916004808301926101209291908290030181865afa158015615fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615fd2919061b8b4565b6040805160c0810182526026548152602754602080830191909152602a5482840152602c54606080840191909152835190810184528385015181528185015181830152601c548451631b7a307160e31b81528551969750939560808701959294928501936001600160a01b039092169263dbd183889260048083019391928290030181865afa158015616069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061608d919061b538565b90528152604080516080810182526011548152601a54602082810191909152601b5492820192909252602b54606082015291015292915050565b602f546000908152603c60205260409020600301544310156161205760405162461bcd60e51b8152602060048201526012602482015271195c1bd8da081a5cc81b9bdd08195b99195960721b604482015260640161124e565b601c5483906001600160a01b031633148061614557506023546001600160a01b031633145b8061616c57506001600160a01b038181166000908152604260205260409020600c01541633145b806161815750601d546001600160a01b031633145b6161d85760405162461bcd60e51b815260206004820152602260248201527f63616c6c6572206973206e6f742061207265776172642064697374726962757460448201526137b960f11b606482015260840161124e565b6161e2828461b04d565b3360009081526041602052604090205410156162355760405162461bcd60e51b81526020600482015260126024820152716e6f7420656e6f7567682062616c616e636560701b604482015260640161124e565b6001600160a01b03841661628b5760405162461bcd60e51b815260206004820181905260248201527f76616c696461746f7220616464726573732063616e6e6f74206265207a65726f604482015260640161124e565b6001600160a01b03808516600081815260426020526040902060010154909116146162c85760405162461bcd60e51b815260040161124e9061b730565b6162d2828461b04d565b33600090815260416020526040812080549091906162f190849061b395565b909155506120009050848484618e80565b61630a619d96565b6001600160a01b0382166163605760405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f74207265717565737420656d7074792076616c696461746f720000604482015260640161124e565b6001600160a01b038083166000818152604260205260409020600101549091161461639d5760405162461bcd60e51b815260040161124e9061b730565b6001600160a01b0380831660009081526042602090815260409182902082516102808101845281548516815260018201548516928101929092526002810154909316918101919091526003820180549192916060840191906163fe9061b060565b80601f016020809104026020016040519081016040528092919081815260200182805461642a9061b060565b80156164775780601f1061644c57610100808354040283529160200191616477565b820191906000526020600020905b81548152906001019060200180831161645a57829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a08201526011820180546101c0909201916165269061b060565b80601f01602080910402602001604051908101604052809291908181526020018280546165529061b060565b801561659f5780601f106165745761010080835404028352916020019161659f565b820191906000526020600020905b81548152906001019060200180831161658257829003601f168201915b5050509183525050601282015460209091019060ff1660058111156165c6576165c661a309565b60058111156165d7576165d761a309565b81526020016013820154815250509050919050565b600d8101541561157557600d8101546166076012600a61b48f565b8260080154836005015461661b919061b395565b616625919061b719565b61662f919061b94f565b601382015550565b6000541561667d5760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b604482015260640161124e565b6001600055565b6001600160a01b0383166166e65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161124e565b6001600160a01b0382166167475760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161124e565b6001600160a01b038381166000818152603f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038116600090815260426020526040812090601282015460ff1660058111156167db576167db61a309565b146168285760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640161124e565b60128101805460ff191660011790558054602f546000908152603c60209081526040918290206003015491519182526001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c910160405180910390a35050565b6001600160a01b0383166000908152604160205260409020548111156168f55760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b604482015260640161124e565b6001600160a01b0383166000908152604160205260408120805483929061691d90849061b395565b90915550506001600160a01b0382166000908152604160205260408120805483929061694a90849061b04d565b9091555050505050565b6001600160a01b0382166000908152604160205260408120805483929061697c90849061b04d565b925050819055508060446000828254616995919061b04d565b9250508190555080604560008282546169ae919061b04d565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020016148f4565b6001600160a01b038416616a445760405162461bcd60e51b815260206004820152601c60248201527f7661756c7420616464726573732063616e6e6f74206265207a65726f00000000604482015260640161124e565b60008111616a945760405162461bcd60e51b815260206004820181905260248201527f7363686564756c65206475726174696f6e2063616e6e6f74206265207a65726f604482015260640161124e565b42821015616af25760405162461bcd60e51b815260206004820152602560248201527f7363686564756c652063616e6e6f74207374617274206265666f72652063726560448201526430ba34b7b760d91b606482015260840161124e565b60008311616b425760405162461bcd60e51b815260206004820152601960248201527f616d6f756e742073686f756c6420626520706f73697469766500000000000000604482015260640161124e565b6001600160a01b03841660009081526001602052604081208054909103616baf57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0387161790555b6040805160a08101825285815260006020808301828152838501888152606080860189815260808701868152895460018082018c558b8952978790209851600590910290980197885593519587019590955590516002860155925160038501555160049093019290925582518781529182018690529181018490526001600160a01b038716917fe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd910160405180910390a25050505050565b6001600160a01b038316616cbd5760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f2061646472657373000000604482015260640161124e565b6001600160a01b038216616d135760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f20616464726573730000000000604482015260640161124e565b6001600160a01b0383811660008181526040602081815281832094871680845294815291819020859055518481527f78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea910161679c565b6001600160a01b0384166000818152604260205260408120909115801590616da0575060018101546001600160a01b038781169116145b616dbc5760405162461bcd60e51b815260040161124e9061b730565b6000601282015460ff166005811115616dd757616dd761a309565b14616e245760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640161124e565b60008511616e805760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840161124e565b6001600160a01b038416600090815260416020526040902054851115616ee85760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640161124e565b6001600160a01b03841660009081526041602052604081208054879290616f1090849061b395565b9091555050604080516080810182526001600160a01b0386811680835289821660208085018281528587018c8152436060808901918252600880546000908152600687528b90208a518154908b166001600160a01b03199182161782559551600182018054918c16919097161790955592516002850155905160039093019290925588549054885191871686148083529382018e90529781019790975294959094938916937fcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2910160405180910390a460088054906000616ff08361b963565b91905055506001600854617004919061b395565b98975050505050505050565b600254600090815b8181101561719457600060016000600284815481106170395761703961b97c565b60009182526020808320909101546001600160a01b0316835282019290925260400181208054909250905b818110156171895760008382815481106170805761708061b97c565b9060005260206000209060050201905080600401548810156170f55760405162461bcd60e51b815260206004820152602860248201527f7363686564756c6520616c726561647920756e6c6f636b656420666f7220676960448201526776656e2074696d6560c01b606482015260840161124e565b806002015488116171065750617181565b600481018890556003810154600282015460009190617125908b61b395565b106171325750805461715f565b600382015482546002840154617148908c61b395565b617152919061b719565b61715c919061b94f565b90505b600182015461716e908261b395565b617178908961b04d565b60019092015595505b600101617064565b505050600101617018565b5050919050565b811580156171a7575080155b156171b0575050565b601054600090670de0b6b3a7640000906171cb90859061b719565b6171d5919061b94f565b9050801561724d576019546040516000916001600160a01b03169083908381818185875af1925050503d806000811461722a576040519150601f19603f3d011682016040523d82523d6000602084013e61722f565b606091505b509091505080151560010361724b57617248828561b395565b93505b505b6000808061725d6004600a61b48f565b60175461726a908861b719565b617274919061b94f565b905060006172846004600a61b48f565b601754617291908861b719565b61729b919061b94f565b602354604080516353b1821b60e01b815290519293506000926001600160a01b03909216916353b1821b916004808201926020929091908290030181865afa1580156172eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061730f919061b538565b111561739557603b546173246004600a61b48f565b61732e919061b719565b603d5460165461733e908a61b719565b617348919061b719565b617352919061b94f565b603b549094506173646004600a61b48f565b61736e919061b719565b603d5460165461737e908961b719565b617388919061b719565b617392919061b94f565b92505b61739f848361b04d565b6173a9908861b395565b96506173b5838261b04d565b6173bf908761b395565b60235460408051637f5e2f1160e01b815290519298506000926001600160a01b0390921691637f5e2f11916004808201926020929091908290030181865afa15801561740f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617433919061b538565b603d549091506000906001600160401b038111156174535761745361a753565b60405190808252806020026020018201604052801561747c578160200160208202803683370190505b5090506000806000805b603d548110156179d357600060426000603d84815481106174a9576174a961b97c565b906000526020600020906003020160000160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020905060006034548f603d85815481106175095761750961b97c565b906000526020600020906003020160010154617525919061b719565b61752f919061b94f565b905060006034548f603d868154811061754a5761754a61b97c565b906000526020600020906003020160010154617566919061b719565b617570919061b94f565b905060008211806175815750600081115b156179c7576002601284015460ff1660058111156175a1576175a161a309565b14806175c557506003601284015460ff1660058111156175c3576175c361a309565b145b156175fd57838888815181106175dd576175dd61b97c565b6020908102919091010152866175f28161b963565b9750505050506179cb565b6004601284015460ff1660058111156176185761761861a309565b148061763c57506005601284015460ff16600581111561763a5761763a61a309565b145b156176615761764b828761b04d565b9550617657818661b04d565b94505050506179cb565b6023546001840154604051634d08f07360e11b81526001600160a01b0391821660048201526000929190911690639a11e0e690602401602060405180830381865afa1580156176b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906176d8919061b538565b60155490915081111561774a5760008a6176f2838661b719565b6176fc919061b94f565b905060008b61770b848661b719565b617715919061b94f565b9050617721828a61b04d565b985061772d818961b04d565b9750617739828661b395565b9450617745818561b395565b935050505b600084600801548560050154617760919061b395565b9050600085600501548583617775919061b719565b61777f919061b94f565b9050600061778d828761b395565b9050801561784957865460405160009182916001600160a01b03909116906108fc90859084818181858888f193505050503d80600081146177ea576040519150601f19603f3d011682016040523d82523d6000602084013e6177ef565b606091505b5090925090508115156000036178465788546040517f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d3529161783d916001600160a01b0390911690849061b992565b60405180910390a15b50505b600587015460009061785b878661b719565b617865919061b94f565b90506000617873828861b395565b3060009081526041602052604081208054929350839290919061789790849061b395565b909155505060018901546178b6906001600160a01b0316826000618e80565b60008411806178c55750600082115b1561796757600c8901546178e49030906001600160a01b031684616894565b600c8901546001600160a01b03166000818152604160205260409081902054905163a0ce552d60e01b8152600481019190915263a0ce552d90869060240160206040518083038185885af1158015617940573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190617965919061b538565b505b60018901546040805185815260208101879052908101839052606081018490526001600160a01b03909116907f5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d59060800160405180910390a25050505050505b5050505b600101617486565b508215617b4b5760005b83811015617b495760008582815181106179f9576179f961b97c565b6020026020010151905060006034548f603d8481548110617a1c57617a1c61b97c565b906000526020600020906003020160010154617a38919061b719565b617a42919061b94f565b905060006034548f603d8581548110617a5d57617a5d61b97c565b906000526020600020906003020160010154617a79919061b719565b617a83919061b94f565b601c54909150617a9e9030906001600160a01b031683616894565b601c54603d80546001600160a01b039092169163a8031a1d91859187908110617ac957617ac961b97c565b600091825260209091206003909102015460405160e084901b6001600160e01b03191681526001600160a01b039091166004820152602481018590526044016000604051808303818588803b158015617b2157600080fd5b505af1158015617b35573d6000803e3d6000fd5b5050600190960195506179dd945050505050565b505b602354604080516353b1821b60e01b815290516000926001600160a01b0316916353b1821b9160048083019260209291908290030181865afa158015617b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617bb9919061b538565b1115617c4b576023546001600160a01b0316617bd630828b616894565b6023546001600160a01b038281166000908152604160205260409081902054905163eeb9223360e01b8152600481019190915291169063eeb92233908c906024016000604051808303818588803b158015617c3057600080fd5b505af1158015617c44573d6000803e3d6000fd5b5050505050505b601d54617c639030906001600160a01b031688616894565b601d546001600160a01b031660008181526041602052604090819020549051630b32e9c760e31b815260048101919091526359974e389089906024016000604051808303818588803b158015617cb857600080fd5b505af1158015617ccc573d6000803e3d6000fd5b50505050506000821115617d8b5760185460405160009182916001600160a01b039091169085908381818185875af1925050503d8060008114617d2b576040519150601f19603f3d011682016040523d82523d6000602084013e617d30565b606091505b509092509050811515600003617d88576018546040517f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d35291617d7f916001600160a01b0390911690849061b992565b60405180910390a15b50505b8015617da957601854617da99030906001600160a01b031683616894565b505050505050505050505050565b6007545b600854811015617dde57617dd981617dd28161b963565b9250618ef5565b617dbb565b50600854600755600b54600a5403617df257565b600c545b600b54811015617e1957617e1481617e0d8161b963565b9250619120565b617df6565b50600b54600c55600a54805b600b54811015617e7c576013546000828152600960205260409020600401544391617e4f9161b04d565b11617e6f57617e5d816193f3565b617e6860018361b04d565b9150617e74565b617e7c565b600101617e25565b50600a55565b600f54600e54101561418857600e546000908152600d6020526040902060135460018201544391617eb29161b04d565b1115617ebb5750565b80546001600160a01b039081166000908152604260205260409081902060028401546004808301829055600c83015493516319fac8fd60e01b8152929493909316926319fac8fd92617f1292910190815260200190565b600060405180830381600087803b158015617f2c57600080fd5b505af1158015617f40573d6000803e3d6000fd5b5050600e80546000908152600d6020526040812080546001600160a01b031916815560018082018390556002909101829055825490945091925090617f8690849061b04d565b90915550617e8292505050565b60608060606000602e8054905011617fed5760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640161124e565b617ff561a08c565b6028546080820152602e815260426020820152603d60408201526034606082015261801f8161953b565b602854603b55618031603e600061a0aa565b603d54806180765760405162461bcd60e51b8152602060048201526012602482015271636f6d6d697474656520697320656d70747960701b604482015260640161124e565b6000816001600160401b038111156180905761809061a753565b6040519080825280602002602001820160405280156180b9578160200160208202803683370190505b5090506000826001600160401b038111156180d6576180d661a753565b6040519080825280602002602001820160405280156180ff578160200160208202803683370190505b5090506000836001600160401b0381111561811c5761811c61a753565b604051908082528060200260200182016040528015618145578160200160208202803683370190505b50905060005b8481101561827a57600060426000603d848154811061816c5761816c61b97c565b60009182526020808320600392830201546001600160a01b0316845283019390935260409091018120603e8054600181018255925292507f8d800d6614d35eed73733ee453164a3b48076eb3138f466adeeb9dec7bb31f7001906181d29083018261b9c1565b50600281015485516001600160a01b03909116908690849081106181f8576181f861b97c565b6001600160a01b0392831660209182029290920101526001820154855191169085908490811061822a5761822a61b97c565b6001600160a01b039283166020918202929092010152815484519116908490849081106182595761825961b97c565b6001600160a01b03909216602092830291909101909101525060010161814b565b50919790965090945092505050565b6000828152603c6020908152604080832084830151600182015584820151600282015560608086015160038301556080860151600483015560a0860151805160058401559384015160068301559183015160078201559101516008820155905b82515181101561200057825180518391908390811061830a5761830a61b97c565b602090810291909101810151825460018082018555600094855293839020825160039092020180546001600160a01b0319166001600160a01b0390921691909117815591810151928201929092556040820151600282019061836c908261b0e1565b5050506001016182e9565b6183a96040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0383166000908152600160205260409020805483106184115760405162461bcd60e51b815260206004820152601760248201527f7363686564756c6520646f6573206e6f74206578697374000000000000000000604482015260640161124e565b8083815481106184235761842361b97c565b90600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505091505092915050565b6000805b603d548110156184cd57603d81815481106184985761849861b97c565b60009182526020909120600390910201546001600160a01b03908116908416036184c55750600192915050565b60010161847b565b50600092915050565b6000806184e161a0c8565b60008060ff9050604083875160208901845afa6184fd57600080fd5b50508051602090910151600160601b90910494909350915050565b60e28151146185605760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640161124e565b603082610220015151146185b65760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640161124e565b6185bf82619555565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a000000000000602080830191909152845192519192600092618621920160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052905060008261863f8351619683565b836040516020016186529392919061ba95565b60408051601f19818403018152828252805160209182012060028085526060850184529094506000939290918301908036833701905050905060008080806186a689826186a16041600261b719565b61978b565b905060006186c18a6186ba6041600261b719565b606061978b565b905060205b8251811015618786576186d98382619898565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa158015618734573d6000803e3d6000fd5b5050604051601f19015190508761874c60418461b94f565b8151811061875c5761875c61b97c565b6001600160a01b039092166020928302919091019091015261877f60418261b04d565b90506186c6565b508a602001516001600160a01b0316866000815181106187a8576187a861b97c565b60200260200101516001600160a01b0316146188185760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f66604482015268081c1c9bdd9a59195960ba1b606482015260840161124e565b8a604001516001600160a01b0316866001815181106188395761883961b97c565b60200260200101516001600160a01b0316146188ab5760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201526a1bd9881c1c9bdd9a59195960aa1b606482015260840161124e565b60016188c18c6102200151838e600001516198cc565b1461892d5760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e65727368697020604482015275383937b7b3103337b9103932b3b4b9ba3930ba34b7b760511b606482015260840161124e565b61893a8b60400151619934565b6189438b6199ae565b5050505050505050505050565b6001600160a01b0384166000818152604260205260408120909115801590618987575060018101546001600160a01b038781169116145b6189a35760405162461bcd60e51b815260040161124e9061b730565b600085116189eb5760405162461bcd60e51b81526020600482015260156024820152740756e626f6e64696e6720616d6f756e74206973203605c1b604482015260640161124e565b80546001600160a01b0385811691161480618bd457600c820154604051631092ab9160e31b81526001600160a01b03878116600483015260009216906384955c8890602401602060405180830381865afa158015618a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190618a71919061b538565b905086811015618ad75760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201526a746f6e2062616c616e636560a81b606482015260840161124e565b856001600160a01b0316856001600160a01b031603618b5d57600c83015460405163282d3fdf60e01b81526001600160a01b038881166004830152602482018a90529091169063282d3fdf90604401600060405180830381600087803b158015618b4057600080fd5b505af1158015618b54573d6000803e3d6000fd5b50505050618bce565b600c83015460405163708e91e560e01b81526001600160a01b0388811660048301528781166024830152604482018a90529091169063708e91e590606401600060405180830381600087803b158015618bb557600080fd5b505af1158015618bc9573d6000803e3d6000fd5b505050505b50618ccc565b846001600160a01b0316846001600160a01b031614618c3f5760405162461bcd60e51b815260206004820152602160248201527f63616e6e6f7420756e626f6e6420504153207573696e6720616c6c6f77616e636044820152606560f81b606482015260840161124e565b8582600b01548360080154618c54919061b395565b1015618cb25760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201526662616c616e636560c81b606482015260840161124e565b8582600b016000828254618cc6919061b04d565b90915550505b836001600160a01b0316856001600160a01b0316886001600160a01b03167f58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c848a600b54604051618d329392919092151583526020830191909152604082015260600190565b60405180910390a46040805161010080820183526001600160a01b0388811683528a811660208085019182528486018c8152600060608701818152436080890190815260a0890183815260c08a018481528c151560e08c01908152600b8054875260099098529b85209a518b546001600160a01b0319908116918b16919091178c55975160018c01805490991699169890981790965592516002890155516003880155905160048701559151600590950180549351965161ffff1990941695151561ff001916959095179515159093029490941762ff00001916620100009115159190910217909155805491618e278361b963565b91905055506001600b54618e3b919061b395565b979650505050505050565b618e51600383619c4b565b612140600482619c4b565b618e686003600061a0e6565b618e746004600061a0e6565b6005805460ff19169055565b81158015618e8c575080155b15618e9657505050565b6001600160a01b038316600090815260426020526040812060088101805491928592618ec390849061b04d565b90915550618ed39050828461b04d565b816005016000828254618ee6919061b04d565b909155506120009050816165ec565b600081815260066020908152604080832060018101546001600160a01b03168452604290925282209091601282015460ff166005811115618f3857618f3861a309565b14618fc757600282015482546001600160a01b031660009081526041602052604081208054909190618f6b90849061b04d565b909155505081546001830154600284015460128401546040516001600160a01b0394851694909316927f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f8783429261679c92909160ff9091169061bad8565b805482546001600160a01b039081169116146190e55760008082600801548360050154618ff4919061b395565b90508060000361901b57600284015491506190116012600a61b48f565b601384015561903d565b80846002015484600d0154619030919061b719565b61903a919061b94f565b91505b600c83015484546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b15801561908e57600080fd5b505af11580156190a2573d6000803e3d6000fd5b505050508183600d0160008282546190ba919061b04d565b909155505060028401546005840180546000906190d890849061b04d565b9091555061911b92505050565b81600201548160080160008282546190fd919061b04d565b9091555050600282015460058201805460009061694a90849061b04d565b505050565b600081815260096020908152604080832060018101546001600160a01b031684526042909252822060058201549192909162010000900460ff166192fd576002830154600c8301548454604051637eee288d60e01b81526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b1580156191b457600080fd5b505af11580156191c8573d6000803e3d6000fd5b50505050600c8301548454604051632770a7eb60e21b81526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b15801561921d57600080fd5b505af1158015619231573d6000803e3d6000fd5b5050505060008360080154846005015461924b919061b395565b600d85015490915061925d828461b719565b619267919061b94f565b92508184600d01600082825461927d919061b395565b9091555050600684015460000361929a57600385018390556192be565b600684015460078501546192ae908561b719565b6192b8919061b94f565b60038601555b828460060160008282546192d2919061b04d565b909155505060038501546007850180546000906192f090849061b04d565b909155506193c392505050565b5060028201546008820154811115619316575060088101545b816009015460000361932e5760038301819055619352565b6009820154600a830154619342908361b719565b61934c919061b94f565b60038401555b80826009016000828254619366919061b04d565b90915550506003830154600a8301805460009061938490849061b04d565b925050819055508082600801600082825461939f919061b395565b90915550506002830154600b830180546000906193bd90849061b395565b90915550505b6005808401805460ff19166001179055820180548291906000906193e890849061b395565b909155505050505050565b600081815260096020526040812060058101805461ff0019166101001790556003810154909103619422575050565b60018101546001600160a01b03166000908152604260205260408120600583015490919062010000900460ff166194b55781600701548260060154846003015461946c919061b719565b619476919061b94f565b90508082600601600082825461948c919061b395565b909155505060038301546007830180546000906194aa90849061b395565b909155506195129050565b81600a0154826009015484600301546194ce919061b719565b6194d8919061b94f565b9050808260090160008282546194ee919061b395565b90915550506003830154600a8301805460009061950c90849061b395565b90915550505b82546001600160a01b0316600090815260416020526040812080548392906193e890849061b04d565b60fa60a06000808285855af461911b573d6000803e3d6000fd5b600061956482606001516184d6565b6001600160a01b039091166020840152905080156195b25760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640161124e565b6020808301516001600160a01b039081166000908152604290925260409091206001015416156196245760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640161124e565b6196306004600a61b48f565b826080015111156121405760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640161124e565b6060816000036196aa5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156196d457806196be8161b963565b91506196cd9050600a8361b94f565b91506196ae565b6000816001600160401b038111156196ee576196ee61a753565b6040519080825280601f01601f191660200182016040528015619718576020820181803683370190505b5090505b84156197835761972d60018361b395565b915061973a600a8661baec565b61974590603061b04d565b60f81b81838151811061975a5761975a61b97c565b60200101906001600160f81b031916908160001a90535061977c600a8661b94f565b945061971c565b949350505050565b60608161979981601f61b04d565b10156197d85760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161124e565b6197e2828461b04d565b845110156198265760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161124e565b606082158015619845576040519150600082526020820160405261988f565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561987e578051835260209283019201619866565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b8110156198c5576198c2601b8261bb00565b90505b9250925092565b60006198d661a120565b60008585856040516020016198ed9392919061bb19565b6040516020818303038152906040529050600060fb9050600082516020619914919061b04d565b90506020848285855afa61992757600080fd5b5050905195945050505050565b6001600160a01b038116600090815260436020526040902054156199915760405162461bcd60e51b81526020600482015260146024820152736f7261636c65207365727665722065786973747360601b604482015260640161124e565b6001600160a01b0316600090815260436020526040902060019055565b6101808101516001600160a01b0316619aa3576048546001600160a01b0316619a245760405162461bcd60e51b815260206004820152602260248201527f6c6971756964206c6f67696320636f6e7472616374206e6f74206465706c6f79604482015261195960f21b606482015260840161124e565b602e54600090619a3390619683565b905081602001518260000151836080015183604860009054906101000a90046001600160a01b0316604051619a679061a13e565b619a7595949392919061bb64565b604051809103906000f080158015619a91573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051602e80546001808201835560009283527f37fa166cbdbfbb1561ccd9ea985ec0218b5e68502e230525f544285b2bdf3d7e90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352604290955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190619b53908261b0e1565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190619c10908261b0e1565b5061024082015160128201805460ff19166001836005811115619c3557619c3561a309565b0217905550610260820151816013015590505050565b815460026001808316156101000203821604825180820160208110602084100160028114619cf55760018114619d1a578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b80821015619cdf5781518455600184019350602082019150619cc2565b815191036101000a908190040290915550619d8d565b60028302826020036101000a846020036101000a602089015104020185018755619d8d565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b80821015619d7b5781518455600184019350602082019150619d5e565b815191036101000a9081900402909155505b50505050505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016060815260200160006005811115619e5757619e5761a309565b8152602001600081525090565b6040805160808101825260008082526020820152908101619e83619e95565b8152602001619e9061a011565b905290565b6040518060c001604052806060815260200160008152602001600081526020016000815260200160008152602001619e906040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518060800160405280619f6f604051806101800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b8152604080516101208101825260008082526020828101829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201529101908152602001619e5760405180610100016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200161a05c60405180606001604052806000815260200160008152602001600081525090565b8152602001619e906040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518060a001604052806005906020820280368337509192915050565b5080546000825590600052602060002090810190611575919061a14b565b60405180604001604052806002906020820280368337509192915050565b50805461a0f29061b060565b6000825580601f1061a102575050565b601f016020900490600052602060002090810190611575919061a16c565b60405180602001604052806001906020820280368337509192915050565b6105cf8061bb9883390190565b8082111561a16857600061a15f828261a0e6565b5060010161a14b565b5090565b5b8082111561a168576000815560010161a16d565b6001600160a01b038116811461157557600080fd5b6000806040838503121561a1a957600080fd5b823561a1b48161a181565b946020939093013593505050565b60005b8381101561a1dd57818101518382015260200161a1c5565b50506000910152565b6000815180845261a1fe81602086016020860161a1c2565b601f01601f19169290920160200192915050565b602081526000611c9e602083018461a1e6565b60006020828403121561a23757600080fd5b8135611c9e8161a181565b60006020828403121561a25457600080fd5b5035919050565b6006811061157557600080fd5b600080600080600060a0868803121561a28057600080fd5b853561a28b8161a181565b94506020860135935060408601359250606086013561a2a98161a25b565b9150608086013561a2b98161a25b565b809150509295509295909350565b60008060006060848603121561a2dc57600080fd5b833561a2e78161a181565b925060208401359150604084013561a2fe8161a25b565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b6006811061a33d57634e487b7160e01b600052602160045260246000fd5b9052565b80516001600160a01b031682526000602082015161a36a60208501826001600160a01b03169052565b50604082015161a38560408501826001600160a01b03169052565b506060820151610280606085015261a3a161028085018261a1e6565b90506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010083015161010085015261012083015161012085015261014083015161014085015261016083015161016085015261018083015161a4176101808601826001600160a01b03169052565b506101a08301516101a08501526101c08301516101c08501526101e08301516101e085015261020083015161020085015261022083015184820361022086015261a461828261a1e6565b91505061024083015161a47861024086018261a31f565b506102608301516102608501528091505092915050565b602081526000611c9e602083018461a341565b60008060006060848603121561a4b757600080fd5b833561a4c28161a181565b9250602084013561a4d28161a181565b929592945050506040919091013590565b6000806000806080858703121561a4f957600080fd5b843561a5048161a181565b966020860135965060408601359560600135945092505050565b600082825180855260208501945060208160051b8301016020850160005b8381101561a59857848303601f19018852815180516001600160a01b031684526020808201519085015260409081015160609185018290529061a5819085018261a1e6565b6020998a019990945092909201915060010161a53c565b50909695505050505050565b60008151610120845261a5bb61012085018261a51e565b90506020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015161a61860a0860182805182526020810151602083015260408101516040830152606081015160608301525050565b509392505050565b80518252602081015160208301526040810151604083015260608101516060830152608081015180516080840152602081015160a0840152604081015160c08401525060a081015161911b60e0840182805182526020810151602083015260408101516040830152606081015160608301525050565b60208152815115156020820152602082015115156040820152600060408301516101c0606084015261a6cc6101e084018261a5a4565b9050606084015161a618608085018261a620565b81516001600160a01b0390811682526020808401519091169082015260408083015190820152606080830151908201526080808301519082015260a08281015115159082015260c08083015161010083019161a73f9084018215159052565b5060e083015161149d60e084018215159052565b634e487b7160e01b600052604160045260246000fd5b60405161028081016001600160401b038111828210171561a78c5761a78c61a753565b60405290565b604051601f8201601f191681016001600160401b038111828210171561a7ba5761a7ba61a753565b604052919050565b6000608082840312801561a7d557600080fd5b50604051600090608081016001600160401b038111828210171561a7fb5761a7fb61a753565b60409081528435825260208086013590830152848101359082015260609384013593810193909352509092915050565b602081016114be828461a31f565b60006001600160401b0382111561a8525761a85261a753565b50601f01601f191660200190565b600082601f83011261a87157600080fd5b813560208301600061a88a61a8858461a839565b61a792565b905082815285838301111561a89e57600080fd5b82826020830137600092810160200192909252509392505050565b6000806040838503121561a8cc57600080fd5b823561a8d78161a181565b915060208301356001600160401b0381111561a8f257600080fd5b61a8fe8582860161a860565b9150509250929050565b6000806000806080858703121561a91e57600080fd5b84356001600160401b0381111561a93457600080fd5b61a9408782880161a860565b945050602085013561a9518161a181565b925060408501356001600160401b0381111561a96c57600080fd5b61a9788782880161a860565b92505060608501356001600160401b0381111561a99457600080fd5b61a9a08782880161a860565b91505092959194509250565b6000806040838503121561a9bf57600080fd5b823561a9ca8161a181565b9150602083013561a9da8161a25b565b809150509250929050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aa3e57603f1987860301845261aa2985835161a1e6565b9450602093840193919091019060010161aa0d565b50929695505050505050565b602081526000611c9e602083018461a5a4565b602081526000611c9e602083018461a51e565b6000806040838503121561aa8357600080fd5b82356001600160401b0381111561aa9957600080fd5b61aaa58582860161a860565b92505060208301356001600160401b0381111561a8f257600080fd5b60408152600061aad4604083018561a1e6565b828103602084015261aae6818561a1e6565b95945050505050565b600081518084526020840193506020830160005b8281101561ab2a5781516001600160a01b031686526020958601959091019060010161ab03565b5093949350505050565b602081526000611c9e602083018461aaef565b80516001600160a01b031682526020808201519061ab6f908401826001600160a01b03169052565b50604081015161ab8a60408401826001600160a01b03169052565b50606081015161aba560608401826001600160a01b03169052565b50608081015161abc060808401826001600160a01b03169052565b5060a081015161abdb60a08401826001600160a01b03169052565b5060c081015161abf660c08401826001600160a01b03169052565b5060e081015161ac1160e08401826001600160a01b03169052565b5061010081015161911b6101008401826001600160a01b03169052565b60006103c0820190508251805183526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c084015260e081015160e084015261010081015161ac9f6101008501826001600160a01b03169052565b5061012081015161acbc6101208501826001600160a01b03169052565b5061014081015161014084015261016081015161016084015250602083015161ace961018084018261ab47565b5060408381015180516001600160a01b03166102a085015260208101516102c0850152908101516102e0840152606080820151610300850152608082015161032085015260a082015161034085015260c082015161036085015260e090910151610380840152909201516103a09091015290565b6000806040838503121561ad7057600080fd5b823561ad7b8161a181565b9150602083013561a9da8161a181565b61016081016114be828461a620565b60008060006060848603121561adaf57600080fd5b833561adba8161a181565b95602085013595506040909401359392505050565b60208082526028908201527f63616c6c6572206973206e6f7420616e206163636f756e746162696c6974792060408201526718dbdb9d1c9858dd60c21b606082015260800190565b60408152600061ae2a604083018561a341565b90508260208301529392505050565b8051612f708161a181565b600082601f83011261ae5557600080fd5b815160208301600061ae6961a8858461a839565b905082815285838301111561ae7d57600080fd5b61aae683602083018461a1c2565b8051612f708161a25b565b6000610280828403121561aea957600080fd5b61aeb161a769565b905061aebc8261ae39565b815261aeca6020830161ae39565b602082015261aedb6040830161ae39565b604082015260608201516001600160401b0381111561aef957600080fd5b61af058482850161ae44565b6060830152506080828101519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261af6c610180830161ae39565b6101808201526101a082810151908201526101c080830151908201526101e0808301519082015261020080830151908201526102208201516001600160401b0381111561afb857600080fd5b61afc48482850161ae44565b6102208301525061afd8610240830161ae8b565b6102408201526102609182015191810191909152919050565b6000806040838503121561b00457600080fd5b82516001600160401b0381111561b01a57600080fd5b61b0268582860161ae96565b602094909401519395939450505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156114be576114be61b037565b600181811c9082168061b07457607f821691505b60208210810361b09457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561911b57806000526020600020601f840160051c8101602085101561b0c15750805b601f840160051c820191505b818110156124c5576000815560010161b0cd565b81516001600160401b0381111561b0fa5761b0fa61a753565b61b10e8161b108845461b060565b8461b09a565b6020601f82116001811461b145576000831561b12a5750848201515b600184901b600019600386901b1c198216175b8555506124c5565b600084815260208120601f198516915b8281101561b175578785015182556020948501946001909201910161b155565b508482101561b1935786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6020808252601c908201527f76616c696461746f72206d757374206265207265676973746572656400000000604082015260600190565b6020808252602c908201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160408201526b191b5a5b881858d8dbdd5b9d60a21b606082015260800190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60c08152600061b26f60c083018961a341565b905086602083015285604083015284606083015261b290608083018561a31f565b618e3b60a083018461a31f565b80518015158114612f7057600080fd5b60008060006060848603121561b2c257600080fd5b83516001600160401b0381111561b2d857600080fd5b61b2e48682870161ae96565b602086015190945092506198c290506040850161b29d565b60808152600061b30f608083018761a341565b905084602083015283604083015261aae6606083018461a31f565b60006020828403121561b33c57600080fd5b81516001600160401b0381111561b35257600080fd5b6197838482850161ae96565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b818103818111156114be576114be61b037565b6001815b600184111561b3e35780850481111561b3c75761b3c761b037565b600184161561b3d557908102905b60019390931c92800261b3ac565b935093915050565b60008261b3fa575060016114be565b8161b407575060006114be565b816001811461b41d576002811461b4275761b443565b60019150506114be565b60ff84111561b4385761b43861b037565b50506001821b6114be565b5060208310610133831016604e8410600b841016171561b466575081810a6114be565b61b473600019848461b3a8565b806000190482111561b4875761b48761b037565b029392505050565b6000611c9e838361b3eb565b60208082526012908201527143616e6e6f7420657863656564203130302560701b604082015260600190565b60208082526023908201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60408201526218dbdb60ea1b606082015260800190565b60008060006060848603121561b51f57600080fd5b5050815160208301516040909301519094929350919050565b60006020828403121561b54a57600080fd5b5051919050565b60006020828403121561b56357600080fd5b611c9e8261b29d565b60608152600061b57f606083018661aaef565b828103602084015261b591818661aaef565b9050828103604084015261b5a5818561aaef565b9695505050505050565b6000815461b5bc8161b060565b80855260018216801561b5d6576001811461b5f25761b629565b60ff1983166020870152602082151560051b870101935061b629565b84600052602060002060005b8381101561b6205781546020828a01015260018201915060208101905061b5fe565b87016020019450505b50505092915050565b6000604082016040835280855480835260608501915060608160051b860101925086600052602060002060005b8281101561b6b757868503605f1901845281546001600160a01b031685526001820154602086015260606040860181905261b69f9086016002840161b5af565b9450602093909301926003919091019060010161b65f565b50505050828103602084015261aae6818561aaef565b82518152602080840151818301526040808501518184015260608086015181850152845160808501529184015160a084015283015160c083015282015160e08201526101008101611c9e565b80820281158282048414176114be576114be61b037565b60208082526018908201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604082015260600190565b6020808252602f908201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460408201526e1c99585cdd5c9e481858d8dbdd5b9d608a1b606082015260800190565b6001600160a01b038416815260606020820181905260009061b7da9083018561b5af565b828103604084015261b5a5818561a1e6565b6001600160a01b03868116825285811660208301528416604082015260a06060820181905260009061b8209083018561a1e6565b905060018060a01b03831660808301529695505050505050565b60408152600061b84d604083018561a341565b9050611c9e602083018461a31f565b60006060828403121561b86e57600080fd5b604051606081016001600160401b038111828210171561b8905761b89061a753565b60409081528351825260208085015190830152928301519281019290925250919050565b600061012082840312801561b8c857600080fd5b5060405160009060a081016001600160401b038111828210171561b8ee5761b8ee61a753565b6040908152845182526020808601519083015284810151908201819052915061b91a856060860161b85c565b606082015261b92c8560c0860161b85c565b6080820152949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261b95e5761b95e61b939565b500490565b60006001820161b9755761b97561b037565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60018060a01b03831681526060602082015260006060820152608060408201526000619783608083018461a1e6565b81810361b9cc575050565b61b9d6825461b060565b6001600160401b0381111561b9ed5761b9ed61a753565b61b9fb8161b108845461b060565b6000601f82116001811461ba2d576000831561b12a575081850154600184901b600019600386901b1c1982161761b13d565b600085815260209020601f19841690600086815260209020845b8381101561ba67578286015482556001958601959091019060200161ba47565b508583101561ba855781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000845161baa781846020890161a1c2565b84519083019061babb81836020890161a1c2565b845191019061bace81836020880161a1c2565b0195945050505050565b82815260408101611c9e602083018461a31f565b60008261bafb5761bafb61b939565b500690565b60ff81811683821601908111156114be576114be61b037565b6000845161bb2b81846020890161a1c2565b84519083019061bb3f81836020890161a1c2565b60609490941b6bffffffffffffffffffffffff19169301928352505060140192915050565b6001600160a01b038681168252851660208201526040810184905260a06060820181905260009061b8209083018561a1e656fe608060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916101af565b806001600160a01b031663f5be34896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009191906102a4565b83111561009d57600080fd5b600b80546001600160a01b038088166001600160a01b031992831617909255600c805492871692909116919091179055600d8390556040516100e39083906020016102bd565b604051602081830303815290604052600990816101009190610373565b508160405160200161011291906102bd565b604051602081830303815290604052600a908161012f9190610373565b5050600f80546001600160a01b031916331790555061043192505050565b6001600160a01b038116811461016257600080fd5b50565b80516101708161014d565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101a657818101518382015260200161018e565b50506000910152565b600080600080600060a086880312156101c757600080fd5b85516101d28161014d565b60208701519095506101e38161014d565b6040870151606088015191955093506001600160401b0381111561020657600080fd5b8601601f8101881361021757600080fd5b80516001600160401b0381111561023057610230610175565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025e5761025e610175565b6040528181528282016020018a101561027657600080fd5b61028782602083016020860161018b565b935061029891505060808701610165565b90509295509295909350565b6000602082840312156102b657600080fd5b5051919050565b644c4e544e2d60d81b8152600082516102dd81600585016020870161018b565b9190910160050192915050565b600181811c908216806102fe57607f821691505b60208210810361031e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036e57806000526020600020601f840160051c8101602085101561034b5750805b601f840160051c820191505b8181101561036b5760008155600101610357565b50505b505050565b81516001600160401b0381111561038c5761038c610175565b6103a08161039a84546102ea565b84610324565b6020601f8211600181146103d457600083156103bc5750848201515b600019600385901b1c1916600184901b17845561036b565b600084815260208120601f198516915b8281101561040457878501518255602094850194600190920191016103e4565b50848210156104225786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b61018f806104406000396000f3fe6080604052366100245761002261001461002b565b6001600160a01b0316610106565b005b6100226100145b600080600f60009054906101000a90046001600160a01b03166001600160a01b0316634c1f1c776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a59190610129565b90506001600160a01b0381166101015760405162461bcd60e51b815260206004820152601d60248201527f6c6971756964206c6f67696320636f6e7472616374206e6f7420736574000000604482015260640160405180910390fd5b919050565b3660008037600080366000845af43d6000803e80610123573d6000fd5b503d6000f35b60006020828403121561013b57600080fd5b81516001600160a01b038116811461015257600080fd5b939250505056fea2646970667358221220ce2d0e61c8ad6acf83a736338add011753d52a2572b66d42a5f85bfe7de9136b64736f6c634300081e0033e821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1baa2646970667358221220292fb6a6063248231d276478b67161d8c1c155d6b7f6e63aeeeca4091202f6bc64736f6c634300081e00336080604052348015600f57600080fd5b50600f80546001600160a01b03191633179055611a8b806100316000396000f3fe6080604052600436106101dc5760003560e01c806359355736116101025780639dc29fac11610095578063bf99b73e11610064578063bf99b73e14610568578063d768d57814610588578063dd62ed3e146105a8578063f5be3489146105c8576101e3565b80639dc29fac14610500578063a0ce552d14610520578063a9059cbb14610533578063bd96102f14610553576101e3565b80637eee288d116100d15780637eee288d1461048b57806384955c88146104ab578063949813b8146104cb57806395d89b41146104eb576101e3565b80635935573614610416578063708e91e51461043657806370a082311461045657806372c8196314610476576101e3565b806323b872dd1161017a5780633b19e84a116101495780633b19e84a146103ae5780633b80e355146103cc5780633e4eb36c146103e157806340c10f19146103f6576101e3565b806323b872dd1461033d578063282d3fdf1461035d578063313ce5671461037d578063372500ab14610399576101e3565b806318160ddd116101b657806318160ddd146102ce578063187cf4d7146102f157806319fac8fd146103065780631eeffad014610328576101e3565b806306fdde0314610241578063095ea7b31461026c5780631195e07e1461029c576101e3565b366101e357005b60405162461bcd60e51b815260206004820152602860248201527f66616c6c6261636b206e6f7420696d706c656d656e74656420666f72204c69716044820152677569644c6f67696360c01b60648201526084015b60405180910390fd5b34801561024d57600080fd5b506102566105dd565b60405161026391906116e1565b60405180910390f35b34801561027857600080fd5b5061028c610287366004611746565b61066f565b6040519015158152602001610263565b3480156102a857600080fd5b50600b546001600160a01b03165b6040516001600160a01b039091168152602001610263565b3480156102da57600080fd5b506102e3610696565b604051908152602001610263565b3480156102fd57600080fd5b506102e36106c0565b34801561031257600080fd5b50610326610321366004611770565b6106cf565b005b34801561033457600080fd5b506102e3610712565b34801561034957600080fd5b5061028c610358366004611789565b61073c565b34801561036957600080fd5b50610326610378366004611746565b61083e565b34801561038957600080fd5b5060405160128152602001610263565b3480156103a557600080fd5b50610326610887565b3480156103ba57600080fd5b50600c546001600160a01b03166102b6565b3480156103d857600080fd5b506102e3600981565b3480156103ed57600080fd5b506102e3610949565b34801561040257600080fd5b50610326610411366004611746565b610973565b34801561042257600080fd5b506102e36104313660046117c6565b6109e8565b34801561044257600080fd5b50610326610451366004611789565b610a2b565b34801561046257600080fd5b506102e36104713660046117c6565b610b00565b34801561048257600080fd5b506102e3600481565b34801561049757600080fd5b506103266104a6366004611746565b610b3f565b3480156104b757600080fd5b506102e36104c63660046117c6565b610c1a565b3480156104d757600080fd5b506102e36104e63660046117c6565b610c6c565b3480156104f757600080fd5b50610256610cf5565b34801561050c57600080fd5b5061032661051b366004611746565b610d04565b6102e361052e366004611770565b610d6c565b34801561053f57600080fd5b5061028c61054e366004611746565b610f5b565b34801561055f57600080fd5b50610326610fb3565b34801561057457600080fd5b5061028c610583366004611746565b6110c9565b34801561059457600080fd5b506102e36105a33660046117e1565b6110de565b3480156105b457600080fd5b506102e36105c33660046117e1565b61112d565b3480156105d457600080fd5b506102e361117c565b6060600980546105ec90611814565b80601f016020809104026020016040519081016040528092919081815260200182805461061890611814565b80156106655780601f1061063a57610100808354040283529160200191610665565b820191906000526020600020905b81548152906001019060200180831161064857829003601f168201915b5050505050905090565b6000610679611188565b6106843384846111d5565b50600161069060008055565b92915050565b600080546001036106b95760405162461bcd60e51b81526004016102389061184e565b5060055490565b6106cc6009600a611982565b81565b6106d7611188565b600f546001600160a01b031633146107015760405162461bcd60e51b81526004016102389061198e565b600d81905561070f60008055565b50565b600080546001036107355760405162461bcd60e51b81526004016102389061184e565b50600e5490565b6000610746611188565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156107cb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610238565b6107df85336107da86856119d6565b6111d5565b6107e985846112fa565b6107f384846113e2565b836001600160a01b0316856001600160a01b0316600080516020611a368339815191528560405161082691815260200190565b60405180910390a350506000805560015b9392505050565b610846611188565b600f546001600160a01b031633146108705760405162461bcd60e51b81526004016102389061198e565b61087a8282611436565b61088360008055565b5050565b61088f611188565b600061089a336114e8565b3360008181526006602052604080822082905551929350916108fc90849084818181858888f193505050503d80600081146108f1576040519150601f19603f3d011682016040523d82523d6000602084013e6108f6565b606091505b505090508061093c5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b6044820152606401610238565b505061094760008055565b565b6000805460010361096c5760405162461bcd60e51b81526004016102389061184e565b50600d5490565b61097b611188565b600f546001600160a01b031633146109a55760405162461bcd60e51b81526004016102389061198e565b6109af82826113e2565b6040518181526001600160a01b03831690600090600080516020611a36833981519152906020015b60405180910390a361088360008055565b60008054600103610a0b5760405162461bcd60e51b81526004016102389061184e565b506001600160a01b0381166000908152600260205260409020545b919050565b610a33611188565b600f546001600160a01b03163314610a5d5760405162461bcd60e51b81526004016102389061198e565b6001600160a01b0380841660009081526004602090815260408083209386168352929052205481811015610ad35760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74206578636565647320616c6c6f77616e636500000000000000006044820152606401610238565b610ae78484610ae285856119d6565b611579565b610af18483611436565b50610afb60008055565b505050565b60008054600103610b235760405162461bcd60e51b81526004016102389061184e565b506001600160a01b031660009081526001602052604090205490565b610b47611188565b600f546001600160a01b03163314610b715760405162461bcd60e51b81526004016102389061198e565b6001600160a01b038216600090815260026020526040902054811115610be55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b6064820152608401610238565b6001600160a01b03821660009081526002602052604081208054839290610c0d9084906119d6565b9091555050600080555050565b60008054600103610c3d5760405162461bcd60e51b81526004016102389061184e565b6001600160a01b03821660009081526002602090815260408083205460019092529091205461069091906119d6565b60008054600103610c8f5760405162461bcd60e51b81526004016102389061184e565b6001600160a01b038216600090815260016020908152604080832054600854600790935290832054909291610cc69184919061167e565b6001600160a01b038516600090815260066020526040902054909150610ced9082906119e9565b949350505050565b6060600a80546105ec90611814565b610d0c611188565b600f546001600160a01b03163314610d365760405162461bcd60e51b81526004016102389061198e565b610d4082826112fa565b6040518181526000906001600160a01b03841690600080516020611a36833981519152906020016109d7565b6000610d76611188565b600f546001600160a01b03163314610da05760405162461bcd60e51b81526004016102389061198e565b346000610dac826116bb565b90508015610e4357610dbe81836119d6565b600c546040519193506000916001600160a01b03909116906108fc90849084818181858888f193505050503d8060008114610e15576040519150601f19603f3d011682016040523d82523d6000602084013e610e1a565b606091505b5090915050801515600003610e415781600e6000828254610e3b91906119e9565b90915550505b505b6000610e4e856116bb565b90508415610ee157600f54600b546001600160a01b039182169163f7fcc510911683610e7a818a6119d6565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b158015610ec857600080fd5b505af1158015610edc573d6000803e3d6000fd5b505050505b600554600090610ef36009600a611982565b610efd90866119fc565b610f079190611a13565b905080600854610f1791906119e9565b6008556000610f286009600a611982565b600554610f3590846119fc565b610f3f9190611a13565b9050610f4b81856119e9565b95505050505050610a2660008055565b6000610f65611188565b610f6f33836112fa565b610f7983836113e2565b6040518281526001600160a01b038416903390600080516020611a368339815191529060200160405180910390a350600161069060008055565b610fbb611188565b600c546001600160a01b031633146110205760405162461bcd60e51b815260206004820152602260248201527f6f6e6c792074726561737572792063616e20636c61696d2068697320726577616044820152611c9960f21b6064820152608401610238565b600e8054600091829055600c546040519192916001600160a01b03909116906108fc90849084818181858888f193505050503d806000811461107e576040519150601f19603f3d011682016040523d82523d6000602084013e611083565b606091505b505090508061093c5760405162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a379039b2b7321020aa2760711b6044820152606401610238565b60006110d3611188565b610684338484611579565b600080546001036111015760405162461bcd60e51b81526004016102389061184e565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b600080546001036111505760405162461bcd60e51b81526004016102389061184e565b506001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6106cc6004600a611982565b600054156111ce5760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b6044820152606401610238565b6001600055565b6001600160a01b0383166112375760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610238565b6001600160a01b0382166112985760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610238565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b611303826114e8565b506001600160a01b03821660009081526001602090815260408083205460029092529091205461133390826119d6565b8211156113825760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610238565b61138c82826119d6565b6001600160a01b0384166000908152600160205260409020558082036113c6576001600160a01b0383166000908152600760205260408120555b81600560008282546113d891906119d6565b9091555050505050565b6113eb826114e8565b506001600160a01b038216600090815260016020526040812080548392906114149084906119e9565b92505081905550806005600082825461142d91906119e9565b90915550505050565b6001600160a01b0382166000908152600260209081526040808320546001909252909120548291611466916119d6565b10156114c05760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b6064820152608401610238565b6001600160a01b0382166000908152600260205260408120805483929061142d9084906119e9565b6001600160a01b0381166000908152600160209081526040808320546008546007909352908320549091839161151f91849161167e565b6001600160a01b0385166000908152600660205260409020549091506115469082906119e9565b6001600160a01b039094166000908152600660209081526040808320879055600854600790925290912055509192915050565b6001600160a01b0383166115cf5760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f20616464726573730000006044820152606401610238565b6001600160a01b0382166116255760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f206164647265737300000000006044820152606401610238565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f03530f06053c088596fe8c12632b52218b0685204ad1b757662178f87e27713b91016112ed565b60008360000361169057506000610837565b61169c6009600a611982565b846116a784866119d6565b6116b191906119fc565b610ced9190611a13565b6000806116ca6004600a611982565b600d546116d790856119fc565b6108379190611a13565b602081526000825180602084015260005b8181101561170f57602081860181015160408684010152016116f2565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610a2657600080fd5b6000806040838503121561175957600080fd5b6117628361172f565b946020939093013593505050565b60006020828403121561178257600080fd5b5035919050565b60008060006060848603121561179e57600080fd5b6117a78461172f565b92506117b56020850161172f565b929592945050506040919091013590565b6000602082840312156117d857600080fd5b6108378261172f565b600080604083850312156117f457600080fd5b6117fd8361172f565b915061180b6020840161172f565b90509250929050565b600181811c9082168061182857607f821691505b60208210810361184857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156118d6578085048111156118ba576118ba611885565b60018416156118c857908102905b60019390931c92800261189f565b935093915050565b6000826118ed57506001610690565b816118fa57506000610690565b8160018114611910576002811461191a57611936565b6001915050610690565b60ff84111561192b5761192b611885565b50506001821b610690565b5060208310610133831016604e8410600b8410161715611959575081810a610690565b611966600019848461189b565b806000190482111561197a5761197a611885565b029392505050565b600061083783836118de565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b8181038181111561069057610690611885565b8082018082111561069057610690611885565b808202811582820484141761069057610690611885565b600082611a3057634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e81bde77fbe59093f44ada6868ad5f6ece7ed4bea0887fd37197dbdfa14a639164736f6c634300081e00336080604052348015600f57600080fd5b50610d818061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630273a3ee1461005c57806341b6cb0f1461008557806399ac2d4814610098578063a00f313f146100b9578063d0c66054146100db575b600080fd5b61006f61006a366004610843565b6100f1565b60405161007c9190610a5d565b60405180910390f35b61006f610093366004610a77565b61010c565b6100ab6100a6366004610ad8565b610129565b60405161007c929190610b1d565b6100cc6100c7366004610b3f565b610147565b60405161007c93929190610bb9565b6100e361020a565b60405190815260200161007c565b6100f9610517565b610103838361021d565b50815b92915050565b610114610517565b61012085858585610256565b50929392505050565b610131610517565b60008061013e8585610299565b94959350505050565b61014f610517565b60008061015e6004600a610ce0565b88106101da5760008961012001518a60c001518b60a001516101809190610cec565b61018a9190610cec565b600060a08c018190526101008c018190526101208c0181905260c08c01526101e08b01805191925082916101bf908390610cec565b9052506101cc8a8661021d565b8993509150600190506101fe565b60006101e68a8a610299565b90506101f48a898989610256565b8993509150600090505b96509650969350505050565b60006102186004600a610ce0565b905090565b6000610200830152610240820181600581111561023c5761023c6108d7565b9081600581111561024f5761024f6108d7565b9052505050565b6102608284610cec565b610200850152610240840181600581111561027d5761027d6108d7565b90816005811115610290576102906108d7565b90525050505050565b60006102a76004600a610ce0565b82106103085760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f7420736c617368203130302520776974686f7574206a61696c626f604482015265756e64696e6760d01b606482015260840160405180910390fd5b60008361012001518460c001518560a001516103249190610cec565b61032e9190610cec565b9050600061033e6004600a610ce0565b6103488386610cff565b6103529190610d16565b905060008190508086610120015110610384578086610120018181516103789190610d38565b9052506000905061039f565b6101208601516103949082610d38565b600061012088015290505b801561041c5780866101000151106103e7578086610100018181516103c49190610d38565b90525060a0860180518291906103db908390610d38565b9052506000905061041c565b6101008601516103f79082610d38565b90508561010001518660a0018181516104109190610d38565b90525060006101008701525b60008111801561043f575060008660a001518760c0015161043d9190610cec565b115b156104eb5760008660a001518760c0015161045a9190610cec565b60c08801516104699084610cff565b6104739190610d16565b905060008760a001518860c0015161048b9190610cec565b60a089015161049a9085610cff565b6104a49190610d16565b9050818860c0018181516104b89190610d38565b90525060a0880180518291906104cf908390610d38565b9052506104dc8183610cec565b6104e69084610d38565b925050505b6104f58183610d38565b915081866101e00181815161050a9190610cec565b9052509095945050505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160608152602001600060058111156105d8576105d86108d7565b8152602001600081525090565b634e487b7160e01b600052604160045260246000fd5b604051610280810167ffffffffffffffff8111828210171561061f5761061f6105e5565b60405290565b80356001600160a01b038116811461063c57600080fd5b919050565b600082601f83011261065257600080fd5b81356020830160008067ffffffffffffffff841115610673576106736105e5565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156106a2576106a26105e5565b6040528381529050808284018710156106ba57600080fd5b838360208301376000602085830101528094505050505092915050565b80356006811061063c57600080fd5b600061028082840312156106f957600080fd5b6107016105fb565b905061070c82610625565b815261071a60208301610625565b602082015261072b60408301610625565b6040820152606082013567ffffffffffffffff81111561074a57600080fd5b61075684828501610641565b6060830152506080828101359082015260a0808301359082015260c0808301359082015260e0808301359082015261010080830135908201526101208083013590820152610140808301359082015261016080830135908201526107bd6101808301610625565b6101808201526101a082810135908201526101c080830135908201526101e08083013590820152610200808301359082015261022082013567ffffffffffffffff81111561080a57600080fd5b61081684828501610641565b6102208301525061082a61024083016106d7565b6102408201526102609182013591810191909152919050565b6000806040838503121561085657600080fd5b823567ffffffffffffffff81111561086d57600080fd5b610879858286016106e6565b925050610888602084016106d7565b90509250929050565b6000815180845260005b818110156108b75760208185018101518683018201520161089b565b506000602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b600052602160045260246000fd5b6006811061090b57634e487b7160e01b600052602160045260246000fd5b9052565b80516001600160a01b031682526000602082015161093860208501826001600160a01b03169052565b50604082015161095360408501826001600160a01b03169052565b506060820151610280606085015261096f610280850182610891565b90506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008301516101008501526101208301516101208501526101408301516101408501526101608301516101608501526101808301516109e56101808601826001600160a01b03169052565b506101a08301516101a08501526101c08301516101c08501526101e08301516101e0850152610200830151610200850152610220830151848203610220860152610a2f8282610891565b915050610240830151610a466102408601826108ed565b506102608301516102608501528091505092915050565b602081526000610a70602083018461090f565b9392505050565b60008060008060808587031215610a8d57600080fd5b843567ffffffffffffffff811115610aa457600080fd5b610ab0878288016106e6565b9450506020850135925060408501359150610acd606086016106d7565b905092959194509250565b60008060408385031215610aeb57600080fd5b823567ffffffffffffffff811115610b0257600080fd5b610b0e858286016106e6565b95602094909401359450505050565b604081526000610b30604083018561090f565b90508260208301529392505050565b60008060008060008060c08789031215610b5857600080fd5b863567ffffffffffffffff811115610b6f57600080fd5b610b7b89828a016106e6565b965050602087013594506040870135935060608701359250610b9f608088016106d7565b9150610bad60a088016106d7565b90509295509295509295565b606081526000610bcc606083018661090f565b602083019490945250901515604090910152919050565b634e487b7160e01b600052601160045260246000fd5b6001815b6001841115610c3457808504811115610c1857610c18610be3565b6001841615610c2657908102905b60019390931c928002610bfd565b935093915050565b600082610c4b57506001610106565b81610c5857506000610106565b8160018114610c6e5760028114610c7857610c94565b6001915050610106565b60ff841115610c8957610c89610be3565b50506001821b610106565b5060208310610133831016604e8410600b8410161715610cb7575081810a610106565b610cc46000198484610bf9565b8060001904821115610cd857610cd8610be3565b029392505050565b6000610a708383610c3c565b8082018082111561010657610106610be3565b808202811582820484141761010657610106610be3565b600082610d3357634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561010657610106610be356fea2646970667358221220147eee18a661e7ad475ec0658edf33129576eb045153bd87b145a47945bc2d6264736f6c634300081e0033608060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916101af565b806001600160a01b031663f5be34896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009191906102a4565b83111561009d57600080fd5b600b80546001600160a01b038088166001600160a01b031992831617909255600c805492871692909116919091179055600d8390556040516100e39083906020016102bd565b604051602081830303815290604052600990816101009190610373565b508160405160200161011291906102bd565b604051602081830303815290604052600a908161012f9190610373565b5050600f80546001600160a01b031916331790555061043192505050565b6001600160a01b038116811461016257600080fd5b50565b80516101708161014d565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101a657818101518382015260200161018e565b50506000910152565b600080600080600060a086880312156101c757600080fd5b85516101d28161014d565b60208701519095506101e38161014d565b6040870151606088015191955093506001600160401b0381111561020657600080fd5b8601601f8101881361021757600080fd5b80516001600160401b0381111561023057610230610175565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025e5761025e610175565b6040528181528282016020018a101561027657600080fd5b61028782602083016020860161018b565b935061029891505060808701610165565b90509295509295909350565b6000602082840312156102b657600080fd5b5051919050565b644c4e544e2d60d81b8152600082516102dd81600585016020870161018b565b9190910160050192915050565b600181811c908216806102fe57607f821691505b60208210810361031e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036e57806000526020600020601f840160051c8101602085101561034b5750805b601f840160051c820191505b8181101561036b5760008155600101610357565b50505b505050565b81516001600160401b0381111561038c5761038c610175565b6103a08161039a84546102ea565b84610324565b6020601f8211600181146103d457600083156103bc5750848201515b600019600385901b1c1916600184901b17845561036b565b600084815260208120601f198516915b8281101561040457878501518255602094850194600190920191016103e4565b50848210156104225786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b61018f806104406000396000f3fe6080604052366100245761002261001461002b565b6001600160a01b0316610106565b005b6100226100145b600080600f60009054906101000a90046001600160a01b03166001600160a01b0316634c1f1c776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a59190610129565b90506001600160a01b0381166101015760405162461bcd60e51b815260206004820152601d60248201527f6c6971756964206c6f67696320636f6e7472616374206e6f7420736574000000604482015260640160405180910390fd5b919050565b3660008037600080366000845af43d6000803e80610123573d6000fd5b503d6000f35b60006020828403121561013b57600080fd5b81516001600160a01b038116811461015257600080fd5b939250505056fea2646970667358221220ce2d0e61c8ad6acf83a736338add011753d52a2572b66d42a5f85bfe7de9136b64736f6c634300081e0033",
}

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

// Deprecated: Use AutonityMetaData.Sigs instead.
// AutonityFuncSigs maps the 4-byte function signature to its string representation.
var AutonityFuncSigs = AutonityMetaData.Sigs

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

// DeployAutonity deploys a new Ethereum contract, binding an instance of Autonity to it.
func DeployAutonity(auth *bind.TransactOpts, backend bind.ContractBackend, _validators []IAutonityValidator, _config IAutonityConfig) (common.Address, *types.Transaction, *Autonity, error) {
	parsed, err := AutonityMetaData.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(AutonityBin), backend, _validators, _config)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Autonity{AutonityCaller: AutonityCaller{contract: contract}, AutonityTransactor: AutonityTransactor{contract: contract}, AutonityFilterer: AutonityFilterer{contract: contract}}, nil
}

// Autonity is an auto generated Go binding around an Ethereum contract.
type Autonity struct {
	AutonityCaller     // Read-only binding to the contract
	AutonityTransactor // Write-only binding to the contract
	AutonityFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewAutonity creates a new instance of Autonity, bound to a specific deployed contract.
func NewAutonity(address common.Address, backend bind.ContractBackend) (*Autonity, error) {
	contract, err := bindAutonity(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Autonity{AutonityCaller: AutonityCaller{contract: contract}, AutonityTransactor: AutonityTransactor{contract: contract}, AutonityFilterer: AutonityFilterer{contract: contract}}, nil
}

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

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

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

// bindAutonity binds a generic wrapper to an already deployed contract.
func bindAutonity(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(AutonityABI))
	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 (_Autonity *AutonityRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Autonity.Contract.AutonityCaller.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 (_Autonity *AutonityRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Autonity.Contract.AutonityTransactor.contract.Transfer(opts)
}

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

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

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

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

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

	return out0, err

}

// STANDARDDECIMALS is a free data retrieval call binding the contract method 0xf3c70aad.
//
// Solidity: function STANDARD_DECIMALS() view returns(uint256)
func (_Autonity *AutonitySession) STANDARDDECIMALS() (*big.Int, error) {
	return _Autonity.Contract.STANDARDDECIMALS(&_Autonity.CallOpts)
}

// STANDARDDECIMALS is a free data retrieval call binding the contract method 0xf3c70aad.
//
// Solidity: function STANDARD_DECIMALS() view returns(uint256)
func (_Autonity *AutonityCallerSession) STANDARDDECIMALS() (*big.Int, error) {
	return _Autonity.Contract.STANDARDDECIMALS(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// STANDARDSCALEFACTOR is a free data retrieval call binding the contract method 0xd144f00a.
//
// Solidity: function STANDARD_SCALE_FACTOR() view returns(uint256)
func (_Autonity *AutonitySession) STANDARDSCALEFACTOR() (*big.Int, error) {
	return _Autonity.Contract.STANDARDSCALEFACTOR(&_Autonity.CallOpts)
}

// STANDARDSCALEFACTOR is a free data retrieval call binding the contract method 0xd144f00a.
//
// Solidity: function STANDARD_SCALE_FACTOR() view returns(uint256)
func (_Autonity *AutonityCallerSession) STANDARDSCALEFACTOR() (*big.Int, error) {
	return _Autonity.Contract.STANDARDSCALEFACTOR(&_Autonity.CallOpts)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_Autonity *AutonityCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "allowance", owner, spender)

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

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

	return out0, err

}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_Autonity *AutonitySession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
	return _Autonity.Contract.Allowance(&_Autonity.CallOpts, owner, spender)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_Autonity *AutonityCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
	return _Autonity.Contract.Allowance(&_Autonity.CallOpts, owner, spender)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address _addr) view returns(uint256)
func (_Autonity *AutonityCaller) BalanceOf(opts *bind.CallOpts, _addr common.Address) (*big.Int, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "balanceOf", _addr)

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

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

	return out0, err

}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address _addr) view returns(uint256)
func (_Autonity *AutonitySession) BalanceOf(_addr common.Address) (*big.Int, error) {
	return _Autonity.Contract.BalanceOf(&_Autonity.CallOpts, _addr)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address _addr) view returns(uint256)
func (_Autonity *AutonityCallerSession) BalanceOf(_addr common.Address) (*big.Int, error) {
	return _Autonity.Contract.BalanceOf(&_Autonity.CallOpts, _addr)
}

// BondingAllowance is a free data retrieval call binding the contract method 0xe0e01d54.
//
// Solidity: function bondingAllowance(address _owner, address _caller) view returns(uint256)
func (_Autonity *AutonityCaller) BondingAllowance(opts *bind.CallOpts, _owner common.Address, _caller common.Address) (*big.Int, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "bondingAllowance", _owner, _caller)

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

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

	return out0, err

}

// BondingAllowance is a free data retrieval call binding the contract method 0xe0e01d54.
//
// Solidity: function bondingAllowance(address _owner, address _caller) view returns(uint256)
func (_Autonity *AutonitySession) BondingAllowance(_owner common.Address, _caller common.Address) (*big.Int, error) {
	return _Autonity.Contract.BondingAllowance(&_Autonity.CallOpts, _owner, _caller)
}

// BondingAllowance is a free data retrieval call binding the contract method 0xe0e01d54.
//
// Solidity: function bondingAllowance(address _owner, address _caller) view returns(uint256)
func (_Autonity *AutonityCallerSession) BondingAllowance(_owner common.Address, _caller common.Address) (*big.Int, error) {
	return _Autonity.Contract.BondingAllowance(&_Autonity.CallOpts, _owner, _caller)
}

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

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

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

	return out0, err

}

// CirculatingSupply is a free data retrieval call binding the contract method 0x9358928b.
//
// Solidity: function circulatingSupply() view returns(uint256)
func (_Autonity *AutonitySession) CirculatingSupply() (*big.Int, error) {
	return _Autonity.Contract.CirculatingSupply(&_Autonity.CallOpts)
}

// CirculatingSupply is a free data retrieval call binding the contract method 0x9358928b.
//
// Solidity: function circulatingSupply() view returns(uint256)
func (_Autonity *AutonityCallerSession) CirculatingSupply() (*big.Int, error) {
	return _Autonity.Contract.CirculatingSupply(&_Autonity.CallOpts)
}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_Autonity *AutonityCaller) Decimals(opts *bind.CallOpts) (uint8, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "decimals")

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

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

	return out0, err

}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_Autonity *AutonitySession) Decimals() (uint8, error) {
	return _Autonity.Contract.Decimals(&_Autonity.CallOpts)
}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_Autonity *AutonityCallerSession) Decimals() (uint8, error) {
	return _Autonity.Contract.Decimals(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetBlockPeriod is a free data retrieval call binding the contract method 0x43645969.
//
// Solidity: function getBlockPeriod() view returns(uint256)
func (_Autonity *AutonitySession) GetBlockPeriod() (*big.Int, error) {
	return _Autonity.Contract.GetBlockPeriod(&_Autonity.CallOpts)
}

// GetBlockPeriod is a free data retrieval call binding the contract method 0x43645969.
//
// Solidity: function getBlockPeriod() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetBlockPeriod() (*big.Int, error) {
	return _Autonity.Contract.GetBlockPeriod(&_Autonity.CallOpts)
}

// GetBondingRequestByID is a free data retrieval call binding the contract method 0x8ebb48b7.
//
// Solidity: function getBondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256))
func (_Autonity *AutonityCaller) GetBondingRequestByID(opts *bind.CallOpts, _id *big.Int) (IAutonityBondingRequest, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getBondingRequestByID", _id)

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

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

	return out0, err

}

// GetBondingRequestByID is a free data retrieval call binding the contract method 0x8ebb48b7.
//
// Solidity: function getBondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256))
func (_Autonity *AutonitySession) GetBondingRequestByID(_id *big.Int) (IAutonityBondingRequest, error) {
	return _Autonity.Contract.GetBondingRequestByID(&_Autonity.CallOpts, _id)
}

// GetBondingRequestByID is a free data retrieval call binding the contract method 0x8ebb48b7.
//
// Solidity: function getBondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256))
func (_Autonity *AutonityCallerSession) GetBondingRequestByID(_id *big.Int) (IAutonityBondingRequest, error) {
	return _Autonity.Contract.GetBondingRequestByID(&_Autonity.CallOpts, _id)
}

// GetClientConfig is a free data retrieval call binding the contract method 0xf3f759c1.
//
// Solidity: function getClientConfig() view returns((uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256)))
func (_Autonity *AutonityCaller) GetClientConfig(opts *bind.CallOpts) (IAutonityClientAwareConfig, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getClientConfig")

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

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

	return out0, err

}

// GetClientConfig is a free data retrieval call binding the contract method 0xf3f759c1.
//
// Solidity: function getClientConfig() view returns((uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256)))
func (_Autonity *AutonitySession) GetClientConfig() (IAutonityClientAwareConfig, error) {
	return _Autonity.Contract.GetClientConfig(&_Autonity.CallOpts)
}

// GetClientConfig is a free data retrieval call binding the contract method 0xf3f759c1.
//
// Solidity: function getClientConfig() view returns((uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256)))
func (_Autonity *AutonityCallerSession) GetClientConfig() (IAutonityClientAwareConfig, error) {
	return _Autonity.Contract.GetClientConfig(&_Autonity.CallOpts)
}

// GetCommittee is a free data retrieval call binding the contract method 0xab8f6ffe.
//
// Solidity: function getCommittee() view returns((address,uint256,bytes)[])
func (_Autonity *AutonityCaller) GetCommittee(opts *bind.CallOpts) ([]IAutonityCommitteeMember, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getCommittee")

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

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

	return out0, err

}

// GetCommittee is a free data retrieval call binding the contract method 0xab8f6ffe.
//
// Solidity: function getCommittee() view returns((address,uint256,bytes)[])
func (_Autonity *AutonitySession) GetCommittee() ([]IAutonityCommitteeMember, error) {
	return _Autonity.Contract.GetCommittee(&_Autonity.CallOpts)
}

// GetCommittee is a free data retrieval call binding the contract method 0xab8f6ffe.
//
// Solidity: function getCommittee() view returns((address,uint256,bytes)[])
func (_Autonity *AutonityCallerSession) GetCommittee() ([]IAutonityCommitteeMember, error) {
	return _Autonity.Contract.GetCommittee(&_Autonity.CallOpts)
}

// GetCommitteeEnodes is a free data retrieval call binding the contract method 0xa8b2216e.
//
// Solidity: function getCommitteeEnodes() view returns(string[])
func (_Autonity *AutonityCaller) GetCommitteeEnodes(opts *bind.CallOpts) ([]string, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getCommitteeEnodes")

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

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

	return out0, err

}

// GetCommitteeEnodes is a free data retrieval call binding the contract method 0xa8b2216e.
//
// Solidity: function getCommitteeEnodes() view returns(string[])
func (_Autonity *AutonitySession) GetCommitteeEnodes() ([]string, error) {
	return _Autonity.Contract.GetCommitteeEnodes(&_Autonity.CallOpts)
}

// GetCommitteeEnodes is a free data retrieval call binding the contract method 0xa8b2216e.
//
// Solidity: function getCommitteeEnodes() view returns(string[])
func (_Autonity *AutonityCallerSession) GetCommitteeEnodes() ([]string, error) {
	return _Autonity.Contract.GetCommitteeEnodes(&_Autonity.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns(((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256),(address,address,address,address,address,address,address,address,address),(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint256))
func (_Autonity *AutonityCaller) GetConfig(opts *bind.CallOpts) (IAutonityConfig, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getConfig")

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

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

	return out0, err

}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns(((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256),(address,address,address,address,address,address,address,address,address),(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint256))
func (_Autonity *AutonitySession) GetConfig() (IAutonityConfig, error) {
	return _Autonity.Contract.GetConfig(&_Autonity.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns(((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256),(address,address,address,address,address,address,address,address,address),(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint256))
func (_Autonity *AutonityCallerSession) GetConfig() (IAutonityConfig, error) {
	return _Autonity.Contract.GetConfig(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetCurrentCommitteeSize is a free data retrieval call binding the contract method 0x2b56feac.
//
// Solidity: function getCurrentCommitteeSize() view returns(uint256)
func (_Autonity *AutonitySession) GetCurrentCommitteeSize() (*big.Int, error) {
	return _Autonity.Contract.GetCurrentCommitteeSize(&_Autonity.CallOpts)
}

// GetCurrentCommitteeSize is a free data retrieval call binding the contract method 0x2b56feac.
//
// Solidity: function getCurrentCommitteeSize() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetCurrentCommitteeSize() (*big.Int, error) {
	return _Autonity.Contract.GetCurrentCommitteeSize(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetCurrentEpochPeriod is a free data retrieval call binding the contract method 0x0aac2da1.
//
// Solidity: function getCurrentEpochPeriod() view returns(uint256)
func (_Autonity *AutonitySession) GetCurrentEpochPeriod() (*big.Int, error) {
	return _Autonity.Contract.GetCurrentEpochPeriod(&_Autonity.CallOpts)
}

// GetCurrentEpochPeriod is a free data retrieval call binding the contract method 0x0aac2da1.
//
// Solidity: function getCurrentEpochPeriod() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetCurrentEpochPeriod() (*big.Int, error) {
	return _Autonity.Contract.GetCurrentEpochPeriod(&_Autonity.CallOpts)
}

// GetEpochByHeight is a free data retrieval call binding the contract method 0xaffb1cf1.
//
// Solidity: function getEpochByHeight(uint256 _height) view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_Autonity *AutonityCaller) GetEpochByHeight(opts *bind.CallOpts, _height *big.Int) (IAutonityEpochInfo, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getEpochByHeight", _height)

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

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

	return out0, err

}

// GetEpochByHeight is a free data retrieval call binding the contract method 0xaffb1cf1.
//
// Solidity: function getEpochByHeight(uint256 _height) view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_Autonity *AutonitySession) GetEpochByHeight(_height *big.Int) (IAutonityEpochInfo, error) {
	return _Autonity.Contract.GetEpochByHeight(&_Autonity.CallOpts, _height)
}

// GetEpochByHeight is a free data retrieval call binding the contract method 0xaffb1cf1.
//
// Solidity: function getEpochByHeight(uint256 _height) view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_Autonity *AutonityCallerSession) GetEpochByHeight(_height *big.Int) (IAutonityEpochInfo, error) {
	return _Autonity.Contract.GetEpochByHeight(&_Autonity.CallOpts, _height)
}

// GetEpochFromBlock is a free data retrieval call binding the contract method 0x96b477cb.
//
// Solidity: function getEpochFromBlock(uint256 _block) view returns(uint256)
func (_Autonity *AutonityCaller) GetEpochFromBlock(opts *bind.CallOpts, _block *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getEpochFromBlock", _block)

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

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

	return out0, err

}

// GetEpochFromBlock is a free data retrieval call binding the contract method 0x96b477cb.
//
// Solidity: function getEpochFromBlock(uint256 _block) view returns(uint256)
func (_Autonity *AutonitySession) GetEpochFromBlock(_block *big.Int) (*big.Int, error) {
	return _Autonity.Contract.GetEpochFromBlock(&_Autonity.CallOpts, _block)
}

// GetEpochFromBlock is a free data retrieval call binding the contract method 0x96b477cb.
//
// Solidity: function getEpochFromBlock(uint256 _block) view returns(uint256)
func (_Autonity *AutonityCallerSession) GetEpochFromBlock(_block *big.Int) (*big.Int, error) {
	return _Autonity.Contract.GetEpochFromBlock(&_Autonity.CallOpts, _block)
}

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

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

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

	return out0, err

}

// GetEpochID is a free data retrieval call binding the contract method 0x6fc53515.
//
// Solidity: function getEpochID() view returns(uint256)
func (_Autonity *AutonitySession) GetEpochID() (*big.Int, error) {
	return _Autonity.Contract.GetEpochID(&_Autonity.CallOpts)
}

// GetEpochID is a free data retrieval call binding the contract method 0x6fc53515.
//
// Solidity: function getEpochID() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetEpochID() (*big.Int, error) {
	return _Autonity.Contract.GetEpochID(&_Autonity.CallOpts)
}

// GetEpochInfo is a free data retrieval call binding the contract method 0xa9fd1a8f.
//
// Solidity: function getEpochInfo() view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_Autonity *AutonityCaller) GetEpochInfo(opts *bind.CallOpts) (IAutonityEpochInfo, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getEpochInfo")

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

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

	return out0, err

}

// GetEpochInfo is a free data retrieval call binding the contract method 0xa9fd1a8f.
//
// Solidity: function getEpochInfo() view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_Autonity *AutonitySession) GetEpochInfo() (IAutonityEpochInfo, error) {
	return _Autonity.Contract.GetEpochInfo(&_Autonity.CallOpts)
}

// GetEpochInfo is a free data retrieval call binding the contract method 0xa9fd1a8f.
//
// Solidity: function getEpochInfo() view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_Autonity *AutonityCallerSession) GetEpochInfo() (IAutonityEpochInfo, error) {
	return _Autonity.Contract.GetEpochInfo(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetEpochPeriod is a free data retrieval call binding the contract method 0xdfb1a4d2.
//
// Solidity: function getEpochPeriod() view returns(uint256)
func (_Autonity *AutonitySession) GetEpochPeriod() (*big.Int, error) {
	return _Autonity.Contract.GetEpochPeriod(&_Autonity.CallOpts)
}

// GetEpochPeriod is a free data retrieval call binding the contract method 0xdfb1a4d2.
//
// Solidity: function getEpochPeriod() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetEpochPeriod() (*big.Int, error) {
	return _Autonity.Contract.GetEpochPeriod(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetEpochTotalBondedStake is a free data retrieval call binding the contract method 0x4efcd15f.
//
// Solidity: function getEpochTotalBondedStake() view returns(uint256)
func (_Autonity *AutonitySession) GetEpochTotalBondedStake() (*big.Int, error) {
	return _Autonity.Contract.GetEpochTotalBondedStake(&_Autonity.CallOpts)
}

// GetEpochTotalBondedStake is a free data retrieval call binding the contract method 0x4efcd15f.
//
// Solidity: function getEpochTotalBondedStake() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetEpochTotalBondedStake() (*big.Int, error) {
	return _Autonity.Contract.GetEpochTotalBondedStake(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetInflationReserve is a free data retrieval call binding the contract method 0x4651e07b.
//
// Solidity: function getInflationReserve() view returns(uint256)
func (_Autonity *AutonitySession) GetInflationReserve() (*big.Int, error) {
	return _Autonity.Contract.GetInflationReserve(&_Autonity.CallOpts)
}

// GetInflationReserve is a free data retrieval call binding the contract method 0x4651e07b.
//
// Solidity: function getInflationReserve() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetInflationReserve() (*big.Int, error) {
	return _Autonity.Contract.GetInflationReserve(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetLastEpochBlock is a free data retrieval call binding the contract method 0x731b3a03.
//
// Solidity: function getLastEpochBlock() view returns(uint256)
func (_Autonity *AutonitySession) GetLastEpochBlock() (*big.Int, error) {
	return _Autonity.Contract.GetLastEpochBlock(&_Autonity.CallOpts)
}

// GetLastEpochBlock is a free data retrieval call binding the contract method 0x731b3a03.
//
// Solidity: function getLastEpochBlock() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetLastEpochBlock() (*big.Int, error) {
	return _Autonity.Contract.GetLastEpochBlock(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetLastEpochTime is a free data retrieval call binding the contract method 0xba522458.
//
// Solidity: function getLastEpochTime() view returns(uint256)
func (_Autonity *AutonitySession) GetLastEpochTime() (*big.Int, error) {
	return _Autonity.Contract.GetLastEpochTime(&_Autonity.CallOpts)
}

// GetLastEpochTime is a free data retrieval call binding the contract method 0xba522458.
//
// Solidity: function getLastEpochTime() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetLastEpochTime() (*big.Int, error) {
	return _Autonity.Contract.GetLastEpochTime(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetLiquidLogicContract is a free data retrieval call binding the contract method 0x4c1f1c77.
//
// Solidity: function getLiquidLogicContract() view returns(address)
func (_Autonity *AutonitySession) GetLiquidLogicContract() (common.Address, error) {
	return _Autonity.Contract.GetLiquidLogicContract(&_Autonity.CallOpts)
}

// GetLiquidLogicContract is a free data retrieval call binding the contract method 0x4c1f1c77.
//
// Solidity: function getLiquidLogicContract() view returns(address)
func (_Autonity *AutonityCallerSession) GetLiquidLogicContract() (common.Address, error) {
	return _Autonity.Contract.GetLiquidLogicContract(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetMaxCommitteeSize is a free data retrieval call binding the contract method 0x819b6463.
//
// Solidity: function getMaxCommitteeSize() view returns(uint256)
func (_Autonity *AutonitySession) GetMaxCommitteeSize() (*big.Int, error) {
	return _Autonity.Contract.GetMaxCommitteeSize(&_Autonity.CallOpts)
}

// GetMaxCommitteeSize is a free data retrieval call binding the contract method 0x819b6463.
//
// Solidity: function getMaxCommitteeSize() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetMaxCommitteeSize() (*big.Int, error) {
	return _Autonity.Contract.GetMaxCommitteeSize(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetMaxScheduleDuration is a free data retrieval call binding the contract method 0xfed76a56.
//
// Solidity: function getMaxScheduleDuration() view returns(uint256)
func (_Autonity *AutonitySession) GetMaxScheduleDuration() (*big.Int, error) {
	return _Autonity.Contract.GetMaxScheduleDuration(&_Autonity.CallOpts)
}

// GetMaxScheduleDuration is a free data retrieval call binding the contract method 0xfed76a56.
//
// Solidity: function getMaxScheduleDuration() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetMaxScheduleDuration() (*big.Int, error) {
	return _Autonity.Contract.GetMaxScheduleDuration(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetMinimumBaseFee is a free data retrieval call binding the contract method 0x11220633.
//
// Solidity: function getMinimumBaseFee() view returns(uint256)
func (_Autonity *AutonitySession) GetMinimumBaseFee() (*big.Int, error) {
	return _Autonity.Contract.GetMinimumBaseFee(&_Autonity.CallOpts)
}

// GetMinimumBaseFee is a free data retrieval call binding the contract method 0x11220633.
//
// Solidity: function getMinimumBaseFee() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetMinimumBaseFee() (*big.Int, error) {
	return _Autonity.Contract.GetMinimumBaseFee(&_Autonity.CallOpts)
}

// GetNewContract is a free data retrieval call binding the contract method 0xb66b3e79.
//
// Solidity: function getNewContract() view returns(bytes, string)
func (_Autonity *AutonityCaller) GetNewContract(opts *bind.CallOpts) ([]byte, string, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getNewContract")

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

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

	return out0, out1, err

}

// GetNewContract is a free data retrieval call binding the contract method 0xb66b3e79.
//
// Solidity: function getNewContract() view returns(bytes, string)
func (_Autonity *AutonitySession) GetNewContract() ([]byte, string, error) {
	return _Autonity.Contract.GetNewContract(&_Autonity.CallOpts)
}

// GetNewContract is a free data retrieval call binding the contract method 0xb66b3e79.
//
// Solidity: function getNewContract() view returns(bytes, string)
func (_Autonity *AutonityCallerSession) GetNewContract() ([]byte, string, error) {
	return _Autonity.Contract.GetNewContract(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetNextEpochBlock is a free data retrieval call binding the contract method 0x25ce1bb9.
//
// Solidity: function getNextEpochBlock() view returns(uint256)
func (_Autonity *AutonitySession) GetNextEpochBlock() (*big.Int, error) {
	return _Autonity.Contract.GetNextEpochBlock(&_Autonity.CallOpts)
}

// GetNextEpochBlock is a free data retrieval call binding the contract method 0x25ce1bb9.
//
// Solidity: function getNextEpochBlock() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetNextEpochBlock() (*big.Int, error) {
	return _Autonity.Contract.GetNextEpochBlock(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetOperator is a free data retrieval call binding the contract method 0xe7f43c68.
//
// Solidity: function getOperator() view returns(address)
func (_Autonity *AutonitySession) GetOperator() (common.Address, error) {
	return _Autonity.Contract.GetOperator(&_Autonity.CallOpts)
}

// GetOperator is a free data retrieval call binding the contract method 0xe7f43c68.
//
// Solidity: function getOperator() view returns(address)
func (_Autonity *AutonityCallerSession) GetOperator() (common.Address, error) {
	return _Autonity.Contract.GetOperator(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetOracle is a free data retrieval call binding the contract method 0x833b1fce.
//
// Solidity: function getOracle() view returns(address)
func (_Autonity *AutonitySession) GetOracle() (common.Address, error) {
	return _Autonity.Contract.GetOracle(&_Autonity.CallOpts)
}

// GetOracle is a free data retrieval call binding the contract method 0x833b1fce.
//
// Solidity: function getOracle() view returns(address)
func (_Autonity *AutonityCallerSession) GetOracle() (common.Address, error) {
	return _Autonity.Contract.GetOracle(&_Autonity.CallOpts)
}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_Autonity *AutonityCaller) GetSchedule(opts *bind.CallOpts, _vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getSchedule", _vault, _id)

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

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

	return out0, err

}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_Autonity *AutonitySession) GetSchedule(_vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	return _Autonity.Contract.GetSchedule(&_Autonity.CallOpts, _vault, _id)
}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_Autonity *AutonityCallerSession) GetSchedule(_vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	return _Autonity.Contract.GetSchedule(&_Autonity.CallOpts, _vault, _id)
}

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

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

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

	return out0, err

}

// GetSlasher is a free data retrieval call binding the contract method 0xd0c80f13.
//
// Solidity: function getSlasher() view returns(address)
func (_Autonity *AutonitySession) GetSlasher() (common.Address, error) {
	return _Autonity.Contract.GetSlasher(&_Autonity.CallOpts)
}

// GetSlasher is a free data retrieval call binding the contract method 0xd0c80f13.
//
// Solidity: function getSlasher() view returns(address)
func (_Autonity *AutonityCallerSession) GetSlasher() (common.Address, error) {
	return _Autonity.Contract.GetSlasher(&_Autonity.CallOpts)
}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_Autonity *AutonityCaller) GetTotalSchedules(opts *bind.CallOpts, _vault common.Address) (*big.Int, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getTotalSchedules", _vault)

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

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

	return out0, err

}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_Autonity *AutonitySession) GetTotalSchedules(_vault common.Address) (*big.Int, error) {
	return _Autonity.Contract.GetTotalSchedules(&_Autonity.CallOpts, _vault)
}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_Autonity *AutonityCallerSession) GetTotalSchedules(_vault common.Address) (*big.Int, error) {
	return _Autonity.Contract.GetTotalSchedules(&_Autonity.CallOpts, _vault)
}

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

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

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

	return out0, err

}

// GetTreasuryAccount is a free data retrieval call binding the contract method 0xf7866ee3.
//
// Solidity: function getTreasuryAccount() view returns(address)
func (_Autonity *AutonitySession) GetTreasuryAccount() (common.Address, error) {
	return _Autonity.Contract.GetTreasuryAccount(&_Autonity.CallOpts)
}

// GetTreasuryAccount is a free data retrieval call binding the contract method 0xf7866ee3.
//
// Solidity: function getTreasuryAccount() view returns(address)
func (_Autonity *AutonityCallerSession) GetTreasuryAccount() (common.Address, error) {
	return _Autonity.Contract.GetTreasuryAccount(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetTreasuryFee is a free data retrieval call binding the contract method 0x29070c6d.
//
// Solidity: function getTreasuryFee() view returns(uint256)
func (_Autonity *AutonitySession) GetTreasuryFee() (*big.Int, error) {
	return _Autonity.Contract.GetTreasuryFee(&_Autonity.CallOpts)
}

// GetTreasuryFee is a free data retrieval call binding the contract method 0x29070c6d.
//
// Solidity: function getTreasuryFee() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetTreasuryFee() (*big.Int, error) {
	return _Autonity.Contract.GetTreasuryFee(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetUnbondingPeriod is a free data retrieval call binding the contract method 0x6fd2c80b.
//
// Solidity: function getUnbondingPeriod() view returns(uint256)
func (_Autonity *AutonitySession) GetUnbondingPeriod() (*big.Int, error) {
	return _Autonity.Contract.GetUnbondingPeriod(&_Autonity.CallOpts)
}

// GetUnbondingPeriod is a free data retrieval call binding the contract method 0x6fd2c80b.
//
// Solidity: function getUnbondingPeriod() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetUnbondingPeriod() (*big.Int, error) {
	return _Autonity.Contract.GetUnbondingPeriod(&_Autonity.CallOpts)
}

// GetUnbondingRequestByID is a free data retrieval call binding the contract method 0x4bfe23f1.
//
// Solidity: function getUnbondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256,uint256,bool,bool,bool))
func (_Autonity *AutonityCaller) GetUnbondingRequestByID(opts *bind.CallOpts, _id *big.Int) (IAutonityUnbondingRequest, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getUnbondingRequestByID", _id)

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

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

	return out0, err

}

// GetUnbondingRequestByID is a free data retrieval call binding the contract method 0x4bfe23f1.
//
// Solidity: function getUnbondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256,uint256,bool,bool,bool))
func (_Autonity *AutonitySession) GetUnbondingRequestByID(_id *big.Int) (IAutonityUnbondingRequest, error) {
	return _Autonity.Contract.GetUnbondingRequestByID(&_Autonity.CallOpts, _id)
}

// GetUnbondingRequestByID is a free data retrieval call binding the contract method 0x4bfe23f1.
//
// Solidity: function getUnbondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256,uint256,bool,bool,bool))
func (_Autonity *AutonityCallerSession) GetUnbondingRequestByID(_id *big.Int) (IAutonityUnbondingRequest, error) {
	return _Autonity.Contract.GetUnbondingRequestByID(&_Autonity.CallOpts, _id)
}

// GetUnbondingShare is a free data retrieval call binding the contract method 0x8d347287.
//
// Solidity: function getUnbondingShare(uint256 _unbondingID) view returns(uint256)
func (_Autonity *AutonityCaller) GetUnbondingShare(opts *bind.CallOpts, _unbondingID *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getUnbondingShare", _unbondingID)

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

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

	return out0, err

}

// GetUnbondingShare is a free data retrieval call binding the contract method 0x8d347287.
//
// Solidity: function getUnbondingShare(uint256 _unbondingID) view returns(uint256)
func (_Autonity *AutonitySession) GetUnbondingShare(_unbondingID *big.Int) (*big.Int, error) {
	return _Autonity.Contract.GetUnbondingShare(&_Autonity.CallOpts, _unbondingID)
}

// GetUnbondingShare is a free data retrieval call binding the contract method 0x8d347287.
//
// Solidity: function getUnbondingShare(uint256 _unbondingID) view returns(uint256)
func (_Autonity *AutonityCallerSession) GetUnbondingShare(_unbondingID *big.Int) (*big.Int, error) {
	return _Autonity.Contract.GetUnbondingShare(&_Autonity.CallOpts, _unbondingID)
}

// GetValidator is a free data retrieval call binding the contract method 0x1904bb2e.
//
// Solidity: function getValidator(address _addr) view returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_Autonity *AutonityCaller) GetValidator(opts *bind.CallOpts, _addr common.Address) (IAutonityValidator, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getValidator", _addr)

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

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

	return out0, err

}

// GetValidator is a free data retrieval call binding the contract method 0x1904bb2e.
//
// Solidity: function getValidator(address _addr) view returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_Autonity *AutonitySession) GetValidator(_addr common.Address) (IAutonityValidator, error) {
	return _Autonity.Contract.GetValidator(&_Autonity.CallOpts, _addr)
}

// GetValidator is a free data retrieval call binding the contract method 0x1904bb2e.
//
// Solidity: function getValidator(address _addr) view returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_Autonity *AutonityCallerSession) GetValidator(_addr common.Address) (IAutonityValidator, error) {
	return _Autonity.Contract.GetValidator(&_Autonity.CallOpts, _addr)
}

// GetValidatorState is a free data retrieval call binding the contract method 0x5b7d6c36.
//
// Solidity: function getValidatorState(address _addr) view returns(uint8)
func (_Autonity *AutonityCaller) GetValidatorState(opts *bind.CallOpts, _addr common.Address) (uint8, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "getValidatorState", _addr)

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

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

	return out0, err

}

// GetValidatorState is a free data retrieval call binding the contract method 0x5b7d6c36.
//
// Solidity: function getValidatorState(address _addr) view returns(uint8)
func (_Autonity *AutonitySession) GetValidatorState(_addr common.Address) (uint8, error) {
	return _Autonity.Contract.GetValidatorState(&_Autonity.CallOpts, _addr)
}

// GetValidatorState is a free data retrieval call binding the contract method 0x5b7d6c36.
//
// Solidity: function getValidatorState(address _addr) view returns(uint8)
func (_Autonity *AutonityCallerSession) GetValidatorState(_addr common.Address) (uint8, error) {
	return _Autonity.Contract.GetValidatorState(&_Autonity.CallOpts, _addr)
}

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

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

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

	return out0, err

}

// GetValidators is a free data retrieval call binding the contract method 0xb7ab4db5.
//
// Solidity: function getValidators() view returns(address[])
func (_Autonity *AutonitySession) GetValidators() ([]common.Address, error) {
	return _Autonity.Contract.GetValidators(&_Autonity.CallOpts)
}

// GetValidators is a free data retrieval call binding the contract method 0xb7ab4db5.
//
// Solidity: function getValidators() view returns(address[])
func (_Autonity *AutonityCallerSession) GetValidators() ([]common.Address, error) {
	return _Autonity.Contract.GetValidators(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// GetVersion is a free data retrieval call binding the contract method 0x0d8e6e2c.
//
// Solidity: function getVersion() view returns(uint256)
func (_Autonity *AutonitySession) GetVersion() (*big.Int, error) {
	return _Autonity.Contract.GetVersion(&_Autonity.CallOpts)
}

// GetVersion is a free data retrieval call binding the contract method 0x0d8e6e2c.
//
// Solidity: function getVersion() view returns(uint256)
func (_Autonity *AutonityCallerSession) GetVersion() (*big.Int, error) {
	return _Autonity.Contract.GetVersion(&_Autonity.CallOpts)
}

// IsUnbondingReleased is a free data retrieval call binding the contract method 0xe294df7c.
//
// Solidity: function isUnbondingReleased(uint256 _unbondingID) view returns(bool)
func (_Autonity *AutonityCaller) IsUnbondingReleased(opts *bind.CallOpts, _unbondingID *big.Int) (bool, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "isUnbondingReleased", _unbondingID)

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

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

	return out0, err

}

// IsUnbondingReleased is a free data retrieval call binding the contract method 0xe294df7c.
//
// Solidity: function isUnbondingReleased(uint256 _unbondingID) view returns(bool)
func (_Autonity *AutonitySession) IsUnbondingReleased(_unbondingID *big.Int) (bool, error) {
	return _Autonity.Contract.IsUnbondingReleased(&_Autonity.CallOpts, _unbondingID)
}

// IsUnbondingReleased is a free data retrieval call binding the contract method 0xe294df7c.
//
// Solidity: function isUnbondingReleased(uint256 _unbondingID) view returns(bool)
func (_Autonity *AutonityCallerSession) IsUnbondingReleased(_unbondingID *big.Int) (bool, error) {
	return _Autonity.Contract.IsUnbondingReleased(&_Autonity.CallOpts, _unbondingID)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() pure returns(string)
func (_Autonity *AutonityCaller) Name(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "name")

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

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

	return out0, err

}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() pure returns(string)
func (_Autonity *AutonitySession) Name() (string, error) {
	return _Autonity.Contract.Name(&_Autonity.CallOpts)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() pure returns(string)
func (_Autonity *AutonityCallerSession) Name() (string, error) {
	return _Autonity.Contract.Name(&_Autonity.CallOpts)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() pure returns(string)
func (_Autonity *AutonityCaller) Symbol(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _Autonity.contract.Call(opts, &out, "symbol")

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

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

	return out0, err

}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() pure returns(string)
func (_Autonity *AutonitySession) Symbol() (string, error) {
	return _Autonity.Contract.Symbol(&_Autonity.CallOpts)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() pure returns(string)
func (_Autonity *AutonityCallerSession) Symbol() (string, error) {
	return _Autonity.Contract.Symbol(&_Autonity.CallOpts)
}

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

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

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

	return out0, err

}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_Autonity *AutonitySession) TotalSupply() (*big.Int, error) {
	return _Autonity.Contract.TotalSupply(&_Autonity.CallOpts)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_Autonity *AutonityCallerSession) TotalSupply() (*big.Int, error) {
	return _Autonity.Contract.TotalSupply(&_Autonity.CallOpts)
}

// ActivateValidator is a paid mutator transaction binding the contract method 0xb46e5520.
//
// Solidity: function activateValidator(address _address) returns()
func (_Autonity *AutonityTransactor) ActivateValidator(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "activateValidator", _address)
}

// ActivateValidator is a paid mutator transaction binding the contract method 0xb46e5520.
//
// Solidity: function activateValidator(address _address) returns()
func (_Autonity *AutonitySession) ActivateValidator(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.ActivateValidator(&_Autonity.TransactOpts, _address)
}

// ActivateValidator is a paid mutator transaction binding the contract method 0xb46e5520.
//
// Solidity: function activateValidator(address _address) returns()
func (_Autonity *AutonityTransactorSession) ActivateValidator(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.ActivateValidator(&_Autonity.TransactOpts, _address)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_Autonity *AutonityTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "approve", spender, amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_Autonity *AutonitySession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Approve(&_Autonity.TransactOpts, spender, amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_Autonity *AutonityTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Approve(&_Autonity.TransactOpts, spender, amount)
}

// ApproveBonding is a paid mutator transaction binding the contract method 0x50492571.
//
// Solidity: function approveBonding(address _caller, uint256 _amount) returns(bool)
func (_Autonity *AutonityTransactor) ApproveBonding(opts *bind.TransactOpts, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "approveBonding", _caller, _amount)
}

// ApproveBonding is a paid mutator transaction binding the contract method 0x50492571.
//
// Solidity: function approveBonding(address _caller, uint256 _amount) returns(bool)
func (_Autonity *AutonitySession) ApproveBonding(_caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.ApproveBonding(&_Autonity.TransactOpts, _caller, _amount)
}

// ApproveBonding is a paid mutator transaction binding the contract method 0x50492571.
//
// Solidity: function approveBonding(address _caller, uint256 _amount) returns(bool)
func (_Autonity *AutonityTransactorSession) ApproveBonding(_caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.ApproveBonding(&_Autonity.TransactOpts, _caller, _amount)
}

// Autobond is a paid mutator transaction binding the contract method 0xf7fcc510.
//
// Solidity: function autobond(address _validator, uint256 _selfBond, uint256 _delegated) returns()
func (_Autonity *AutonityTransactor) Autobond(opts *bind.TransactOpts, _validator common.Address, _selfBond *big.Int, _delegated *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "autobond", _validator, _selfBond, _delegated)
}

// Autobond is a paid mutator transaction binding the contract method 0xf7fcc510.
//
// Solidity: function autobond(address _validator, uint256 _selfBond, uint256 _delegated) returns()
func (_Autonity *AutonitySession) Autobond(_validator common.Address, _selfBond *big.Int, _delegated *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Autobond(&_Autonity.TransactOpts, _validator, _selfBond, _delegated)
}

// Autobond is a paid mutator transaction binding the contract method 0xf7fcc510.
//
// Solidity: function autobond(address _validator, uint256 _selfBond, uint256 _delegated) returns()
func (_Autonity *AutonityTransactorSession) Autobond(_validator common.Address, _selfBond *big.Int, _delegated *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Autobond(&_Autonity.TransactOpts, _validator, _selfBond, _delegated)
}

// Bond is a paid mutator transaction binding the contract method 0xa515366a.
//
// Solidity: function bond(address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonityTransactor) Bond(opts *bind.TransactOpts, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "bond", _validator, _amount)
}

// Bond is a paid mutator transaction binding the contract method 0xa515366a.
//
// Solidity: function bond(address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonitySession) Bond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Bond(&_Autonity.TransactOpts, _validator, _amount)
}

// Bond is a paid mutator transaction binding the contract method 0xa515366a.
//
// Solidity: function bond(address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonityTransactorSession) Bond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Bond(&_Autonity.TransactOpts, _validator, _amount)
}

// BondFrom is a paid mutator transaction binding the contract method 0x41de7400.
//
// Solidity: function bondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonityTransactor) BondFrom(opts *bind.TransactOpts, _account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "bondFrom", _account, _validator, _amount)
}

// BondFrom is a paid mutator transaction binding the contract method 0x41de7400.
//
// Solidity: function bondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonitySession) BondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.BondFrom(&_Autonity.TransactOpts, _account, _validator, _amount)
}

// BondFrom is a paid mutator transaction binding the contract method 0x41de7400.
//
// Solidity: function bondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonityTransactorSession) BondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.BondFrom(&_Autonity.TransactOpts, _account, _validator, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _addr, uint256 _amount) returns()
func (_Autonity *AutonityTransactor) Burn(opts *bind.TransactOpts, _addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "burn", _addr, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _addr, uint256 _amount) returns()
func (_Autonity *AutonitySession) Burn(_addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Burn(&_Autonity.TransactOpts, _addr, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _addr, uint256 _amount) returns()
func (_Autonity *AutonityTransactorSession) Burn(_addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Burn(&_Autonity.TransactOpts, _addr, _amount)
}

// ChangeCommissionRate is a paid mutator transaction binding the contract method 0x852c4849.
//
// Solidity: function changeCommissionRate(address _validator, uint256 _rate) returns()
func (_Autonity *AutonityTransactor) ChangeCommissionRate(opts *bind.TransactOpts, _validator common.Address, _rate *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "changeCommissionRate", _validator, _rate)
}

// ChangeCommissionRate is a paid mutator transaction binding the contract method 0x852c4849.
//
// Solidity: function changeCommissionRate(address _validator, uint256 _rate) returns()
func (_Autonity *AutonitySession) ChangeCommissionRate(_validator common.Address, _rate *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.ChangeCommissionRate(&_Autonity.TransactOpts, _validator, _rate)
}

// ChangeCommissionRate is a paid mutator transaction binding the contract method 0x852c4849.
//
// Solidity: function changeCommissionRate(address _validator, uint256 _rate) returns()
func (_Autonity *AutonityTransactorSession) ChangeCommissionRate(_validator common.Address, _rate *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.ChangeCommissionRate(&_Autonity.TransactOpts, _validator, _rate)
}

// CompleteContractUpgrade is a paid mutator transaction binding the contract method 0x872cf059.
//
// Solidity: function completeContractUpgrade() returns()
func (_Autonity *AutonityTransactor) CompleteContractUpgrade(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "completeContractUpgrade")
}

// CompleteContractUpgrade is a paid mutator transaction binding the contract method 0x872cf059.
//
// Solidity: function completeContractUpgrade() returns()
func (_Autonity *AutonitySession) CompleteContractUpgrade() (*types.Transaction, error) {
	return _Autonity.Contract.CompleteContractUpgrade(&_Autonity.TransactOpts)
}

// CompleteContractUpgrade is a paid mutator transaction binding the contract method 0x872cf059.
//
// Solidity: function completeContractUpgrade() returns()
func (_Autonity *AutonityTransactorSession) CompleteContractUpgrade() (*types.Transaction, error) {
	return _Autonity.Contract.CompleteContractUpgrade(&_Autonity.TransactOpts)
}

// CreateSchedule is a paid mutator transaction binding the contract method 0x354c40a7.
//
// Solidity: function createSchedule(address _scheduleVault, uint256 _amount, uint256 _startTime, uint256 _totalDuration) returns()
func (_Autonity *AutonityTransactor) CreateSchedule(opts *bind.TransactOpts, _scheduleVault common.Address, _amount *big.Int, _startTime *big.Int, _totalDuration *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "createSchedule", _scheduleVault, _amount, _startTime, _totalDuration)
}

// CreateSchedule is a paid mutator transaction binding the contract method 0x354c40a7.
//
// Solidity: function createSchedule(address _scheduleVault, uint256 _amount, uint256 _startTime, uint256 _totalDuration) returns()
func (_Autonity *AutonitySession) CreateSchedule(_scheduleVault common.Address, _amount *big.Int, _startTime *big.Int, _totalDuration *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.CreateSchedule(&_Autonity.TransactOpts, _scheduleVault, _amount, _startTime, _totalDuration)
}

// CreateSchedule is a paid mutator transaction binding the contract method 0x354c40a7.
//
// Solidity: function createSchedule(address _scheduleVault, uint256 _amount, uint256 _startTime, uint256 _totalDuration) returns()
func (_Autonity *AutonityTransactorSession) CreateSchedule(_scheduleVault common.Address, _amount *big.Int, _startTime *big.Int, _totalDuration *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.CreateSchedule(&_Autonity.TransactOpts, _scheduleVault, _amount, _startTime, _totalDuration)
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns((bool,bool,((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)),(uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256))))
func (_Autonity *AutonityTransactor) Finalize(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "finalize")
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns((bool,bool,((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)),(uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256))))
func (_Autonity *AutonitySession) Finalize() (*types.Transaction, error) {
	return _Autonity.Contract.Finalize(&_Autonity.TransactOpts)
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns((bool,bool,((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)),(uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256))))
func (_Autonity *AutonityTransactorSession) Finalize() (*types.Transaction, error) {
	return _Autonity.Contract.Finalize(&_Autonity.TransactOpts)
}

// FinalizeInitialization is a paid mutator transaction binding the contract method 0x4da3baec.
//
// Solidity: function finalizeInitialization(uint256 _omissionDelta) returns()
func (_Autonity *AutonityTransactor) FinalizeInitialization(opts *bind.TransactOpts, _omissionDelta *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "finalizeInitialization", _omissionDelta)
}

// FinalizeInitialization is a paid mutator transaction binding the contract method 0x4da3baec.
//
// Solidity: function finalizeInitialization(uint256 _omissionDelta) returns()
func (_Autonity *AutonitySession) FinalizeInitialization(_omissionDelta *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.FinalizeInitialization(&_Autonity.TransactOpts, _omissionDelta)
}

// FinalizeInitialization is a paid mutator transaction binding the contract method 0x4da3baec.
//
// Solidity: function finalizeInitialization(uint256 _omissionDelta) returns()
func (_Autonity *AutonityTransactorSession) FinalizeInitialization(_omissionDelta *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.FinalizeInitialization(&_Autonity.TransactOpts, _omissionDelta)
}

// Jail is a paid mutator transaction binding the contract method 0x154d76d7.
//
// Solidity: function jail(address _nodeAddress, uint256 _jailtime, uint8 _newJailedState) returns(uint256)
func (_Autonity *AutonityTransactor) Jail(opts *bind.TransactOpts, _nodeAddress common.Address, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "jail", _nodeAddress, _jailtime, _newJailedState)
}

// Jail is a paid mutator transaction binding the contract method 0x154d76d7.
//
// Solidity: function jail(address _nodeAddress, uint256 _jailtime, uint8 _newJailedState) returns(uint256)
func (_Autonity *AutonitySession) Jail(_nodeAddress common.Address, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _Autonity.Contract.Jail(&_Autonity.TransactOpts, _nodeAddress, _jailtime, _newJailedState)
}

// Jail is a paid mutator transaction binding the contract method 0x154d76d7.
//
// Solidity: function jail(address _nodeAddress, uint256 _jailtime, uint8 _newJailedState) returns(uint256)
func (_Autonity *AutonityTransactorSession) Jail(_nodeAddress common.Address, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _Autonity.Contract.Jail(&_Autonity.TransactOpts, _nodeAddress, _jailtime, _newJailedState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x8ef8c2fd.
//
// Solidity: function jailbound(address _nodeAddress, uint8 _newJailboundState) returns()
func (_Autonity *AutonityTransactor) Jailbound(opts *bind.TransactOpts, _nodeAddress common.Address, _newJailboundState uint8) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "jailbound", _nodeAddress, _newJailboundState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x8ef8c2fd.
//
// Solidity: function jailbound(address _nodeAddress, uint8 _newJailboundState) returns()
func (_Autonity *AutonitySession) Jailbound(_nodeAddress common.Address, _newJailboundState uint8) (*types.Transaction, error) {
	return _Autonity.Contract.Jailbound(&_Autonity.TransactOpts, _nodeAddress, _newJailboundState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x8ef8c2fd.
//
// Solidity: function jailbound(address _nodeAddress, uint8 _newJailboundState) returns()
func (_Autonity *AutonityTransactorSession) Jailbound(_nodeAddress common.Address, _newJailboundState uint8) (*types.Transaction, error) {
	return _Autonity.Contract.Jailbound(&_Autonity.TransactOpts, _nodeAddress, _newJailboundState)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _addr, uint256 _amount) returns()
func (_Autonity *AutonityTransactor) Mint(opts *bind.TransactOpts, _addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "mint", _addr, _amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _addr, uint256 _amount) returns()
func (_Autonity *AutonitySession) Mint(_addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Mint(&_Autonity.TransactOpts, _addr, _amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _addr, uint256 _amount) returns()
func (_Autonity *AutonityTransactorSession) Mint(_addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Mint(&_Autonity.TransactOpts, _addr, _amount)
}

// PauseValidator is a paid mutator transaction binding the contract method 0x0ae65e7a.
//
// Solidity: function pauseValidator(address _address) returns()
func (_Autonity *AutonityTransactor) PauseValidator(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "pauseValidator", _address)
}

// PauseValidator is a paid mutator transaction binding the contract method 0x0ae65e7a.
//
// Solidity: function pauseValidator(address _address) returns()
func (_Autonity *AutonitySession) PauseValidator(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.PauseValidator(&_Autonity.TransactOpts, _address)
}

// PauseValidator is a paid mutator transaction binding the contract method 0x0ae65e7a.
//
// Solidity: function pauseValidator(address _address) returns()
func (_Autonity *AutonityTransactorSession) PauseValidator(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.PauseValidator(&_Autonity.TransactOpts, _address)
}

// RegisterValidator is a paid mutator transaction binding the contract method 0x84467fdb.
//
// Solidity: function registerValidator(string _enode, address _oracleAddress, bytes _consensusKey, bytes _signatures) returns()
func (_Autonity *AutonityTransactor) RegisterValidator(opts *bind.TransactOpts, _enode string, _oracleAddress common.Address, _consensusKey []byte, _signatures []byte) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "registerValidator", _enode, _oracleAddress, _consensusKey, _signatures)
}

// RegisterValidator is a paid mutator transaction binding the contract method 0x84467fdb.
//
// Solidity: function registerValidator(string _enode, address _oracleAddress, bytes _consensusKey, bytes _signatures) returns()
func (_Autonity *AutonitySession) RegisterValidator(_enode string, _oracleAddress common.Address, _consensusKey []byte, _signatures []byte) (*types.Transaction, error) {
	return _Autonity.Contract.RegisterValidator(&_Autonity.TransactOpts, _enode, _oracleAddress, _consensusKey, _signatures)
}

// RegisterValidator is a paid mutator transaction binding the contract method 0x84467fdb.
//
// Solidity: function registerValidator(string _enode, address _oracleAddress, bytes _consensusKey, bytes _signatures) returns()
func (_Autonity *AutonityTransactorSession) RegisterValidator(_enode string, _oracleAddress common.Address, _consensusKey []byte, _signatures []byte) (*types.Transaction, error) {
	return _Autonity.Contract.RegisterValidator(&_Autonity.TransactOpts, _enode, _oracleAddress, _consensusKey, _signatures)
}

// ResetContractUpgrade is a paid mutator transaction binding the contract method 0xcf9c5719.
//
// Solidity: function resetContractUpgrade() returns()
func (_Autonity *AutonityTransactor) ResetContractUpgrade(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "resetContractUpgrade")
}

// ResetContractUpgrade is a paid mutator transaction binding the contract method 0xcf9c5719.
//
// Solidity: function resetContractUpgrade() returns()
func (_Autonity *AutonitySession) ResetContractUpgrade() (*types.Transaction, error) {
	return _Autonity.Contract.ResetContractUpgrade(&_Autonity.TransactOpts)
}

// ResetContractUpgrade is a paid mutator transaction binding the contract method 0xcf9c5719.
//
// Solidity: function resetContractUpgrade() returns()
func (_Autonity *AutonityTransactorSession) ResetContractUpgrade() (*types.Transaction, error) {
	return _Autonity.Contract.ResetContractUpgrade(&_Autonity.TransactOpts)
}

// SetAccountabilityContract is a paid mutator transaction binding the contract method 0x1250a28d.
//
// Solidity: function setAccountabilityContract(address _address) returns()
func (_Autonity *AutonityTransactor) SetAccountabilityContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setAccountabilityContract", _address)
}

// SetAccountabilityContract is a paid mutator transaction binding the contract method 0x1250a28d.
//
// Solidity: function setAccountabilityContract(address _address) returns()
func (_Autonity *AutonitySession) SetAccountabilityContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetAccountabilityContract(&_Autonity.TransactOpts, _address)
}

// SetAccountabilityContract is a paid mutator transaction binding the contract method 0x1250a28d.
//
// Solidity: function setAccountabilityContract(address _address) returns()
func (_Autonity *AutonityTransactorSession) SetAccountabilityContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetAccountabilityContract(&_Autonity.TransactOpts, _address)
}

// SetAcuContract is a paid mutator transaction binding the contract method 0xd372c07e.
//
// Solidity: function setAcuContract(address _address) returns()
func (_Autonity *AutonityTransactor) SetAcuContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setAcuContract", _address)
}

// SetAcuContract is a paid mutator transaction binding the contract method 0xd372c07e.
//
// Solidity: function setAcuContract(address _address) returns()
func (_Autonity *AutonitySession) SetAcuContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetAcuContract(&_Autonity.TransactOpts, _address)
}

// SetAcuContract is a paid mutator transaction binding the contract method 0xd372c07e.
//
// Solidity: function setAcuContract(address _address) returns()
func (_Autonity *AutonityTransactorSession) SetAcuContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetAcuContract(&_Autonity.TransactOpts, _address)
}

// SetAuctioneerContract is a paid mutator transaction binding the contract method 0x5a061362.
//
// Solidity: function setAuctioneerContract(address _address) returns()
func (_Autonity *AutonityTransactor) SetAuctioneerContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setAuctioneerContract", _address)
}

// SetAuctioneerContract is a paid mutator transaction binding the contract method 0x5a061362.
//
// Solidity: function setAuctioneerContract(address _address) returns()
func (_Autonity *AutonitySession) SetAuctioneerContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetAuctioneerContract(&_Autonity.TransactOpts, _address)
}

// SetAuctioneerContract is a paid mutator transaction binding the contract method 0x5a061362.
//
// Solidity: function setAuctioneerContract(address _address) returns()
func (_Autonity *AutonityTransactorSession) SetAuctioneerContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetAuctioneerContract(&_Autonity.TransactOpts, _address)
}

// SetClusteringThreshold is a paid mutator transaction binding the contract method 0x12e7b45d.
//
// Solidity: function setClusteringThreshold(uint256 _threshold) returns()
func (_Autonity *AutonityTransactor) SetClusteringThreshold(opts *bind.TransactOpts, _threshold *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setClusteringThreshold", _threshold)
}

// SetClusteringThreshold is a paid mutator transaction binding the contract method 0x12e7b45d.
//
// Solidity: function setClusteringThreshold(uint256 _threshold) returns()
func (_Autonity *AutonitySession) SetClusteringThreshold(_threshold *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetClusteringThreshold(&_Autonity.TransactOpts, _threshold)
}

// SetClusteringThreshold is a paid mutator transaction binding the contract method 0x12e7b45d.
//
// Solidity: function setClusteringThreshold(uint256 _threshold) returns()
func (_Autonity *AutonityTransactorSession) SetClusteringThreshold(_threshold *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetClusteringThreshold(&_Autonity.TransactOpts, _threshold)
}

// SetCommitteeSize is a paid mutator transaction binding the contract method 0x8bac7dad.
//
// Solidity: function setCommitteeSize(uint256 _size) returns()
func (_Autonity *AutonityTransactor) SetCommitteeSize(opts *bind.TransactOpts, _size *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setCommitteeSize", _size)
}

// SetCommitteeSize is a paid mutator transaction binding the contract method 0x8bac7dad.
//
// Solidity: function setCommitteeSize(uint256 _size) returns()
func (_Autonity *AutonitySession) SetCommitteeSize(_size *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetCommitteeSize(&_Autonity.TransactOpts, _size)
}

// SetCommitteeSize is a paid mutator transaction binding the contract method 0x8bac7dad.
//
// Solidity: function setCommitteeSize(uint256 _size) returns()
func (_Autonity *AutonityTransactorSession) SetCommitteeSize(_size *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetCommitteeSize(&_Autonity.TransactOpts, _size)
}

// SetEip1559Params is a paid mutator transaction binding the contract method 0x56176bc4.
//
// Solidity: function setEip1559Params((uint256,uint256,uint256,uint256) _params) returns()
func (_Autonity *AutonityTransactor) SetEip1559Params(opts *bind.TransactOpts, _params IAutonityEip1559) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setEip1559Params", _params)
}

// SetEip1559Params is a paid mutator transaction binding the contract method 0x56176bc4.
//
// Solidity: function setEip1559Params((uint256,uint256,uint256,uint256) _params) returns()
func (_Autonity *AutonitySession) SetEip1559Params(_params IAutonityEip1559) (*types.Transaction, error) {
	return _Autonity.Contract.SetEip1559Params(&_Autonity.TransactOpts, _params)
}

// SetEip1559Params is a paid mutator transaction binding the contract method 0x56176bc4.
//
// Solidity: function setEip1559Params((uint256,uint256,uint256,uint256) _params) returns()
func (_Autonity *AutonityTransactorSession) SetEip1559Params(_params IAutonityEip1559) (*types.Transaction, error) {
	return _Autonity.Contract.SetEip1559Params(&_Autonity.TransactOpts, _params)
}

// SetEpochPeriod is a paid mutator transaction binding the contract method 0x6b5f444c.
//
// Solidity: function setEpochPeriod(uint256 _period) returns()
func (_Autonity *AutonityTransactor) SetEpochPeriod(opts *bind.TransactOpts, _period *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setEpochPeriod", _period)
}

// SetEpochPeriod is a paid mutator transaction binding the contract method 0x6b5f444c.
//
// Solidity: function setEpochPeriod(uint256 _period) returns()
func (_Autonity *AutonitySession) SetEpochPeriod(_period *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetEpochPeriod(&_Autonity.TransactOpts, _period)
}

// SetEpochPeriod is a paid mutator transaction binding the contract method 0x6b5f444c.
//
// Solidity: function setEpochPeriod(uint256 _period) returns()
func (_Autonity *AutonityTransactorSession) SetEpochPeriod(_period *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetEpochPeriod(&_Autonity.TransactOpts, _period)
}

// SetGasLimit is a paid mutator transaction binding the contract method 0xee7d72b4.
//
// Solidity: function setGasLimit(uint256 _gasLimit) returns()
func (_Autonity *AutonityTransactor) SetGasLimit(opts *bind.TransactOpts, _gasLimit *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setGasLimit", _gasLimit)
}

// SetGasLimit is a paid mutator transaction binding the contract method 0xee7d72b4.
//
// Solidity: function setGasLimit(uint256 _gasLimit) returns()
func (_Autonity *AutonitySession) SetGasLimit(_gasLimit *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetGasLimit(&_Autonity.TransactOpts, _gasLimit)
}

// SetGasLimit is a paid mutator transaction binding the contract method 0xee7d72b4.
//
// Solidity: function setGasLimit(uint256 _gasLimit) returns()
func (_Autonity *AutonityTransactorSession) SetGasLimit(_gasLimit *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetGasLimit(&_Autonity.TransactOpts, _gasLimit)
}

// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d.
//
// Solidity: function setInflationControllerContract(address _address) returns()
func (_Autonity *AutonityTransactor) SetInflationControllerContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setInflationControllerContract", _address)
}

// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d.
//
// Solidity: function setInflationControllerContract(address _address) returns()
func (_Autonity *AutonitySession) SetInflationControllerContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetInflationControllerContract(&_Autonity.TransactOpts, _address)
}

// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d.
//
// Solidity: function setInflationControllerContract(address _address) returns()
func (_Autonity *AutonityTransactorSession) SetInflationControllerContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetInflationControllerContract(&_Autonity.TransactOpts, _address)
}

// SetLiquidLogicContract is a paid mutator transaction binding the contract method 0x15ef30f8.
//
// Solidity: function setLiquidLogicContract(address _contract) returns()
func (_Autonity *AutonityTransactor) SetLiquidLogicContract(opts *bind.TransactOpts, _contract common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setLiquidLogicContract", _contract)
}

// SetLiquidLogicContract is a paid mutator transaction binding the contract method 0x15ef30f8.
//
// Solidity: function setLiquidLogicContract(address _contract) returns()
func (_Autonity *AutonitySession) SetLiquidLogicContract(_contract common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetLiquidLogicContract(&_Autonity.TransactOpts, _contract)
}

// SetLiquidLogicContract is a paid mutator transaction binding the contract method 0x15ef30f8.
//
// Solidity: function setLiquidLogicContract(address _contract) returns()
func (_Autonity *AutonityTransactorSession) SetLiquidLogicContract(_contract common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetLiquidLogicContract(&_Autonity.TransactOpts, _contract)
}

// SetMaxScheduleDuration is a paid mutator transaction binding the contract method 0x8bb2e477.
//
// Solidity: function setMaxScheduleDuration(uint256 _newMaxDuration) returns()
func (_Autonity *AutonityTransactor) SetMaxScheduleDuration(opts *bind.TransactOpts, _newMaxDuration *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setMaxScheduleDuration", _newMaxDuration)
}

// SetMaxScheduleDuration is a paid mutator transaction binding the contract method 0x8bb2e477.
//
// Solidity: function setMaxScheduleDuration(uint256 _newMaxDuration) returns()
func (_Autonity *AutonitySession) SetMaxScheduleDuration(_newMaxDuration *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetMaxScheduleDuration(&_Autonity.TransactOpts, _newMaxDuration)
}

// SetMaxScheduleDuration is a paid mutator transaction binding the contract method 0x8bb2e477.
//
// Solidity: function setMaxScheduleDuration(uint256 _newMaxDuration) returns()
func (_Autonity *AutonityTransactorSession) SetMaxScheduleDuration(_newMaxDuration *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetMaxScheduleDuration(&_Autonity.TransactOpts, _newMaxDuration)
}

// SetOmissionAccountabilityContract is a paid mutator transaction binding the contract method 0xb47c3eaa.
//
// Solidity: function setOmissionAccountabilityContract(address _address) returns()
func (_Autonity *AutonityTransactor) SetOmissionAccountabilityContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setOmissionAccountabilityContract", _address)
}

// SetOmissionAccountabilityContract is a paid mutator transaction binding the contract method 0xb47c3eaa.
//
// Solidity: function setOmissionAccountabilityContract(address _address) returns()
func (_Autonity *AutonitySession) SetOmissionAccountabilityContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetOmissionAccountabilityContract(&_Autonity.TransactOpts, _address)
}

// SetOmissionAccountabilityContract is a paid mutator transaction binding the contract method 0xb47c3eaa.
//
// Solidity: function setOmissionAccountabilityContract(address _address) returns()
func (_Autonity *AutonityTransactorSession) SetOmissionAccountabilityContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetOmissionAccountabilityContract(&_Autonity.TransactOpts, _address)
}

// SetOperatorAccount is a paid mutator transaction binding the contract method 0x520fdbbc.
//
// Solidity: function setOperatorAccount(address _account) returns()
func (_Autonity *AutonityTransactor) SetOperatorAccount(opts *bind.TransactOpts, _account common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setOperatorAccount", _account)
}

// SetOperatorAccount is a paid mutator transaction binding the contract method 0x520fdbbc.
//
// Solidity: function setOperatorAccount(address _account) returns()
func (_Autonity *AutonitySession) SetOperatorAccount(_account common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetOperatorAccount(&_Autonity.TransactOpts, _account)
}

// SetOperatorAccount is a paid mutator transaction binding the contract method 0x520fdbbc.
//
// Solidity: function setOperatorAccount(address _account) returns()
func (_Autonity *AutonityTransactorSession) SetOperatorAccount(_account common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetOperatorAccount(&_Autonity.TransactOpts, _account)
}

// SetOracleContract is a paid mutator transaction binding the contract method 0x496ccd9b.
//
// Solidity: function setOracleContract(address _address) returns()
func (_Autonity *AutonityTransactor) SetOracleContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setOracleContract", _address)
}

// SetOracleContract is a paid mutator transaction binding the contract method 0x496ccd9b.
//
// Solidity: function setOracleContract(address _address) returns()
func (_Autonity *AutonitySession) SetOracleContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetOracleContract(&_Autonity.TransactOpts, _address)
}

// SetOracleContract is a paid mutator transaction binding the contract method 0x496ccd9b.
//
// Solidity: function setOracleContract(address _address) returns()
func (_Autonity *AutonityTransactorSession) SetOracleContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetOracleContract(&_Autonity.TransactOpts, _address)
}

// SetOracleRewardRate is a paid mutator transaction binding the contract method 0xed5676e9.
//
// Solidity: function setOracleRewardRate(uint256 _oracleRewardRate) returns()
func (_Autonity *AutonityTransactor) SetOracleRewardRate(opts *bind.TransactOpts, _oracleRewardRate *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setOracleRewardRate", _oracleRewardRate)
}

// SetOracleRewardRate is a paid mutator transaction binding the contract method 0xed5676e9.
//
// Solidity: function setOracleRewardRate(uint256 _oracleRewardRate) returns()
func (_Autonity *AutonitySession) SetOracleRewardRate(_oracleRewardRate *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetOracleRewardRate(&_Autonity.TransactOpts, _oracleRewardRate)
}

// SetOracleRewardRate is a paid mutator transaction binding the contract method 0xed5676e9.
//
// Solidity: function setOracleRewardRate(uint256 _oracleRewardRate) returns()
func (_Autonity *AutonityTransactorSession) SetOracleRewardRate(_oracleRewardRate *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetOracleRewardRate(&_Autonity.TransactOpts, _oracleRewardRate)
}

// SetProposerRewardRate is a paid mutator transaction binding the contract method 0x416f86a2.
//
// Solidity: function setProposerRewardRate(uint256 _proposerRewardRate) returns()
func (_Autonity *AutonityTransactor) SetProposerRewardRate(opts *bind.TransactOpts, _proposerRewardRate *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setProposerRewardRate", _proposerRewardRate)
}

// SetProposerRewardRate is a paid mutator transaction binding the contract method 0x416f86a2.
//
// Solidity: function setProposerRewardRate(uint256 _proposerRewardRate) returns()
func (_Autonity *AutonitySession) SetProposerRewardRate(_proposerRewardRate *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetProposerRewardRate(&_Autonity.TransactOpts, _proposerRewardRate)
}

// SetProposerRewardRate is a paid mutator transaction binding the contract method 0x416f86a2.
//
// Solidity: function setProposerRewardRate(uint256 _proposerRewardRate) returns()
func (_Autonity *AutonityTransactorSession) SetProposerRewardRate(_proposerRewardRate *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetProposerRewardRate(&_Autonity.TransactOpts, _proposerRewardRate)
}

// SetSlasher is a paid mutator transaction binding the contract method 0xaabc2496.
//
// Solidity: function setSlasher(address _slasher) returns()
func (_Autonity *AutonityTransactor) SetSlasher(opts *bind.TransactOpts, _slasher common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setSlasher", _slasher)
}

// SetSlasher is a paid mutator transaction binding the contract method 0xaabc2496.
//
// Solidity: function setSlasher(address _slasher) returns()
func (_Autonity *AutonitySession) SetSlasher(_slasher common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetSlasher(&_Autonity.TransactOpts, _slasher)
}

// SetSlasher is a paid mutator transaction binding the contract method 0xaabc2496.
//
// Solidity: function setSlasher(address _slasher) returns()
func (_Autonity *AutonityTransactorSession) SetSlasher(_slasher common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetSlasher(&_Autonity.TransactOpts, _slasher)
}

// SetStabilizationContract is a paid mutator transaction binding the contract method 0xcfd19fb9.
//
// Solidity: function setStabilizationContract(address _address) returns()
func (_Autonity *AutonityTransactor) SetStabilizationContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setStabilizationContract", _address)
}

// SetStabilizationContract is a paid mutator transaction binding the contract method 0xcfd19fb9.
//
// Solidity: function setStabilizationContract(address _address) returns()
func (_Autonity *AutonitySession) SetStabilizationContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetStabilizationContract(&_Autonity.TransactOpts, _address)
}

// SetStabilizationContract is a paid mutator transaction binding the contract method 0xcfd19fb9.
//
// Solidity: function setStabilizationContract(address _address) returns()
func (_Autonity *AutonityTransactorSession) SetStabilizationContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetStabilizationContract(&_Autonity.TransactOpts, _address)
}

// SetSupplyControlContract is a paid mutator transaction binding the contract method 0xb3ecbadd.
//
// Solidity: function setSupplyControlContract(address _address) returns()
func (_Autonity *AutonityTransactor) SetSupplyControlContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setSupplyControlContract", _address)
}

// SetSupplyControlContract is a paid mutator transaction binding the contract method 0xb3ecbadd.
//
// Solidity: function setSupplyControlContract(address _address) returns()
func (_Autonity *AutonitySession) SetSupplyControlContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetSupplyControlContract(&_Autonity.TransactOpts, _address)
}

// SetSupplyControlContract is a paid mutator transaction binding the contract method 0xb3ecbadd.
//
// Solidity: function setSupplyControlContract(address _address) returns()
func (_Autonity *AutonityTransactorSession) SetSupplyControlContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetSupplyControlContract(&_Autonity.TransactOpts, _address)
}

// SetTreasuryAccount is a paid mutator transaction binding the contract method 0xd886f8a2.
//
// Solidity: function setTreasuryAccount(address _account) returns()
func (_Autonity *AutonityTransactor) SetTreasuryAccount(opts *bind.TransactOpts, _account common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setTreasuryAccount", _account)
}

// SetTreasuryAccount is a paid mutator transaction binding the contract method 0xd886f8a2.
//
// Solidity: function setTreasuryAccount(address _account) returns()
func (_Autonity *AutonitySession) SetTreasuryAccount(_account common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetTreasuryAccount(&_Autonity.TransactOpts, _account)
}

// SetTreasuryAccount is a paid mutator transaction binding the contract method 0xd886f8a2.
//
// Solidity: function setTreasuryAccount(address _account) returns()
func (_Autonity *AutonityTransactorSession) SetTreasuryAccount(_account common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetTreasuryAccount(&_Autonity.TransactOpts, _account)
}

// SetTreasuryFee is a paid mutator transaction binding the contract method 0x77e741c7.
//
// Solidity: function setTreasuryFee(uint256 _treasuryFee) returns()
func (_Autonity *AutonityTransactor) SetTreasuryFee(opts *bind.TransactOpts, _treasuryFee *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setTreasuryFee", _treasuryFee)
}

// SetTreasuryFee is a paid mutator transaction binding the contract method 0x77e741c7.
//
// Solidity: function setTreasuryFee(uint256 _treasuryFee) returns()
func (_Autonity *AutonitySession) SetTreasuryFee(_treasuryFee *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetTreasuryFee(&_Autonity.TransactOpts, _treasuryFee)
}

// SetTreasuryFee is a paid mutator transaction binding the contract method 0x77e741c7.
//
// Solidity: function setTreasuryFee(uint256 _treasuryFee) returns()
func (_Autonity *AutonityTransactorSession) SetTreasuryFee(_treasuryFee *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetTreasuryFee(&_Autonity.TransactOpts, _treasuryFee)
}

// SetUnbondingPeriod is a paid mutator transaction binding the contract method 0x114eaf55.
//
// Solidity: function setUnbondingPeriod(uint256 _period) returns()
func (_Autonity *AutonityTransactor) SetUnbondingPeriod(opts *bind.TransactOpts, _period *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setUnbondingPeriod", _period)
}

// SetUnbondingPeriod is a paid mutator transaction binding the contract method 0x114eaf55.
//
// Solidity: function setUnbondingPeriod(uint256 _period) returns()
func (_Autonity *AutonitySession) SetUnbondingPeriod(_period *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetUnbondingPeriod(&_Autonity.TransactOpts, _period)
}

// SetUnbondingPeriod is a paid mutator transaction binding the contract method 0x114eaf55.
//
// Solidity: function setUnbondingPeriod(uint256 _period) returns()
func (_Autonity *AutonityTransactorSession) SetUnbondingPeriod(_period *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetUnbondingPeriod(&_Autonity.TransactOpts, _period)
}

// SetUpgradeManagerContract is a paid mutator transaction binding the contract method 0xceaad455.
//
// Solidity: function setUpgradeManagerContract(address _address) returns()
func (_Autonity *AutonityTransactor) SetUpgradeManagerContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setUpgradeManagerContract", _address)
}

// SetUpgradeManagerContract is a paid mutator transaction binding the contract method 0xceaad455.
//
// Solidity: function setUpgradeManagerContract(address _address) returns()
func (_Autonity *AutonitySession) SetUpgradeManagerContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetUpgradeManagerContract(&_Autonity.TransactOpts, _address)
}

// SetUpgradeManagerContract is a paid mutator transaction binding the contract method 0xceaad455.
//
// Solidity: function setUpgradeManagerContract(address _address) returns()
func (_Autonity *AutonityTransactorSession) SetUpgradeManagerContract(_address common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetUpgradeManagerContract(&_Autonity.TransactOpts, _address)
}

// SetWithheldRewardsPool is a paid mutator transaction binding the contract method 0x39f9eb1f.
//
// Solidity: function setWithheldRewardsPool(address _pool) returns()
func (_Autonity *AutonityTransactor) SetWithheldRewardsPool(opts *bind.TransactOpts, _pool common.Address) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setWithheldRewardsPool", _pool)
}

// SetWithheldRewardsPool is a paid mutator transaction binding the contract method 0x39f9eb1f.
//
// Solidity: function setWithheldRewardsPool(address _pool) returns()
func (_Autonity *AutonitySession) SetWithheldRewardsPool(_pool common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetWithheldRewardsPool(&_Autonity.TransactOpts, _pool)
}

// SetWithheldRewardsPool is a paid mutator transaction binding the contract method 0x39f9eb1f.
//
// Solidity: function setWithheldRewardsPool(address _pool) returns()
func (_Autonity *AutonityTransactorSession) SetWithheldRewardsPool(_pool common.Address) (*types.Transaction, error) {
	return _Autonity.Contract.SetWithheldRewardsPool(&_Autonity.TransactOpts, _pool)
}

// SetWithholdingThreshold is a paid mutator transaction binding the contract method 0x905d76e9.
//
// Solidity: function setWithholdingThreshold(uint256 _withholdingThreshold) returns()
func (_Autonity *AutonityTransactor) SetWithholdingThreshold(opts *bind.TransactOpts, _withholdingThreshold *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "setWithholdingThreshold", _withholdingThreshold)
}

// SetWithholdingThreshold is a paid mutator transaction binding the contract method 0x905d76e9.
//
// Solidity: function setWithholdingThreshold(uint256 _withholdingThreshold) returns()
func (_Autonity *AutonitySession) SetWithholdingThreshold(_withholdingThreshold *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetWithholdingThreshold(&_Autonity.TransactOpts, _withholdingThreshold)
}

// SetWithholdingThreshold is a paid mutator transaction binding the contract method 0x905d76e9.
//
// Solidity: function setWithholdingThreshold(uint256 _withholdingThreshold) returns()
func (_Autonity *AutonityTransactorSession) SetWithholdingThreshold(_withholdingThreshold *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.SetWithholdingThreshold(&_Autonity.TransactOpts, _withholdingThreshold)
}

// Slash is a paid mutator transaction binding the contract method 0x02fb4d85.
//
// Solidity: function slash(address _nodeAddress, uint256 _slashingRate) returns(uint256 slashingAmount)
func (_Autonity *AutonityTransactor) Slash(opts *bind.TransactOpts, _nodeAddress common.Address, _slashingRate *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "slash", _nodeAddress, _slashingRate)
}

// Slash is a paid mutator transaction binding the contract method 0x02fb4d85.
//
// Solidity: function slash(address _nodeAddress, uint256 _slashingRate) returns(uint256 slashingAmount)
func (_Autonity *AutonitySession) Slash(_nodeAddress common.Address, _slashingRate *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Slash(&_Autonity.TransactOpts, _nodeAddress, _slashingRate)
}

// Slash is a paid mutator transaction binding the contract method 0x02fb4d85.
//
// Solidity: function slash(address _nodeAddress, uint256 _slashingRate) returns(uint256 slashingAmount)
func (_Autonity *AutonityTransactorSession) Slash(_nodeAddress common.Address, _slashingRate *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Slash(&_Autonity.TransactOpts, _nodeAddress, _slashingRate)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0x122b4122.
//
// Solidity: function slashAndJail(address _nodeAddress, uint256 _slashingRate, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns(uint256 slashingAmount, uint256 jailReleaseBlock, bool isJailbound)
func (_Autonity *AutonityTransactor) SlashAndJail(opts *bind.TransactOpts, _nodeAddress common.Address, _slashingRate *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "slashAndJail", _nodeAddress, _slashingRate, _jailtime, _newJailedState, _newJailboundState)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0x122b4122.
//
// Solidity: function slashAndJail(address _nodeAddress, uint256 _slashingRate, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns(uint256 slashingAmount, uint256 jailReleaseBlock, bool isJailbound)
func (_Autonity *AutonitySession) SlashAndJail(_nodeAddress common.Address, _slashingRate *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _Autonity.Contract.SlashAndJail(&_Autonity.TransactOpts, _nodeAddress, _slashingRate, _jailtime, _newJailedState, _newJailboundState)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0x122b4122.
//
// Solidity: function slashAndJail(address _nodeAddress, uint256 _slashingRate, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns(uint256 slashingAmount, uint256 jailReleaseBlock, bool isJailbound)
func (_Autonity *AutonityTransactorSession) SlashAndJail(_nodeAddress common.Address, _slashingRate *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _Autonity.Contract.SlashAndJail(&_Autonity.TransactOpts, _nodeAddress, _slashingRate, _jailtime, _newJailedState, _newJailboundState)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address _recipient, uint256 _amount) returns(bool)
func (_Autonity *AutonityTransactor) Transfer(opts *bind.TransactOpts, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "transfer", _recipient, _amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address _recipient, uint256 _amount) returns(bool)
func (_Autonity *AutonitySession) Transfer(_recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Transfer(&_Autonity.TransactOpts, _recipient, _amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address _recipient, uint256 _amount) returns(bool)
func (_Autonity *AutonityTransactorSession) Transfer(_recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Transfer(&_Autonity.TransactOpts, _recipient, _amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool)
func (_Autonity *AutonityTransactor) TransferFrom(opts *bind.TransactOpts, _sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "transferFrom", _sender, _recipient, _amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool)
func (_Autonity *AutonitySession) TransferFrom(_sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.TransferFrom(&_Autonity.TransactOpts, _sender, _recipient, _amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool)
func (_Autonity *AutonityTransactorSession) TransferFrom(_sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.TransferFrom(&_Autonity.TransactOpts, _sender, _recipient, _amount)
}

// Unbond is a paid mutator transaction binding the contract method 0xa5d059ca.
//
// Solidity: function unbond(address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonityTransactor) Unbond(opts *bind.TransactOpts, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "unbond", _validator, _amount)
}

// Unbond is a paid mutator transaction binding the contract method 0xa5d059ca.
//
// Solidity: function unbond(address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonitySession) Unbond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Unbond(&_Autonity.TransactOpts, _validator, _amount)
}

// Unbond is a paid mutator transaction binding the contract method 0xa5d059ca.
//
// Solidity: function unbond(address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonityTransactorSession) Unbond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.Unbond(&_Autonity.TransactOpts, _validator, _amount)
}

// UnbondFrom is a paid mutator transaction binding the contract method 0xa9a7d7c9.
//
// Solidity: function unbondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonityTransactor) UnbondFrom(opts *bind.TransactOpts, _account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "unbondFrom", _account, _validator, _amount)
}

// UnbondFrom is a paid mutator transaction binding the contract method 0xa9a7d7c9.
//
// Solidity: function unbondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonitySession) UnbondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.UnbondFrom(&_Autonity.TransactOpts, _account, _validator, _amount)
}

// UnbondFrom is a paid mutator transaction binding the contract method 0xa9a7d7c9.
//
// Solidity: function unbondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_Autonity *AutonityTransactorSession) UnbondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _Autonity.Contract.UnbondFrom(&_Autonity.TransactOpts, _account, _validator, _amount)
}

// UpdateEnode is a paid mutator transaction binding the contract method 0x784304b5.
//
// Solidity: function updateEnode(address _nodeAddress, string _enode) returns()
func (_Autonity *AutonityTransactor) UpdateEnode(opts *bind.TransactOpts, _nodeAddress common.Address, _enode string) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "updateEnode", _nodeAddress, _enode)
}

// UpdateEnode is a paid mutator transaction binding the contract method 0x784304b5.
//
// Solidity: function updateEnode(address _nodeAddress, string _enode) returns()
func (_Autonity *AutonitySession) UpdateEnode(_nodeAddress common.Address, _enode string) (*types.Transaction, error) {
	return _Autonity.Contract.UpdateEnode(&_Autonity.TransactOpts, _nodeAddress, _enode)
}

// UpdateEnode is a paid mutator transaction binding the contract method 0x784304b5.
//
// Solidity: function updateEnode(address _nodeAddress, string _enode) returns()
func (_Autonity *AutonityTransactorSession) UpdateEnode(_nodeAddress common.Address, _enode string) (*types.Transaction, error) {
	return _Autonity.Contract.UpdateEnode(&_Autonity.TransactOpts, _nodeAddress, _enode)
}

// UpgradeContract is a paid mutator transaction binding the contract method 0xb2ea9adb.
//
// Solidity: function upgradeContract(bytes _bytecode, string _abi) returns()
func (_Autonity *AutonityTransactor) UpgradeContract(opts *bind.TransactOpts, _bytecode []byte, _abi string) (*types.Transaction, error) {
	return _Autonity.contract.Transact(opts, "upgradeContract", _bytecode, _abi)
}

// UpgradeContract is a paid mutator transaction binding the contract method 0xb2ea9adb.
//
// Solidity: function upgradeContract(bytes _bytecode, string _abi) returns()
func (_Autonity *AutonitySession) UpgradeContract(_bytecode []byte, _abi string) (*types.Transaction, error) {
	return _Autonity.Contract.UpgradeContract(&_Autonity.TransactOpts, _bytecode, _abi)
}

// UpgradeContract is a paid mutator transaction binding the contract method 0xb2ea9adb.
//
// Solidity: function upgradeContract(bytes _bytecode, string _abi) returns()
func (_Autonity *AutonityTransactorSession) UpgradeContract(_bytecode []byte, _abi string) (*types.Transaction, error) {
	return _Autonity.Contract.UpgradeContract(&_Autonity.TransactOpts, _bytecode, _abi)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_Autonity *AutonityTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) {
	return _Autonity.contract.RawTransact(opts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_Autonity *AutonitySession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _Autonity.Contract.Fallback(&_Autonity.TransactOpts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_Autonity *AutonityTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _Autonity.Contract.Fallback(&_Autonity.TransactOpts, calldata)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_Autonity *AutonityTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Autonity.contract.RawTransact(opts, nil) // calldata is disallowed for receive function
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_Autonity *AutonitySession) Receive() (*types.Transaction, error) {
	return _Autonity.Contract.Receive(&_Autonity.TransactOpts)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_Autonity *AutonityTransactorSession) Receive() (*types.Transaction, error) {
	return _Autonity.Contract.Receive(&_Autonity.TransactOpts)
}

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

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

// AutonityActivatedValidator represents a ActivatedValidator event raised by the Autonity contract.
type AutonityActivatedValidator struct {
	Treasury       common.Address
	Addr           common.Address
	EffectiveBlock *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterActivatedValidator is a free log retrieval operation binding the contract event 0x60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5.
//
// Solidity: event ActivatedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_Autonity *AutonityFilterer) FilterActivatedValidator(opts *bind.FilterOpts, treasury []common.Address, addr []common.Address) (*AutonityActivatedValidatorIterator, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "ActivatedValidator", treasuryRule, addrRule)
	if err != nil {
		return nil, err
	}
	return &AutonityActivatedValidatorIterator{contract: _Autonity.contract, event: "ActivatedValidator", logs: logs, sub: sub}, nil
}

// WatchActivatedValidator is a free log subscription operation binding the contract event 0x60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5.
//
// Solidity: event ActivatedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_Autonity *AutonityFilterer) WatchActivatedValidator(opts *bind.WatchOpts, sink chan<- *AutonityActivatedValidator, treasury []common.Address, addr []common.Address) (event.Subscription, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "ActivatedValidator", treasuryRule, addrRule)
	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(AutonityActivatedValidator)
				if err := _Autonity.contract.UnpackLog(event, "ActivatedValidator", 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
}

// ParseActivatedValidator is a log parse operation binding the contract event 0x60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5.
//
// Solidity: event ActivatedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_Autonity *AutonityFilterer) ParseActivatedValidator(log types.Log) (*AutonityActivatedValidator, error) {
	event := new(AutonityActivatedValidator)
	if err := _Autonity.contract.UnpackLog(event, "ActivatedValidator", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityApproval represents a Approval event raised by the Autonity contract.
type AutonityApproval struct {
	Owner   common.Address
	Spender common.Address
	Value   *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_Autonity *AutonityFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*AutonityApprovalIterator, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
	if err != nil {
		return nil, err
	}
	return &AutonityApprovalIterator{contract: _Autonity.contract, event: "Approval", logs: logs, sub: sub}, nil
}

// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_Autonity *AutonityFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *AutonityApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
	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(AutonityApproval)
				if err := _Autonity.contract.UnpackLog(event, "Approval", 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
}

// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_Autonity *AutonityFilterer) ParseApproval(log types.Log) (*AutonityApproval, error) {
	event := new(AutonityApproval)
	if err := _Autonity.contract.UnpackLog(event, "Approval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityBondingApproval represents a BondingApproval event raised by the Autonity contract.
type AutonityBondingApproval struct {
	Owner  common.Address
	Caller common.Address
	Value  *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterBondingApproval is a free log retrieval operation binding the contract event 0x78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea.
//
// Solidity: event BondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_Autonity *AutonityFilterer) FilterBondingApproval(opts *bind.FilterOpts, _owner []common.Address, _caller []common.Address) (*AutonityBondingApprovalIterator, error) {

	var _ownerRule []interface{}
	for _, _ownerItem := range _owner {
		_ownerRule = append(_ownerRule, _ownerItem)
	}
	var _callerRule []interface{}
	for _, _callerItem := range _caller {
		_callerRule = append(_callerRule, _callerItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "BondingApproval", _ownerRule, _callerRule)
	if err != nil {
		return nil, err
	}
	return &AutonityBondingApprovalIterator{contract: _Autonity.contract, event: "BondingApproval", logs: logs, sub: sub}, nil
}

// WatchBondingApproval is a free log subscription operation binding the contract event 0x78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea.
//
// Solidity: event BondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_Autonity *AutonityFilterer) WatchBondingApproval(opts *bind.WatchOpts, sink chan<- *AutonityBondingApproval, _owner []common.Address, _caller []common.Address) (event.Subscription, error) {

	var _ownerRule []interface{}
	for _, _ownerItem := range _owner {
		_ownerRule = append(_ownerRule, _ownerItem)
	}
	var _callerRule []interface{}
	for _, _callerItem := range _caller {
		_callerRule = append(_callerRule, _callerItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "BondingApproval", _ownerRule, _callerRule)
	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(AutonityBondingApproval)
				if err := _Autonity.contract.UnpackLog(event, "BondingApproval", 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
}

// ParseBondingApproval is a log parse operation binding the contract event 0x78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea.
//
// Solidity: event BondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_Autonity *AutonityFilterer) ParseBondingApproval(log types.Log) (*AutonityBondingApproval, error) {
	event := new(AutonityBondingApproval)
	if err := _Autonity.contract.UnpackLog(event, "BondingApproval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityBondingRejected represents a BondingRejected event raised by the Autonity contract.
type AutonityBondingRejected struct {
	Validator common.Address
	Delegator common.Address
	Amount    *big.Int
	State     uint8
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterBondingRejected is a free log retrieval operation binding the contract event 0x1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342.
//
// Solidity: event BondingRejected(address indexed validator, address indexed delegator, uint256 amount, uint8 state)
func (_Autonity *AutonityFilterer) FilterBondingRejected(opts *bind.FilterOpts, validator []common.Address, delegator []common.Address) (*AutonityBondingRejectedIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "BondingRejected", validatorRule, delegatorRule)
	if err != nil {
		return nil, err
	}
	return &AutonityBondingRejectedIterator{contract: _Autonity.contract, event: "BondingRejected", logs: logs, sub: sub}, nil
}

// WatchBondingRejected is a free log subscription operation binding the contract event 0x1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342.
//
// Solidity: event BondingRejected(address indexed validator, address indexed delegator, uint256 amount, uint8 state)
func (_Autonity *AutonityFilterer) WatchBondingRejected(opts *bind.WatchOpts, sink chan<- *AutonityBondingRejected, validator []common.Address, delegator []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "BondingRejected", validatorRule, delegatorRule)
	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(AutonityBondingRejected)
				if err := _Autonity.contract.UnpackLog(event, "BondingRejected", 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
}

// ParseBondingRejected is a log parse operation binding the contract event 0x1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342.
//
// Solidity: event BondingRejected(address indexed validator, address indexed delegator, uint256 amount, uint8 state)
func (_Autonity *AutonityFilterer) ParseBondingRejected(log types.Log) (*AutonityBondingRejected, error) {
	event := new(AutonityBondingRejected)
	if err := _Autonity.contract.UnpackLog(event, "BondingRejected", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityBurnedStake represents a BurnedStake event raised by the Autonity contract.
type AutonityBurnedStake struct {
	Addr   common.Address
	Amount *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterBurnedStake is a free log retrieval operation binding the contract event 0x5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3.
//
// Solidity: event BurnedStake(address indexed addr, uint256 amount)
func (_Autonity *AutonityFilterer) FilterBurnedStake(opts *bind.FilterOpts, addr []common.Address) (*AutonityBurnedStakeIterator, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "BurnedStake", addrRule)
	if err != nil {
		return nil, err
	}
	return &AutonityBurnedStakeIterator{contract: _Autonity.contract, event: "BurnedStake", logs: logs, sub: sub}, nil
}

// WatchBurnedStake is a free log subscription operation binding the contract event 0x5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3.
//
// Solidity: event BurnedStake(address indexed addr, uint256 amount)
func (_Autonity *AutonityFilterer) WatchBurnedStake(opts *bind.WatchOpts, sink chan<- *AutonityBurnedStake, addr []common.Address) (event.Subscription, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "BurnedStake", addrRule)
	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(AutonityBurnedStake)
				if err := _Autonity.contract.UnpackLog(event, "BurnedStake", 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
}

// ParseBurnedStake is a log parse operation binding the contract event 0x5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3.
//
// Solidity: event BurnedStake(address indexed addr, uint256 amount)
func (_Autonity *AutonityFilterer) ParseBurnedStake(log types.Log) (*AutonityBurnedStake, error) {
	event := new(AutonityBurnedStake)
	if err := _Autonity.contract.UnpackLog(event, "BurnedStake", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityCallFailed represents a CallFailed event raised by the Autonity contract.
type AutonityCallFailed struct {
	To              common.Address
	MethodSignature string
	ReturnData      []byte
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterCallFailed is a free log retrieval operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_Autonity *AutonityFilterer) FilterCallFailed(opts *bind.FilterOpts) (*AutonityCallFailedIterator, error) {

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "CallFailed")
	if err != nil {
		return nil, err
	}
	return &AutonityCallFailedIterator{contract: _Autonity.contract, event: "CallFailed", logs: logs, sub: sub}, nil
}

// WatchCallFailed is a free log subscription operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_Autonity *AutonityFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *AutonityCallFailed) (event.Subscription, error) {

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

// ParseCallFailed is a log parse operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_Autonity *AutonityFilterer) ParseCallFailed(log types.Log) (*AutonityCallFailed, error) {
	event := new(AutonityCallFailed)
	if err := _Autonity.contract.UnpackLog(event, "CallFailed", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityCommissionRateChange represents a CommissionRateChange event raised by the Autonity contract.
type AutonityCommissionRateChange struct {
	Validator common.Address
	Rate      *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterCommissionRateChange is a free log retrieval operation binding the contract event 0x4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf.
//
// Solidity: event CommissionRateChange(address indexed validator, uint256 rate)
func (_Autonity *AutonityFilterer) FilterCommissionRateChange(opts *bind.FilterOpts, validator []common.Address) (*AutonityCommissionRateChangeIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "CommissionRateChange", validatorRule)
	if err != nil {
		return nil, err
	}
	return &AutonityCommissionRateChangeIterator{contract: _Autonity.contract, event: "CommissionRateChange", logs: logs, sub: sub}, nil
}

// WatchCommissionRateChange is a free log subscription operation binding the contract event 0x4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf.
//
// Solidity: event CommissionRateChange(address indexed validator, uint256 rate)
func (_Autonity *AutonityFilterer) WatchCommissionRateChange(opts *bind.WatchOpts, sink chan<- *AutonityCommissionRateChange, validator []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "CommissionRateChange", validatorRule)
	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(AutonityCommissionRateChange)
				if err := _Autonity.contract.UnpackLog(event, "CommissionRateChange", 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
}

// ParseCommissionRateChange is a log parse operation binding the contract event 0x4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf.
//
// Solidity: event CommissionRateChange(address indexed validator, uint256 rate)
func (_Autonity *AutonityFilterer) ParseCommissionRateChange(log types.Log) (*AutonityCommissionRateChange, error) {
	event := new(AutonityCommissionRateChange)
	if err := _Autonity.contract.UnpackLog(event, "CommissionRateChange", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityConfigUpdateAddress represents a ConfigUpdateAddress event raised by the Autonity contract.
type AutonityConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*AutonityConfigUpdateAddressIterator, error) {

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &AutonityConfigUpdateAddressIterator{contract: _Autonity.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *AutonityConfigUpdateAddress) (event.Subscription, error) {

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

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) ParseConfigUpdateAddress(log types.Log) (*AutonityConfigUpdateAddress, error) {
	event := new(AutonityConfigUpdateAddress)
	if err := _Autonity.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityConfigUpdateBool represents a ConfigUpdateBool event raised by the Autonity contract.
type AutonityConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*AutonityConfigUpdateBoolIterator, error) {

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &AutonityConfigUpdateBoolIterator{contract: _Autonity.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *AutonityConfigUpdateBool) (event.Subscription, error) {

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

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) ParseConfigUpdateBool(log types.Log) (*AutonityConfigUpdateBool, error) {
	event := new(AutonityConfigUpdateBool)
	if err := _Autonity.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityConfigUpdateInt represents a ConfigUpdateInt event raised by the Autonity contract.
type AutonityConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*AutonityConfigUpdateIntIterator, error) {

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &AutonityConfigUpdateIntIterator{contract: _Autonity.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *AutonityConfigUpdateInt) (event.Subscription, error) {

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

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) ParseConfigUpdateInt(log types.Log) (*AutonityConfigUpdateInt, error) {
	event := new(AutonityConfigUpdateInt)
	if err := _Autonity.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityConfigUpdateUint represents a ConfigUpdateUint event raised by the Autonity contract.
type AutonityConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*AutonityConfigUpdateUintIterator, error) {

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &AutonityConfigUpdateUintIterator{contract: _Autonity.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *AutonityConfigUpdateUint) (event.Subscription, error) {

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

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Autonity *AutonityFilterer) ParseConfigUpdateUint(log types.Log) (*AutonityConfigUpdateUint, error) {
	event := new(AutonityConfigUpdateUint)
	if err := _Autonity.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityEip1559ParamsUpdate represents a Eip1559ParamsUpdate event raised by the Autonity contract.
type AutonityEip1559ParamsUpdate struct {
	OldParams IAutonityEip1559
	NewParams IAutonityEip1559
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterEip1559ParamsUpdate is a free log retrieval operation binding the contract event 0xa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc.
//
// Solidity: event Eip1559ParamsUpdate((uint256,uint256,uint256,uint256) oldParams, (uint256,uint256,uint256,uint256) newParams)
func (_Autonity *AutonityFilterer) FilterEip1559ParamsUpdate(opts *bind.FilterOpts) (*AutonityEip1559ParamsUpdateIterator, error) {

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "Eip1559ParamsUpdate")
	if err != nil {
		return nil, err
	}
	return &AutonityEip1559ParamsUpdateIterator{contract: _Autonity.contract, event: "Eip1559ParamsUpdate", logs: logs, sub: sub}, nil
}

// WatchEip1559ParamsUpdate is a free log subscription operation binding the contract event 0xa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc.
//
// Solidity: event Eip1559ParamsUpdate((uint256,uint256,uint256,uint256) oldParams, (uint256,uint256,uint256,uint256) newParams)
func (_Autonity *AutonityFilterer) WatchEip1559ParamsUpdate(opts *bind.WatchOpts, sink chan<- *AutonityEip1559ParamsUpdate) (event.Subscription, error) {

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

// ParseEip1559ParamsUpdate is a log parse operation binding the contract event 0xa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc.
//
// Solidity: event Eip1559ParamsUpdate((uint256,uint256,uint256,uint256) oldParams, (uint256,uint256,uint256,uint256) newParams)
func (_Autonity *AutonityFilterer) ParseEip1559ParamsUpdate(log types.Log) (*AutonityEip1559ParamsUpdate, error) {
	event := new(AutonityEip1559ParamsUpdate)
	if err := _Autonity.contract.UnpackLog(event, "Eip1559ParamsUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityEnodeUpdate represents a EnodeUpdate event raised by the Autonity contract.
type AutonityEnodeUpdate struct {
	Validator common.Address
	OldEnode  string
	NewEnode  string
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterEnodeUpdate is a free log retrieval operation binding the contract event 0x0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b.
//
// Solidity: event EnodeUpdate(address validator, string oldEnode, string newEnode)
func (_Autonity *AutonityFilterer) FilterEnodeUpdate(opts *bind.FilterOpts) (*AutonityEnodeUpdateIterator, error) {

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "EnodeUpdate")
	if err != nil {
		return nil, err
	}
	return &AutonityEnodeUpdateIterator{contract: _Autonity.contract, event: "EnodeUpdate", logs: logs, sub: sub}, nil
}

// WatchEnodeUpdate is a free log subscription operation binding the contract event 0x0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b.
//
// Solidity: event EnodeUpdate(address validator, string oldEnode, string newEnode)
func (_Autonity *AutonityFilterer) WatchEnodeUpdate(opts *bind.WatchOpts, sink chan<- *AutonityEnodeUpdate) (event.Subscription, error) {

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

// ParseEnodeUpdate is a log parse operation binding the contract event 0x0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b.
//
// Solidity: event EnodeUpdate(address validator, string oldEnode, string newEnode)
func (_Autonity *AutonityFilterer) ParseEnodeUpdate(log types.Log) (*AutonityEnodeUpdate, error) {
	event := new(AutonityEnodeUpdate)
	if err := _Autonity.contract.UnpackLog(event, "EnodeUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityEpochPeriodUpdated represents a EpochPeriodUpdated event raised by the Autonity contract.
type AutonityEpochPeriodUpdated struct {
	Period         *big.Int
	AppliedAtBlock *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterEpochPeriodUpdated is a free log retrieval operation binding the contract event 0x2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7.
//
// Solidity: event EpochPeriodUpdated(uint256 period, uint256 appliedAtBlock)
func (_Autonity *AutonityFilterer) FilterEpochPeriodUpdated(opts *bind.FilterOpts) (*AutonityEpochPeriodUpdatedIterator, error) {

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "EpochPeriodUpdated")
	if err != nil {
		return nil, err
	}
	return &AutonityEpochPeriodUpdatedIterator{contract: _Autonity.contract, event: "EpochPeriodUpdated", logs: logs, sub: sub}, nil
}

// WatchEpochPeriodUpdated is a free log subscription operation binding the contract event 0x2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7.
//
// Solidity: event EpochPeriodUpdated(uint256 period, uint256 appliedAtBlock)
func (_Autonity *AutonityFilterer) WatchEpochPeriodUpdated(opts *bind.WatchOpts, sink chan<- *AutonityEpochPeriodUpdated) (event.Subscription, error) {

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

// ParseEpochPeriodUpdated is a log parse operation binding the contract event 0x2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7.
//
// Solidity: event EpochPeriodUpdated(uint256 period, uint256 appliedAtBlock)
func (_Autonity *AutonityFilterer) ParseEpochPeriodUpdated(log types.Log) (*AutonityEpochPeriodUpdated, error) {
	event := new(AutonityEpochPeriodUpdated)
	if err := _Autonity.contract.UnpackLog(event, "EpochPeriodUpdated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityMintedStake represents a MintedStake event raised by the Autonity contract.
type AutonityMintedStake struct {
	Addr   common.Address
	Amount *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterMintedStake is a free log retrieval operation binding the contract event 0x48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf.
//
// Solidity: event MintedStake(address indexed addr, uint256 amount)
func (_Autonity *AutonityFilterer) FilterMintedStake(opts *bind.FilterOpts, addr []common.Address) (*AutonityMintedStakeIterator, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "MintedStake", addrRule)
	if err != nil {
		return nil, err
	}
	return &AutonityMintedStakeIterator{contract: _Autonity.contract, event: "MintedStake", logs: logs, sub: sub}, nil
}

// WatchMintedStake is a free log subscription operation binding the contract event 0x48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf.
//
// Solidity: event MintedStake(address indexed addr, uint256 amount)
func (_Autonity *AutonityFilterer) WatchMintedStake(opts *bind.WatchOpts, sink chan<- *AutonityMintedStake, addr []common.Address) (event.Subscription, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "MintedStake", addrRule)
	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(AutonityMintedStake)
				if err := _Autonity.contract.UnpackLog(event, "MintedStake", 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
}

// ParseMintedStake is a log parse operation binding the contract event 0x48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf.
//
// Solidity: event MintedStake(address indexed addr, uint256 amount)
func (_Autonity *AutonityFilterer) ParseMintedStake(log types.Log) (*AutonityMintedStake, error) {
	event := new(AutonityMintedStake)
	if err := _Autonity.contract.UnpackLog(event, "MintedStake", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityNewBondingRequest represents a NewBondingRequest event raised by the Autonity contract.
type AutonityNewBondingRequest struct {
	Validator     common.Address
	Delegator     common.Address
	Caller        common.Address
	SelfBonded    bool
	Amount        *big.Int
	HeadBondingID *big.Int
	Raw           types.Log // Blockchain specific contextual infos
}

// FilterNewBondingRequest is a free log retrieval operation binding the contract event 0xcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2.
//
// Solidity: event NewBondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headBondingID)
func (_Autonity *AutonityFilterer) FilterNewBondingRequest(opts *bind.FilterOpts, validator []common.Address, delegator []common.Address, caller []common.Address) (*AutonityNewBondingRequestIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "NewBondingRequest", validatorRule, delegatorRule, callerRule)
	if err != nil {
		return nil, err
	}
	return &AutonityNewBondingRequestIterator{contract: _Autonity.contract, event: "NewBondingRequest", logs: logs, sub: sub}, nil
}

// WatchNewBondingRequest is a free log subscription operation binding the contract event 0xcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2.
//
// Solidity: event NewBondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headBondingID)
func (_Autonity *AutonityFilterer) WatchNewBondingRequest(opts *bind.WatchOpts, sink chan<- *AutonityNewBondingRequest, validator []common.Address, delegator []common.Address, caller []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "NewBondingRequest", validatorRule, delegatorRule, callerRule)
	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(AutonityNewBondingRequest)
				if err := _Autonity.contract.UnpackLog(event, "NewBondingRequest", 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
}

// ParseNewBondingRequest is a log parse operation binding the contract event 0xcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2.
//
// Solidity: event NewBondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headBondingID)
func (_Autonity *AutonityFilterer) ParseNewBondingRequest(log types.Log) (*AutonityNewBondingRequest, error) {
	event := new(AutonityNewBondingRequest)
	if err := _Autonity.contract.UnpackLog(event, "NewBondingRequest", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityNewEpoch represents a NewEpoch event raised by the Autonity contract.
type AutonityNewEpoch struct {
	Epoch            *big.Int
	InflationReserve *big.Int
	StakeCirculating *big.Int
	Raw              types.Log // Blockchain specific contextual infos
}

// FilterNewEpoch is a free log retrieval operation binding the contract event 0x3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b58.
//
// Solidity: event NewEpoch(uint256 epoch, uint256 inflationReserve, uint256 stakeCirculating)
func (_Autonity *AutonityFilterer) FilterNewEpoch(opts *bind.FilterOpts) (*AutonityNewEpochIterator, error) {

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "NewEpoch")
	if err != nil {
		return nil, err
	}
	return &AutonityNewEpochIterator{contract: _Autonity.contract, event: "NewEpoch", logs: logs, sub: sub}, nil
}

// WatchNewEpoch is a free log subscription operation binding the contract event 0x3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b58.
//
// Solidity: event NewEpoch(uint256 epoch, uint256 inflationReserve, uint256 stakeCirculating)
func (_Autonity *AutonityFilterer) WatchNewEpoch(opts *bind.WatchOpts, sink chan<- *AutonityNewEpoch) (event.Subscription, error) {

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

// ParseNewEpoch is a log parse operation binding the contract event 0x3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b58.
//
// Solidity: event NewEpoch(uint256 epoch, uint256 inflationReserve, uint256 stakeCirculating)
func (_Autonity *AutonityFilterer) ParseNewEpoch(log types.Log) (*AutonityNewEpoch, error) {
	event := new(AutonityNewEpoch)
	if err := _Autonity.contract.UnpackLog(event, "NewEpoch", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityNewSchedule represents a NewSchedule event raised by the Autonity contract.
type AutonityNewSchedule struct {
	ScheduleVault common.Address
	Amount        *big.Int
	Start         *big.Int
	TotalDuration *big.Int
	Raw           types.Log // Blockchain specific contextual infos
}

// FilterNewSchedule is a free log retrieval operation binding the contract event 0xe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd.
//
// Solidity: event NewSchedule(address indexed scheduleVault, uint256 amount, uint256 start, uint256 totalDuration)
func (_Autonity *AutonityFilterer) FilterNewSchedule(opts *bind.FilterOpts, scheduleVault []common.Address) (*AutonityNewScheduleIterator, error) {

	var scheduleVaultRule []interface{}
	for _, scheduleVaultItem := range scheduleVault {
		scheduleVaultRule = append(scheduleVaultRule, scheduleVaultItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "NewSchedule", scheduleVaultRule)
	if err != nil {
		return nil, err
	}
	return &AutonityNewScheduleIterator{contract: _Autonity.contract, event: "NewSchedule", logs: logs, sub: sub}, nil
}

// WatchNewSchedule is a free log subscription operation binding the contract event 0xe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd.
//
// Solidity: event NewSchedule(address indexed scheduleVault, uint256 amount, uint256 start, uint256 totalDuration)
func (_Autonity *AutonityFilterer) WatchNewSchedule(opts *bind.WatchOpts, sink chan<- *AutonityNewSchedule, scheduleVault []common.Address) (event.Subscription, error) {

	var scheduleVaultRule []interface{}
	for _, scheduleVaultItem := range scheduleVault {
		scheduleVaultRule = append(scheduleVaultRule, scheduleVaultItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "NewSchedule", scheduleVaultRule)
	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(AutonityNewSchedule)
				if err := _Autonity.contract.UnpackLog(event, "NewSchedule", 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
}

// ParseNewSchedule is a log parse operation binding the contract event 0xe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd.
//
// Solidity: event NewSchedule(address indexed scheduleVault, uint256 amount, uint256 start, uint256 totalDuration)
func (_Autonity *AutonityFilterer) ParseNewSchedule(log types.Log) (*AutonityNewSchedule, error) {
	event := new(AutonityNewSchedule)
	if err := _Autonity.contract.UnpackLog(event, "NewSchedule", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityNewUnbondingRequest represents a NewUnbondingRequest event raised by the Autonity contract.
type AutonityNewUnbondingRequest struct {
	Validator       common.Address
	Delegator       common.Address
	Caller          common.Address
	SelfBonded      bool
	Amount          *big.Int
	HeadUnbondingID *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterNewUnbondingRequest is a free log retrieval operation binding the contract event 0x58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c.
//
// Solidity: event NewUnbondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headUnbondingID)
func (_Autonity *AutonityFilterer) FilterNewUnbondingRequest(opts *bind.FilterOpts, validator []common.Address, delegator []common.Address, caller []common.Address) (*AutonityNewUnbondingRequestIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "NewUnbondingRequest", validatorRule, delegatorRule, callerRule)
	if err != nil {
		return nil, err
	}
	return &AutonityNewUnbondingRequestIterator{contract: _Autonity.contract, event: "NewUnbondingRequest", logs: logs, sub: sub}, nil
}

// WatchNewUnbondingRequest is a free log subscription operation binding the contract event 0x58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c.
//
// Solidity: event NewUnbondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headUnbondingID)
func (_Autonity *AutonityFilterer) WatchNewUnbondingRequest(opts *bind.WatchOpts, sink chan<- *AutonityNewUnbondingRequest, validator []common.Address, delegator []common.Address, caller []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "NewUnbondingRequest", validatorRule, delegatorRule, callerRule)
	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(AutonityNewUnbondingRequest)
				if err := _Autonity.contract.UnpackLog(event, "NewUnbondingRequest", 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
}

// ParseNewUnbondingRequest is a log parse operation binding the contract event 0x58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c.
//
// Solidity: event NewUnbondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headUnbondingID)
func (_Autonity *AutonityFilterer) ParseNewUnbondingRequest(log types.Log) (*AutonityNewUnbondingRequest, error) {
	event := new(AutonityNewUnbondingRequest)
	if err := _Autonity.contract.UnpackLog(event, "NewUnbondingRequest", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityPausedValidator represents a PausedValidator event raised by the Autonity contract.
type AutonityPausedValidator struct {
	Treasury       common.Address
	Addr           common.Address
	EffectiveBlock *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterPausedValidator is a free log retrieval operation binding the contract event 0x75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c.
//
// Solidity: event PausedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_Autonity *AutonityFilterer) FilterPausedValidator(opts *bind.FilterOpts, treasury []common.Address, addr []common.Address) (*AutonityPausedValidatorIterator, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "PausedValidator", treasuryRule, addrRule)
	if err != nil {
		return nil, err
	}
	return &AutonityPausedValidatorIterator{contract: _Autonity.contract, event: "PausedValidator", logs: logs, sub: sub}, nil
}

// WatchPausedValidator is a free log subscription operation binding the contract event 0x75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c.
//
// Solidity: event PausedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_Autonity *AutonityFilterer) WatchPausedValidator(opts *bind.WatchOpts, sink chan<- *AutonityPausedValidator, treasury []common.Address, addr []common.Address) (event.Subscription, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "PausedValidator", treasuryRule, addrRule)
	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(AutonityPausedValidator)
				if err := _Autonity.contract.UnpackLog(event, "PausedValidator", 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
}

// ParsePausedValidator is a log parse operation binding the contract event 0x75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c.
//
// Solidity: event PausedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_Autonity *AutonityFilterer) ParsePausedValidator(log types.Log) (*AutonityPausedValidator, error) {
	event := new(AutonityPausedValidator)
	if err := _Autonity.contract.UnpackLog(event, "PausedValidator", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityRegisteredValidator represents a RegisteredValidator event raised by the Autonity contract.
type AutonityRegisteredValidator struct {
	Treasury            common.Address
	Addr                common.Address
	OracleAddress       common.Address
	Enode               string
	LiquidStateContract common.Address
	Raw                 types.Log // Blockchain specific contextual infos
}

// FilterRegisteredValidator is a free log retrieval operation binding the contract event 0x8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c.
//
// Solidity: event RegisteredValidator(address treasury, address addr, address oracleAddress, string enode, address liquidStateContract)
func (_Autonity *AutonityFilterer) FilterRegisteredValidator(opts *bind.FilterOpts) (*AutonityRegisteredValidatorIterator, error) {

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "RegisteredValidator")
	if err != nil {
		return nil, err
	}
	return &AutonityRegisteredValidatorIterator{contract: _Autonity.contract, event: "RegisteredValidator", logs: logs, sub: sub}, nil
}

// WatchRegisteredValidator is a free log subscription operation binding the contract event 0x8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c.
//
// Solidity: event RegisteredValidator(address treasury, address addr, address oracleAddress, string enode, address liquidStateContract)
func (_Autonity *AutonityFilterer) WatchRegisteredValidator(opts *bind.WatchOpts, sink chan<- *AutonityRegisteredValidator) (event.Subscription, error) {

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

// ParseRegisteredValidator is a log parse operation binding the contract event 0x8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c.
//
// Solidity: event RegisteredValidator(address treasury, address addr, address oracleAddress, string enode, address liquidStateContract)
func (_Autonity *AutonityFilterer) ParseRegisteredValidator(log types.Log) (*AutonityRegisteredValidator, error) {
	event := new(AutonityRegisteredValidator)
	if err := _Autonity.contract.UnpackLog(event, "RegisteredValidator", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityRewarded represents a Rewarded event raised by the Autonity contract.
type AutonityRewarded struct {
	Addr               common.Address
	AtnSelfAmount      *big.Int
	AtnDelegatedAmount *big.Int
	NtnSelfAmount      *big.Int
	NtnDelegatedAmount *big.Int
	Raw                types.Log // Blockchain specific contextual infos
}

// FilterRewarded is a free log retrieval operation binding the contract event 0x5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d5.
//
// Solidity: event Rewarded(address indexed addr, uint256 atnSelfAmount, uint256 atnDelegatedAmount, uint256 ntnSelfAmount, uint256 ntnDelegatedAmount)
func (_Autonity *AutonityFilterer) FilterRewarded(opts *bind.FilterOpts, addr []common.Address) (*AutonityRewardedIterator, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "Rewarded", addrRule)
	if err != nil {
		return nil, err
	}
	return &AutonityRewardedIterator{contract: _Autonity.contract, event: "Rewarded", logs: logs, sub: sub}, nil
}

// WatchRewarded is a free log subscription operation binding the contract event 0x5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d5.
//
// Solidity: event Rewarded(address indexed addr, uint256 atnSelfAmount, uint256 atnDelegatedAmount, uint256 ntnSelfAmount, uint256 ntnDelegatedAmount)
func (_Autonity *AutonityFilterer) WatchRewarded(opts *bind.WatchOpts, sink chan<- *AutonityRewarded, addr []common.Address) (event.Subscription, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "Rewarded", addrRule)
	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(AutonityRewarded)
				if err := _Autonity.contract.UnpackLog(event, "Rewarded", 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
}

// ParseRewarded is a log parse operation binding the contract event 0x5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d5.
//
// Solidity: event Rewarded(address indexed addr, uint256 atnSelfAmount, uint256 atnDelegatedAmount, uint256 ntnSelfAmount, uint256 ntnDelegatedAmount)
func (_Autonity *AutonityFilterer) ParseRewarded(log types.Log) (*AutonityRewarded, error) {
	event := new(AutonityRewarded)
	if err := _Autonity.contract.UnpackLog(event, "Rewarded", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityTransfer represents a Transfer event raised by the Autonity contract.
type AutonityTransfer struct {
	From  common.Address
	To    common.Address
	Value *big.Int
	Raw   types.Log // Blockchain specific contextual infos
}

// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_Autonity *AutonityFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*AutonityTransferIterator, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _Autonity.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
	if err != nil {
		return nil, err
	}
	return &AutonityTransferIterator{contract: _Autonity.contract, event: "Transfer", logs: logs, sub: sub}, nil
}

// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_Autonity *AutonityFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *AutonityTransfer, from []common.Address, to []common.Address) (event.Subscription, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _Autonity.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
	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(AutonityTransfer)
				if err := _Autonity.contract.UnpackLog(event, "Transfer", 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
}

// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_Autonity *AutonityFilterer) ParseTransfer(log types.Log) (*AutonityTransfer, error) {
	event := new(AutonityTransfer)
	if err := _Autonity.contract.UnpackLog(event, "Transfer", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// AutonityUpgradeTestMetaData contains all meta data concerning the AutonityUpgradeTest contract.
var AutonityUpgradeTestMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"BondingApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"oldParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"newParams\",\"type\":\"tuple\"}],\"name\":\"Eip1559ParamsUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"oldEnode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newEnode\",\"type\":\"string\"}],\"name\":\"EnodeUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliedAtBlock\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"headBondingID\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inflationReserve\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeCirculating\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"scheduleVault\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDuration\",\"type\":\"uint256\"}],\"name\":\"NewSchedule\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"headUnbondingID\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidStateContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnSelfAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnDelegatedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnSelfAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnDelegatedAmount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"STANDARD_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STANDARD_SCALE_FACTOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approveBonding\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_selfBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_delegated\",\"type\":\"uint256\"}],\"name\":\"autobond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bondFrom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"}],\"name\":\"bondingAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"circulatingSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"completeContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_scheduleVault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalDuration\",\"type\":\"uint256\"}],\"name\":\"createSchedule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"contractUpgradeReady\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"epochEnded\",\"type\":\"bool\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"committee\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"previousEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"omissionDelta\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.EpochInfo\",\"name\":\"epoch\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"clusteringThreshold\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"range\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gracePeriod\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Accountability\",\"name\":\"accountability\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.ClientAwareConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structAutonity.FinalizeResult\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_omissionDelta\",\"type\":\"uint256\"}],\"name\":\"finalizeInitialization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBondingRequestByID\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.BondingRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getClientConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"clusteringThreshold\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"range\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gracePeriod\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Accountability\",\"name\":\"accountability\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.ClientAwareConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialInflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withholdingThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposerRewardRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oracleRewardRate\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"withheldRewardsPool\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractIUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"},{\"internalType\":\"contractIInflationController\",\"name\":\"inflationControllerContract\",\"type\":\"address\"},{\"internalType\":\"contractIOmissionAccountability\",\"name\":\"omissionAccountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIAuctioneer\",\"name\":\"auctioneerContract\",\"type\":\"address\"}],\"internalType\":\"structIAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxScheduleDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"clusteringThreshold\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"}],\"name\":\"getEpochByHeight\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"committee\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"previousEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"omissionDelta\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochInfo\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"committee\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"previousEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"omissionDelta\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInflationReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidLogicContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxScheduleDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewContract\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getSchedule\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unlockedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastUnlockTime\",\"type\":\"uint256\"}],\"internalType\":\"structIScheduleController.Schedule\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSlasher\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"}],\"name\":\"getTotalSchedules\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getUnbondingRequestByID\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"released\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"selfDelegation\",\"type\":\"bool\"}],\"internalType\":\"structIAutonity.UnbondingRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondingID\",\"type\":\"uint256\"}],\"name\":\"getUnbondingShare\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidatorState\",\"outputs\":[{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondingID\",\"type\":\"uint256\"}],\"name\":\"isUnbondingReleased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_jailtime\",\"type\":\"uint256\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailedState\",\"type\":\"uint8\"}],\"name\":\"jail\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailboundState\",\"type\":\"uint8\"}],\"name\":\"jailbound\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetContractUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAcuContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAuctioneerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"}],\"name\":\"setClusteringThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_size\",\"type\":\"uint256\"}],\"name\":\"setCommitteeSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"_params\",\"type\":\"tuple\"}],\"name\":\"setEip1559Params\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setEpochPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIInflationController\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setInflationControllerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"}],\"name\":\"setLiquidLogicContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxDuration\",\"type\":\"uint256\"}],\"name\":\"setMaxScheduleDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIOmissionAccountability\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOmissionAccountabilityContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperatorAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOracleContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_oracleRewardRate\",\"type\":\"uint256\"}],\"name\":\"setOracleRewardRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_proposerRewardRate\",\"type\":\"uint256\"}],\"name\":\"setProposerRewardRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_slasher\",\"type\":\"address\"}],\"name\":\"setSlasher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStabilizationContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSupplyControlContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setTreasuryAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_treasuryFee\",\"type\":\"uint256\"}],\"name\":\"setTreasuryFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"setUnbondingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractUpgradeManager\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setUpgradeManagerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"setWithheldRewardsPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_withholdingThreshold\",\"type\":\"uint256\"}],\"name\":\"setWithholdingThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRate\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"slashingAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jailtime\",\"type\":\"uint256\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailedState\",\"type\":\"uint8\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailboundState\",\"type\":\"uint8\"}],\"name\":\"slashAndJail\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"slashingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondFrom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"}],\"name\":\"updateEnode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bytecode\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_abi\",\"type\":\"string\"}],\"name\":\"upgradeContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
	Sigs: map[string]string{
		"f3c70aad": "STANDARD_DECIMALS()",
		"d144f00a": "STANDARD_SCALE_FACTOR()",
		"b46e5520": "activateValidator(address)",
		"dd62ed3e": "allowance(address,address)",
		"095ea7b3": "approve(address,uint256)",
		"50492571": "approveBonding(address,uint256)",
		"f7fcc510": "autobond(address,uint256,uint256)",
		"70a08231": "balanceOf(address)",
		"a515366a": "bond(address,uint256)",
		"41de7400": "bondFrom(address,address,uint256)",
		"e0e01d54": "bondingAllowance(address,address)",
		"9dc29fac": "burn(address,uint256)",
		"852c4849": "changeCommissionRate(address,uint256)",
		"9358928b": "circulatingSupply()",
		"872cf059": "completeContractUpgrade()",
		"354c40a7": "createSchedule(address,uint256,uint256,uint256)",
		"313ce567": "decimals()",
		"4bb278f3": "finalize()",
		"4da3baec": "finalizeInitialization(uint256)",
		"43645969": "getBlockPeriod()",
		"8ebb48b7": "getBondingRequestByID(uint256)",
		"f3f759c1": "getClientConfig()",
		"ab8f6ffe": "getCommittee()",
		"a8b2216e": "getCommitteeEnodes()",
		"c3f909d4": "getConfig()",
		"2b56feac": "getCurrentCommitteeSize()",
		"0aac2da1": "getCurrentEpochPeriod()",
		"affb1cf1": "getEpochByHeight(uint256)",
		"96b477cb": "getEpochFromBlock(uint256)",
		"6fc53515": "getEpochID()",
		"a9fd1a8f": "getEpochInfo()",
		"dfb1a4d2": "getEpochPeriod()",
		"4efcd15f": "getEpochTotalBondedStake()",
		"4651e07b": "getInflationReserve()",
		"731b3a03": "getLastEpochBlock()",
		"ba522458": "getLastEpochTime()",
		"4c1f1c77": "getLiquidLogicContract()",
		"819b6463": "getMaxCommitteeSize()",
		"fed76a56": "getMaxScheduleDuration()",
		"11220633": "getMinimumBaseFee()",
		"b66b3e79": "getNewContract()",
		"25ce1bb9": "getNextEpochBlock()",
		"e7f43c68": "getOperator()",
		"833b1fce": "getOracle()",
		"7264c4da": "getSchedule(address,uint256)",
		"d0c80f13": "getSlasher()",
		"088566e9": "getTotalSchedules(address)",
		"f7866ee3": "getTreasuryAccount()",
		"29070c6d": "getTreasuryFee()",
		"6fd2c80b": "getUnbondingPeriod()",
		"4bfe23f1": "getUnbondingRequestByID(uint256)",
		"8d347287": "getUnbondingShare(uint256)",
		"1904bb2e": "getValidator(address)",
		"5b7d6c36": "getValidatorState(address)",
		"b7ab4db5": "getValidators()",
		"0d8e6e2c": "getVersion()",
		"e294df7c": "isUnbondingReleased(uint256)",
		"154d76d7": "jail(address,uint256,uint8)",
		"8ef8c2fd": "jailbound(address,uint8)",
		"40c10f19": "mint(address,uint256)",
		"06fdde03": "name()",
		"0ae65e7a": "pauseValidator(address)",
		"84467fdb": "registerValidator(string,address,bytes,bytes)",
		"cf9c5719": "resetContractUpgrade()",
		"1250a28d": "setAccountabilityContract(address)",
		"d372c07e": "setAcuContract(address)",
		"5a061362": "setAuctioneerContract(address)",
		"12e7b45d": "setClusteringThreshold(uint256)",
		"8bac7dad": "setCommitteeSize(uint256)",
		"56176bc4": "setEip1559Params((uint256,uint256,uint256,uint256))",
		"6b5f444c": "setEpochPeriod(uint256)",
		"ee7d72b4": "setGasLimit(uint256)",
		"f03b959d": "setInflationControllerContract(address)",
		"15ef30f8": "setLiquidLogicContract(address)",
		"8bb2e477": "setMaxScheduleDuration(uint256)",
		"b47c3eaa": "setOmissionAccountabilityContract(address)",
		"520fdbbc": "setOperatorAccount(address)",
		"496ccd9b": "setOracleContract(address)",
		"ed5676e9": "setOracleRewardRate(uint256)",
		"416f86a2": "setProposerRewardRate(uint256)",
		"aabc2496": "setSlasher(address)",
		"cfd19fb9": "setStabilizationContract(address)",
		"b3ecbadd": "setSupplyControlContract(address)",
		"d886f8a2": "setTreasuryAccount(address)",
		"77e741c7": "setTreasuryFee(uint256)",
		"114eaf55": "setUnbondingPeriod(uint256)",
		"ceaad455": "setUpgradeManagerContract(address)",
		"39f9eb1f": "setWithheldRewardsPool(address)",
		"905d76e9": "setWithholdingThreshold(uint256)",
		"02fb4d85": "slash(address,uint256)",
		"122b4122": "slashAndJail(address,uint256,uint256,uint8,uint8)",
		"95d89b41": "symbol()",
		"18160ddd": "totalSupply()",
		"a9059cbb": "transfer(address,uint256)",
		"23b872dd": "transferFrom(address,address,uint256)",
		"a5d059ca": "unbond(address,uint256)",
		"a9a7d7c9": "unbondFrom(address,address,uint256)",
		"784304b5": "updateEnode(address,string)",
		"b2ea9adb": "upgradeContract(bytes,string)",
	},
	Bin: "0x60806040526000600e556000600f5534801561001a57600080fd5b50604080516000808252602082019092529061004c565b6100396112d6565b8152602001906001900390816100315790505b506040805161020081018252601054608080830191825260115460a08085019190915260125460c08086019190915260135460e08087019190915260145461010080880191909152601554610120808901919091526016546101408901526017546101608901526018546001600160a01b039081166101808a015260195481166101a08a0152601a546101c08a0152601b546101e08a015296885288519081018952601c5487168152601d548716602082810191909152601e548816828b0152601f5488166060808401919091528154891683890152602154891683880152602254891683870152602354891683860152602454891683850152818a019290925289519283018a52602554909716825260265496820196909652602754818901526028548187015260295494810194909452602a5492840192909252602b5490830152602c549082015292820192909252602d54918101829052906000036101ca57604780546001600160a01b031916331790556101ca82826101e3565b5050602d546001036101de576101de6108f3565b611820565b805180516010556020808201516011819055604080840151601255606080850151601355608080860151601481905560a08088015160155560c08089015160165560e0808a0151601755610100808b0151601880546001600160a01b03199081166001600160a01b03938416179091556101208d01516019805483169184169190911790556101408d0151601a819055610160909d0151601b8190558c8f01518051601c80548516918616919091179055808e0151601d80548516918616919091179055808c0151601e80548516918616919091179055808b0151601f80548516918616919091179055808a01518e548416908516178e5580880151602180548516918616919091179055808701516022805485169186169190911790558086015160238054851691861691909117905590930151602480548316918416919091179055898e01518051602580549093169316929092179055808b01516026819055818a0151602755818901516028558188015160295594810151602a81905593810151602b819055920151602c819055878d0151602d55603194909455603a939093558651948501875287855297840189905283860182905292909301869052603594909455603695909555603755603892909255603992909255604691909155516103cf906113a4565b604051809103906000f0801580156103eb573d6000803e3d6000fd5b50604880546001600160a01b0319166001600160a01b0392909216919091179055604051610418906113b2565b604051809103906000f080158015610434573d6000803e3d6000fd5b50604980546001600160a01b0319166001600160a01b039290921691909117905560005b82518110156108ee57600083828151811061047557610475611458565b602002602001015160a001519050600084838151811061049757610497611458565b60209081029190910101516101a001526104b36012600a61156d565b8483815181106104c5576104c5611458565b602002602001015161026001818152505060008483815181106104ea576104ea611458565b602002602001015161018001906001600160a01b031690816001600160a01b031681525050600084838151811061052357610523611458565b602002602001015160a0018181525050600084838151811061054757610547611458565b6020026020010151610100018181525050600084838151811061056c5761056c611458565b60209081029190910101516101c00152601254845185908490811061059357610593611458565b6020026020010151608001818152505060008483815181106105b7576105b7611458565b6020026020010151610240019060058111156105d5576105d5611580565b908160058111156105e8576105e8611580565b81525050600084838151811061060057610600611458565b6020026020010151610160018181525050600084838151811061062557610625611458565b602002602001015160c0018181525050600084838151811061064957610649611458565b6020026020010151610120018181525050600084838151811061066e5761066e611458565b602002602001015160e0018181525050600084838151811061069257610692611458565b60200260200101516101400181815250506106cb8483815181106106b8576106b8611458565b6020026020010151610a5460201b60201c565b6106f78483815181106106e0576106e0611458565b602002602001015160400151610b8c60201b60201c565b61071f84838151811061070c5761070c611458565b6020026020010151610c0f60201b60201c565b806041600086858151811061073657610736611458565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546107719190611596565b92505081905550806044600082825461078a9190611596565b9250508190555080604560008282546107a39190611596565b925050819055507f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c8483815181106107dd576107dd611458565b6020026020010151600001518584815181106107fb576107fb611458565b60200260200101516020015186858151811061081957610819611458565b60200260200101516040015187868151811061083757610837611458565b60200260200101516060015188878151811061085557610855611458565b602002602001015161018001516040516108739594939291906115ef565b60405180910390a16108e484838151811061089057610890611458565b602002602001015160200151828685815181106108af576108af611458565b6020026020010151600001518786815181106108cd576108cd611458565b602002602001015160000151610eac60201b60201c565b5050600101610458565b505050565b6047546001600160a01b0316331461095e5760405162461bcd60e51b815260206004820152602360248201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60448201526218dbdb60ea1b60648201526084015b60405180910390fd5b600260426000602e60018154811061097857610978611458565b60009182526020808320909101546001600160a01b03168352820192909252604001812060050180549091906109af908490611653565b92505081905550600260426000602e6001815481106109d0576109d0611458565b60009182526020808320909101546001600160a01b0316835282019290925260400181206008018054909190610a07908490611653565b90915550506002602d556025546001600160a01b031660009081526041602052604081206103e89055610a3c906003906113c0565b610a48600460006113c0565b6005805460ff19169055565b6000610a69826060015161118360201b60201c565b6001600160a01b03909116602084015290508015610ab75760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b6044820152606401610955565b6020808301516001600160a01b03908116600090815260429092526040909120600101541615610b295760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610955565b610b356004600a61156d565b82608001511115610b885760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e20726174650000000000000000006044820152606401610955565b5050565b6001600160a01b03811660009081526043602052604090205415610bf25760405162461bcd60e51b815260206004820152601460248201527f6f7261636c6520736572766572206578697374730000000000000000000000006044820152606401610955565b6001600160a01b0316600090815260436020526040902060019055565b6101808101516001600160a01b0316610d04576048546001600160a01b0316610c855760405162461bcd60e51b815260206004820152602260248201527f6c6971756964206c6f67696320636f6e7472616374206e6f74206465706c6f79604482015261195960f21b6064820152608401610955565b602e54600090610c94906111ce565b905081602001518260000151836080015183604860009054906101000a90046001600160a01b0316604051610cc8906113fd565b610cd6959493929190611667565b604051809103906000f080158015610cf2573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051602e80546001808201835560009283527f37fa166cbdbfbb1561ccd9ea985ec0218b5e68502e230525f544285b2bdf3d7e90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352604290955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190610db49082611722565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190610e719082611722565b5061024082015160128201805460ff19166001836005811115610e9657610e96611580565b0217905550610260820151816013015590505050565b6001600160a01b0384166000818152604260205260408120909115801590610ee3575060018101546001600160a01b038781169116145b610f2f5760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610955565b6000601282015460ff166005811115610f4a57610f4a611580565b14610f975760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f2062652061637469766500000000006044820152606401610955565b60008511610ff35760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b6064820152608401610955565b6001600160a01b03841660009081526041602052604090205485111561105b5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e636500000000006044820152606401610955565b6001600160a01b038416600090815260416020526040812080548792906110839084906117e0565b9091555050604080516080810182526001600160a01b0386811680835289821660208085018281528587018c8152436060808901918252600880546000908152600687528b90208a518154908b166001600160a01b03199182161782559551600182018054918c16919097161790955592516002850155905160039093019290925588549054885191871686148083529382018e90529781019790975294959094938916937fcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2910160405180910390a460088054906000611163836117f3565b9190505550600160085461117791906117e0565b98975050505050505050565b60008061118e61140b565b60008060ff9050604083875160208901845afa6111aa57600080fd5b505080516020909101516c0100000000000000000000000090910494909350915050565b6060816000036111f55750506040805180820190915260018152600360fc1b602082015290565b8160005b811561121f5780611209816117f3565b91506112189050600a83611653565b91506111f9565b6000816001600160401b0381111561123957611239611442565b6040519080825280601f01601f191660200182016040528015611263576020820181803683370190505b5090505b84156112ce576112786001836117e0565b9150611285600a8661180c565b611290906030611596565b60f81b8183815181106112a5576112a5611458565b60200101906001600160f81b031916908160001a9053506112c7600a86611653565b9450611267565b949350505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001606081526020016000600581111561139757611397611580565b8152602001600081525090565b611abc806200da7983390190565b610da0806200f53583390190565b5080546113cc9061169a565b6000825580601f106113dc575050565b601f0160209004906000526020600020908101906113fa9190611429565b50565b6105cf80620102d583390190565b60405180604001604052806002906020820280368337509192915050565b5b8082111561143e576000815560010161142a565b5090565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156114bf578085048111156114a3576114a361146e565b60018416156114b157908102905b60019390931c928002611488565b935093915050565b6000826114d657506001611567565b816114e357506000611567565b81600181146114f957600281146115035761151f565b6001915050611567565b60ff8411156115145761151461146e565b50506001821b611567565b5060208310610133831016604e8410600b8410161715611542575081810a611567565b61154f6000198484611484565b80600019048211156115635761156361146e565b0290505b92915050565b600061157983836114c7565b9392505050565b634e487b7160e01b600052602160045260246000fd5b808201808211156115675761156761146e565b6000815180845260005b818110156115cf576020818501810151868301820152016115b3565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03868116825285811660208301528416604082015260a060608201819052600090611623908301856115a9565b905060018060a01b03831660808301529695505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826116625761166261163d565b500490565b6001600160a01b038681168252851660208201526040810184905260a060608201819052600090611623908301856115a9565b600181811c908216806116ae57607f821691505b6020821081036116ce57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156108ee57806000526020600020601f840160051c810160208510156116fb5750805b601f840160051c820191505b8181101561171b5760008155600101611707565b5050505050565b81516001600160401b0381111561173b5761173b611442565b61174f81611749845461169a565b846116d4565b6020601f821160018114611783576000831561176b5750848201515b600019600385901b1c1916600184901b17845561171b565b600084815260208120601f198516915b828110156117b35787850151825560209485019460019092019101611793565b50848210156117d15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b818103818111156115675761156761146e565b6000600182016118055761180561146e565b5060010190565b60008261181b5761181b61163d565b500690565b61c24980620018306000396000f3fe60806040526004361061053e5760003560e01c806384467fdb116102ba578063b47c3eaa11610171578063dd62ed3e116100de578063ee7d72b41161009a578063f3f759c111610077578063f3f759c114611182578063f7866ee3146111a4578063f7fcc510146111c2578063fed76a56146111e257005b8063ee7d72b41461112d578063f03b959d1461114d578063f3c70aad1461116d57005b8063dd62ed3e1461107a578063dfb1a4d21461109a578063e0e01d54146110af578063e294df7c146110cf578063e7f43c68146110ef578063ed5676e91461110d57005b8063cf9c57191161012d578063cf9c571914610fd2578063cfd19fb914610fe7578063d0c80f1314611007578063d144f00a14611025578063d372c07e1461103a578063d886f8a21461105a57005b8063b47c3eaa14610f16578063b66b3e7914610f36578063b7ab4db514610f59578063ba52245814610f7b578063c3f909d414610f90578063ceaad45514610fb257005b80639dc29fac11610227578063a9fd1a8f116101e3578063affb1cf1116101c0578063affb1cf114610e96578063b2ea9adb14610eb6578063b3ecbadd14610ed6578063b46e552014610ef657005b8063a9fd1a8f14610e32578063aabc249614610e54578063ab8f6ffe14610e7457005b80639dc29fac14610d70578063a515366a14610d90578063a5d059ca14610db0578063a8b2216e14610dd0578063a9059cbb14610df2578063a9a7d7c914610e1257005b80638ebb48b7116102765780638ebb48b714610c6e5780638ef8c2fd14610ccf578063905d76e914610cef5780639358928b14610d0f57806395d89b4114610d2457806396b477cb14610d5057005b806384467fdb14610bb9578063852c484914610bd9578063872cf05914610bf95780638bac7dad14610c0e5780638bb2e47714610c2e5780638d34728714610c4e57005b8063416f86a21161040e57806356176bc41161037b57806370a082311161033757806377e741c71161031457806377e741c714610b46578063784304b514610b66578063819b646314610b86578063833b1fce14610b9b57005b806370a0823114610a9d5780637264c4da14610abd578063731b3a0314610b1f57005b806356176bc4146109e65780635a06136214610a065780635b7d6c3614610a265780636b5f444c14610a535780636fc5351514610a735780636fd2c80b14610a8857005b80634bfe23f1116103ca5780634bfe23f1146109125780634c1f1c771461093f5780634da3baec146109715780634efcd15f1461099157806350492571146109a6578063520fdbbc146109c657005b8063416f86a21461086657806341de74001461088657806343645969146108a65780634651e07b146108bb578063496ccd9b146108d05780634bb278f3146108f057005b8063154d76d7116104ac57806329070c6d1161046857806329070c6d146107c05780632b56feac146107d5578063313ce567146107ea578063354c40a71461080657806339f9eb1f1461082657806340c10f191461084657005b8063154d76d7146106f757806315ef30f81461071757806318160ddd146107375780631904bb2e1461074c57806323b872dd1461077957806325ce1bb91461079957005b80630d8e6e2c116104fb5780630d8e6e2c146106305780631122063314610645578063114eaf551461065a578063122b41221461067a5780631250a28d146106b757806312e7b45d146106d757005b806302fb4d851461054057806306fdde0314610573578063088566e9146105ab578063095ea7b3146105cb5780630aac2da1146105fb5780630ae65e7a14610610575b005b34801561054c57600080fd5b5061056061055b36600461a203565b6111f7565b6040519081526020015b60405180910390f35b34801561057f57600080fd5b506040805180820190915260068152652732bbba37b760d11b60208201525b60405161056a919061a27f565b3480156105b757600080fd5b506105606105c636600461a292565b6114a4565b3480156105d757600080fd5b506105eb6105e636600461a203565b6114c4565b604051901515815260200161056a565b34801561060757600080fd5b50602654610560565b34801561061c57600080fd5b5061053e61062b36600461a292565b6114e5565b34801561063c57600080fd5b50602d54610560565b34801561065157600080fd5b50601154610560565b34801561066657600080fd5b5061053e61067536600461a2af565b611578565b34801561068657600080fd5b5061069a61069536600461a2d5565b6115ff565b60408051938452602084019290925215159082015260600161056a565b3480156106c357600080fd5b5061053e6106d236600461a292565b6118c0565b3480156106e357600080fd5b5061053e6106f236600461a2af565b611973565b34801561070357600080fd5b5061056061071236600461a334565b611a4e565b34801561072357600080fd5b5061053e61073236600461a292565b611ca5565b34801561074357600080fd5b50610560611dbd565b34801561075857600080fd5b5061076c61076736600461a292565b611de8565b60405161056a919061a4fc565b34801561078557600080fd5b506105eb61079436600461a50f565b611e31565b3480156107a557600080fd5b50602f546000908152603c6020526040902060030154610560565b3480156107cc57600080fd5b50601054610560565b3480156107e157600080fd5b50603b54610560565b3480156107f657600080fd5b506040516012815260200161056a565b34801561081257600080fd5b5061053e61082136600461a550565b611f39565b34801561083257600080fd5b5061053e61084136600461a292565b612006565b34801561085257600080fd5b5061053e61086136600461a203565b61210c565b34801561087257600080fd5b5061053e61088136600461a2af565b612144565b34801561089257600080fd5b506105606108a136600461a50f565b6121f9565b3480156108b257600080fd5b50602754610560565b3480156108c757600080fd5b50604654610560565b3480156108dc57600080fd5b5061053e6108eb36600461a292565b61230c565b3480156108fc57600080fd5b506109056124cc565b60405161056a919061a703565b34801561091e57600080fd5b5061093261092d36600461a2af565b612e8b565b60405161056a919061a74d565b34801561094b57600080fd5b506048546001600160a01b03165b6040516001600160a01b03909116815260200161056a565b34801561097d57600080fd5b5061053e61098c36600461a2af565b612f75565b34801561099d57600080fd5b50603454610560565b3480156109b257600080fd5b506105eb6109c136600461a203565b613144565b3480156109d257600080fd5b5061053e6109e136600461a292565b613159565b3480156109f257600080fd5b5061053e610a0136600461a82f565b613465565b348015610a1257600080fd5b5061053e610a2136600461a292565b613659565b348015610a3257600080fd5b50610a46610a4136600461a292565b61373f565b60405161056a919061a898565b348015610a5f57600080fd5b5061053e610a6e36600461a2af565b6137a1565b348015610a7f57600080fd5b50602f54610560565b348015610a9457600080fd5b50601354610560565b348015610aa957600080fd5b50610560610ab836600461a292565b613b80565b348015610ac957600080fd5b50610add610ad836600461a203565b613bbf565b60405161056a9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b348015610b2b57600080fd5b50602f546000908152603c6020526040902060020154610560565b348015610b5257600080fd5b5061053e610b6136600461a2af565b613bfb565b348015610b7257600080fd5b5061053e610b8136600461a926565b613c7e565b348015610b9257600080fd5b50602854610560565b348015610ba757600080fd5b50601d546001600160a01b0316610959565b348015610bc557600080fd5b5061053e610bd436600461a975565b613e72565b348015610be557600080fd5b5061053e610bf436600461a203565b613faf565b348015610c0557600080fd5b5061053e61414c565b348015610c1a57600080fd5b5061053e610c2936600461a2af565b61418a565b348015610c3a57600080fd5b5061053e610c4936600461a2af565b61425f565b348015610c5a57600080fd5b50610560610c6936600461a2af565b6142ea565b348015610c7a57600080fd5b50610c8e610c8936600461a2af565b614384565b60405161056a919081516001600160a01b03908116825260208084015190911690820152604080830151908201526060918201519181019190915260800190565b348015610cdb57600080fd5b5061053e610cea36600461aa19565b614419565b348015610cfb57600080fd5b5061053e610d0a36600461a2af565b61465f565b348015610d1b57600080fd5b50610560614716565b348015610d3057600080fd5b50604080518082019091526003815262272a2760e91b602082015261059e565b348015610d5c57600080fd5b50610560610d6b36600461a2af565b614740565b348015610d7c57600080fd5b5061053e610d8b36600461a203565b6147d3565b348015610d9c57600080fd5b50610560610dab36600461a203565b614900565b348015610dbc57600080fd5b50610560610dcb36600461a203565b614921565b348015610ddc57600080fd5b50610de5614937565b60405161056a919061aa52565b348015610dfe57600080fd5b506105eb610e0d36600461a203565b614a10565b348015610e1e57600080fd5b50610560610e2d36600461a50f565b614a71565b348015610e3e57600080fd5b50610e47614a92565b60405161056a919061aab7565b348015610e6057600080fd5b5061053e610e6f36600461a292565b614c28565b348015610e8057600080fd5b50610e89614d36565b60405161056a919061aaca565b348015610ea257600080fd5b50610e47610eb136600461a2af565b614e3e565b348015610ec257600080fd5b5061053e610ed136600461aadd565b61507c565b348015610ee257600080fd5b5061053e610ef136600461a292565b6150b0565b348015610f0257600080fd5b5061053e610f1136600461a292565b61519b565b348015610f2257600080fd5b5061053e610f3136600461a292565b615480565b348015610f4257600080fd5b50610f4b61553a565b60405161056a92919061ab2e565b348015610f6557600080fd5b50610f6e615661565b60405161056a919061aba1565b348015610f8757600080fd5b50603354610560565b348015610f9c57600080fd5b50610fa56156ec565b60405161056a919061ac9b565b348015610fbe57600080fd5b5061053e610fcd36600461a292565b615852565b348015610fde57600080fd5b5061053e615905565b348015610ff357600080fd5b5061053e61100236600461a292565b615937565b34801561101357600080fd5b506049546001600160a01b0316610959565b34801561103157600080fd5b50610560615a95565b34801561104657600080fd5b5061053e61105536600461a292565b615aa4565b34801561106657600080fd5b5061053e61107536600461a292565b615b85565b34801561108657600080fd5b5061056061109536600461adca565b615c31565b3480156110a657600080fd5b50603154610560565b3480156110bb57600080fd5b506105606110ca36600461adca565b615c80565b3480156110db57600080fd5b506105eb6110ea36600461a2af565b615cce565b3480156110fb57600080fd5b506025546001600160a01b0316610959565b34801561111957600080fd5b5061053e61112836600461a2af565b615d0f565b34801561113957600080fd5b5061053e61114836600461a2af565b615dc2565b34801561115957600080fd5b5061053e61116836600461a292565b615ea1565b34801561117957600080fd5b50610560600481565b34801561118e57600080fd5b50611197615f5b565b60405161056a919061adf8565b3480156111b057600080fd5b506019546001600160a01b0316610959565b3480156111ce57600080fd5b5061053e6111dd36600461ae07565b6160c7565b3480156111ee57600080fd5b50602954610560565b601c546000906001600160a01b031633148061121d57506023546001600160a01b031633145b806112325750601d546001600160a01b031633145b6112575760405162461bcd60e51b815260040161124e9061ae3c565b60405180910390fd5b61125f619e03565b6049546001600160a01b03166399ac2d4861127986616302565b856040518363ffffffff1660e01b815260040161129792919061ae84565b6000604051808303816000875af11580156112b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112de919081019061b05e565b6019546001600160a01b03166000908152604160205260408120805492955092935084929161130e90849061b0ba565b90915550506001600160a01b03808516600090815260426020908152604091829020845181549085166001600160a01b031991821617825591850151600182018054918616918416919091179055918401516002830180549190941691161790915560608201518291906003820190611387908261b14e565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190611444908261b14e565b5061024082015160128201805460ff191660018360058111156114695761146961a376565b021790555061026091909101516013909101556001600160a01b038416600090815260426020526040902061149d906165ec565b5092915050565b6001600160a01b0381166000908152600160205260408120545b92915050565b60006114ce616637565b6114d9338484616684565b5060016114be60008055565b6114ed616637565b6001600160a01b038082166000818152604260205260409020600101549091161461152a5760405162461bcd60e51b815260040161124e9061b20f565b6001600160a01b038181166000908152604260205260409020541633146115635760405162461bcd60e51b815260040161124e9061b246565b61156c816167a9565b61157560008055565b50565b6025546001600160a01b031633146115a25760405162461bcd60e51b815260040161124e9061b292565b601354604080516080808252600f908201526e1d5b989bdb991a5b99d4195c9a5bd9608a1b60a08201526020810192909252810182905243606082015260008051602061c1f48339815191529060c00160405180910390a1601355565b601c54600090819081906001600160a01b031633148061162957506023546001600160a01b031633145b8061163e5750601d546001600160a01b031633145b61165a5760405162461bcd60e51b815260040161124e9061ae3c565b611662619e03565b6049546001600160a01b031663a00f313f61167c8b616302565b8a438b8b8b6040518763ffffffff1660e01b81526004016116a29695949392919061b2c9565b6000604051808303816000875af11580156116c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116e9919081019061b31a565b6102008301516019546001600160a01b03166000908152604160205260408120805494995091975091955092935086929161172590849061b0ba565b90915550506001600160a01b03808a16600090815260426020908152604091829020845181549085166001600160a01b03199182161782559185015160018201805491861691841691909117905591840151600283018054919094169116179091556060820151829190600382019061179e908261b14e565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f8201556102008201516010820155610220820151601182019061185b908261b14e565b5061024082015160128201805460ff191660018360058111156118805761188061a376565b021790555061026091909101516013909101556001600160a01b03891660009081526042602052604090206118b4906165ec565b50955095509592505050565b6025546001600160a01b031633146118ea5760405162461bcd60e51b815260040161124e9061b292565b601c54604080516080808252601690820152751858d8dbdd5b9d18589a5b1a5d1e50dbdb9d1c9858dd60521b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6025546001600160a01b0316331461199d5760405162461bcd60e51b815260040161124e9061b292565b600081116119ed5760405162461bcd60e51b815260206004820181905260248201527f636c7573746572696e67207468726573686f6c642063616e6e6f742062652030604482015260640161124e565b602c546040805160808082526013908201527218db1d5cdd195c9a5b99d51a1c995cda1bdb19606a1b60a08201526020810192909252810182905243606082015260008051602061c1f48339815191529060c00160405180910390a1603a55565b601c546000906001600160a01b0316331480611a7457506023546001600160a01b031633145b80611a895750601d546001600160a01b031633145b611aa55760405162461bcd60e51b815260040161124e9061ae3c565b6049546000906001600160a01b03166341b6cb0f611ac287616302565b4387876040518563ffffffff1660e01b8152600401611ae4949392919061b369565b6000604051808303816000875af1158015611b03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b2b919081019061b397565b6001600160a01b03808716600090815260426020908152604091829020845181549085166001600160a01b0319918216178255918501516001820180549186169184169190911790559184015160028301805491909416911617909155606082015191925082916003820190611ba1908261b14e565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190611c5e908261b14e565b5061024082015160128201805460ff19166001836005811115611c8357611c8361a376565b02179055506102609190910151601390910155610200015190505b9392505050565b6025546001600160a01b03163314611ccf5760405162461bcd60e51b815260040161124e9061b292565b6001600160a01b038116611d375760405162461bcd60e51b815260206004820152602960248201527f696e76616c696420636f6e7472616374206164647265737320666f72206c6971604482015268756964206c6f67696360b81b606482015260840161124e565b604854604080516080808252601390820152721b1a5c5d5a59131bd9da58d0dbdb9d1c9858dd606a1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1604880546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600103611de05760405162461bcd60e51b815260040161124e9061b3cb565b506044545b90565b611df0619e03565b6000546001141580611e0c5750601c546001600160a01b031633145b611e285760405162461bcd60e51b815260040161124e9061b3cb565b6114be82616302565b6000611e3b616637565b6001600160a01b0384166000908152603f6020908152604080832033845290915290205482811015611ec05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161124e565b611ecb858585616894565b611edf8533611eda868561b402565b616684565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611f2491815260200190565b60405180910390a35050600080556001611c9e565b6025546001600160a01b03163314611f635760405162461bcd60e51b815260040161124e9061b292565b602954811115611fd25760405162461bcd60e51b815260206004820152603460248201527f7363686564756c6520746f74616c206475726174696f6e20657863656564732060448201527336b0bc1030b63637bbb2b210323ab930ba34b7b760611b606482015260840161124e565b611fdc84846169bb565b8260456000828254611fee919061b402565b90915550612000905084848484616a55565b50505050565b6025546001600160a01b031633146120305760405162461bcd60e51b815260040161124e9061b292565b6001600160a01b0381166120865760405162461bcd60e51b815260206004820152601b60248201527f706f6f6c2063616e6e6f74206265207a65726f20616464726573730000000000604482015260640161124e565b601854604080516080808252601390820152721dda5d1a1a195b1914995dd85c991cd41bdbdb606a1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1601880546001600160a01b0319166001600160a01b0392909216919091179055565b6025546001600160a01b031633146121365760405162461bcd60e51b815260040161124e9061b292565b61214082826169bb565b5050565b6025546001600160a01b0316331461216e5760405162461bcd60e51b815260040161124e9061b292565b61217a6004600a61b4fc565b8111156121995760405162461bcd60e51b815260040161124e9061b508565b6016546040805160808082526012908201527170726f706f7365725265776172645261746560701b60a08201526020810192909252810182905243606082015260008051602061c1f48339815191529060c00160405180910390a1601655565b6000612203616637565b6001600160a01b0383811660009081526042602052604090205481861691160361226f5760405162461bcd60e51b815260206004820152601f60248201527f63616e6e6f7420626f6e6420504153207573696e6720616c6c6f77616e636500604482015260640161124e565b6001600160a01b0384166000908152604060208181528183203384529052902054828110156122e05760405162461bcd60e51b815260206004820152601960248201527f616d6f756e7420657863656564656420616c6c6f77616e636500000000000000604482015260640161124e565b6122f485336122ef868561b402565b616cce565b61230084848733616dd0565b915050611c9e60008055565b6025546001600160a01b031633146123365760405162461bcd60e51b815260040161124e9061b292565b601d54604080516080808252600e908201526d1bdc9858db1950dbdb9d1c9858dd60921b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1601d80546001600160a01b0319166001600160a01b03838116918217909255601e54604051637adbf97360e01b8152600481019290925290911690637adbf97390602401600060405180830381600087803b1580156123f357600080fd5b505af1158015612407573d6000803e3d6000fd5b5050602054604051637adbf97360e01b81526001600160a01b0385811660048301529091169250637adbf9739150602401600060405180830381600087803b15801561245257600080fd5b505af1158015612466573d6000803e3d6000fd5b505060248054604051637adbf97360e01b81526001600160a01b0386811660048301529091169350637adbf9739250015b600060405180830381600087803b1580156124b157600080fd5b505af11580156124c5573d6000803e3d6000fd5b5050505050565b6124d4619ed1565b6047546001600160a01b031633146124fe5760405162461bcd60e51b815260040161124e9061b534565b612506616637565b436032819055602f546000828152603060209081526040808320849055928252603c905281812060030154603954602a55601c5492516306c9789b60e41b815293101560048401819052929091829182916001600160a01b031690636c9789b0906024016060604051808303816000875af1158015612589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ad919061b577565b6023546040516306c9789b60e41b8152881515600482015293965091945092506000916001600160a01b0390911690636c9789b0906024016020604051808303816000875af1158015612604573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612628919061b5a5565b601d5460408051634bb278f360e01b815290519293506000926001600160a01b0390921691634bb278f391600480820192602092909190829003018187875af1158015612679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269d919061b5be565b90508515612b80576022546045546046546033546040516392eff3cd60e01b81526004810193909352602483019190915260448201524260648201526000916001600160a01b0316906392eff3cd90608401602060405180830381865afa15801561270c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612730919061b5a5565b905080604654101561274157506046545b61274b30826169bb565b806046600082825461275d919061b402565b9091555061276c905042617077565b6045600082825461277d919061b0ba565b90915550503060009081526041602052604090205461279d904790617202565b6127a5617e1e565b6127ad617ee9565b60008060006127ba617ffa565b601d54604051636d3c088760e11b815293965091945092506001600160a01b03169063da78110e906127f49086908590879060040161b5d9565b600060405180830381600087803b15801561280e57600080fd5b505af1158015612822573d6000803e3d6000fd5b5050601c5460405163e08b14ed60e01b81526001600160a01b03909116925063e08b14ed915061285690859060040161aba1565b600060405180830381600087803b15801561287057600080fd5b505af1158015612884573d6000803e3d6000fd5b50506023546040516338f7bbe760e21b81526001600160a01b03909116925063e3deef9c91506128bb90603d90859060040161b69f565b600060405180830381600087803b1580156128d557600080fd5b505af11580156128e9573d6000803e3d6000fd5b50506031546026555050603554601155603654601a55603754601b55603854602b55603a54602c55602354604051633009330b60e21b81524360048201526001600160a01b039091169063c024cc2c90602401600060405180830381600087803b15801561295657600080fd5b505af115801561296a573d6000803e3d6000fd5b5050602f546000908152603c6020526040812060020154602654909350909150612994904361b0ba565b9050426033819055506001602f60008282546129b0919061b0ba565b9091555050602f5460408051603d805460e0602082028401810190945260c08301818152612b329594849391929060009085015b82821015612ac8576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191612a379061b0cd565b80601f0160208091040260200160405190810160405280929190818152602001828054612a639061b0cd565b8015612ab05780601f10612a8557610100808354040283529160200191612ab0565b820191906000526020600020905b815481529060010190602001808311612a9357829003601f168201915b505050505081525050815260200190600101906129e4565b5050505081526020018581526020014381526020018481526020018b8152602001604051806080016040528060106000016001015481526020016010600001600a015481526020016010600001600b015481526020016010601501600601548152508152506182f0565b602f5460465460455460408051938452602084019290925282820152517f3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b589181900360600190a15050505050505b8015612c5357601d54604080516303d961d760e21b815290516001600160a01b0390921691630f65875c9160048082019260009290919082900301818387803b158015612bcc57600080fd5b505af1158015612be0573d6000803e3d6000fd5b5050601e546040805163a2e6204560e01b815290516001600160a01b03909216935063a2e62045925060048082019260209290919082900301816000875af1925050508015612c4c575060408051601f3d908101601f19168201909252612c499181019061b5be565b60015b15612c5357505b6040805160c080820183526026548252602754602080840191909152602a5483850152602c54606080850191909152845180820186528a81528083018a9052808601899052608080860191909152855180820187526011548152601a5481850152601b5481880152602b549281019290925260a08501919091528451908101855260055460ff16151581528a151581830152602f546000908152603c83528581208651815460e0958102820186018952958101868152969793969387019590949193859390928592919085015b82821015612e04576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191612d739061b0cd565b80601f0160208091040260200160405190810160405280929190818152602001828054612d9f9061b0cd565b8015612dec5780601f10612dc157610100808354040283529160200191612dec565b820191906000526020600020905b815481529060010190602001808311612dcf57829003601f168201915b50505050508152505081526020019060010190612d20565b505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081525050815260200182815250975050505050505050611de560008055565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290529054600103612eec5760405162461bcd60e51b815260040161124e9061b3cb565b506000818152600960209081526040918290208251610100808201855282546001600160a01b0390811683526001840154169382019390935260028201549381019390935260038101546060840152600481015460808401526005015460ff808216151560a08501529181048216151560c084015262010000900416151560e08201525b919050565b6047546001600160a01b03163314612f9f5760405162461bcd60e51b815260040161124e9061b534565b612fa7617e1e565b612faf617ffa565b505042603355504360328190556000908152603060209081526040808320839055602f548151603d805460e09581028301860190945260c0820184815261157596939592948594919390919085015b828210156130e2576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916130519061b0cd565b80601f016020809104026020016040519081016040528092919081815260200182805461307d9061b0cd565b80156130ca5780601f1061309f576101008083540402835291602001916130ca565b820191906000526020600020905b8154815290600101906020018083116130ad57829003601f168201915b50505050508152505081526020019060010190612ffe565b505050908252506000602080830191909152436040808401919091526026546060808501919091526080808501899052825190810183526011548152601a5493810193909352601b5491830191909152602b549082015260a0909101526182f0565b600061314e616637565b6114d9338484616cce565b6025546001600160a01b031633146131835760405162461bcd60e51b815260040161124e9061b292565b602554604080516080808252600f908201526e1bdc195c985d1bdc9058d8dbdd5b9d608a1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1602580546001600160a01b0319166001600160a01b03838116918217909255601d5460405163b3ab15fb60e01b815260048101929092529091169063b3ab15fb90602401600060405180830381600087803b15801561324157600080fd5b505af1158015613255573d6000803e3d6000fd5b5050601e5460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b1580156132a057600080fd5b505af11580156132b4573d6000803e3d6000fd5b5050601f5460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b1580156132ff57600080fd5b505af1158015613313573d6000803e3d6000fd5b505060205460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801561335e57600080fd5b505af1158015613372573d6000803e3d6000fd5b505060215460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b1580156133bd57600080fd5b505af11580156133d1573d6000803e3d6000fd5b505060235460405163b3ab15fb60e01b81526001600160a01b038581166004830152909116925063b3ab15fb9150602401600060405180830381600087803b15801561341c57600080fd5b505af1158015613430573d6000803e3d6000fd5b50506024805460405163b3ab15fb60e01b81526001600160a01b038681166004830152909116935063b3ab15fb925001612497565b6025546001600160a01b0316331461348f5760405162461bcd60e51b815260040161124e9061b292565b60008160600151116134fe5760405162461bcd60e51b815260206004820152603260248201527f676173206c696d697420626f756e642064697669736f72206e6565647320746f60448201527102062652067726561746572207468616e20360741b606482015260840161124e565b60008160200151116135715760405162461bcd60e51b815260206004820152603660248201527f6261736520666565206368616e67652064656e6f6d696e61746f72206e65656460448201527507320746f2062652067726561746572207468616e20360541b606482015260840161124e565b60008160400151116135de5760405162461bcd60e51b815260206004820152603060248201527f656c6173746963697479206d756c7469706c696572206e6565647320746f206260448201526f0652067726561746572207468616e20360841b606482015260840161124e565b604080516080810182526011548152601a546020820152601b5481830152602b54606082015290517fa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc9161363391849061b73a565b60405180910390a180516035556020810151603655604081015160375560600151603855565b6025546001600160a01b031633146136835760405162461bcd60e51b815260040161124e9061b292565b60245460408051608080825260129082015271185d58dd1a5bdb99595c90dbdb9d1c9858dd60721b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1602480546001600160a01b0319166001600160a01b0383811691909117909155602054161561157557602054604051623b79f960e21b81526001600160a01b0383811660048301529091169062ede7e490602401612497565b60008054600114158061375c5750601c546001600160a01b031633145b8061377157506023546001600160a01b031633145b61378d5760405162461bcd60e51b815260040161124e9061b3cb565b61379682616302565b610240015192915050565b6025546001600160a01b031633146137cb5760405162461bcd60e51b815260040161124e9061b292565b60235460408051631728602760e21b815290516000926001600160a01b031691635ca1809c9160048083019260209291908290030181865afa158015613815573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613839919061b5a5565b602354604080516362a48bb760e11b815290519293506000926001600160a01b039092169163c549176e916004808201926020929091908290030181865afa158015613889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ad919061b5a5565b9050600083116138ff5760405162461bcd60e51b815260206004820152601860248201527f65706f636820706572696f642063616e6e6f7420626520300000000000000000604482015260640161124e565b600161390b838361b0ba565b613915919061b402565b83116139975760405162461bcd60e51b8152602060048201526044602482018190527f65706f636820706572696f64206e6565647320746f2062652067726561746572908201527f207468616e206f6d697373696f6e44656c74612b6c6f6f6b6261636b57696e646064820152636f772d3160e01b608482015260a40161124e565b601d5460408051635bc6f62960e11b815290516000926001600160a01b03169163b78dec529160048083019260209291908290030181865afa1580156139e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a05919061b5a5565b905083613a1382600261b786565b1115613a5d5760405162461bcd60e51b8152602060048201526019602482015278195c1bd8da081c195c9a5bd9081a5cc81d1bdbc81cdb585b1b603a1b604482015260640161124e565b601d54604080516357eba75960e01b815290516000926001600160a01b0316916357eba7599160048083019260209291908290030181865afa158015613aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acb919061b5a5565b905084613ad982600261b786565b1115613b235760405162461bcd60e51b8152602060048201526019602482015278195c1bd8da081c195c9a5bd9081a5cc81d1bdbc81cdb585b1b603a1b604482015260640161124e565b6031859055602f546000908152603c6020908152604091829020600301548251888152918201819052917f2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7910160405180910390a1505050505050565b60008054600103613ba35760405162461bcd60e51b815260040161124e9061b3cb565b506001600160a01b031660009081526041602052604090205490565b613bf16040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b611c9e83836183de565b6025546001600160a01b03163314613c255760405162461bcd60e51b815260040161124e9061b292565b601054604080516080808252600b908201526a747265617375727946656560a81b60a08201526020810192909252810182905243606082015260008051602061c1f48339815191529060c00160405180910390a1601055565b613c86616637565b6001600160a01b038083166000818152604260205260409020600181015490921614613cc45760405162461bcd60e51b815260040161124e9061b79d565b80546001600160a01b03163314613ced5760405162461bcd60e51b815260040161124e9061b7d4565b613cf6836184de565b15613d4e5760405162461bcd60e51b815260206004820152602260248201527f76616c696461746f72206d757374206e6f7420626520696e20636f6d6d697474604482015261656560f01b606482015260840161124e565b600080613d5a8461853d565b925090508115613d9a5760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640161124e565b60018301546001600160a01b03828116911614613e095760405162461bcd60e51b815260206004820152602760248201527f76616c696461746f72206e6f646520616464726573732063616e2774206265206044820152661d5c19185d195960ca1b606482015260840161124e565b60018301546040517f0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b91613e4f916001600160a01b03909116906003870190889061b823565b60405180910390a160038301613e65858261b14e565b5050505061214060008055565b613e7a616637565b6000604051806102800160405280336001600160a01b0316815260200160006001600160a01b03168152602001856001600160a01b0316815260200186815260200160106000016002015481526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001438152602001600081526020016000815260200184815260200160006005811115613f3f57613f3f61a376565b8152602001613f506012600a61b4fc565b90529050613f5e818361857f565b60208101516101808201516040517f8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c92613f9d92339289918b9161b859565b60405180910390a15061200060008055565b613fb7616637565b6001600160a01b0380831660008181526042602052604090206001015490911614613ff45760405162461bcd60e51b815260040161124e9061b20f565b6001600160a01b0382811660009081526042602052604090205416331461402d5760405162461bcd60e51b815260040161124e9061b246565b6140396004600a61b4fc565b8111156140885760405162461bcd60e51b815260206004820152601f60248201527f7265717569726520636f727265637420636f6d6d697373696f6e207261746500604482015260640161124e565b604080516060810182526001600160a01b038481168252436020808401918252838501868152600f80546000908152600d909352958220855181546001600160a01b0319169516949094178455915160018085019190915591516002909301929092558354929390929091906140ff90849061b0ba565b90915550506040518281526001600160a01b038416907f4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf9060200160405180910390a25061214060008055565b6025546001600160a01b031633146141765760405162461bcd60e51b815260040161124e9061b292565b6141886005805460ff19166001179055565b565b6025546001600160a01b031633146141b45760405162461bcd60e51b815260040161124e9061b292565b600081116142045760405162461bcd60e51b815260206004820152601960248201527f636f6d6d69747465652073697a652063616e2774206265203000000000000000604482015260640161124e565b602854604080516080808252600d908201526c636f6d6d697474656553697a6560981b60a08201526020810192909252810182905243606082015260008051602061c1f48339815191529060c00160405180910390a1602855565b6025546001600160a01b031633146142895760405162461bcd60e51b815260040161124e9061b292565b6029546040805160808082526013908201527236b0bc29b1b432b23ab632a23ab930ba34b7b760691b60a08201526020810192909252810182905243606082015260008051602061c1f48339815191529060c00160405180910390a1602955565b6000805460010361430d5760405162461bcd60e51b815260040161124e9061b3cb565b60008281526009602052604090206005015460ff1661436e5760405162461bcd60e51b815260206004820152601960248201527f756e626f6e64696e67206e6f74206170706c6965642079657400000000000000604482015260640161124e565b5060009081526009602052604090206003015490565b604080516080810182526000808252602082018190529181018290526060810182905290546001036143c85760405162461bcd60e51b815260040161124e9061b3cb565b50600090815260066020908152604091829020825160808101845281546001600160a01b03908116825260018301541692810192909252600281015492820192909252600390910154606082015290565b601c546001600160a01b031633148061443c57506023546001600160a01b031633145b806144515750601d546001600160a01b031633145b61446d5760405162461bcd60e51b815260040161124e9061ae3c565b6049546000906001600160a01b0316630273a3ee61448a85616302565b846040518363ffffffff1660e01b81526004016144a892919061b8a7565b6000604051808303816000875af11580156144c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144ef919081019061b397565b6001600160a01b03808516600090815260426020908152604091829020845181549085166001600160a01b0319918216178255918501516001820180549186169184169190911790559184015160028301805491909416911617909155606082015191925082916003820190614565908261b14e565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190614622908261b14e565b5061024082015160128201805460ff191660018360058111156146475761464761a376565b02179055506102608201518160130155905050505050565b6025546001600160a01b031633146146895760405162461bcd60e51b815260040161124e9061b292565b6146956004600a61b4fc565b8111156146b45760405162461bcd60e51b815260040161124e9061b508565b601554604080516080808252601490820152731dda5d1a1a1bdb191a5b99d51a1c995cda1bdb1960621b60a08201526020810192909252810182905243606082015260008051602061c1f48339815191529060c00160405180910390a1601555565b600080546001036147395760405162461bcd60e51b815260040161124e9061b3cb565b5060455490565b60006032546001614751919061b0ba565b8211156147af5760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f74206765742065706f636820696420666f7220612066757475726560448201526520626c6f636b60d01b606482015260840161124e565b60325482116147cb575060009081526030602052604090205490565b5050602f5490565b6025546001600160a01b031633146147fd5760405162461bcd60e51b815260040161124e9061b292565b6001600160a01b03821660009081526041602052604090205481111561485e5760405162461bcd60e51b8152602060048201526016602482015275416d6f756e7420657863656564732062616c616e636560501b604482015260640161124e565b6001600160a01b0382166000908152604160205260408120805483929061488690849061b402565b92505081905550806044600082825461489f919061b402565b9250508190555080604560008282546148b8919061b402565b90915550506040518181526001600160a01b038316907f5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3906020015b60405180910390a25050565b600061490a616637565b61491683833333616dd0565b90506114be60008055565b600061492b616637565b614916838333336189b7565b6060603e805480602002602001604051908101604052809291908181526020016000905b82821015614a0757838290600052602060002001805461497a9061b0cd565b80601f01602080910402602001604051908101604052809291908181526020018280546149a69061b0cd565b80156149f35780601f106149c8576101008083540402835291602001916149f3565b820191906000526020600020905b8154815290600101906020018083116149d657829003601f168201915b50505050508152602001906001019061495b565b50505050905090565b6000614a1a616637565b614a25338484616894565b6040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060016114be60008055565b6000614a7b616637565b614a87838386336189b7565b9050611c9e60008055565b614a9a619f02565b602f546000908152603c602090815260408083208151815460e09481028201850190935260c08101838152909491938593919285929185015b82821015614bb7576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191614b269061b0cd565b80601f0160208091040260200160405190810160405280929190818152602001828054614b529061b0cd565b8015614b9f5780601f10614b7457610100808354040283529160200191614b9f565b820191906000526020600020905b815481529060010190602001808311614b8257829003601f168201915b50505050508152505081526020019060010190614ad3565b505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081525050905090565b6025546001600160a01b03163314614c525760405162461bcd60e51b815260040161124e9061b292565b6001600160a01b038116614cbc5760405162461bcd60e51b815260206004820152602b60248201527f736c617368657220636f6e74726163742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b606482015260840161124e565b6049546040805160808082526007908201526639b630b9b432b960c91b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1604980546001600160a01b0319166001600160a01b0392909216919091179055565b6060603d805480602002602001604051908101604052809291908181526020016000905b82821015614a07576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191614dad9061b0cd565b80601f0160208091040260200160405190810160405280929190818152602001828054614dd99061b0cd565b8015614e265780601f10614dfb57610100808354040283529160200191614e26565b820191906000526020600020905b815481529060010190602001808311614e0957829003601f168201915b50505050508152505081526020019060010190614d5a565b614e46619f02565b600054600103614e685760405162461bcd60e51b815260040161124e9061b3cb565b603254614e7690600161b0ba565b821115614ed15760405162461bcd60e51b815260206004820152602360248201527f63616e6e6f74206765742065706f636820666f7220612066757475726520626c6044820152626f636b60e81b606482015260840161124e565b602f546032548311614eee57506000828152603060205260409020545b6000818152603c602090815260408083208151815460e09481028201850190935260c08101838152909491938593919285929185015b82821015615008576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018101549383019390935260028301805492939291840191614f779061b0cd565b80601f0160208091040260200160405190810160405280929190818152602001828054614fa39061b0cd565b8015614ff05780601f10614fc557610100808354040283529160200191614ff0565b820191906000526020600020905b815481529060010190602001808311614fd357829003601f168201915b50505050508152505081526020019060010190614f24565b505050508152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081525050915050919050565b6025546001600160a01b031633146150a65760405162461bcd60e51b815260040161124e9061b292565b6121408282618ead565b6025546001600160a01b031633146150da5760405162461bcd60e51b815260040161124e9061b292565b601f54604080516080808252601590820152741cdd5c1c1b1e50dbdb9d1c9bdb10dbdb9d1c9858dd605a1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1601f80546001600160a01b0319166001600160a01b038381169190911790915560205416156115755760205460405163052e5a0560e41b81526001600160a01b038381166004830152909116906352e5a05090602401612497565b6151a3616637565b6001600160a01b03808216600081815260426020526040902060010154909116146151e05760405162461bcd60e51b815260040161124e9061b20f565b6001600160a01b0380821660009081526042602052604090208054909116331461521c5760405162461bcd60e51b815260040161124e9061b7d4565b6000601282015460ff1660058111156152375761523761a376565b036152845760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f7220616c7265616479206163746976650000000000000000604482015260640161124e565b6002601282015460ff16600581111561529f5761529f61a376565b1480156152af5750438160100154115b156152fc5760405162461bcd60e51b815260206004820152601760248201527f76616c696461746f72207374696c6c20696e206a61696c000000000000000000604482015260640161124e565b6004601282015460ff1660058111156153175761531761a376565b1480156153275750438160100154115b156153835760405162461bcd60e51b815260206004820152602660248201527f76616c696461746f72207374696c6c20696e206a61696c20666f7220696e616360448201526574697669747960d01b606482015260840161124e565b6003601282015460ff16600581111561539e5761539e61a376565b141580156153c557506005601282015460ff1660058111156153c2576153c261a376565b14155b6154115760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f72206a61696c6564207065726d616e656e746c7900000000604482015260640161124e565b60128101805460ff191690558054602f546000908152603c60209081526040918290206003015491519182526001600160a01b038581169316917f60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5910160405180910390a35061157560008055565b6025546001600160a01b031633146154aa5760405162461bcd60e51b815260040161124e9061b292565b602354604080516080808252601e908201527f6f6d697373696f6e4163636f756e746162696c697479436f6e7472616374000060a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1602380546001600160a01b0319166001600160a01b0392909216919091179055565b6060806003600481805461554d9061b0cd565b80601f01602080910402602001604051908101604052809291908181526020018280546155799061b0cd565b80156155c65780601f1061559b576101008083540402835291602001916155c6565b820191906000526020600020905b8154815290600101906020018083116155a957829003601f168201915b505050505091508080546155d99061b0cd565b80601f01602080910402602001604051908101604052809291908181526020018280546156059061b0cd565b80156156525780601f1061562757610100808354040283529160200191615652565b820191906000526020600020905b81548152906001019060200180831161563557829003601f168201915b50505050509050915091509091565b606061566f60005460011490565b1561568c5760405162461bcd60e51b815260040161124e9061b3cb565b602e8054806020026020016040519081016040528092919081815260200182805480156156e257602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116156c4575b5050505050905090565b6156f4619f5b565b506040805161020081018252601054608080830191825260115460a08085019190915260125460c08086019190915260135460e08087019190915260145461010080880191909152601554610120808901919091526016546101408901526017546101608901526018546001600160a01b039081166101808a015260195481166101a08a0152601a546101c08a0152601b546101e08a015296885288519081018952601c5487168152601d548716602082810191909152601e548816828b0152601f5488166060808401919091528154891683890152602154891683880152602254891683870152602354891683860152602454891683850152818a019290925289519283018a52602554909716825260265496820196909652602754818901526028548187015260295494810194909452602a5492840192909252602b5490830152602c549082015292820192909252602d549181019190915290565b6025546001600160a01b0316331461587c5760405162461bcd60e51b815260040161124e9061b292565b602154604080516080808252601690820152751d5c19dc98591953585b9859d95c90dbdb9d1c9858dd60521b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1602180546001600160a01b0319166001600160a01b0392909216919091179055565b6025546001600160a01b0316331461592f5760405162461bcd60e51b815260040161124e9061b292565b614188618ec3565b6025546001600160a01b031633146159615760405162461bcd60e51b815260040161124e9061b292565b60208054604080516080808252601590820152741cdd18589a5b1a5e985d1a5bdb90dbdb9d1c9858dd605a1b60a08201526001600160a01b0392831693810193909352908316828201524360608301525160008051602061c1d48339815191529181900360c00190a1602080546001600160a01b0319166001600160a01b03838116919091179091556024541615615a525760248054604051634f50589560e01b81526001600160a01b03848116600483015290911691634f5058959101600060405180830381600087803b158015615a3957600080fd5b505af1158015615a4d573d6000803e3d6000fd5b505050505b601f546001600160a01b03161561157557601f54604051636dbfa90d60e11b81526001600160a01b0383811660048301529091169063db7f521a90602401612497565b615aa16004600a61b4fc565b81565b6025546001600160a01b03163314615ace5760405162461bcd60e51b815260040161124e9061b292565b601e54604080516080808252600b908201526a1858dd50dbdb9d1c9858dd60aa1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1601e80546001600160a01b0319166001600160a01b0383811691909117909155602054161561157557602054604051634b8ef94360e01b81526001600160a01b03838116600483015290911690634b8ef94390602401612497565b6025546001600160a01b03163314615baf5760405162461bcd60e51b815260040161124e9061b292565b601954604080516080808252600f908201526e1d1c99585cdd5c9e5058d8dbdd5b9d608a1b60a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1601980546001600160a01b0319166001600160a01b0392909216919091179055565b60008054600103615c545760405162461bcd60e51b815260040161124e9061b3cb565b506001600160a01b039182166000908152603f6020908152604080832093909416825291909152205490565b60008054600103615ca35760405162461bcd60e51b815260040161124e9061b3cb565b506001600160a01b039182166000908152604060208181528183209390941682529190925290205490565b60008054600103615cf15760405162461bcd60e51b815260040161124e9061b3cb565b50600090815260096020526040902060050154610100900460ff1690565b6025546001600160a01b03163314615d395760405162461bcd60e51b815260040161124e9061b292565b615d456004600a61b4fc565b811115615d645760405162461bcd60e51b815260040161124e9061b508565b6017546040805160808082526010908201526f6f7261636c655265776172645261746560801b60a08201526020810192909252810182905243606082015260008051602061c1f48339815191529060c00160405180910390a1601755565b6025546001600160a01b03163314615dec5760405162461bcd60e51b815260040161124e9061b292565b60008111615e485760405162461bcd60e51b8152602060048201526024808201527f676173206c696d6974206e6565647320746f20626520677265617465722074686044820152630616e20360e41b606482015260840161124e565b6039819055602a546040805160808082526008908201526719d85cd31a5b5a5d60c21b60a08201526020810192909252810182905243606082015260008051602061c1f48339815191529060c00160405180910390a150565b6025546001600160a01b03163314615ecb5760405162461bcd60e51b815260040161124e9061b292565b602254604080516080808252601b908201527f696e666c6174696f6e436f6e74726f6c6c6572436f6e7472616374000000000060a08201526001600160a01b039283166020820152918316828201524360608301525160008051602061c1d48339815191529181900360c00190a1602280546001600160a01b0319166001600160a01b0392909216919091179055565b615f6361a07e565b601c54604080516330fe427560e21b815290516000926001600160a01b03169163c3f909d4916004808301926101209291908290030181865afa158015615fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615fd2919061b921565b6040805160c0810182526026548152602754602080830191909152602a5482840152602c54606080840191909152835190810184528385015181528185015181830152601c548451631b7a307160e31b81528551969750939560808701959294928501936001600160a01b039092169263dbd183889260048083019391928290030181865afa158015616069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061608d919061b5a5565b90528152604080516080810182526011548152601a54602082810191909152601b5492820192909252602b54606082015291015292915050565b602f546000908152603c60205260409020600301544310156161205760405162461bcd60e51b8152602060048201526012602482015271195c1bd8da081a5cc81b9bdd08195b99195960721b604482015260640161124e565b601c5483906001600160a01b031633148061614557506023546001600160a01b031633145b8061616c57506001600160a01b038181166000908152604260205260409020600c01541633145b806161815750601d546001600160a01b031633145b6161d85760405162461bcd60e51b815260206004820152602260248201527f63616c6c6572206973206e6f742061207265776172642064697374726962757460448201526137b960f11b606482015260840161124e565b6161e2828461b0ba565b3360009081526041602052604090205410156162355760405162461bcd60e51b81526020600482015260126024820152716e6f7420656e6f7567682062616c616e636560701b604482015260640161124e565b6001600160a01b03841661628b5760405162461bcd60e51b815260206004820181905260248201527f76616c696461746f7220616464726573732063616e6e6f74206265207a65726f604482015260640161124e565b6001600160a01b03808516600081815260426020526040902060010154909116146162c85760405162461bcd60e51b815260040161124e9061b79d565b6162d2828461b0ba565b33600090815260416020526040812080549091906162f190849061b402565b909155506120009050848484618ee7565b61630a619e03565b6001600160a01b0382166163605760405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f74207265717565737420656d7074792076616c696461746f720000604482015260640161124e565b6001600160a01b038083166000818152604260205260409020600101549091161461639d5760405162461bcd60e51b815260040161124e9061b79d565b6001600160a01b0380831660009081526042602090815260409182902082516102808101845281548516815260018201548516928101929092526002810154909316918101919091526003820180549192916060840191906163fe9061b0cd565b80601f016020809104026020016040519081016040528092919081815260200182805461642a9061b0cd565b80156164775780601f1061644c57610100808354040283529160200191616477565b820191906000526020600020905b81548152906001019060200180831161645a57829003601f168201915b505050918352505060048201546020820152600582015460408201526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b820154610100820152600c8201546001600160a01b0316610120820152600d820154610140820152600e820154610160820152600f82015461018082015260108201546101a08201526011820180546101c0909201916165269061b0cd565b80601f01602080910402602001604051908101604052809291908181526020018280546165529061b0cd565b801561659f5780601f106165745761010080835404028352916020019161659f565b820191906000526020600020905b81548152906001019060200180831161658257829003601f168201915b5050509183525050601282015460209091019060ff1660058111156165c6576165c661a376565b60058111156165d7576165d761a376565b81526020016013820154815250509050919050565b600d8101541561157557600d8101546166076012600a61b4fc565b8260080154836005015461661b919061b402565b616625919061b786565b61662f919061b9bc565b601382015550565b6000541561667d5760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b604482015260640161124e565b6001600055565b6001600160a01b0383166166e65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161124e565b6001600160a01b0382166167475760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161124e565b6001600160a01b038381166000818152603f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038116600090815260426020526040812090601282015460ff1660058111156167db576167db61a376565b146168285760405162461bcd60e51b815260206004820152601860248201527f76616c696461746f72206d757374206265206163746976650000000000000000604482015260640161124e565b60128101805460ff191660011790558054602f546000908152603c60209081526040918290206003015491519182526001600160a01b038581169316917f75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c910160405180910390a35050565b6001600160a01b0383166000908152604160205260409020548111156168f55760405162461bcd60e51b8152602060048201526016602482015275616d6f756e7420657863656564732062616c616e636560501b604482015260640161124e565b6001600160a01b0383166000908152604160205260408120805483929061691d90849061b402565b925050819055508060446000828254616936919061b0ba565b90915550616947905081600261b786565b6001600160a01b0383166000908152604160205260408120805490919061696f90849061b0ba565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161679c91815260200190565b6001600160a01b038216600090815260416020526040812080548392906169e390849061b0ba565b9250508190555080604460008282546169fc919061b0ba565b925050819055508060456000828254616a15919061b0ba565b90915550506040518181526001600160a01b038316907f48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf906020016148f4565b6001600160a01b038416616aab5760405162461bcd60e51b815260206004820152601c60248201527f7661756c7420616464726573732063616e6e6f74206265207a65726f00000000604482015260640161124e565b60008111616afb5760405162461bcd60e51b815260206004820181905260248201527f7363686564756c65206475726174696f6e2063616e6e6f74206265207a65726f604482015260640161124e565b42821015616b595760405162461bcd60e51b815260206004820152602560248201527f7363686564756c652063616e6e6f74207374617274206265666f72652063726560448201526430ba34b7b760d91b606482015260840161124e565b60008311616ba95760405162461bcd60e51b815260206004820152601960248201527f616d6f756e742073686f756c6420626520706f73697469766500000000000000604482015260640161124e565b6001600160a01b03841660009081526001602052604081208054909103616c1657600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0387161790555b6040805160a08101825285815260006020808301828152838501888152606080860189815260808701868152895460018082018c558b8952978790209851600590910290980197885593519587019590955590516002860155925160038501555160049093019290925582518781529182018690529181018490526001600160a01b038716917fe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd910160405180910390a25050505050565b6001600160a01b038316616d245760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f2061646472657373000000604482015260640161124e565b6001600160a01b038216616d7a5760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f20616464726573730000000000604482015260640161124e565b6001600160a01b0383811660008181526040602081815281832094871680845294815291819020859055518481527f78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea910161679c565b6001600160a01b0384166000818152604260205260408120909115801590616e07575060018101546001600160a01b038781169116145b616e235760405162461bcd60e51b815260040161124e9061b79d565b6000601282015460ff166005811115616e3e57616e3e61a376565b14616e8b5760405162461bcd60e51b815260206004820152601b60248201527f76616c696461746f72206e65656420746f206265206163746976650000000000604482015260640161124e565b60008511616ee75760405162461bcd60e51b815260206004820152602360248201527f616d6f756e74206e65656420746f206265207374726963746c7920706f73697460448201526269766560e81b606482015260840161124e565b6001600160a01b038416600090815260416020526040902054851115616f4f5760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74204e6577746f6e2062616c616e63650000000000604482015260640161124e565b6001600160a01b03841660009081526041602052604081208054879290616f7790849061b402565b9091555050604080516080810182526001600160a01b0386811680835289821660208085018281528587018c8152436060808901918252600880546000908152600687528b90208a518154908b166001600160a01b03199182161782559551600182018054918c16919097161790955592516002850155905160039093019290925588549054885191871686148083529382018e90529781019790975294959094938916937fcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2910160405180910390a4600880549060006170578361b9d0565b9190505550600160085461706b919061b402565b98975050505050505050565b600254600090815b818110156171fb57600060016000600284815481106170a0576170a061b9e9565b60009182526020808320909101546001600160a01b0316835282019290925260400181208054909250905b818110156171f05760008382815481106170e7576170e761b9e9565b90600052602060002090600502019050806004015488101561715c5760405162461bcd60e51b815260206004820152602860248201527f7363686564756c6520616c726561647920756e6c6f636b656420666f7220676960448201526776656e2074696d6560c01b606482015260840161124e565b8060020154881161716d57506171e8565b60048101889055600381015460028201546000919061718c908b61b402565b10617199575080546171c6565b6003820154825460028401546171af908c61b402565b6171b9919061b786565b6171c3919061b9bc565b90505b60018201546171d5908261b402565b6171df908961b0ba565b60019092015595505b6001016170cb565b50505060010161707f565b5050919050565b8115801561720e575080155b15617217575050565b601054600090670de0b6b3a76400009061723290859061b786565b61723c919061b9bc565b905080156172b4576019546040516000916001600160a01b03169083908381818185875af1925050503d8060008114617291576040519150601f19603f3d011682016040523d82523d6000602084013e617296565b606091505b50909150508015156001036172b2576172af828561b402565b93505b505b600080806172c46004600a61b4fc565b6017546172d1908861b786565b6172db919061b9bc565b905060006172eb6004600a61b4fc565b6017546172f8908861b786565b617302919061b9bc565b602354604080516353b1821b60e01b815290519293506000926001600160a01b03909216916353b1821b916004808201926020929091908290030181865afa158015617352573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617376919061b5a5565b11156173fc57603b5461738b6004600a61b4fc565b617395919061b786565b603d546016546173a5908a61b786565b6173af919061b786565b6173b9919061b9bc565b603b549094506173cb6004600a61b4fc565b6173d5919061b786565b603d546016546173e5908961b786565b6173ef919061b786565b6173f9919061b9bc565b92505b617406848361b0ba565b617410908861b402565b965061741c838261b0ba565b617426908761b402565b60235460408051637f5e2f1160e01b815290519298506000926001600160a01b0390921691637f5e2f11916004808201926020929091908290030181865afa158015617476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061749a919061b5a5565b603d549091506000906001600160401b038111156174ba576174ba61a7c0565b6040519080825280602002602001820160405280156174e3578160200160208202803683370190505b5090506000806000805b603d54811015617a3a57600060426000603d84815481106175105761751061b9e9565b906000526020600020906003020160000160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020905060006034548f603d85815481106175705761757061b9e9565b90600052602060002090600302016001015461758c919061b786565b617596919061b9bc565b905060006034548f603d86815481106175b1576175b161b9e9565b9060005260206000209060030201600101546175cd919061b786565b6175d7919061b9bc565b905060008211806175e85750600081115b15617a2e576002601284015460ff1660058111156176085761760861a376565b148061762c57506003601284015460ff16600581111561762a5761762a61a376565b145b1561766457838888815181106176445761764461b9e9565b6020908102919091010152866176598161b9d0565b975050505050617a32565b6004601284015460ff16600581111561767f5761767f61a376565b14806176a357506005601284015460ff1660058111156176a1576176a161a376565b145b156176c8576176b2828761b0ba565b95506176be818661b0ba565b9450505050617a32565b6023546001840154604051634d08f07360e11b81526001600160a01b0391821660048201526000929190911690639a11e0e690602401602060405180830381865afa15801561771b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061773f919061b5a5565b6015549091508111156177b15760008a617759838661b786565b617763919061b9bc565b905060008b617772848661b786565b61777c919061b9bc565b9050617788828a61b0ba565b9850617794818961b0ba565b97506177a0828661b402565b94506177ac818561b402565b935050505b6000846008015485600501546177c7919061b402565b90506000856005015485836177dc919061b786565b6177e6919061b9bc565b905060006177f4828761b402565b905080156178b057865460405160009182916001600160a01b03909116906108fc90859084818181858888f193505050503d8060008114617851576040519150601f19603f3d011682016040523d82523d6000602084013e617856565b606091505b5090925090508115156000036178ad5788546040517f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352916178a4916001600160a01b0390911690849061b9ff565b60405180910390a15b50505b60058701546000906178c2878661b786565b6178cc919061b9bc565b905060006178da828861b402565b306000908152604160205260408120805492935083929091906178fe90849061b402565b9091555050600189015461791d906001600160a01b0316826000618ee7565b600084118061792c5750600082115b156179ce57600c89015461794b9030906001600160a01b031684616894565b600c8901546001600160a01b03166000818152604160205260409081902054905163a0ce552d60e01b8152600481019190915263a0ce552d90869060240160206040518083038185885af11580156179a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906179cc919061b5a5565b505b60018901546040805185815260208101879052908101839052606081018490526001600160a01b03909116907f5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d59060800160405180910390a25050505050505b5050505b6001016174ed565b508215617bb25760005b83811015617bb0576000858281518110617a6057617a6061b9e9565b6020026020010151905060006034548f603d8481548110617a8357617a8361b9e9565b906000526020600020906003020160010154617a9f919061b786565b617aa9919061b9bc565b905060006034548f603d8581548110617ac457617ac461b9e9565b906000526020600020906003020160010154617ae0919061b786565b617aea919061b9bc565b601c54909150617b059030906001600160a01b031683616894565b601c54603d80546001600160a01b039092169163a8031a1d91859187908110617b3057617b3061b9e9565b600091825260209091206003909102015460405160e084901b6001600160e01b03191681526001600160a01b039091166004820152602481018590526044016000604051808303818588803b158015617b8857600080fd5b505af1158015617b9c573d6000803e3d6000fd5b505060019096019550617a44945050505050565b505b602354604080516353b1821b60e01b815290516000926001600160a01b0316916353b1821b9160048083019260209291908290030181865afa158015617bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617c20919061b5a5565b1115617cb2576023546001600160a01b0316617c3d30828b616894565b6023546001600160a01b038281166000908152604160205260409081902054905163eeb9223360e01b8152600481019190915291169063eeb92233908c906024016000604051808303818588803b158015617c9757600080fd5b505af1158015617cab573d6000803e3d6000fd5b5050505050505b601d54617cca9030906001600160a01b031688616894565b601d546001600160a01b031660008181526041602052604090819020549051630b32e9c760e31b815260048101919091526359974e389089906024016000604051808303818588803b158015617d1f57600080fd5b505af1158015617d33573d6000803e3d6000fd5b50505050506000821115617df25760185460405160009182916001600160a01b039091169085908381818185875af1925050503d8060008114617d92576040519150601f19603f3d011682016040523d82523d6000602084013e617d97565b606091505b509092509050811515600003617def576018546040517f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d35291617de6916001600160a01b0390911690849061b9ff565b60405180910390a15b50505b8015617e1057601854617e109030906001600160a01b031683616894565b505050505050505050505050565b6007545b600854811015617e4557617e4081617e398161b9d0565b9250618f5c565b617e22565b50600854600755600b54600a5403617e5957565b600c545b600b54811015617e8057617e7b81617e748161b9d0565b925061918d565b617e5d565b50600b54600c55600a54805b600b54811015617ee3576013546000828152600960205260409020600401544391617eb69161b0ba565b11617ed657617ec481619460565b617ecf60018361b0ba565b9150617edb565b617ee3565b600101617e8c565b50600a55565b600f54600e54101561418857600e546000908152600d6020526040902060135460018201544391617f199161b0ba565b1115617f225750565b80546001600160a01b039081166000908152604260205260409081902060028401546004808301829055600c83015493516319fac8fd60e01b8152929493909316926319fac8fd92617f7992910190815260200190565b600060405180830381600087803b158015617f9357600080fd5b505af1158015617fa7573d6000803e3d6000fd5b5050600e80546000908152600d6020526040812080546001600160a01b031916815560018082018390556002909101829055825490945091925090617fed90849061b0ba565b90915550617ee992505050565b60608060606000602e80549050116180545760405162461bcd60e51b815260206004820152601860248201527f5468657265206d7573742062652076616c696461746f72730000000000000000604482015260640161124e565b61805c61a0f9565b6028546080820152602e815260426020820152603d604082015260346060820152618086816195a8565b602854603b55618098603e600061a117565b603d54806180dd5760405162461bcd60e51b8152602060048201526012602482015271636f6d6d697474656520697320656d70747960701b604482015260640161124e565b6000816001600160401b038111156180f7576180f761a7c0565b604051908082528060200260200182016040528015618120578160200160208202803683370190505b5090506000826001600160401b0381111561813d5761813d61a7c0565b604051908082528060200260200182016040528015618166578160200160208202803683370190505b5090506000836001600160401b038111156181835761818361a7c0565b6040519080825280602002602001820160405280156181ac578160200160208202803683370190505b50905060005b848110156182e157600060426000603d84815481106181d3576181d361b9e9565b60009182526020808320600392830201546001600160a01b0316845283019390935260409091018120603e8054600181018255925292507f8d800d6614d35eed73733ee453164a3b48076eb3138f466adeeb9dec7bb31f7001906182399083018261ba2e565b50600281015485516001600160a01b039091169086908490811061825f5761825f61b9e9565b6001600160a01b039283166020918202929092010152600182015485519116908590849081106182915761829161b9e9565b6001600160a01b039283166020918202929092010152815484519116908490849081106182c0576182c061b9e9565b6001600160a01b0390921660209283029190910190910152506001016181b2565b50919790965090945092505050565b6000828152603c6020908152604080832084830151600182015584820151600282015560608086015160038301556080860151600483015560a0860151805160058401559384015160068301559183015160078201559101516008820155905b8251518110156120005782518051839190839081106183715761837161b9e9565b602090810291909101810151825460018082018555600094855293839020825160039092020180546001600160a01b0319166001600160a01b039092169190911781559181015192820192909255604082015160028201906183d3908261b14e565b505050600101618350565b6184106040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0383166000908152600160205260409020805483106184785760405162461bcd60e51b815260206004820152601760248201527f7363686564756c6520646f6573206e6f74206578697374000000000000000000604482015260640161124e565b80838154811061848a5761848a61b9e9565b90600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505091505092915050565b6000805b603d5481101561853457603d81815481106184ff576184ff61b9e9565b60009182526020909120600390910201546001600160a01b039081169084160361852c5750600192915050565b6001016184e2565b50600092915050565b60008061854861a135565b60008060ff9050604083875160208901845afa61856457600080fd5b50508051602090910151600160601b90910494909350915050565b60e28151146185c75760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b604482015260640161124e565b6030826102200151511461861d5760405162461bcd60e51b815260206004820152601c60248201527f496e76616c696420636f6e73656e737573206b6579206c656e67746800000000604482015260640161124e565b618626826195c2565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a000000000000602080830191909152845192519192600092618688920160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405290506000826186a683516196f0565b836040516020016186b99392919061bb02565b60408051601f198184030181528282528051602091820120600280855260608501845290945060009392909183019080368337019050509050600080808061870d89826187086041600261b786565b6197f8565b905060006187288a6187216041600261b786565b60606197f8565b905060205b82518110156187ed576187408382619905565b6040805160008152602081018083528d905260ff8316918101919091526060810184905260808101839052929850909650945060019060a0016020604051602081039080840390855afa15801561879b573d6000803e3d6000fd5b5050604051601f1901519050876187b360418461b9bc565b815181106187c3576187c361b9e9565b6001600160a01b03909216602092830291909101909101526187e660418261b0ba565b905061872d565b508a602001516001600160a01b03168660008151811061880f5761880f61b9e9565b60200260200101516001600160a01b03161461887f5760405162461bcd60e51b815260206004820152602960248201527f496e76616c6964206e6f6465206b6579206f776e6572736869702070726f6f66604482015268081c1c9bdd9a59195960ba1b606482015260840161124e565b8a604001516001600160a01b0316866001815181106188a0576188a061b9e9565b60200260200101516001600160a01b0316146189125760405162461bcd60e51b815260206004820152602b60248201527f496e76616c6964206f7261636c65206b6579206f776e6572736869702070726f60448201526a1bd9881c1c9bdd9a59195960aa1b606482015260840161124e565b60016189288c6102200151838e60000151619939565b146189945760405162461bcd60e51b815260206004820152603660248201527f496e76616c696420636f6e73656e737573206b6579206f776e65727368697020604482015275383937b7b3103337b9103932b3b4b9ba3930ba34b7b760511b606482015260840161124e565b6189a18b604001516199a1565b6189aa8b619a1b565b5050505050505050505050565b6001600160a01b03841660008181526042602052604081209091158015906189ee575060018101546001600160a01b038781169116145b618a0a5760405162461bcd60e51b815260040161124e9061b79d565b60008511618a525760405162461bcd60e51b81526020600482015260156024820152740756e626f6e64696e6720616d6f756e74206973203605c1b604482015260640161124e565b80546001600160a01b0385811691161480618c3b57600c820154604051631092ab9160e31b81526001600160a01b03878116600483015260009216906384955c8890602401602060405180830381865afa158015618ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190618ad8919061b5a5565b905086811015618b3e5760405162461bcd60e51b815260206004820152602b60248201527f696e73756666696369656e7420756e6c6f636b6564204c6971756964204e657760448201526a746f6e2062616c616e636560a81b606482015260840161124e565b856001600160a01b0316856001600160a01b031603618bc457600c83015460405163282d3fdf60e01b81526001600160a01b038881166004830152602482018a90529091169063282d3fdf90604401600060405180830381600087803b158015618ba757600080fd5b505af1158015618bbb573d6000803e3d6000fd5b50505050618c35565b600c83015460405163708e91e560e01b81526001600160a01b0388811660048301528781166024830152604482018a90529091169063708e91e590606401600060405180830381600087803b158015618c1c57600080fd5b505af1158015618c30573d6000803e3d6000fd5b505050505b50618d33565b846001600160a01b0316846001600160a01b031614618ca65760405162461bcd60e51b815260206004820152602160248201527f63616e6e6f7420756e626f6e6420504153207573696e6720616c6c6f77616e636044820152606560f81b606482015260840161124e565b8582600b01548360080154618cbb919061b402565b1015618d195760405162461bcd60e51b815260206004820152602760248201527f696e73756666696369656e742073656c6620626f6e646564206e6577746f6e2060448201526662616c616e636560c81b606482015260840161124e565b8582600b016000828254618d2d919061b0ba565b90915550505b836001600160a01b0316856001600160a01b0316886001600160a01b03167f58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c848a600b54604051618d999392919092151583526020830191909152604082015260600190565b60405180910390a46040805161010080820183526001600160a01b0388811683528a811660208085019182528486018c8152600060608701818152436080890190815260a0890183815260c08a018481528c151560e08c01908152600b8054875260099098529b85209a518b546001600160a01b0319908116918b16919091178c55975160018c01805490991699169890981790965592516002890155516003880155905160048701559151600590950180549351965161ffff1990941695151561ff001916959095179515159093029490941762ff00001916620100009115159190910217909155805491618e8e8361b9d0565b91905055506001600b54618ea2919061b402565b979650505050505050565b618eb8600383619cb8565b612140600482619cb8565b618ecf6003600061a153565b618edb6004600061a153565b6005805460ff19169055565b81158015618ef3575080155b15618efd57505050565b6001600160a01b038316600090815260426020526040812060088101805491928592618f2a90849061b0ba565b90915550618f3a9050828461b0ba565b816005016000828254618f4d919061b0ba565b909155506120009050816165ec565b600081815260066020908152604080832060018101546001600160a01b03168452604290925282209091601282015460ff166005811115618f9f57618f9f61a376565b1461902e57600282015482546001600160a01b031660009081526041602052604081208054909190618fd290849061b0ba565b909155505081546001830154600284015460128401546040516001600160a01b0394851694909316927f1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f8783429261679c92909160ff9091169061bb45565b805482546001600160a01b0390811691161461914c576000808260080154836005015461905b919061b402565b90508060000361908257600284015491506190786012600a61b4fc565b60138401556190a4565b80846002015484600d0154619097919061b786565b6190a1919061b9bc565b91505b600c83015484546040516340c10f1960e01b81526001600160a01b039182166004820152602481018590529116906340c10f1990604401600060405180830381600087803b1580156190f557600080fd5b505af1158015619109573d6000803e3d6000fd5b505050508183600d016000828254619121919061b0ba565b9091555050600284015460058401805460009061913f90849061b0ba565b9091555061918892505050565b8160020154816008016000828254619164919061b0ba565b9091555050600282015460058201805460009061918290849061b0ba565b90915550505b505050565b600081815260096020908152604080832060018101546001600160a01b031684526042909252822060058201549192909162010000900460ff1661936a576002830154600c8301548454604051637eee288d60e01b81526001600160a01b03918216600482015260248101849052911690637eee288d90604401600060405180830381600087803b15801561922157600080fd5b505af1158015619235573d6000803e3d6000fd5b50505050600c8301548454604051632770a7eb60e21b81526001600160a01b03918216600482015260248101849052911690639dc29fac90604401600060405180830381600087803b15801561928a57600080fd5b505af115801561929e573d6000803e3d6000fd5b505050506000836008015484600501546192b8919061b402565b600d8501549091506192ca828461b786565b6192d4919061b9bc565b92508184600d0160008282546192ea919061b402565b90915550506006840154600003619307576003850183905561932b565b6006840154600785015461931b908561b786565b619325919061b9bc565b60038601555b8284600601600082825461933f919061b0ba565b9091555050600385015460078501805460009061935d90849061b0ba565b9091555061943092505050565b5060028201546008820154811115619383575060088101545b816009015460000361939b57600383018190556193bf565b6009820154600a8301546193af908361b786565b6193b9919061b9bc565b60038401555b808260090160008282546193d3919061b0ba565b90915550506003830154600a830180546000906193f190849061b0ba565b925050819055508082600801600082825461940c919061b402565b90915550506002830154600b8301805460009061942a90849061b402565b90915550505b6005808401805460ff191660011790558201805482919060009061945590849061b402565b909155505050505050565b600081815260096020526040812060058101805461ff001916610100179055600381015490910361948f575050565b60018101546001600160a01b03166000908152604260205260408120600583015490919062010000900460ff16619522578160070154826006015484600301546194d9919061b786565b6194e3919061b9bc565b9050808260060160008282546194f9919061b402565b9091555050600383015460078301805460009061951790849061b402565b9091555061957f9050565b81600a01548260090154846003015461953b919061b786565b619545919061b9bc565b90508082600901600082825461955b919061b402565b90915550506003830154600a8301805460009061957990849061b402565b90915550505b82546001600160a01b03166000908152604160205260408120805483929061945590849061b0ba565b60fa60a06000808285855af4619188573d6000803e3d6000fd5b60006195d1826060015161853d565b6001600160a01b0390911660208401529050801561961f5760405162461bcd60e51b815260206004820152600b60248201526a32b737b2329032b93937b960a91b604482015260640161124e565b6020808301516001600160a01b039081166000908152604290925260409091206001015416156196915760405162461bcd60e51b815260206004820152601c60248201527f76616c696461746f7220616c7265616479207265676973746572656400000000604482015260640161124e565b61969d6004600a61b4fc565b826080015111156121405760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420636f6d6d697373696f6e2072617465000000000000000000604482015260640161124e565b6060816000036197175750506040805180820190915260018152600360fc1b602082015290565b8160005b8115619741578061972b8161b9d0565b915061973a9050600a8361b9bc565b915061971b565b6000816001600160401b0381111561975b5761975b61a7c0565b6040519080825280601f01601f191660200182016040528015619785576020820181803683370190505b5090505b84156197f05761979a60018361b402565b91506197a7600a8661bb59565b6197b290603061b0ba565b60f81b8183815181106197c7576197c761b9e9565b60200101906001600160f81b031916908160001a9053506197e9600a8661b9bc565b9450619789565b949350505050565b60608161980681601f61b0ba565b10156198455760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161124e565b61984f828461b0ba565b845110156198935760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161124e565b6060821580156198b257604051915060008252602082016040526198fc565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156198eb5780518352602092830192016198d3565b5050858452601f01601f1916604052505b50949350505050565b8181018051602082015160409092015190919060001a601b8110156199325761992f601b8261bb6d565b90505b9250925092565b600061994361a18d565b600085858560405160200161995a9392919061bb86565b6040516020818303038152906040529050600060fb9050600082516020619981919061b0ba565b90506020848285855afa61999457600080fd5b5050905195945050505050565b6001600160a01b038116600090815260436020526040902054156199fe5760405162461bcd60e51b81526020600482015260146024820152736f7261636c65207365727665722065786973747360601b604482015260640161124e565b6001600160a01b0316600090815260436020526040902060019055565b6101808101516001600160a01b0316619b10576048546001600160a01b0316619a915760405162461bcd60e51b815260206004820152602260248201527f6c6971756964206c6f67696320636f6e7472616374206e6f74206465706c6f79604482015261195960f21b606482015260840161124e565b602e54600090619aa0906196f0565b905081602001518260000151836080015183604860009054906101000a90046001600160a01b0316604051619ad49061a1ab565b619ae295949392919061bbd1565b604051809103906000f080158015619afe573d6000803e3d6000fd5b506001600160a01b0316610180830152505b60208181018051602e80546001808201835560009283527f37fa166cbdbfbb1561ccd9ea985ec0218b5e68502e230525f544285b2bdf3d7e90910180546001600160a01b03199081166001600160a01b0395861617909155845184168352604290955260409182902086518154871690851617815593519084018054861691841691909117905584015160028301805490941691161790915560608201518291906003820190619bc0908261b14e565b506080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b820155610180820151600c820180546001600160a01b0319166001600160a01b039092169190911790556101a0820151600d8201556101c0820151600e8201556101e0820151600f82015561020082015160108201556102208201516011820190619c7d908261b14e565b5061024082015160128201805460ff19166001836005811115619ca257619ca261a376565b0217905550610260820151816013015590505050565b815460026001808316156101000203821604825180820160208110602084100160028114619d625760018114619d87578660005260208404602060002001600160028402018855602085068060200390508088018589016001836101000a0392508282511684540184556001840193506020820191505b80821015619d4c5781518455600184019350602082019150619d2f565b815191036101000a908190040290915550619dfa565b60028302826020036101000a846020036101000a602089015104020185018755619dfa565b8660005260208404602060002001600160028402018855846020038088018589016001836101000a0392508282511660ff198a160184556020820191506001840193505b80821015619de85781518455600184019350602082019150619dcb565b815191036101000a9081900402909155505b50505050505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016060815260200160006005811115619ec457619ec461a376565b8152602001600081525090565b6040805160808101825260008082526020820152908101619ef0619f02565b8152602001619efd61a07e565b905290565b6040518060c001604052806060815260200160008152602001600081526020016000815260200160008152602001619efd6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518060800160405280619fdc604051806101800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b8152604080516101208101825260008082526020828101829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201529101908152602001619ec460405180610100016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200161a0c960405180606001604052806000815260200160008152602001600081525090565b8152602001619efd6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518060a001604052806005906020820280368337509192915050565b5080546000825590600052602060002090810190611575919061a1b8565b60405180604001604052806002906020820280368337509192915050565b50805461a15f9061b0cd565b6000825580601f1061a16f575050565b601f016020900490600052602060002090810190611575919061a1d9565b60405180602001604052806001906020820280368337509192915050565b6105cf8061bc0583390190565b8082111561a1d557600061a1cc828261a153565b5060010161a1b8565b5090565b5b8082111561a1d5576000815560010161a1da565b6001600160a01b038116811461157557600080fd5b6000806040838503121561a21657600080fd5b823561a2218161a1ee565b946020939093013593505050565b60005b8381101561a24a57818101518382015260200161a232565b50506000910152565b6000815180845261a26b81602086016020860161a22f565b601f01601f19169290920160200192915050565b602081526000611c9e602083018461a253565b60006020828403121561a2a457600080fd5b8135611c9e8161a1ee565b60006020828403121561a2c157600080fd5b5035919050565b6006811061157557600080fd5b600080600080600060a0868803121561a2ed57600080fd5b853561a2f88161a1ee565b94506020860135935060408601359250606086013561a3168161a2c8565b9150608086013561a3268161a2c8565b809150509295509295909350565b60008060006060848603121561a34957600080fd5b833561a3548161a1ee565b925060208401359150604084013561a36b8161a2c8565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b6006811061a3aa57634e487b7160e01b600052602160045260246000fd5b9052565b80516001600160a01b031682526000602082015161a3d760208501826001600160a01b03169052565b50604082015161a3f260408501826001600160a01b03169052565b506060820151610280606085015261a40e61028085018261a253565b90506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010083015161010085015261012083015161012085015261014083015161014085015261016083015161016085015261018083015161a4846101808601826001600160a01b03169052565b506101a08301516101a08501526101c08301516101c08501526101e08301516101e085015261020083015161020085015261022083015184820361022086015261a4ce828261a253565b91505061024083015161a4e561024086018261a38c565b506102608301516102608501528091505092915050565b602081526000611c9e602083018461a3ae565b60008060006060848603121561a52457600080fd5b833561a52f8161a1ee565b9250602084013561a53f8161a1ee565b929592945050506040919091013590565b6000806000806080858703121561a56657600080fd5b843561a5718161a1ee565b966020860135965060408601359560600135945092505050565b600082825180855260208501945060208160051b8301016020850160005b8381101561a60557848303601f19018852815180516001600160a01b031684526020808201519085015260409081015160609185018290529061a5ee9085018261a253565b6020998a019990945092909201915060010161a5a9565b50909695505050505050565b60008151610120845261a62861012085018261a58b565b90506020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015161a68560a0860182805182526020810151602083015260408101516040830152606081015160608301525050565b509392505050565b80518252602081015160208301526040810151604083015260608101516060830152608081015180516080840152602081015160a0840152604081015160c08401525060a081015161918860e0840182805182526020810151602083015260408101516040830152606081015160608301525050565b60208152815115156020820152602082015115156040820152600060408301516101c0606084015261a7396101e084018261a611565b9050606084015161a685608085018261a68d565b81516001600160a01b0390811682526020808401519091169082015260408083015190820152606080830151908201526080808301519082015260a08281015115159082015260c08083015161010083019161a7ac9084018215159052565b5060e083015161149d60e084018215159052565b634e487b7160e01b600052604160045260246000fd5b60405161028081016001600160401b038111828210171561a7f95761a7f961a7c0565b60405290565b604051601f8201601f191681016001600160401b038111828210171561a8275761a82761a7c0565b604052919050565b6000608082840312801561a84257600080fd5b50604051600090608081016001600160401b038111828210171561a8685761a86861a7c0565b60409081528435825260208086013590830152848101359082015260609384013593810193909352509092915050565b602081016114be828461a38c565b60006001600160401b0382111561a8bf5761a8bf61a7c0565b50601f01601f191660200190565b600082601f83011261a8de57600080fd5b813560208301600061a8f761a8f28461a8a6565b61a7ff565b905082815285838301111561a90b57600080fd5b82826020830137600092810160200192909252509392505050565b6000806040838503121561a93957600080fd5b823561a9448161a1ee565b915060208301356001600160401b0381111561a95f57600080fd5b61a96b8582860161a8cd565b9150509250929050565b6000806000806080858703121561a98b57600080fd5b84356001600160401b0381111561a9a157600080fd5b61a9ad8782880161a8cd565b945050602085013561a9be8161a1ee565b925060408501356001600160401b0381111561a9d957600080fd5b61a9e58782880161a8cd565b92505060608501356001600160401b0381111561aa0157600080fd5b61aa0d8782880161a8cd565b91505092959194509250565b6000806040838503121561aa2c57600080fd5b823561aa378161a1ee565b9150602083013561aa478161a2c8565b809150509250929050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561aaab57603f1987860301845261aa9685835161a253565b9450602093840193919091019060010161aa7a565b50929695505050505050565b602081526000611c9e602083018461a611565b602081526000611c9e602083018461a58b565b6000806040838503121561aaf057600080fd5b82356001600160401b0381111561ab0657600080fd5b61ab128582860161a8cd565b92505060208301356001600160401b0381111561a95f57600080fd5b60408152600061ab41604083018561a253565b828103602084015261ab53818561a253565b95945050505050565b600081518084526020840193506020830160005b8281101561ab975781516001600160a01b031686526020958601959091019060010161ab70565b5093949350505050565b602081526000611c9e602083018461ab5c565b80516001600160a01b031682526020808201519061abdc908401826001600160a01b03169052565b50604081015161abf760408401826001600160a01b03169052565b50606081015161ac1260608401826001600160a01b03169052565b50608081015161ac2d60808401826001600160a01b03169052565b5060a081015161ac4860a08401826001600160a01b03169052565b5060c081015161ac6360c08401826001600160a01b03169052565b5060e081015161ac7e60e08401826001600160a01b03169052565b506101008101516191886101008401826001600160a01b03169052565b60006103c0820190508251805183526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c084015260e081015160e084015261010081015161ad0c6101008501826001600160a01b03169052565b5061012081015161ad296101208501826001600160a01b03169052565b5061014081015161014084015261016081015161016084015250602083015161ad5661018084018261abb4565b5060408381015180516001600160a01b03166102a085015260208101516102c0850152908101516102e0840152606080820151610300850152608082015161032085015260a082015161034085015260c082015161036085015260e090910151610380840152909201516103a09091015290565b6000806040838503121561addd57600080fd5b823561ade88161a1ee565b9150602083013561aa478161a1ee565b61016081016114be828461a68d565b60008060006060848603121561ae1c57600080fd5b833561ae278161a1ee565b95602085013595506040909401359392505050565b60208082526028908201527f63616c6c6572206973206e6f7420616e206163636f756e746162696c6974792060408201526718dbdb9d1c9858dd60c21b606082015260800190565b60408152600061ae97604083018561a3ae565b90508260208301529392505050565b8051612f708161a1ee565b600082601f83011261aec257600080fd5b815160208301600061aed661a8f28461a8a6565b905082815285838301111561aeea57600080fd5b61ab5383602083018461a22f565b8051612f708161a2c8565b6000610280828403121561af1657600080fd5b61af1e61a7d6565b905061af298261aea6565b815261af376020830161aea6565b602082015261af486040830161aea6565b604082015260608201516001600160401b0381111561af6657600080fd5b61af728482850161aeb1565b6060830152506080828101519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261afd9610180830161aea6565b6101808201526101a082810151908201526101c080830151908201526101e0808301519082015261020080830151908201526102208201516001600160401b0381111561b02557600080fd5b61b0318482850161aeb1565b6102208301525061b045610240830161aef8565b6102408201526102609182015191810191909152919050565b6000806040838503121561b07157600080fd5b82516001600160401b0381111561b08757600080fd5b61b0938582860161af03565b602094909401519395939450505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156114be576114be61b0a4565b600181811c9082168061b0e157607f821691505b60208210810361b10157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561918857806000526020600020601f840160051c8101602085101561b12e5750805b601f840160051c820191505b818110156124c5576000815560010161b13a565b81516001600160401b0381111561b1675761b16761a7c0565b61b17b8161b175845461b0cd565b8461b107565b6020601f82116001811461b1b2576000831561b1975750848201515b600184901b600019600386901b1c198216175b8555506124c5565b600084815260208120601f198516915b8281101561b1e2578785015182556020948501946001909201910161b1c2565b508482101561b2005786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6020808252601c908201527f76616c696461746f72206d757374206265207265676973746572656400000000604082015260600190565b6020808252602c908201527f726571756972652063616c6c657220746f2062652076616c696461746f72206160408201526b191b5a5b881858d8dbdd5b9d60a21b606082015260800190565b6020808252601a908201527f63616c6c6572206973206e6f7420746865206f70657261746f72000000000000604082015260600190565b60c08152600061b2dc60c083018961a3ae565b905086602083015285604083015284606083015261b2fd608083018561a38c565b618ea260a083018461a38c565b80518015158114612f7057600080fd5b60008060006060848603121561b32f57600080fd5b83516001600160401b0381111561b34557600080fd5b61b3518682870161af03565b6020860151909450925061992f90506040850161b30a565b60808152600061b37c608083018761a3ae565b905084602083015283604083015261ab53606083018461a38c565b60006020828403121561b3a957600080fd5b81516001600160401b0381111561b3bf57600080fd5b6197f08482850161af03565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b818103818111156114be576114be61b0a4565b6001815b600184111561b4505780850481111561b4345761b43461b0a4565b600184161561b44257908102905b60019390931c92800261b419565b935093915050565b60008261b467575060016114be565b8161b474575060006114be565b816001811461b48a576002811461b4945761b4b0565b60019150506114be565b60ff84111561b4a55761b4a561b0a4565b50506001821b6114be565b5060208310610133831016604e8410600b841016171561b4d3575081810a6114be565b61b4e0600019848461b415565b806000190482111561b4f45761b4f461b0a4565b029392505050565b6000611c9e838361b458565b60208082526012908201527143616e6e6f7420657863656564203130302560701b604082015260600190565b60208082526023908201527f66756e6374696f6e207265737472696374656420746f207468652070726f746f60408201526218dbdb60ea1b606082015260800190565b60008060006060848603121561b58c57600080fd5b5050815160208301516040909301519094929350919050565b60006020828403121561b5b757600080fd5b5051919050565b60006020828403121561b5d057600080fd5b611c9e8261b30a565b60608152600061b5ec606083018661ab5c565b828103602084015261b5fe818661ab5c565b9050828103604084015261b612818561ab5c565b9695505050505050565b6000815461b6298161b0cd565b80855260018216801561b643576001811461b65f5761b696565b60ff1983166020870152602082151560051b870101935061b696565b84600052602060002060005b8381101561b68d5781546020828a01015260018201915060208101905061b66b565b87016020019450505b50505092915050565b6000604082016040835280855480835260608501915060608160051b860101925086600052602060002060005b8281101561b72457868503605f1901845281546001600160a01b031685526001820154602086015260606040860181905261b70c9086016002840161b61c565b9450602093909301926003919091019060010161b6cc565b50505050828103602084015261ab53818561ab5c565b82518152602080840151818301526040808501518184015260608086015181850152845160808501529184015160a084015283015160c083015282015160e08201526101008101611c9e565b80820281158282048414176114be576114be61b0a4565b60208082526018908201527f76616c696461746f72206e6f7420726567697374657265640000000000000000604082015260600190565b6020808252602f908201527f726571756972652063616c6c657220746f2062652076616c696461746f72207460408201526e1c99585cdd5c9e481858d8dbdd5b9d608a1b606082015260800190565b6001600160a01b038416815260606020820181905260009061b8479083018561b61c565b828103604084015261b612818561a253565b6001600160a01b03868116825285811660208301528416604082015260a06060820181905260009061b88d9083018561a253565b905060018060a01b03831660808301529695505050505050565b60408152600061b8ba604083018561a3ae565b9050611c9e602083018461a38c565b60006060828403121561b8db57600080fd5b604051606081016001600160401b038111828210171561b8fd5761b8fd61a7c0565b60409081528351825260208085015190830152928301519281019290925250919050565b600061012082840312801561b93557600080fd5b5060405160009060a081016001600160401b038111828210171561b95b5761b95b61a7c0565b6040908152845182526020808601519083015284810151908201819052915061b987856060860161b8c9565b606082015261b9998560c0860161b8c9565b6080820152949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261b9cb5761b9cb61b9a6565b500490565b60006001820161b9e25761b9e261b0a4565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60018060a01b038316815260606020820152600060608201526080604082015260006197f0608083018461a253565b81810361ba39575050565b61ba43825461b0cd565b6001600160401b0381111561ba5a5761ba5a61a7c0565b61ba688161b175845461b0cd565b6000601f82116001811461ba9a576000831561b197575081850154600184901b600019600386901b1c1982161761b1aa565b600085815260209020601f19841690600086815260209020845b8381101561bad4578286015482556001958601959091019060200161bab4565b508583101561baf25781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000845161bb1481846020890161a22f565b84519083019061bb2881836020890161a22f565b845191019061bb3b81836020880161a22f565b0195945050505050565b82815260408101611c9e602083018461a38c565b60008261bb685761bb6861b9a6565b500690565b60ff81811683821601908111156114be576114be61b0a4565b6000845161bb9881846020890161a22f565b84519083019061bbac81836020890161a22f565b60609490941b6bffffffffffffffffffffffff19169301928352505060140192915050565b6001600160a01b038681168252851660208201526040810184905260a06060820181905260009061b88d9083018561a25356fe608060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916101af565b806001600160a01b031663f5be34896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009191906102a4565b83111561009d57600080fd5b600b80546001600160a01b038088166001600160a01b031992831617909255600c805492871692909116919091179055600d8390556040516100e39083906020016102bd565b604051602081830303815290604052600990816101009190610373565b508160405160200161011291906102bd565b604051602081830303815290604052600a908161012f9190610373565b5050600f80546001600160a01b031916331790555061043192505050565b6001600160a01b038116811461016257600080fd5b50565b80516101708161014d565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101a657818101518382015260200161018e565b50506000910152565b600080600080600060a086880312156101c757600080fd5b85516101d28161014d565b60208701519095506101e38161014d565b6040870151606088015191955093506001600160401b0381111561020657600080fd5b8601601f8101881361021757600080fd5b80516001600160401b0381111561023057610230610175565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025e5761025e610175565b6040528181528282016020018a101561027657600080fd5b61028782602083016020860161018b565b935061029891505060808701610165565b90509295509295909350565b6000602082840312156102b657600080fd5b5051919050565b644c4e544e2d60d81b8152600082516102dd81600585016020870161018b565b9190910160050192915050565b600181811c908216806102fe57607f821691505b60208210810361031e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036e57806000526020600020601f840160051c8101602085101561034b5750805b601f840160051c820191505b8181101561036b5760008155600101610357565b50505b505050565b81516001600160401b0381111561038c5761038c610175565b6103a08161039a84546102ea565b84610324565b6020601f8211600181146103d457600083156103bc5750848201515b600019600385901b1c1916600184901b17845561036b565b600084815260208120601f198516915b8281101561040457878501518255602094850194600190920191016103e4565b50848210156104225786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b61018f806104406000396000f3fe6080604052366100245761002261001461002b565b6001600160a01b0316610106565b005b6100226100145b600080600f60009054906101000a90046001600160a01b03166001600160a01b0316634c1f1c776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a59190610129565b90506001600160a01b0381166101015760405162461bcd60e51b815260206004820152601d60248201527f6c6971756964206c6f67696320636f6e7472616374206e6f7420736574000000604482015260640160405180910390fd5b919050565b3660008037600080366000845af43d6000803e80610123573d6000fd5b503d6000f35b60006020828403121561013b57600080fd5b81516001600160a01b038116811461015257600080fd5b939250505056fea2646970667358221220ce2d0e61c8ad6acf83a736338add011753d52a2572b66d42a5f85bfe7de9136b64736f6c634300081e0033e821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1baa26469706673582212206dac3d11ec4976763737807b15650ed6edf8435857d29a55eeeda9d54280123864736f6c634300081e00336080604052348015600f57600080fd5b50600f80546001600160a01b03191633179055611a8b806100316000396000f3fe6080604052600436106101dc5760003560e01c806359355736116101025780639dc29fac11610095578063bf99b73e11610064578063bf99b73e14610568578063d768d57814610588578063dd62ed3e146105a8578063f5be3489146105c8576101e3565b80639dc29fac14610500578063a0ce552d14610520578063a9059cbb14610533578063bd96102f14610553576101e3565b80637eee288d116100d15780637eee288d1461048b57806384955c88146104ab578063949813b8146104cb57806395d89b41146104eb576101e3565b80635935573614610416578063708e91e51461043657806370a082311461045657806372c8196314610476576101e3565b806323b872dd1161017a5780633b19e84a116101495780633b19e84a146103ae5780633b80e355146103cc5780633e4eb36c146103e157806340c10f19146103f6576101e3565b806323b872dd1461033d578063282d3fdf1461035d578063313ce5671461037d578063372500ab14610399576101e3565b806318160ddd116101b657806318160ddd146102ce578063187cf4d7146102f157806319fac8fd146103065780631eeffad014610328576101e3565b806306fdde0314610241578063095ea7b31461026c5780631195e07e1461029c576101e3565b366101e357005b60405162461bcd60e51b815260206004820152602860248201527f66616c6c6261636b206e6f7420696d706c656d656e74656420666f72204c69716044820152677569644c6f67696360c01b60648201526084015b60405180910390fd5b34801561024d57600080fd5b506102566105dd565b60405161026391906116e1565b60405180910390f35b34801561027857600080fd5b5061028c610287366004611746565b61066f565b6040519015158152602001610263565b3480156102a857600080fd5b50600b546001600160a01b03165b6040516001600160a01b039091168152602001610263565b3480156102da57600080fd5b506102e3610696565b604051908152602001610263565b3480156102fd57600080fd5b506102e36106c0565b34801561031257600080fd5b50610326610321366004611770565b6106cf565b005b34801561033457600080fd5b506102e3610712565b34801561034957600080fd5b5061028c610358366004611789565b61073c565b34801561036957600080fd5b50610326610378366004611746565b61083e565b34801561038957600080fd5b5060405160128152602001610263565b3480156103a557600080fd5b50610326610887565b3480156103ba57600080fd5b50600c546001600160a01b03166102b6565b3480156103d857600080fd5b506102e3600981565b3480156103ed57600080fd5b506102e3610949565b34801561040257600080fd5b50610326610411366004611746565b610973565b34801561042257600080fd5b506102e36104313660046117c6565b6109e8565b34801561044257600080fd5b50610326610451366004611789565b610a2b565b34801561046257600080fd5b506102e36104713660046117c6565b610b00565b34801561048257600080fd5b506102e3600481565b34801561049757600080fd5b506103266104a6366004611746565b610b3f565b3480156104b757600080fd5b506102e36104c63660046117c6565b610c1a565b3480156104d757600080fd5b506102e36104e63660046117c6565b610c6c565b3480156104f757600080fd5b50610256610cf5565b34801561050c57600080fd5b5061032661051b366004611746565b610d04565b6102e361052e366004611770565b610d6c565b34801561053f57600080fd5b5061028c61054e366004611746565b610f5b565b34801561055f57600080fd5b50610326610fb3565b34801561057457600080fd5b5061028c610583366004611746565b6110c9565b34801561059457600080fd5b506102e36105a33660046117e1565b6110de565b3480156105b457600080fd5b506102e36105c33660046117e1565b61112d565b3480156105d457600080fd5b506102e361117c565b6060600980546105ec90611814565b80601f016020809104026020016040519081016040528092919081815260200182805461061890611814565b80156106655780601f1061063a57610100808354040283529160200191610665565b820191906000526020600020905b81548152906001019060200180831161064857829003601f168201915b5050505050905090565b6000610679611188565b6106843384846111d5565b50600161069060008055565b92915050565b600080546001036106b95760405162461bcd60e51b81526004016102389061184e565b5060055490565b6106cc6009600a611982565b81565b6106d7611188565b600f546001600160a01b031633146107015760405162461bcd60e51b81526004016102389061198e565b600d81905561070f60008055565b50565b600080546001036107355760405162461bcd60e51b81526004016102389061184e565b50600e5490565b6000610746611188565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156107cb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610238565b6107df85336107da86856119d6565b6111d5565b6107e985846112fa565b6107f384846113e2565b836001600160a01b0316856001600160a01b0316600080516020611a368339815191528560405161082691815260200190565b60405180910390a350506000805560015b9392505050565b610846611188565b600f546001600160a01b031633146108705760405162461bcd60e51b81526004016102389061198e565b61087a8282611436565b61088360008055565b5050565b61088f611188565b600061089a336114e8565b3360008181526006602052604080822082905551929350916108fc90849084818181858888f193505050503d80600081146108f1576040519150601f19603f3d011682016040523d82523d6000602084013e6108f6565b606091505b505090508061093c5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b6044820152606401610238565b505061094760008055565b565b6000805460010361096c5760405162461bcd60e51b81526004016102389061184e565b50600d5490565b61097b611188565b600f546001600160a01b031633146109a55760405162461bcd60e51b81526004016102389061198e565b6109af82826113e2565b6040518181526001600160a01b03831690600090600080516020611a36833981519152906020015b60405180910390a361088360008055565b60008054600103610a0b5760405162461bcd60e51b81526004016102389061184e565b506001600160a01b0381166000908152600260205260409020545b919050565b610a33611188565b600f546001600160a01b03163314610a5d5760405162461bcd60e51b81526004016102389061198e565b6001600160a01b0380841660009081526004602090815260408083209386168352929052205481811015610ad35760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74206578636565647320616c6c6f77616e636500000000000000006044820152606401610238565b610ae78484610ae285856119d6565b611579565b610af18483611436565b50610afb60008055565b505050565b60008054600103610b235760405162461bcd60e51b81526004016102389061184e565b506001600160a01b031660009081526001602052604090205490565b610b47611188565b600f546001600160a01b03163314610b715760405162461bcd60e51b81526004016102389061198e565b6001600160a01b038216600090815260026020526040902054811115610be55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b6064820152608401610238565b6001600160a01b03821660009081526002602052604081208054839290610c0d9084906119d6565b9091555050600080555050565b60008054600103610c3d5760405162461bcd60e51b81526004016102389061184e565b6001600160a01b03821660009081526002602090815260408083205460019092529091205461069091906119d6565b60008054600103610c8f5760405162461bcd60e51b81526004016102389061184e565b6001600160a01b038216600090815260016020908152604080832054600854600790935290832054909291610cc69184919061167e565b6001600160a01b038516600090815260066020526040902054909150610ced9082906119e9565b949350505050565b6060600a80546105ec90611814565b610d0c611188565b600f546001600160a01b03163314610d365760405162461bcd60e51b81526004016102389061198e565b610d4082826112fa565b6040518181526000906001600160a01b03841690600080516020611a36833981519152906020016109d7565b6000610d76611188565b600f546001600160a01b03163314610da05760405162461bcd60e51b81526004016102389061198e565b346000610dac826116bb565b90508015610e4357610dbe81836119d6565b600c546040519193506000916001600160a01b03909116906108fc90849084818181858888f193505050503d8060008114610e15576040519150601f19603f3d011682016040523d82523d6000602084013e610e1a565b606091505b5090915050801515600003610e415781600e6000828254610e3b91906119e9565b90915550505b505b6000610e4e856116bb565b90508415610ee157600f54600b546001600160a01b039182169163f7fcc510911683610e7a818a6119d6565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b158015610ec857600080fd5b505af1158015610edc573d6000803e3d6000fd5b505050505b600554600090610ef36009600a611982565b610efd90866119fc565b610f079190611a13565b905080600854610f1791906119e9565b6008556000610f286009600a611982565b600554610f3590846119fc565b610f3f9190611a13565b9050610f4b81856119e9565b95505050505050610a2660008055565b6000610f65611188565b610f6f33836112fa565b610f7983836113e2565b6040518281526001600160a01b038416903390600080516020611a368339815191529060200160405180910390a350600161069060008055565b610fbb611188565b600c546001600160a01b031633146110205760405162461bcd60e51b815260206004820152602260248201527f6f6e6c792074726561737572792063616e20636c61696d2068697320726577616044820152611c9960f21b6064820152608401610238565b600e8054600091829055600c546040519192916001600160a01b03909116906108fc90849084818181858888f193505050503d806000811461107e576040519150601f19603f3d011682016040523d82523d6000602084013e611083565b606091505b505090508061093c5760405162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a379039b2b7321020aa2760711b6044820152606401610238565b60006110d3611188565b610684338484611579565b600080546001036111015760405162461bcd60e51b81526004016102389061184e565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b600080546001036111505760405162461bcd60e51b81526004016102389061184e565b506001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6106cc6004600a611982565b600054156111ce5760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b6044820152606401610238565b6001600055565b6001600160a01b0383166112375760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610238565b6001600160a01b0382166112985760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610238565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b611303826114e8565b506001600160a01b03821660009081526001602090815260408083205460029092529091205461133390826119d6565b8211156113825760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610238565b61138c82826119d6565b6001600160a01b0384166000908152600160205260409020558082036113c6576001600160a01b0383166000908152600760205260408120555b81600560008282546113d891906119d6565b9091555050505050565b6113eb826114e8565b506001600160a01b038216600090815260016020526040812080548392906114149084906119e9565b92505081905550806005600082825461142d91906119e9565b90915550505050565b6001600160a01b0382166000908152600260209081526040808320546001909252909120548291611466916119d6565b10156114c05760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b6064820152608401610238565b6001600160a01b0382166000908152600260205260408120805483929061142d9084906119e9565b6001600160a01b0381166000908152600160209081526040808320546008546007909352908320549091839161151f91849161167e565b6001600160a01b0385166000908152600660205260409020549091506115469082906119e9565b6001600160a01b039094166000908152600660209081526040808320879055600854600790925290912055509192915050565b6001600160a01b0383166115cf5760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f20616464726573730000006044820152606401610238565b6001600160a01b0382166116255760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f206164647265737300000000006044820152606401610238565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f03530f06053c088596fe8c12632b52218b0685204ad1b757662178f87e27713b91016112ed565b60008360000361169057506000610837565b61169c6009600a611982565b846116a784866119d6565b6116b191906119fc565b610ced9190611a13565b6000806116ca6004600a611982565b600d546116d790856119fc565b6108379190611a13565b602081526000825180602084015260005b8181101561170f57602081860181015160408684010152016116f2565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610a2657600080fd5b6000806040838503121561175957600080fd5b6117628361172f565b946020939093013593505050565b60006020828403121561178257600080fd5b5035919050565b60008060006060848603121561179e57600080fd5b6117a78461172f565b92506117b56020850161172f565b929592945050506040919091013590565b6000602082840312156117d857600080fd5b6108378261172f565b600080604083850312156117f457600080fd5b6117fd8361172f565b915061180b6020840161172f565b90509250929050565b600181811c9082168061182857607f821691505b60208210810361184857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156118d6578085048111156118ba576118ba611885565b60018416156118c857908102905b60019390931c92800261189f565b935093915050565b6000826118ed57506001610690565b816118fa57506000610690565b8160018114611910576002811461191a57611936565b6001915050610690565b60ff84111561192b5761192b611885565b50506001821b610690565b5060208310610133831016604e8410600b8410161715611959575081810a610690565b611966600019848461189b565b806000190482111561197a5761197a611885565b029392505050565b600061083783836118de565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b8181038181111561069057610690611885565b8082018082111561069057610690611885565b808202811582820484141761069057610690611885565b600082611a3057634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e81bde77fbe59093f44ada6868ad5f6ece7ed4bea0887fd37197dbdfa14a639164736f6c634300081e00336080604052348015600f57600080fd5b50610d818061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630273a3ee1461005c57806341b6cb0f1461008557806399ac2d4814610098578063a00f313f146100b9578063d0c66054146100db575b600080fd5b61006f61006a366004610843565b6100f1565b60405161007c9190610a5d565b60405180910390f35b61006f610093366004610a77565b61010c565b6100ab6100a6366004610ad8565b610129565b60405161007c929190610b1d565b6100cc6100c7366004610b3f565b610147565b60405161007c93929190610bb9565b6100e361020a565b60405190815260200161007c565b6100f9610517565b610103838361021d565b50815b92915050565b610114610517565b61012085858585610256565b50929392505050565b610131610517565b60008061013e8585610299565b94959350505050565b61014f610517565b60008061015e6004600a610ce0565b88106101da5760008961012001518a60c001518b60a001516101809190610cec565b61018a9190610cec565b600060a08c018190526101008c018190526101208c0181905260c08c01526101e08b01805191925082916101bf908390610cec565b9052506101cc8a8661021d565b8993509150600190506101fe565b60006101e68a8a610299565b90506101f48a898989610256565b8993509150600090505b96509650969350505050565b60006102186004600a610ce0565b905090565b6000610200830152610240820181600581111561023c5761023c6108d7565b9081600581111561024f5761024f6108d7565b9052505050565b6102608284610cec565b610200850152610240840181600581111561027d5761027d6108d7565b90816005811115610290576102906108d7565b90525050505050565b60006102a76004600a610ce0565b82106103085760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f7420736c617368203130302520776974686f7574206a61696c626f604482015265756e64696e6760d01b606482015260840160405180910390fd5b60008361012001518460c001518560a001516103249190610cec565b61032e9190610cec565b9050600061033e6004600a610ce0565b6103488386610cff565b6103529190610d16565b905060008190508086610120015110610384578086610120018181516103789190610d38565b9052506000905061039f565b6101208601516103949082610d38565b600061012088015290505b801561041c5780866101000151106103e7578086610100018181516103c49190610d38565b90525060a0860180518291906103db908390610d38565b9052506000905061041c565b6101008601516103f79082610d38565b90508561010001518660a0018181516104109190610d38565b90525060006101008701525b60008111801561043f575060008660a001518760c0015161043d9190610cec565b115b156104eb5760008660a001518760c0015161045a9190610cec565b60c08801516104699084610cff565b6104739190610d16565b905060008760a001518860c0015161048b9190610cec565b60a089015161049a9085610cff565b6104a49190610d16565b9050818860c0018181516104b89190610d38565b90525060a0880180518291906104cf908390610d38565b9052506104dc8183610cec565b6104e69084610d38565b925050505b6104f58183610d38565b915081866101e00181815161050a9190610cec565b9052509095945050505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160608152602001600060058111156105d8576105d86108d7565b8152602001600081525090565b634e487b7160e01b600052604160045260246000fd5b604051610280810167ffffffffffffffff8111828210171561061f5761061f6105e5565b60405290565b80356001600160a01b038116811461063c57600080fd5b919050565b600082601f83011261065257600080fd5b81356020830160008067ffffffffffffffff841115610673576106736105e5565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156106a2576106a26105e5565b6040528381529050808284018710156106ba57600080fd5b838360208301376000602085830101528094505050505092915050565b80356006811061063c57600080fd5b600061028082840312156106f957600080fd5b6107016105fb565b905061070c82610625565b815261071a60208301610625565b602082015261072b60408301610625565b6040820152606082013567ffffffffffffffff81111561074a57600080fd5b61075684828501610641565b6060830152506080828101359082015260a0808301359082015260c0808301359082015260e0808301359082015261010080830135908201526101208083013590820152610140808301359082015261016080830135908201526107bd6101808301610625565b6101808201526101a082810135908201526101c080830135908201526101e08083013590820152610200808301359082015261022082013567ffffffffffffffff81111561080a57600080fd5b61081684828501610641565b6102208301525061082a61024083016106d7565b6102408201526102609182013591810191909152919050565b6000806040838503121561085657600080fd5b823567ffffffffffffffff81111561086d57600080fd5b610879858286016106e6565b925050610888602084016106d7565b90509250929050565b6000815180845260005b818110156108b75760208185018101518683018201520161089b565b506000602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b600052602160045260246000fd5b6006811061090b57634e487b7160e01b600052602160045260246000fd5b9052565b80516001600160a01b031682526000602082015161093860208501826001600160a01b03169052565b50604082015161095360408501826001600160a01b03169052565b506060820151610280606085015261096f610280850182610891565b90506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008301516101008501526101208301516101208501526101408301516101408501526101608301516101608501526101808301516109e56101808601826001600160a01b03169052565b506101a08301516101a08501526101c08301516101c08501526101e08301516101e0850152610200830151610200850152610220830151848203610220860152610a2f8282610891565b915050610240830151610a466102408601826108ed565b506102608301516102608501528091505092915050565b602081526000610a70602083018461090f565b9392505050565b60008060008060808587031215610a8d57600080fd5b843567ffffffffffffffff811115610aa457600080fd5b610ab0878288016106e6565b9450506020850135925060408501359150610acd606086016106d7565b905092959194509250565b60008060408385031215610aeb57600080fd5b823567ffffffffffffffff811115610b0257600080fd5b610b0e858286016106e6565b95602094909401359450505050565b604081526000610b30604083018561090f565b90508260208301529392505050565b60008060008060008060c08789031215610b5857600080fd5b863567ffffffffffffffff811115610b6f57600080fd5b610b7b89828a016106e6565b965050602087013594506040870135935060608701359250610b9f608088016106d7565b9150610bad60a088016106d7565b90509295509295509295565b606081526000610bcc606083018661090f565b602083019490945250901515604090910152919050565b634e487b7160e01b600052601160045260246000fd5b6001815b6001841115610c3457808504811115610c1857610c18610be3565b6001841615610c2657908102905b60019390931c928002610bfd565b935093915050565b600082610c4b57506001610106565b81610c5857506000610106565b8160018114610c6e5760028114610c7857610c94565b6001915050610106565b60ff841115610c8957610c89610be3565b50506001821b610106565b5060208310610133831016604e8410600b8410161715610cb7575081810a610106565b610cc46000198484610bf9565b8060001904821115610cd857610cd8610be3565b029392505050565b6000610a708383610c3c565b8082018082111561010657610106610be3565b808202811582820484141761010657610106610be3565b600082610d3357634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561010657610106610be356fea2646970667358221220147eee18a661e7ad475ec0658edf33129576eb045153bd87b145a47945bc2d6264736f6c634300081e0033608060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916101af565b806001600160a01b031663f5be34896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009191906102a4565b83111561009d57600080fd5b600b80546001600160a01b038088166001600160a01b031992831617909255600c805492871692909116919091179055600d8390556040516100e39083906020016102bd565b604051602081830303815290604052600990816101009190610373565b508160405160200161011291906102bd565b604051602081830303815290604052600a908161012f9190610373565b5050600f80546001600160a01b031916331790555061043192505050565b6001600160a01b038116811461016257600080fd5b50565b80516101708161014d565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101a657818101518382015260200161018e565b50506000910152565b600080600080600060a086880312156101c757600080fd5b85516101d28161014d565b60208701519095506101e38161014d565b6040870151606088015191955093506001600160401b0381111561020657600080fd5b8601601f8101881361021757600080fd5b80516001600160401b0381111561023057610230610175565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025e5761025e610175565b6040528181528282016020018a101561027657600080fd5b61028782602083016020860161018b565b935061029891505060808701610165565b90509295509295909350565b6000602082840312156102b657600080fd5b5051919050565b644c4e544e2d60d81b8152600082516102dd81600585016020870161018b565b9190910160050192915050565b600181811c908216806102fe57607f821691505b60208210810361031e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036e57806000526020600020601f840160051c8101602085101561034b5750805b601f840160051c820191505b8181101561036b5760008155600101610357565b50505b505050565b81516001600160401b0381111561038c5761038c610175565b6103a08161039a84546102ea565b84610324565b6020601f8211600181146103d457600083156103bc5750848201515b600019600385901b1c1916600184901b17845561036b565b600084815260208120601f198516915b8281101561040457878501518255602094850194600190920191016103e4565b50848210156104225786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b61018f806104406000396000f3fe6080604052366100245761002261001461002b565b6001600160a01b0316610106565b005b6100226100145b600080600f60009054906101000a90046001600160a01b03166001600160a01b0316634c1f1c776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a59190610129565b90506001600160a01b0381166101015760405162461bcd60e51b815260206004820152601d60248201527f6c6971756964206c6f67696320636f6e7472616374206e6f7420736574000000604482015260640160405180910390fd5b919050565b3660008037600080366000845af43d6000803e80610123573d6000fd5b503d6000f35b60006020828403121561013b57600080fd5b81516001600160a01b038116811461015257600080fd5b939250505056fea2646970667358221220ce2d0e61c8ad6acf83a736338add011753d52a2572b66d42a5f85bfe7de9136b64736f6c634300081e0033",
}

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

// Deprecated: Use AutonityUpgradeTestMetaData.Sigs instead.
// AutonityUpgradeTestFuncSigs maps the 4-byte function signature to its string representation.
var AutonityUpgradeTestFuncSigs = AutonityUpgradeTestMetaData.Sigs

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

// DeployAutonityUpgradeTest deploys a new Ethereum contract, binding an instance of AutonityUpgradeTest to it.
func DeployAutonityUpgradeTest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AutonityUpgradeTest, error) {
	parsed, err := AutonityUpgradeTestMetaData.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(AutonityUpgradeTestBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &AutonityUpgradeTest{AutonityUpgradeTestCaller: AutonityUpgradeTestCaller{contract: contract}, AutonityUpgradeTestTransactor: AutonityUpgradeTestTransactor{contract: contract}, AutonityUpgradeTestFilterer: AutonityUpgradeTestFilterer{contract: contract}}, nil
}

// AutonityUpgradeTest is an auto generated Go binding around an Ethereum contract.
type AutonityUpgradeTest struct {
	AutonityUpgradeTestCaller     // Read-only binding to the contract
	AutonityUpgradeTestTransactor // Write-only binding to the contract
	AutonityUpgradeTestFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewAutonityUpgradeTest creates a new instance of AutonityUpgradeTest, bound to a specific deployed contract.
func NewAutonityUpgradeTest(address common.Address, backend bind.ContractBackend) (*AutonityUpgradeTest, error) {
	contract, err := bindAutonityUpgradeTest(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTest{AutonityUpgradeTestCaller: AutonityUpgradeTestCaller{contract: contract}, AutonityUpgradeTestTransactor: AutonityUpgradeTestTransactor{contract: contract}, AutonityUpgradeTestFilterer: AutonityUpgradeTestFilterer{contract: contract}}, nil
}

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

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

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

// bindAutonityUpgradeTest binds a generic wrapper to an already deployed contract.
func bindAutonityUpgradeTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(AutonityUpgradeTestABI))
	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 (_AutonityUpgradeTest *AutonityUpgradeTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _AutonityUpgradeTest.Contract.AutonityUpgradeTestCaller.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 (_AutonityUpgradeTest *AutonityUpgradeTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.AutonityUpgradeTestTransactor.contract.Transfer(opts)
}

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

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

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

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

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

	return out0, err

}

// STANDARDDECIMALS is a free data retrieval call binding the contract method 0xf3c70aad.
//
// Solidity: function STANDARD_DECIMALS() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) STANDARDDECIMALS() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.STANDARDDECIMALS(&_AutonityUpgradeTest.CallOpts)
}

// STANDARDDECIMALS is a free data retrieval call binding the contract method 0xf3c70aad.
//
// Solidity: function STANDARD_DECIMALS() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) STANDARDDECIMALS() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.STANDARDDECIMALS(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// STANDARDSCALEFACTOR is a free data retrieval call binding the contract method 0xd144f00a.
//
// Solidity: function STANDARD_SCALE_FACTOR() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) STANDARDSCALEFACTOR() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.STANDARDSCALEFACTOR(&_AutonityUpgradeTest.CallOpts)
}

// STANDARDSCALEFACTOR is a free data retrieval call binding the contract method 0xd144f00a.
//
// Solidity: function STANDARD_SCALE_FACTOR() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) STANDARDSCALEFACTOR() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.STANDARDSCALEFACTOR(&_AutonityUpgradeTest.CallOpts)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "allowance", owner, spender)

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

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

	return out0, err

}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.Allowance(&_AutonityUpgradeTest.CallOpts, owner, spender)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.Allowance(&_AutonityUpgradeTest.CallOpts, owner, spender)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address _addr) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) BalanceOf(opts *bind.CallOpts, _addr common.Address) (*big.Int, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "balanceOf", _addr)

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

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

	return out0, err

}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address _addr) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) BalanceOf(_addr common.Address) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.BalanceOf(&_AutonityUpgradeTest.CallOpts, _addr)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address _addr) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) BalanceOf(_addr common.Address) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.BalanceOf(&_AutonityUpgradeTest.CallOpts, _addr)
}

// BondingAllowance is a free data retrieval call binding the contract method 0xe0e01d54.
//
// Solidity: function bondingAllowance(address _owner, address _caller) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) BondingAllowance(opts *bind.CallOpts, _owner common.Address, _caller common.Address) (*big.Int, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "bondingAllowance", _owner, _caller)

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

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

	return out0, err

}

// BondingAllowance is a free data retrieval call binding the contract method 0xe0e01d54.
//
// Solidity: function bondingAllowance(address _owner, address _caller) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) BondingAllowance(_owner common.Address, _caller common.Address) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.BondingAllowance(&_AutonityUpgradeTest.CallOpts, _owner, _caller)
}

// BondingAllowance is a free data retrieval call binding the contract method 0xe0e01d54.
//
// Solidity: function bondingAllowance(address _owner, address _caller) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) BondingAllowance(_owner common.Address, _caller common.Address) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.BondingAllowance(&_AutonityUpgradeTest.CallOpts, _owner, _caller)
}

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

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

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

	return out0, err

}

// CirculatingSupply is a free data retrieval call binding the contract method 0x9358928b.
//
// Solidity: function circulatingSupply() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) CirculatingSupply() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.CirculatingSupply(&_AutonityUpgradeTest.CallOpts)
}

// CirculatingSupply is a free data retrieval call binding the contract method 0x9358928b.
//
// Solidity: function circulatingSupply() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) CirculatingSupply() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.CirculatingSupply(&_AutonityUpgradeTest.CallOpts)
}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) Decimals(opts *bind.CallOpts) (uint8, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "decimals")

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

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

	return out0, err

}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Decimals() (uint8, error) {
	return _AutonityUpgradeTest.Contract.Decimals(&_AutonityUpgradeTest.CallOpts)
}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) Decimals() (uint8, error) {
	return _AutonityUpgradeTest.Contract.Decimals(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetBlockPeriod is a free data retrieval call binding the contract method 0x43645969.
//
// Solidity: function getBlockPeriod() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetBlockPeriod() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetBlockPeriod(&_AutonityUpgradeTest.CallOpts)
}

// GetBlockPeriod is a free data retrieval call binding the contract method 0x43645969.
//
// Solidity: function getBlockPeriod() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetBlockPeriod() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetBlockPeriod(&_AutonityUpgradeTest.CallOpts)
}

// GetBondingRequestByID is a free data retrieval call binding the contract method 0x8ebb48b7.
//
// Solidity: function getBondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetBondingRequestByID(opts *bind.CallOpts, _id *big.Int) (IAutonityBondingRequest, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getBondingRequestByID", _id)

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

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

	return out0, err

}

// GetBondingRequestByID is a free data retrieval call binding the contract method 0x8ebb48b7.
//
// Solidity: function getBondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetBondingRequestByID(_id *big.Int) (IAutonityBondingRequest, error) {
	return _AutonityUpgradeTest.Contract.GetBondingRequestByID(&_AutonityUpgradeTest.CallOpts, _id)
}

// GetBondingRequestByID is a free data retrieval call binding the contract method 0x8ebb48b7.
//
// Solidity: function getBondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetBondingRequestByID(_id *big.Int) (IAutonityBondingRequest, error) {
	return _AutonityUpgradeTest.Contract.GetBondingRequestByID(&_AutonityUpgradeTest.CallOpts, _id)
}

// GetClientConfig is a free data retrieval call binding the contract method 0xf3f759c1.
//
// Solidity: function getClientConfig() view returns((uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256)))
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetClientConfig(opts *bind.CallOpts) (IAutonityClientAwareConfig, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getClientConfig")

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

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

	return out0, err

}

// GetClientConfig is a free data retrieval call binding the contract method 0xf3f759c1.
//
// Solidity: function getClientConfig() view returns((uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256)))
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetClientConfig() (IAutonityClientAwareConfig, error) {
	return _AutonityUpgradeTest.Contract.GetClientConfig(&_AutonityUpgradeTest.CallOpts)
}

// GetClientConfig is a free data retrieval call binding the contract method 0xf3f759c1.
//
// Solidity: function getClientConfig() view returns((uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256)))
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetClientConfig() (IAutonityClientAwareConfig, error) {
	return _AutonityUpgradeTest.Contract.GetClientConfig(&_AutonityUpgradeTest.CallOpts)
}

// GetCommittee is a free data retrieval call binding the contract method 0xab8f6ffe.
//
// Solidity: function getCommittee() view returns((address,uint256,bytes)[])
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetCommittee(opts *bind.CallOpts) ([]IAutonityCommitteeMember, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getCommittee")

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

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

	return out0, err

}

// GetCommittee is a free data retrieval call binding the contract method 0xab8f6ffe.
//
// Solidity: function getCommittee() view returns((address,uint256,bytes)[])
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetCommittee() ([]IAutonityCommitteeMember, error) {
	return _AutonityUpgradeTest.Contract.GetCommittee(&_AutonityUpgradeTest.CallOpts)
}

// GetCommittee is a free data retrieval call binding the contract method 0xab8f6ffe.
//
// Solidity: function getCommittee() view returns((address,uint256,bytes)[])
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetCommittee() ([]IAutonityCommitteeMember, error) {
	return _AutonityUpgradeTest.Contract.GetCommittee(&_AutonityUpgradeTest.CallOpts)
}

// GetCommitteeEnodes is a free data retrieval call binding the contract method 0xa8b2216e.
//
// Solidity: function getCommitteeEnodes() view returns(string[])
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetCommitteeEnodes(opts *bind.CallOpts) ([]string, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getCommitteeEnodes")

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

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

	return out0, err

}

// GetCommitteeEnodes is a free data retrieval call binding the contract method 0xa8b2216e.
//
// Solidity: function getCommitteeEnodes() view returns(string[])
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetCommitteeEnodes() ([]string, error) {
	return _AutonityUpgradeTest.Contract.GetCommitteeEnodes(&_AutonityUpgradeTest.CallOpts)
}

// GetCommitteeEnodes is a free data retrieval call binding the contract method 0xa8b2216e.
//
// Solidity: function getCommitteeEnodes() view returns(string[])
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetCommitteeEnodes() ([]string, error) {
	return _AutonityUpgradeTest.Contract.GetCommitteeEnodes(&_AutonityUpgradeTest.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns(((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256),(address,address,address,address,address,address,address,address,address),(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetConfig(opts *bind.CallOpts) (IAutonityConfig, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getConfig")

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

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

	return out0, err

}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns(((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256),(address,address,address,address,address,address,address,address,address),(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetConfig() (IAutonityConfig, error) {
	return _AutonityUpgradeTest.Contract.GetConfig(&_AutonityUpgradeTest.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns(((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256),(address,address,address,address,address,address,address,address,address),(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetConfig() (IAutonityConfig, error) {
	return _AutonityUpgradeTest.Contract.GetConfig(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetCurrentCommitteeSize is a free data retrieval call binding the contract method 0x2b56feac.
//
// Solidity: function getCurrentCommitteeSize() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetCurrentCommitteeSize() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetCurrentCommitteeSize(&_AutonityUpgradeTest.CallOpts)
}

// GetCurrentCommitteeSize is a free data retrieval call binding the contract method 0x2b56feac.
//
// Solidity: function getCurrentCommitteeSize() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetCurrentCommitteeSize() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetCurrentCommitteeSize(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetCurrentEpochPeriod is a free data retrieval call binding the contract method 0x0aac2da1.
//
// Solidity: function getCurrentEpochPeriod() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetCurrentEpochPeriod() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetCurrentEpochPeriod(&_AutonityUpgradeTest.CallOpts)
}

// GetCurrentEpochPeriod is a free data retrieval call binding the contract method 0x0aac2da1.
//
// Solidity: function getCurrentEpochPeriod() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetCurrentEpochPeriod() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetCurrentEpochPeriod(&_AutonityUpgradeTest.CallOpts)
}

// GetEpochByHeight is a free data retrieval call binding the contract method 0xaffb1cf1.
//
// Solidity: function getEpochByHeight(uint256 _height) view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetEpochByHeight(opts *bind.CallOpts, _height *big.Int) (IAutonityEpochInfo, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getEpochByHeight", _height)

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

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

	return out0, err

}

// GetEpochByHeight is a free data retrieval call binding the contract method 0xaffb1cf1.
//
// Solidity: function getEpochByHeight(uint256 _height) view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetEpochByHeight(_height *big.Int) (IAutonityEpochInfo, error) {
	return _AutonityUpgradeTest.Contract.GetEpochByHeight(&_AutonityUpgradeTest.CallOpts, _height)
}

// GetEpochByHeight is a free data retrieval call binding the contract method 0xaffb1cf1.
//
// Solidity: function getEpochByHeight(uint256 _height) view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetEpochByHeight(_height *big.Int) (IAutonityEpochInfo, error) {
	return _AutonityUpgradeTest.Contract.GetEpochByHeight(&_AutonityUpgradeTest.CallOpts, _height)
}

// GetEpochFromBlock is a free data retrieval call binding the contract method 0x96b477cb.
//
// Solidity: function getEpochFromBlock(uint256 _block) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetEpochFromBlock(opts *bind.CallOpts, _block *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getEpochFromBlock", _block)

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

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

	return out0, err

}

// GetEpochFromBlock is a free data retrieval call binding the contract method 0x96b477cb.
//
// Solidity: function getEpochFromBlock(uint256 _block) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetEpochFromBlock(_block *big.Int) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetEpochFromBlock(&_AutonityUpgradeTest.CallOpts, _block)
}

// GetEpochFromBlock is a free data retrieval call binding the contract method 0x96b477cb.
//
// Solidity: function getEpochFromBlock(uint256 _block) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetEpochFromBlock(_block *big.Int) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetEpochFromBlock(&_AutonityUpgradeTest.CallOpts, _block)
}

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

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

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

	return out0, err

}

// GetEpochID is a free data retrieval call binding the contract method 0x6fc53515.
//
// Solidity: function getEpochID() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetEpochID() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetEpochID(&_AutonityUpgradeTest.CallOpts)
}

// GetEpochID is a free data retrieval call binding the contract method 0x6fc53515.
//
// Solidity: function getEpochID() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetEpochID() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetEpochID(&_AutonityUpgradeTest.CallOpts)
}

// GetEpochInfo is a free data retrieval call binding the contract method 0xa9fd1a8f.
//
// Solidity: function getEpochInfo() view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetEpochInfo(opts *bind.CallOpts) (IAutonityEpochInfo, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getEpochInfo")

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

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

	return out0, err

}

// GetEpochInfo is a free data retrieval call binding the contract method 0xa9fd1a8f.
//
// Solidity: function getEpochInfo() view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetEpochInfo() (IAutonityEpochInfo, error) {
	return _AutonityUpgradeTest.Contract.GetEpochInfo(&_AutonityUpgradeTest.CallOpts)
}

// GetEpochInfo is a free data retrieval call binding the contract method 0xa9fd1a8f.
//
// Solidity: function getEpochInfo() view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetEpochInfo() (IAutonityEpochInfo, error) {
	return _AutonityUpgradeTest.Contract.GetEpochInfo(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetEpochPeriod is a free data retrieval call binding the contract method 0xdfb1a4d2.
//
// Solidity: function getEpochPeriod() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetEpochPeriod() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetEpochPeriod(&_AutonityUpgradeTest.CallOpts)
}

// GetEpochPeriod is a free data retrieval call binding the contract method 0xdfb1a4d2.
//
// Solidity: function getEpochPeriod() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetEpochPeriod() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetEpochPeriod(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetEpochTotalBondedStake is a free data retrieval call binding the contract method 0x4efcd15f.
//
// Solidity: function getEpochTotalBondedStake() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetEpochTotalBondedStake() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetEpochTotalBondedStake(&_AutonityUpgradeTest.CallOpts)
}

// GetEpochTotalBondedStake is a free data retrieval call binding the contract method 0x4efcd15f.
//
// Solidity: function getEpochTotalBondedStake() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetEpochTotalBondedStake() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetEpochTotalBondedStake(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetInflationReserve is a free data retrieval call binding the contract method 0x4651e07b.
//
// Solidity: function getInflationReserve() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetInflationReserve() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetInflationReserve(&_AutonityUpgradeTest.CallOpts)
}

// GetInflationReserve is a free data retrieval call binding the contract method 0x4651e07b.
//
// Solidity: function getInflationReserve() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetInflationReserve() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetInflationReserve(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetLastEpochBlock is a free data retrieval call binding the contract method 0x731b3a03.
//
// Solidity: function getLastEpochBlock() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetLastEpochBlock() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetLastEpochBlock(&_AutonityUpgradeTest.CallOpts)
}

// GetLastEpochBlock is a free data retrieval call binding the contract method 0x731b3a03.
//
// Solidity: function getLastEpochBlock() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetLastEpochBlock() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetLastEpochBlock(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetLastEpochTime is a free data retrieval call binding the contract method 0xba522458.
//
// Solidity: function getLastEpochTime() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetLastEpochTime() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetLastEpochTime(&_AutonityUpgradeTest.CallOpts)
}

// GetLastEpochTime is a free data retrieval call binding the contract method 0xba522458.
//
// Solidity: function getLastEpochTime() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetLastEpochTime() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetLastEpochTime(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetLiquidLogicContract is a free data retrieval call binding the contract method 0x4c1f1c77.
//
// Solidity: function getLiquidLogicContract() view returns(address)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetLiquidLogicContract() (common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetLiquidLogicContract(&_AutonityUpgradeTest.CallOpts)
}

// GetLiquidLogicContract is a free data retrieval call binding the contract method 0x4c1f1c77.
//
// Solidity: function getLiquidLogicContract() view returns(address)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetLiquidLogicContract() (common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetLiquidLogicContract(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetMaxCommitteeSize is a free data retrieval call binding the contract method 0x819b6463.
//
// Solidity: function getMaxCommitteeSize() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetMaxCommitteeSize() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetMaxCommitteeSize(&_AutonityUpgradeTest.CallOpts)
}

// GetMaxCommitteeSize is a free data retrieval call binding the contract method 0x819b6463.
//
// Solidity: function getMaxCommitteeSize() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetMaxCommitteeSize() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetMaxCommitteeSize(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetMaxScheduleDuration is a free data retrieval call binding the contract method 0xfed76a56.
//
// Solidity: function getMaxScheduleDuration() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetMaxScheduleDuration() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetMaxScheduleDuration(&_AutonityUpgradeTest.CallOpts)
}

// GetMaxScheduleDuration is a free data retrieval call binding the contract method 0xfed76a56.
//
// Solidity: function getMaxScheduleDuration() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetMaxScheduleDuration() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetMaxScheduleDuration(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetMinimumBaseFee is a free data retrieval call binding the contract method 0x11220633.
//
// Solidity: function getMinimumBaseFee() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetMinimumBaseFee() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetMinimumBaseFee(&_AutonityUpgradeTest.CallOpts)
}

// GetMinimumBaseFee is a free data retrieval call binding the contract method 0x11220633.
//
// Solidity: function getMinimumBaseFee() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetMinimumBaseFee() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetMinimumBaseFee(&_AutonityUpgradeTest.CallOpts)
}

// GetNewContract is a free data retrieval call binding the contract method 0xb66b3e79.
//
// Solidity: function getNewContract() view returns(bytes, string)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetNewContract(opts *bind.CallOpts) ([]byte, string, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getNewContract")

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

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

	return out0, out1, err

}

// GetNewContract is a free data retrieval call binding the contract method 0xb66b3e79.
//
// Solidity: function getNewContract() view returns(bytes, string)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetNewContract() ([]byte, string, error) {
	return _AutonityUpgradeTest.Contract.GetNewContract(&_AutonityUpgradeTest.CallOpts)
}

// GetNewContract is a free data retrieval call binding the contract method 0xb66b3e79.
//
// Solidity: function getNewContract() view returns(bytes, string)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetNewContract() ([]byte, string, error) {
	return _AutonityUpgradeTest.Contract.GetNewContract(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetNextEpochBlock is a free data retrieval call binding the contract method 0x25ce1bb9.
//
// Solidity: function getNextEpochBlock() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetNextEpochBlock() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetNextEpochBlock(&_AutonityUpgradeTest.CallOpts)
}

// GetNextEpochBlock is a free data retrieval call binding the contract method 0x25ce1bb9.
//
// Solidity: function getNextEpochBlock() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetNextEpochBlock() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetNextEpochBlock(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetOperator is a free data retrieval call binding the contract method 0xe7f43c68.
//
// Solidity: function getOperator() view returns(address)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetOperator() (common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetOperator(&_AutonityUpgradeTest.CallOpts)
}

// GetOperator is a free data retrieval call binding the contract method 0xe7f43c68.
//
// Solidity: function getOperator() view returns(address)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetOperator() (common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetOperator(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetOracle is a free data retrieval call binding the contract method 0x833b1fce.
//
// Solidity: function getOracle() view returns(address)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetOracle() (common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetOracle(&_AutonityUpgradeTest.CallOpts)
}

// GetOracle is a free data retrieval call binding the contract method 0x833b1fce.
//
// Solidity: function getOracle() view returns(address)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetOracle() (common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetOracle(&_AutonityUpgradeTest.CallOpts)
}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetSchedule(opts *bind.CallOpts, _vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getSchedule", _vault, _id)

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

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

	return out0, err

}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetSchedule(_vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	return _AutonityUpgradeTest.Contract.GetSchedule(&_AutonityUpgradeTest.CallOpts, _vault, _id)
}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetSchedule(_vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	return _AutonityUpgradeTest.Contract.GetSchedule(&_AutonityUpgradeTest.CallOpts, _vault, _id)
}

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

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

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

	return out0, err

}

// GetSlasher is a free data retrieval call binding the contract method 0xd0c80f13.
//
// Solidity: function getSlasher() view returns(address)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetSlasher() (common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetSlasher(&_AutonityUpgradeTest.CallOpts)
}

// GetSlasher is a free data retrieval call binding the contract method 0xd0c80f13.
//
// Solidity: function getSlasher() view returns(address)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetSlasher() (common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetSlasher(&_AutonityUpgradeTest.CallOpts)
}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetTotalSchedules(opts *bind.CallOpts, _vault common.Address) (*big.Int, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getTotalSchedules", _vault)

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

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

	return out0, err

}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetTotalSchedules(_vault common.Address) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetTotalSchedules(&_AutonityUpgradeTest.CallOpts, _vault)
}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetTotalSchedules(_vault common.Address) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetTotalSchedules(&_AutonityUpgradeTest.CallOpts, _vault)
}

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

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

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

	return out0, err

}

// GetTreasuryAccount is a free data retrieval call binding the contract method 0xf7866ee3.
//
// Solidity: function getTreasuryAccount() view returns(address)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetTreasuryAccount() (common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetTreasuryAccount(&_AutonityUpgradeTest.CallOpts)
}

// GetTreasuryAccount is a free data retrieval call binding the contract method 0xf7866ee3.
//
// Solidity: function getTreasuryAccount() view returns(address)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetTreasuryAccount() (common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetTreasuryAccount(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetTreasuryFee is a free data retrieval call binding the contract method 0x29070c6d.
//
// Solidity: function getTreasuryFee() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetTreasuryFee() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetTreasuryFee(&_AutonityUpgradeTest.CallOpts)
}

// GetTreasuryFee is a free data retrieval call binding the contract method 0x29070c6d.
//
// Solidity: function getTreasuryFee() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetTreasuryFee() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetTreasuryFee(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetUnbondingPeriod is a free data retrieval call binding the contract method 0x6fd2c80b.
//
// Solidity: function getUnbondingPeriod() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetUnbondingPeriod() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetUnbondingPeriod(&_AutonityUpgradeTest.CallOpts)
}

// GetUnbondingPeriod is a free data retrieval call binding the contract method 0x6fd2c80b.
//
// Solidity: function getUnbondingPeriod() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetUnbondingPeriod() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetUnbondingPeriod(&_AutonityUpgradeTest.CallOpts)
}

// GetUnbondingRequestByID is a free data retrieval call binding the contract method 0x4bfe23f1.
//
// Solidity: function getUnbondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256,uint256,bool,bool,bool))
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetUnbondingRequestByID(opts *bind.CallOpts, _id *big.Int) (IAutonityUnbondingRequest, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getUnbondingRequestByID", _id)

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

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

	return out0, err

}

// GetUnbondingRequestByID is a free data retrieval call binding the contract method 0x4bfe23f1.
//
// Solidity: function getUnbondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256,uint256,bool,bool,bool))
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetUnbondingRequestByID(_id *big.Int) (IAutonityUnbondingRequest, error) {
	return _AutonityUpgradeTest.Contract.GetUnbondingRequestByID(&_AutonityUpgradeTest.CallOpts, _id)
}

// GetUnbondingRequestByID is a free data retrieval call binding the contract method 0x4bfe23f1.
//
// Solidity: function getUnbondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256,uint256,bool,bool,bool))
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetUnbondingRequestByID(_id *big.Int) (IAutonityUnbondingRequest, error) {
	return _AutonityUpgradeTest.Contract.GetUnbondingRequestByID(&_AutonityUpgradeTest.CallOpts, _id)
}

// GetUnbondingShare is a free data retrieval call binding the contract method 0x8d347287.
//
// Solidity: function getUnbondingShare(uint256 _unbondingID) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetUnbondingShare(opts *bind.CallOpts, _unbondingID *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getUnbondingShare", _unbondingID)

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

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

	return out0, err

}

// GetUnbondingShare is a free data retrieval call binding the contract method 0x8d347287.
//
// Solidity: function getUnbondingShare(uint256 _unbondingID) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetUnbondingShare(_unbondingID *big.Int) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetUnbondingShare(&_AutonityUpgradeTest.CallOpts, _unbondingID)
}

// GetUnbondingShare is a free data retrieval call binding the contract method 0x8d347287.
//
// Solidity: function getUnbondingShare(uint256 _unbondingID) view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetUnbondingShare(_unbondingID *big.Int) (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetUnbondingShare(&_AutonityUpgradeTest.CallOpts, _unbondingID)
}

// GetValidator is a free data retrieval call binding the contract method 0x1904bb2e.
//
// Solidity: function getValidator(address _addr) view returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetValidator(opts *bind.CallOpts, _addr common.Address) (IAutonityValidator, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getValidator", _addr)

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

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

	return out0, err

}

// GetValidator is a free data retrieval call binding the contract method 0x1904bb2e.
//
// Solidity: function getValidator(address _addr) view returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetValidator(_addr common.Address) (IAutonityValidator, error) {
	return _AutonityUpgradeTest.Contract.GetValidator(&_AutonityUpgradeTest.CallOpts, _addr)
}

// GetValidator is a free data retrieval call binding the contract method 0x1904bb2e.
//
// Solidity: function getValidator(address _addr) view returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetValidator(_addr common.Address) (IAutonityValidator, error) {
	return _AutonityUpgradeTest.Contract.GetValidator(&_AutonityUpgradeTest.CallOpts, _addr)
}

// GetValidatorState is a free data retrieval call binding the contract method 0x5b7d6c36.
//
// Solidity: function getValidatorState(address _addr) view returns(uint8)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) GetValidatorState(opts *bind.CallOpts, _addr common.Address) (uint8, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "getValidatorState", _addr)

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

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

	return out0, err

}

// GetValidatorState is a free data retrieval call binding the contract method 0x5b7d6c36.
//
// Solidity: function getValidatorState(address _addr) view returns(uint8)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetValidatorState(_addr common.Address) (uint8, error) {
	return _AutonityUpgradeTest.Contract.GetValidatorState(&_AutonityUpgradeTest.CallOpts, _addr)
}

// GetValidatorState is a free data retrieval call binding the contract method 0x5b7d6c36.
//
// Solidity: function getValidatorState(address _addr) view returns(uint8)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetValidatorState(_addr common.Address) (uint8, error) {
	return _AutonityUpgradeTest.Contract.GetValidatorState(&_AutonityUpgradeTest.CallOpts, _addr)
}

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

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

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

	return out0, err

}

// GetValidators is a free data retrieval call binding the contract method 0xb7ab4db5.
//
// Solidity: function getValidators() view returns(address[])
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetValidators() ([]common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetValidators(&_AutonityUpgradeTest.CallOpts)
}

// GetValidators is a free data retrieval call binding the contract method 0xb7ab4db5.
//
// Solidity: function getValidators() view returns(address[])
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetValidators() ([]common.Address, error) {
	return _AutonityUpgradeTest.Contract.GetValidators(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// GetVersion is a free data retrieval call binding the contract method 0x0d8e6e2c.
//
// Solidity: function getVersion() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) GetVersion() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetVersion(&_AutonityUpgradeTest.CallOpts)
}

// GetVersion is a free data retrieval call binding the contract method 0x0d8e6e2c.
//
// Solidity: function getVersion() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) GetVersion() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.GetVersion(&_AutonityUpgradeTest.CallOpts)
}

// IsUnbondingReleased is a free data retrieval call binding the contract method 0xe294df7c.
//
// Solidity: function isUnbondingReleased(uint256 _unbondingID) view returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) IsUnbondingReleased(opts *bind.CallOpts, _unbondingID *big.Int) (bool, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "isUnbondingReleased", _unbondingID)

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

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

	return out0, err

}

// IsUnbondingReleased is a free data retrieval call binding the contract method 0xe294df7c.
//
// Solidity: function isUnbondingReleased(uint256 _unbondingID) view returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) IsUnbondingReleased(_unbondingID *big.Int) (bool, error) {
	return _AutonityUpgradeTest.Contract.IsUnbondingReleased(&_AutonityUpgradeTest.CallOpts, _unbondingID)
}

// IsUnbondingReleased is a free data retrieval call binding the contract method 0xe294df7c.
//
// Solidity: function isUnbondingReleased(uint256 _unbondingID) view returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) IsUnbondingReleased(_unbondingID *big.Int) (bool, error) {
	return _AutonityUpgradeTest.Contract.IsUnbondingReleased(&_AutonityUpgradeTest.CallOpts, _unbondingID)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() pure returns(string)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) Name(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "name")

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

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

	return out0, err

}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() pure returns(string)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Name() (string, error) {
	return _AutonityUpgradeTest.Contract.Name(&_AutonityUpgradeTest.CallOpts)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() pure returns(string)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) Name() (string, error) {
	return _AutonityUpgradeTest.Contract.Name(&_AutonityUpgradeTest.CallOpts)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() pure returns(string)
func (_AutonityUpgradeTest *AutonityUpgradeTestCaller) Symbol(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _AutonityUpgradeTest.contract.Call(opts, &out, "symbol")

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

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

	return out0, err

}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() pure returns(string)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Symbol() (string, error) {
	return _AutonityUpgradeTest.Contract.Symbol(&_AutonityUpgradeTest.CallOpts)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() pure returns(string)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) Symbol() (string, error) {
	return _AutonityUpgradeTest.Contract.Symbol(&_AutonityUpgradeTest.CallOpts)
}

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

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

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

	return out0, err

}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) TotalSupply() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.TotalSupply(&_AutonityUpgradeTest.CallOpts)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestCallerSession) TotalSupply() (*big.Int, error) {
	return _AutonityUpgradeTest.Contract.TotalSupply(&_AutonityUpgradeTest.CallOpts)
}

// ActivateValidator is a paid mutator transaction binding the contract method 0xb46e5520.
//
// Solidity: function activateValidator(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) ActivateValidator(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "activateValidator", _address)
}

// ActivateValidator is a paid mutator transaction binding the contract method 0xb46e5520.
//
// Solidity: function activateValidator(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) ActivateValidator(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.ActivateValidator(&_AutonityUpgradeTest.TransactOpts, _address)
}

// ActivateValidator is a paid mutator transaction binding the contract method 0xb46e5520.
//
// Solidity: function activateValidator(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) ActivateValidator(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.ActivateValidator(&_AutonityUpgradeTest.TransactOpts, _address)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "approve", spender, amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Approve(&_AutonityUpgradeTest.TransactOpts, spender, amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Approve(&_AutonityUpgradeTest.TransactOpts, spender, amount)
}

// ApproveBonding is a paid mutator transaction binding the contract method 0x50492571.
//
// Solidity: function approveBonding(address _caller, uint256 _amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) ApproveBonding(opts *bind.TransactOpts, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "approveBonding", _caller, _amount)
}

// ApproveBonding is a paid mutator transaction binding the contract method 0x50492571.
//
// Solidity: function approveBonding(address _caller, uint256 _amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) ApproveBonding(_caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.ApproveBonding(&_AutonityUpgradeTest.TransactOpts, _caller, _amount)
}

// ApproveBonding is a paid mutator transaction binding the contract method 0x50492571.
//
// Solidity: function approveBonding(address _caller, uint256 _amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) ApproveBonding(_caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.ApproveBonding(&_AutonityUpgradeTest.TransactOpts, _caller, _amount)
}

// Autobond is a paid mutator transaction binding the contract method 0xf7fcc510.
//
// Solidity: function autobond(address _validator, uint256 _selfBond, uint256 _delegated) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Autobond(opts *bind.TransactOpts, _validator common.Address, _selfBond *big.Int, _delegated *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "autobond", _validator, _selfBond, _delegated)
}

// Autobond is a paid mutator transaction binding the contract method 0xf7fcc510.
//
// Solidity: function autobond(address _validator, uint256 _selfBond, uint256 _delegated) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Autobond(_validator common.Address, _selfBond *big.Int, _delegated *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Autobond(&_AutonityUpgradeTest.TransactOpts, _validator, _selfBond, _delegated)
}

// Autobond is a paid mutator transaction binding the contract method 0xf7fcc510.
//
// Solidity: function autobond(address _validator, uint256 _selfBond, uint256 _delegated) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Autobond(_validator common.Address, _selfBond *big.Int, _delegated *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Autobond(&_AutonityUpgradeTest.TransactOpts, _validator, _selfBond, _delegated)
}

// Bond is a paid mutator transaction binding the contract method 0xa515366a.
//
// Solidity: function bond(address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Bond(opts *bind.TransactOpts, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "bond", _validator, _amount)
}

// Bond is a paid mutator transaction binding the contract method 0xa515366a.
//
// Solidity: function bond(address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Bond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Bond(&_AutonityUpgradeTest.TransactOpts, _validator, _amount)
}

// Bond is a paid mutator transaction binding the contract method 0xa515366a.
//
// Solidity: function bond(address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Bond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Bond(&_AutonityUpgradeTest.TransactOpts, _validator, _amount)
}

// BondFrom is a paid mutator transaction binding the contract method 0x41de7400.
//
// Solidity: function bondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) BondFrom(opts *bind.TransactOpts, _account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "bondFrom", _account, _validator, _amount)
}

// BondFrom is a paid mutator transaction binding the contract method 0x41de7400.
//
// Solidity: function bondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) BondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.BondFrom(&_AutonityUpgradeTest.TransactOpts, _account, _validator, _amount)
}

// BondFrom is a paid mutator transaction binding the contract method 0x41de7400.
//
// Solidity: function bondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) BondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.BondFrom(&_AutonityUpgradeTest.TransactOpts, _account, _validator, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _addr, uint256 _amount) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Burn(opts *bind.TransactOpts, _addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "burn", _addr, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _addr, uint256 _amount) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Burn(_addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Burn(&_AutonityUpgradeTest.TransactOpts, _addr, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _addr, uint256 _amount) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Burn(_addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Burn(&_AutonityUpgradeTest.TransactOpts, _addr, _amount)
}

// ChangeCommissionRate is a paid mutator transaction binding the contract method 0x852c4849.
//
// Solidity: function changeCommissionRate(address _validator, uint256 _rate) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) ChangeCommissionRate(opts *bind.TransactOpts, _validator common.Address, _rate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "changeCommissionRate", _validator, _rate)
}

// ChangeCommissionRate is a paid mutator transaction binding the contract method 0x852c4849.
//
// Solidity: function changeCommissionRate(address _validator, uint256 _rate) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) ChangeCommissionRate(_validator common.Address, _rate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.ChangeCommissionRate(&_AutonityUpgradeTest.TransactOpts, _validator, _rate)
}

// ChangeCommissionRate is a paid mutator transaction binding the contract method 0x852c4849.
//
// Solidity: function changeCommissionRate(address _validator, uint256 _rate) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) ChangeCommissionRate(_validator common.Address, _rate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.ChangeCommissionRate(&_AutonityUpgradeTest.TransactOpts, _validator, _rate)
}

// CompleteContractUpgrade is a paid mutator transaction binding the contract method 0x872cf059.
//
// Solidity: function completeContractUpgrade() returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) CompleteContractUpgrade(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "completeContractUpgrade")
}

// CompleteContractUpgrade is a paid mutator transaction binding the contract method 0x872cf059.
//
// Solidity: function completeContractUpgrade() returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) CompleteContractUpgrade() (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.CompleteContractUpgrade(&_AutonityUpgradeTest.TransactOpts)
}

// CompleteContractUpgrade is a paid mutator transaction binding the contract method 0x872cf059.
//
// Solidity: function completeContractUpgrade() returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) CompleteContractUpgrade() (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.CompleteContractUpgrade(&_AutonityUpgradeTest.TransactOpts)
}

// CreateSchedule is a paid mutator transaction binding the contract method 0x354c40a7.
//
// Solidity: function createSchedule(address _scheduleVault, uint256 _amount, uint256 _startTime, uint256 _totalDuration) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) CreateSchedule(opts *bind.TransactOpts, _scheduleVault common.Address, _amount *big.Int, _startTime *big.Int, _totalDuration *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "createSchedule", _scheduleVault, _amount, _startTime, _totalDuration)
}

// CreateSchedule is a paid mutator transaction binding the contract method 0x354c40a7.
//
// Solidity: function createSchedule(address _scheduleVault, uint256 _amount, uint256 _startTime, uint256 _totalDuration) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) CreateSchedule(_scheduleVault common.Address, _amount *big.Int, _startTime *big.Int, _totalDuration *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.CreateSchedule(&_AutonityUpgradeTest.TransactOpts, _scheduleVault, _amount, _startTime, _totalDuration)
}

// CreateSchedule is a paid mutator transaction binding the contract method 0x354c40a7.
//
// Solidity: function createSchedule(address _scheduleVault, uint256 _amount, uint256 _startTime, uint256 _totalDuration) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) CreateSchedule(_scheduleVault common.Address, _amount *big.Int, _startTime *big.Int, _totalDuration *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.CreateSchedule(&_AutonityUpgradeTest.TransactOpts, _scheduleVault, _amount, _startTime, _totalDuration)
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns((bool,bool,((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)),(uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256))))
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Finalize(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "finalize")
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns((bool,bool,((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)),(uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256))))
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Finalize() (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Finalize(&_AutonityUpgradeTest.TransactOpts)
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns((bool,bool,((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)),(uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256))))
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Finalize() (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Finalize(&_AutonityUpgradeTest.TransactOpts)
}

// FinalizeInitialization is a paid mutator transaction binding the contract method 0x4da3baec.
//
// Solidity: function finalizeInitialization(uint256 _omissionDelta) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) FinalizeInitialization(opts *bind.TransactOpts, _omissionDelta *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "finalizeInitialization", _omissionDelta)
}

// FinalizeInitialization is a paid mutator transaction binding the contract method 0x4da3baec.
//
// Solidity: function finalizeInitialization(uint256 _omissionDelta) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) FinalizeInitialization(_omissionDelta *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.FinalizeInitialization(&_AutonityUpgradeTest.TransactOpts, _omissionDelta)
}

// FinalizeInitialization is a paid mutator transaction binding the contract method 0x4da3baec.
//
// Solidity: function finalizeInitialization(uint256 _omissionDelta) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) FinalizeInitialization(_omissionDelta *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.FinalizeInitialization(&_AutonityUpgradeTest.TransactOpts, _omissionDelta)
}

// Jail is a paid mutator transaction binding the contract method 0x154d76d7.
//
// Solidity: function jail(address _nodeAddress, uint256 _jailtime, uint8 _newJailedState) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Jail(opts *bind.TransactOpts, _nodeAddress common.Address, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "jail", _nodeAddress, _jailtime, _newJailedState)
}

// Jail is a paid mutator transaction binding the contract method 0x154d76d7.
//
// Solidity: function jail(address _nodeAddress, uint256 _jailtime, uint8 _newJailedState) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Jail(_nodeAddress common.Address, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Jail(&_AutonityUpgradeTest.TransactOpts, _nodeAddress, _jailtime, _newJailedState)
}

// Jail is a paid mutator transaction binding the contract method 0x154d76d7.
//
// Solidity: function jail(address _nodeAddress, uint256 _jailtime, uint8 _newJailedState) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Jail(_nodeAddress common.Address, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Jail(&_AutonityUpgradeTest.TransactOpts, _nodeAddress, _jailtime, _newJailedState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x8ef8c2fd.
//
// Solidity: function jailbound(address _nodeAddress, uint8 _newJailboundState) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Jailbound(opts *bind.TransactOpts, _nodeAddress common.Address, _newJailboundState uint8) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "jailbound", _nodeAddress, _newJailboundState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x8ef8c2fd.
//
// Solidity: function jailbound(address _nodeAddress, uint8 _newJailboundState) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Jailbound(_nodeAddress common.Address, _newJailboundState uint8) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Jailbound(&_AutonityUpgradeTest.TransactOpts, _nodeAddress, _newJailboundState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x8ef8c2fd.
//
// Solidity: function jailbound(address _nodeAddress, uint8 _newJailboundState) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Jailbound(_nodeAddress common.Address, _newJailboundState uint8) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Jailbound(&_AutonityUpgradeTest.TransactOpts, _nodeAddress, _newJailboundState)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _addr, uint256 _amount) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Mint(opts *bind.TransactOpts, _addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "mint", _addr, _amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _addr, uint256 _amount) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Mint(_addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Mint(&_AutonityUpgradeTest.TransactOpts, _addr, _amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _addr, uint256 _amount) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Mint(_addr common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Mint(&_AutonityUpgradeTest.TransactOpts, _addr, _amount)
}

// PauseValidator is a paid mutator transaction binding the contract method 0x0ae65e7a.
//
// Solidity: function pauseValidator(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) PauseValidator(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "pauseValidator", _address)
}

// PauseValidator is a paid mutator transaction binding the contract method 0x0ae65e7a.
//
// Solidity: function pauseValidator(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) PauseValidator(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.PauseValidator(&_AutonityUpgradeTest.TransactOpts, _address)
}

// PauseValidator is a paid mutator transaction binding the contract method 0x0ae65e7a.
//
// Solidity: function pauseValidator(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) PauseValidator(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.PauseValidator(&_AutonityUpgradeTest.TransactOpts, _address)
}

// RegisterValidator is a paid mutator transaction binding the contract method 0x84467fdb.
//
// Solidity: function registerValidator(string _enode, address _oracleAddress, bytes _consensusKey, bytes _signatures) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) RegisterValidator(opts *bind.TransactOpts, _enode string, _oracleAddress common.Address, _consensusKey []byte, _signatures []byte) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "registerValidator", _enode, _oracleAddress, _consensusKey, _signatures)
}

// RegisterValidator is a paid mutator transaction binding the contract method 0x84467fdb.
//
// Solidity: function registerValidator(string _enode, address _oracleAddress, bytes _consensusKey, bytes _signatures) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) RegisterValidator(_enode string, _oracleAddress common.Address, _consensusKey []byte, _signatures []byte) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.RegisterValidator(&_AutonityUpgradeTest.TransactOpts, _enode, _oracleAddress, _consensusKey, _signatures)
}

// RegisterValidator is a paid mutator transaction binding the contract method 0x84467fdb.
//
// Solidity: function registerValidator(string _enode, address _oracleAddress, bytes _consensusKey, bytes _signatures) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) RegisterValidator(_enode string, _oracleAddress common.Address, _consensusKey []byte, _signatures []byte) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.RegisterValidator(&_AutonityUpgradeTest.TransactOpts, _enode, _oracleAddress, _consensusKey, _signatures)
}

// ResetContractUpgrade is a paid mutator transaction binding the contract method 0xcf9c5719.
//
// Solidity: function resetContractUpgrade() returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) ResetContractUpgrade(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "resetContractUpgrade")
}

// ResetContractUpgrade is a paid mutator transaction binding the contract method 0xcf9c5719.
//
// Solidity: function resetContractUpgrade() returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) ResetContractUpgrade() (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.ResetContractUpgrade(&_AutonityUpgradeTest.TransactOpts)
}

// ResetContractUpgrade is a paid mutator transaction binding the contract method 0xcf9c5719.
//
// Solidity: function resetContractUpgrade() returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) ResetContractUpgrade() (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.ResetContractUpgrade(&_AutonityUpgradeTest.TransactOpts)
}

// SetAccountabilityContract is a paid mutator transaction binding the contract method 0x1250a28d.
//
// Solidity: function setAccountabilityContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetAccountabilityContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setAccountabilityContract", _address)
}

// SetAccountabilityContract is a paid mutator transaction binding the contract method 0x1250a28d.
//
// Solidity: function setAccountabilityContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetAccountabilityContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetAccountabilityContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetAccountabilityContract is a paid mutator transaction binding the contract method 0x1250a28d.
//
// Solidity: function setAccountabilityContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetAccountabilityContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetAccountabilityContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetAcuContract is a paid mutator transaction binding the contract method 0xd372c07e.
//
// Solidity: function setAcuContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetAcuContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setAcuContract", _address)
}

// SetAcuContract is a paid mutator transaction binding the contract method 0xd372c07e.
//
// Solidity: function setAcuContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetAcuContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetAcuContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetAcuContract is a paid mutator transaction binding the contract method 0xd372c07e.
//
// Solidity: function setAcuContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetAcuContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetAcuContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetAuctioneerContract is a paid mutator transaction binding the contract method 0x5a061362.
//
// Solidity: function setAuctioneerContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetAuctioneerContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setAuctioneerContract", _address)
}

// SetAuctioneerContract is a paid mutator transaction binding the contract method 0x5a061362.
//
// Solidity: function setAuctioneerContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetAuctioneerContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetAuctioneerContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetAuctioneerContract is a paid mutator transaction binding the contract method 0x5a061362.
//
// Solidity: function setAuctioneerContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetAuctioneerContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetAuctioneerContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetClusteringThreshold is a paid mutator transaction binding the contract method 0x12e7b45d.
//
// Solidity: function setClusteringThreshold(uint256 _threshold) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetClusteringThreshold(opts *bind.TransactOpts, _threshold *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setClusteringThreshold", _threshold)
}

// SetClusteringThreshold is a paid mutator transaction binding the contract method 0x12e7b45d.
//
// Solidity: function setClusteringThreshold(uint256 _threshold) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetClusteringThreshold(_threshold *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetClusteringThreshold(&_AutonityUpgradeTest.TransactOpts, _threshold)
}

// SetClusteringThreshold is a paid mutator transaction binding the contract method 0x12e7b45d.
//
// Solidity: function setClusteringThreshold(uint256 _threshold) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetClusteringThreshold(_threshold *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetClusteringThreshold(&_AutonityUpgradeTest.TransactOpts, _threshold)
}

// SetCommitteeSize is a paid mutator transaction binding the contract method 0x8bac7dad.
//
// Solidity: function setCommitteeSize(uint256 _size) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetCommitteeSize(opts *bind.TransactOpts, _size *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setCommitteeSize", _size)
}

// SetCommitteeSize is a paid mutator transaction binding the contract method 0x8bac7dad.
//
// Solidity: function setCommitteeSize(uint256 _size) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetCommitteeSize(_size *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetCommitteeSize(&_AutonityUpgradeTest.TransactOpts, _size)
}

// SetCommitteeSize is a paid mutator transaction binding the contract method 0x8bac7dad.
//
// Solidity: function setCommitteeSize(uint256 _size) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetCommitteeSize(_size *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetCommitteeSize(&_AutonityUpgradeTest.TransactOpts, _size)
}

// SetEip1559Params is a paid mutator transaction binding the contract method 0x56176bc4.
//
// Solidity: function setEip1559Params((uint256,uint256,uint256,uint256) _params) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetEip1559Params(opts *bind.TransactOpts, _params IAutonityEip1559) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setEip1559Params", _params)
}

// SetEip1559Params is a paid mutator transaction binding the contract method 0x56176bc4.
//
// Solidity: function setEip1559Params((uint256,uint256,uint256,uint256) _params) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetEip1559Params(_params IAutonityEip1559) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetEip1559Params(&_AutonityUpgradeTest.TransactOpts, _params)
}

// SetEip1559Params is a paid mutator transaction binding the contract method 0x56176bc4.
//
// Solidity: function setEip1559Params((uint256,uint256,uint256,uint256) _params) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetEip1559Params(_params IAutonityEip1559) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetEip1559Params(&_AutonityUpgradeTest.TransactOpts, _params)
}

// SetEpochPeriod is a paid mutator transaction binding the contract method 0x6b5f444c.
//
// Solidity: function setEpochPeriod(uint256 _period) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetEpochPeriod(opts *bind.TransactOpts, _period *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setEpochPeriod", _period)
}

// SetEpochPeriod is a paid mutator transaction binding the contract method 0x6b5f444c.
//
// Solidity: function setEpochPeriod(uint256 _period) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetEpochPeriod(_period *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetEpochPeriod(&_AutonityUpgradeTest.TransactOpts, _period)
}

// SetEpochPeriod is a paid mutator transaction binding the contract method 0x6b5f444c.
//
// Solidity: function setEpochPeriod(uint256 _period) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetEpochPeriod(_period *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetEpochPeriod(&_AutonityUpgradeTest.TransactOpts, _period)
}

// SetGasLimit is a paid mutator transaction binding the contract method 0xee7d72b4.
//
// Solidity: function setGasLimit(uint256 _gasLimit) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetGasLimit(opts *bind.TransactOpts, _gasLimit *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setGasLimit", _gasLimit)
}

// SetGasLimit is a paid mutator transaction binding the contract method 0xee7d72b4.
//
// Solidity: function setGasLimit(uint256 _gasLimit) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetGasLimit(_gasLimit *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetGasLimit(&_AutonityUpgradeTest.TransactOpts, _gasLimit)
}

// SetGasLimit is a paid mutator transaction binding the contract method 0xee7d72b4.
//
// Solidity: function setGasLimit(uint256 _gasLimit) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetGasLimit(_gasLimit *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetGasLimit(&_AutonityUpgradeTest.TransactOpts, _gasLimit)
}

// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d.
//
// Solidity: function setInflationControllerContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetInflationControllerContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setInflationControllerContract", _address)
}

// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d.
//
// Solidity: function setInflationControllerContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetInflationControllerContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetInflationControllerContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetInflationControllerContract is a paid mutator transaction binding the contract method 0xf03b959d.
//
// Solidity: function setInflationControllerContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetInflationControllerContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetInflationControllerContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetLiquidLogicContract is a paid mutator transaction binding the contract method 0x15ef30f8.
//
// Solidity: function setLiquidLogicContract(address _contract) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetLiquidLogicContract(opts *bind.TransactOpts, _contract common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setLiquidLogicContract", _contract)
}

// SetLiquidLogicContract is a paid mutator transaction binding the contract method 0x15ef30f8.
//
// Solidity: function setLiquidLogicContract(address _contract) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetLiquidLogicContract(_contract common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetLiquidLogicContract(&_AutonityUpgradeTest.TransactOpts, _contract)
}

// SetLiquidLogicContract is a paid mutator transaction binding the contract method 0x15ef30f8.
//
// Solidity: function setLiquidLogicContract(address _contract) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetLiquidLogicContract(_contract common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetLiquidLogicContract(&_AutonityUpgradeTest.TransactOpts, _contract)
}

// SetMaxScheduleDuration is a paid mutator transaction binding the contract method 0x8bb2e477.
//
// Solidity: function setMaxScheduleDuration(uint256 _newMaxDuration) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetMaxScheduleDuration(opts *bind.TransactOpts, _newMaxDuration *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setMaxScheduleDuration", _newMaxDuration)
}

// SetMaxScheduleDuration is a paid mutator transaction binding the contract method 0x8bb2e477.
//
// Solidity: function setMaxScheduleDuration(uint256 _newMaxDuration) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetMaxScheduleDuration(_newMaxDuration *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetMaxScheduleDuration(&_AutonityUpgradeTest.TransactOpts, _newMaxDuration)
}

// SetMaxScheduleDuration is a paid mutator transaction binding the contract method 0x8bb2e477.
//
// Solidity: function setMaxScheduleDuration(uint256 _newMaxDuration) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetMaxScheduleDuration(_newMaxDuration *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetMaxScheduleDuration(&_AutonityUpgradeTest.TransactOpts, _newMaxDuration)
}

// SetOmissionAccountabilityContract is a paid mutator transaction binding the contract method 0xb47c3eaa.
//
// Solidity: function setOmissionAccountabilityContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetOmissionAccountabilityContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setOmissionAccountabilityContract", _address)
}

// SetOmissionAccountabilityContract is a paid mutator transaction binding the contract method 0xb47c3eaa.
//
// Solidity: function setOmissionAccountabilityContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetOmissionAccountabilityContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetOmissionAccountabilityContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetOmissionAccountabilityContract is a paid mutator transaction binding the contract method 0xb47c3eaa.
//
// Solidity: function setOmissionAccountabilityContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetOmissionAccountabilityContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetOmissionAccountabilityContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetOperatorAccount is a paid mutator transaction binding the contract method 0x520fdbbc.
//
// Solidity: function setOperatorAccount(address _account) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetOperatorAccount(opts *bind.TransactOpts, _account common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setOperatorAccount", _account)
}

// SetOperatorAccount is a paid mutator transaction binding the contract method 0x520fdbbc.
//
// Solidity: function setOperatorAccount(address _account) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetOperatorAccount(_account common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetOperatorAccount(&_AutonityUpgradeTest.TransactOpts, _account)
}

// SetOperatorAccount is a paid mutator transaction binding the contract method 0x520fdbbc.
//
// Solidity: function setOperatorAccount(address _account) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetOperatorAccount(_account common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetOperatorAccount(&_AutonityUpgradeTest.TransactOpts, _account)
}

// SetOracleContract is a paid mutator transaction binding the contract method 0x496ccd9b.
//
// Solidity: function setOracleContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetOracleContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setOracleContract", _address)
}

// SetOracleContract is a paid mutator transaction binding the contract method 0x496ccd9b.
//
// Solidity: function setOracleContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetOracleContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetOracleContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetOracleContract is a paid mutator transaction binding the contract method 0x496ccd9b.
//
// Solidity: function setOracleContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetOracleContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetOracleContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetOracleRewardRate is a paid mutator transaction binding the contract method 0xed5676e9.
//
// Solidity: function setOracleRewardRate(uint256 _oracleRewardRate) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetOracleRewardRate(opts *bind.TransactOpts, _oracleRewardRate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setOracleRewardRate", _oracleRewardRate)
}

// SetOracleRewardRate is a paid mutator transaction binding the contract method 0xed5676e9.
//
// Solidity: function setOracleRewardRate(uint256 _oracleRewardRate) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetOracleRewardRate(_oracleRewardRate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetOracleRewardRate(&_AutonityUpgradeTest.TransactOpts, _oracleRewardRate)
}

// SetOracleRewardRate is a paid mutator transaction binding the contract method 0xed5676e9.
//
// Solidity: function setOracleRewardRate(uint256 _oracleRewardRate) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetOracleRewardRate(_oracleRewardRate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetOracleRewardRate(&_AutonityUpgradeTest.TransactOpts, _oracleRewardRate)
}

// SetProposerRewardRate is a paid mutator transaction binding the contract method 0x416f86a2.
//
// Solidity: function setProposerRewardRate(uint256 _proposerRewardRate) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetProposerRewardRate(opts *bind.TransactOpts, _proposerRewardRate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setProposerRewardRate", _proposerRewardRate)
}

// SetProposerRewardRate is a paid mutator transaction binding the contract method 0x416f86a2.
//
// Solidity: function setProposerRewardRate(uint256 _proposerRewardRate) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetProposerRewardRate(_proposerRewardRate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetProposerRewardRate(&_AutonityUpgradeTest.TransactOpts, _proposerRewardRate)
}

// SetProposerRewardRate is a paid mutator transaction binding the contract method 0x416f86a2.
//
// Solidity: function setProposerRewardRate(uint256 _proposerRewardRate) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetProposerRewardRate(_proposerRewardRate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetProposerRewardRate(&_AutonityUpgradeTest.TransactOpts, _proposerRewardRate)
}

// SetSlasher is a paid mutator transaction binding the contract method 0xaabc2496.
//
// Solidity: function setSlasher(address _slasher) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetSlasher(opts *bind.TransactOpts, _slasher common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setSlasher", _slasher)
}

// SetSlasher is a paid mutator transaction binding the contract method 0xaabc2496.
//
// Solidity: function setSlasher(address _slasher) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetSlasher(_slasher common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetSlasher(&_AutonityUpgradeTest.TransactOpts, _slasher)
}

// SetSlasher is a paid mutator transaction binding the contract method 0xaabc2496.
//
// Solidity: function setSlasher(address _slasher) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetSlasher(_slasher common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetSlasher(&_AutonityUpgradeTest.TransactOpts, _slasher)
}

// SetStabilizationContract is a paid mutator transaction binding the contract method 0xcfd19fb9.
//
// Solidity: function setStabilizationContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetStabilizationContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setStabilizationContract", _address)
}

// SetStabilizationContract is a paid mutator transaction binding the contract method 0xcfd19fb9.
//
// Solidity: function setStabilizationContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetStabilizationContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetStabilizationContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetStabilizationContract is a paid mutator transaction binding the contract method 0xcfd19fb9.
//
// Solidity: function setStabilizationContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetStabilizationContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetStabilizationContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetSupplyControlContract is a paid mutator transaction binding the contract method 0xb3ecbadd.
//
// Solidity: function setSupplyControlContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetSupplyControlContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setSupplyControlContract", _address)
}

// SetSupplyControlContract is a paid mutator transaction binding the contract method 0xb3ecbadd.
//
// Solidity: function setSupplyControlContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetSupplyControlContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetSupplyControlContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetSupplyControlContract is a paid mutator transaction binding the contract method 0xb3ecbadd.
//
// Solidity: function setSupplyControlContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetSupplyControlContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetSupplyControlContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetTreasuryAccount is a paid mutator transaction binding the contract method 0xd886f8a2.
//
// Solidity: function setTreasuryAccount(address _account) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetTreasuryAccount(opts *bind.TransactOpts, _account common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setTreasuryAccount", _account)
}

// SetTreasuryAccount is a paid mutator transaction binding the contract method 0xd886f8a2.
//
// Solidity: function setTreasuryAccount(address _account) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetTreasuryAccount(_account common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetTreasuryAccount(&_AutonityUpgradeTest.TransactOpts, _account)
}

// SetTreasuryAccount is a paid mutator transaction binding the contract method 0xd886f8a2.
//
// Solidity: function setTreasuryAccount(address _account) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetTreasuryAccount(_account common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetTreasuryAccount(&_AutonityUpgradeTest.TransactOpts, _account)
}

// SetTreasuryFee is a paid mutator transaction binding the contract method 0x77e741c7.
//
// Solidity: function setTreasuryFee(uint256 _treasuryFee) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetTreasuryFee(opts *bind.TransactOpts, _treasuryFee *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setTreasuryFee", _treasuryFee)
}

// SetTreasuryFee is a paid mutator transaction binding the contract method 0x77e741c7.
//
// Solidity: function setTreasuryFee(uint256 _treasuryFee) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetTreasuryFee(_treasuryFee *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetTreasuryFee(&_AutonityUpgradeTest.TransactOpts, _treasuryFee)
}

// SetTreasuryFee is a paid mutator transaction binding the contract method 0x77e741c7.
//
// Solidity: function setTreasuryFee(uint256 _treasuryFee) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetTreasuryFee(_treasuryFee *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetTreasuryFee(&_AutonityUpgradeTest.TransactOpts, _treasuryFee)
}

// SetUnbondingPeriod is a paid mutator transaction binding the contract method 0x114eaf55.
//
// Solidity: function setUnbondingPeriod(uint256 _period) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetUnbondingPeriod(opts *bind.TransactOpts, _period *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setUnbondingPeriod", _period)
}

// SetUnbondingPeriod is a paid mutator transaction binding the contract method 0x114eaf55.
//
// Solidity: function setUnbondingPeriod(uint256 _period) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetUnbondingPeriod(_period *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetUnbondingPeriod(&_AutonityUpgradeTest.TransactOpts, _period)
}

// SetUnbondingPeriod is a paid mutator transaction binding the contract method 0x114eaf55.
//
// Solidity: function setUnbondingPeriod(uint256 _period) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetUnbondingPeriod(_period *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetUnbondingPeriod(&_AutonityUpgradeTest.TransactOpts, _period)
}

// SetUpgradeManagerContract is a paid mutator transaction binding the contract method 0xceaad455.
//
// Solidity: function setUpgradeManagerContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetUpgradeManagerContract(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setUpgradeManagerContract", _address)
}

// SetUpgradeManagerContract is a paid mutator transaction binding the contract method 0xceaad455.
//
// Solidity: function setUpgradeManagerContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetUpgradeManagerContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetUpgradeManagerContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetUpgradeManagerContract is a paid mutator transaction binding the contract method 0xceaad455.
//
// Solidity: function setUpgradeManagerContract(address _address) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetUpgradeManagerContract(_address common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetUpgradeManagerContract(&_AutonityUpgradeTest.TransactOpts, _address)
}

// SetWithheldRewardsPool is a paid mutator transaction binding the contract method 0x39f9eb1f.
//
// Solidity: function setWithheldRewardsPool(address _pool) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetWithheldRewardsPool(opts *bind.TransactOpts, _pool common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setWithheldRewardsPool", _pool)
}

// SetWithheldRewardsPool is a paid mutator transaction binding the contract method 0x39f9eb1f.
//
// Solidity: function setWithheldRewardsPool(address _pool) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetWithheldRewardsPool(_pool common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetWithheldRewardsPool(&_AutonityUpgradeTest.TransactOpts, _pool)
}

// SetWithheldRewardsPool is a paid mutator transaction binding the contract method 0x39f9eb1f.
//
// Solidity: function setWithheldRewardsPool(address _pool) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetWithheldRewardsPool(_pool common.Address) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetWithheldRewardsPool(&_AutonityUpgradeTest.TransactOpts, _pool)
}

// SetWithholdingThreshold is a paid mutator transaction binding the contract method 0x905d76e9.
//
// Solidity: function setWithholdingThreshold(uint256 _withholdingThreshold) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SetWithholdingThreshold(opts *bind.TransactOpts, _withholdingThreshold *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "setWithholdingThreshold", _withholdingThreshold)
}

// SetWithholdingThreshold is a paid mutator transaction binding the contract method 0x905d76e9.
//
// Solidity: function setWithholdingThreshold(uint256 _withholdingThreshold) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SetWithholdingThreshold(_withholdingThreshold *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetWithholdingThreshold(&_AutonityUpgradeTest.TransactOpts, _withholdingThreshold)
}

// SetWithholdingThreshold is a paid mutator transaction binding the contract method 0x905d76e9.
//
// Solidity: function setWithholdingThreshold(uint256 _withholdingThreshold) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SetWithholdingThreshold(_withholdingThreshold *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SetWithholdingThreshold(&_AutonityUpgradeTest.TransactOpts, _withholdingThreshold)
}

// Slash is a paid mutator transaction binding the contract method 0x02fb4d85.
//
// Solidity: function slash(address _nodeAddress, uint256 _slashingRate) returns(uint256 slashingAmount)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Slash(opts *bind.TransactOpts, _nodeAddress common.Address, _slashingRate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "slash", _nodeAddress, _slashingRate)
}

// Slash is a paid mutator transaction binding the contract method 0x02fb4d85.
//
// Solidity: function slash(address _nodeAddress, uint256 _slashingRate) returns(uint256 slashingAmount)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Slash(_nodeAddress common.Address, _slashingRate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Slash(&_AutonityUpgradeTest.TransactOpts, _nodeAddress, _slashingRate)
}

// Slash is a paid mutator transaction binding the contract method 0x02fb4d85.
//
// Solidity: function slash(address _nodeAddress, uint256 _slashingRate) returns(uint256 slashingAmount)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Slash(_nodeAddress common.Address, _slashingRate *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Slash(&_AutonityUpgradeTest.TransactOpts, _nodeAddress, _slashingRate)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0x122b4122.
//
// Solidity: function slashAndJail(address _nodeAddress, uint256 _slashingRate, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns(uint256 slashingAmount, uint256 jailReleaseBlock, bool isJailbound)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) SlashAndJail(opts *bind.TransactOpts, _nodeAddress common.Address, _slashingRate *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "slashAndJail", _nodeAddress, _slashingRate, _jailtime, _newJailedState, _newJailboundState)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0x122b4122.
//
// Solidity: function slashAndJail(address _nodeAddress, uint256 _slashingRate, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns(uint256 slashingAmount, uint256 jailReleaseBlock, bool isJailbound)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) SlashAndJail(_nodeAddress common.Address, _slashingRate *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SlashAndJail(&_AutonityUpgradeTest.TransactOpts, _nodeAddress, _slashingRate, _jailtime, _newJailedState, _newJailboundState)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0x122b4122.
//
// Solidity: function slashAndJail(address _nodeAddress, uint256 _slashingRate, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns(uint256 slashingAmount, uint256 jailReleaseBlock, bool isJailbound)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) SlashAndJail(_nodeAddress common.Address, _slashingRate *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.SlashAndJail(&_AutonityUpgradeTest.TransactOpts, _nodeAddress, _slashingRate, _jailtime, _newJailedState, _newJailboundState)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address _recipient, uint256 _amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Transfer(opts *bind.TransactOpts, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "transfer", _recipient, _amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address _recipient, uint256 _amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Transfer(_recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Transfer(&_AutonityUpgradeTest.TransactOpts, _recipient, _amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address _recipient, uint256 _amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Transfer(_recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Transfer(&_AutonityUpgradeTest.TransactOpts, _recipient, _amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) TransferFrom(opts *bind.TransactOpts, _sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "transferFrom", _sender, _recipient, _amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) TransferFrom(_sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.TransferFrom(&_AutonityUpgradeTest.TransactOpts, _sender, _recipient, _amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) TransferFrom(_sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.TransferFrom(&_AutonityUpgradeTest.TransactOpts, _sender, _recipient, _amount)
}

// Unbond is a paid mutator transaction binding the contract method 0xa5d059ca.
//
// Solidity: function unbond(address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Unbond(opts *bind.TransactOpts, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "unbond", _validator, _amount)
}

// Unbond is a paid mutator transaction binding the contract method 0xa5d059ca.
//
// Solidity: function unbond(address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Unbond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Unbond(&_AutonityUpgradeTest.TransactOpts, _validator, _amount)
}

// Unbond is a paid mutator transaction binding the contract method 0xa5d059ca.
//
// Solidity: function unbond(address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Unbond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Unbond(&_AutonityUpgradeTest.TransactOpts, _validator, _amount)
}

// UnbondFrom is a paid mutator transaction binding the contract method 0xa9a7d7c9.
//
// Solidity: function unbondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) UnbondFrom(opts *bind.TransactOpts, _account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "unbondFrom", _account, _validator, _amount)
}

// UnbondFrom is a paid mutator transaction binding the contract method 0xa9a7d7c9.
//
// Solidity: function unbondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) UnbondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.UnbondFrom(&_AutonityUpgradeTest.TransactOpts, _account, _validator, _amount)
}

// UnbondFrom is a paid mutator transaction binding the contract method 0xa9a7d7c9.
//
// Solidity: function unbondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) UnbondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.UnbondFrom(&_AutonityUpgradeTest.TransactOpts, _account, _validator, _amount)
}

// UpdateEnode is a paid mutator transaction binding the contract method 0x784304b5.
//
// Solidity: function updateEnode(address _nodeAddress, string _enode) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) UpdateEnode(opts *bind.TransactOpts, _nodeAddress common.Address, _enode string) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "updateEnode", _nodeAddress, _enode)
}

// UpdateEnode is a paid mutator transaction binding the contract method 0x784304b5.
//
// Solidity: function updateEnode(address _nodeAddress, string _enode) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) UpdateEnode(_nodeAddress common.Address, _enode string) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.UpdateEnode(&_AutonityUpgradeTest.TransactOpts, _nodeAddress, _enode)
}

// UpdateEnode is a paid mutator transaction binding the contract method 0x784304b5.
//
// Solidity: function updateEnode(address _nodeAddress, string _enode) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) UpdateEnode(_nodeAddress common.Address, _enode string) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.UpdateEnode(&_AutonityUpgradeTest.TransactOpts, _nodeAddress, _enode)
}

// UpgradeContract is a paid mutator transaction binding the contract method 0xb2ea9adb.
//
// Solidity: function upgradeContract(bytes _bytecode, string _abi) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) UpgradeContract(opts *bind.TransactOpts, _bytecode []byte, _abi string) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.Transact(opts, "upgradeContract", _bytecode, _abi)
}

// UpgradeContract is a paid mutator transaction binding the contract method 0xb2ea9adb.
//
// Solidity: function upgradeContract(bytes _bytecode, string _abi) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) UpgradeContract(_bytecode []byte, _abi string) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.UpgradeContract(&_AutonityUpgradeTest.TransactOpts, _bytecode, _abi)
}

// UpgradeContract is a paid mutator transaction binding the contract method 0xb2ea9adb.
//
// Solidity: function upgradeContract(bytes _bytecode, string _abi) returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) UpgradeContract(_bytecode []byte, _abi string) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.UpgradeContract(&_AutonityUpgradeTest.TransactOpts, _bytecode, _abi)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.RawTransact(opts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Fallback(&_AutonityUpgradeTest.TransactOpts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Fallback(&_AutonityUpgradeTest.TransactOpts, calldata)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _AutonityUpgradeTest.contract.RawTransact(opts, nil) // calldata is disallowed for receive function
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestSession) Receive() (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Receive(&_AutonityUpgradeTest.TransactOpts)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_AutonityUpgradeTest *AutonityUpgradeTestTransactorSession) Receive() (*types.Transaction, error) {
	return _AutonityUpgradeTest.Contract.Receive(&_AutonityUpgradeTest.TransactOpts)
}

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

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

// AutonityUpgradeTestActivatedValidator represents a ActivatedValidator event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestActivatedValidator struct {
	Treasury       common.Address
	Addr           common.Address
	EffectiveBlock *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterActivatedValidator is a free log retrieval operation binding the contract event 0x60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5.
//
// Solidity: event ActivatedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterActivatedValidator(opts *bind.FilterOpts, treasury []common.Address, addr []common.Address) (*AutonityUpgradeTestActivatedValidatorIterator, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "ActivatedValidator", treasuryRule, addrRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestActivatedValidatorIterator{contract: _AutonityUpgradeTest.contract, event: "ActivatedValidator", logs: logs, sub: sub}, nil
}

// WatchActivatedValidator is a free log subscription operation binding the contract event 0x60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5.
//
// Solidity: event ActivatedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchActivatedValidator(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestActivatedValidator, treasury []common.Address, addr []common.Address) (event.Subscription, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "ActivatedValidator", treasuryRule, addrRule)
	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(AutonityUpgradeTestActivatedValidator)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "ActivatedValidator", 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
}

// ParseActivatedValidator is a log parse operation binding the contract event 0x60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5.
//
// Solidity: event ActivatedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseActivatedValidator(log types.Log) (*AutonityUpgradeTestActivatedValidator, error) {
	event := new(AutonityUpgradeTestActivatedValidator)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "ActivatedValidator", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestApproval represents a Approval event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestApproval struct {
	Owner   common.Address
	Spender common.Address
	Value   *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*AutonityUpgradeTestApprovalIterator, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestApprovalIterator{contract: _AutonityUpgradeTest.contract, event: "Approval", logs: logs, sub: sub}, nil
}

// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
	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(AutonityUpgradeTestApproval)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "Approval", 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
}

// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseApproval(log types.Log) (*AutonityUpgradeTestApproval, error) {
	event := new(AutonityUpgradeTestApproval)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "Approval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestBondingApproval represents a BondingApproval event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestBondingApproval struct {
	Owner  common.Address
	Caller common.Address
	Value  *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterBondingApproval is a free log retrieval operation binding the contract event 0x78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea.
//
// Solidity: event BondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterBondingApproval(opts *bind.FilterOpts, _owner []common.Address, _caller []common.Address) (*AutonityUpgradeTestBondingApprovalIterator, error) {

	var _ownerRule []interface{}
	for _, _ownerItem := range _owner {
		_ownerRule = append(_ownerRule, _ownerItem)
	}
	var _callerRule []interface{}
	for _, _callerItem := range _caller {
		_callerRule = append(_callerRule, _callerItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "BondingApproval", _ownerRule, _callerRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestBondingApprovalIterator{contract: _AutonityUpgradeTest.contract, event: "BondingApproval", logs: logs, sub: sub}, nil
}

// WatchBondingApproval is a free log subscription operation binding the contract event 0x78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea.
//
// Solidity: event BondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchBondingApproval(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestBondingApproval, _owner []common.Address, _caller []common.Address) (event.Subscription, error) {

	var _ownerRule []interface{}
	for _, _ownerItem := range _owner {
		_ownerRule = append(_ownerRule, _ownerItem)
	}
	var _callerRule []interface{}
	for _, _callerItem := range _caller {
		_callerRule = append(_callerRule, _callerItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "BondingApproval", _ownerRule, _callerRule)
	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(AutonityUpgradeTestBondingApproval)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "BondingApproval", 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
}

// ParseBondingApproval is a log parse operation binding the contract event 0x78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea.
//
// Solidity: event BondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseBondingApproval(log types.Log) (*AutonityUpgradeTestBondingApproval, error) {
	event := new(AutonityUpgradeTestBondingApproval)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "BondingApproval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestBondingRejected represents a BondingRejected event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestBondingRejected struct {
	Validator common.Address
	Delegator common.Address
	Amount    *big.Int
	State     uint8
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterBondingRejected is a free log retrieval operation binding the contract event 0x1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342.
//
// Solidity: event BondingRejected(address indexed validator, address indexed delegator, uint256 amount, uint8 state)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterBondingRejected(opts *bind.FilterOpts, validator []common.Address, delegator []common.Address) (*AutonityUpgradeTestBondingRejectedIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "BondingRejected", validatorRule, delegatorRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestBondingRejectedIterator{contract: _AutonityUpgradeTest.contract, event: "BondingRejected", logs: logs, sub: sub}, nil
}

// WatchBondingRejected is a free log subscription operation binding the contract event 0x1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342.
//
// Solidity: event BondingRejected(address indexed validator, address indexed delegator, uint256 amount, uint8 state)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchBondingRejected(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestBondingRejected, validator []common.Address, delegator []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "BondingRejected", validatorRule, delegatorRule)
	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(AutonityUpgradeTestBondingRejected)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "BondingRejected", 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
}

// ParseBondingRejected is a log parse operation binding the contract event 0x1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342.
//
// Solidity: event BondingRejected(address indexed validator, address indexed delegator, uint256 amount, uint8 state)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseBondingRejected(log types.Log) (*AutonityUpgradeTestBondingRejected, error) {
	event := new(AutonityUpgradeTestBondingRejected)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "BondingRejected", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestBurnedStake represents a BurnedStake event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestBurnedStake struct {
	Addr   common.Address
	Amount *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterBurnedStake is a free log retrieval operation binding the contract event 0x5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3.
//
// Solidity: event BurnedStake(address indexed addr, uint256 amount)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterBurnedStake(opts *bind.FilterOpts, addr []common.Address) (*AutonityUpgradeTestBurnedStakeIterator, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "BurnedStake", addrRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestBurnedStakeIterator{contract: _AutonityUpgradeTest.contract, event: "BurnedStake", logs: logs, sub: sub}, nil
}

// WatchBurnedStake is a free log subscription operation binding the contract event 0x5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3.
//
// Solidity: event BurnedStake(address indexed addr, uint256 amount)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchBurnedStake(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestBurnedStake, addr []common.Address) (event.Subscription, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "BurnedStake", addrRule)
	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(AutonityUpgradeTestBurnedStake)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "BurnedStake", 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
}

// ParseBurnedStake is a log parse operation binding the contract event 0x5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3.
//
// Solidity: event BurnedStake(address indexed addr, uint256 amount)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseBurnedStake(log types.Log) (*AutonityUpgradeTestBurnedStake, error) {
	event := new(AutonityUpgradeTestBurnedStake)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "BurnedStake", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestCallFailed represents a CallFailed event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestCallFailed struct {
	To              common.Address
	MethodSignature string
	ReturnData      []byte
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterCallFailed is a free log retrieval operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterCallFailed(opts *bind.FilterOpts) (*AutonityUpgradeTestCallFailedIterator, error) {

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "CallFailed")
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestCallFailedIterator{contract: _AutonityUpgradeTest.contract, event: "CallFailed", logs: logs, sub: sub}, nil
}

// WatchCallFailed is a free log subscription operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestCallFailed) (event.Subscription, error) {

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

// ParseCallFailed is a log parse operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseCallFailed(log types.Log) (*AutonityUpgradeTestCallFailed, error) {
	event := new(AutonityUpgradeTestCallFailed)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "CallFailed", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestCommissionRateChange represents a CommissionRateChange event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestCommissionRateChange struct {
	Validator common.Address
	Rate      *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterCommissionRateChange is a free log retrieval operation binding the contract event 0x4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf.
//
// Solidity: event CommissionRateChange(address indexed validator, uint256 rate)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterCommissionRateChange(opts *bind.FilterOpts, validator []common.Address) (*AutonityUpgradeTestCommissionRateChangeIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "CommissionRateChange", validatorRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestCommissionRateChangeIterator{contract: _AutonityUpgradeTest.contract, event: "CommissionRateChange", logs: logs, sub: sub}, nil
}

// WatchCommissionRateChange is a free log subscription operation binding the contract event 0x4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf.
//
// Solidity: event CommissionRateChange(address indexed validator, uint256 rate)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchCommissionRateChange(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestCommissionRateChange, validator []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "CommissionRateChange", validatorRule)
	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(AutonityUpgradeTestCommissionRateChange)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "CommissionRateChange", 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
}

// ParseCommissionRateChange is a log parse operation binding the contract event 0x4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf.
//
// Solidity: event CommissionRateChange(address indexed validator, uint256 rate)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseCommissionRateChange(log types.Log) (*AutonityUpgradeTestCommissionRateChange, error) {
	event := new(AutonityUpgradeTestCommissionRateChange)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "CommissionRateChange", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestConfigUpdateAddress represents a ConfigUpdateAddress event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*AutonityUpgradeTestConfigUpdateAddressIterator, error) {

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestConfigUpdateAddressIterator{contract: _AutonityUpgradeTest.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestConfigUpdateAddress) (event.Subscription, error) {

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

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseConfigUpdateAddress(log types.Log) (*AutonityUpgradeTestConfigUpdateAddress, error) {
	event := new(AutonityUpgradeTestConfigUpdateAddress)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestConfigUpdateBool represents a ConfigUpdateBool event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*AutonityUpgradeTestConfigUpdateBoolIterator, error) {

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestConfigUpdateBoolIterator{contract: _AutonityUpgradeTest.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestConfigUpdateBool) (event.Subscription, error) {

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

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseConfigUpdateBool(log types.Log) (*AutonityUpgradeTestConfigUpdateBool, error) {
	event := new(AutonityUpgradeTestConfigUpdateBool)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestConfigUpdateInt represents a ConfigUpdateInt event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*AutonityUpgradeTestConfigUpdateIntIterator, error) {

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestConfigUpdateIntIterator{contract: _AutonityUpgradeTest.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestConfigUpdateInt) (event.Subscription, error) {

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

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseConfigUpdateInt(log types.Log) (*AutonityUpgradeTestConfigUpdateInt, error) {
	event := new(AutonityUpgradeTestConfigUpdateInt)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestConfigUpdateUint represents a ConfigUpdateUint event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*AutonityUpgradeTestConfigUpdateUintIterator, error) {

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestConfigUpdateUintIterator{contract: _AutonityUpgradeTest.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestConfigUpdateUint) (event.Subscription, error) {

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

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseConfigUpdateUint(log types.Log) (*AutonityUpgradeTestConfigUpdateUint, error) {
	event := new(AutonityUpgradeTestConfigUpdateUint)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestEip1559ParamsUpdate represents a Eip1559ParamsUpdate event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestEip1559ParamsUpdate struct {
	OldParams IAutonityEip1559
	NewParams IAutonityEip1559
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterEip1559ParamsUpdate is a free log retrieval operation binding the contract event 0xa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc.
//
// Solidity: event Eip1559ParamsUpdate((uint256,uint256,uint256,uint256) oldParams, (uint256,uint256,uint256,uint256) newParams)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterEip1559ParamsUpdate(opts *bind.FilterOpts) (*AutonityUpgradeTestEip1559ParamsUpdateIterator, error) {

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "Eip1559ParamsUpdate")
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestEip1559ParamsUpdateIterator{contract: _AutonityUpgradeTest.contract, event: "Eip1559ParamsUpdate", logs: logs, sub: sub}, nil
}

// WatchEip1559ParamsUpdate is a free log subscription operation binding the contract event 0xa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc.
//
// Solidity: event Eip1559ParamsUpdate((uint256,uint256,uint256,uint256) oldParams, (uint256,uint256,uint256,uint256) newParams)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchEip1559ParamsUpdate(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestEip1559ParamsUpdate) (event.Subscription, error) {

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

// ParseEip1559ParamsUpdate is a log parse operation binding the contract event 0xa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc.
//
// Solidity: event Eip1559ParamsUpdate((uint256,uint256,uint256,uint256) oldParams, (uint256,uint256,uint256,uint256) newParams)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseEip1559ParamsUpdate(log types.Log) (*AutonityUpgradeTestEip1559ParamsUpdate, error) {
	event := new(AutonityUpgradeTestEip1559ParamsUpdate)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "Eip1559ParamsUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestEnodeUpdate represents a EnodeUpdate event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestEnodeUpdate struct {
	Validator common.Address
	OldEnode  string
	NewEnode  string
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterEnodeUpdate is a free log retrieval operation binding the contract event 0x0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b.
//
// Solidity: event EnodeUpdate(address validator, string oldEnode, string newEnode)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterEnodeUpdate(opts *bind.FilterOpts) (*AutonityUpgradeTestEnodeUpdateIterator, error) {

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "EnodeUpdate")
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestEnodeUpdateIterator{contract: _AutonityUpgradeTest.contract, event: "EnodeUpdate", logs: logs, sub: sub}, nil
}

// WatchEnodeUpdate is a free log subscription operation binding the contract event 0x0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b.
//
// Solidity: event EnodeUpdate(address validator, string oldEnode, string newEnode)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchEnodeUpdate(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestEnodeUpdate) (event.Subscription, error) {

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

// ParseEnodeUpdate is a log parse operation binding the contract event 0x0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b.
//
// Solidity: event EnodeUpdate(address validator, string oldEnode, string newEnode)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseEnodeUpdate(log types.Log) (*AutonityUpgradeTestEnodeUpdate, error) {
	event := new(AutonityUpgradeTestEnodeUpdate)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "EnodeUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestEpochPeriodUpdated represents a EpochPeriodUpdated event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestEpochPeriodUpdated struct {
	Period         *big.Int
	AppliedAtBlock *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterEpochPeriodUpdated is a free log retrieval operation binding the contract event 0x2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7.
//
// Solidity: event EpochPeriodUpdated(uint256 period, uint256 appliedAtBlock)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterEpochPeriodUpdated(opts *bind.FilterOpts) (*AutonityUpgradeTestEpochPeriodUpdatedIterator, error) {

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "EpochPeriodUpdated")
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestEpochPeriodUpdatedIterator{contract: _AutonityUpgradeTest.contract, event: "EpochPeriodUpdated", logs: logs, sub: sub}, nil
}

// WatchEpochPeriodUpdated is a free log subscription operation binding the contract event 0x2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7.
//
// Solidity: event EpochPeriodUpdated(uint256 period, uint256 appliedAtBlock)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchEpochPeriodUpdated(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestEpochPeriodUpdated) (event.Subscription, error) {

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

// ParseEpochPeriodUpdated is a log parse operation binding the contract event 0x2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7.
//
// Solidity: event EpochPeriodUpdated(uint256 period, uint256 appliedAtBlock)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseEpochPeriodUpdated(log types.Log) (*AutonityUpgradeTestEpochPeriodUpdated, error) {
	event := new(AutonityUpgradeTestEpochPeriodUpdated)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "EpochPeriodUpdated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestMintedStake represents a MintedStake event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestMintedStake struct {
	Addr   common.Address
	Amount *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterMintedStake is a free log retrieval operation binding the contract event 0x48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf.
//
// Solidity: event MintedStake(address indexed addr, uint256 amount)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterMintedStake(opts *bind.FilterOpts, addr []common.Address) (*AutonityUpgradeTestMintedStakeIterator, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "MintedStake", addrRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestMintedStakeIterator{contract: _AutonityUpgradeTest.contract, event: "MintedStake", logs: logs, sub: sub}, nil
}

// WatchMintedStake is a free log subscription operation binding the contract event 0x48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf.
//
// Solidity: event MintedStake(address indexed addr, uint256 amount)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchMintedStake(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestMintedStake, addr []common.Address) (event.Subscription, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "MintedStake", addrRule)
	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(AutonityUpgradeTestMintedStake)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "MintedStake", 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
}

// ParseMintedStake is a log parse operation binding the contract event 0x48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf.
//
// Solidity: event MintedStake(address indexed addr, uint256 amount)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseMintedStake(log types.Log) (*AutonityUpgradeTestMintedStake, error) {
	event := new(AutonityUpgradeTestMintedStake)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "MintedStake", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestNewBondingRequest represents a NewBondingRequest event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestNewBondingRequest struct {
	Validator     common.Address
	Delegator     common.Address
	Caller        common.Address
	SelfBonded    bool
	Amount        *big.Int
	HeadBondingID *big.Int
	Raw           types.Log // Blockchain specific contextual infos
}

// FilterNewBondingRequest is a free log retrieval operation binding the contract event 0xcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2.
//
// Solidity: event NewBondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headBondingID)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterNewBondingRequest(opts *bind.FilterOpts, validator []common.Address, delegator []common.Address, caller []common.Address) (*AutonityUpgradeTestNewBondingRequestIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "NewBondingRequest", validatorRule, delegatorRule, callerRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestNewBondingRequestIterator{contract: _AutonityUpgradeTest.contract, event: "NewBondingRequest", logs: logs, sub: sub}, nil
}

// WatchNewBondingRequest is a free log subscription operation binding the contract event 0xcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2.
//
// Solidity: event NewBondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headBondingID)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchNewBondingRequest(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestNewBondingRequest, validator []common.Address, delegator []common.Address, caller []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "NewBondingRequest", validatorRule, delegatorRule, callerRule)
	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(AutonityUpgradeTestNewBondingRequest)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "NewBondingRequest", 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
}

// ParseNewBondingRequest is a log parse operation binding the contract event 0xcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2.
//
// Solidity: event NewBondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headBondingID)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseNewBondingRequest(log types.Log) (*AutonityUpgradeTestNewBondingRequest, error) {
	event := new(AutonityUpgradeTestNewBondingRequest)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "NewBondingRequest", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestNewEpoch represents a NewEpoch event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestNewEpoch struct {
	Epoch            *big.Int
	InflationReserve *big.Int
	StakeCirculating *big.Int
	Raw              types.Log // Blockchain specific contextual infos
}

// FilterNewEpoch is a free log retrieval operation binding the contract event 0x3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b58.
//
// Solidity: event NewEpoch(uint256 epoch, uint256 inflationReserve, uint256 stakeCirculating)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterNewEpoch(opts *bind.FilterOpts) (*AutonityUpgradeTestNewEpochIterator, error) {

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "NewEpoch")
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestNewEpochIterator{contract: _AutonityUpgradeTest.contract, event: "NewEpoch", logs: logs, sub: sub}, nil
}

// WatchNewEpoch is a free log subscription operation binding the contract event 0x3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b58.
//
// Solidity: event NewEpoch(uint256 epoch, uint256 inflationReserve, uint256 stakeCirculating)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchNewEpoch(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestNewEpoch) (event.Subscription, error) {

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

// ParseNewEpoch is a log parse operation binding the contract event 0x3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b58.
//
// Solidity: event NewEpoch(uint256 epoch, uint256 inflationReserve, uint256 stakeCirculating)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseNewEpoch(log types.Log) (*AutonityUpgradeTestNewEpoch, error) {
	event := new(AutonityUpgradeTestNewEpoch)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "NewEpoch", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestNewSchedule represents a NewSchedule event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestNewSchedule struct {
	ScheduleVault common.Address
	Amount        *big.Int
	Start         *big.Int
	TotalDuration *big.Int
	Raw           types.Log // Blockchain specific contextual infos
}

// FilterNewSchedule is a free log retrieval operation binding the contract event 0xe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd.
//
// Solidity: event NewSchedule(address indexed scheduleVault, uint256 amount, uint256 start, uint256 totalDuration)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterNewSchedule(opts *bind.FilterOpts, scheduleVault []common.Address) (*AutonityUpgradeTestNewScheduleIterator, error) {

	var scheduleVaultRule []interface{}
	for _, scheduleVaultItem := range scheduleVault {
		scheduleVaultRule = append(scheduleVaultRule, scheduleVaultItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "NewSchedule", scheduleVaultRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestNewScheduleIterator{contract: _AutonityUpgradeTest.contract, event: "NewSchedule", logs: logs, sub: sub}, nil
}

// WatchNewSchedule is a free log subscription operation binding the contract event 0xe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd.
//
// Solidity: event NewSchedule(address indexed scheduleVault, uint256 amount, uint256 start, uint256 totalDuration)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchNewSchedule(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestNewSchedule, scheduleVault []common.Address) (event.Subscription, error) {

	var scheduleVaultRule []interface{}
	for _, scheduleVaultItem := range scheduleVault {
		scheduleVaultRule = append(scheduleVaultRule, scheduleVaultItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "NewSchedule", scheduleVaultRule)
	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(AutonityUpgradeTestNewSchedule)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "NewSchedule", 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
}

// ParseNewSchedule is a log parse operation binding the contract event 0xe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd.
//
// Solidity: event NewSchedule(address indexed scheduleVault, uint256 amount, uint256 start, uint256 totalDuration)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseNewSchedule(log types.Log) (*AutonityUpgradeTestNewSchedule, error) {
	event := new(AutonityUpgradeTestNewSchedule)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "NewSchedule", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestNewUnbondingRequest represents a NewUnbondingRequest event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestNewUnbondingRequest struct {
	Validator       common.Address
	Delegator       common.Address
	Caller          common.Address
	SelfBonded      bool
	Amount          *big.Int
	HeadUnbondingID *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterNewUnbondingRequest is a free log retrieval operation binding the contract event 0x58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c.
//
// Solidity: event NewUnbondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headUnbondingID)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterNewUnbondingRequest(opts *bind.FilterOpts, validator []common.Address, delegator []common.Address, caller []common.Address) (*AutonityUpgradeTestNewUnbondingRequestIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "NewUnbondingRequest", validatorRule, delegatorRule, callerRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestNewUnbondingRequestIterator{contract: _AutonityUpgradeTest.contract, event: "NewUnbondingRequest", logs: logs, sub: sub}, nil
}

// WatchNewUnbondingRequest is a free log subscription operation binding the contract event 0x58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c.
//
// Solidity: event NewUnbondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headUnbondingID)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchNewUnbondingRequest(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestNewUnbondingRequest, validator []common.Address, delegator []common.Address, caller []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "NewUnbondingRequest", validatorRule, delegatorRule, callerRule)
	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(AutonityUpgradeTestNewUnbondingRequest)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "NewUnbondingRequest", 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
}

// ParseNewUnbondingRequest is a log parse operation binding the contract event 0x58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c.
//
// Solidity: event NewUnbondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headUnbondingID)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseNewUnbondingRequest(log types.Log) (*AutonityUpgradeTestNewUnbondingRequest, error) {
	event := new(AutonityUpgradeTestNewUnbondingRequest)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "NewUnbondingRequest", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestPausedValidator represents a PausedValidator event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestPausedValidator struct {
	Treasury       common.Address
	Addr           common.Address
	EffectiveBlock *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterPausedValidator is a free log retrieval operation binding the contract event 0x75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c.
//
// Solidity: event PausedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterPausedValidator(opts *bind.FilterOpts, treasury []common.Address, addr []common.Address) (*AutonityUpgradeTestPausedValidatorIterator, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "PausedValidator", treasuryRule, addrRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestPausedValidatorIterator{contract: _AutonityUpgradeTest.contract, event: "PausedValidator", logs: logs, sub: sub}, nil
}

// WatchPausedValidator is a free log subscription operation binding the contract event 0x75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c.
//
// Solidity: event PausedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchPausedValidator(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestPausedValidator, treasury []common.Address, addr []common.Address) (event.Subscription, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "PausedValidator", treasuryRule, addrRule)
	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(AutonityUpgradeTestPausedValidator)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "PausedValidator", 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
}

// ParsePausedValidator is a log parse operation binding the contract event 0x75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c.
//
// Solidity: event PausedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParsePausedValidator(log types.Log) (*AutonityUpgradeTestPausedValidator, error) {
	event := new(AutonityUpgradeTestPausedValidator)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "PausedValidator", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestRegisteredValidator represents a RegisteredValidator event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestRegisteredValidator struct {
	Treasury            common.Address
	Addr                common.Address
	OracleAddress       common.Address
	Enode               string
	LiquidStateContract common.Address
	Raw                 types.Log // Blockchain specific contextual infos
}

// FilterRegisteredValidator is a free log retrieval operation binding the contract event 0x8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c.
//
// Solidity: event RegisteredValidator(address treasury, address addr, address oracleAddress, string enode, address liquidStateContract)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterRegisteredValidator(opts *bind.FilterOpts) (*AutonityUpgradeTestRegisteredValidatorIterator, error) {

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "RegisteredValidator")
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestRegisteredValidatorIterator{contract: _AutonityUpgradeTest.contract, event: "RegisteredValidator", logs: logs, sub: sub}, nil
}

// WatchRegisteredValidator is a free log subscription operation binding the contract event 0x8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c.
//
// Solidity: event RegisteredValidator(address treasury, address addr, address oracleAddress, string enode, address liquidStateContract)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchRegisteredValidator(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestRegisteredValidator) (event.Subscription, error) {

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

// ParseRegisteredValidator is a log parse operation binding the contract event 0x8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c.
//
// Solidity: event RegisteredValidator(address treasury, address addr, address oracleAddress, string enode, address liquidStateContract)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseRegisteredValidator(log types.Log) (*AutonityUpgradeTestRegisteredValidator, error) {
	event := new(AutonityUpgradeTestRegisteredValidator)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "RegisteredValidator", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestRewarded represents a Rewarded event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestRewarded struct {
	Addr               common.Address
	AtnSelfAmount      *big.Int
	AtnDelegatedAmount *big.Int
	NtnSelfAmount      *big.Int
	NtnDelegatedAmount *big.Int
	Raw                types.Log // Blockchain specific contextual infos
}

// FilterRewarded is a free log retrieval operation binding the contract event 0x5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d5.
//
// Solidity: event Rewarded(address indexed addr, uint256 atnSelfAmount, uint256 atnDelegatedAmount, uint256 ntnSelfAmount, uint256 ntnDelegatedAmount)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterRewarded(opts *bind.FilterOpts, addr []common.Address) (*AutonityUpgradeTestRewardedIterator, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "Rewarded", addrRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestRewardedIterator{contract: _AutonityUpgradeTest.contract, event: "Rewarded", logs: logs, sub: sub}, nil
}

// WatchRewarded is a free log subscription operation binding the contract event 0x5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d5.
//
// Solidity: event Rewarded(address indexed addr, uint256 atnSelfAmount, uint256 atnDelegatedAmount, uint256 ntnSelfAmount, uint256 ntnDelegatedAmount)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchRewarded(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestRewarded, addr []common.Address) (event.Subscription, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "Rewarded", addrRule)
	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(AutonityUpgradeTestRewarded)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "Rewarded", 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
}

// ParseRewarded is a log parse operation binding the contract event 0x5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d5.
//
// Solidity: event Rewarded(address indexed addr, uint256 atnSelfAmount, uint256 atnDelegatedAmount, uint256 ntnSelfAmount, uint256 ntnDelegatedAmount)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseRewarded(log types.Log) (*AutonityUpgradeTestRewarded, error) {
	event := new(AutonityUpgradeTestRewarded)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "Rewarded", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// AutonityUpgradeTestTransfer represents a Transfer event raised by the AutonityUpgradeTest contract.
type AutonityUpgradeTestTransfer struct {
	From  common.Address
	To    common.Address
	Value *big.Int
	Raw   types.Log // Blockchain specific contextual infos
}

// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*AutonityUpgradeTestTransferIterator, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
	if err != nil {
		return nil, err
	}
	return &AutonityUpgradeTestTransferIterator{contract: _AutonityUpgradeTest.contract, event: "Transfer", logs: logs, sub: sub}, nil
}

// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *AutonityUpgradeTestTransfer, from []common.Address, to []common.Address) (event.Subscription, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _AutonityUpgradeTest.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
	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(AutonityUpgradeTestTransfer)
				if err := _AutonityUpgradeTest.contract.UnpackLog(event, "Transfer", 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
}

// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_AutonityUpgradeTest *AutonityUpgradeTestFilterer) ParseTransfer(log types.Log) (*AutonityUpgradeTestTransfer, error) {
	event := new(AutonityUpgradeTestTransfer)
	if err := _AutonityUpgradeTest.contract.UnpackLog(event, "Transfer", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// BytesLibMetaData contains all meta data concerning the BytesLib contract.
var BytesLibMetaData = &bind.MetaData{
	ABI: "[]",
	Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ed27de5cdd3f0853edb71a92b98eeeea2a724e1c3fd6b2963372d9b17485b10b64736f6c634300081e0033",
}

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

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

// DeployBytesLib deploys a new Ethereum contract, binding an instance of BytesLib to it.
func DeployBytesLib(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *BytesLib, error) {
	parsed, err := BytesLibMetaData.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(BytesLibBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &BytesLib{BytesLibCaller: BytesLibCaller{contract: contract}, BytesLibTransactor: BytesLibTransactor{contract: contract}, BytesLibFilterer: BytesLibFilterer{contract: contract}}, nil
}

// BytesLib is an auto generated Go binding around an Ethereum contract.
type BytesLib struct {
	BytesLibCaller     // Read-only binding to the contract
	BytesLibTransactor // Write-only binding to the contract
	BytesLibFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewBytesLib creates a new instance of BytesLib, bound to a specific deployed contract.
func NewBytesLib(address common.Address, backend bind.ContractBackend) (*BytesLib, error) {
	contract, err := bindBytesLib(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &BytesLib{BytesLibCaller: BytesLibCaller{contract: contract}, BytesLibTransactor: BytesLibTransactor{contract: contract}, BytesLibFilterer: BytesLibFilterer{contract: contract}}, nil
}

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

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

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

// bindBytesLib binds a generic wrapper to an already deployed contract.
func bindBytesLib(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(BytesLibABI))
	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 (_BytesLib *BytesLibRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _BytesLib.Contract.BytesLibCaller.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 (_BytesLib *BytesLibRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _BytesLib.Contract.BytesLibTransactor.contract.Transfer(opts)
}

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

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

// DelegateCallerMetaData contains all meta data concerning the DelegateCaller contract.
var DelegateCallerMetaData = &bind.MetaData{
	ABI: "[]",
	Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d2d11c4ff5b9de25aad9f04ed85fe8178f9e6505305a78872fc572b66feac58864736f6c634300081e0033",
}

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

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

// DeployDelegateCaller deploys a new Ethereum contract, binding an instance of DelegateCaller to it.
func DeployDelegateCaller(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *DelegateCaller, error) {
	parsed, err := DelegateCallerMetaData.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(DelegateCallerBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &DelegateCaller{DelegateCallerCaller: DelegateCallerCaller{contract: contract}, DelegateCallerTransactor: DelegateCallerTransactor{contract: contract}, DelegateCallerFilterer: DelegateCallerFilterer{contract: contract}}, nil
}

// DelegateCaller is an auto generated Go binding around an Ethereum contract.
type DelegateCaller struct {
	DelegateCallerCaller     // Read-only binding to the contract
	DelegateCallerTransactor // Write-only binding to the contract
	DelegateCallerFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewDelegateCaller creates a new instance of DelegateCaller, bound to a specific deployed contract.
func NewDelegateCaller(address common.Address, backend bind.ContractBackend) (*DelegateCaller, error) {
	contract, err := bindDelegateCaller(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &DelegateCaller{DelegateCallerCaller: DelegateCallerCaller{contract: contract}, DelegateCallerTransactor: DelegateCallerTransactor{contract: contract}, DelegateCallerFilterer: DelegateCallerFilterer{contract: contract}}, nil
}

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

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

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

// bindDelegateCaller binds a generic wrapper to an already deployed contract.
func bindDelegateCaller(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(DelegateCallerABI))
	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 (_DelegateCaller *DelegateCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _DelegateCaller.Contract.DelegateCallerCaller.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 (_DelegateCaller *DelegateCallerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _DelegateCaller.Contract.DelegateCallerTransactor.contract.Transfer(opts)
}

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

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

// DummyContractMetaData contains all meta data concerning the DummyContract contract.
var DummyContractMetaData = &bind.MetaData{
	ABI: "[]",
	Bin: "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220f73475b3eb2418b2c5519fdba466c4e39e5aa4fb31338ccae4c329057831690b64736f6c634300081e0033",
}

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

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

// DeployDummyContract deploys a new Ethereum contract, binding an instance of DummyContract to it.
func DeployDummyContract(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *DummyContract, error) {
	parsed, err := DummyContractMetaData.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(DummyContractBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &DummyContract{DummyContractCaller: DummyContractCaller{contract: contract}, DummyContractTransactor: DummyContractTransactor{contract: contract}, DummyContractFilterer: DummyContractFilterer{contract: contract}}, nil
}

// DummyContract is an auto generated Go binding around an Ethereum contract.
type DummyContract struct {
	DummyContractCaller     // Read-only binding to the contract
	DummyContractTransactor // Write-only binding to the contract
	DummyContractFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewDummyContract creates a new instance of DummyContract, bound to a specific deployed contract.
func NewDummyContract(address common.Address, backend bind.ContractBackend) (*DummyContract, error) {
	contract, err := bindDummyContract(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &DummyContract{DummyContractCaller: DummyContractCaller{contract: contract}, DummyContractTransactor: DummyContractTransactor{contract: contract}, DummyContractFilterer: DummyContractFilterer{contract: contract}}, nil
}

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

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

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

// bindDummyContract binds a generic wrapper to an already deployed contract.
func bindDummyContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(DummyContractABI))
	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 (_DummyContract *DummyContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _DummyContract.Contract.DummyContractCaller.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 (_DummyContract *DummyContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _DummyContract.Contract.DummyContractTransactor.contract.Transfer(opts)
}

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

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

// DummyMaliciousContractMetaData contains all meta data concerning the DummyMaliciousContract contract.
var DummyMaliciousContractMetaData = &bind.MetaData{
	ABI: "[{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
	Bin: "0x6080604052348015600f57600080fd5b50607b80601d6000396000f3fe608060405236601a5760005b80601381601f565b915050600b565b600080fd5b600060018201603e57634e487b7160e01b600052601160045260246000fd5b506001019056fea26469706673582212207e2fa7d8be83bfc13e165f740d007da7df1c784757ad765a885bf8704fc703af64736f6c634300081e0033",
}

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

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

// DeployDummyMaliciousContract deploys a new Ethereum contract, binding an instance of DummyMaliciousContract to it.
func DeployDummyMaliciousContract(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *DummyMaliciousContract, error) {
	parsed, err := DummyMaliciousContractMetaData.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(DummyMaliciousContractBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &DummyMaliciousContract{DummyMaliciousContractCaller: DummyMaliciousContractCaller{contract: contract}, DummyMaliciousContractTransactor: DummyMaliciousContractTransactor{contract: contract}, DummyMaliciousContractFilterer: DummyMaliciousContractFilterer{contract: contract}}, nil
}

// DummyMaliciousContract is an auto generated Go binding around an Ethereum contract.
type DummyMaliciousContract struct {
	DummyMaliciousContractCaller     // Read-only binding to the contract
	DummyMaliciousContractTransactor // Write-only binding to the contract
	DummyMaliciousContractFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewDummyMaliciousContract creates a new instance of DummyMaliciousContract, bound to a specific deployed contract.
func NewDummyMaliciousContract(address common.Address, backend bind.ContractBackend) (*DummyMaliciousContract, error) {
	contract, err := bindDummyMaliciousContract(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &DummyMaliciousContract{DummyMaliciousContractCaller: DummyMaliciousContractCaller{contract: contract}, DummyMaliciousContractTransactor: DummyMaliciousContractTransactor{contract: contract}, DummyMaliciousContractFilterer: DummyMaliciousContractFilterer{contract: contract}}, nil
}

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

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

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

// bindDummyMaliciousContract binds a generic wrapper to an already deployed contract.
func bindDummyMaliciousContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(DummyMaliciousContractABI))
	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 (_DummyMaliciousContract *DummyMaliciousContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _DummyMaliciousContract.Contract.DummyMaliciousContractCaller.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 (_DummyMaliciousContract *DummyMaliciousContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _DummyMaliciousContract.Contract.DummyMaliciousContractTransactor.contract.Transfer(opts)
}

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

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

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_DummyMaliciousContract *DummyMaliciousContractTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _DummyMaliciousContract.contract.RawTransact(opts, nil) // calldata is disallowed for receive function
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_DummyMaliciousContract *DummyMaliciousContractSession) Receive() (*types.Transaction, error) {
	return _DummyMaliciousContract.Contract.Receive(&_DummyMaliciousContract.TransactOpts)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_DummyMaliciousContract *DummyMaliciousContractTransactorSession) Receive() (*types.Transaction, error) {
	return _DummyMaliciousContract.Contract.Receive(&_DummyMaliciousContract.TransactOpts)
}

// EnumerableSetMetaData contains all meta data concerning the EnumerableSet contract.
var EnumerableSetMetaData = &bind.MetaData{
	ABI: "[]",
	Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220760ddf5eef92ff36dc91f6e45303ca0c5ce29ae9aeaf40e354b37b558689cf0c64736f6c634300081e0033",
}

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

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

// DeployEnumerableSet deploys a new Ethereum contract, binding an instance of EnumerableSet to it.
func DeployEnumerableSet(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *EnumerableSet, error) {
	parsed, err := EnumerableSetMetaData.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(EnumerableSetBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &EnumerableSet{EnumerableSetCaller: EnumerableSetCaller{contract: contract}, EnumerableSetTransactor: EnumerableSetTransactor{contract: contract}, EnumerableSetFilterer: EnumerableSetFilterer{contract: contract}}, nil
}

// EnumerableSet is an auto generated Go binding around an Ethereum contract.
type EnumerableSet struct {
	EnumerableSetCaller     // Read-only binding to the contract
	EnumerableSetTransactor // Write-only binding to the contract
	EnumerableSetFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewEnumerableSet creates a new instance of EnumerableSet, bound to a specific deployed contract.
func NewEnumerableSet(address common.Address, backend bind.ContractBackend) (*EnumerableSet, error) {
	contract, err := bindEnumerableSet(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &EnumerableSet{EnumerableSetCaller: EnumerableSetCaller{contract: contract}, EnumerableSetTransactor: EnumerableSetTransactor{contract: contract}, EnumerableSetFilterer: EnumerableSetFilterer{contract: contract}}, nil
}

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

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

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

// bindEnumerableSet binds a generic wrapper to an already deployed contract.
func bindEnumerableSet(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(EnumerableSetABI))
	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 (_EnumerableSet *EnumerableSetRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _EnumerableSet.Contract.EnumerableSetCaller.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 (_EnumerableSet *EnumerableSetRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _EnumerableSet.Contract.EnumerableSetTransactor.contract.Transfer(opts)
}

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

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

// HelpersMetaData contains all meta data concerning the Helpers contract.
var HelpersMetaData = &bind.MetaData{
	ABI: "[]",
	Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209900e98fb013d89c2655d20c11102ea50af1ec835de291f768d6011be1dee53a64736f6c634300081e0033",
}

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

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

// DeployHelpers deploys a new Ethereum contract, binding an instance of Helpers to it.
func DeployHelpers(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Helpers, error) {
	parsed, err := HelpersMetaData.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(HelpersBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Helpers{HelpersCaller: HelpersCaller{contract: contract}, HelpersTransactor: HelpersTransactor{contract: contract}, HelpersFilterer: HelpersFilterer{contract: contract}}, nil
}

// Helpers is an auto generated Go binding around an Ethereum contract.
type Helpers struct {
	HelpersCaller     // Read-only binding to the contract
	HelpersTransactor // Write-only binding to the contract
	HelpersFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewHelpers creates a new instance of Helpers, bound to a specific deployed contract.
func NewHelpers(address common.Address, backend bind.ContractBackend) (*Helpers, error) {
	contract, err := bindHelpers(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Helpers{HelpersCaller: HelpersCaller{contract: contract}, HelpersTransactor: HelpersTransactor{contract: contract}, HelpersFilterer: HelpersFilterer{contract: contract}}, nil
}

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

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

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

// bindHelpers binds a generic wrapper to an already deployed contract.
func bindHelpers(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(HelpersABI))
	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 (_Helpers *HelpersRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Helpers.Contract.HelpersCaller.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 (_Helpers *HelpersRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Helpers.Contract.HelpersTransactor.contract.Transfer(opts)
}

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

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

// IACUMetaData contains all meta data concerning the IACU contract.
var IACUMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[],\"name\":\"getScaleFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"update\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"7f5e2f11": "getScaleFactor()",
		"b3ab15fb": "setOperator(address)",
		"7adbf973": "setOracle(address)",
		"a2e62045": "update()",
		"3fa4f245": "value()",
	},
}

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

// Deprecated: Use IACUMetaData.Sigs instead.
// IACUFuncSigs maps the 4-byte function signature to its string representation.
var IACUFuncSigs = IACUMetaData.Sigs

// IACU is an auto generated Go binding around an Ethereum contract.
type IACU struct {
	IACUCaller     // Read-only binding to the contract
	IACUTransactor // Write-only binding to the contract
	IACUFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewIACU creates a new instance of IACU, bound to a specific deployed contract.
func NewIACU(address common.Address, backend bind.ContractBackend) (*IACU, error) {
	contract, err := bindIACU(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IACU{IACUCaller: IACUCaller{contract: contract}, IACUTransactor: IACUTransactor{contract: contract}, IACUFilterer: IACUFilterer{contract: contract}}, nil
}

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

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

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

// bindIACU binds a generic wrapper to an already deployed contract.
func bindIACU(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IACUABI))
	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 (_IACU *IACURaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IACU.Contract.IACUCaller.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 (_IACU *IACURaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IACU.Contract.IACUTransactor.contract.Transfer(opts)
}

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

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

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

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

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

	return out0, err

}

// GetScaleFactor is a free data retrieval call binding the contract method 0x7f5e2f11.
//
// Solidity: function getScaleFactor() view returns(uint256)
func (_IACU *IACUSession) GetScaleFactor() (*big.Int, error) {
	return _IACU.Contract.GetScaleFactor(&_IACU.CallOpts)
}

// GetScaleFactor is a free data retrieval call binding the contract method 0x7f5e2f11.
//
// Solidity: function getScaleFactor() view returns(uint256)
func (_IACU *IACUCallerSession) GetScaleFactor() (*big.Int, error) {
	return _IACU.Contract.GetScaleFactor(&_IACU.CallOpts)
}

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

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

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

	return out0, err

}

// Value is a free data retrieval call binding the contract method 0x3fa4f245.
//
// Solidity: function value() view returns(uint256)
func (_IACU *IACUSession) Value() (*big.Int, error) {
	return _IACU.Contract.Value(&_IACU.CallOpts)
}

// Value is a free data retrieval call binding the contract method 0x3fa4f245.
//
// Solidity: function value() view returns(uint256)
func (_IACU *IACUCallerSession) Value() (*big.Int, error) {
	return _IACU.Contract.Value(&_IACU.CallOpts)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_IACU *IACUTransactor) SetOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
	return _IACU.contract.Transact(opts, "setOperator", operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_IACU *IACUSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _IACU.Contract.SetOperator(&_IACU.TransactOpts, operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_IACU *IACUTransactorSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _IACU.Contract.SetOperator(&_IACU.TransactOpts, operator)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_IACU *IACUTransactor) SetOracle(opts *bind.TransactOpts, oracle common.Address) (*types.Transaction, error) {
	return _IACU.contract.Transact(opts, "setOracle", oracle)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_IACU *IACUSession) SetOracle(oracle common.Address) (*types.Transaction, error) {
	return _IACU.Contract.SetOracle(&_IACU.TransactOpts, oracle)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_IACU *IACUTransactorSession) SetOracle(oracle common.Address) (*types.Transaction, error) {
	return _IACU.Contract.SetOracle(&_IACU.TransactOpts, oracle)
}

// Update is a paid mutator transaction binding the contract method 0xa2e62045.
//
// Solidity: function update() returns(bool status)
func (_IACU *IACUTransactor) Update(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IACU.contract.Transact(opts, "update")
}

// Update is a paid mutator transaction binding the contract method 0xa2e62045.
//
// Solidity: function update() returns(bool status)
func (_IACU *IACUSession) Update() (*types.Transaction, error) {
	return _IACU.Contract.Update(&_IACU.TransactOpts)
}

// Update is a paid mutator transaction binding the contract method 0xa2e62045.
//
// Solidity: function update() returns(bool status)
func (_IACU *IACUTransactorSession) Update() (*types.Transaction, error) {
	return _IACU.Contract.Update(&_IACU.TransactOpts)
}

// IAccountabilityMetaData contains all meta data concerning the IAccountability contract.
var IAccountabilityMetaData = &bind.MetaData{
	ABI: "[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.Factors\",\"name\":\"oldFactors\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.Factors\",\"name\":\"newFactors\",\"type\":\"tuple\"}],\"name\":\"AccountabilityFactorsUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"oldRates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"newRates\",\"type\":\"tuple\"}],\"name\":\"BaseSlashingRateUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"InnocenceProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"NewAccusation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_severity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"NewFaultProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_reporter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_offender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_atnReward\",\"type\":\"uint256\"}],\"name\":\"ReporterRewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"}],\"name\":\"SlashingEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnd\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"innocenceProofSubmissionWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"range\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"low\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"high\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.BaseSlashingRates\",\"name\":\"baseSlashingRates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"collusion\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"history\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jail\",\"type\":\"uint256\"}],\"internalType\":\"structIAccountability.Factors\",\"name\":\"factors\",\"type\":\"tuple\"}],\"internalType\":\"structIAccountability.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGracePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_committee\",\"type\":\"address[]\"}],\"name\":\"setCommittee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"a8031a1d": "distributeRewards(address,uint256)",
		"6c9789b0": "finalize(bool)",
		"c3f909d4": "getConfig()",
		"dbd18388": "getGracePeriod()",
		"e08b14ed": "setCommittee(address[])",
	},
}

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

// Deprecated: Use IAccountabilityMetaData.Sigs instead.
// IAccountabilityFuncSigs maps the 4-byte function signature to its string representation.
var IAccountabilityFuncSigs = IAccountabilityMetaData.Sigs

// IAccountability is an auto generated Go binding around an Ethereum contract.
type IAccountability struct {
	IAccountabilityCaller     // Read-only binding to the contract
	IAccountabilityTransactor // Write-only binding to the contract
	IAccountabilityFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

// IAccountabilityRaw is an auto generated low-level Go binding around an Ethereum contract.
type IAccountabilityRaw struct {
	Contract *IAccountability // Generic contract binding to access the raw methods on
}

// IAccountabilityCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IAccountabilityCallerRaw struct {
	Contract *IAccountabilityCaller // Generic read-only contract binding to access the raw methods on
}

// IAccountabilityTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IAccountabilityTransactorRaw struct {
	Contract *IAccountabilityTransactor // Generic write-only contract binding to access the raw methods on
}

// NewIAccountability creates a new instance of IAccountability, bound to a specific deployed contract.
func NewIAccountability(address common.Address, backend bind.ContractBackend) (*IAccountability, error) {
	contract, err := bindIAccountability(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IAccountability{IAccountabilityCaller: IAccountabilityCaller{contract: contract}, IAccountabilityTransactor: IAccountabilityTransactor{contract: contract}, IAccountabilityFilterer: IAccountabilityFilterer{contract: contract}}, nil
}

// NewIAccountabilityCaller creates a new read-only instance of IAccountability, bound to a specific deployed contract.
func NewIAccountabilityCaller(address common.Address, caller bind.ContractCaller) (*IAccountabilityCaller, error) {
	contract, err := bindIAccountability(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IAccountabilityCaller{contract: contract}, nil
}

// NewIAccountabilityTransactor creates a new write-only instance of IAccountability, bound to a specific deployed contract.
func NewIAccountabilityTransactor(address common.Address, transactor bind.ContractTransactor) (*IAccountabilityTransactor, error) {
	contract, err := bindIAccountability(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IAccountabilityTransactor{contract: contract}, nil
}

// NewIAccountabilityFilterer creates a new log filterer instance of IAccountability, bound to a specific deployed contract.
func NewIAccountabilityFilterer(address common.Address, filterer bind.ContractFilterer) (*IAccountabilityFilterer, error) {
	contract, err := bindIAccountability(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IAccountabilityFilterer{contract: contract}, nil
}

// bindIAccountability binds a generic wrapper to an already deployed contract.
func bindIAccountability(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IAccountabilityABI))
	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 (_IAccountability *IAccountabilityRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IAccountability.Contract.IAccountabilityCaller.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 (_IAccountability *IAccountabilityRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IAccountability.Contract.IAccountabilityTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IAccountability *IAccountabilityRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IAccountability.Contract.IAccountabilityTransactor.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 (_IAccountability *IAccountabilityCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IAccountability.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 (_IAccountability *IAccountabilityTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IAccountability.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IAccountability *IAccountabilityTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IAccountability.Contract.contract.Transact(opts, method, params...)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256)))
func (_IAccountability *IAccountabilityCaller) GetConfig(opts *bind.CallOpts) (IAccountabilityConfig, error) {
	var out []interface{}
	err := _IAccountability.contract.Call(opts, &out, "getConfig")

	if err != nil {
		return *new(IAccountabilityConfig), err
	}

	out0 := *abi.ConvertType(out[0], new(IAccountabilityConfig)).(*IAccountabilityConfig)

	return out0, err

}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256)))
func (_IAccountability *IAccountabilitySession) GetConfig() (IAccountabilityConfig, error) {
	return _IAccountability.Contract.GetConfig(&_IAccountability.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256)))
func (_IAccountability *IAccountabilityCallerSession) GetConfig() (IAccountabilityConfig, error) {
	return _IAccountability.Contract.GetConfig(&_IAccountability.CallOpts)
}

// GetGracePeriod is a free data retrieval call binding the contract method 0xdbd18388.
//
// Solidity: function getGracePeriod() view returns(uint256)
func (_IAccountability *IAccountabilityCaller) GetGracePeriod(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAccountability.contract.Call(opts, &out, "getGracePeriod")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetGracePeriod is a free data retrieval call binding the contract method 0xdbd18388.
//
// Solidity: function getGracePeriod() view returns(uint256)
func (_IAccountability *IAccountabilitySession) GetGracePeriod() (*big.Int, error) {
	return _IAccountability.Contract.GetGracePeriod(&_IAccountability.CallOpts)
}

// GetGracePeriod is a free data retrieval call binding the contract method 0xdbd18388.
//
// Solidity: function getGracePeriod() view returns(uint256)
func (_IAccountability *IAccountabilityCallerSession) GetGracePeriod() (*big.Int, error) {
	return _IAccountability.Contract.GetGracePeriod(&_IAccountability.CallOpts)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d.
//
// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns()
func (_IAccountability *IAccountabilityTransactor) DistributeRewards(opts *bind.TransactOpts, _validator common.Address, _ntnReward *big.Int) (*types.Transaction, error) {
	return _IAccountability.contract.Transact(opts, "distributeRewards", _validator, _ntnReward)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d.
//
// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns()
func (_IAccountability *IAccountabilitySession) DistributeRewards(_validator common.Address, _ntnReward *big.Int) (*types.Transaction, error) {
	return _IAccountability.Contract.DistributeRewards(&_IAccountability.TransactOpts, _validator, _ntnReward)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0xa8031a1d.
//
// Solidity: function distributeRewards(address _validator, uint256 _ntnReward) payable returns()
func (_IAccountability *IAccountabilityTransactorSession) DistributeRewards(_validator common.Address, _ntnReward *big.Int) (*types.Transaction, error) {
	return _IAccountability.Contract.DistributeRewards(&_IAccountability.TransactOpts, _validator, _ntnReward)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnd) returns(uint256, uint256, uint256)
func (_IAccountability *IAccountabilityTransactor) Finalize(opts *bind.TransactOpts, _epochEnd bool) (*types.Transaction, error) {
	return _IAccountability.contract.Transact(opts, "finalize", _epochEnd)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnd) returns(uint256, uint256, uint256)
func (_IAccountability *IAccountabilitySession) Finalize(_epochEnd bool) (*types.Transaction, error) {
	return _IAccountability.Contract.Finalize(&_IAccountability.TransactOpts, _epochEnd)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnd) returns(uint256, uint256, uint256)
func (_IAccountability *IAccountabilityTransactorSession) Finalize(_epochEnd bool) (*types.Transaction, error) {
	return _IAccountability.Contract.Finalize(&_IAccountability.TransactOpts, _epochEnd)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe08b14ed.
//
// Solidity: function setCommittee(address[] _committee) returns()
func (_IAccountability *IAccountabilityTransactor) SetCommittee(opts *bind.TransactOpts, _committee []common.Address) (*types.Transaction, error) {
	return _IAccountability.contract.Transact(opts, "setCommittee", _committee)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe08b14ed.
//
// Solidity: function setCommittee(address[] _committee) returns()
func (_IAccountability *IAccountabilitySession) SetCommittee(_committee []common.Address) (*types.Transaction, error) {
	return _IAccountability.Contract.SetCommittee(&_IAccountability.TransactOpts, _committee)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe08b14ed.
//
// Solidity: function setCommittee(address[] _committee) returns()
func (_IAccountability *IAccountabilityTransactorSession) SetCommittee(_committee []common.Address) (*types.Transaction, error) {
	return _IAccountability.Contract.SetCommittee(&_IAccountability.TransactOpts, _committee)
}

// IAccountabilityAccountabilityFactorsUpdateIterator is returned from FilterAccountabilityFactorsUpdate and is used to iterate over the raw logs and unpacked data for AccountabilityFactorsUpdate events raised by the IAccountability contract.
type IAccountabilityAccountabilityFactorsUpdateIterator struct {
	Event *IAccountabilityAccountabilityFactorsUpdate // 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 *IAccountabilityAccountabilityFactorsUpdateIterator) 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(IAccountabilityAccountabilityFactorsUpdate)
			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(IAccountabilityAccountabilityFactorsUpdate)
		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 *IAccountabilityAccountabilityFactorsUpdateIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAccountabilityAccountabilityFactorsUpdateIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAccountabilityAccountabilityFactorsUpdate represents a AccountabilityFactorsUpdate event raised by the IAccountability contract.
type IAccountabilityAccountabilityFactorsUpdate struct {
	OldFactors IAccountabilityFactors
	NewFactors IAccountabilityFactors
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterAccountabilityFactorsUpdate is a free log retrieval operation binding the contract event 0xeda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f.
//
// Solidity: event AccountabilityFactorsUpdate((uint256,uint256,uint256) oldFactors, (uint256,uint256,uint256) newFactors)
func (_IAccountability *IAccountabilityFilterer) FilterAccountabilityFactorsUpdate(opts *bind.FilterOpts) (*IAccountabilityAccountabilityFactorsUpdateIterator, error) {

	logs, sub, err := _IAccountability.contract.FilterLogs(opts, "AccountabilityFactorsUpdate")
	if err != nil {
		return nil, err
	}
	return &IAccountabilityAccountabilityFactorsUpdateIterator{contract: _IAccountability.contract, event: "AccountabilityFactorsUpdate", logs: logs, sub: sub}, nil
}

// WatchAccountabilityFactorsUpdate is a free log subscription operation binding the contract event 0xeda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f.
//
// Solidity: event AccountabilityFactorsUpdate((uint256,uint256,uint256) oldFactors, (uint256,uint256,uint256) newFactors)
func (_IAccountability *IAccountabilityFilterer) WatchAccountabilityFactorsUpdate(opts *bind.WatchOpts, sink chan<- *IAccountabilityAccountabilityFactorsUpdate) (event.Subscription, error) {

	logs, sub, err := _IAccountability.contract.WatchLogs(opts, "AccountabilityFactorsUpdate")
	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(IAccountabilityAccountabilityFactorsUpdate)
				if err := _IAccountability.contract.UnpackLog(event, "AccountabilityFactorsUpdate", 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
}

// ParseAccountabilityFactorsUpdate is a log parse operation binding the contract event 0xeda1502b5625ce16270e5a5f5561c68dfecaef2c5eacc1cc9521fad59c34d82f.
//
// Solidity: event AccountabilityFactorsUpdate((uint256,uint256,uint256) oldFactors, (uint256,uint256,uint256) newFactors)
func (_IAccountability *IAccountabilityFilterer) ParseAccountabilityFactorsUpdate(log types.Log) (*IAccountabilityAccountabilityFactorsUpdate, error) {
	event := new(IAccountabilityAccountabilityFactorsUpdate)
	if err := _IAccountability.contract.UnpackLog(event, "AccountabilityFactorsUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAccountabilityBaseSlashingRateUpdateIterator is returned from FilterBaseSlashingRateUpdate and is used to iterate over the raw logs and unpacked data for BaseSlashingRateUpdate events raised by the IAccountability contract.
type IAccountabilityBaseSlashingRateUpdateIterator struct {
	Event *IAccountabilityBaseSlashingRateUpdate // 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 *IAccountabilityBaseSlashingRateUpdateIterator) 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(IAccountabilityBaseSlashingRateUpdate)
			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(IAccountabilityBaseSlashingRateUpdate)
		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 *IAccountabilityBaseSlashingRateUpdateIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAccountabilityBaseSlashingRateUpdateIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAccountabilityBaseSlashingRateUpdate represents a BaseSlashingRateUpdate event raised by the IAccountability contract.
type IAccountabilityBaseSlashingRateUpdate struct {
	OldRates IAccountabilityBaseSlashingRates
	NewRates IAccountabilityBaseSlashingRates
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterBaseSlashingRateUpdate is a free log retrieval operation binding the contract event 0x6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a.
//
// Solidity: event BaseSlashingRateUpdate((uint256,uint256,uint256) oldRates, (uint256,uint256,uint256) newRates)
func (_IAccountability *IAccountabilityFilterer) FilterBaseSlashingRateUpdate(opts *bind.FilterOpts) (*IAccountabilityBaseSlashingRateUpdateIterator, error) {

	logs, sub, err := _IAccountability.contract.FilterLogs(opts, "BaseSlashingRateUpdate")
	if err != nil {
		return nil, err
	}
	return &IAccountabilityBaseSlashingRateUpdateIterator{contract: _IAccountability.contract, event: "BaseSlashingRateUpdate", logs: logs, sub: sub}, nil
}

// WatchBaseSlashingRateUpdate is a free log subscription operation binding the contract event 0x6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a.
//
// Solidity: event BaseSlashingRateUpdate((uint256,uint256,uint256) oldRates, (uint256,uint256,uint256) newRates)
func (_IAccountability *IAccountabilityFilterer) WatchBaseSlashingRateUpdate(opts *bind.WatchOpts, sink chan<- *IAccountabilityBaseSlashingRateUpdate) (event.Subscription, error) {

	logs, sub, err := _IAccountability.contract.WatchLogs(opts, "BaseSlashingRateUpdate")
	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(IAccountabilityBaseSlashingRateUpdate)
				if err := _IAccountability.contract.UnpackLog(event, "BaseSlashingRateUpdate", 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
}

// ParseBaseSlashingRateUpdate is a log parse operation binding the contract event 0x6fea73568c60fe418d5e4d1a9fde6dce66d8816ffcebe91449e9bf1098a5ce1a.
//
// Solidity: event BaseSlashingRateUpdate((uint256,uint256,uint256) oldRates, (uint256,uint256,uint256) newRates)
func (_IAccountability *IAccountabilityFilterer) ParseBaseSlashingRateUpdate(log types.Log) (*IAccountabilityBaseSlashingRateUpdate, error) {
	event := new(IAccountabilityBaseSlashingRateUpdate)
	if err := _IAccountability.contract.UnpackLog(event, "BaseSlashingRateUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAccountabilityInnocenceProvenIterator is returned from FilterInnocenceProven and is used to iterate over the raw logs and unpacked data for InnocenceProven events raised by the IAccountability contract.
type IAccountabilityInnocenceProvenIterator struct {
	Event *IAccountabilityInnocenceProven // 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 *IAccountabilityInnocenceProvenIterator) 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(IAccountabilityInnocenceProven)
			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(IAccountabilityInnocenceProven)
		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 *IAccountabilityInnocenceProvenIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAccountabilityInnocenceProvenIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAccountabilityInnocenceProven represents a InnocenceProven event raised by the IAccountability contract.
type IAccountabilityInnocenceProven struct {
	Offender common.Address
	Id       *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterInnocenceProven is a free log retrieval operation binding the contract event 0x1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f.
//
// Solidity: event InnocenceProven(address indexed _offender, uint256 _id)
func (_IAccountability *IAccountabilityFilterer) FilterInnocenceProven(opts *bind.FilterOpts, _offender []common.Address) (*IAccountabilityInnocenceProvenIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _IAccountability.contract.FilterLogs(opts, "InnocenceProven", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &IAccountabilityInnocenceProvenIterator{contract: _IAccountability.contract, event: "InnocenceProven", logs: logs, sub: sub}, nil
}

// WatchInnocenceProven is a free log subscription operation binding the contract event 0x1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f.
//
// Solidity: event InnocenceProven(address indexed _offender, uint256 _id)
func (_IAccountability *IAccountabilityFilterer) WatchInnocenceProven(opts *bind.WatchOpts, sink chan<- *IAccountabilityInnocenceProven, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _IAccountability.contract.WatchLogs(opts, "InnocenceProven", _offenderRule)
	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(IAccountabilityInnocenceProven)
				if err := _IAccountability.contract.UnpackLog(event, "InnocenceProven", 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
}

// ParseInnocenceProven is a log parse operation binding the contract event 0x1fa96beb8dddcb7d4484dd00c4059e872439f7a474a2ecf49c430fc6e86c9e1f.
//
// Solidity: event InnocenceProven(address indexed _offender, uint256 _id)
func (_IAccountability *IAccountabilityFilterer) ParseInnocenceProven(log types.Log) (*IAccountabilityInnocenceProven, error) {
	event := new(IAccountabilityInnocenceProven)
	if err := _IAccountability.contract.UnpackLog(event, "InnocenceProven", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAccountabilityNewAccusationIterator is returned from FilterNewAccusation and is used to iterate over the raw logs and unpacked data for NewAccusation events raised by the IAccountability contract.
type IAccountabilityNewAccusationIterator struct {
	Event *IAccountabilityNewAccusation // 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 *IAccountabilityNewAccusationIterator) 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(IAccountabilityNewAccusation)
			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(IAccountabilityNewAccusation)
		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 *IAccountabilityNewAccusationIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAccountabilityNewAccusationIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAccountabilityNewAccusation represents a NewAccusation event raised by the IAccountability contract.
type IAccountabilityNewAccusation struct {
	Offender common.Address
	Severity *big.Int
	Id       *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterNewAccusation is a free log retrieval operation binding the contract event 0x2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351.
//
// Solidity: event NewAccusation(address indexed _offender, uint256 _severity, uint256 _id)
func (_IAccountability *IAccountabilityFilterer) FilterNewAccusation(opts *bind.FilterOpts, _offender []common.Address) (*IAccountabilityNewAccusationIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _IAccountability.contract.FilterLogs(opts, "NewAccusation", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &IAccountabilityNewAccusationIterator{contract: _IAccountability.contract, event: "NewAccusation", logs: logs, sub: sub}, nil
}

// WatchNewAccusation is a free log subscription operation binding the contract event 0x2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351.
//
// Solidity: event NewAccusation(address indexed _offender, uint256 _severity, uint256 _id)
func (_IAccountability *IAccountabilityFilterer) WatchNewAccusation(opts *bind.WatchOpts, sink chan<- *IAccountabilityNewAccusation, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _IAccountability.contract.WatchLogs(opts, "NewAccusation", _offenderRule)
	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(IAccountabilityNewAccusation)
				if err := _IAccountability.contract.UnpackLog(event, "NewAccusation", 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
}

// ParseNewAccusation is a log parse operation binding the contract event 0x2e8e354b41470731dafa7c3df150e9498a8d5b9c51ff0259fbf77f721ba40351.
//
// Solidity: event NewAccusation(address indexed _offender, uint256 _severity, uint256 _id)
func (_IAccountability *IAccountabilityFilterer) ParseNewAccusation(log types.Log) (*IAccountabilityNewAccusation, error) {
	event := new(IAccountabilityNewAccusation)
	if err := _IAccountability.contract.UnpackLog(event, "NewAccusation", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAccountabilityNewFaultProofIterator is returned from FilterNewFaultProof and is used to iterate over the raw logs and unpacked data for NewFaultProof events raised by the IAccountability contract.
type IAccountabilityNewFaultProofIterator struct {
	Event *IAccountabilityNewFaultProof // 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 *IAccountabilityNewFaultProofIterator) 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(IAccountabilityNewFaultProof)
			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(IAccountabilityNewFaultProof)
		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 *IAccountabilityNewFaultProofIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAccountabilityNewFaultProofIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAccountabilityNewFaultProof represents a NewFaultProof event raised by the IAccountability contract.
type IAccountabilityNewFaultProof struct {
	Offender common.Address
	Severity *big.Int
	Id       *big.Int
	Epoch    *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterNewFaultProof is a free log retrieval operation binding the contract event 0x5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7.
//
// Solidity: event NewFaultProof(address indexed _offender, uint256 _severity, uint256 _id, uint256 _epoch)
func (_IAccountability *IAccountabilityFilterer) FilterNewFaultProof(opts *bind.FilterOpts, _offender []common.Address) (*IAccountabilityNewFaultProofIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _IAccountability.contract.FilterLogs(opts, "NewFaultProof", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &IAccountabilityNewFaultProofIterator{contract: _IAccountability.contract, event: "NewFaultProof", logs: logs, sub: sub}, nil
}

// WatchNewFaultProof is a free log subscription operation binding the contract event 0x5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7.
//
// Solidity: event NewFaultProof(address indexed _offender, uint256 _severity, uint256 _id, uint256 _epoch)
func (_IAccountability *IAccountabilityFilterer) WatchNewFaultProof(opts *bind.WatchOpts, sink chan<- *IAccountabilityNewFaultProof, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _IAccountability.contract.WatchLogs(opts, "NewFaultProof", _offenderRule)
	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(IAccountabilityNewFaultProof)
				if err := _IAccountability.contract.UnpackLog(event, "NewFaultProof", 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
}

// ParseNewFaultProof is a log parse operation binding the contract event 0x5fd9605880705541b88eb5df56222ffa3c3e6884010fcf26d4c2c372917d98d7.
//
// Solidity: event NewFaultProof(address indexed _offender, uint256 _severity, uint256 _id, uint256 _epoch)
func (_IAccountability *IAccountabilityFilterer) ParseNewFaultProof(log types.Log) (*IAccountabilityNewFaultProof, error) {
	event := new(IAccountabilityNewFaultProof)
	if err := _IAccountability.contract.UnpackLog(event, "NewFaultProof", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAccountabilityReporterRewardedIterator is returned from FilterReporterRewarded and is used to iterate over the raw logs and unpacked data for ReporterRewarded events raised by the IAccountability contract.
type IAccountabilityReporterRewardedIterator struct {
	Event *IAccountabilityReporterRewarded // 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 *IAccountabilityReporterRewardedIterator) 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(IAccountabilityReporterRewarded)
			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(IAccountabilityReporterRewarded)
		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 *IAccountabilityReporterRewardedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAccountabilityReporterRewardedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAccountabilityReporterRewarded represents a ReporterRewarded event raised by the IAccountability contract.
type IAccountabilityReporterRewarded struct {
	Reporter  common.Address
	Offender  common.Address
	NtnReward *big.Int
	AtnReward *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterReporterRewarded is a free log retrieval operation binding the contract event 0xd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e9.
//
// Solidity: event ReporterRewarded(address _reporter, address indexed _offender, uint256 _ntnReward, uint256 _atnReward)
func (_IAccountability *IAccountabilityFilterer) FilterReporterRewarded(opts *bind.FilterOpts, _offender []common.Address) (*IAccountabilityReporterRewardedIterator, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _IAccountability.contract.FilterLogs(opts, "ReporterRewarded", _offenderRule)
	if err != nil {
		return nil, err
	}
	return &IAccountabilityReporterRewardedIterator{contract: _IAccountability.contract, event: "ReporterRewarded", logs: logs, sub: sub}, nil
}

// WatchReporterRewarded is a free log subscription operation binding the contract event 0xd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e9.
//
// Solidity: event ReporterRewarded(address _reporter, address indexed _offender, uint256 _ntnReward, uint256 _atnReward)
func (_IAccountability *IAccountabilityFilterer) WatchReporterRewarded(opts *bind.WatchOpts, sink chan<- *IAccountabilityReporterRewarded, _offender []common.Address) (event.Subscription, error) {

	var _offenderRule []interface{}
	for _, _offenderItem := range _offender {
		_offenderRule = append(_offenderRule, _offenderItem)
	}

	logs, sub, err := _IAccountability.contract.WatchLogs(opts, "ReporterRewarded", _offenderRule)
	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(IAccountabilityReporterRewarded)
				if err := _IAccountability.contract.UnpackLog(event, "ReporterRewarded", 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
}

// ParseReporterRewarded is a log parse operation binding the contract event 0xd7bd322f319b32cbf0c40184f51d4204b4e08b1c95ca79f470747483881840e9.
//
// Solidity: event ReporterRewarded(address _reporter, address indexed _offender, uint256 _ntnReward, uint256 _atnReward)
func (_IAccountability *IAccountabilityFilterer) ParseReporterRewarded(log types.Log) (*IAccountabilityReporterRewarded, error) {
	event := new(IAccountabilityReporterRewarded)
	if err := _IAccountability.contract.UnpackLog(event, "ReporterRewarded", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAccountabilitySlashingEventIterator is returned from FilterSlashingEvent and is used to iterate over the raw logs and unpacked data for SlashingEvent events raised by the IAccountability contract.
type IAccountabilitySlashingEventIterator struct {
	Event *IAccountabilitySlashingEvent // 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 *IAccountabilitySlashingEventIterator) 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(IAccountabilitySlashingEvent)
			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(IAccountabilitySlashingEvent)
		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 *IAccountabilitySlashingEventIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAccountabilitySlashingEventIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAccountabilitySlashingEvent represents a SlashingEvent event raised by the IAccountability contract.
type IAccountabilitySlashingEvent struct {
	Validator    common.Address
	Amount       *big.Int
	ReleaseBlock *big.Int
	IsJailbound  bool
	EventId      *big.Int
	Raw          types.Log // Blockchain specific contextual infos
}

// FilterSlashingEvent is a free log retrieval operation binding the contract event 0x6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9.
//
// Solidity: event SlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound, uint256 eventId)
func (_IAccountability *IAccountabilityFilterer) FilterSlashingEvent(opts *bind.FilterOpts) (*IAccountabilitySlashingEventIterator, error) {

	logs, sub, err := _IAccountability.contract.FilterLogs(opts, "SlashingEvent")
	if err != nil {
		return nil, err
	}
	return &IAccountabilitySlashingEventIterator{contract: _IAccountability.contract, event: "SlashingEvent", logs: logs, sub: sub}, nil
}

// WatchSlashingEvent is a free log subscription operation binding the contract event 0x6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9.
//
// Solidity: event SlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound, uint256 eventId)
func (_IAccountability *IAccountabilityFilterer) WatchSlashingEvent(opts *bind.WatchOpts, sink chan<- *IAccountabilitySlashingEvent) (event.Subscription, error) {

	logs, sub, err := _IAccountability.contract.WatchLogs(opts, "SlashingEvent")
	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(IAccountabilitySlashingEvent)
				if err := _IAccountability.contract.UnpackLog(event, "SlashingEvent", 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
}

// ParseSlashingEvent is a log parse operation binding the contract event 0x6617e612ea2d01b5a235997fa4963b56b1097df6f968a82972433e9ff852e0f9.
//
// Solidity: event SlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound, uint256 eventId)
func (_IAccountability *IAccountabilityFilterer) ParseSlashingEvent(log types.Log) (*IAccountabilitySlashingEvent, error) {
	event := new(IAccountabilitySlashingEvent)
	if err := _IAccountability.contract.UnpackLog(event, "SlashingEvent", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAuctioneerMetaData contains all meta data concerning the IAuctioneer contract.
var IAuctioneerMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[],\"name\":\"paidInterest\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stabilization\",\"type\":\"address\"}],\"name\":\"setStabilization\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"96e4547c": "paidInterest()",
		"b3ab15fb": "setOperator(address)",
		"7adbf973": "setOracle(address)",
		"4f505895": "setStabilization(address)",
	},
}

// IAuctioneerABI is the input ABI used to generate the binding from.
// Deprecated: Use IAuctioneerMetaData.ABI instead.
var IAuctioneerABI = IAuctioneerMetaData.ABI

// Deprecated: Use IAuctioneerMetaData.Sigs instead.
// IAuctioneerFuncSigs maps the 4-byte function signature to its string representation.
var IAuctioneerFuncSigs = IAuctioneerMetaData.Sigs

// IAuctioneer is an auto generated Go binding around an Ethereum contract.
type IAuctioneer struct {
	IAuctioneerCaller     // Read-only binding to the contract
	IAuctioneerTransactor // Write-only binding to the contract
	IAuctioneerFilterer   // Log filterer for contract events
}

// IAuctioneerCaller is an auto generated read-only Go binding around an Ethereum contract.
type IAuctioneerCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IAuctioneerTransactor is an auto generated write-only Go binding around an Ethereum contract.
type IAuctioneerTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IAuctioneerFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type IAuctioneerFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IAuctioneerSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type IAuctioneerSession struct {
	Contract     *IAuctioneer      // 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
}

// IAuctioneerCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type IAuctioneerCallerSession struct {
	Contract *IAuctioneerCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts      // Call options to use throughout this session
}

// IAuctioneerTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type IAuctioneerTransactorSession struct {
	Contract     *IAuctioneerTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
}

// IAuctioneerRaw is an auto generated low-level Go binding around an Ethereum contract.
type IAuctioneerRaw struct {
	Contract *IAuctioneer // Generic contract binding to access the raw methods on
}

// IAuctioneerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IAuctioneerCallerRaw struct {
	Contract *IAuctioneerCaller // Generic read-only contract binding to access the raw methods on
}

// IAuctioneerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IAuctioneerTransactorRaw struct {
	Contract *IAuctioneerTransactor // Generic write-only contract binding to access the raw methods on
}

// NewIAuctioneer creates a new instance of IAuctioneer, bound to a specific deployed contract.
func NewIAuctioneer(address common.Address, backend bind.ContractBackend) (*IAuctioneer, error) {
	contract, err := bindIAuctioneer(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IAuctioneer{IAuctioneerCaller: IAuctioneerCaller{contract: contract}, IAuctioneerTransactor: IAuctioneerTransactor{contract: contract}, IAuctioneerFilterer: IAuctioneerFilterer{contract: contract}}, nil
}

// NewIAuctioneerCaller creates a new read-only instance of IAuctioneer, bound to a specific deployed contract.
func NewIAuctioneerCaller(address common.Address, caller bind.ContractCaller) (*IAuctioneerCaller, error) {
	contract, err := bindIAuctioneer(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IAuctioneerCaller{contract: contract}, nil
}

// NewIAuctioneerTransactor creates a new write-only instance of IAuctioneer, bound to a specific deployed contract.
func NewIAuctioneerTransactor(address common.Address, transactor bind.ContractTransactor) (*IAuctioneerTransactor, error) {
	contract, err := bindIAuctioneer(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IAuctioneerTransactor{contract: contract}, nil
}

// NewIAuctioneerFilterer creates a new log filterer instance of IAuctioneer, bound to a specific deployed contract.
func NewIAuctioneerFilterer(address common.Address, filterer bind.ContractFilterer) (*IAuctioneerFilterer, error) {
	contract, err := bindIAuctioneer(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IAuctioneerFilterer{contract: contract}, nil
}

// bindIAuctioneer binds a generic wrapper to an already deployed contract.
func bindIAuctioneer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IAuctioneerABI))
	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 (_IAuctioneer *IAuctioneerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IAuctioneer.Contract.IAuctioneerCaller.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 (_IAuctioneer *IAuctioneerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IAuctioneer.Contract.IAuctioneerTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IAuctioneer *IAuctioneerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IAuctioneer.Contract.IAuctioneerTransactor.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 (_IAuctioneer *IAuctioneerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IAuctioneer.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 (_IAuctioneer *IAuctioneerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IAuctioneer.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IAuctioneer *IAuctioneerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IAuctioneer.Contract.contract.Transact(opts, method, params...)
}

// PaidInterest is a paid mutator transaction binding the contract method 0x96e4547c.
//
// Solidity: function paidInterest() payable returns()
func (_IAuctioneer *IAuctioneerTransactor) PaidInterest(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IAuctioneer.contract.Transact(opts, "paidInterest")
}

// PaidInterest is a paid mutator transaction binding the contract method 0x96e4547c.
//
// Solidity: function paidInterest() payable returns()
func (_IAuctioneer *IAuctioneerSession) PaidInterest() (*types.Transaction, error) {
	return _IAuctioneer.Contract.PaidInterest(&_IAuctioneer.TransactOpts)
}

// PaidInterest is a paid mutator transaction binding the contract method 0x96e4547c.
//
// Solidity: function paidInterest() payable returns()
func (_IAuctioneer *IAuctioneerTransactorSession) PaidInterest() (*types.Transaction, error) {
	return _IAuctioneer.Contract.PaidInterest(&_IAuctioneer.TransactOpts)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_IAuctioneer *IAuctioneerTransactor) SetOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
	return _IAuctioneer.contract.Transact(opts, "setOperator", operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_IAuctioneer *IAuctioneerSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _IAuctioneer.Contract.SetOperator(&_IAuctioneer.TransactOpts, operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_IAuctioneer *IAuctioneerTransactorSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _IAuctioneer.Contract.SetOperator(&_IAuctioneer.TransactOpts, operator)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_IAuctioneer *IAuctioneerTransactor) SetOracle(opts *bind.TransactOpts, oracle common.Address) (*types.Transaction, error) {
	return _IAuctioneer.contract.Transact(opts, "setOracle", oracle)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_IAuctioneer *IAuctioneerSession) SetOracle(oracle common.Address) (*types.Transaction, error) {
	return _IAuctioneer.Contract.SetOracle(&_IAuctioneer.TransactOpts, oracle)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_IAuctioneer *IAuctioneerTransactorSession) SetOracle(oracle common.Address) (*types.Transaction, error) {
	return _IAuctioneer.Contract.SetOracle(&_IAuctioneer.TransactOpts, oracle)
}

// SetStabilization is a paid mutator transaction binding the contract method 0x4f505895.
//
// Solidity: function setStabilization(address stabilization) returns()
func (_IAuctioneer *IAuctioneerTransactor) SetStabilization(opts *bind.TransactOpts, stabilization common.Address) (*types.Transaction, error) {
	return _IAuctioneer.contract.Transact(opts, "setStabilization", stabilization)
}

// SetStabilization is a paid mutator transaction binding the contract method 0x4f505895.
//
// Solidity: function setStabilization(address stabilization) returns()
func (_IAuctioneer *IAuctioneerSession) SetStabilization(stabilization common.Address) (*types.Transaction, error) {
	return _IAuctioneer.Contract.SetStabilization(&_IAuctioneer.TransactOpts, stabilization)
}

// SetStabilization is a paid mutator transaction binding the contract method 0x4f505895.
//
// Solidity: function setStabilization(address stabilization) returns()
func (_IAuctioneer *IAuctioneerTransactorSession) SetStabilization(stabilization common.Address) (*types.Transaction, error) {
	return _IAuctioneer.Contract.SetStabilization(&_IAuctioneer.TransactOpts, stabilization)
}

// IAutonityMetaData contains all meta data concerning the IAutonity contract.
var IAutonityMetaData = &bind.MetaData{
	ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"ActivatedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"BondingApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"BondingRejected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"CommissionRateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"oldParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"newParams\",\"type\":\"tuple\"}],\"name\":\"Eip1559ParamsUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"oldEnode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newEnode\",\"type\":\"string\"}],\"name\":\"EnodeUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"period\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliedAtBlock\",\"type\":\"uint256\"}],\"name\":\"EpochPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"MintedStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"headBondingID\",\"type\":\"uint256\"}],\"name\":\"NewBondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inflationReserve\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stakeCirculating\",\"type\":\"uint256\"}],\"name\":\"NewEpoch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"selfBonded\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"headUnbondingID\",\"type\":\"uint256\"}],\"name\":\"NewUnbondingRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"effectiveBlock\",\"type\":\"uint256\"}],\"name\":\"PausedValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidStateContract\",\"type\":\"address\"}],\"name\":\"RegisteredValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnSelfAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnDelegatedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnSelfAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnDelegatedAmount\",\"type\":\"uint256\"}],\"name\":\"Rewarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"activateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approveBonding\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_selfBond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_delegated\",\"type\":\"uint256\"}],\"name\":\"autobond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"bondFrom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"}],\"name\":\"bondingAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"changeCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"circulatingSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getBondingRequestByID\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.BondingRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getClientConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"clusteringThreshold\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"range\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gracePeriod\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Accountability\",\"name\":\"accountability\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.ClientAwareConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommittee\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitteeEnodes\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegationRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialInflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withholdingThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposerRewardRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oracleRewardRate\",\"type\":\"uint256\"},{\"internalType\":\"addresspayable\",\"name\":\"withheldRewardsPool\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"treasuryAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Policy\",\"name\":\"policy\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIAccountability\",\"name\":\"accountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIOracle\",\"name\":\"oracleContract\",\"type\":\"address\"},{\"internalType\":\"contractIACU\",\"name\":\"acuContract\",\"type\":\"address\"},{\"internalType\":\"contractISupplyControl\",\"name\":\"supplyControlContract\",\"type\":\"address\"},{\"internalType\":\"contractIStabilization\",\"name\":\"stabilizationContract\",\"type\":\"address\"},{\"internalType\":\"contractIUpgradeManager\",\"name\":\"upgradeManagerContract\",\"type\":\"address\"},{\"internalType\":\"contractIInflationController\",\"name\":\"inflationControllerContract\",\"type\":\"address\"},{\"internalType\":\"contractIOmissionAccountability\",\"name\":\"omissionAccountabilityContract\",\"type\":\"address\"},{\"internalType\":\"contractIAuctioneer\",\"name\":\"auctioneerContract\",\"type\":\"address\"}],\"internalType\":\"structIAutonity.Contracts\",\"name\":\"contracts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"operatorAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"committeeSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxScheduleDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"clusteringThreshold\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Protocol\",\"name\":\"protocol\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"contractVersion\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"}],\"name\":\"getEpochByHeight\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"committee\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"previousEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"omissionDelta\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_block\",\"type\":\"uint256\"}],\"name\":\"getEpochFromBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochInfo\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"committee\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"previousEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"epochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextEpochBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"omissionDelta\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minBaseFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseFeeChangeDenominator\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"elasticityMultiplier\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimitBoundDivisor\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Eip1559\",\"name\":\"eip1559\",\"type\":\"tuple\"}],\"internalType\":\"structIAutonity.EpochInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochTotalBondedStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInflationReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastEpochTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidLogicContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxCommitteeSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxScheduleDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextEpochBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getSchedule\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unlockedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastUnlockTime\",\"type\":\"uint256\"}],\"internalType\":\"structIScheduleController.Schedule\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"}],\"name\":\"getTotalSchedules\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbondingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getUnbondingRequestByID\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestBlock\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"released\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"selfDelegation\",\"type\":\"bool\"}],\"internalType\":\"structIAutonity.UnbondingRequest\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondingID\",\"type\":\"uint256\"}],\"name\":\"getUnbondingShare\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getValidatorState\",\"outputs\":[{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_unbondingID\",\"type\":\"uint256\"}],\"name\":\"isUnbondingReleased\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_jailtime\",\"type\":\"uint256\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailedState\",\"type\":\"uint8\"}],\"name\":\"jail\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailboundState\",\"type\":\"uint8\"}],\"name\":\"jailbound\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"pauseValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRate\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"slashingAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jailtime\",\"type\":\"uint256\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailedState\",\"type\":\"uint8\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailboundState\",\"type\":\"uint8\"}],\"name\":\"slashAndJail\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"slashingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unbondFrom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_enode\",\"type\":\"string\"}],\"name\":\"updateEnode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"b46e5520": "activateValidator(address)",
		"dd62ed3e": "allowance(address,address)",
		"095ea7b3": "approve(address,uint256)",
		"50492571": "approveBonding(address,uint256)",
		"f7fcc510": "autobond(address,uint256,uint256)",
		"70a08231": "balanceOf(address)",
		"a515366a": "bond(address,uint256)",
		"41de7400": "bondFrom(address,address,uint256)",
		"e0e01d54": "bondingAllowance(address,address)",
		"852c4849": "changeCommissionRate(address,uint256)",
		"9358928b": "circulatingSupply()",
		"43645969": "getBlockPeriod()",
		"8ebb48b7": "getBondingRequestByID(uint256)",
		"f3f759c1": "getClientConfig()",
		"ab8f6ffe": "getCommittee()",
		"a8b2216e": "getCommitteeEnodes()",
		"c3f909d4": "getConfig()",
		"2b56feac": "getCurrentCommitteeSize()",
		"0aac2da1": "getCurrentEpochPeriod()",
		"affb1cf1": "getEpochByHeight(uint256)",
		"96b477cb": "getEpochFromBlock(uint256)",
		"6fc53515": "getEpochID()",
		"a9fd1a8f": "getEpochInfo()",
		"dfb1a4d2": "getEpochPeriod()",
		"4efcd15f": "getEpochTotalBondedStake()",
		"4651e07b": "getInflationReserve()",
		"731b3a03": "getLastEpochBlock()",
		"ba522458": "getLastEpochTime()",
		"4c1f1c77": "getLiquidLogicContract()",
		"819b6463": "getMaxCommitteeSize()",
		"fed76a56": "getMaxScheduleDuration()",
		"11220633": "getMinimumBaseFee()",
		"25ce1bb9": "getNextEpochBlock()",
		"e7f43c68": "getOperator()",
		"833b1fce": "getOracle()",
		"7264c4da": "getSchedule(address,uint256)",
		"088566e9": "getTotalSchedules(address)",
		"f7866ee3": "getTreasuryAccount()",
		"29070c6d": "getTreasuryFee()",
		"6fd2c80b": "getUnbondingPeriod()",
		"4bfe23f1": "getUnbondingRequestByID(uint256)",
		"8d347287": "getUnbondingShare(uint256)",
		"1904bb2e": "getValidator(address)",
		"5b7d6c36": "getValidatorState(address)",
		"b7ab4db5": "getValidators()",
		"0d8e6e2c": "getVersion()",
		"e294df7c": "isUnbondingReleased(uint256)",
		"154d76d7": "jail(address,uint256,uint8)",
		"8ef8c2fd": "jailbound(address,uint8)",
		"0ae65e7a": "pauseValidator(address)",
		"84467fdb": "registerValidator(string,address,bytes,bytes)",
		"02fb4d85": "slash(address,uint256)",
		"122b4122": "slashAndJail(address,uint256,uint256,uint8,uint8)",
		"18160ddd": "totalSupply()",
		"a9059cbb": "transfer(address,uint256)",
		"23b872dd": "transferFrom(address,address,uint256)",
		"a5d059ca": "unbond(address,uint256)",
		"a9a7d7c9": "unbondFrom(address,address,uint256)",
		"784304b5": "updateEnode(address,string)",
	},
}

// IAutonityABI is the input ABI used to generate the binding from.
// Deprecated: Use IAutonityMetaData.ABI instead.
var IAutonityABI = IAutonityMetaData.ABI

// Deprecated: Use IAutonityMetaData.Sigs instead.
// IAutonityFuncSigs maps the 4-byte function signature to its string representation.
var IAutonityFuncSigs = IAutonityMetaData.Sigs

// IAutonity is an auto generated Go binding around an Ethereum contract.
type IAutonity struct {
	IAutonityCaller     // Read-only binding to the contract
	IAutonityTransactor // Write-only binding to the contract
	IAutonityFilterer   // Log filterer for contract events
}

// IAutonityCaller is an auto generated read-only Go binding around an Ethereum contract.
type IAutonityCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IAutonityTransactor is an auto generated write-only Go binding around an Ethereum contract.
type IAutonityTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IAutonityFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type IAutonityFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IAutonitySession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type IAutonitySession struct {
	Contract     *IAutonity        // 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
}

// IAutonityCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type IAutonityCallerSession struct {
	Contract *IAutonityCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts    // Call options to use throughout this session
}

// IAutonityTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type IAutonityTransactorSession struct {
	Contract     *IAutonityTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts    // Transaction auth options to use throughout this session
}

// IAutonityRaw is an auto generated low-level Go binding around an Ethereum contract.
type IAutonityRaw struct {
	Contract *IAutonity // Generic contract binding to access the raw methods on
}

// IAutonityCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IAutonityCallerRaw struct {
	Contract *IAutonityCaller // Generic read-only contract binding to access the raw methods on
}

// IAutonityTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IAutonityTransactorRaw struct {
	Contract *IAutonityTransactor // Generic write-only contract binding to access the raw methods on
}

// NewIAutonity creates a new instance of IAutonity, bound to a specific deployed contract.
func NewIAutonity(address common.Address, backend bind.ContractBackend) (*IAutonity, error) {
	contract, err := bindIAutonity(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IAutonity{IAutonityCaller: IAutonityCaller{contract: contract}, IAutonityTransactor: IAutonityTransactor{contract: contract}, IAutonityFilterer: IAutonityFilterer{contract: contract}}, nil
}

// NewIAutonityCaller creates a new read-only instance of IAutonity, bound to a specific deployed contract.
func NewIAutonityCaller(address common.Address, caller bind.ContractCaller) (*IAutonityCaller, error) {
	contract, err := bindIAutonity(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IAutonityCaller{contract: contract}, nil
}

// NewIAutonityTransactor creates a new write-only instance of IAutonity, bound to a specific deployed contract.
func NewIAutonityTransactor(address common.Address, transactor bind.ContractTransactor) (*IAutonityTransactor, error) {
	contract, err := bindIAutonity(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IAutonityTransactor{contract: contract}, nil
}

// NewIAutonityFilterer creates a new log filterer instance of IAutonity, bound to a specific deployed contract.
func NewIAutonityFilterer(address common.Address, filterer bind.ContractFilterer) (*IAutonityFilterer, error) {
	contract, err := bindIAutonity(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IAutonityFilterer{contract: contract}, nil
}

// bindIAutonity binds a generic wrapper to an already deployed contract.
func bindIAutonity(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IAutonityABI))
	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 (_IAutonity *IAutonityRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IAutonity.Contract.IAutonityCaller.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 (_IAutonity *IAutonityRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IAutonity.Contract.IAutonityTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IAutonity *IAutonityRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IAutonity.Contract.IAutonityTransactor.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 (_IAutonity *IAutonityCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IAutonity.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 (_IAutonity *IAutonityTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IAutonity.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IAutonity *IAutonityTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IAutonity.Contract.contract.Transact(opts, method, params...)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_IAutonity *IAutonityCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "allowance", owner, spender)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_IAutonity *IAutonitySession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
	return _IAutonity.Contract.Allowance(&_IAutonity.CallOpts, owner, spender)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_IAutonity *IAutonityCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
	return _IAutonity.Contract.Allowance(&_IAutonity.CallOpts, owner, spender)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_IAutonity *IAutonityCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "balanceOf", account)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_IAutonity *IAutonitySession) BalanceOf(account common.Address) (*big.Int, error) {
	return _IAutonity.Contract.BalanceOf(&_IAutonity.CallOpts, account)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_IAutonity *IAutonityCallerSession) BalanceOf(account common.Address) (*big.Int, error) {
	return _IAutonity.Contract.BalanceOf(&_IAutonity.CallOpts, account)
}

// BondingAllowance is a free data retrieval call binding the contract method 0xe0e01d54.
//
// Solidity: function bondingAllowance(address _owner, address _caller) view returns(uint256)
func (_IAutonity *IAutonityCaller) BondingAllowance(opts *bind.CallOpts, _owner common.Address, _caller common.Address) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "bondingAllowance", _owner, _caller)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// BondingAllowance is a free data retrieval call binding the contract method 0xe0e01d54.
//
// Solidity: function bondingAllowance(address _owner, address _caller) view returns(uint256)
func (_IAutonity *IAutonitySession) BondingAllowance(_owner common.Address, _caller common.Address) (*big.Int, error) {
	return _IAutonity.Contract.BondingAllowance(&_IAutonity.CallOpts, _owner, _caller)
}

// BondingAllowance is a free data retrieval call binding the contract method 0xe0e01d54.
//
// Solidity: function bondingAllowance(address _owner, address _caller) view returns(uint256)
func (_IAutonity *IAutonityCallerSession) BondingAllowance(_owner common.Address, _caller common.Address) (*big.Int, error) {
	return _IAutonity.Contract.BondingAllowance(&_IAutonity.CallOpts, _owner, _caller)
}

// CirculatingSupply is a free data retrieval call binding the contract method 0x9358928b.
//
// Solidity: function circulatingSupply() view returns(uint256)
func (_IAutonity *IAutonityCaller) CirculatingSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "circulatingSupply")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// CirculatingSupply is a free data retrieval call binding the contract method 0x9358928b.
//
// Solidity: function circulatingSupply() view returns(uint256)
func (_IAutonity *IAutonitySession) CirculatingSupply() (*big.Int, error) {
	return _IAutonity.Contract.CirculatingSupply(&_IAutonity.CallOpts)
}

// CirculatingSupply is a free data retrieval call binding the contract method 0x9358928b.
//
// Solidity: function circulatingSupply() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) CirculatingSupply() (*big.Int, error) {
	return _IAutonity.Contract.CirculatingSupply(&_IAutonity.CallOpts)
}

// GetBlockPeriod is a free data retrieval call binding the contract method 0x43645969.
//
// Solidity: function getBlockPeriod() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetBlockPeriod(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getBlockPeriod")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetBlockPeriod is a free data retrieval call binding the contract method 0x43645969.
//
// Solidity: function getBlockPeriod() view returns(uint256)
func (_IAutonity *IAutonitySession) GetBlockPeriod() (*big.Int, error) {
	return _IAutonity.Contract.GetBlockPeriod(&_IAutonity.CallOpts)
}

// GetBlockPeriod is a free data retrieval call binding the contract method 0x43645969.
//
// Solidity: function getBlockPeriod() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetBlockPeriod() (*big.Int, error) {
	return _IAutonity.Contract.GetBlockPeriod(&_IAutonity.CallOpts)
}

// GetBondingRequestByID is a free data retrieval call binding the contract method 0x8ebb48b7.
//
// Solidity: function getBondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256))
func (_IAutonity *IAutonityCaller) GetBondingRequestByID(opts *bind.CallOpts, _id *big.Int) (IAutonityBondingRequest, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getBondingRequestByID", _id)

	if err != nil {
		return *new(IAutonityBondingRequest), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityBondingRequest)).(*IAutonityBondingRequest)

	return out0, err

}

// GetBondingRequestByID is a free data retrieval call binding the contract method 0x8ebb48b7.
//
// Solidity: function getBondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256))
func (_IAutonity *IAutonitySession) GetBondingRequestByID(_id *big.Int) (IAutonityBondingRequest, error) {
	return _IAutonity.Contract.GetBondingRequestByID(&_IAutonity.CallOpts, _id)
}

// GetBondingRequestByID is a free data retrieval call binding the contract method 0x8ebb48b7.
//
// Solidity: function getBondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256))
func (_IAutonity *IAutonityCallerSession) GetBondingRequestByID(_id *big.Int) (IAutonityBondingRequest, error) {
	return _IAutonity.Contract.GetBondingRequestByID(&_IAutonity.CallOpts, _id)
}

// GetClientConfig is a free data retrieval call binding the contract method 0xf3f759c1.
//
// Solidity: function getClientConfig() view returns((uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256)))
func (_IAutonity *IAutonityCaller) GetClientConfig(opts *bind.CallOpts) (IAutonityClientAwareConfig, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getClientConfig")

	if err != nil {
		return *new(IAutonityClientAwareConfig), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityClientAwareConfig)).(*IAutonityClientAwareConfig)

	return out0, err

}

// GetClientConfig is a free data retrieval call binding the contract method 0xf3f759c1.
//
// Solidity: function getClientConfig() view returns((uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256)))
func (_IAutonity *IAutonitySession) GetClientConfig() (IAutonityClientAwareConfig, error) {
	return _IAutonity.Contract.GetClientConfig(&_IAutonity.CallOpts)
}

// GetClientConfig is a free data retrieval call binding the contract method 0xf3f759c1.
//
// Solidity: function getClientConfig() view returns((uint256,uint256,uint256,uint256,(uint256,uint256,uint256),(uint256,uint256,uint256,uint256)))
func (_IAutonity *IAutonityCallerSession) GetClientConfig() (IAutonityClientAwareConfig, error) {
	return _IAutonity.Contract.GetClientConfig(&_IAutonity.CallOpts)
}

// GetCommittee is a free data retrieval call binding the contract method 0xab8f6ffe.
//
// Solidity: function getCommittee() view returns((address,uint256,bytes)[])
func (_IAutonity *IAutonityCaller) GetCommittee(opts *bind.CallOpts) ([]IAutonityCommitteeMember, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getCommittee")

	if err != nil {
		return *new([]IAutonityCommitteeMember), err
	}

	out0 := *abi.ConvertType(out[0], new([]IAutonityCommitteeMember)).(*[]IAutonityCommitteeMember)

	return out0, err

}

// GetCommittee is a free data retrieval call binding the contract method 0xab8f6ffe.
//
// Solidity: function getCommittee() view returns((address,uint256,bytes)[])
func (_IAutonity *IAutonitySession) GetCommittee() ([]IAutonityCommitteeMember, error) {
	return _IAutonity.Contract.GetCommittee(&_IAutonity.CallOpts)
}

// GetCommittee is a free data retrieval call binding the contract method 0xab8f6ffe.
//
// Solidity: function getCommittee() view returns((address,uint256,bytes)[])
func (_IAutonity *IAutonityCallerSession) GetCommittee() ([]IAutonityCommitteeMember, error) {
	return _IAutonity.Contract.GetCommittee(&_IAutonity.CallOpts)
}

// GetCommitteeEnodes is a free data retrieval call binding the contract method 0xa8b2216e.
//
// Solidity: function getCommitteeEnodes() view returns(string[])
func (_IAutonity *IAutonityCaller) GetCommitteeEnodes(opts *bind.CallOpts) ([]string, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getCommitteeEnodes")

	if err != nil {
		return *new([]string), err
	}

	out0 := *abi.ConvertType(out[0], new([]string)).(*[]string)

	return out0, err

}

// GetCommitteeEnodes is a free data retrieval call binding the contract method 0xa8b2216e.
//
// Solidity: function getCommitteeEnodes() view returns(string[])
func (_IAutonity *IAutonitySession) GetCommitteeEnodes() ([]string, error) {
	return _IAutonity.Contract.GetCommitteeEnodes(&_IAutonity.CallOpts)
}

// GetCommitteeEnodes is a free data retrieval call binding the contract method 0xa8b2216e.
//
// Solidity: function getCommitteeEnodes() view returns(string[])
func (_IAutonity *IAutonityCallerSession) GetCommitteeEnodes() ([]string, error) {
	return _IAutonity.Contract.GetCommitteeEnodes(&_IAutonity.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns(((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256),(address,address,address,address,address,address,address,address,address),(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint256))
func (_IAutonity *IAutonityCaller) GetConfig(opts *bind.CallOpts) (IAutonityConfig, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getConfig")

	if err != nil {
		return *new(IAutonityConfig), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityConfig)).(*IAutonityConfig)

	return out0, err

}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns(((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256),(address,address,address,address,address,address,address,address,address),(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint256))
func (_IAutonity *IAutonitySession) GetConfig() (IAutonityConfig, error) {
	return _IAutonity.Contract.GetConfig(&_IAutonity.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns(((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256),(address,address,address,address,address,address,address,address,address),(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256),uint256))
func (_IAutonity *IAutonityCallerSession) GetConfig() (IAutonityConfig, error) {
	return _IAutonity.Contract.GetConfig(&_IAutonity.CallOpts)
}

// GetCurrentCommitteeSize is a free data retrieval call binding the contract method 0x2b56feac.
//
// Solidity: function getCurrentCommitteeSize() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetCurrentCommitteeSize(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getCurrentCommitteeSize")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetCurrentCommitteeSize is a free data retrieval call binding the contract method 0x2b56feac.
//
// Solidity: function getCurrentCommitteeSize() view returns(uint256)
func (_IAutonity *IAutonitySession) GetCurrentCommitteeSize() (*big.Int, error) {
	return _IAutonity.Contract.GetCurrentCommitteeSize(&_IAutonity.CallOpts)
}

// GetCurrentCommitteeSize is a free data retrieval call binding the contract method 0x2b56feac.
//
// Solidity: function getCurrentCommitteeSize() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetCurrentCommitteeSize() (*big.Int, error) {
	return _IAutonity.Contract.GetCurrentCommitteeSize(&_IAutonity.CallOpts)
}

// GetCurrentEpochPeriod is a free data retrieval call binding the contract method 0x0aac2da1.
//
// Solidity: function getCurrentEpochPeriod() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetCurrentEpochPeriod(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getCurrentEpochPeriod")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetCurrentEpochPeriod is a free data retrieval call binding the contract method 0x0aac2da1.
//
// Solidity: function getCurrentEpochPeriod() view returns(uint256)
func (_IAutonity *IAutonitySession) GetCurrentEpochPeriod() (*big.Int, error) {
	return _IAutonity.Contract.GetCurrentEpochPeriod(&_IAutonity.CallOpts)
}

// GetCurrentEpochPeriod is a free data retrieval call binding the contract method 0x0aac2da1.
//
// Solidity: function getCurrentEpochPeriod() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetCurrentEpochPeriod() (*big.Int, error) {
	return _IAutonity.Contract.GetCurrentEpochPeriod(&_IAutonity.CallOpts)
}

// GetEpochByHeight is a free data retrieval call binding the contract method 0xaffb1cf1.
//
// Solidity: function getEpochByHeight(uint256 _height) view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_IAutonity *IAutonityCaller) GetEpochByHeight(opts *bind.CallOpts, _height *big.Int) (IAutonityEpochInfo, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getEpochByHeight", _height)

	if err != nil {
		return *new(IAutonityEpochInfo), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityEpochInfo)).(*IAutonityEpochInfo)

	return out0, err

}

// GetEpochByHeight is a free data retrieval call binding the contract method 0xaffb1cf1.
//
// Solidity: function getEpochByHeight(uint256 _height) view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_IAutonity *IAutonitySession) GetEpochByHeight(_height *big.Int) (IAutonityEpochInfo, error) {
	return _IAutonity.Contract.GetEpochByHeight(&_IAutonity.CallOpts, _height)
}

// GetEpochByHeight is a free data retrieval call binding the contract method 0xaffb1cf1.
//
// Solidity: function getEpochByHeight(uint256 _height) view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_IAutonity *IAutonityCallerSession) GetEpochByHeight(_height *big.Int) (IAutonityEpochInfo, error) {
	return _IAutonity.Contract.GetEpochByHeight(&_IAutonity.CallOpts, _height)
}

// GetEpochFromBlock is a free data retrieval call binding the contract method 0x96b477cb.
//
// Solidity: function getEpochFromBlock(uint256 _block) view returns(uint256)
func (_IAutonity *IAutonityCaller) GetEpochFromBlock(opts *bind.CallOpts, _block *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getEpochFromBlock", _block)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetEpochFromBlock is a free data retrieval call binding the contract method 0x96b477cb.
//
// Solidity: function getEpochFromBlock(uint256 _block) view returns(uint256)
func (_IAutonity *IAutonitySession) GetEpochFromBlock(_block *big.Int) (*big.Int, error) {
	return _IAutonity.Contract.GetEpochFromBlock(&_IAutonity.CallOpts, _block)
}

// GetEpochFromBlock is a free data retrieval call binding the contract method 0x96b477cb.
//
// Solidity: function getEpochFromBlock(uint256 _block) view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetEpochFromBlock(_block *big.Int) (*big.Int, error) {
	return _IAutonity.Contract.GetEpochFromBlock(&_IAutonity.CallOpts, _block)
}

// GetEpochID is a free data retrieval call binding the contract method 0x6fc53515.
//
// Solidity: function getEpochID() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetEpochID(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getEpochID")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetEpochID is a free data retrieval call binding the contract method 0x6fc53515.
//
// Solidity: function getEpochID() view returns(uint256)
func (_IAutonity *IAutonitySession) GetEpochID() (*big.Int, error) {
	return _IAutonity.Contract.GetEpochID(&_IAutonity.CallOpts)
}

// GetEpochID is a free data retrieval call binding the contract method 0x6fc53515.
//
// Solidity: function getEpochID() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetEpochID() (*big.Int, error) {
	return _IAutonity.Contract.GetEpochID(&_IAutonity.CallOpts)
}

// GetEpochInfo is a free data retrieval call binding the contract method 0xa9fd1a8f.
//
// Solidity: function getEpochInfo() view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_IAutonity *IAutonityCaller) GetEpochInfo(opts *bind.CallOpts) (IAutonityEpochInfo, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getEpochInfo")

	if err != nil {
		return *new(IAutonityEpochInfo), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityEpochInfo)).(*IAutonityEpochInfo)

	return out0, err

}

// GetEpochInfo is a free data retrieval call binding the contract method 0xa9fd1a8f.
//
// Solidity: function getEpochInfo() view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_IAutonity *IAutonitySession) GetEpochInfo() (IAutonityEpochInfo, error) {
	return _IAutonity.Contract.GetEpochInfo(&_IAutonity.CallOpts)
}

// GetEpochInfo is a free data retrieval call binding the contract method 0xa9fd1a8f.
//
// Solidity: function getEpochInfo() view returns(((address,uint256,bytes)[],uint256,uint256,uint256,uint256,(uint256,uint256,uint256,uint256)))
func (_IAutonity *IAutonityCallerSession) GetEpochInfo() (IAutonityEpochInfo, error) {
	return _IAutonity.Contract.GetEpochInfo(&_IAutonity.CallOpts)
}

// GetEpochPeriod is a free data retrieval call binding the contract method 0xdfb1a4d2.
//
// Solidity: function getEpochPeriod() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetEpochPeriod(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getEpochPeriod")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetEpochPeriod is a free data retrieval call binding the contract method 0xdfb1a4d2.
//
// Solidity: function getEpochPeriod() view returns(uint256)
func (_IAutonity *IAutonitySession) GetEpochPeriod() (*big.Int, error) {
	return _IAutonity.Contract.GetEpochPeriod(&_IAutonity.CallOpts)
}

// GetEpochPeriod is a free data retrieval call binding the contract method 0xdfb1a4d2.
//
// Solidity: function getEpochPeriod() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetEpochPeriod() (*big.Int, error) {
	return _IAutonity.Contract.GetEpochPeriod(&_IAutonity.CallOpts)
}

// GetEpochTotalBondedStake is a free data retrieval call binding the contract method 0x4efcd15f.
//
// Solidity: function getEpochTotalBondedStake() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetEpochTotalBondedStake(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getEpochTotalBondedStake")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetEpochTotalBondedStake is a free data retrieval call binding the contract method 0x4efcd15f.
//
// Solidity: function getEpochTotalBondedStake() view returns(uint256)
func (_IAutonity *IAutonitySession) GetEpochTotalBondedStake() (*big.Int, error) {
	return _IAutonity.Contract.GetEpochTotalBondedStake(&_IAutonity.CallOpts)
}

// GetEpochTotalBondedStake is a free data retrieval call binding the contract method 0x4efcd15f.
//
// Solidity: function getEpochTotalBondedStake() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetEpochTotalBondedStake() (*big.Int, error) {
	return _IAutonity.Contract.GetEpochTotalBondedStake(&_IAutonity.CallOpts)
}

// GetInflationReserve is a free data retrieval call binding the contract method 0x4651e07b.
//
// Solidity: function getInflationReserve() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetInflationReserve(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getInflationReserve")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetInflationReserve is a free data retrieval call binding the contract method 0x4651e07b.
//
// Solidity: function getInflationReserve() view returns(uint256)
func (_IAutonity *IAutonitySession) GetInflationReserve() (*big.Int, error) {
	return _IAutonity.Contract.GetInflationReserve(&_IAutonity.CallOpts)
}

// GetInflationReserve is a free data retrieval call binding the contract method 0x4651e07b.
//
// Solidity: function getInflationReserve() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetInflationReserve() (*big.Int, error) {
	return _IAutonity.Contract.GetInflationReserve(&_IAutonity.CallOpts)
}

// GetLastEpochBlock is a free data retrieval call binding the contract method 0x731b3a03.
//
// Solidity: function getLastEpochBlock() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetLastEpochBlock(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getLastEpochBlock")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetLastEpochBlock is a free data retrieval call binding the contract method 0x731b3a03.
//
// Solidity: function getLastEpochBlock() view returns(uint256)
func (_IAutonity *IAutonitySession) GetLastEpochBlock() (*big.Int, error) {
	return _IAutonity.Contract.GetLastEpochBlock(&_IAutonity.CallOpts)
}

// GetLastEpochBlock is a free data retrieval call binding the contract method 0x731b3a03.
//
// Solidity: function getLastEpochBlock() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetLastEpochBlock() (*big.Int, error) {
	return _IAutonity.Contract.GetLastEpochBlock(&_IAutonity.CallOpts)
}

// GetLastEpochTime is a free data retrieval call binding the contract method 0xba522458.
//
// Solidity: function getLastEpochTime() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetLastEpochTime(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getLastEpochTime")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetLastEpochTime is a free data retrieval call binding the contract method 0xba522458.
//
// Solidity: function getLastEpochTime() view returns(uint256)
func (_IAutonity *IAutonitySession) GetLastEpochTime() (*big.Int, error) {
	return _IAutonity.Contract.GetLastEpochTime(&_IAutonity.CallOpts)
}

// GetLastEpochTime is a free data retrieval call binding the contract method 0xba522458.
//
// Solidity: function getLastEpochTime() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetLastEpochTime() (*big.Int, error) {
	return _IAutonity.Contract.GetLastEpochTime(&_IAutonity.CallOpts)
}

// GetLiquidLogicContract is a free data retrieval call binding the contract method 0x4c1f1c77.
//
// Solidity: function getLiquidLogicContract() view returns(address)
func (_IAutonity *IAutonityCaller) GetLiquidLogicContract(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getLiquidLogicContract")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetLiquidLogicContract is a free data retrieval call binding the contract method 0x4c1f1c77.
//
// Solidity: function getLiquidLogicContract() view returns(address)
func (_IAutonity *IAutonitySession) GetLiquidLogicContract() (common.Address, error) {
	return _IAutonity.Contract.GetLiquidLogicContract(&_IAutonity.CallOpts)
}

// GetLiquidLogicContract is a free data retrieval call binding the contract method 0x4c1f1c77.
//
// Solidity: function getLiquidLogicContract() view returns(address)
func (_IAutonity *IAutonityCallerSession) GetLiquidLogicContract() (common.Address, error) {
	return _IAutonity.Contract.GetLiquidLogicContract(&_IAutonity.CallOpts)
}

// GetMaxCommitteeSize is a free data retrieval call binding the contract method 0x819b6463.
//
// Solidity: function getMaxCommitteeSize() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetMaxCommitteeSize(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getMaxCommitteeSize")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetMaxCommitteeSize is a free data retrieval call binding the contract method 0x819b6463.
//
// Solidity: function getMaxCommitteeSize() view returns(uint256)
func (_IAutonity *IAutonitySession) GetMaxCommitteeSize() (*big.Int, error) {
	return _IAutonity.Contract.GetMaxCommitteeSize(&_IAutonity.CallOpts)
}

// GetMaxCommitteeSize is a free data retrieval call binding the contract method 0x819b6463.
//
// Solidity: function getMaxCommitteeSize() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetMaxCommitteeSize() (*big.Int, error) {
	return _IAutonity.Contract.GetMaxCommitteeSize(&_IAutonity.CallOpts)
}

// GetMaxScheduleDuration is a free data retrieval call binding the contract method 0xfed76a56.
//
// Solidity: function getMaxScheduleDuration() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetMaxScheduleDuration(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getMaxScheduleDuration")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetMaxScheduleDuration is a free data retrieval call binding the contract method 0xfed76a56.
//
// Solidity: function getMaxScheduleDuration() view returns(uint256)
func (_IAutonity *IAutonitySession) GetMaxScheduleDuration() (*big.Int, error) {
	return _IAutonity.Contract.GetMaxScheduleDuration(&_IAutonity.CallOpts)
}

// GetMaxScheduleDuration is a free data retrieval call binding the contract method 0xfed76a56.
//
// Solidity: function getMaxScheduleDuration() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetMaxScheduleDuration() (*big.Int, error) {
	return _IAutonity.Contract.GetMaxScheduleDuration(&_IAutonity.CallOpts)
}

// GetMinimumBaseFee is a free data retrieval call binding the contract method 0x11220633.
//
// Solidity: function getMinimumBaseFee() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetMinimumBaseFee(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getMinimumBaseFee")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetMinimumBaseFee is a free data retrieval call binding the contract method 0x11220633.
//
// Solidity: function getMinimumBaseFee() view returns(uint256)
func (_IAutonity *IAutonitySession) GetMinimumBaseFee() (*big.Int, error) {
	return _IAutonity.Contract.GetMinimumBaseFee(&_IAutonity.CallOpts)
}

// GetMinimumBaseFee is a free data retrieval call binding the contract method 0x11220633.
//
// Solidity: function getMinimumBaseFee() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetMinimumBaseFee() (*big.Int, error) {
	return _IAutonity.Contract.GetMinimumBaseFee(&_IAutonity.CallOpts)
}

// GetNextEpochBlock is a free data retrieval call binding the contract method 0x25ce1bb9.
//
// Solidity: function getNextEpochBlock() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetNextEpochBlock(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getNextEpochBlock")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetNextEpochBlock is a free data retrieval call binding the contract method 0x25ce1bb9.
//
// Solidity: function getNextEpochBlock() view returns(uint256)
func (_IAutonity *IAutonitySession) GetNextEpochBlock() (*big.Int, error) {
	return _IAutonity.Contract.GetNextEpochBlock(&_IAutonity.CallOpts)
}

// GetNextEpochBlock is a free data retrieval call binding the contract method 0x25ce1bb9.
//
// Solidity: function getNextEpochBlock() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetNextEpochBlock() (*big.Int, error) {
	return _IAutonity.Contract.GetNextEpochBlock(&_IAutonity.CallOpts)
}

// GetOperator is a free data retrieval call binding the contract method 0xe7f43c68.
//
// Solidity: function getOperator() view returns(address)
func (_IAutonity *IAutonityCaller) GetOperator(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getOperator")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetOperator is a free data retrieval call binding the contract method 0xe7f43c68.
//
// Solidity: function getOperator() view returns(address)
func (_IAutonity *IAutonitySession) GetOperator() (common.Address, error) {
	return _IAutonity.Contract.GetOperator(&_IAutonity.CallOpts)
}

// GetOperator is a free data retrieval call binding the contract method 0xe7f43c68.
//
// Solidity: function getOperator() view returns(address)
func (_IAutonity *IAutonityCallerSession) GetOperator() (common.Address, error) {
	return _IAutonity.Contract.GetOperator(&_IAutonity.CallOpts)
}

// GetOracle is a free data retrieval call binding the contract method 0x833b1fce.
//
// Solidity: function getOracle() view returns(address)
func (_IAutonity *IAutonityCaller) GetOracle(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getOracle")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetOracle is a free data retrieval call binding the contract method 0x833b1fce.
//
// Solidity: function getOracle() view returns(address)
func (_IAutonity *IAutonitySession) GetOracle() (common.Address, error) {
	return _IAutonity.Contract.GetOracle(&_IAutonity.CallOpts)
}

// GetOracle is a free data retrieval call binding the contract method 0x833b1fce.
//
// Solidity: function getOracle() view returns(address)
func (_IAutonity *IAutonityCallerSession) GetOracle() (common.Address, error) {
	return _IAutonity.Contract.GetOracle(&_IAutonity.CallOpts)
}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_IAutonity *IAutonityCaller) GetSchedule(opts *bind.CallOpts, _vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getSchedule", _vault, _id)

	if err != nil {
		return *new(IScheduleControllerSchedule), err
	}

	out0 := *abi.ConvertType(out[0], new(IScheduleControllerSchedule)).(*IScheduleControllerSchedule)

	return out0, err

}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_IAutonity *IAutonitySession) GetSchedule(_vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	return _IAutonity.Contract.GetSchedule(&_IAutonity.CallOpts, _vault, _id)
}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_IAutonity *IAutonityCallerSession) GetSchedule(_vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	return _IAutonity.Contract.GetSchedule(&_IAutonity.CallOpts, _vault, _id)
}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_IAutonity *IAutonityCaller) GetTotalSchedules(opts *bind.CallOpts, _vault common.Address) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getTotalSchedules", _vault)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_IAutonity *IAutonitySession) GetTotalSchedules(_vault common.Address) (*big.Int, error) {
	return _IAutonity.Contract.GetTotalSchedules(&_IAutonity.CallOpts, _vault)
}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetTotalSchedules(_vault common.Address) (*big.Int, error) {
	return _IAutonity.Contract.GetTotalSchedules(&_IAutonity.CallOpts, _vault)
}

// GetTreasuryAccount is a free data retrieval call binding the contract method 0xf7866ee3.
//
// Solidity: function getTreasuryAccount() view returns(address)
func (_IAutonity *IAutonityCaller) GetTreasuryAccount(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getTreasuryAccount")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetTreasuryAccount is a free data retrieval call binding the contract method 0xf7866ee3.
//
// Solidity: function getTreasuryAccount() view returns(address)
func (_IAutonity *IAutonitySession) GetTreasuryAccount() (common.Address, error) {
	return _IAutonity.Contract.GetTreasuryAccount(&_IAutonity.CallOpts)
}

// GetTreasuryAccount is a free data retrieval call binding the contract method 0xf7866ee3.
//
// Solidity: function getTreasuryAccount() view returns(address)
func (_IAutonity *IAutonityCallerSession) GetTreasuryAccount() (common.Address, error) {
	return _IAutonity.Contract.GetTreasuryAccount(&_IAutonity.CallOpts)
}

// GetTreasuryFee is a free data retrieval call binding the contract method 0x29070c6d.
//
// Solidity: function getTreasuryFee() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetTreasuryFee(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getTreasuryFee")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetTreasuryFee is a free data retrieval call binding the contract method 0x29070c6d.
//
// Solidity: function getTreasuryFee() view returns(uint256)
func (_IAutonity *IAutonitySession) GetTreasuryFee() (*big.Int, error) {
	return _IAutonity.Contract.GetTreasuryFee(&_IAutonity.CallOpts)
}

// GetTreasuryFee is a free data retrieval call binding the contract method 0x29070c6d.
//
// Solidity: function getTreasuryFee() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetTreasuryFee() (*big.Int, error) {
	return _IAutonity.Contract.GetTreasuryFee(&_IAutonity.CallOpts)
}

// GetUnbondingPeriod is a free data retrieval call binding the contract method 0x6fd2c80b.
//
// Solidity: function getUnbondingPeriod() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetUnbondingPeriod(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getUnbondingPeriod")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetUnbondingPeriod is a free data retrieval call binding the contract method 0x6fd2c80b.
//
// Solidity: function getUnbondingPeriod() view returns(uint256)
func (_IAutonity *IAutonitySession) GetUnbondingPeriod() (*big.Int, error) {
	return _IAutonity.Contract.GetUnbondingPeriod(&_IAutonity.CallOpts)
}

// GetUnbondingPeriod is a free data retrieval call binding the contract method 0x6fd2c80b.
//
// Solidity: function getUnbondingPeriod() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetUnbondingPeriod() (*big.Int, error) {
	return _IAutonity.Contract.GetUnbondingPeriod(&_IAutonity.CallOpts)
}

// GetUnbondingRequestByID is a free data retrieval call binding the contract method 0x4bfe23f1.
//
// Solidity: function getUnbondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256,uint256,bool,bool,bool))
func (_IAutonity *IAutonityCaller) GetUnbondingRequestByID(opts *bind.CallOpts, _id *big.Int) (IAutonityUnbondingRequest, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getUnbondingRequestByID", _id)

	if err != nil {
		return *new(IAutonityUnbondingRequest), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityUnbondingRequest)).(*IAutonityUnbondingRequest)

	return out0, err

}

// GetUnbondingRequestByID is a free data retrieval call binding the contract method 0x4bfe23f1.
//
// Solidity: function getUnbondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256,uint256,bool,bool,bool))
func (_IAutonity *IAutonitySession) GetUnbondingRequestByID(_id *big.Int) (IAutonityUnbondingRequest, error) {
	return _IAutonity.Contract.GetUnbondingRequestByID(&_IAutonity.CallOpts, _id)
}

// GetUnbondingRequestByID is a free data retrieval call binding the contract method 0x4bfe23f1.
//
// Solidity: function getUnbondingRequestByID(uint256 _id) view returns((address,address,uint256,uint256,uint256,bool,bool,bool))
func (_IAutonity *IAutonityCallerSession) GetUnbondingRequestByID(_id *big.Int) (IAutonityUnbondingRequest, error) {
	return _IAutonity.Contract.GetUnbondingRequestByID(&_IAutonity.CallOpts, _id)
}

// GetUnbondingShare is a free data retrieval call binding the contract method 0x8d347287.
//
// Solidity: function getUnbondingShare(uint256 _unbondingID) view returns(uint256)
func (_IAutonity *IAutonityCaller) GetUnbondingShare(opts *bind.CallOpts, _unbondingID *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getUnbondingShare", _unbondingID)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetUnbondingShare is a free data retrieval call binding the contract method 0x8d347287.
//
// Solidity: function getUnbondingShare(uint256 _unbondingID) view returns(uint256)
func (_IAutonity *IAutonitySession) GetUnbondingShare(_unbondingID *big.Int) (*big.Int, error) {
	return _IAutonity.Contract.GetUnbondingShare(&_IAutonity.CallOpts, _unbondingID)
}

// GetUnbondingShare is a free data retrieval call binding the contract method 0x8d347287.
//
// Solidity: function getUnbondingShare(uint256 _unbondingID) view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetUnbondingShare(_unbondingID *big.Int) (*big.Int, error) {
	return _IAutonity.Contract.GetUnbondingShare(&_IAutonity.CallOpts, _unbondingID)
}

// GetValidator is a free data retrieval call binding the contract method 0x1904bb2e.
//
// Solidity: function getValidator(address _addr) view returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_IAutonity *IAutonityCaller) GetValidator(opts *bind.CallOpts, _addr common.Address) (IAutonityValidator, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getValidator", _addr)

	if err != nil {
		return *new(IAutonityValidator), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityValidator)).(*IAutonityValidator)

	return out0, err

}

// GetValidator is a free data retrieval call binding the contract method 0x1904bb2e.
//
// Solidity: function getValidator(address _addr) view returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_IAutonity *IAutonitySession) GetValidator(_addr common.Address) (IAutonityValidator, error) {
	return _IAutonity.Contract.GetValidator(&_IAutonity.CallOpts, _addr)
}

// GetValidator is a free data retrieval call binding the contract method 0x1904bb2e.
//
// Solidity: function getValidator(address _addr) view returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_IAutonity *IAutonityCallerSession) GetValidator(_addr common.Address) (IAutonityValidator, error) {
	return _IAutonity.Contract.GetValidator(&_IAutonity.CallOpts, _addr)
}

// GetValidatorState is a free data retrieval call binding the contract method 0x5b7d6c36.
//
// Solidity: function getValidatorState(address _addr) view returns(uint8)
func (_IAutonity *IAutonityCaller) GetValidatorState(opts *bind.CallOpts, _addr common.Address) (uint8, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getValidatorState", _addr)

	if err != nil {
		return *new(uint8), err
	}

	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)

	return out0, err

}

// GetValidatorState is a free data retrieval call binding the contract method 0x5b7d6c36.
//
// Solidity: function getValidatorState(address _addr) view returns(uint8)
func (_IAutonity *IAutonitySession) GetValidatorState(_addr common.Address) (uint8, error) {
	return _IAutonity.Contract.GetValidatorState(&_IAutonity.CallOpts, _addr)
}

// GetValidatorState is a free data retrieval call binding the contract method 0x5b7d6c36.
//
// Solidity: function getValidatorState(address _addr) view returns(uint8)
func (_IAutonity *IAutonityCallerSession) GetValidatorState(_addr common.Address) (uint8, error) {
	return _IAutonity.Contract.GetValidatorState(&_IAutonity.CallOpts, _addr)
}

// GetValidators is a free data retrieval call binding the contract method 0xb7ab4db5.
//
// Solidity: function getValidators() view returns(address[])
func (_IAutonity *IAutonityCaller) GetValidators(opts *bind.CallOpts) ([]common.Address, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getValidators")

	if err != nil {
		return *new([]common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)

	return out0, err

}

// GetValidators is a free data retrieval call binding the contract method 0xb7ab4db5.
//
// Solidity: function getValidators() view returns(address[])
func (_IAutonity *IAutonitySession) GetValidators() ([]common.Address, error) {
	return _IAutonity.Contract.GetValidators(&_IAutonity.CallOpts)
}

// GetValidators is a free data retrieval call binding the contract method 0xb7ab4db5.
//
// Solidity: function getValidators() view returns(address[])
func (_IAutonity *IAutonityCallerSession) GetValidators() ([]common.Address, error) {
	return _IAutonity.Contract.GetValidators(&_IAutonity.CallOpts)
}

// GetVersion is a free data retrieval call binding the contract method 0x0d8e6e2c.
//
// Solidity: function getVersion() view returns(uint256)
func (_IAutonity *IAutonityCaller) GetVersion(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "getVersion")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetVersion is a free data retrieval call binding the contract method 0x0d8e6e2c.
//
// Solidity: function getVersion() view returns(uint256)
func (_IAutonity *IAutonitySession) GetVersion() (*big.Int, error) {
	return _IAutonity.Contract.GetVersion(&_IAutonity.CallOpts)
}

// GetVersion is a free data retrieval call binding the contract method 0x0d8e6e2c.
//
// Solidity: function getVersion() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) GetVersion() (*big.Int, error) {
	return _IAutonity.Contract.GetVersion(&_IAutonity.CallOpts)
}

// IsUnbondingReleased is a free data retrieval call binding the contract method 0xe294df7c.
//
// Solidity: function isUnbondingReleased(uint256 _unbondingID) view returns(bool)
func (_IAutonity *IAutonityCaller) IsUnbondingReleased(opts *bind.CallOpts, _unbondingID *big.Int) (bool, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "isUnbondingReleased", _unbondingID)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// IsUnbondingReleased is a free data retrieval call binding the contract method 0xe294df7c.
//
// Solidity: function isUnbondingReleased(uint256 _unbondingID) view returns(bool)
func (_IAutonity *IAutonitySession) IsUnbondingReleased(_unbondingID *big.Int) (bool, error) {
	return _IAutonity.Contract.IsUnbondingReleased(&_IAutonity.CallOpts, _unbondingID)
}

// IsUnbondingReleased is a free data retrieval call binding the contract method 0xe294df7c.
//
// Solidity: function isUnbondingReleased(uint256 _unbondingID) view returns(bool)
func (_IAutonity *IAutonityCallerSession) IsUnbondingReleased(_unbondingID *big.Int) (bool, error) {
	return _IAutonity.Contract.IsUnbondingReleased(&_IAutonity.CallOpts, _unbondingID)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_IAutonity *IAutonityCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IAutonity.contract.Call(opts, &out, "totalSupply")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_IAutonity *IAutonitySession) TotalSupply() (*big.Int, error) {
	return _IAutonity.Contract.TotalSupply(&_IAutonity.CallOpts)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_IAutonity *IAutonityCallerSession) TotalSupply() (*big.Int, error) {
	return _IAutonity.Contract.TotalSupply(&_IAutonity.CallOpts)
}

// ActivateValidator is a paid mutator transaction binding the contract method 0xb46e5520.
//
// Solidity: function activateValidator(address _address) returns()
func (_IAutonity *IAutonityTransactor) ActivateValidator(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "activateValidator", _address)
}

// ActivateValidator is a paid mutator transaction binding the contract method 0xb46e5520.
//
// Solidity: function activateValidator(address _address) returns()
func (_IAutonity *IAutonitySession) ActivateValidator(_address common.Address) (*types.Transaction, error) {
	return _IAutonity.Contract.ActivateValidator(&_IAutonity.TransactOpts, _address)
}

// ActivateValidator is a paid mutator transaction binding the contract method 0xb46e5520.
//
// Solidity: function activateValidator(address _address) returns()
func (_IAutonity *IAutonityTransactorSession) ActivateValidator(_address common.Address) (*types.Transaction, error) {
	return _IAutonity.Contract.ActivateValidator(&_IAutonity.TransactOpts, _address)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_IAutonity *IAutonityTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "approve", spender, amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_IAutonity *IAutonitySession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Approve(&_IAutonity.TransactOpts, spender, amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_IAutonity *IAutonityTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Approve(&_IAutonity.TransactOpts, spender, amount)
}

// ApproveBonding is a paid mutator transaction binding the contract method 0x50492571.
//
// Solidity: function approveBonding(address _caller, uint256 _amount) returns(bool)
func (_IAutonity *IAutonityTransactor) ApproveBonding(opts *bind.TransactOpts, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "approveBonding", _caller, _amount)
}

// ApproveBonding is a paid mutator transaction binding the contract method 0x50492571.
//
// Solidity: function approveBonding(address _caller, uint256 _amount) returns(bool)
func (_IAutonity *IAutonitySession) ApproveBonding(_caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.ApproveBonding(&_IAutonity.TransactOpts, _caller, _amount)
}

// ApproveBonding is a paid mutator transaction binding the contract method 0x50492571.
//
// Solidity: function approveBonding(address _caller, uint256 _amount) returns(bool)
func (_IAutonity *IAutonityTransactorSession) ApproveBonding(_caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.ApproveBonding(&_IAutonity.TransactOpts, _caller, _amount)
}

// Autobond is a paid mutator transaction binding the contract method 0xf7fcc510.
//
// Solidity: function autobond(address _validator, uint256 _selfBond, uint256 _delegated) returns()
func (_IAutonity *IAutonityTransactor) Autobond(opts *bind.TransactOpts, _validator common.Address, _selfBond *big.Int, _delegated *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "autobond", _validator, _selfBond, _delegated)
}

// Autobond is a paid mutator transaction binding the contract method 0xf7fcc510.
//
// Solidity: function autobond(address _validator, uint256 _selfBond, uint256 _delegated) returns()
func (_IAutonity *IAutonitySession) Autobond(_validator common.Address, _selfBond *big.Int, _delegated *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Autobond(&_IAutonity.TransactOpts, _validator, _selfBond, _delegated)
}

// Autobond is a paid mutator transaction binding the contract method 0xf7fcc510.
//
// Solidity: function autobond(address _validator, uint256 _selfBond, uint256 _delegated) returns()
func (_IAutonity *IAutonityTransactorSession) Autobond(_validator common.Address, _selfBond *big.Int, _delegated *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Autobond(&_IAutonity.TransactOpts, _validator, _selfBond, _delegated)
}

// Bond is a paid mutator transaction binding the contract method 0xa515366a.
//
// Solidity: function bond(address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonityTransactor) Bond(opts *bind.TransactOpts, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "bond", _validator, _amount)
}

// Bond is a paid mutator transaction binding the contract method 0xa515366a.
//
// Solidity: function bond(address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonitySession) Bond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Bond(&_IAutonity.TransactOpts, _validator, _amount)
}

// Bond is a paid mutator transaction binding the contract method 0xa515366a.
//
// Solidity: function bond(address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonityTransactorSession) Bond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Bond(&_IAutonity.TransactOpts, _validator, _amount)
}

// BondFrom is a paid mutator transaction binding the contract method 0x41de7400.
//
// Solidity: function bondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonityTransactor) BondFrom(opts *bind.TransactOpts, _account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "bondFrom", _account, _validator, _amount)
}

// BondFrom is a paid mutator transaction binding the contract method 0x41de7400.
//
// Solidity: function bondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonitySession) BondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.BondFrom(&_IAutonity.TransactOpts, _account, _validator, _amount)
}

// BondFrom is a paid mutator transaction binding the contract method 0x41de7400.
//
// Solidity: function bondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonityTransactorSession) BondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.BondFrom(&_IAutonity.TransactOpts, _account, _validator, _amount)
}

// ChangeCommissionRate is a paid mutator transaction binding the contract method 0x852c4849.
//
// Solidity: function changeCommissionRate(address _validator, uint256 _rate) returns()
func (_IAutonity *IAutonityTransactor) ChangeCommissionRate(opts *bind.TransactOpts, _validator common.Address, _rate *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "changeCommissionRate", _validator, _rate)
}

// ChangeCommissionRate is a paid mutator transaction binding the contract method 0x852c4849.
//
// Solidity: function changeCommissionRate(address _validator, uint256 _rate) returns()
func (_IAutonity *IAutonitySession) ChangeCommissionRate(_validator common.Address, _rate *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.ChangeCommissionRate(&_IAutonity.TransactOpts, _validator, _rate)
}

// ChangeCommissionRate is a paid mutator transaction binding the contract method 0x852c4849.
//
// Solidity: function changeCommissionRate(address _validator, uint256 _rate) returns()
func (_IAutonity *IAutonityTransactorSession) ChangeCommissionRate(_validator common.Address, _rate *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.ChangeCommissionRate(&_IAutonity.TransactOpts, _validator, _rate)
}

// Jail is a paid mutator transaction binding the contract method 0x154d76d7.
//
// Solidity: function jail(address _nodeAddress, uint256 _jailtime, uint8 _newJailedState) returns(uint256)
func (_IAutonity *IAutonityTransactor) Jail(opts *bind.TransactOpts, _nodeAddress common.Address, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "jail", _nodeAddress, _jailtime, _newJailedState)
}

// Jail is a paid mutator transaction binding the contract method 0x154d76d7.
//
// Solidity: function jail(address _nodeAddress, uint256 _jailtime, uint8 _newJailedState) returns(uint256)
func (_IAutonity *IAutonitySession) Jail(_nodeAddress common.Address, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _IAutonity.Contract.Jail(&_IAutonity.TransactOpts, _nodeAddress, _jailtime, _newJailedState)
}

// Jail is a paid mutator transaction binding the contract method 0x154d76d7.
//
// Solidity: function jail(address _nodeAddress, uint256 _jailtime, uint8 _newJailedState) returns(uint256)
func (_IAutonity *IAutonityTransactorSession) Jail(_nodeAddress common.Address, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _IAutonity.Contract.Jail(&_IAutonity.TransactOpts, _nodeAddress, _jailtime, _newJailedState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x8ef8c2fd.
//
// Solidity: function jailbound(address _nodeAddress, uint8 _newJailboundState) returns()
func (_IAutonity *IAutonityTransactor) Jailbound(opts *bind.TransactOpts, _nodeAddress common.Address, _newJailboundState uint8) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "jailbound", _nodeAddress, _newJailboundState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x8ef8c2fd.
//
// Solidity: function jailbound(address _nodeAddress, uint8 _newJailboundState) returns()
func (_IAutonity *IAutonitySession) Jailbound(_nodeAddress common.Address, _newJailboundState uint8) (*types.Transaction, error) {
	return _IAutonity.Contract.Jailbound(&_IAutonity.TransactOpts, _nodeAddress, _newJailboundState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x8ef8c2fd.
//
// Solidity: function jailbound(address _nodeAddress, uint8 _newJailboundState) returns()
func (_IAutonity *IAutonityTransactorSession) Jailbound(_nodeAddress common.Address, _newJailboundState uint8) (*types.Transaction, error) {
	return _IAutonity.Contract.Jailbound(&_IAutonity.TransactOpts, _nodeAddress, _newJailboundState)
}

// PauseValidator is a paid mutator transaction binding the contract method 0x0ae65e7a.
//
// Solidity: function pauseValidator(address _address) returns()
func (_IAutonity *IAutonityTransactor) PauseValidator(opts *bind.TransactOpts, _address common.Address) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "pauseValidator", _address)
}

// PauseValidator is a paid mutator transaction binding the contract method 0x0ae65e7a.
//
// Solidity: function pauseValidator(address _address) returns()
func (_IAutonity *IAutonitySession) PauseValidator(_address common.Address) (*types.Transaction, error) {
	return _IAutonity.Contract.PauseValidator(&_IAutonity.TransactOpts, _address)
}

// PauseValidator is a paid mutator transaction binding the contract method 0x0ae65e7a.
//
// Solidity: function pauseValidator(address _address) returns()
func (_IAutonity *IAutonityTransactorSession) PauseValidator(_address common.Address) (*types.Transaction, error) {
	return _IAutonity.Contract.PauseValidator(&_IAutonity.TransactOpts, _address)
}

// RegisterValidator is a paid mutator transaction binding the contract method 0x84467fdb.
//
// Solidity: function registerValidator(string _enode, address _oracleAddress, bytes _consensusKey, bytes _signatures) returns()
func (_IAutonity *IAutonityTransactor) RegisterValidator(opts *bind.TransactOpts, _enode string, _oracleAddress common.Address, _consensusKey []byte, _signatures []byte) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "registerValidator", _enode, _oracleAddress, _consensusKey, _signatures)
}

// RegisterValidator is a paid mutator transaction binding the contract method 0x84467fdb.
//
// Solidity: function registerValidator(string _enode, address _oracleAddress, bytes _consensusKey, bytes _signatures) returns()
func (_IAutonity *IAutonitySession) RegisterValidator(_enode string, _oracleAddress common.Address, _consensusKey []byte, _signatures []byte) (*types.Transaction, error) {
	return _IAutonity.Contract.RegisterValidator(&_IAutonity.TransactOpts, _enode, _oracleAddress, _consensusKey, _signatures)
}

// RegisterValidator is a paid mutator transaction binding the contract method 0x84467fdb.
//
// Solidity: function registerValidator(string _enode, address _oracleAddress, bytes _consensusKey, bytes _signatures) returns()
func (_IAutonity *IAutonityTransactorSession) RegisterValidator(_enode string, _oracleAddress common.Address, _consensusKey []byte, _signatures []byte) (*types.Transaction, error) {
	return _IAutonity.Contract.RegisterValidator(&_IAutonity.TransactOpts, _enode, _oracleAddress, _consensusKey, _signatures)
}

// Slash is a paid mutator transaction binding the contract method 0x02fb4d85.
//
// Solidity: function slash(address _nodeAddress, uint256 _slashingRate) returns(uint256 slashingAmount)
func (_IAutonity *IAutonityTransactor) Slash(opts *bind.TransactOpts, _nodeAddress common.Address, _slashingRate *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "slash", _nodeAddress, _slashingRate)
}

// Slash is a paid mutator transaction binding the contract method 0x02fb4d85.
//
// Solidity: function slash(address _nodeAddress, uint256 _slashingRate) returns(uint256 slashingAmount)
func (_IAutonity *IAutonitySession) Slash(_nodeAddress common.Address, _slashingRate *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Slash(&_IAutonity.TransactOpts, _nodeAddress, _slashingRate)
}

// Slash is a paid mutator transaction binding the contract method 0x02fb4d85.
//
// Solidity: function slash(address _nodeAddress, uint256 _slashingRate) returns(uint256 slashingAmount)
func (_IAutonity *IAutonityTransactorSession) Slash(_nodeAddress common.Address, _slashingRate *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Slash(&_IAutonity.TransactOpts, _nodeAddress, _slashingRate)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0x122b4122.
//
// Solidity: function slashAndJail(address _nodeAddress, uint256 _slashingRate, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns(uint256 slashingAmount, uint256 jailReleaseBlock, bool isJailbound)
func (_IAutonity *IAutonityTransactor) SlashAndJail(opts *bind.TransactOpts, _nodeAddress common.Address, _slashingRate *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "slashAndJail", _nodeAddress, _slashingRate, _jailtime, _newJailedState, _newJailboundState)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0x122b4122.
//
// Solidity: function slashAndJail(address _nodeAddress, uint256 _slashingRate, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns(uint256 slashingAmount, uint256 jailReleaseBlock, bool isJailbound)
func (_IAutonity *IAutonitySession) SlashAndJail(_nodeAddress common.Address, _slashingRate *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _IAutonity.Contract.SlashAndJail(&_IAutonity.TransactOpts, _nodeAddress, _slashingRate, _jailtime, _newJailedState, _newJailboundState)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0x122b4122.
//
// Solidity: function slashAndJail(address _nodeAddress, uint256 _slashingRate, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns(uint256 slashingAmount, uint256 jailReleaseBlock, bool isJailbound)
func (_IAutonity *IAutonityTransactorSession) SlashAndJail(_nodeAddress common.Address, _slashingRate *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _IAutonity.Contract.SlashAndJail(&_IAutonity.TransactOpts, _nodeAddress, _slashingRate, _jailtime, _newJailedState, _newJailboundState)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
func (_IAutonity *IAutonityTransactor) Transfer(opts *bind.TransactOpts, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "transfer", recipient, amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
func (_IAutonity *IAutonitySession) Transfer(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Transfer(&_IAutonity.TransactOpts, recipient, amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
func (_IAutonity *IAutonityTransactorSession) Transfer(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Transfer(&_IAutonity.TransactOpts, recipient, amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool)
func (_IAutonity *IAutonityTransactor) TransferFrom(opts *bind.TransactOpts, sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "transferFrom", sender, recipient, amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool)
func (_IAutonity *IAutonitySession) TransferFrom(sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.TransferFrom(&_IAutonity.TransactOpts, sender, recipient, amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool)
func (_IAutonity *IAutonityTransactorSession) TransferFrom(sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.TransferFrom(&_IAutonity.TransactOpts, sender, recipient, amount)
}

// Unbond is a paid mutator transaction binding the contract method 0xa5d059ca.
//
// Solidity: function unbond(address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonityTransactor) Unbond(opts *bind.TransactOpts, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "unbond", _validator, _amount)
}

// Unbond is a paid mutator transaction binding the contract method 0xa5d059ca.
//
// Solidity: function unbond(address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonitySession) Unbond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Unbond(&_IAutonity.TransactOpts, _validator, _amount)
}

// Unbond is a paid mutator transaction binding the contract method 0xa5d059ca.
//
// Solidity: function unbond(address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonityTransactorSession) Unbond(_validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.Unbond(&_IAutonity.TransactOpts, _validator, _amount)
}

// UnbondFrom is a paid mutator transaction binding the contract method 0xa9a7d7c9.
//
// Solidity: function unbondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonityTransactor) UnbondFrom(opts *bind.TransactOpts, _account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "unbondFrom", _account, _validator, _amount)
}

// UnbondFrom is a paid mutator transaction binding the contract method 0xa9a7d7c9.
//
// Solidity: function unbondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonitySession) UnbondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.UnbondFrom(&_IAutonity.TransactOpts, _account, _validator, _amount)
}

// UnbondFrom is a paid mutator transaction binding the contract method 0xa9a7d7c9.
//
// Solidity: function unbondFrom(address _account, address _validator, uint256 _amount) returns(uint256)
func (_IAutonity *IAutonityTransactorSession) UnbondFrom(_account common.Address, _validator common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _IAutonity.Contract.UnbondFrom(&_IAutonity.TransactOpts, _account, _validator, _amount)
}

// UpdateEnode is a paid mutator transaction binding the contract method 0x784304b5.
//
// Solidity: function updateEnode(address _nodeAddress, string _enode) returns()
func (_IAutonity *IAutonityTransactor) UpdateEnode(opts *bind.TransactOpts, _nodeAddress common.Address, _enode string) (*types.Transaction, error) {
	return _IAutonity.contract.Transact(opts, "updateEnode", _nodeAddress, _enode)
}

// UpdateEnode is a paid mutator transaction binding the contract method 0x784304b5.
//
// Solidity: function updateEnode(address _nodeAddress, string _enode) returns()
func (_IAutonity *IAutonitySession) UpdateEnode(_nodeAddress common.Address, _enode string) (*types.Transaction, error) {
	return _IAutonity.Contract.UpdateEnode(&_IAutonity.TransactOpts, _nodeAddress, _enode)
}

// UpdateEnode is a paid mutator transaction binding the contract method 0x784304b5.
//
// Solidity: function updateEnode(address _nodeAddress, string _enode) returns()
func (_IAutonity *IAutonityTransactorSession) UpdateEnode(_nodeAddress common.Address, _enode string) (*types.Transaction, error) {
	return _IAutonity.Contract.UpdateEnode(&_IAutonity.TransactOpts, _nodeAddress, _enode)
}

// IAutonityActivatedValidatorIterator is returned from FilterActivatedValidator and is used to iterate over the raw logs and unpacked data for ActivatedValidator events raised by the IAutonity contract.
type IAutonityActivatedValidatorIterator struct {
	Event *IAutonityActivatedValidator // 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 *IAutonityActivatedValidatorIterator) 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(IAutonityActivatedValidator)
			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(IAutonityActivatedValidator)
		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 *IAutonityActivatedValidatorIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityActivatedValidatorIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityActivatedValidator represents a ActivatedValidator event raised by the IAutonity contract.
type IAutonityActivatedValidator struct {
	Treasury       common.Address
	Addr           common.Address
	EffectiveBlock *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterActivatedValidator is a free log retrieval operation binding the contract event 0x60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5.
//
// Solidity: event ActivatedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_IAutonity *IAutonityFilterer) FilterActivatedValidator(opts *bind.FilterOpts, treasury []common.Address, addr []common.Address) (*IAutonityActivatedValidatorIterator, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "ActivatedValidator", treasuryRule, addrRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityActivatedValidatorIterator{contract: _IAutonity.contract, event: "ActivatedValidator", logs: logs, sub: sub}, nil
}

// WatchActivatedValidator is a free log subscription operation binding the contract event 0x60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5.
//
// Solidity: event ActivatedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_IAutonity *IAutonityFilterer) WatchActivatedValidator(opts *bind.WatchOpts, sink chan<- *IAutonityActivatedValidator, treasury []common.Address, addr []common.Address) (event.Subscription, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "ActivatedValidator", treasuryRule, addrRule)
	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(IAutonityActivatedValidator)
				if err := _IAutonity.contract.UnpackLog(event, "ActivatedValidator", 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
}

// ParseActivatedValidator is a log parse operation binding the contract event 0x60fcbf2d07dc712a93e59fb28f1edb626d7c2497c57ba71a8c0b3999ecb9a3b5.
//
// Solidity: event ActivatedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_IAutonity *IAutonityFilterer) ParseActivatedValidator(log types.Log) (*IAutonityActivatedValidator, error) {
	event := new(IAutonityActivatedValidator)
	if err := _IAutonity.contract.UnpackLog(event, "ActivatedValidator", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IAutonity contract.
type IAutonityApprovalIterator struct {
	Event *IAutonityApproval // 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 *IAutonityApprovalIterator) 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(IAutonityApproval)
			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(IAutonityApproval)
		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 *IAutonityApprovalIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityApprovalIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityApproval represents a Approval event raised by the IAutonity contract.
type IAutonityApproval struct {
	Owner   common.Address
	Spender common.Address
	Value   *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_IAutonity *IAutonityFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*IAutonityApprovalIterator, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityApprovalIterator{contract: _IAutonity.contract, event: "Approval", logs: logs, sub: sub}, nil
}

// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_IAutonity *IAutonityFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IAutonityApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
	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(IAutonityApproval)
				if err := _IAutonity.contract.UnpackLog(event, "Approval", 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
}

// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_IAutonity *IAutonityFilterer) ParseApproval(log types.Log) (*IAutonityApproval, error) {
	event := new(IAutonityApproval)
	if err := _IAutonity.contract.UnpackLog(event, "Approval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityBondingApprovalIterator is returned from FilterBondingApproval and is used to iterate over the raw logs and unpacked data for BondingApproval events raised by the IAutonity contract.
type IAutonityBondingApprovalIterator struct {
	Event *IAutonityBondingApproval // 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 *IAutonityBondingApprovalIterator) 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(IAutonityBondingApproval)
			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(IAutonityBondingApproval)
		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 *IAutonityBondingApprovalIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityBondingApprovalIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityBondingApproval represents a BondingApproval event raised by the IAutonity contract.
type IAutonityBondingApproval struct {
	Owner  common.Address
	Caller common.Address
	Value  *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterBondingApproval is a free log retrieval operation binding the contract event 0x78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea.
//
// Solidity: event BondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_IAutonity *IAutonityFilterer) FilterBondingApproval(opts *bind.FilterOpts, _owner []common.Address, _caller []common.Address) (*IAutonityBondingApprovalIterator, error) {

	var _ownerRule []interface{}
	for _, _ownerItem := range _owner {
		_ownerRule = append(_ownerRule, _ownerItem)
	}
	var _callerRule []interface{}
	for _, _callerItem := range _caller {
		_callerRule = append(_callerRule, _callerItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "BondingApproval", _ownerRule, _callerRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityBondingApprovalIterator{contract: _IAutonity.contract, event: "BondingApproval", logs: logs, sub: sub}, nil
}

// WatchBondingApproval is a free log subscription operation binding the contract event 0x78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea.
//
// Solidity: event BondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_IAutonity *IAutonityFilterer) WatchBondingApproval(opts *bind.WatchOpts, sink chan<- *IAutonityBondingApproval, _owner []common.Address, _caller []common.Address) (event.Subscription, error) {

	var _ownerRule []interface{}
	for _, _ownerItem := range _owner {
		_ownerRule = append(_ownerRule, _ownerItem)
	}
	var _callerRule []interface{}
	for _, _callerItem := range _caller {
		_callerRule = append(_callerRule, _callerItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "BondingApproval", _ownerRule, _callerRule)
	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(IAutonityBondingApproval)
				if err := _IAutonity.contract.UnpackLog(event, "BondingApproval", 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
}

// ParseBondingApproval is a log parse operation binding the contract event 0x78225b0c38a851deb4e94d5318d250e0add756beaec6e85252429c41ed55f8ea.
//
// Solidity: event BondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_IAutonity *IAutonityFilterer) ParseBondingApproval(log types.Log) (*IAutonityBondingApproval, error) {
	event := new(IAutonityBondingApproval)
	if err := _IAutonity.contract.UnpackLog(event, "BondingApproval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityBondingRejectedIterator is returned from FilterBondingRejected and is used to iterate over the raw logs and unpacked data for BondingRejected events raised by the IAutonity contract.
type IAutonityBondingRejectedIterator struct {
	Event *IAutonityBondingRejected // 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 *IAutonityBondingRejectedIterator) 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(IAutonityBondingRejected)
			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(IAutonityBondingRejected)
		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 *IAutonityBondingRejectedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityBondingRejectedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityBondingRejected represents a BondingRejected event raised by the IAutonity contract.
type IAutonityBondingRejected struct {
	Validator common.Address
	Delegator common.Address
	Amount    *big.Int
	State     uint8
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterBondingRejected is a free log retrieval operation binding the contract event 0x1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342.
//
// Solidity: event BondingRejected(address indexed validator, address indexed delegator, uint256 amount, uint8 state)
func (_IAutonity *IAutonityFilterer) FilterBondingRejected(opts *bind.FilterOpts, validator []common.Address, delegator []common.Address) (*IAutonityBondingRejectedIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "BondingRejected", validatorRule, delegatorRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityBondingRejectedIterator{contract: _IAutonity.contract, event: "BondingRejected", logs: logs, sub: sub}, nil
}

// WatchBondingRejected is a free log subscription operation binding the contract event 0x1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342.
//
// Solidity: event BondingRejected(address indexed validator, address indexed delegator, uint256 amount, uint8 state)
func (_IAutonity *IAutonityFilterer) WatchBondingRejected(opts *bind.WatchOpts, sink chan<- *IAutonityBondingRejected, validator []common.Address, delegator []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "BondingRejected", validatorRule, delegatorRule)
	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(IAutonityBondingRejected)
				if err := _IAutonity.contract.UnpackLog(event, "BondingRejected", 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
}

// ParseBondingRejected is a log parse operation binding the contract event 0x1ff2b052afa4bb37ce30d9aaccde416a700b97e632d089111749af937f878342.
//
// Solidity: event BondingRejected(address indexed validator, address indexed delegator, uint256 amount, uint8 state)
func (_IAutonity *IAutonityFilterer) ParseBondingRejected(log types.Log) (*IAutonityBondingRejected, error) {
	event := new(IAutonityBondingRejected)
	if err := _IAutonity.contract.UnpackLog(event, "BondingRejected", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityBurnedStakeIterator is returned from FilterBurnedStake and is used to iterate over the raw logs and unpacked data for BurnedStake events raised by the IAutonity contract.
type IAutonityBurnedStakeIterator struct {
	Event *IAutonityBurnedStake // 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 *IAutonityBurnedStakeIterator) 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(IAutonityBurnedStake)
			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(IAutonityBurnedStake)
		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 *IAutonityBurnedStakeIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityBurnedStakeIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityBurnedStake represents a BurnedStake event raised by the IAutonity contract.
type IAutonityBurnedStake struct {
	Addr   common.Address
	Amount *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterBurnedStake is a free log retrieval operation binding the contract event 0x5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3.
//
// Solidity: event BurnedStake(address indexed addr, uint256 amount)
func (_IAutonity *IAutonityFilterer) FilterBurnedStake(opts *bind.FilterOpts, addr []common.Address) (*IAutonityBurnedStakeIterator, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "BurnedStake", addrRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityBurnedStakeIterator{contract: _IAutonity.contract, event: "BurnedStake", logs: logs, sub: sub}, nil
}

// WatchBurnedStake is a free log subscription operation binding the contract event 0x5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3.
//
// Solidity: event BurnedStake(address indexed addr, uint256 amount)
func (_IAutonity *IAutonityFilterer) WatchBurnedStake(opts *bind.WatchOpts, sink chan<- *IAutonityBurnedStake, addr []common.Address) (event.Subscription, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "BurnedStake", addrRule)
	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(IAutonityBurnedStake)
				if err := _IAutonity.contract.UnpackLog(event, "BurnedStake", 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
}

// ParseBurnedStake is a log parse operation binding the contract event 0x5024dbeedf0c06664c9bd7be836915730c955e936972c020683dadf11d5488a3.
//
// Solidity: event BurnedStake(address indexed addr, uint256 amount)
func (_IAutonity *IAutonityFilterer) ParseBurnedStake(log types.Log) (*IAutonityBurnedStake, error) {
	event := new(IAutonityBurnedStake)
	if err := _IAutonity.contract.UnpackLog(event, "BurnedStake", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityCallFailedIterator is returned from FilterCallFailed and is used to iterate over the raw logs and unpacked data for CallFailed events raised by the IAutonity contract.
type IAutonityCallFailedIterator struct {
	Event *IAutonityCallFailed // 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 *IAutonityCallFailedIterator) 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(IAutonityCallFailed)
			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(IAutonityCallFailed)
		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 *IAutonityCallFailedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityCallFailedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityCallFailed represents a CallFailed event raised by the IAutonity contract.
type IAutonityCallFailed struct {
	To              common.Address
	MethodSignature string
	ReturnData      []byte
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterCallFailed is a free log retrieval operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_IAutonity *IAutonityFilterer) FilterCallFailed(opts *bind.FilterOpts) (*IAutonityCallFailedIterator, error) {

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "CallFailed")
	if err != nil {
		return nil, err
	}
	return &IAutonityCallFailedIterator{contract: _IAutonity.contract, event: "CallFailed", logs: logs, sub: sub}, nil
}

// WatchCallFailed is a free log subscription operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_IAutonity *IAutonityFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *IAutonityCallFailed) (event.Subscription, error) {

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "CallFailed")
	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(IAutonityCallFailed)
				if err := _IAutonity.contract.UnpackLog(event, "CallFailed", 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
}

// ParseCallFailed is a log parse operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_IAutonity *IAutonityFilterer) ParseCallFailed(log types.Log) (*IAutonityCallFailed, error) {
	event := new(IAutonityCallFailed)
	if err := _IAutonity.contract.UnpackLog(event, "CallFailed", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityCommissionRateChangeIterator is returned from FilterCommissionRateChange and is used to iterate over the raw logs and unpacked data for CommissionRateChange events raised by the IAutonity contract.
type IAutonityCommissionRateChangeIterator struct {
	Event *IAutonityCommissionRateChange // 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 *IAutonityCommissionRateChangeIterator) 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(IAutonityCommissionRateChange)
			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(IAutonityCommissionRateChange)
		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 *IAutonityCommissionRateChangeIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityCommissionRateChangeIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityCommissionRateChange represents a CommissionRateChange event raised by the IAutonity contract.
type IAutonityCommissionRateChange struct {
	Validator common.Address
	Rate      *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterCommissionRateChange is a free log retrieval operation binding the contract event 0x4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf.
//
// Solidity: event CommissionRateChange(address indexed validator, uint256 rate)
func (_IAutonity *IAutonityFilterer) FilterCommissionRateChange(opts *bind.FilterOpts, validator []common.Address) (*IAutonityCommissionRateChangeIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "CommissionRateChange", validatorRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityCommissionRateChangeIterator{contract: _IAutonity.contract, event: "CommissionRateChange", logs: logs, sub: sub}, nil
}

// WatchCommissionRateChange is a free log subscription operation binding the contract event 0x4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf.
//
// Solidity: event CommissionRateChange(address indexed validator, uint256 rate)
func (_IAutonity *IAutonityFilterer) WatchCommissionRateChange(opts *bind.WatchOpts, sink chan<- *IAutonityCommissionRateChange, validator []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "CommissionRateChange", validatorRule)
	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(IAutonityCommissionRateChange)
				if err := _IAutonity.contract.UnpackLog(event, "CommissionRateChange", 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
}

// ParseCommissionRateChange is a log parse operation binding the contract event 0x4fba51c92fa3d6ad8374d394f6cd5766857552e153d7384a8f23aa4ce9a8a7cf.
//
// Solidity: event CommissionRateChange(address indexed validator, uint256 rate)
func (_IAutonity *IAutonityFilterer) ParseCommissionRateChange(log types.Log) (*IAutonityCommissionRateChange, error) {
	event := new(IAutonityCommissionRateChange)
	if err := _IAutonity.contract.UnpackLog(event, "CommissionRateChange", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityEip1559ParamsUpdateIterator is returned from FilterEip1559ParamsUpdate and is used to iterate over the raw logs and unpacked data for Eip1559ParamsUpdate events raised by the IAutonity contract.
type IAutonityEip1559ParamsUpdateIterator struct {
	Event *IAutonityEip1559ParamsUpdate // 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 *IAutonityEip1559ParamsUpdateIterator) 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(IAutonityEip1559ParamsUpdate)
			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(IAutonityEip1559ParamsUpdate)
		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 *IAutonityEip1559ParamsUpdateIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityEip1559ParamsUpdateIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityEip1559ParamsUpdate represents a Eip1559ParamsUpdate event raised by the IAutonity contract.
type IAutonityEip1559ParamsUpdate struct {
	OldParams IAutonityEip1559
	NewParams IAutonityEip1559
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterEip1559ParamsUpdate is a free log retrieval operation binding the contract event 0xa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc.
//
// Solidity: event Eip1559ParamsUpdate((uint256,uint256,uint256,uint256) oldParams, (uint256,uint256,uint256,uint256) newParams)
func (_IAutonity *IAutonityFilterer) FilterEip1559ParamsUpdate(opts *bind.FilterOpts) (*IAutonityEip1559ParamsUpdateIterator, error) {

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "Eip1559ParamsUpdate")
	if err != nil {
		return nil, err
	}
	return &IAutonityEip1559ParamsUpdateIterator{contract: _IAutonity.contract, event: "Eip1559ParamsUpdate", logs: logs, sub: sub}, nil
}

// WatchEip1559ParamsUpdate is a free log subscription operation binding the contract event 0xa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc.
//
// Solidity: event Eip1559ParamsUpdate((uint256,uint256,uint256,uint256) oldParams, (uint256,uint256,uint256,uint256) newParams)
func (_IAutonity *IAutonityFilterer) WatchEip1559ParamsUpdate(opts *bind.WatchOpts, sink chan<- *IAutonityEip1559ParamsUpdate) (event.Subscription, error) {

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "Eip1559ParamsUpdate")
	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(IAutonityEip1559ParamsUpdate)
				if err := _IAutonity.contract.UnpackLog(event, "Eip1559ParamsUpdate", 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
}

// ParseEip1559ParamsUpdate is a log parse operation binding the contract event 0xa1a63f0900be3abc55a58106fb99ccb53c1cdeaee2488038528f520d142563cc.
//
// Solidity: event Eip1559ParamsUpdate((uint256,uint256,uint256,uint256) oldParams, (uint256,uint256,uint256,uint256) newParams)
func (_IAutonity *IAutonityFilterer) ParseEip1559ParamsUpdate(log types.Log) (*IAutonityEip1559ParamsUpdate, error) {
	event := new(IAutonityEip1559ParamsUpdate)
	if err := _IAutonity.contract.UnpackLog(event, "Eip1559ParamsUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityEnodeUpdateIterator is returned from FilterEnodeUpdate and is used to iterate over the raw logs and unpacked data for EnodeUpdate events raised by the IAutonity contract.
type IAutonityEnodeUpdateIterator struct {
	Event *IAutonityEnodeUpdate // 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 *IAutonityEnodeUpdateIterator) 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(IAutonityEnodeUpdate)
			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(IAutonityEnodeUpdate)
		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 *IAutonityEnodeUpdateIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityEnodeUpdateIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityEnodeUpdate represents a EnodeUpdate event raised by the IAutonity contract.
type IAutonityEnodeUpdate struct {
	Validator common.Address
	OldEnode  string
	NewEnode  string
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterEnodeUpdate is a free log retrieval operation binding the contract event 0x0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b.
//
// Solidity: event EnodeUpdate(address validator, string oldEnode, string newEnode)
func (_IAutonity *IAutonityFilterer) FilterEnodeUpdate(opts *bind.FilterOpts) (*IAutonityEnodeUpdateIterator, error) {

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "EnodeUpdate")
	if err != nil {
		return nil, err
	}
	return &IAutonityEnodeUpdateIterator{contract: _IAutonity.contract, event: "EnodeUpdate", logs: logs, sub: sub}, nil
}

// WatchEnodeUpdate is a free log subscription operation binding the contract event 0x0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b.
//
// Solidity: event EnodeUpdate(address validator, string oldEnode, string newEnode)
func (_IAutonity *IAutonityFilterer) WatchEnodeUpdate(opts *bind.WatchOpts, sink chan<- *IAutonityEnodeUpdate) (event.Subscription, error) {

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "EnodeUpdate")
	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(IAutonityEnodeUpdate)
				if err := _IAutonity.contract.UnpackLog(event, "EnodeUpdate", 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
}

// ParseEnodeUpdate is a log parse operation binding the contract event 0x0693af84e99c5d55723f139a6badcfffa980bb354cf9c32bd5da745e9edaa46b.
//
// Solidity: event EnodeUpdate(address validator, string oldEnode, string newEnode)
func (_IAutonity *IAutonityFilterer) ParseEnodeUpdate(log types.Log) (*IAutonityEnodeUpdate, error) {
	event := new(IAutonityEnodeUpdate)
	if err := _IAutonity.contract.UnpackLog(event, "EnodeUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityEpochPeriodUpdatedIterator is returned from FilterEpochPeriodUpdated and is used to iterate over the raw logs and unpacked data for EpochPeriodUpdated events raised by the IAutonity contract.
type IAutonityEpochPeriodUpdatedIterator struct {
	Event *IAutonityEpochPeriodUpdated // 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 *IAutonityEpochPeriodUpdatedIterator) 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(IAutonityEpochPeriodUpdated)
			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(IAutonityEpochPeriodUpdated)
		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 *IAutonityEpochPeriodUpdatedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityEpochPeriodUpdatedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityEpochPeriodUpdated represents a EpochPeriodUpdated event raised by the IAutonity contract.
type IAutonityEpochPeriodUpdated struct {
	Period         *big.Int
	AppliedAtBlock *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterEpochPeriodUpdated is a free log retrieval operation binding the contract event 0x2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7.
//
// Solidity: event EpochPeriodUpdated(uint256 period, uint256 appliedAtBlock)
func (_IAutonity *IAutonityFilterer) FilterEpochPeriodUpdated(opts *bind.FilterOpts) (*IAutonityEpochPeriodUpdatedIterator, error) {

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "EpochPeriodUpdated")
	if err != nil {
		return nil, err
	}
	return &IAutonityEpochPeriodUpdatedIterator{contract: _IAutonity.contract, event: "EpochPeriodUpdated", logs: logs, sub: sub}, nil
}

// WatchEpochPeriodUpdated is a free log subscription operation binding the contract event 0x2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7.
//
// Solidity: event EpochPeriodUpdated(uint256 period, uint256 appliedAtBlock)
func (_IAutonity *IAutonityFilterer) WatchEpochPeriodUpdated(opts *bind.WatchOpts, sink chan<- *IAutonityEpochPeriodUpdated) (event.Subscription, error) {

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "EpochPeriodUpdated")
	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(IAutonityEpochPeriodUpdated)
				if err := _IAutonity.contract.UnpackLog(event, "EpochPeriodUpdated", 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
}

// ParseEpochPeriodUpdated is a log parse operation binding the contract event 0x2eea6438d890c8603d4df81ad1bad2a4ea45c02b4837165f461ff3c81603abc7.
//
// Solidity: event EpochPeriodUpdated(uint256 period, uint256 appliedAtBlock)
func (_IAutonity *IAutonityFilterer) ParseEpochPeriodUpdated(log types.Log) (*IAutonityEpochPeriodUpdated, error) {
	event := new(IAutonityEpochPeriodUpdated)
	if err := _IAutonity.contract.UnpackLog(event, "EpochPeriodUpdated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityMintedStakeIterator is returned from FilterMintedStake and is used to iterate over the raw logs and unpacked data for MintedStake events raised by the IAutonity contract.
type IAutonityMintedStakeIterator struct {
	Event *IAutonityMintedStake // 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 *IAutonityMintedStakeIterator) 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(IAutonityMintedStake)
			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(IAutonityMintedStake)
		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 *IAutonityMintedStakeIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityMintedStakeIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityMintedStake represents a MintedStake event raised by the IAutonity contract.
type IAutonityMintedStake struct {
	Addr   common.Address
	Amount *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterMintedStake is a free log retrieval operation binding the contract event 0x48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf.
//
// Solidity: event MintedStake(address indexed addr, uint256 amount)
func (_IAutonity *IAutonityFilterer) FilterMintedStake(opts *bind.FilterOpts, addr []common.Address) (*IAutonityMintedStakeIterator, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "MintedStake", addrRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityMintedStakeIterator{contract: _IAutonity.contract, event: "MintedStake", logs: logs, sub: sub}, nil
}

// WatchMintedStake is a free log subscription operation binding the contract event 0x48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf.
//
// Solidity: event MintedStake(address indexed addr, uint256 amount)
func (_IAutonity *IAutonityFilterer) WatchMintedStake(opts *bind.WatchOpts, sink chan<- *IAutonityMintedStake, addr []common.Address) (event.Subscription, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "MintedStake", addrRule)
	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(IAutonityMintedStake)
				if err := _IAutonity.contract.UnpackLog(event, "MintedStake", 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
}

// ParseMintedStake is a log parse operation binding the contract event 0x48490b4407bb949b708ec5f514b4167f08f4969baaf78d53b05028adf369bfcf.
//
// Solidity: event MintedStake(address indexed addr, uint256 amount)
func (_IAutonity *IAutonityFilterer) ParseMintedStake(log types.Log) (*IAutonityMintedStake, error) {
	event := new(IAutonityMintedStake)
	if err := _IAutonity.contract.UnpackLog(event, "MintedStake", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityNewBondingRequestIterator is returned from FilterNewBondingRequest and is used to iterate over the raw logs and unpacked data for NewBondingRequest events raised by the IAutonity contract.
type IAutonityNewBondingRequestIterator struct {
	Event *IAutonityNewBondingRequest // 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 *IAutonityNewBondingRequestIterator) 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(IAutonityNewBondingRequest)
			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(IAutonityNewBondingRequest)
		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 *IAutonityNewBondingRequestIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityNewBondingRequestIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityNewBondingRequest represents a NewBondingRequest event raised by the IAutonity contract.
type IAutonityNewBondingRequest struct {
	Validator     common.Address
	Delegator     common.Address
	Caller        common.Address
	SelfBonded    bool
	Amount        *big.Int
	HeadBondingID *big.Int
	Raw           types.Log // Blockchain specific contextual infos
}

// FilterNewBondingRequest is a free log retrieval operation binding the contract event 0xcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2.
//
// Solidity: event NewBondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headBondingID)
func (_IAutonity *IAutonityFilterer) FilterNewBondingRequest(opts *bind.FilterOpts, validator []common.Address, delegator []common.Address, caller []common.Address) (*IAutonityNewBondingRequestIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "NewBondingRequest", validatorRule, delegatorRule, callerRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityNewBondingRequestIterator{contract: _IAutonity.contract, event: "NewBondingRequest", logs: logs, sub: sub}, nil
}

// WatchNewBondingRequest is a free log subscription operation binding the contract event 0xcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2.
//
// Solidity: event NewBondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headBondingID)
func (_IAutonity *IAutonityFilterer) WatchNewBondingRequest(opts *bind.WatchOpts, sink chan<- *IAutonityNewBondingRequest, validator []common.Address, delegator []common.Address, caller []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "NewBondingRequest", validatorRule, delegatorRule, callerRule)
	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(IAutonityNewBondingRequest)
				if err := _IAutonity.contract.UnpackLog(event, "NewBondingRequest", 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
}

// ParseNewBondingRequest is a log parse operation binding the contract event 0xcedee1b81e707f05d3f5f6b965053c24ce7759214e4886d87c02e0261367d1f2.
//
// Solidity: event NewBondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headBondingID)
func (_IAutonity *IAutonityFilterer) ParseNewBondingRequest(log types.Log) (*IAutonityNewBondingRequest, error) {
	event := new(IAutonityNewBondingRequest)
	if err := _IAutonity.contract.UnpackLog(event, "NewBondingRequest", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityNewEpochIterator is returned from FilterNewEpoch and is used to iterate over the raw logs and unpacked data for NewEpoch events raised by the IAutonity contract.
type IAutonityNewEpochIterator struct {
	Event *IAutonityNewEpoch // 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 *IAutonityNewEpochIterator) 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(IAutonityNewEpoch)
			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(IAutonityNewEpoch)
		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 *IAutonityNewEpochIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityNewEpochIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityNewEpoch represents a NewEpoch event raised by the IAutonity contract.
type IAutonityNewEpoch struct {
	Epoch            *big.Int
	InflationReserve *big.Int
	StakeCirculating *big.Int
	Raw              types.Log // Blockchain specific contextual infos
}

// FilterNewEpoch is a free log retrieval operation binding the contract event 0x3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b58.
//
// Solidity: event NewEpoch(uint256 epoch, uint256 inflationReserve, uint256 stakeCirculating)
func (_IAutonity *IAutonityFilterer) FilterNewEpoch(opts *bind.FilterOpts) (*IAutonityNewEpochIterator, error) {

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "NewEpoch")
	if err != nil {
		return nil, err
	}
	return &IAutonityNewEpochIterator{contract: _IAutonity.contract, event: "NewEpoch", logs: logs, sub: sub}, nil
}

// WatchNewEpoch is a free log subscription operation binding the contract event 0x3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b58.
//
// Solidity: event NewEpoch(uint256 epoch, uint256 inflationReserve, uint256 stakeCirculating)
func (_IAutonity *IAutonityFilterer) WatchNewEpoch(opts *bind.WatchOpts, sink chan<- *IAutonityNewEpoch) (event.Subscription, error) {

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "NewEpoch")
	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(IAutonityNewEpoch)
				if err := _IAutonity.contract.UnpackLog(event, "NewEpoch", 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
}

// ParseNewEpoch is a log parse operation binding the contract event 0x3bb7b347508b7c148ec2094ac60d2e3d8b7595421025643f08b45cb78b326b58.
//
// Solidity: event NewEpoch(uint256 epoch, uint256 inflationReserve, uint256 stakeCirculating)
func (_IAutonity *IAutonityFilterer) ParseNewEpoch(log types.Log) (*IAutonityNewEpoch, error) {
	event := new(IAutonityNewEpoch)
	if err := _IAutonity.contract.UnpackLog(event, "NewEpoch", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityNewUnbondingRequestIterator is returned from FilterNewUnbondingRequest and is used to iterate over the raw logs and unpacked data for NewUnbondingRequest events raised by the IAutonity contract.
type IAutonityNewUnbondingRequestIterator struct {
	Event *IAutonityNewUnbondingRequest // 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 *IAutonityNewUnbondingRequestIterator) 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(IAutonityNewUnbondingRequest)
			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(IAutonityNewUnbondingRequest)
		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 *IAutonityNewUnbondingRequestIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityNewUnbondingRequestIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityNewUnbondingRequest represents a NewUnbondingRequest event raised by the IAutonity contract.
type IAutonityNewUnbondingRequest struct {
	Validator       common.Address
	Delegator       common.Address
	Caller          common.Address
	SelfBonded      bool
	Amount          *big.Int
	HeadUnbondingID *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterNewUnbondingRequest is a free log retrieval operation binding the contract event 0x58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c.
//
// Solidity: event NewUnbondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headUnbondingID)
func (_IAutonity *IAutonityFilterer) FilterNewUnbondingRequest(opts *bind.FilterOpts, validator []common.Address, delegator []common.Address, caller []common.Address) (*IAutonityNewUnbondingRequestIterator, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "NewUnbondingRequest", validatorRule, delegatorRule, callerRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityNewUnbondingRequestIterator{contract: _IAutonity.contract, event: "NewUnbondingRequest", logs: logs, sub: sub}, nil
}

// WatchNewUnbondingRequest is a free log subscription operation binding the contract event 0x58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c.
//
// Solidity: event NewUnbondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headUnbondingID)
func (_IAutonity *IAutonityFilterer) WatchNewUnbondingRequest(opts *bind.WatchOpts, sink chan<- *IAutonityNewUnbondingRequest, validator []common.Address, delegator []common.Address, caller []common.Address) (event.Subscription, error) {

	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}
	var delegatorRule []interface{}
	for _, delegatorItem := range delegator {
		delegatorRule = append(delegatorRule, delegatorItem)
	}
	var callerRule []interface{}
	for _, callerItem := range caller {
		callerRule = append(callerRule, callerItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "NewUnbondingRequest", validatorRule, delegatorRule, callerRule)
	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(IAutonityNewUnbondingRequest)
				if err := _IAutonity.contract.UnpackLog(event, "NewUnbondingRequest", 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
}

// ParseNewUnbondingRequest is a log parse operation binding the contract event 0x58cac3f318ed4be30304429f66e0d6794a95041b92ebe8d35ec0d0abcf1b593c.
//
// Solidity: event NewUnbondingRequest(address indexed validator, address indexed delegator, address indexed caller, bool selfBonded, uint256 amount, uint256 headUnbondingID)
func (_IAutonity *IAutonityFilterer) ParseNewUnbondingRequest(log types.Log) (*IAutonityNewUnbondingRequest, error) {
	event := new(IAutonityNewUnbondingRequest)
	if err := _IAutonity.contract.UnpackLog(event, "NewUnbondingRequest", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityPausedValidatorIterator is returned from FilterPausedValidator and is used to iterate over the raw logs and unpacked data for PausedValidator events raised by the IAutonity contract.
type IAutonityPausedValidatorIterator struct {
	Event *IAutonityPausedValidator // 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 *IAutonityPausedValidatorIterator) 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(IAutonityPausedValidator)
			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(IAutonityPausedValidator)
		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 *IAutonityPausedValidatorIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityPausedValidatorIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityPausedValidator represents a PausedValidator event raised by the IAutonity contract.
type IAutonityPausedValidator struct {
	Treasury       common.Address
	Addr           common.Address
	EffectiveBlock *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterPausedValidator is a free log retrieval operation binding the contract event 0x75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c.
//
// Solidity: event PausedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_IAutonity *IAutonityFilterer) FilterPausedValidator(opts *bind.FilterOpts, treasury []common.Address, addr []common.Address) (*IAutonityPausedValidatorIterator, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "PausedValidator", treasuryRule, addrRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityPausedValidatorIterator{contract: _IAutonity.contract, event: "PausedValidator", logs: logs, sub: sub}, nil
}

// WatchPausedValidator is a free log subscription operation binding the contract event 0x75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c.
//
// Solidity: event PausedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_IAutonity *IAutonityFilterer) WatchPausedValidator(opts *bind.WatchOpts, sink chan<- *IAutonityPausedValidator, treasury []common.Address, addr []common.Address) (event.Subscription, error) {

	var treasuryRule []interface{}
	for _, treasuryItem := range treasury {
		treasuryRule = append(treasuryRule, treasuryItem)
	}
	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "PausedValidator", treasuryRule, addrRule)
	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(IAutonityPausedValidator)
				if err := _IAutonity.contract.UnpackLog(event, "PausedValidator", 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
}

// ParsePausedValidator is a log parse operation binding the contract event 0x75bdcdbe540758778e669d108fbcb7ede734f27f46e4e5525eeb8ecf91849a9c.
//
// Solidity: event PausedValidator(address indexed treasury, address indexed addr, uint256 effectiveBlock)
func (_IAutonity *IAutonityFilterer) ParsePausedValidator(log types.Log) (*IAutonityPausedValidator, error) {
	event := new(IAutonityPausedValidator)
	if err := _IAutonity.contract.UnpackLog(event, "PausedValidator", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityRegisteredValidatorIterator is returned from FilterRegisteredValidator and is used to iterate over the raw logs and unpacked data for RegisteredValidator events raised by the IAutonity contract.
type IAutonityRegisteredValidatorIterator struct {
	Event *IAutonityRegisteredValidator // 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 *IAutonityRegisteredValidatorIterator) 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(IAutonityRegisteredValidator)
			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(IAutonityRegisteredValidator)
		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 *IAutonityRegisteredValidatorIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityRegisteredValidatorIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityRegisteredValidator represents a RegisteredValidator event raised by the IAutonity contract.
type IAutonityRegisteredValidator struct {
	Treasury            common.Address
	Addr                common.Address
	OracleAddress       common.Address
	Enode               string
	LiquidStateContract common.Address
	Raw                 types.Log // Blockchain specific contextual infos
}

// FilterRegisteredValidator is a free log retrieval operation binding the contract event 0x8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c.
//
// Solidity: event RegisteredValidator(address treasury, address addr, address oracleAddress, string enode, address liquidStateContract)
func (_IAutonity *IAutonityFilterer) FilterRegisteredValidator(opts *bind.FilterOpts) (*IAutonityRegisteredValidatorIterator, error) {

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "RegisteredValidator")
	if err != nil {
		return nil, err
	}
	return &IAutonityRegisteredValidatorIterator{contract: _IAutonity.contract, event: "RegisteredValidator", logs: logs, sub: sub}, nil
}

// WatchRegisteredValidator is a free log subscription operation binding the contract event 0x8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c.
//
// Solidity: event RegisteredValidator(address treasury, address addr, address oracleAddress, string enode, address liquidStateContract)
func (_IAutonity *IAutonityFilterer) WatchRegisteredValidator(opts *bind.WatchOpts, sink chan<- *IAutonityRegisteredValidator) (event.Subscription, error) {

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "RegisteredValidator")
	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(IAutonityRegisteredValidator)
				if err := _IAutonity.contract.UnpackLog(event, "RegisteredValidator", 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
}

// ParseRegisteredValidator is a log parse operation binding the contract event 0x8ad8bd2eb6950e5f332fd3a6dca48cb358ecfe3057848902b98cbdfe455c915c.
//
// Solidity: event RegisteredValidator(address treasury, address addr, address oracleAddress, string enode, address liquidStateContract)
func (_IAutonity *IAutonityFilterer) ParseRegisteredValidator(log types.Log) (*IAutonityRegisteredValidator, error) {
	event := new(IAutonityRegisteredValidator)
	if err := _IAutonity.contract.UnpackLog(event, "RegisteredValidator", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityRewardedIterator is returned from FilterRewarded and is used to iterate over the raw logs and unpacked data for Rewarded events raised by the IAutonity contract.
type IAutonityRewardedIterator struct {
	Event *IAutonityRewarded // 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 *IAutonityRewardedIterator) 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(IAutonityRewarded)
			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(IAutonityRewarded)
		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 *IAutonityRewardedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityRewardedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityRewarded represents a Rewarded event raised by the IAutonity contract.
type IAutonityRewarded struct {
	Addr               common.Address
	AtnSelfAmount      *big.Int
	AtnDelegatedAmount *big.Int
	NtnSelfAmount      *big.Int
	NtnDelegatedAmount *big.Int
	Raw                types.Log // Blockchain specific contextual infos
}

// FilterRewarded is a free log retrieval operation binding the contract event 0x5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d5.
//
// Solidity: event Rewarded(address indexed addr, uint256 atnSelfAmount, uint256 atnDelegatedAmount, uint256 ntnSelfAmount, uint256 ntnDelegatedAmount)
func (_IAutonity *IAutonityFilterer) FilterRewarded(opts *bind.FilterOpts, addr []common.Address) (*IAutonityRewardedIterator, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "Rewarded", addrRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityRewardedIterator{contract: _IAutonity.contract, event: "Rewarded", logs: logs, sub: sub}, nil
}

// WatchRewarded is a free log subscription operation binding the contract event 0x5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d5.
//
// Solidity: event Rewarded(address indexed addr, uint256 atnSelfAmount, uint256 atnDelegatedAmount, uint256 ntnSelfAmount, uint256 ntnDelegatedAmount)
func (_IAutonity *IAutonityFilterer) WatchRewarded(opts *bind.WatchOpts, sink chan<- *IAutonityRewarded, addr []common.Address) (event.Subscription, error) {

	var addrRule []interface{}
	for _, addrItem := range addr {
		addrRule = append(addrRule, addrItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "Rewarded", addrRule)
	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(IAutonityRewarded)
				if err := _IAutonity.contract.UnpackLog(event, "Rewarded", 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
}

// ParseRewarded is a log parse operation binding the contract event 0x5d4e9c803c111cc5e507b1cd7ffb638d0084c4d0696bb89a39434637ce31b4d5.
//
// Solidity: event Rewarded(address indexed addr, uint256 atnSelfAmount, uint256 atnDelegatedAmount, uint256 ntnSelfAmount, uint256 ntnDelegatedAmount)
func (_IAutonity *IAutonityFilterer) ParseRewarded(log types.Log) (*IAutonityRewarded, error) {
	event := new(IAutonityRewarded)
	if err := _IAutonity.contract.UnpackLog(event, "Rewarded", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IAutonityTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IAutonity contract.
type IAutonityTransferIterator struct {
	Event *IAutonityTransfer // 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 *IAutonityTransferIterator) 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(IAutonityTransfer)
			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(IAutonityTransfer)
		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 *IAutonityTransferIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IAutonityTransferIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IAutonityTransfer represents a Transfer event raised by the IAutonity contract.
type IAutonityTransfer struct {
	From  common.Address
	To    common.Address
	Value *big.Int
	Raw   types.Log // Blockchain specific contextual infos
}

// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_IAutonity *IAutonityFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*IAutonityTransferIterator, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _IAutonity.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
	if err != nil {
		return nil, err
	}
	return &IAutonityTransferIterator{contract: _IAutonity.contract, event: "Transfer", logs: logs, sub: sub}, nil
}

// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_IAutonity *IAutonityFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IAutonityTransfer, from []common.Address, to []common.Address) (event.Subscription, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _IAutonity.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
	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(IAutonityTransfer)
				if err := _IAutonity.contract.UnpackLog(event, "Transfer", 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
}

// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_IAutonity *IAutonityFilterer) ParseTransfer(log types.Log) (*IAutonityTransfer, error) {
	event := new(IAutonityTransfer)
	if err := _IAutonity.contract.UnpackLog(event, "Transfer", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IConfigEventsMetaData contains all meta data concerning the IConfigEvents contract.
var IConfigEventsMetaData = &bind.MetaData{
	ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"}]",
}

// IConfigEventsABI is the input ABI used to generate the binding from.
// Deprecated: Use IConfigEventsMetaData.ABI instead.
var IConfigEventsABI = IConfigEventsMetaData.ABI

// IConfigEvents is an auto generated Go binding around an Ethereum contract.
type IConfigEvents struct {
	IConfigEventsCaller     // Read-only binding to the contract
	IConfigEventsTransactor // Write-only binding to the contract
	IConfigEventsFilterer   // Log filterer for contract events
}

// IConfigEventsCaller is an auto generated read-only Go binding around an Ethereum contract.
type IConfigEventsCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IConfigEventsTransactor is an auto generated write-only Go binding around an Ethereum contract.
type IConfigEventsTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IConfigEventsFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type IConfigEventsFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IConfigEventsSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type IConfigEventsSession struct {
	Contract     *IConfigEvents    // 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
}

// IConfigEventsCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type IConfigEventsCallerSession struct {
	Contract *IConfigEventsCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts        // Call options to use throughout this session
}

// IConfigEventsTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type IConfigEventsTransactorSession struct {
	Contract     *IConfigEventsTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts        // Transaction auth options to use throughout this session
}

// IConfigEventsRaw is an auto generated low-level Go binding around an Ethereum contract.
type IConfigEventsRaw struct {
	Contract *IConfigEvents // Generic contract binding to access the raw methods on
}

// IConfigEventsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IConfigEventsCallerRaw struct {
	Contract *IConfigEventsCaller // Generic read-only contract binding to access the raw methods on
}

// IConfigEventsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IConfigEventsTransactorRaw struct {
	Contract *IConfigEventsTransactor // Generic write-only contract binding to access the raw methods on
}

// NewIConfigEvents creates a new instance of IConfigEvents, bound to a specific deployed contract.
func NewIConfigEvents(address common.Address, backend bind.ContractBackend) (*IConfigEvents, error) {
	contract, err := bindIConfigEvents(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IConfigEvents{IConfigEventsCaller: IConfigEventsCaller{contract: contract}, IConfigEventsTransactor: IConfigEventsTransactor{contract: contract}, IConfigEventsFilterer: IConfigEventsFilterer{contract: contract}}, nil
}

// NewIConfigEventsCaller creates a new read-only instance of IConfigEvents, bound to a specific deployed contract.
func NewIConfigEventsCaller(address common.Address, caller bind.ContractCaller) (*IConfigEventsCaller, error) {
	contract, err := bindIConfigEvents(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IConfigEventsCaller{contract: contract}, nil
}

// NewIConfigEventsTransactor creates a new write-only instance of IConfigEvents, bound to a specific deployed contract.
func NewIConfigEventsTransactor(address common.Address, transactor bind.ContractTransactor) (*IConfigEventsTransactor, error) {
	contract, err := bindIConfigEvents(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IConfigEventsTransactor{contract: contract}, nil
}

// NewIConfigEventsFilterer creates a new log filterer instance of IConfigEvents, bound to a specific deployed contract.
func NewIConfigEventsFilterer(address common.Address, filterer bind.ContractFilterer) (*IConfigEventsFilterer, error) {
	contract, err := bindIConfigEvents(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IConfigEventsFilterer{contract: contract}, nil
}

// bindIConfigEvents binds a generic wrapper to an already deployed contract.
func bindIConfigEvents(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IConfigEventsABI))
	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 (_IConfigEvents *IConfigEventsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IConfigEvents.Contract.IConfigEventsCaller.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 (_IConfigEvents *IConfigEventsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IConfigEvents.Contract.IConfigEventsTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IConfigEvents *IConfigEventsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IConfigEvents.Contract.IConfigEventsTransactor.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 (_IConfigEvents *IConfigEventsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IConfigEvents.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 (_IConfigEvents *IConfigEventsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IConfigEvents.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IConfigEvents *IConfigEventsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IConfigEvents.Contract.contract.Transact(opts, method, params...)
}

// IConfigEventsConfigUpdateAddressIterator is returned from FilterConfigUpdateAddress and is used to iterate over the raw logs and unpacked data for ConfigUpdateAddress events raised by the IConfigEvents contract.
type IConfigEventsConfigUpdateAddressIterator struct {
	Event *IConfigEventsConfigUpdateAddress // 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 *IConfigEventsConfigUpdateAddressIterator) 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(IConfigEventsConfigUpdateAddress)
			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(IConfigEventsConfigUpdateAddress)
		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 *IConfigEventsConfigUpdateAddressIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IConfigEventsConfigUpdateAddressIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IConfigEventsConfigUpdateAddress represents a ConfigUpdateAddress event raised by the IConfigEvents contract.
type IConfigEventsConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*IConfigEventsConfigUpdateAddressIterator, error) {

	logs, sub, err := _IConfigEvents.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &IConfigEventsConfigUpdateAddressIterator{contract: _IConfigEvents.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *IConfigEventsConfigUpdateAddress) (event.Subscription, error) {

	logs, sub, err := _IConfigEvents.contract.WatchLogs(opts, "ConfigUpdateAddress")
	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(IConfigEventsConfigUpdateAddress)
				if err := _IConfigEvents.contract.UnpackLog(event, "ConfigUpdateAddress", 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
}

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) ParseConfigUpdateAddress(log types.Log) (*IConfigEventsConfigUpdateAddress, error) {
	event := new(IConfigEventsConfigUpdateAddress)
	if err := _IConfigEvents.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IConfigEventsConfigUpdateBoolIterator is returned from FilterConfigUpdateBool and is used to iterate over the raw logs and unpacked data for ConfigUpdateBool events raised by the IConfigEvents contract.
type IConfigEventsConfigUpdateBoolIterator struct {
	Event *IConfigEventsConfigUpdateBool // 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 *IConfigEventsConfigUpdateBoolIterator) 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(IConfigEventsConfigUpdateBool)
			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(IConfigEventsConfigUpdateBool)
		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 *IConfigEventsConfigUpdateBoolIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IConfigEventsConfigUpdateBoolIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IConfigEventsConfigUpdateBool represents a ConfigUpdateBool event raised by the IConfigEvents contract.
type IConfigEventsConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*IConfigEventsConfigUpdateBoolIterator, error) {

	logs, sub, err := _IConfigEvents.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &IConfigEventsConfigUpdateBoolIterator{contract: _IConfigEvents.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *IConfigEventsConfigUpdateBool) (event.Subscription, error) {

	logs, sub, err := _IConfigEvents.contract.WatchLogs(opts, "ConfigUpdateBool")
	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(IConfigEventsConfigUpdateBool)
				if err := _IConfigEvents.contract.UnpackLog(event, "ConfigUpdateBool", 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
}

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) ParseConfigUpdateBool(log types.Log) (*IConfigEventsConfigUpdateBool, error) {
	event := new(IConfigEventsConfigUpdateBool)
	if err := _IConfigEvents.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IConfigEventsConfigUpdateIntIterator is returned from FilterConfigUpdateInt and is used to iterate over the raw logs and unpacked data for ConfigUpdateInt events raised by the IConfigEvents contract.
type IConfigEventsConfigUpdateIntIterator struct {
	Event *IConfigEventsConfigUpdateInt // 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 *IConfigEventsConfigUpdateIntIterator) 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(IConfigEventsConfigUpdateInt)
			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(IConfigEventsConfigUpdateInt)
		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 *IConfigEventsConfigUpdateIntIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IConfigEventsConfigUpdateIntIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IConfigEventsConfigUpdateInt represents a ConfigUpdateInt event raised by the IConfigEvents contract.
type IConfigEventsConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*IConfigEventsConfigUpdateIntIterator, error) {

	logs, sub, err := _IConfigEvents.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &IConfigEventsConfigUpdateIntIterator{contract: _IConfigEvents.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *IConfigEventsConfigUpdateInt) (event.Subscription, error) {

	logs, sub, err := _IConfigEvents.contract.WatchLogs(opts, "ConfigUpdateInt")
	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(IConfigEventsConfigUpdateInt)
				if err := _IConfigEvents.contract.UnpackLog(event, "ConfigUpdateInt", 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
}

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) ParseConfigUpdateInt(log types.Log) (*IConfigEventsConfigUpdateInt, error) {
	event := new(IConfigEventsConfigUpdateInt)
	if err := _IConfigEvents.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IConfigEventsConfigUpdateUintIterator is returned from FilterConfigUpdateUint and is used to iterate over the raw logs and unpacked data for ConfigUpdateUint events raised by the IConfigEvents contract.
type IConfigEventsConfigUpdateUintIterator struct {
	Event *IConfigEventsConfigUpdateUint // 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 *IConfigEventsConfigUpdateUintIterator) 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(IConfigEventsConfigUpdateUint)
			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(IConfigEventsConfigUpdateUint)
		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 *IConfigEventsConfigUpdateUintIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IConfigEventsConfigUpdateUintIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IConfigEventsConfigUpdateUint represents a ConfigUpdateUint event raised by the IConfigEvents contract.
type IConfigEventsConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*IConfigEventsConfigUpdateUintIterator, error) {

	logs, sub, err := _IConfigEvents.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &IConfigEventsConfigUpdateUintIterator{contract: _IConfigEvents.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *IConfigEventsConfigUpdateUint) (event.Subscription, error) {

	logs, sub, err := _IConfigEvents.contract.WatchLogs(opts, "ConfigUpdateUint")
	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(IConfigEventsConfigUpdateUint)
				if err := _IConfigEvents.contract.UnpackLog(event, "ConfigUpdateUint", 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
}

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_IConfigEvents *IConfigEventsFilterer) ParseConfigUpdateUint(log types.Log) (*IConfigEventsConfigUpdateUint, error) {
	event := new(IConfigEventsConfigUpdateUint)
	if err := _IConfigEvents.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IERC20MetaData contains all meta data concerning the IERC20 contract.
var IERC20MetaData = &bind.MetaData{
	ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"dd62ed3e": "allowance(address,address)",
		"095ea7b3": "approve(address,uint256)",
		"70a08231": "balanceOf(address)",
		"18160ddd": "totalSupply()",
		"a9059cbb": "transfer(address,uint256)",
		"23b872dd": "transferFrom(address,address,uint256)",
	},
}

// IERC20ABI is the input ABI used to generate the binding from.
// Deprecated: Use IERC20MetaData.ABI instead.
var IERC20ABI = IERC20MetaData.ABI

// Deprecated: Use IERC20MetaData.Sigs instead.
// IERC20FuncSigs maps the 4-byte function signature to its string representation.
var IERC20FuncSigs = IERC20MetaData.Sigs

// IERC20 is an auto generated Go binding around an Ethereum contract.
type IERC20 struct {
	IERC20Caller     // Read-only binding to the contract
	IERC20Transactor // Write-only binding to the contract
	IERC20Filterer   // Log filterer for contract events
}

// IERC20Caller is an auto generated read-only Go binding around an Ethereum contract.
type IERC20Caller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IERC20Transactor is an auto generated write-only Go binding around an Ethereum contract.
type IERC20Transactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IERC20Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
type IERC20Filterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IERC20Session is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type IERC20Session struct {
	Contract     *IERC20           // 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
}

// IERC20CallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type IERC20CallerSession struct {
	Contract *IERC20Caller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts // Call options to use throughout this session
}

// IERC20TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type IERC20TransactorSession struct {
	Contract     *IERC20Transactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}

// IERC20Raw is an auto generated low-level Go binding around an Ethereum contract.
type IERC20Raw struct {
	Contract *IERC20 // Generic contract binding to access the raw methods on
}

// IERC20CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IERC20CallerRaw struct {
	Contract *IERC20Caller // Generic read-only contract binding to access the raw methods on
}

// IERC20TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IERC20TransactorRaw struct {
	Contract *IERC20Transactor // Generic write-only contract binding to access the raw methods on
}

// NewIERC20 creates a new instance of IERC20, bound to a specific deployed contract.
func NewIERC20(address common.Address, backend bind.ContractBackend) (*IERC20, error) {
	contract, err := bindIERC20(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IERC20{IERC20Caller: IERC20Caller{contract: contract}, IERC20Transactor: IERC20Transactor{contract: contract}, IERC20Filterer: IERC20Filterer{contract: contract}}, nil
}

// NewIERC20Caller creates a new read-only instance of IERC20, bound to a specific deployed contract.
func NewIERC20Caller(address common.Address, caller bind.ContractCaller) (*IERC20Caller, error) {
	contract, err := bindIERC20(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IERC20Caller{contract: contract}, nil
}

// NewIERC20Transactor creates a new write-only instance of IERC20, bound to a specific deployed contract.
func NewIERC20Transactor(address common.Address, transactor bind.ContractTransactor) (*IERC20Transactor, error) {
	contract, err := bindIERC20(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IERC20Transactor{contract: contract}, nil
}

// NewIERC20Filterer creates a new log filterer instance of IERC20, bound to a specific deployed contract.
func NewIERC20Filterer(address common.Address, filterer bind.ContractFilterer) (*IERC20Filterer, error) {
	contract, err := bindIERC20(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IERC20Filterer{contract: contract}, nil
}

// bindIERC20 binds a generic wrapper to an already deployed contract.
func bindIERC20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IERC20ABI))
	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 (_IERC20 *IERC20Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IERC20.Contract.IERC20Caller.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 (_IERC20 *IERC20Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IERC20.Contract.IERC20Transactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IERC20 *IERC20Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IERC20.Contract.IERC20Transactor.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 (_IERC20 *IERC20CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IERC20.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 (_IERC20 *IERC20TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IERC20.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IERC20 *IERC20TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IERC20.Contract.contract.Transact(opts, method, params...)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_IERC20 *IERC20Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
	var out []interface{}
	err := _IERC20.contract.Call(opts, &out, "allowance", owner, spender)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_IERC20 *IERC20Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
	return _IERC20.Contract.Allowance(&_IERC20.CallOpts, owner, spender)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_IERC20 *IERC20CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
	return _IERC20.Contract.Allowance(&_IERC20.CallOpts, owner, spender)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_IERC20 *IERC20Caller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) {
	var out []interface{}
	err := _IERC20.contract.Call(opts, &out, "balanceOf", account)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_IERC20 *IERC20Session) BalanceOf(account common.Address) (*big.Int, error) {
	return _IERC20.Contract.BalanceOf(&_IERC20.CallOpts, account)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_IERC20 *IERC20CallerSession) BalanceOf(account common.Address) (*big.Int, error) {
	return _IERC20.Contract.BalanceOf(&_IERC20.CallOpts, account)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_IERC20 *IERC20Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IERC20.contract.Call(opts, &out, "totalSupply")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_IERC20 *IERC20Session) TotalSupply() (*big.Int, error) {
	return _IERC20.Contract.TotalSupply(&_IERC20.CallOpts)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_IERC20 *IERC20CallerSession) TotalSupply() (*big.Int, error) {
	return _IERC20.Contract.TotalSupply(&_IERC20.CallOpts)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_IERC20 *IERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IERC20.contract.Transact(opts, "approve", spender, amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_IERC20 *IERC20Session) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IERC20.Contract.Approve(&_IERC20.TransactOpts, spender, amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_IERC20 *IERC20TransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IERC20.Contract.Approve(&_IERC20.TransactOpts, spender, amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
func (_IERC20 *IERC20Transactor) Transfer(opts *bind.TransactOpts, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IERC20.contract.Transact(opts, "transfer", recipient, amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
func (_IERC20 *IERC20Session) Transfer(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IERC20.Contract.Transfer(&_IERC20.TransactOpts, recipient, amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
func (_IERC20 *IERC20TransactorSession) Transfer(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IERC20.Contract.Transfer(&_IERC20.TransactOpts, recipient, amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool)
func (_IERC20 *IERC20Transactor) TransferFrom(opts *bind.TransactOpts, sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IERC20.contract.Transact(opts, "transferFrom", sender, recipient, amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool)
func (_IERC20 *IERC20Session) TransferFrom(sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IERC20.Contract.TransferFrom(&_IERC20.TransactOpts, sender, recipient, amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool)
func (_IERC20 *IERC20TransactorSession) TransferFrom(sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _IERC20.Contract.TransferFrom(&_IERC20.TransactOpts, sender, recipient, amount)
}

// IERC20ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IERC20 contract.
type IERC20ApprovalIterator struct {
	Event *IERC20Approval // 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 *IERC20ApprovalIterator) 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(IERC20Approval)
			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(IERC20Approval)
		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 *IERC20ApprovalIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IERC20ApprovalIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IERC20Approval represents a Approval event raised by the IERC20 contract.
type IERC20Approval struct {
	Owner   common.Address
	Spender common.Address
	Value   *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_IERC20 *IERC20Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*IERC20ApprovalIterator, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _IERC20.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
	if err != nil {
		return nil, err
	}
	return &IERC20ApprovalIterator{contract: _IERC20.contract, event: "Approval", logs: logs, sub: sub}, nil
}

// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_IERC20 *IERC20Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC20Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _IERC20.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
	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(IERC20Approval)
				if err := _IERC20.contract.UnpackLog(event, "Approval", 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
}

// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_IERC20 *IERC20Filterer) ParseApproval(log types.Log) (*IERC20Approval, error) {
	event := new(IERC20Approval)
	if err := _IERC20.contract.UnpackLog(event, "Approval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IERC20TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IERC20 contract.
type IERC20TransferIterator struct {
	Event *IERC20Transfer // 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 *IERC20TransferIterator) 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(IERC20Transfer)
			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(IERC20Transfer)
		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 *IERC20TransferIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IERC20TransferIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IERC20Transfer represents a Transfer event raised by the IERC20 contract.
type IERC20Transfer struct {
	From  common.Address
	To    common.Address
	Value *big.Int
	Raw   types.Log // Blockchain specific contextual infos
}

// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_IERC20 *IERC20Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*IERC20TransferIterator, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _IERC20.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
	if err != nil {
		return nil, err
	}
	return &IERC20TransferIterator{contract: _IERC20.contract, event: "Transfer", logs: logs, sub: sub}, nil
}

// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_IERC20 *IERC20Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC20Transfer, from []common.Address, to []common.Address) (event.Subscription, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _IERC20.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
	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(IERC20Transfer)
				if err := _IERC20.contract.UnpackLog(event, "Transfer", 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
}

// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_IERC20 *IERC20Filterer) ParseTransfer(log types.Log) (*IERC20Transfer, error) {
	event := new(IERC20Transfer)
	if err := _IERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IInflationControllerMetaData contains all meta data concerning the IInflationController contract.
var IInflationControllerMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currentSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_inflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lastEpochTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentEpochTime\",\"type\":\"uint256\"}],\"name\":\"calculateSupplyDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"92eff3cd": "calculateSupplyDelta(uint256,uint256,uint256,uint256)",
	},
}

// IInflationControllerABI is the input ABI used to generate the binding from.
// Deprecated: Use IInflationControllerMetaData.ABI instead.
var IInflationControllerABI = IInflationControllerMetaData.ABI

// Deprecated: Use IInflationControllerMetaData.Sigs instead.
// IInflationControllerFuncSigs maps the 4-byte function signature to its string representation.
var IInflationControllerFuncSigs = IInflationControllerMetaData.Sigs

// IInflationController is an auto generated Go binding around an Ethereum contract.
type IInflationController struct {
	IInflationControllerCaller     // Read-only binding to the contract
	IInflationControllerTransactor // Write-only binding to the contract
	IInflationControllerFilterer   // Log filterer for contract events
}

// IInflationControllerCaller is an auto generated read-only Go binding around an Ethereum contract.
type IInflationControllerCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IInflationControllerTransactor is an auto generated write-only Go binding around an Ethereum contract.
type IInflationControllerTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IInflationControllerFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type IInflationControllerFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IInflationControllerSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type IInflationControllerSession struct {
	Contract     *IInflationController // 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
}

// IInflationControllerCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type IInflationControllerCallerSession struct {
	Contract *IInflationControllerCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts               // Call options to use throughout this session
}

// IInflationControllerTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type IInflationControllerTransactorSession struct {
	Contract     *IInflationControllerTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts               // Transaction auth options to use throughout this session
}

// IInflationControllerRaw is an auto generated low-level Go binding around an Ethereum contract.
type IInflationControllerRaw struct {
	Contract *IInflationController // Generic contract binding to access the raw methods on
}

// IInflationControllerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IInflationControllerCallerRaw struct {
	Contract *IInflationControllerCaller // Generic read-only contract binding to access the raw methods on
}

// IInflationControllerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IInflationControllerTransactorRaw struct {
	Contract *IInflationControllerTransactor // Generic write-only contract binding to access the raw methods on
}

// NewIInflationController creates a new instance of IInflationController, bound to a specific deployed contract.
func NewIInflationController(address common.Address, backend bind.ContractBackend) (*IInflationController, error) {
	contract, err := bindIInflationController(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IInflationController{IInflationControllerCaller: IInflationControllerCaller{contract: contract}, IInflationControllerTransactor: IInflationControllerTransactor{contract: contract}, IInflationControllerFilterer: IInflationControllerFilterer{contract: contract}}, nil
}

// NewIInflationControllerCaller creates a new read-only instance of IInflationController, bound to a specific deployed contract.
func NewIInflationControllerCaller(address common.Address, caller bind.ContractCaller) (*IInflationControllerCaller, error) {
	contract, err := bindIInflationController(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IInflationControllerCaller{contract: contract}, nil
}

// NewIInflationControllerTransactor creates a new write-only instance of IInflationController, bound to a specific deployed contract.
func NewIInflationControllerTransactor(address common.Address, transactor bind.ContractTransactor) (*IInflationControllerTransactor, error) {
	contract, err := bindIInflationController(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IInflationControllerTransactor{contract: contract}, nil
}

// NewIInflationControllerFilterer creates a new log filterer instance of IInflationController, bound to a specific deployed contract.
func NewIInflationControllerFilterer(address common.Address, filterer bind.ContractFilterer) (*IInflationControllerFilterer, error) {
	contract, err := bindIInflationController(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IInflationControllerFilterer{contract: contract}, nil
}

// bindIInflationController binds a generic wrapper to an already deployed contract.
func bindIInflationController(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IInflationControllerABI))
	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 (_IInflationController *IInflationControllerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IInflationController.Contract.IInflationControllerCaller.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 (_IInflationController *IInflationControllerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IInflationController.Contract.IInflationControllerTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IInflationController *IInflationControllerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IInflationController.Contract.IInflationControllerTransactor.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 (_IInflationController *IInflationControllerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IInflationController.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 (_IInflationController *IInflationControllerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IInflationController.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IInflationController *IInflationControllerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IInflationController.Contract.contract.Transact(opts, method, params...)
}

// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd.
//
// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256)
func (_IInflationController *IInflationControllerCaller) CalculateSupplyDelta(opts *bind.CallOpts, _currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _IInflationController.contract.Call(opts, &out, "calculateSupplyDelta", _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd.
//
// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256)
func (_IInflationController *IInflationControllerSession) CalculateSupplyDelta(_currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) {
	return _IInflationController.Contract.CalculateSupplyDelta(&_IInflationController.CallOpts, _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime)
}

// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd.
//
// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256)
func (_IInflationController *IInflationControllerCallerSession) CalculateSupplyDelta(_currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) {
	return _IInflationController.Contract.CalculateSupplyDelta(&_IInflationController.CallOpts, _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime)
}

// ILiquidMetaData contains all meta data concerning the ILiquid contract.
var ILiquidMetaData = &bind.MetaData{
	ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"UnbondingApproval\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approveUnbonding\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimTreasuryATN\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommissionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryUnclaimedATN\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"lockFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"lockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"redistribute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"setCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"}],\"name\":\"unbondingAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"unclaimedRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"unlockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"dd62ed3e": "allowance(address,address)",
		"095ea7b3": "approve(address,uint256)",
		"bf99b73e": "approveUnbonding(address,uint256)",
		"70a08231": "balanceOf(address)",
		"9dc29fac": "burn(address,uint256)",
		"372500ab": "claimRewards()",
		"bd96102f": "claimTreasuryATN()",
		"313ce567": "decimals()",
		"3e4eb36c": "getCommissionRate()",
		"3b19e84a": "getTreasury()",
		"1eeffad0": "getTreasuryUnclaimedATN()",
		"1195e07e": "getValidator()",
		"282d3fdf": "lock(address,uint256)",
		"708e91e5": "lockFrom(address,address,uint256)",
		"59355736": "lockedBalanceOf(address)",
		"40c10f19": "mint(address,uint256)",
		"06fdde03": "name()",
		"a0ce552d": "redistribute(uint256)",
		"19fac8fd": "setCommissionRate(uint256)",
		"95d89b41": "symbol()",
		"18160ddd": "totalSupply()",
		"a9059cbb": "transfer(address,uint256)",
		"23b872dd": "transferFrom(address,address,uint256)",
		"d768d578": "unbondingAllowance(address,address)",
		"949813b8": "unclaimedRewards(address)",
		"7eee288d": "unlock(address,uint256)",
		"84955c88": "unlockedBalanceOf(address)",
	},
}

// ILiquidABI is the input ABI used to generate the binding from.
// Deprecated: Use ILiquidMetaData.ABI instead.
var ILiquidABI = ILiquidMetaData.ABI

// Deprecated: Use ILiquidMetaData.Sigs instead.
// ILiquidFuncSigs maps the 4-byte function signature to its string representation.
var ILiquidFuncSigs = ILiquidMetaData.Sigs

// ILiquid is an auto generated Go binding around an Ethereum contract.
type ILiquid struct {
	ILiquidCaller     // Read-only binding to the contract
	ILiquidTransactor // Write-only binding to the contract
	ILiquidFilterer   // Log filterer for contract events
}

// ILiquidCaller is an auto generated read-only Go binding around an Ethereum contract.
type ILiquidCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ILiquidTransactor is an auto generated write-only Go binding around an Ethereum contract.
type ILiquidTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ILiquidFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type ILiquidFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ILiquidSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ILiquidSession struct {
	Contract     *ILiquid          // 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
}

// ILiquidCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type ILiquidCallerSession struct {
	Contract *ILiquidCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts  // Call options to use throughout this session
}

// ILiquidTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type ILiquidTransactorSession struct {
	Contract     *ILiquidTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
}

// ILiquidRaw is an auto generated low-level Go binding around an Ethereum contract.
type ILiquidRaw struct {
	Contract *ILiquid // Generic contract binding to access the raw methods on
}

// ILiquidCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type ILiquidCallerRaw struct {
	Contract *ILiquidCaller // Generic read-only contract binding to access the raw methods on
}

// ILiquidTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type ILiquidTransactorRaw struct {
	Contract *ILiquidTransactor // Generic write-only contract binding to access the raw methods on
}

// NewILiquid creates a new instance of ILiquid, bound to a specific deployed contract.
func NewILiquid(address common.Address, backend bind.ContractBackend) (*ILiquid, error) {
	contract, err := bindILiquid(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &ILiquid{ILiquidCaller: ILiquidCaller{contract: contract}, ILiquidTransactor: ILiquidTransactor{contract: contract}, ILiquidFilterer: ILiquidFilterer{contract: contract}}, nil
}

// NewILiquidCaller creates a new read-only instance of ILiquid, bound to a specific deployed contract.
func NewILiquidCaller(address common.Address, caller bind.ContractCaller) (*ILiquidCaller, error) {
	contract, err := bindILiquid(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &ILiquidCaller{contract: contract}, nil
}

// NewILiquidTransactor creates a new write-only instance of ILiquid, bound to a specific deployed contract.
func NewILiquidTransactor(address common.Address, transactor bind.ContractTransactor) (*ILiquidTransactor, error) {
	contract, err := bindILiquid(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &ILiquidTransactor{contract: contract}, nil
}

// NewILiquidFilterer creates a new log filterer instance of ILiquid, bound to a specific deployed contract.
func NewILiquidFilterer(address common.Address, filterer bind.ContractFilterer) (*ILiquidFilterer, error) {
	contract, err := bindILiquid(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &ILiquidFilterer{contract: contract}, nil
}

// bindILiquid binds a generic wrapper to an already deployed contract.
func bindILiquid(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(ILiquidABI))
	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 (_ILiquid *ILiquidRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ILiquid.Contract.ILiquidCaller.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 (_ILiquid *ILiquidRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ILiquid.Contract.ILiquidTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ILiquid *ILiquidRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ILiquid.Contract.ILiquidTransactor.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 (_ILiquid *ILiquidCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ILiquid.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 (_ILiquid *ILiquidTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ILiquid.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ILiquid *ILiquidTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ILiquid.Contract.contract.Transact(opts, method, params...)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_ILiquid *ILiquidCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "allowance", owner, spender)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_ILiquid *ILiquidSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
	return _ILiquid.Contract.Allowance(&_ILiquid.CallOpts, owner, spender)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address owner, address spender) view returns(uint256)
func (_ILiquid *ILiquidCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
	return _ILiquid.Contract.Allowance(&_ILiquid.CallOpts, owner, spender)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_ILiquid *ILiquidCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "balanceOf", account)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_ILiquid *ILiquidSession) BalanceOf(account common.Address) (*big.Int, error) {
	return _ILiquid.Contract.BalanceOf(&_ILiquid.CallOpts, account)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address account) view returns(uint256)
func (_ILiquid *ILiquidCallerSession) BalanceOf(account common.Address) (*big.Int, error) {
	return _ILiquid.Contract.BalanceOf(&_ILiquid.CallOpts, account)
}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_ILiquid *ILiquidCaller) Decimals(opts *bind.CallOpts) (uint8, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "decimals")

	if err != nil {
		return *new(uint8), err
	}

	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)

	return out0, err

}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_ILiquid *ILiquidSession) Decimals() (uint8, error) {
	return _ILiquid.Contract.Decimals(&_ILiquid.CallOpts)
}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_ILiquid *ILiquidCallerSession) Decimals() (uint8, error) {
	return _ILiquid.Contract.Decimals(&_ILiquid.CallOpts)
}

// GetCommissionRate is a free data retrieval call binding the contract method 0x3e4eb36c.
//
// Solidity: function getCommissionRate() view returns(uint256)
func (_ILiquid *ILiquidCaller) GetCommissionRate(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "getCommissionRate")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetCommissionRate is a free data retrieval call binding the contract method 0x3e4eb36c.
//
// Solidity: function getCommissionRate() view returns(uint256)
func (_ILiquid *ILiquidSession) GetCommissionRate() (*big.Int, error) {
	return _ILiquid.Contract.GetCommissionRate(&_ILiquid.CallOpts)
}

// GetCommissionRate is a free data retrieval call binding the contract method 0x3e4eb36c.
//
// Solidity: function getCommissionRate() view returns(uint256)
func (_ILiquid *ILiquidCallerSession) GetCommissionRate() (*big.Int, error) {
	return _ILiquid.Contract.GetCommissionRate(&_ILiquid.CallOpts)
}

// GetTreasury is a free data retrieval call binding the contract method 0x3b19e84a.
//
// Solidity: function getTreasury() view returns(address)
func (_ILiquid *ILiquidCaller) GetTreasury(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "getTreasury")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetTreasury is a free data retrieval call binding the contract method 0x3b19e84a.
//
// Solidity: function getTreasury() view returns(address)
func (_ILiquid *ILiquidSession) GetTreasury() (common.Address, error) {
	return _ILiquid.Contract.GetTreasury(&_ILiquid.CallOpts)
}

// GetTreasury is a free data retrieval call binding the contract method 0x3b19e84a.
//
// Solidity: function getTreasury() view returns(address)
func (_ILiquid *ILiquidCallerSession) GetTreasury() (common.Address, error) {
	return _ILiquid.Contract.GetTreasury(&_ILiquid.CallOpts)
}

// GetTreasuryUnclaimedATN is a free data retrieval call binding the contract method 0x1eeffad0.
//
// Solidity: function getTreasuryUnclaimedATN() view returns(uint256)
func (_ILiquid *ILiquidCaller) GetTreasuryUnclaimedATN(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "getTreasuryUnclaimedATN")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetTreasuryUnclaimedATN is a free data retrieval call binding the contract method 0x1eeffad0.
//
// Solidity: function getTreasuryUnclaimedATN() view returns(uint256)
func (_ILiquid *ILiquidSession) GetTreasuryUnclaimedATN() (*big.Int, error) {
	return _ILiquid.Contract.GetTreasuryUnclaimedATN(&_ILiquid.CallOpts)
}

// GetTreasuryUnclaimedATN is a free data retrieval call binding the contract method 0x1eeffad0.
//
// Solidity: function getTreasuryUnclaimedATN() view returns(uint256)
func (_ILiquid *ILiquidCallerSession) GetTreasuryUnclaimedATN() (*big.Int, error) {
	return _ILiquid.Contract.GetTreasuryUnclaimedATN(&_ILiquid.CallOpts)
}

// GetValidator is a free data retrieval call binding the contract method 0x1195e07e.
//
// Solidity: function getValidator() view returns(address)
func (_ILiquid *ILiquidCaller) GetValidator(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "getValidator")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetValidator is a free data retrieval call binding the contract method 0x1195e07e.
//
// Solidity: function getValidator() view returns(address)
func (_ILiquid *ILiquidSession) GetValidator() (common.Address, error) {
	return _ILiquid.Contract.GetValidator(&_ILiquid.CallOpts)
}

// GetValidator is a free data retrieval call binding the contract method 0x1195e07e.
//
// Solidity: function getValidator() view returns(address)
func (_ILiquid *ILiquidCallerSession) GetValidator() (common.Address, error) {
	return _ILiquid.Contract.GetValidator(&_ILiquid.CallOpts)
}

// LockedBalanceOf is a free data retrieval call binding the contract method 0x59355736.
//
// Solidity: function lockedBalanceOf(address _delegator) view returns(uint256)
func (_ILiquid *ILiquidCaller) LockedBalanceOf(opts *bind.CallOpts, _delegator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "lockedBalanceOf", _delegator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// LockedBalanceOf is a free data retrieval call binding the contract method 0x59355736.
//
// Solidity: function lockedBalanceOf(address _delegator) view returns(uint256)
func (_ILiquid *ILiquidSession) LockedBalanceOf(_delegator common.Address) (*big.Int, error) {
	return _ILiquid.Contract.LockedBalanceOf(&_ILiquid.CallOpts, _delegator)
}

// LockedBalanceOf is a free data retrieval call binding the contract method 0x59355736.
//
// Solidity: function lockedBalanceOf(address _delegator) view returns(uint256)
func (_ILiquid *ILiquidCallerSession) LockedBalanceOf(_delegator common.Address) (*big.Int, error) {
	return _ILiquid.Contract.LockedBalanceOf(&_ILiquid.CallOpts, _delegator)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ILiquid *ILiquidCaller) Name(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "name")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ILiquid *ILiquidSession) Name() (string, error) {
	return _ILiquid.Contract.Name(&_ILiquid.CallOpts)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ILiquid *ILiquidCallerSession) Name() (string, error) {
	return _ILiquid.Contract.Name(&_ILiquid.CallOpts)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ILiquid *ILiquidCaller) Symbol(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "symbol")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ILiquid *ILiquidSession) Symbol() (string, error) {
	return _ILiquid.Contract.Symbol(&_ILiquid.CallOpts)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ILiquid *ILiquidCallerSession) Symbol() (string, error) {
	return _ILiquid.Contract.Symbol(&_ILiquid.CallOpts)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_ILiquid *ILiquidCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "totalSupply")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_ILiquid *ILiquidSession) TotalSupply() (*big.Int, error) {
	return _ILiquid.Contract.TotalSupply(&_ILiquid.CallOpts)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_ILiquid *ILiquidCallerSession) TotalSupply() (*big.Int, error) {
	return _ILiquid.Contract.TotalSupply(&_ILiquid.CallOpts)
}

// UnbondingAllowance is a free data retrieval call binding the contract method 0xd768d578.
//
// Solidity: function unbondingAllowance(address _owner, address _caller) view returns(uint256)
func (_ILiquid *ILiquidCaller) UnbondingAllowance(opts *bind.CallOpts, _owner common.Address, _caller common.Address) (*big.Int, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "unbondingAllowance", _owner, _caller)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// UnbondingAllowance is a free data retrieval call binding the contract method 0xd768d578.
//
// Solidity: function unbondingAllowance(address _owner, address _caller) view returns(uint256)
func (_ILiquid *ILiquidSession) UnbondingAllowance(_owner common.Address, _caller common.Address) (*big.Int, error) {
	return _ILiquid.Contract.UnbondingAllowance(&_ILiquid.CallOpts, _owner, _caller)
}

// UnbondingAllowance is a free data retrieval call binding the contract method 0xd768d578.
//
// Solidity: function unbondingAllowance(address _owner, address _caller) view returns(uint256)
func (_ILiquid *ILiquidCallerSession) UnbondingAllowance(_owner common.Address, _caller common.Address) (*big.Int, error) {
	return _ILiquid.Contract.UnbondingAllowance(&_ILiquid.CallOpts, _owner, _caller)
}

// UnclaimedRewards is a free data retrieval call binding the contract method 0x949813b8.
//
// Solidity: function unclaimedRewards(address _account) view returns(uint256)
func (_ILiquid *ILiquidCaller) UnclaimedRewards(opts *bind.CallOpts, _account common.Address) (*big.Int, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "unclaimedRewards", _account)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// UnclaimedRewards is a free data retrieval call binding the contract method 0x949813b8.
//
// Solidity: function unclaimedRewards(address _account) view returns(uint256)
func (_ILiquid *ILiquidSession) UnclaimedRewards(_account common.Address) (*big.Int, error) {
	return _ILiquid.Contract.UnclaimedRewards(&_ILiquid.CallOpts, _account)
}

// UnclaimedRewards is a free data retrieval call binding the contract method 0x949813b8.
//
// Solidity: function unclaimedRewards(address _account) view returns(uint256)
func (_ILiquid *ILiquidCallerSession) UnclaimedRewards(_account common.Address) (*big.Int, error) {
	return _ILiquid.Contract.UnclaimedRewards(&_ILiquid.CallOpts, _account)
}

// UnlockedBalanceOf is a free data retrieval call binding the contract method 0x84955c88.
//
// Solidity: function unlockedBalanceOf(address _delegator) view returns(uint256)
func (_ILiquid *ILiquidCaller) UnlockedBalanceOf(opts *bind.CallOpts, _delegator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _ILiquid.contract.Call(opts, &out, "unlockedBalanceOf", _delegator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// UnlockedBalanceOf is a free data retrieval call binding the contract method 0x84955c88.
//
// Solidity: function unlockedBalanceOf(address _delegator) view returns(uint256)
func (_ILiquid *ILiquidSession) UnlockedBalanceOf(_delegator common.Address) (*big.Int, error) {
	return _ILiquid.Contract.UnlockedBalanceOf(&_ILiquid.CallOpts, _delegator)
}

// UnlockedBalanceOf is a free data retrieval call binding the contract method 0x84955c88.
//
// Solidity: function unlockedBalanceOf(address _delegator) view returns(uint256)
func (_ILiquid *ILiquidCallerSession) UnlockedBalanceOf(_delegator common.Address) (*big.Int, error) {
	return _ILiquid.Contract.UnlockedBalanceOf(&_ILiquid.CallOpts, _delegator)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_ILiquid *ILiquidTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "approve", spender, amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_ILiquid *ILiquidSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Approve(&_ILiquid.TransactOpts, spender, amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address spender, uint256 amount) returns(bool)
func (_ILiquid *ILiquidTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Approve(&_ILiquid.TransactOpts, spender, amount)
}

// ApproveUnbonding is a paid mutator transaction binding the contract method 0xbf99b73e.
//
// Solidity: function approveUnbonding(address _caller, uint256 _amount) returns(bool)
func (_ILiquid *ILiquidTransactor) ApproveUnbonding(opts *bind.TransactOpts, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "approveUnbonding", _caller, _amount)
}

// ApproveUnbonding is a paid mutator transaction binding the contract method 0xbf99b73e.
//
// Solidity: function approveUnbonding(address _caller, uint256 _amount) returns(bool)
func (_ILiquid *ILiquidSession) ApproveUnbonding(_caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.ApproveUnbonding(&_ILiquid.TransactOpts, _caller, _amount)
}

// ApproveUnbonding is a paid mutator transaction binding the contract method 0xbf99b73e.
//
// Solidity: function approveUnbonding(address _caller, uint256 _amount) returns(bool)
func (_ILiquid *ILiquidTransactorSession) ApproveUnbonding(_caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.ApproveUnbonding(&_ILiquid.TransactOpts, _caller, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidTransactor) Burn(opts *bind.TransactOpts, _account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "burn", _account, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidSession) Burn(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Burn(&_ILiquid.TransactOpts, _account, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidTransactorSession) Burn(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Burn(&_ILiquid.TransactOpts, _account, _amount)
}

// ClaimRewards is a paid mutator transaction binding the contract method 0x372500ab.
//
// Solidity: function claimRewards() returns()
func (_ILiquid *ILiquidTransactor) ClaimRewards(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "claimRewards")
}

// ClaimRewards is a paid mutator transaction binding the contract method 0x372500ab.
//
// Solidity: function claimRewards() returns()
func (_ILiquid *ILiquidSession) ClaimRewards() (*types.Transaction, error) {
	return _ILiquid.Contract.ClaimRewards(&_ILiquid.TransactOpts)
}

// ClaimRewards is a paid mutator transaction binding the contract method 0x372500ab.
//
// Solidity: function claimRewards() returns()
func (_ILiquid *ILiquidTransactorSession) ClaimRewards() (*types.Transaction, error) {
	return _ILiquid.Contract.ClaimRewards(&_ILiquid.TransactOpts)
}

// ClaimTreasuryATN is a paid mutator transaction binding the contract method 0xbd96102f.
//
// Solidity: function claimTreasuryATN() returns()
func (_ILiquid *ILiquidTransactor) ClaimTreasuryATN(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "claimTreasuryATN")
}

// ClaimTreasuryATN is a paid mutator transaction binding the contract method 0xbd96102f.
//
// Solidity: function claimTreasuryATN() returns()
func (_ILiquid *ILiquidSession) ClaimTreasuryATN() (*types.Transaction, error) {
	return _ILiquid.Contract.ClaimTreasuryATN(&_ILiquid.TransactOpts)
}

// ClaimTreasuryATN is a paid mutator transaction binding the contract method 0xbd96102f.
//
// Solidity: function claimTreasuryATN() returns()
func (_ILiquid *ILiquidTransactorSession) ClaimTreasuryATN() (*types.Transaction, error) {
	return _ILiquid.Contract.ClaimTreasuryATN(&_ILiquid.TransactOpts)
}

// Lock is a paid mutator transaction binding the contract method 0x282d3fdf.
//
// Solidity: function lock(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidTransactor) Lock(opts *bind.TransactOpts, _account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "lock", _account, _amount)
}

// Lock is a paid mutator transaction binding the contract method 0x282d3fdf.
//
// Solidity: function lock(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidSession) Lock(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Lock(&_ILiquid.TransactOpts, _account, _amount)
}

// Lock is a paid mutator transaction binding the contract method 0x282d3fdf.
//
// Solidity: function lock(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidTransactorSession) Lock(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Lock(&_ILiquid.TransactOpts, _account, _amount)
}

// LockFrom is a paid mutator transaction binding the contract method 0x708e91e5.
//
// Solidity: function lockFrom(address _account, address _caller, uint256 _amount) returns()
func (_ILiquid *ILiquidTransactor) LockFrom(opts *bind.TransactOpts, _account common.Address, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "lockFrom", _account, _caller, _amount)
}

// LockFrom is a paid mutator transaction binding the contract method 0x708e91e5.
//
// Solidity: function lockFrom(address _account, address _caller, uint256 _amount) returns()
func (_ILiquid *ILiquidSession) LockFrom(_account common.Address, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.LockFrom(&_ILiquid.TransactOpts, _account, _caller, _amount)
}

// LockFrom is a paid mutator transaction binding the contract method 0x708e91e5.
//
// Solidity: function lockFrom(address _account, address _caller, uint256 _amount) returns()
func (_ILiquid *ILiquidTransactorSession) LockFrom(_account common.Address, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.LockFrom(&_ILiquid.TransactOpts, _account, _caller, _amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidTransactor) Mint(opts *bind.TransactOpts, _account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "mint", _account, _amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidSession) Mint(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Mint(&_ILiquid.TransactOpts, _account, _amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidTransactorSession) Mint(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Mint(&_ILiquid.TransactOpts, _account, _amount)
}

// Redistribute is a paid mutator transaction binding the contract method 0xa0ce552d.
//
// Solidity: function redistribute(uint256 _ntnReward) payable returns(uint256)
func (_ILiquid *ILiquidTransactor) Redistribute(opts *bind.TransactOpts, _ntnReward *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "redistribute", _ntnReward)
}

// Redistribute is a paid mutator transaction binding the contract method 0xa0ce552d.
//
// Solidity: function redistribute(uint256 _ntnReward) payable returns(uint256)
func (_ILiquid *ILiquidSession) Redistribute(_ntnReward *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Redistribute(&_ILiquid.TransactOpts, _ntnReward)
}

// Redistribute is a paid mutator transaction binding the contract method 0xa0ce552d.
//
// Solidity: function redistribute(uint256 _ntnReward) payable returns(uint256)
func (_ILiquid *ILiquidTransactorSession) Redistribute(_ntnReward *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Redistribute(&_ILiquid.TransactOpts, _ntnReward)
}

// SetCommissionRate is a paid mutator transaction binding the contract method 0x19fac8fd.
//
// Solidity: function setCommissionRate(uint256 _rate) returns()
func (_ILiquid *ILiquidTransactor) SetCommissionRate(opts *bind.TransactOpts, _rate *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "setCommissionRate", _rate)
}

// SetCommissionRate is a paid mutator transaction binding the contract method 0x19fac8fd.
//
// Solidity: function setCommissionRate(uint256 _rate) returns()
func (_ILiquid *ILiquidSession) SetCommissionRate(_rate *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.SetCommissionRate(&_ILiquid.TransactOpts, _rate)
}

// SetCommissionRate is a paid mutator transaction binding the contract method 0x19fac8fd.
//
// Solidity: function setCommissionRate(uint256 _rate) returns()
func (_ILiquid *ILiquidTransactorSession) SetCommissionRate(_rate *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.SetCommissionRate(&_ILiquid.TransactOpts, _rate)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
func (_ILiquid *ILiquidTransactor) Transfer(opts *bind.TransactOpts, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "transfer", recipient, amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
func (_ILiquid *ILiquidSession) Transfer(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Transfer(&_ILiquid.TransactOpts, recipient, amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address recipient, uint256 amount) returns(bool)
func (_ILiquid *ILiquidTransactorSession) Transfer(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Transfer(&_ILiquid.TransactOpts, recipient, amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool)
func (_ILiquid *ILiquidTransactor) TransferFrom(opts *bind.TransactOpts, sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "transferFrom", sender, recipient, amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool)
func (_ILiquid *ILiquidSession) TransferFrom(sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.TransferFrom(&_ILiquid.TransactOpts, sender, recipient, amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address sender, address recipient, uint256 amount) returns(bool)
func (_ILiquid *ILiquidTransactorSession) TransferFrom(sender common.Address, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.TransferFrom(&_ILiquid.TransactOpts, sender, recipient, amount)
}

// Unlock is a paid mutator transaction binding the contract method 0x7eee288d.
//
// Solidity: function unlock(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidTransactor) Unlock(opts *bind.TransactOpts, _account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.contract.Transact(opts, "unlock", _account, _amount)
}

// Unlock is a paid mutator transaction binding the contract method 0x7eee288d.
//
// Solidity: function unlock(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidSession) Unlock(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Unlock(&_ILiquid.TransactOpts, _account, _amount)
}

// Unlock is a paid mutator transaction binding the contract method 0x7eee288d.
//
// Solidity: function unlock(address _account, uint256 _amount) returns()
func (_ILiquid *ILiquidTransactorSession) Unlock(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _ILiquid.Contract.Unlock(&_ILiquid.TransactOpts, _account, _amount)
}

// ILiquidApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ILiquid contract.
type ILiquidApprovalIterator struct {
	Event *ILiquidApproval // 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 *ILiquidApprovalIterator) 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(ILiquidApproval)
			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(ILiquidApproval)
		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 *ILiquidApprovalIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ILiquidApprovalIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// ILiquidApproval represents a Approval event raised by the ILiquid contract.
type ILiquidApproval struct {
	Owner   common.Address
	Spender common.Address
	Value   *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_ILiquid *ILiquidFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ILiquidApprovalIterator, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _ILiquid.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
	if err != nil {
		return nil, err
	}
	return &ILiquidApprovalIterator{contract: _ILiquid.contract, event: "Approval", logs: logs, sub: sub}, nil
}

// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_ILiquid *ILiquidFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ILiquidApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _ILiquid.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
	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(ILiquidApproval)
				if err := _ILiquid.contract.UnpackLog(event, "Approval", 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
}

// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_ILiquid *ILiquidFilterer) ParseApproval(log types.Log) (*ILiquidApproval, error) {
	event := new(ILiquidApproval)
	if err := _ILiquid.contract.UnpackLog(event, "Approval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ILiquidTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ILiquid contract.
type ILiquidTransferIterator struct {
	Event *ILiquidTransfer // 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 *ILiquidTransferIterator) 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(ILiquidTransfer)
			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(ILiquidTransfer)
		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 *ILiquidTransferIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ILiquidTransferIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// ILiquidTransfer represents a Transfer event raised by the ILiquid contract.
type ILiquidTransfer struct {
	From  common.Address
	To    common.Address
	Value *big.Int
	Raw   types.Log // Blockchain specific contextual infos
}

// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_ILiquid *ILiquidFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ILiquidTransferIterator, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _ILiquid.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
	if err != nil {
		return nil, err
	}
	return &ILiquidTransferIterator{contract: _ILiquid.contract, event: "Transfer", logs: logs, sub: sub}, nil
}

// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_ILiquid *ILiquidFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ILiquidTransfer, from []common.Address, to []common.Address) (event.Subscription, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _ILiquid.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
	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(ILiquidTransfer)
				if err := _ILiquid.contract.UnpackLog(event, "Transfer", 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
}

// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_ILiquid *ILiquidFilterer) ParseTransfer(log types.Log) (*ILiquidTransfer, error) {
	event := new(ILiquidTransfer)
	if err := _ILiquid.contract.UnpackLog(event, "Transfer", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ILiquidUnbondingApprovalIterator is returned from FilterUnbondingApproval and is used to iterate over the raw logs and unpacked data for UnbondingApproval events raised by the ILiquid contract.
type ILiquidUnbondingApprovalIterator struct {
	Event *ILiquidUnbondingApproval // 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 *ILiquidUnbondingApprovalIterator) 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(ILiquidUnbondingApproval)
			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(ILiquidUnbondingApproval)
		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 *ILiquidUnbondingApprovalIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ILiquidUnbondingApprovalIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// ILiquidUnbondingApproval represents a UnbondingApproval event raised by the ILiquid contract.
type ILiquidUnbondingApproval struct {
	Owner  common.Address
	Caller common.Address
	Value  *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterUnbondingApproval is a free log retrieval operation binding the contract event 0x03530f06053c088596fe8c12632b52218b0685204ad1b757662178f87e27713b.
//
// Solidity: event UnbondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_ILiquid *ILiquidFilterer) FilterUnbondingApproval(opts *bind.FilterOpts, _owner []common.Address, _caller []common.Address) (*ILiquidUnbondingApprovalIterator, error) {

	var _ownerRule []interface{}
	for _, _ownerItem := range _owner {
		_ownerRule = append(_ownerRule, _ownerItem)
	}
	var _callerRule []interface{}
	for _, _callerItem := range _caller {
		_callerRule = append(_callerRule, _callerItem)
	}

	logs, sub, err := _ILiquid.contract.FilterLogs(opts, "UnbondingApproval", _ownerRule, _callerRule)
	if err != nil {
		return nil, err
	}
	return &ILiquidUnbondingApprovalIterator{contract: _ILiquid.contract, event: "UnbondingApproval", logs: logs, sub: sub}, nil
}

// WatchUnbondingApproval is a free log subscription operation binding the contract event 0x03530f06053c088596fe8c12632b52218b0685204ad1b757662178f87e27713b.
//
// Solidity: event UnbondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_ILiquid *ILiquidFilterer) WatchUnbondingApproval(opts *bind.WatchOpts, sink chan<- *ILiquidUnbondingApproval, _owner []common.Address, _caller []common.Address) (event.Subscription, error) {

	var _ownerRule []interface{}
	for _, _ownerItem := range _owner {
		_ownerRule = append(_ownerRule, _ownerItem)
	}
	var _callerRule []interface{}
	for _, _callerItem := range _caller {
		_callerRule = append(_callerRule, _callerItem)
	}

	logs, sub, err := _ILiquid.contract.WatchLogs(opts, "UnbondingApproval", _ownerRule, _callerRule)
	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(ILiquidUnbondingApproval)
				if err := _ILiquid.contract.UnpackLog(event, "UnbondingApproval", 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
}

// ParseUnbondingApproval is a log parse operation binding the contract event 0x03530f06053c088596fe8c12632b52218b0685204ad1b757662178f87e27713b.
//
// Solidity: event UnbondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_ILiquid *ILiquidFilterer) ParseUnbondingApproval(log types.Log) (*ILiquidUnbondingApproval, error) {
	event := new(ILiquidUnbondingApproval)
	if err := _ILiquid.contract.UnpackLog(event, "UnbondingApproval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IOmissionAccountabilityMetaData contains all meta data concerning the IOmissionAccountability contract.
var IOmissionAccountabilityMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"distributeProposerRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnded\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"getInactivityScore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLookbackWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScaleFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalEffort\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"_committee\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"_treasuries\",\"type\":\"address[]\"}],\"name\":\"setCommittee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epochBlock\",\"type\":\"uint256\"}],\"name\":\"setEpochBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"eeb92233": "distributeProposerRewards(uint256)",
		"6c9789b0": "finalize(bool)",
		"c549176e": "getDelta()",
		"9a11e0e6": "getInactivityScore(address)",
		"5ca1809c": "getLookbackWindow()",
		"7f5e2f11": "getScaleFactor()",
		"53b1821b": "getTotalEffort()",
		"e3deef9c": "setCommittee((address,uint256,bytes)[],address[])",
		"c024cc2c": "setEpochBlock(uint256)",
		"b3ab15fb": "setOperator(address)",
	},
}

// IOmissionAccountabilityABI is the input ABI used to generate the binding from.
// Deprecated: Use IOmissionAccountabilityMetaData.ABI instead.
var IOmissionAccountabilityABI = IOmissionAccountabilityMetaData.ABI

// Deprecated: Use IOmissionAccountabilityMetaData.Sigs instead.
// IOmissionAccountabilityFuncSigs maps the 4-byte function signature to its string representation.
var IOmissionAccountabilityFuncSigs = IOmissionAccountabilityMetaData.Sigs

// IOmissionAccountability is an auto generated Go binding around an Ethereum contract.
type IOmissionAccountability struct {
	IOmissionAccountabilityCaller     // Read-only binding to the contract
	IOmissionAccountabilityTransactor // Write-only binding to the contract
	IOmissionAccountabilityFilterer   // Log filterer for contract events
}

// IOmissionAccountabilityCaller is an auto generated read-only Go binding around an Ethereum contract.
type IOmissionAccountabilityCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IOmissionAccountabilityTransactor is an auto generated write-only Go binding around an Ethereum contract.
type IOmissionAccountabilityTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IOmissionAccountabilityFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type IOmissionAccountabilityFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IOmissionAccountabilitySession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type IOmissionAccountabilitySession struct {
	Contract     *IOmissionAccountability // 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
}

// IOmissionAccountabilityCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type IOmissionAccountabilityCallerSession struct {
	Contract *IOmissionAccountabilityCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts                  // Call options to use throughout this session
}

// IOmissionAccountabilityTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type IOmissionAccountabilityTransactorSession struct {
	Contract     *IOmissionAccountabilityTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts                  // Transaction auth options to use throughout this session
}

// IOmissionAccountabilityRaw is an auto generated low-level Go binding around an Ethereum contract.
type IOmissionAccountabilityRaw struct {
	Contract *IOmissionAccountability // Generic contract binding to access the raw methods on
}

// IOmissionAccountabilityCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IOmissionAccountabilityCallerRaw struct {
	Contract *IOmissionAccountabilityCaller // Generic read-only contract binding to access the raw methods on
}

// IOmissionAccountabilityTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IOmissionAccountabilityTransactorRaw struct {
	Contract *IOmissionAccountabilityTransactor // Generic write-only contract binding to access the raw methods on
}

// NewIOmissionAccountability creates a new instance of IOmissionAccountability, bound to a specific deployed contract.
func NewIOmissionAccountability(address common.Address, backend bind.ContractBackend) (*IOmissionAccountability, error) {
	contract, err := bindIOmissionAccountability(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IOmissionAccountability{IOmissionAccountabilityCaller: IOmissionAccountabilityCaller{contract: contract}, IOmissionAccountabilityTransactor: IOmissionAccountabilityTransactor{contract: contract}, IOmissionAccountabilityFilterer: IOmissionAccountabilityFilterer{contract: contract}}, nil
}

// NewIOmissionAccountabilityCaller creates a new read-only instance of IOmissionAccountability, bound to a specific deployed contract.
func NewIOmissionAccountabilityCaller(address common.Address, caller bind.ContractCaller) (*IOmissionAccountabilityCaller, error) {
	contract, err := bindIOmissionAccountability(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IOmissionAccountabilityCaller{contract: contract}, nil
}

// NewIOmissionAccountabilityTransactor creates a new write-only instance of IOmissionAccountability, bound to a specific deployed contract.
func NewIOmissionAccountabilityTransactor(address common.Address, transactor bind.ContractTransactor) (*IOmissionAccountabilityTransactor, error) {
	contract, err := bindIOmissionAccountability(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IOmissionAccountabilityTransactor{contract: contract}, nil
}

// NewIOmissionAccountabilityFilterer creates a new log filterer instance of IOmissionAccountability, bound to a specific deployed contract.
func NewIOmissionAccountabilityFilterer(address common.Address, filterer bind.ContractFilterer) (*IOmissionAccountabilityFilterer, error) {
	contract, err := bindIOmissionAccountability(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IOmissionAccountabilityFilterer{contract: contract}, nil
}

// bindIOmissionAccountability binds a generic wrapper to an already deployed contract.
func bindIOmissionAccountability(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IOmissionAccountabilityABI))
	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 (_IOmissionAccountability *IOmissionAccountabilityRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IOmissionAccountability.Contract.IOmissionAccountabilityCaller.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 (_IOmissionAccountability *IOmissionAccountabilityRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.IOmissionAccountabilityTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IOmissionAccountability *IOmissionAccountabilityRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.IOmissionAccountabilityTransactor.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 (_IOmissionAccountability *IOmissionAccountabilityCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IOmissionAccountability.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 (_IOmissionAccountability *IOmissionAccountabilityTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IOmissionAccountability *IOmissionAccountabilityTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.contract.Transact(opts, method, params...)
}

// GetDelta is a free data retrieval call binding the contract method 0xc549176e.
//
// Solidity: function getDelta() view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityCaller) GetDelta(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IOmissionAccountability.contract.Call(opts, &out, "getDelta")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetDelta is a free data retrieval call binding the contract method 0xc549176e.
//
// Solidity: function getDelta() view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilitySession) GetDelta() (*big.Int, error) {
	return _IOmissionAccountability.Contract.GetDelta(&_IOmissionAccountability.CallOpts)
}

// GetDelta is a free data retrieval call binding the contract method 0xc549176e.
//
// Solidity: function getDelta() view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityCallerSession) GetDelta() (*big.Int, error) {
	return _IOmissionAccountability.Contract.GetDelta(&_IOmissionAccountability.CallOpts)
}

// GetInactivityScore is a free data retrieval call binding the contract method 0x9a11e0e6.
//
// Solidity: function getInactivityScore(address _validator) view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityCaller) GetInactivityScore(opts *bind.CallOpts, _validator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _IOmissionAccountability.contract.Call(opts, &out, "getInactivityScore", _validator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetInactivityScore is a free data retrieval call binding the contract method 0x9a11e0e6.
//
// Solidity: function getInactivityScore(address _validator) view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilitySession) GetInactivityScore(_validator common.Address) (*big.Int, error) {
	return _IOmissionAccountability.Contract.GetInactivityScore(&_IOmissionAccountability.CallOpts, _validator)
}

// GetInactivityScore is a free data retrieval call binding the contract method 0x9a11e0e6.
//
// Solidity: function getInactivityScore(address _validator) view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityCallerSession) GetInactivityScore(_validator common.Address) (*big.Int, error) {
	return _IOmissionAccountability.Contract.GetInactivityScore(&_IOmissionAccountability.CallOpts, _validator)
}

// GetLookbackWindow is a free data retrieval call binding the contract method 0x5ca1809c.
//
// Solidity: function getLookbackWindow() view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityCaller) GetLookbackWindow(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IOmissionAccountability.contract.Call(opts, &out, "getLookbackWindow")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetLookbackWindow is a free data retrieval call binding the contract method 0x5ca1809c.
//
// Solidity: function getLookbackWindow() view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilitySession) GetLookbackWindow() (*big.Int, error) {
	return _IOmissionAccountability.Contract.GetLookbackWindow(&_IOmissionAccountability.CallOpts)
}

// GetLookbackWindow is a free data retrieval call binding the contract method 0x5ca1809c.
//
// Solidity: function getLookbackWindow() view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityCallerSession) GetLookbackWindow() (*big.Int, error) {
	return _IOmissionAccountability.Contract.GetLookbackWindow(&_IOmissionAccountability.CallOpts)
}

// GetScaleFactor is a free data retrieval call binding the contract method 0x7f5e2f11.
//
// Solidity: function getScaleFactor() pure returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityCaller) GetScaleFactor(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IOmissionAccountability.contract.Call(opts, &out, "getScaleFactor")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetScaleFactor is a free data retrieval call binding the contract method 0x7f5e2f11.
//
// Solidity: function getScaleFactor() pure returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilitySession) GetScaleFactor() (*big.Int, error) {
	return _IOmissionAccountability.Contract.GetScaleFactor(&_IOmissionAccountability.CallOpts)
}

// GetScaleFactor is a free data retrieval call binding the contract method 0x7f5e2f11.
//
// Solidity: function getScaleFactor() pure returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityCallerSession) GetScaleFactor() (*big.Int, error) {
	return _IOmissionAccountability.Contract.GetScaleFactor(&_IOmissionAccountability.CallOpts)
}

// GetTotalEffort is a free data retrieval call binding the contract method 0x53b1821b.
//
// Solidity: function getTotalEffort() view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityCaller) GetTotalEffort(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IOmissionAccountability.contract.Call(opts, &out, "getTotalEffort")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetTotalEffort is a free data retrieval call binding the contract method 0x53b1821b.
//
// Solidity: function getTotalEffort() view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilitySession) GetTotalEffort() (*big.Int, error) {
	return _IOmissionAccountability.Contract.GetTotalEffort(&_IOmissionAccountability.CallOpts)
}

// GetTotalEffort is a free data retrieval call binding the contract method 0x53b1821b.
//
// Solidity: function getTotalEffort() view returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityCallerSession) GetTotalEffort() (*big.Int, error) {
	return _IOmissionAccountability.Contract.GetTotalEffort(&_IOmissionAccountability.CallOpts)
}

// DistributeProposerRewards is a paid mutator transaction binding the contract method 0xeeb92233.
//
// Solidity: function distributeProposerRewards(uint256 _ntnReward) payable returns()
func (_IOmissionAccountability *IOmissionAccountabilityTransactor) DistributeProposerRewards(opts *bind.TransactOpts, _ntnReward *big.Int) (*types.Transaction, error) {
	return _IOmissionAccountability.contract.Transact(opts, "distributeProposerRewards", _ntnReward)
}

// DistributeProposerRewards is a paid mutator transaction binding the contract method 0xeeb92233.
//
// Solidity: function distributeProposerRewards(uint256 _ntnReward) payable returns()
func (_IOmissionAccountability *IOmissionAccountabilitySession) DistributeProposerRewards(_ntnReward *big.Int) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.DistributeProposerRewards(&_IOmissionAccountability.TransactOpts, _ntnReward)
}

// DistributeProposerRewards is a paid mutator transaction binding the contract method 0xeeb92233.
//
// Solidity: function distributeProposerRewards(uint256 _ntnReward) payable returns()
func (_IOmissionAccountability *IOmissionAccountabilityTransactorSession) DistributeProposerRewards(_ntnReward *big.Int) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.DistributeProposerRewards(&_IOmissionAccountability.TransactOpts, _ntnReward)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnded) returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityTransactor) Finalize(opts *bind.TransactOpts, _epochEnded bool) (*types.Transaction, error) {
	return _IOmissionAccountability.contract.Transact(opts, "finalize", _epochEnded)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnded) returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilitySession) Finalize(_epochEnded bool) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.Finalize(&_IOmissionAccountability.TransactOpts, _epochEnded)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnded) returns(uint256)
func (_IOmissionAccountability *IOmissionAccountabilityTransactorSession) Finalize(_epochEnded bool) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.Finalize(&_IOmissionAccountability.TransactOpts, _epochEnded)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe3deef9c.
//
// Solidity: function setCommittee((address,uint256,bytes)[] _committee, address[] _treasuries) returns()
func (_IOmissionAccountability *IOmissionAccountabilityTransactor) SetCommittee(opts *bind.TransactOpts, _committee []IAutonityCommitteeMember, _treasuries []common.Address) (*types.Transaction, error) {
	return _IOmissionAccountability.contract.Transact(opts, "setCommittee", _committee, _treasuries)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe3deef9c.
//
// Solidity: function setCommittee((address,uint256,bytes)[] _committee, address[] _treasuries) returns()
func (_IOmissionAccountability *IOmissionAccountabilitySession) SetCommittee(_committee []IAutonityCommitteeMember, _treasuries []common.Address) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.SetCommittee(&_IOmissionAccountability.TransactOpts, _committee, _treasuries)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe3deef9c.
//
// Solidity: function setCommittee((address,uint256,bytes)[] _committee, address[] _treasuries) returns()
func (_IOmissionAccountability *IOmissionAccountabilityTransactorSession) SetCommittee(_committee []IAutonityCommitteeMember, _treasuries []common.Address) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.SetCommittee(&_IOmissionAccountability.TransactOpts, _committee, _treasuries)
}

// SetEpochBlock is a paid mutator transaction binding the contract method 0xc024cc2c.
//
// Solidity: function setEpochBlock(uint256 _epochBlock) returns()
func (_IOmissionAccountability *IOmissionAccountabilityTransactor) SetEpochBlock(opts *bind.TransactOpts, _epochBlock *big.Int) (*types.Transaction, error) {
	return _IOmissionAccountability.contract.Transact(opts, "setEpochBlock", _epochBlock)
}

// SetEpochBlock is a paid mutator transaction binding the contract method 0xc024cc2c.
//
// Solidity: function setEpochBlock(uint256 _epochBlock) returns()
func (_IOmissionAccountability *IOmissionAccountabilitySession) SetEpochBlock(_epochBlock *big.Int) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.SetEpochBlock(&_IOmissionAccountability.TransactOpts, _epochBlock)
}

// SetEpochBlock is a paid mutator transaction binding the contract method 0xc024cc2c.
//
// Solidity: function setEpochBlock(uint256 _epochBlock) returns()
func (_IOmissionAccountability *IOmissionAccountabilityTransactorSession) SetEpochBlock(_epochBlock *big.Int) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.SetEpochBlock(&_IOmissionAccountability.TransactOpts, _epochBlock)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_IOmissionAccountability *IOmissionAccountabilityTransactor) SetOperator(opts *bind.TransactOpts, _operator common.Address) (*types.Transaction, error) {
	return _IOmissionAccountability.contract.Transact(opts, "setOperator", _operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_IOmissionAccountability *IOmissionAccountabilitySession) SetOperator(_operator common.Address) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.SetOperator(&_IOmissionAccountability.TransactOpts, _operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_IOmissionAccountability *IOmissionAccountabilityTransactorSession) SetOperator(_operator common.Address) (*types.Transaction, error) {
	return _IOmissionAccountability.Contract.SetOperator(&_IOmissionAccountability.TransactOpts, _operator)
}

// IOracleMetaData contains all meta data concerning the IOracle contract.
var IOracleMetaData = &bind.MetaData{
	ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_nonRevealCount\",\"type\":\"uint256\"}],\"name\":\"CommitRevealMissed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"cause\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"extra\",\"type\":\"uint8\"}],\"name\":\"InvalidVote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"NewSymbols\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"extra\",\"type\":\"uint8\"}],\"name\":\"NewVoter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_missedReveal\",\"type\":\"uint256\"}],\"name\":\"NoRevealPenalty\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_participant\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_slashingAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_median\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint120\",\"name\":\"_reported\",\"type\":\"uint120\"}],\"name\":\"Penalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"PriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"extra\",\"type\":\"uint8\"}],\"name\":\"SuccessfulVote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnReward\",\"type\":\"uint256\"}],\"name\":\"TotalOracleRewards\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ntnRewards\",\"type\":\"uint256\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonRevealThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"getRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"latestRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_resetInterval\",\"type\":\"uint256\"}],\"name\":\"setCommitRevealConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_outlierSlashingThreshold\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"_outlierDetectionThreshold\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_baseSlashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRateCap\",\"type\":\"uint256\"}],\"name\":\"setSlashingConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"name\":\"setSymbols\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newVoters\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_treasury\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_validator\",\"type\":\"address[]\"}],\"name\":\"setVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateVotersAndSymbol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_commit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint120\",\"name\":\"price\",\"type\":\"uint120\"},{\"internalType\":\"uint8\",\"name\":\"confidence\",\"type\":\"uint8\"}],\"internalType\":\"structIOracle.Report[]\",\"name\":\"_reports\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_extra\",\"type\":\"uint8\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"59974e38": "distributeRewards(uint256)",
		"4bb278f3": "finalize()",
		"f0141d84": "getDecimals()",
		"57eba759": "getNewVotePeriod()",
		"077945d3": "getNewVoters()",
		"ed78349d": "getNonRevealThreshold()",
		"9f8743f7": "getRound()",
		"3c8510fd": "getRoundData(uint256,string)",
		"df7f710e": "getSymbols()",
		"b78dec52": "getVotePeriod()",
		"cdd72253": "getVoters()",
		"33f98c77": "latestRoundData(string)",
		"3f422ef3": "setCommitRevealConfig(uint256,uint256)",
		"b3ab15fb": "setOperator(address)",
		"da39fbfe": "setSlashingConfig(int256,int256,uint256,uint256)",
		"8d4f75d2": "setSymbols(string[])",
		"da78110e": "setVoters(address[],address[],address[])",
		"0f65875c": "updateVotersAndSymbol()",
		"56833ebe": "vote(uint256,(uint120,uint8)[],uint256,uint8)",
	},
}

// IOracleABI is the input ABI used to generate the binding from.
// Deprecated: Use IOracleMetaData.ABI instead.
var IOracleABI = IOracleMetaData.ABI

// Deprecated: Use IOracleMetaData.Sigs instead.
// IOracleFuncSigs maps the 4-byte function signature to its string representation.
var IOracleFuncSigs = IOracleMetaData.Sigs

// IOracle is an auto generated Go binding around an Ethereum contract.
type IOracle struct {
	IOracleCaller     // Read-only binding to the contract
	IOracleTransactor // Write-only binding to the contract
	IOracleFilterer   // Log filterer for contract events
}

// IOracleCaller is an auto generated read-only Go binding around an Ethereum contract.
type IOracleCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IOracleTransactor is an auto generated write-only Go binding around an Ethereum contract.
type IOracleTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IOracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type IOracleFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IOracleSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type IOracleSession struct {
	Contract     *IOracle          // 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
}

// IOracleCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type IOracleCallerSession struct {
	Contract *IOracleCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts  // Call options to use throughout this session
}

// IOracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type IOracleTransactorSession struct {
	Contract     *IOracleTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
}

// IOracleRaw is an auto generated low-level Go binding around an Ethereum contract.
type IOracleRaw struct {
	Contract *IOracle // Generic contract binding to access the raw methods on
}

// IOracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IOracleCallerRaw struct {
	Contract *IOracleCaller // Generic read-only contract binding to access the raw methods on
}

// IOracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IOracleTransactorRaw struct {
	Contract *IOracleTransactor // Generic write-only contract binding to access the raw methods on
}

// NewIOracle creates a new instance of IOracle, bound to a specific deployed contract.
func NewIOracle(address common.Address, backend bind.ContractBackend) (*IOracle, error) {
	contract, err := bindIOracle(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IOracle{IOracleCaller: IOracleCaller{contract: contract}, IOracleTransactor: IOracleTransactor{contract: contract}, IOracleFilterer: IOracleFilterer{contract: contract}}, nil
}

// NewIOracleCaller creates a new read-only instance of IOracle, bound to a specific deployed contract.
func NewIOracleCaller(address common.Address, caller bind.ContractCaller) (*IOracleCaller, error) {
	contract, err := bindIOracle(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IOracleCaller{contract: contract}, nil
}

// NewIOracleTransactor creates a new write-only instance of IOracle, bound to a specific deployed contract.
func NewIOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*IOracleTransactor, error) {
	contract, err := bindIOracle(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IOracleTransactor{contract: contract}, nil
}

// NewIOracleFilterer creates a new log filterer instance of IOracle, bound to a specific deployed contract.
func NewIOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*IOracleFilterer, error) {
	contract, err := bindIOracle(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IOracleFilterer{contract: contract}, nil
}

// bindIOracle binds a generic wrapper to an already deployed contract.
func bindIOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IOracleABI))
	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 (_IOracle *IOracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IOracle.Contract.IOracleCaller.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 (_IOracle *IOracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IOracle.Contract.IOracleTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IOracle *IOracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IOracle.Contract.IOracleTransactor.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 (_IOracle *IOracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IOracle.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 (_IOracle *IOracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IOracle.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IOracle *IOracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IOracle.Contract.contract.Transact(opts, method, params...)
}

// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84.
//
// Solidity: function getDecimals() view returns(uint8)
func (_IOracle *IOracleCaller) GetDecimals(opts *bind.CallOpts) (uint8, error) {
	var out []interface{}
	err := _IOracle.contract.Call(opts, &out, "getDecimals")

	if err != nil {
		return *new(uint8), err
	}

	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)

	return out0, err

}

// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84.
//
// Solidity: function getDecimals() view returns(uint8)
func (_IOracle *IOracleSession) GetDecimals() (uint8, error) {
	return _IOracle.Contract.GetDecimals(&_IOracle.CallOpts)
}

// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84.
//
// Solidity: function getDecimals() view returns(uint8)
func (_IOracle *IOracleCallerSession) GetDecimals() (uint8, error) {
	return _IOracle.Contract.GetDecimals(&_IOracle.CallOpts)
}

// GetNewVotePeriod is a free data retrieval call binding the contract method 0x57eba759.
//
// Solidity: function getNewVotePeriod() view returns(uint256)
func (_IOracle *IOracleCaller) GetNewVotePeriod(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IOracle.contract.Call(opts, &out, "getNewVotePeriod")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetNewVotePeriod is a free data retrieval call binding the contract method 0x57eba759.
//
// Solidity: function getNewVotePeriod() view returns(uint256)
func (_IOracle *IOracleSession) GetNewVotePeriod() (*big.Int, error) {
	return _IOracle.Contract.GetNewVotePeriod(&_IOracle.CallOpts)
}

// GetNewVotePeriod is a free data retrieval call binding the contract method 0x57eba759.
//
// Solidity: function getNewVotePeriod() view returns(uint256)
func (_IOracle *IOracleCallerSession) GetNewVotePeriod() (*big.Int, error) {
	return _IOracle.Contract.GetNewVotePeriod(&_IOracle.CallOpts)
}

// GetNewVoters is a free data retrieval call binding the contract method 0x077945d3.
//
// Solidity: function getNewVoters() view returns(address[])
func (_IOracle *IOracleCaller) GetNewVoters(opts *bind.CallOpts) ([]common.Address, error) {
	var out []interface{}
	err := _IOracle.contract.Call(opts, &out, "getNewVoters")

	if err != nil {
		return *new([]common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)

	return out0, err

}

// GetNewVoters is a free data retrieval call binding the contract method 0x077945d3.
//
// Solidity: function getNewVoters() view returns(address[])
func (_IOracle *IOracleSession) GetNewVoters() ([]common.Address, error) {
	return _IOracle.Contract.GetNewVoters(&_IOracle.CallOpts)
}

// GetNewVoters is a free data retrieval call binding the contract method 0x077945d3.
//
// Solidity: function getNewVoters() view returns(address[])
func (_IOracle *IOracleCallerSession) GetNewVoters() ([]common.Address, error) {
	return _IOracle.Contract.GetNewVoters(&_IOracle.CallOpts)
}

// GetNonRevealThreshold is a free data retrieval call binding the contract method 0xed78349d.
//
// Solidity: function getNonRevealThreshold() view returns(uint256)
func (_IOracle *IOracleCaller) GetNonRevealThreshold(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IOracle.contract.Call(opts, &out, "getNonRevealThreshold")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetNonRevealThreshold is a free data retrieval call binding the contract method 0xed78349d.
//
// Solidity: function getNonRevealThreshold() view returns(uint256)
func (_IOracle *IOracleSession) GetNonRevealThreshold() (*big.Int, error) {
	return _IOracle.Contract.GetNonRevealThreshold(&_IOracle.CallOpts)
}

// GetNonRevealThreshold is a free data retrieval call binding the contract method 0xed78349d.
//
// Solidity: function getNonRevealThreshold() view returns(uint256)
func (_IOracle *IOracleCallerSession) GetNonRevealThreshold() (*big.Int, error) {
	return _IOracle.Contract.GetNonRevealThreshold(&_IOracle.CallOpts)
}

// GetRound is a free data retrieval call binding the contract method 0x9f8743f7.
//
// Solidity: function getRound() view returns(uint256)
func (_IOracle *IOracleCaller) GetRound(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IOracle.contract.Call(opts, &out, "getRound")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetRound is a free data retrieval call binding the contract method 0x9f8743f7.
//
// Solidity: function getRound() view returns(uint256)
func (_IOracle *IOracleSession) GetRound() (*big.Int, error) {
	return _IOracle.Contract.GetRound(&_IOracle.CallOpts)
}

// GetRound is a free data retrieval call binding the contract method 0x9f8743f7.
//
// Solidity: function getRound() view returns(uint256)
func (_IOracle *IOracleCallerSession) GetRound() (*big.Int, error) {
	return _IOracle.Contract.GetRound(&_IOracle.CallOpts)
}

// GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd.
//
// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_IOracle *IOracleCaller) GetRoundData(opts *bind.CallOpts, _round *big.Int, _symbol string) (IOracleRoundData, error) {
	var out []interface{}
	err := _IOracle.contract.Call(opts, &out, "getRoundData", _round, _symbol)

	if err != nil {
		return *new(IOracleRoundData), err
	}

	out0 := *abi.ConvertType(out[0], new(IOracleRoundData)).(*IOracleRoundData)

	return out0, err

}

// GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd.
//
// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_IOracle *IOracleSession) GetRoundData(_round *big.Int, _symbol string) (IOracleRoundData, error) {
	return _IOracle.Contract.GetRoundData(&_IOracle.CallOpts, _round, _symbol)
}

// GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd.
//
// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_IOracle *IOracleCallerSession) GetRoundData(_round *big.Int, _symbol string) (IOracleRoundData, error) {
	return _IOracle.Contract.GetRoundData(&_IOracle.CallOpts, _round, _symbol)
}

// GetSymbols is a free data retrieval call binding the contract method 0xdf7f710e.
//
// Solidity: function getSymbols() view returns(string[] _symbols)
func (_IOracle *IOracleCaller) GetSymbols(opts *bind.CallOpts) ([]string, error) {
	var out []interface{}
	err := _IOracle.contract.Call(opts, &out, "getSymbols")

	if err != nil {
		return *new([]string), err
	}

	out0 := *abi.ConvertType(out[0], new([]string)).(*[]string)

	return out0, err

}

// GetSymbols is a free data retrieval call binding the contract method 0xdf7f710e.
//
// Solidity: function getSymbols() view returns(string[] _symbols)
func (_IOracle *IOracleSession) GetSymbols() ([]string, error) {
	return _IOracle.Contract.GetSymbols(&_IOracle.CallOpts)
}

// GetSymbols is a free data retrieval call binding the contract method 0xdf7f710e.
//
// Solidity: function getSymbols() view returns(string[] _symbols)
func (_IOracle *IOracleCallerSession) GetSymbols() ([]string, error) {
	return _IOracle.Contract.GetSymbols(&_IOracle.CallOpts)
}

// GetVotePeriod is a free data retrieval call binding the contract method 0xb78dec52.
//
// Solidity: function getVotePeriod() view returns(uint256)
func (_IOracle *IOracleCaller) GetVotePeriod(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IOracle.contract.Call(opts, &out, "getVotePeriod")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetVotePeriod is a free data retrieval call binding the contract method 0xb78dec52.
//
// Solidity: function getVotePeriod() view returns(uint256)
func (_IOracle *IOracleSession) GetVotePeriod() (*big.Int, error) {
	return _IOracle.Contract.GetVotePeriod(&_IOracle.CallOpts)
}

// GetVotePeriod is a free data retrieval call binding the contract method 0xb78dec52.
//
// Solidity: function getVotePeriod() view returns(uint256)
func (_IOracle *IOracleCallerSession) GetVotePeriod() (*big.Int, error) {
	return _IOracle.Contract.GetVotePeriod(&_IOracle.CallOpts)
}

// GetVoters is a free data retrieval call binding the contract method 0xcdd72253.
//
// Solidity: function getVoters() view returns(address[])
func (_IOracle *IOracleCaller) GetVoters(opts *bind.CallOpts) ([]common.Address, error) {
	var out []interface{}
	err := _IOracle.contract.Call(opts, &out, "getVoters")

	if err != nil {
		return *new([]common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)

	return out0, err

}

// GetVoters is a free data retrieval call binding the contract method 0xcdd72253.
//
// Solidity: function getVoters() view returns(address[])
func (_IOracle *IOracleSession) GetVoters() ([]common.Address, error) {
	return _IOracle.Contract.GetVoters(&_IOracle.CallOpts)
}

// GetVoters is a free data retrieval call binding the contract method 0xcdd72253.
//
// Solidity: function getVoters() view returns(address[])
func (_IOracle *IOracleCallerSession) GetVoters() ([]common.Address, error) {
	return _IOracle.Contract.GetVoters(&_IOracle.CallOpts)
}

// LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77.
//
// Solidity: function latestRoundData(string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_IOracle *IOracleCaller) LatestRoundData(opts *bind.CallOpts, _symbol string) (IOracleRoundData, error) {
	var out []interface{}
	err := _IOracle.contract.Call(opts, &out, "latestRoundData", _symbol)

	if err != nil {
		return *new(IOracleRoundData), err
	}

	out0 := *abi.ConvertType(out[0], new(IOracleRoundData)).(*IOracleRoundData)

	return out0, err

}

// LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77.
//
// Solidity: function latestRoundData(string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_IOracle *IOracleSession) LatestRoundData(_symbol string) (IOracleRoundData, error) {
	return _IOracle.Contract.LatestRoundData(&_IOracle.CallOpts, _symbol)
}

// LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77.
//
// Solidity: function latestRoundData(string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_IOracle *IOracleCallerSession) LatestRoundData(_symbol string) (IOracleRoundData, error) {
	return _IOracle.Contract.LatestRoundData(&_IOracle.CallOpts, _symbol)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0x59974e38.
//
// Solidity: function distributeRewards(uint256 _ntnRewards) payable returns()
func (_IOracle *IOracleTransactor) DistributeRewards(opts *bind.TransactOpts, _ntnRewards *big.Int) (*types.Transaction, error) {
	return _IOracle.contract.Transact(opts, "distributeRewards", _ntnRewards)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0x59974e38.
//
// Solidity: function distributeRewards(uint256 _ntnRewards) payable returns()
func (_IOracle *IOracleSession) DistributeRewards(_ntnRewards *big.Int) (*types.Transaction, error) {
	return _IOracle.Contract.DistributeRewards(&_IOracle.TransactOpts, _ntnRewards)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0x59974e38.
//
// Solidity: function distributeRewards(uint256 _ntnRewards) payable returns()
func (_IOracle *IOracleTransactorSession) DistributeRewards(_ntnRewards *big.Int) (*types.Transaction, error) {
	return _IOracle.Contract.DistributeRewards(&_IOracle.TransactOpts, _ntnRewards)
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns(bool)
func (_IOracle *IOracleTransactor) Finalize(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IOracle.contract.Transact(opts, "finalize")
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns(bool)
func (_IOracle *IOracleSession) Finalize() (*types.Transaction, error) {
	return _IOracle.Contract.Finalize(&_IOracle.TransactOpts)
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns(bool)
func (_IOracle *IOracleTransactorSession) Finalize() (*types.Transaction, error) {
	return _IOracle.Contract.Finalize(&_IOracle.TransactOpts)
}

// SetCommitRevealConfig is a paid mutator transaction binding the contract method 0x3f422ef3.
//
// Solidity: function setCommitRevealConfig(uint256 _threshold, uint256 _resetInterval) returns()
func (_IOracle *IOracleTransactor) SetCommitRevealConfig(opts *bind.TransactOpts, _threshold *big.Int, _resetInterval *big.Int) (*types.Transaction, error) {
	return _IOracle.contract.Transact(opts, "setCommitRevealConfig", _threshold, _resetInterval)
}

// SetCommitRevealConfig is a paid mutator transaction binding the contract method 0x3f422ef3.
//
// Solidity: function setCommitRevealConfig(uint256 _threshold, uint256 _resetInterval) returns()
func (_IOracle *IOracleSession) SetCommitRevealConfig(_threshold *big.Int, _resetInterval *big.Int) (*types.Transaction, error) {
	return _IOracle.Contract.SetCommitRevealConfig(&_IOracle.TransactOpts, _threshold, _resetInterval)
}

// SetCommitRevealConfig is a paid mutator transaction binding the contract method 0x3f422ef3.
//
// Solidity: function setCommitRevealConfig(uint256 _threshold, uint256 _resetInterval) returns()
func (_IOracle *IOracleTransactorSession) SetCommitRevealConfig(_threshold *big.Int, _resetInterval *big.Int) (*types.Transaction, error) {
	return _IOracle.Contract.SetCommitRevealConfig(&_IOracle.TransactOpts, _threshold, _resetInterval)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_IOracle *IOracleTransactor) SetOperator(opts *bind.TransactOpts, _operator common.Address) (*types.Transaction, error) {
	return _IOracle.contract.Transact(opts, "setOperator", _operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_IOracle *IOracleSession) SetOperator(_operator common.Address) (*types.Transaction, error) {
	return _IOracle.Contract.SetOperator(&_IOracle.TransactOpts, _operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_IOracle *IOracleTransactorSession) SetOperator(_operator common.Address) (*types.Transaction, error) {
	return _IOracle.Contract.SetOperator(&_IOracle.TransactOpts, _operator)
}

// SetSlashingConfig is a paid mutator transaction binding the contract method 0xda39fbfe.
//
// Solidity: function setSlashingConfig(int256 _outlierSlashingThreshold, int256 _outlierDetectionThreshold, uint256 _baseSlashingRate, uint256 _slashingRateCap) returns()
func (_IOracle *IOracleTransactor) SetSlashingConfig(opts *bind.TransactOpts, _outlierSlashingThreshold *big.Int, _outlierDetectionThreshold *big.Int, _baseSlashingRate *big.Int, _slashingRateCap *big.Int) (*types.Transaction, error) {
	return _IOracle.contract.Transact(opts, "setSlashingConfig", _outlierSlashingThreshold, _outlierDetectionThreshold, _baseSlashingRate, _slashingRateCap)
}

// SetSlashingConfig is a paid mutator transaction binding the contract method 0xda39fbfe.
//
// Solidity: function setSlashingConfig(int256 _outlierSlashingThreshold, int256 _outlierDetectionThreshold, uint256 _baseSlashingRate, uint256 _slashingRateCap) returns()
func (_IOracle *IOracleSession) SetSlashingConfig(_outlierSlashingThreshold *big.Int, _outlierDetectionThreshold *big.Int, _baseSlashingRate *big.Int, _slashingRateCap *big.Int) (*types.Transaction, error) {
	return _IOracle.Contract.SetSlashingConfig(&_IOracle.TransactOpts, _outlierSlashingThreshold, _outlierDetectionThreshold, _baseSlashingRate, _slashingRateCap)
}

// SetSlashingConfig is a paid mutator transaction binding the contract method 0xda39fbfe.
//
// Solidity: function setSlashingConfig(int256 _outlierSlashingThreshold, int256 _outlierDetectionThreshold, uint256 _baseSlashingRate, uint256 _slashingRateCap) returns()
func (_IOracle *IOracleTransactorSession) SetSlashingConfig(_outlierSlashingThreshold *big.Int, _outlierDetectionThreshold *big.Int, _baseSlashingRate *big.Int, _slashingRateCap *big.Int) (*types.Transaction, error) {
	return _IOracle.Contract.SetSlashingConfig(&_IOracle.TransactOpts, _outlierSlashingThreshold, _outlierDetectionThreshold, _baseSlashingRate, _slashingRateCap)
}

// SetSymbols is a paid mutator transaction binding the contract method 0x8d4f75d2.
//
// Solidity: function setSymbols(string[] _symbols) returns()
func (_IOracle *IOracleTransactor) SetSymbols(opts *bind.TransactOpts, _symbols []string) (*types.Transaction, error) {
	return _IOracle.contract.Transact(opts, "setSymbols", _symbols)
}

// SetSymbols is a paid mutator transaction binding the contract method 0x8d4f75d2.
//
// Solidity: function setSymbols(string[] _symbols) returns()
func (_IOracle *IOracleSession) SetSymbols(_symbols []string) (*types.Transaction, error) {
	return _IOracle.Contract.SetSymbols(&_IOracle.TransactOpts, _symbols)
}

// SetSymbols is a paid mutator transaction binding the contract method 0x8d4f75d2.
//
// Solidity: function setSymbols(string[] _symbols) returns()
func (_IOracle *IOracleTransactorSession) SetSymbols(_symbols []string) (*types.Transaction, error) {
	return _IOracle.Contract.SetSymbols(&_IOracle.TransactOpts, _symbols)
}

// SetVoters is a paid mutator transaction binding the contract method 0xda78110e.
//
// Solidity: function setVoters(address[] _newVoters, address[] _treasury, address[] _validator) returns()
func (_IOracle *IOracleTransactor) SetVoters(opts *bind.TransactOpts, _newVoters []common.Address, _treasury []common.Address, _validator []common.Address) (*types.Transaction, error) {
	return _IOracle.contract.Transact(opts, "setVoters", _newVoters, _treasury, _validator)
}

// SetVoters is a paid mutator transaction binding the contract method 0xda78110e.
//
// Solidity: function setVoters(address[] _newVoters, address[] _treasury, address[] _validator) returns()
func (_IOracle *IOracleSession) SetVoters(_newVoters []common.Address, _treasury []common.Address, _validator []common.Address) (*types.Transaction, error) {
	return _IOracle.Contract.SetVoters(&_IOracle.TransactOpts, _newVoters, _treasury, _validator)
}

// SetVoters is a paid mutator transaction binding the contract method 0xda78110e.
//
// Solidity: function setVoters(address[] _newVoters, address[] _treasury, address[] _validator) returns()
func (_IOracle *IOracleTransactorSession) SetVoters(_newVoters []common.Address, _treasury []common.Address, _validator []common.Address) (*types.Transaction, error) {
	return _IOracle.Contract.SetVoters(&_IOracle.TransactOpts, _newVoters, _treasury, _validator)
}

// UpdateVotersAndSymbol is a paid mutator transaction binding the contract method 0x0f65875c.
//
// Solidity: function updateVotersAndSymbol() returns()
func (_IOracle *IOracleTransactor) UpdateVotersAndSymbol(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IOracle.contract.Transact(opts, "updateVotersAndSymbol")
}

// UpdateVotersAndSymbol is a paid mutator transaction binding the contract method 0x0f65875c.
//
// Solidity: function updateVotersAndSymbol() returns()
func (_IOracle *IOracleSession) UpdateVotersAndSymbol() (*types.Transaction, error) {
	return _IOracle.Contract.UpdateVotersAndSymbol(&_IOracle.TransactOpts)
}

// UpdateVotersAndSymbol is a paid mutator transaction binding the contract method 0x0f65875c.
//
// Solidity: function updateVotersAndSymbol() returns()
func (_IOracle *IOracleTransactorSession) UpdateVotersAndSymbol() (*types.Transaction, error) {
	return _IOracle.Contract.UpdateVotersAndSymbol(&_IOracle.TransactOpts)
}

// Vote is a paid mutator transaction binding the contract method 0x56833ebe.
//
// Solidity: function vote(uint256 _commit, (uint120,uint8)[] _reports, uint256 _salt, uint8 _extra) returns()
func (_IOracle *IOracleTransactor) Vote(opts *bind.TransactOpts, _commit *big.Int, _reports []IOracleReport, _salt *big.Int, _extra uint8) (*types.Transaction, error) {
	return _IOracle.contract.Transact(opts, "vote", _commit, _reports, _salt, _extra)
}

// Vote is a paid mutator transaction binding the contract method 0x56833ebe.
//
// Solidity: function vote(uint256 _commit, (uint120,uint8)[] _reports, uint256 _salt, uint8 _extra) returns()
func (_IOracle *IOracleSession) Vote(_commit *big.Int, _reports []IOracleReport, _salt *big.Int, _extra uint8) (*types.Transaction, error) {
	return _IOracle.Contract.Vote(&_IOracle.TransactOpts, _commit, _reports, _salt, _extra)
}

// Vote is a paid mutator transaction binding the contract method 0x56833ebe.
//
// Solidity: function vote(uint256 _commit, (uint120,uint8)[] _reports, uint256 _salt, uint8 _extra) returns()
func (_IOracle *IOracleTransactorSession) Vote(_commit *big.Int, _reports []IOracleReport, _salt *big.Int, _extra uint8) (*types.Transaction, error) {
	return _IOracle.Contract.Vote(&_IOracle.TransactOpts, _commit, _reports, _salt, _extra)
}

// IOracleCommitRevealMissedIterator is returned from FilterCommitRevealMissed and is used to iterate over the raw logs and unpacked data for CommitRevealMissed events raised by the IOracle contract.
type IOracleCommitRevealMissedIterator struct {
	Event *IOracleCommitRevealMissed // 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 *IOracleCommitRevealMissedIterator) 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(IOracleCommitRevealMissed)
			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(IOracleCommitRevealMissed)
		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 *IOracleCommitRevealMissedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IOracleCommitRevealMissedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IOracleCommitRevealMissed represents a CommitRevealMissed event raised by the IOracle contract.
type IOracleCommitRevealMissed struct {
	Voter          common.Address
	Round          *big.Int
	NonRevealCount *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterCommitRevealMissed is a free log retrieval operation binding the contract event 0x176956a4e941f6737f81a3c9a09d8571dd0438d86e25a432beb2013aced43092.
//
// Solidity: event CommitRevealMissed(address indexed _voter, uint256 _round, uint256 _nonRevealCount)
func (_IOracle *IOracleFilterer) FilterCommitRevealMissed(opts *bind.FilterOpts, _voter []common.Address) (*IOracleCommitRevealMissedIterator, error) {

	var _voterRule []interface{}
	for _, _voterItem := range _voter {
		_voterRule = append(_voterRule, _voterItem)
	}

	logs, sub, err := _IOracle.contract.FilterLogs(opts, "CommitRevealMissed", _voterRule)
	if err != nil {
		return nil, err
	}
	return &IOracleCommitRevealMissedIterator{contract: _IOracle.contract, event: "CommitRevealMissed", logs: logs, sub: sub}, nil
}

// WatchCommitRevealMissed is a free log subscription operation binding the contract event 0x176956a4e941f6737f81a3c9a09d8571dd0438d86e25a432beb2013aced43092.
//
// Solidity: event CommitRevealMissed(address indexed _voter, uint256 _round, uint256 _nonRevealCount)
func (_IOracle *IOracleFilterer) WatchCommitRevealMissed(opts *bind.WatchOpts, sink chan<- *IOracleCommitRevealMissed, _voter []common.Address) (event.Subscription, error) {

	var _voterRule []interface{}
	for _, _voterItem := range _voter {
		_voterRule = append(_voterRule, _voterItem)
	}

	logs, sub, err := _IOracle.contract.WatchLogs(opts, "CommitRevealMissed", _voterRule)
	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(IOracleCommitRevealMissed)
				if err := _IOracle.contract.UnpackLog(event, "CommitRevealMissed", 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
}

// ParseCommitRevealMissed is a log parse operation binding the contract event 0x176956a4e941f6737f81a3c9a09d8571dd0438d86e25a432beb2013aced43092.
//
// Solidity: event CommitRevealMissed(address indexed _voter, uint256 _round, uint256 _nonRevealCount)
func (_IOracle *IOracleFilterer) ParseCommitRevealMissed(log types.Log) (*IOracleCommitRevealMissed, error) {
	event := new(IOracleCommitRevealMissed)
	if err := _IOracle.contract.UnpackLog(event, "CommitRevealMissed", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IOracleInvalidVoteIterator is returned from FilterInvalidVote and is used to iterate over the raw logs and unpacked data for InvalidVote events raised by the IOracle contract.
type IOracleInvalidVoteIterator struct {
	Event *IOracleInvalidVote // 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 *IOracleInvalidVoteIterator) 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(IOracleInvalidVote)
			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(IOracleInvalidVote)
		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 *IOracleInvalidVoteIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IOracleInvalidVoteIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IOracleInvalidVote represents a InvalidVote event raised by the IOracle contract.
type IOracleInvalidVote struct {
	Cause       string
	Reporter    common.Address
	ExpValue    *big.Int
	ActualValue *big.Int
	Extra       uint8
	Raw         types.Log // Blockchain specific contextual infos
}

// FilterInvalidVote is a free log retrieval operation binding the contract event 0x04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b1.
//
// Solidity: event InvalidVote(string cause, address indexed reporter, uint256 expValue, uint256 actualValue, uint8 extra)
func (_IOracle *IOracleFilterer) FilterInvalidVote(opts *bind.FilterOpts, reporter []common.Address) (*IOracleInvalidVoteIterator, error) {

	var reporterRule []interface{}
	for _, reporterItem := range reporter {
		reporterRule = append(reporterRule, reporterItem)
	}

	logs, sub, err := _IOracle.contract.FilterLogs(opts, "InvalidVote", reporterRule)
	if err != nil {
		return nil, err
	}
	return &IOracleInvalidVoteIterator{contract: _IOracle.contract, event: "InvalidVote", logs: logs, sub: sub}, nil
}

// WatchInvalidVote is a free log subscription operation binding the contract event 0x04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b1.
//
// Solidity: event InvalidVote(string cause, address indexed reporter, uint256 expValue, uint256 actualValue, uint8 extra)
func (_IOracle *IOracleFilterer) WatchInvalidVote(opts *bind.WatchOpts, sink chan<- *IOracleInvalidVote, reporter []common.Address) (event.Subscription, error) {

	var reporterRule []interface{}
	for _, reporterItem := range reporter {
		reporterRule = append(reporterRule, reporterItem)
	}

	logs, sub, err := _IOracle.contract.WatchLogs(opts, "InvalidVote", reporterRule)
	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(IOracleInvalidVote)
				if err := _IOracle.contract.UnpackLog(event, "InvalidVote", 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
}

// ParseInvalidVote is a log parse operation binding the contract event 0x04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b1.
//
// Solidity: event InvalidVote(string cause, address indexed reporter, uint256 expValue, uint256 actualValue, uint8 extra)
func (_IOracle *IOracleFilterer) ParseInvalidVote(log types.Log) (*IOracleInvalidVote, error) {
	event := new(IOracleInvalidVote)
	if err := _IOracle.contract.UnpackLog(event, "InvalidVote", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IOracleNewRoundIterator is returned from FilterNewRound and is used to iterate over the raw logs and unpacked data for NewRound events raised by the IOracle contract.
type IOracleNewRoundIterator struct {
	Event *IOracleNewRound // 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 *IOracleNewRoundIterator) 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(IOracleNewRound)
			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(IOracleNewRound)
		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 *IOracleNewRoundIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IOracleNewRoundIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IOracleNewRound represents a NewRound event raised by the IOracle contract.
type IOracleNewRound struct {
	Round      *big.Int
	Timestamp  *big.Int
	VotePeriod *big.Int
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterNewRound is a free log retrieval operation binding the contract event 0x5aec57d81928b24d30b1a2aec0d23d693412c37d7ec106b5d8259413716bb1f4.
//
// Solidity: event NewRound(uint256 _round, uint256 _timestamp, uint256 _votePeriod)
func (_IOracle *IOracleFilterer) FilterNewRound(opts *bind.FilterOpts) (*IOracleNewRoundIterator, error) {

	logs, sub, err := _IOracle.contract.FilterLogs(opts, "NewRound")
	if err != nil {
		return nil, err
	}
	return &IOracleNewRoundIterator{contract: _IOracle.contract, event: "NewRound", logs: logs, sub: sub}, nil
}

// WatchNewRound is a free log subscription operation binding the contract event 0x5aec57d81928b24d30b1a2aec0d23d693412c37d7ec106b5d8259413716bb1f4.
//
// Solidity: event NewRound(uint256 _round, uint256 _timestamp, uint256 _votePeriod)
func (_IOracle *IOracleFilterer) WatchNewRound(opts *bind.WatchOpts, sink chan<- *IOracleNewRound) (event.Subscription, error) {

	logs, sub, err := _IOracle.contract.WatchLogs(opts, "NewRound")
	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(IOracleNewRound)
				if err := _IOracle.contract.UnpackLog(event, "NewRound", 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
}

// ParseNewRound is a log parse operation binding the contract event 0x5aec57d81928b24d30b1a2aec0d23d693412c37d7ec106b5d8259413716bb1f4.
//
// Solidity: event NewRound(uint256 _round, uint256 _timestamp, uint256 _votePeriod)
func (_IOracle *IOracleFilterer) ParseNewRound(log types.Log) (*IOracleNewRound, error) {
	event := new(IOracleNewRound)
	if err := _IOracle.contract.UnpackLog(event, "NewRound", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IOracleNewSymbolsIterator is returned from FilterNewSymbols and is used to iterate over the raw logs and unpacked data for NewSymbols events raised by the IOracle contract.
type IOracleNewSymbolsIterator struct {
	Event *IOracleNewSymbols // 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 *IOracleNewSymbolsIterator) 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(IOracleNewSymbols)
			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(IOracleNewSymbols)
		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 *IOracleNewSymbolsIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IOracleNewSymbolsIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IOracleNewSymbols represents a NewSymbols event raised by the IOracle contract.
type IOracleNewSymbols struct {
	Symbols []string
	Round   *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterNewSymbols is a free log retrieval operation binding the contract event 0xaa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d.
//
// Solidity: event NewSymbols(string[] _symbols, uint256 _round)
func (_IOracle *IOracleFilterer) FilterNewSymbols(opts *bind.FilterOpts) (*IOracleNewSymbolsIterator, error) {

	logs, sub, err := _IOracle.contract.FilterLogs(opts, "NewSymbols")
	if err != nil {
		return nil, err
	}
	return &IOracleNewSymbolsIterator{contract: _IOracle.contract, event: "NewSymbols", logs: logs, sub: sub}, nil
}

// WatchNewSymbols is a free log subscription operation binding the contract event 0xaa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d.
//
// Solidity: event NewSymbols(string[] _symbols, uint256 _round)
func (_IOracle *IOracleFilterer) WatchNewSymbols(opts *bind.WatchOpts, sink chan<- *IOracleNewSymbols) (event.Subscription, error) {

	logs, sub, err := _IOracle.contract.WatchLogs(opts, "NewSymbols")
	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(IOracleNewSymbols)
				if err := _IOracle.contract.UnpackLog(event, "NewSymbols", 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
}

// ParseNewSymbols is a log parse operation binding the contract event 0xaa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d.
//
// Solidity: event NewSymbols(string[] _symbols, uint256 _round)
func (_IOracle *IOracleFilterer) ParseNewSymbols(log types.Log) (*IOracleNewSymbols, error) {
	event := new(IOracleNewSymbols)
	if err := _IOracle.contract.UnpackLog(event, "NewSymbols", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IOracleNewVoterIterator is returned from FilterNewVoter and is used to iterate over the raw logs and unpacked data for NewVoter events raised by the IOracle contract.
type IOracleNewVoterIterator struct {
	Event *IOracleNewVoter // 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 *IOracleNewVoterIterator) 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(IOracleNewVoter)
			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(IOracleNewVoter)
		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 *IOracleNewVoterIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IOracleNewVoterIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IOracleNewVoter represents a NewVoter event raised by the IOracle contract.
type IOracleNewVoter struct {
	Reporter common.Address
	Extra    uint8
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterNewVoter is a free log retrieval operation binding the contract event 0xd2ec8e890a03083998d3e16f98044fd3dd13fe3e61b7bc2e58ee6da43b50af73.
//
// Solidity: event NewVoter(address reporter, uint8 extra)
func (_IOracle *IOracleFilterer) FilterNewVoter(opts *bind.FilterOpts) (*IOracleNewVoterIterator, error) {

	logs, sub, err := _IOracle.contract.FilterLogs(opts, "NewVoter")
	if err != nil {
		return nil, err
	}
	return &IOracleNewVoterIterator{contract: _IOracle.contract, event: "NewVoter", logs: logs, sub: sub}, nil
}

// WatchNewVoter is a free log subscription operation binding the contract event 0xd2ec8e890a03083998d3e16f98044fd3dd13fe3e61b7bc2e58ee6da43b50af73.
//
// Solidity: event NewVoter(address reporter, uint8 extra)
func (_IOracle *IOracleFilterer) WatchNewVoter(opts *bind.WatchOpts, sink chan<- *IOracleNewVoter) (event.Subscription, error) {

	logs, sub, err := _IOracle.contract.WatchLogs(opts, "NewVoter")
	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(IOracleNewVoter)
				if err := _IOracle.contract.UnpackLog(event, "NewVoter", 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
}

// ParseNewVoter is a log parse operation binding the contract event 0xd2ec8e890a03083998d3e16f98044fd3dd13fe3e61b7bc2e58ee6da43b50af73.
//
// Solidity: event NewVoter(address reporter, uint8 extra)
func (_IOracle *IOracleFilterer) ParseNewVoter(log types.Log) (*IOracleNewVoter, error) {
	event := new(IOracleNewVoter)
	if err := _IOracle.contract.UnpackLog(event, "NewVoter", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IOracleNoRevealPenaltyIterator is returned from FilterNoRevealPenalty and is used to iterate over the raw logs and unpacked data for NoRevealPenalty events raised by the IOracle contract.
type IOracleNoRevealPenaltyIterator struct {
	Event *IOracleNoRevealPenalty // 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 *IOracleNoRevealPenaltyIterator) 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(IOracleNoRevealPenalty)
			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(IOracleNoRevealPenalty)
		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 *IOracleNoRevealPenaltyIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IOracleNoRevealPenaltyIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IOracleNoRevealPenalty represents a NoRevealPenalty event raised by the IOracle contract.
type IOracleNoRevealPenalty struct {
	Voter        common.Address
	Round        *big.Int
	MissedReveal *big.Int
	Raw          types.Log // Blockchain specific contextual infos
}

// FilterNoRevealPenalty is a free log retrieval operation binding the contract event 0x9e6b40f10c60d1ad09594f3b6ed7043d0e978f584d354ace6e1f6025660c42b1.
//
// Solidity: event NoRevealPenalty(address indexed _voter, uint256 _round, uint256 _missedReveal)
func (_IOracle *IOracleFilterer) FilterNoRevealPenalty(opts *bind.FilterOpts, _voter []common.Address) (*IOracleNoRevealPenaltyIterator, error) {

	var _voterRule []interface{}
	for _, _voterItem := range _voter {
		_voterRule = append(_voterRule, _voterItem)
	}

	logs, sub, err := _IOracle.contract.FilterLogs(opts, "NoRevealPenalty", _voterRule)
	if err != nil {
		return nil, err
	}
	return &IOracleNoRevealPenaltyIterator{contract: _IOracle.contract, event: "NoRevealPenalty", logs: logs, sub: sub}, nil
}

// WatchNoRevealPenalty is a free log subscription operation binding the contract event 0x9e6b40f10c60d1ad09594f3b6ed7043d0e978f584d354ace6e1f6025660c42b1.
//
// Solidity: event NoRevealPenalty(address indexed _voter, uint256 _round, uint256 _missedReveal)
func (_IOracle *IOracleFilterer) WatchNoRevealPenalty(opts *bind.WatchOpts, sink chan<- *IOracleNoRevealPenalty, _voter []common.Address) (event.Subscription, error) {

	var _voterRule []interface{}
	for _, _voterItem := range _voter {
		_voterRule = append(_voterRule, _voterItem)
	}

	logs, sub, err := _IOracle.contract.WatchLogs(opts, "NoRevealPenalty", _voterRule)
	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(IOracleNoRevealPenalty)
				if err := _IOracle.contract.UnpackLog(event, "NoRevealPenalty", 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
}

// ParseNoRevealPenalty is a log parse operation binding the contract event 0x9e6b40f10c60d1ad09594f3b6ed7043d0e978f584d354ace6e1f6025660c42b1.
//
// Solidity: event NoRevealPenalty(address indexed _voter, uint256 _round, uint256 _missedReveal)
func (_IOracle *IOracleFilterer) ParseNoRevealPenalty(log types.Log) (*IOracleNoRevealPenalty, error) {
	event := new(IOracleNoRevealPenalty)
	if err := _IOracle.contract.UnpackLog(event, "NoRevealPenalty", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IOraclePenalizedIterator is returned from FilterPenalized and is used to iterate over the raw logs and unpacked data for Penalized events raised by the IOracle contract.
type IOraclePenalizedIterator struct {
	Event *IOraclePenalized // 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 *IOraclePenalizedIterator) 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(IOraclePenalized)
			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(IOraclePenalized)
		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 *IOraclePenalizedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IOraclePenalizedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IOraclePenalized represents a Penalized event raised by the IOracle contract.
type IOraclePenalized struct {
	Participant    common.Address
	SlashingAmount *big.Int
	Symbol         string
	Median         *big.Int
	Reported       *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterPenalized is a free log retrieval operation binding the contract event 0x372858b237c8bd0714183e8351a461d6c3cb1ef83806181b36bf5943711f4f57.
//
// Solidity: event Penalized(address indexed _participant, uint256 _slashingAmount, string _symbol, int256 _median, uint120 _reported)
func (_IOracle *IOracleFilterer) FilterPenalized(opts *bind.FilterOpts, _participant []common.Address) (*IOraclePenalizedIterator, error) {

	var _participantRule []interface{}
	for _, _participantItem := range _participant {
		_participantRule = append(_participantRule, _participantItem)
	}

	logs, sub, err := _IOracle.contract.FilterLogs(opts, "Penalized", _participantRule)
	if err != nil {
		return nil, err
	}
	return &IOraclePenalizedIterator{contract: _IOracle.contract, event: "Penalized", logs: logs, sub: sub}, nil
}

// WatchPenalized is a free log subscription operation binding the contract event 0x372858b237c8bd0714183e8351a461d6c3cb1ef83806181b36bf5943711f4f57.
//
// Solidity: event Penalized(address indexed _participant, uint256 _slashingAmount, string _symbol, int256 _median, uint120 _reported)
func (_IOracle *IOracleFilterer) WatchPenalized(opts *bind.WatchOpts, sink chan<- *IOraclePenalized, _participant []common.Address) (event.Subscription, error) {

	var _participantRule []interface{}
	for _, _participantItem := range _participant {
		_participantRule = append(_participantRule, _participantItem)
	}

	logs, sub, err := _IOracle.contract.WatchLogs(opts, "Penalized", _participantRule)
	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(IOraclePenalized)
				if err := _IOracle.contract.UnpackLog(event, "Penalized", 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
}

// ParsePenalized is a log parse operation binding the contract event 0x372858b237c8bd0714183e8351a461d6c3cb1ef83806181b36bf5943711f4f57.
//
// Solidity: event Penalized(address indexed _participant, uint256 _slashingAmount, string _symbol, int256 _median, uint120 _reported)
func (_IOracle *IOracleFilterer) ParsePenalized(log types.Log) (*IOraclePenalized, error) {
	event := new(IOraclePenalized)
	if err := _IOracle.contract.UnpackLog(event, "Penalized", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IOraclePriceUpdatedIterator is returned from FilterPriceUpdated and is used to iterate over the raw logs and unpacked data for PriceUpdated events raised by the IOracle contract.
type IOraclePriceUpdatedIterator struct {
	Event *IOraclePriceUpdated // 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 *IOraclePriceUpdatedIterator) 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(IOraclePriceUpdated)
			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(IOraclePriceUpdated)
		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 *IOraclePriceUpdatedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IOraclePriceUpdatedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IOraclePriceUpdated represents a PriceUpdated event raised by the IOracle contract.
type IOraclePriceUpdated struct {
	Price     *big.Int
	Round     *big.Int
	Symbol    common.Hash
	Status    bool
	Timestamp *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterPriceUpdated is a free log retrieval operation binding the contract event 0x5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c.
//
// Solidity: event PriceUpdated(uint256 price, uint256 round, string indexed symbol, bool status, uint256 timestamp)
func (_IOracle *IOracleFilterer) FilterPriceUpdated(opts *bind.FilterOpts, symbol []string) (*IOraclePriceUpdatedIterator, error) {

	var symbolRule []interface{}
	for _, symbolItem := range symbol {
		symbolRule = append(symbolRule, symbolItem)
	}

	logs, sub, err := _IOracle.contract.FilterLogs(opts, "PriceUpdated", symbolRule)
	if err != nil {
		return nil, err
	}
	return &IOraclePriceUpdatedIterator{contract: _IOracle.contract, event: "PriceUpdated", logs: logs, sub: sub}, nil
}

// WatchPriceUpdated is a free log subscription operation binding the contract event 0x5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c.
//
// Solidity: event PriceUpdated(uint256 price, uint256 round, string indexed symbol, bool status, uint256 timestamp)
func (_IOracle *IOracleFilterer) WatchPriceUpdated(opts *bind.WatchOpts, sink chan<- *IOraclePriceUpdated, symbol []string) (event.Subscription, error) {

	var symbolRule []interface{}
	for _, symbolItem := range symbol {
		symbolRule = append(symbolRule, symbolItem)
	}

	logs, sub, err := _IOracle.contract.WatchLogs(opts, "PriceUpdated", symbolRule)
	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(IOraclePriceUpdated)
				if err := _IOracle.contract.UnpackLog(event, "PriceUpdated", 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
}

// ParsePriceUpdated is a log parse operation binding the contract event 0x5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c.
//
// Solidity: event PriceUpdated(uint256 price, uint256 round, string indexed symbol, bool status, uint256 timestamp)
func (_IOracle *IOracleFilterer) ParsePriceUpdated(log types.Log) (*IOraclePriceUpdated, error) {
	event := new(IOraclePriceUpdated)
	if err := _IOracle.contract.UnpackLog(event, "PriceUpdated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IOracleSuccessfulVoteIterator is returned from FilterSuccessfulVote and is used to iterate over the raw logs and unpacked data for SuccessfulVote events raised by the IOracle contract.
type IOracleSuccessfulVoteIterator struct {
	Event *IOracleSuccessfulVote // 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 *IOracleSuccessfulVoteIterator) 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(IOracleSuccessfulVote)
			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(IOracleSuccessfulVote)
		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 *IOracleSuccessfulVoteIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IOracleSuccessfulVoteIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IOracleSuccessfulVote represents a SuccessfulVote event raised by the IOracle contract.
type IOracleSuccessfulVote struct {
	Reporter common.Address
	Extra    uint8
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterSuccessfulVote is a free log retrieval operation binding the contract event 0x8bdddd7f2f2c74679ffa6beb8f86aa18bfa5baf1bfaf534d0b66596babc53f08.
//
// Solidity: event SuccessfulVote(address indexed reporter, uint8 extra)
func (_IOracle *IOracleFilterer) FilterSuccessfulVote(opts *bind.FilterOpts, reporter []common.Address) (*IOracleSuccessfulVoteIterator, error) {

	var reporterRule []interface{}
	for _, reporterItem := range reporter {
		reporterRule = append(reporterRule, reporterItem)
	}

	logs, sub, err := _IOracle.contract.FilterLogs(opts, "SuccessfulVote", reporterRule)
	if err != nil {
		return nil, err
	}
	return &IOracleSuccessfulVoteIterator{contract: _IOracle.contract, event: "SuccessfulVote", logs: logs, sub: sub}, nil
}

// WatchSuccessfulVote is a free log subscription operation binding the contract event 0x8bdddd7f2f2c74679ffa6beb8f86aa18bfa5baf1bfaf534d0b66596babc53f08.
//
// Solidity: event SuccessfulVote(address indexed reporter, uint8 extra)
func (_IOracle *IOracleFilterer) WatchSuccessfulVote(opts *bind.WatchOpts, sink chan<- *IOracleSuccessfulVote, reporter []common.Address) (event.Subscription, error) {

	var reporterRule []interface{}
	for _, reporterItem := range reporter {
		reporterRule = append(reporterRule, reporterItem)
	}

	logs, sub, err := _IOracle.contract.WatchLogs(opts, "SuccessfulVote", reporterRule)
	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(IOracleSuccessfulVote)
				if err := _IOracle.contract.UnpackLog(event, "SuccessfulVote", 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
}

// ParseSuccessfulVote is a log parse operation binding the contract event 0x8bdddd7f2f2c74679ffa6beb8f86aa18bfa5baf1bfaf534d0b66596babc53f08.
//
// Solidity: event SuccessfulVote(address indexed reporter, uint8 extra)
func (_IOracle *IOracleFilterer) ParseSuccessfulVote(log types.Log) (*IOracleSuccessfulVote, error) {
	event := new(IOracleSuccessfulVote)
	if err := _IOracle.contract.UnpackLog(event, "SuccessfulVote", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IOracleTotalOracleRewardsIterator is returned from FilterTotalOracleRewards and is used to iterate over the raw logs and unpacked data for TotalOracleRewards events raised by the IOracle contract.
type IOracleTotalOracleRewardsIterator struct {
	Event *IOracleTotalOracleRewards // 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 *IOracleTotalOracleRewardsIterator) 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(IOracleTotalOracleRewards)
			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(IOracleTotalOracleRewards)
		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 *IOracleTotalOracleRewardsIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *IOracleTotalOracleRewardsIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// IOracleTotalOracleRewards represents a TotalOracleRewards event raised by the IOracle contract.
type IOracleTotalOracleRewards struct {
	NtnReward *big.Int
	AtnReward *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterTotalOracleRewards is a free log retrieval operation binding the contract event 0x3e5aaff9e8fd4293ae18127809c2d4069d87fe10c7de92aa39557a1edbd48fec.
//
// Solidity: event TotalOracleRewards(uint256 ntnReward, uint256 atnReward)
func (_IOracle *IOracleFilterer) FilterTotalOracleRewards(opts *bind.FilterOpts) (*IOracleTotalOracleRewardsIterator, error) {

	logs, sub, err := _IOracle.contract.FilterLogs(opts, "TotalOracleRewards")
	if err != nil {
		return nil, err
	}
	return &IOracleTotalOracleRewardsIterator{contract: _IOracle.contract, event: "TotalOracleRewards", logs: logs, sub: sub}, nil
}

// WatchTotalOracleRewards is a free log subscription operation binding the contract event 0x3e5aaff9e8fd4293ae18127809c2d4069d87fe10c7de92aa39557a1edbd48fec.
//
// Solidity: event TotalOracleRewards(uint256 ntnReward, uint256 atnReward)
func (_IOracle *IOracleFilterer) WatchTotalOracleRewards(opts *bind.WatchOpts, sink chan<- *IOracleTotalOracleRewards) (event.Subscription, error) {

	logs, sub, err := _IOracle.contract.WatchLogs(opts, "TotalOracleRewards")
	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(IOracleTotalOracleRewards)
				if err := _IOracle.contract.UnpackLog(event, "TotalOracleRewards", 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
}

// ParseTotalOracleRewards is a log parse operation binding the contract event 0x3e5aaff9e8fd4293ae18127809c2d4069d87fe10c7de92aa39557a1edbd48fec.
//
// Solidity: event TotalOracleRewards(uint256 ntnReward, uint256 atnReward)
func (_IOracle *IOracleFilterer) ParseTotalOracleRewards(log types.Log) (*IOracleTotalOracleRewards, error) {
	event := new(IOracleTotalOracleRewards)
	if err := _IOracle.contract.UnpackLog(event, "TotalOracleRewards", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IScheduleControllerMetaData contains all meta data concerning the IScheduleController contract.
var IScheduleControllerMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getSchedule\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unlockedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastUnlockTime\",\"type\":\"uint256\"}],\"internalType\":\"structIScheduleController.Schedule\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"}],\"name\":\"getTotalSchedules\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"7264c4da": "getSchedule(address,uint256)",
		"088566e9": "getTotalSchedules(address)",
	},
}

// IScheduleControllerABI is the input ABI used to generate the binding from.
// Deprecated: Use IScheduleControllerMetaData.ABI instead.
var IScheduleControllerABI = IScheduleControllerMetaData.ABI

// Deprecated: Use IScheduleControllerMetaData.Sigs instead.
// IScheduleControllerFuncSigs maps the 4-byte function signature to its string representation.
var IScheduleControllerFuncSigs = IScheduleControllerMetaData.Sigs

// IScheduleController is an auto generated Go binding around an Ethereum contract.
type IScheduleController struct {
	IScheduleControllerCaller     // Read-only binding to the contract
	IScheduleControllerTransactor // Write-only binding to the contract
	IScheduleControllerFilterer   // Log filterer for contract events
}

// IScheduleControllerCaller is an auto generated read-only Go binding around an Ethereum contract.
type IScheduleControllerCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IScheduleControllerTransactor is an auto generated write-only Go binding around an Ethereum contract.
type IScheduleControllerTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IScheduleControllerFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type IScheduleControllerFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IScheduleControllerSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type IScheduleControllerSession struct {
	Contract     *IScheduleController // 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
}

// IScheduleControllerCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type IScheduleControllerCallerSession struct {
	Contract *IScheduleControllerCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts              // Call options to use throughout this session
}

// IScheduleControllerTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type IScheduleControllerTransactorSession struct {
	Contract     *IScheduleControllerTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts              // Transaction auth options to use throughout this session
}

// IScheduleControllerRaw is an auto generated low-level Go binding around an Ethereum contract.
type IScheduleControllerRaw struct {
	Contract *IScheduleController // Generic contract binding to access the raw methods on
}

// IScheduleControllerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IScheduleControllerCallerRaw struct {
	Contract *IScheduleControllerCaller // Generic read-only contract binding to access the raw methods on
}

// IScheduleControllerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IScheduleControllerTransactorRaw struct {
	Contract *IScheduleControllerTransactor // Generic write-only contract binding to access the raw methods on
}

// NewIScheduleController creates a new instance of IScheduleController, bound to a specific deployed contract.
func NewIScheduleController(address common.Address, backend bind.ContractBackend) (*IScheduleController, error) {
	contract, err := bindIScheduleController(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IScheduleController{IScheduleControllerCaller: IScheduleControllerCaller{contract: contract}, IScheduleControllerTransactor: IScheduleControllerTransactor{contract: contract}, IScheduleControllerFilterer: IScheduleControllerFilterer{contract: contract}}, nil
}

// NewIScheduleControllerCaller creates a new read-only instance of IScheduleController, bound to a specific deployed contract.
func NewIScheduleControllerCaller(address common.Address, caller bind.ContractCaller) (*IScheduleControllerCaller, error) {
	contract, err := bindIScheduleController(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IScheduleControllerCaller{contract: contract}, nil
}

// NewIScheduleControllerTransactor creates a new write-only instance of IScheduleController, bound to a specific deployed contract.
func NewIScheduleControllerTransactor(address common.Address, transactor bind.ContractTransactor) (*IScheduleControllerTransactor, error) {
	contract, err := bindIScheduleController(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IScheduleControllerTransactor{contract: contract}, nil
}

// NewIScheduleControllerFilterer creates a new log filterer instance of IScheduleController, bound to a specific deployed contract.
func NewIScheduleControllerFilterer(address common.Address, filterer bind.ContractFilterer) (*IScheduleControllerFilterer, error) {
	contract, err := bindIScheduleController(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IScheduleControllerFilterer{contract: contract}, nil
}

// bindIScheduleController binds a generic wrapper to an already deployed contract.
func bindIScheduleController(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IScheduleControllerABI))
	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 (_IScheduleController *IScheduleControllerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IScheduleController.Contract.IScheduleControllerCaller.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 (_IScheduleController *IScheduleControllerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IScheduleController.Contract.IScheduleControllerTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IScheduleController *IScheduleControllerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IScheduleController.Contract.IScheduleControllerTransactor.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 (_IScheduleController *IScheduleControllerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IScheduleController.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 (_IScheduleController *IScheduleControllerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IScheduleController.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IScheduleController *IScheduleControllerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IScheduleController.Contract.contract.Transact(opts, method, params...)
}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_IScheduleController *IScheduleControllerCaller) GetSchedule(opts *bind.CallOpts, _vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	var out []interface{}
	err := _IScheduleController.contract.Call(opts, &out, "getSchedule", _vault, _id)

	if err != nil {
		return *new(IScheduleControllerSchedule), err
	}

	out0 := *abi.ConvertType(out[0], new(IScheduleControllerSchedule)).(*IScheduleControllerSchedule)

	return out0, err

}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_IScheduleController *IScheduleControllerSession) GetSchedule(_vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	return _IScheduleController.Contract.GetSchedule(&_IScheduleController.CallOpts, _vault, _id)
}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_IScheduleController *IScheduleControllerCallerSession) GetSchedule(_vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	return _IScheduleController.Contract.GetSchedule(&_IScheduleController.CallOpts, _vault, _id)
}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_IScheduleController *IScheduleControllerCaller) GetTotalSchedules(opts *bind.CallOpts, _vault common.Address) (*big.Int, error) {
	var out []interface{}
	err := _IScheduleController.contract.Call(opts, &out, "getTotalSchedules", _vault)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_IScheduleController *IScheduleControllerSession) GetTotalSchedules(_vault common.Address) (*big.Int, error) {
	return _IScheduleController.Contract.GetTotalSchedules(&_IScheduleController.CallOpts, _vault)
}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_IScheduleController *IScheduleControllerCallerSession) GetTotalSchedules(_vault common.Address) (*big.Int, error) {
	return _IScheduleController.Contract.GetTotalSchedules(&_IScheduleController.CallOpts, _vault)
}

// ISlasherMetaData contains all meta data concerning the ISlasher contract.
var ISlasherMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jailtime\",\"type\":\"uint256\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailedState\",\"type\":\"uint8\"}],\"name\":\"jail\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailboundState\",\"type\":\"uint8\"}],\"name\":\"jailbound\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRate\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jailtime\",\"type\":\"uint256\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailedState\",\"type\":\"uint8\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailboundState\",\"type\":\"uint8\"}],\"name\":\"slashAndJail\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"41b6cb0f": "jail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256),uint256,uint256,uint8)",
		"0273a3ee": "jailbound((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256),uint8)",
		"99ac2d48": "slash((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256),uint256)",
		"a00f313f": "slashAndJail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256),uint256,uint256,uint256,uint8,uint8)",
	},
}

// ISlasherABI is the input ABI used to generate the binding from.
// Deprecated: Use ISlasherMetaData.ABI instead.
var ISlasherABI = ISlasherMetaData.ABI

// Deprecated: Use ISlasherMetaData.Sigs instead.
// ISlasherFuncSigs maps the 4-byte function signature to its string representation.
var ISlasherFuncSigs = ISlasherMetaData.Sigs

// ISlasher is an auto generated Go binding around an Ethereum contract.
type ISlasher struct {
	ISlasherCaller     // Read-only binding to the contract
	ISlasherTransactor // Write-only binding to the contract
	ISlasherFilterer   // Log filterer for contract events
}

// ISlasherCaller is an auto generated read-only Go binding around an Ethereum contract.
type ISlasherCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ISlasherTransactor is an auto generated write-only Go binding around an Ethereum contract.
type ISlasherTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ISlasherFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type ISlasherFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ISlasherSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ISlasherSession struct {
	Contract     *ISlasher         // 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
}

// ISlasherCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type ISlasherCallerSession struct {
	Contract *ISlasherCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts   // Call options to use throughout this session
}

// ISlasherTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type ISlasherTransactorSession struct {
	Contract     *ISlasherTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts   // Transaction auth options to use throughout this session
}

// ISlasherRaw is an auto generated low-level Go binding around an Ethereum contract.
type ISlasherRaw struct {
	Contract *ISlasher // Generic contract binding to access the raw methods on
}

// ISlasherCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type ISlasherCallerRaw struct {
	Contract *ISlasherCaller // Generic read-only contract binding to access the raw methods on
}

// ISlasherTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type ISlasherTransactorRaw struct {
	Contract *ISlasherTransactor // Generic write-only contract binding to access the raw methods on
}

// NewISlasher creates a new instance of ISlasher, bound to a specific deployed contract.
func NewISlasher(address common.Address, backend bind.ContractBackend) (*ISlasher, error) {
	contract, err := bindISlasher(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &ISlasher{ISlasherCaller: ISlasherCaller{contract: contract}, ISlasherTransactor: ISlasherTransactor{contract: contract}, ISlasherFilterer: ISlasherFilterer{contract: contract}}, nil
}

// NewISlasherCaller creates a new read-only instance of ISlasher, bound to a specific deployed contract.
func NewISlasherCaller(address common.Address, caller bind.ContractCaller) (*ISlasherCaller, error) {
	contract, err := bindISlasher(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &ISlasherCaller{contract: contract}, nil
}

// NewISlasherTransactor creates a new write-only instance of ISlasher, bound to a specific deployed contract.
func NewISlasherTransactor(address common.Address, transactor bind.ContractTransactor) (*ISlasherTransactor, error) {
	contract, err := bindISlasher(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &ISlasherTransactor{contract: contract}, nil
}

// NewISlasherFilterer creates a new log filterer instance of ISlasher, bound to a specific deployed contract.
func NewISlasherFilterer(address common.Address, filterer bind.ContractFilterer) (*ISlasherFilterer, error) {
	contract, err := bindISlasher(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &ISlasherFilterer{contract: contract}, nil
}

// bindISlasher binds a generic wrapper to an already deployed contract.
func bindISlasher(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(ISlasherABI))
	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 (_ISlasher *ISlasherRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ISlasher.Contract.ISlasherCaller.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 (_ISlasher *ISlasherRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ISlasher.Contract.ISlasherTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ISlasher *ISlasherRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ISlasher.Contract.ISlasherTransactor.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 (_ISlasher *ISlasherCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ISlasher.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 (_ISlasher *ISlasherTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ISlasher.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ISlasher *ISlasherTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ISlasher.Contract.contract.Transact(opts, method, params...)
}

// Jail is a paid mutator transaction binding the contract method 0x41b6cb0f.
//
// Solidity: function jail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_ISlasher *ISlasherTransactor) Jail(opts *bind.TransactOpts, _val IAutonityValidator, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _ISlasher.contract.Transact(opts, "jail", _val, _blockNumber, _jailtime, _newJailedState)
}

// Jail is a paid mutator transaction binding the contract method 0x41b6cb0f.
//
// Solidity: function jail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_ISlasher *ISlasherSession) Jail(_val IAutonityValidator, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _ISlasher.Contract.Jail(&_ISlasher.TransactOpts, _val, _blockNumber, _jailtime, _newJailedState)
}

// Jail is a paid mutator transaction binding the contract method 0x41b6cb0f.
//
// Solidity: function jail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_ISlasher *ISlasherTransactorSession) Jail(_val IAutonityValidator, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8) (*types.Transaction, error) {
	return _ISlasher.Contract.Jail(&_ISlasher.TransactOpts, _val, _blockNumber, _jailtime, _newJailedState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x0273a3ee.
//
// Solidity: function jailbound((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint8 _newJailboundState) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_ISlasher *ISlasherTransactor) Jailbound(opts *bind.TransactOpts, _val IAutonityValidator, _newJailboundState uint8) (*types.Transaction, error) {
	return _ISlasher.contract.Transact(opts, "jailbound", _val, _newJailboundState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x0273a3ee.
//
// Solidity: function jailbound((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint8 _newJailboundState) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_ISlasher *ISlasherSession) Jailbound(_val IAutonityValidator, _newJailboundState uint8) (*types.Transaction, error) {
	return _ISlasher.Contract.Jailbound(&_ISlasher.TransactOpts, _val, _newJailboundState)
}

// Jailbound is a paid mutator transaction binding the contract method 0x0273a3ee.
//
// Solidity: function jailbound((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint8 _newJailboundState) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_ISlasher *ISlasherTransactorSession) Jailbound(_val IAutonityValidator, _newJailboundState uint8) (*types.Transaction, error) {
	return _ISlasher.Contract.Jailbound(&_ISlasher.TransactOpts, _val, _newJailboundState)
}

// Slash is a paid mutator transaction binding the contract method 0x99ac2d48.
//
// Solidity: function slash((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256)
func (_ISlasher *ISlasherTransactor) Slash(opts *bind.TransactOpts, _val IAutonityValidator, _slashingRate *big.Int) (*types.Transaction, error) {
	return _ISlasher.contract.Transact(opts, "slash", _val, _slashingRate)
}

// Slash is a paid mutator transaction binding the contract method 0x99ac2d48.
//
// Solidity: function slash((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256)
func (_ISlasher *ISlasherSession) Slash(_val IAutonityValidator, _slashingRate *big.Int) (*types.Transaction, error) {
	return _ISlasher.Contract.Slash(&_ISlasher.TransactOpts, _val, _slashingRate)
}

// Slash is a paid mutator transaction binding the contract method 0x99ac2d48.
//
// Solidity: function slash((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256)
func (_ISlasher *ISlasherTransactorSession) Slash(_val IAutonityValidator, _slashingRate *big.Int) (*types.Transaction, error) {
	return _ISlasher.Contract.Slash(&_ISlasher.TransactOpts, _val, _slashingRate)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0xa00f313f.
//
// Solidity: function slashAndJail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256, bool)
func (_ISlasher *ISlasherTransactor) SlashAndJail(opts *bind.TransactOpts, _val IAutonityValidator, _slashingRate *big.Int, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _ISlasher.contract.Transact(opts, "slashAndJail", _val, _slashingRate, _blockNumber, _jailtime, _newJailedState, _newJailboundState)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0xa00f313f.
//
// Solidity: function slashAndJail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256, bool)
func (_ISlasher *ISlasherSession) SlashAndJail(_val IAutonityValidator, _slashingRate *big.Int, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _ISlasher.Contract.SlashAndJail(&_ISlasher.TransactOpts, _val, _slashingRate, _blockNumber, _jailtime, _newJailedState, _newJailboundState)
}

// SlashAndJail is a paid mutator transaction binding the contract method 0xa00f313f.
//
// Solidity: function slashAndJail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256, bool)
func (_ISlasher *ISlasherTransactorSession) SlashAndJail(_val IAutonityValidator, _slashingRate *big.Int, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (*types.Transaction, error) {
	return _ISlasher.Contract.SlashAndJail(&_ISlasher.TransactOpts, _val, _slashingRate, _blockNumber, _jailtime, _newJailedState, _newJailboundState)
}

// IStabilizationMetaData contains all meta data concerning the IStabilization contract.
var IStabilizationMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"cdps\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"principal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastAggregatedInterestExponent\",\"type\":\"uint256\"}],\"internalType\":\"structIStabilization.CDP\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"borrowInterestRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"announcementWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minCollateralizationRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minDebtRequirement\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"targetPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultNTNATNPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultNTNUSDPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultACUUSDPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIStabilization.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"debtAmountAtTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastUpdated\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"borrowInterestRateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"announcementWindowTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationRatioTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minCollateralizationRatioTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structIStabilization.LastUpdated\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"collateralSold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"}],\"name\":\"liquidate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"acu\",\"type\":\"address\"}],\"name\":\"setACU\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"auctioneer\",\"type\":\"address\"}],\"name\":\"setAuctioneer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"supplyControl\",\"type\":\"address\"}],\"name\":\"setSupplyControl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"840c7e24": "cdps(address)",
		"5891de72": "collateralPrice()",
		"79502c55": "config()",
		"8ffba9dd": "debtAmountAtTime(address,uint256)",
		"d0b06f5d": "lastUpdated()",
		"4914c008": "liquidate(address,uint256,address)",
		"4b8ef943": "setACU(address)",
		"00ede7e4": "setAuctioneer(address)",
		"b3ab15fb": "setOperator(address)",
		"7adbf973": "setOracle(address)",
		"52e5a050": "setSupplyControl(address)",
	},
}

// IStabilizationABI is the input ABI used to generate the binding from.
// Deprecated: Use IStabilizationMetaData.ABI instead.
var IStabilizationABI = IStabilizationMetaData.ABI

// Deprecated: Use IStabilizationMetaData.Sigs instead.
// IStabilizationFuncSigs maps the 4-byte function signature to its string representation.
var IStabilizationFuncSigs = IStabilizationMetaData.Sigs

// IStabilization is an auto generated Go binding around an Ethereum contract.
type IStabilization struct {
	IStabilizationCaller     // Read-only binding to the contract
	IStabilizationTransactor // Write-only binding to the contract
	IStabilizationFilterer   // Log filterer for contract events
}

// IStabilizationCaller is an auto generated read-only Go binding around an Ethereum contract.
type IStabilizationCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IStabilizationTransactor is an auto generated write-only Go binding around an Ethereum contract.
type IStabilizationTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IStabilizationFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type IStabilizationFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IStabilizationSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type IStabilizationSession struct {
	Contract     *IStabilization   // 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
}

// IStabilizationCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type IStabilizationCallerSession struct {
	Contract *IStabilizationCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts         // Call options to use throughout this session
}

// IStabilizationTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type IStabilizationTransactorSession struct {
	Contract     *IStabilizationTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts         // Transaction auth options to use throughout this session
}

// IStabilizationRaw is an auto generated low-level Go binding around an Ethereum contract.
type IStabilizationRaw struct {
	Contract *IStabilization // Generic contract binding to access the raw methods on
}

// IStabilizationCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IStabilizationCallerRaw struct {
	Contract *IStabilizationCaller // Generic read-only contract binding to access the raw methods on
}

// IStabilizationTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IStabilizationTransactorRaw struct {
	Contract *IStabilizationTransactor // Generic write-only contract binding to access the raw methods on
}

// NewIStabilization creates a new instance of IStabilization, bound to a specific deployed contract.
func NewIStabilization(address common.Address, backend bind.ContractBackend) (*IStabilization, error) {
	contract, err := bindIStabilization(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IStabilization{IStabilizationCaller: IStabilizationCaller{contract: contract}, IStabilizationTransactor: IStabilizationTransactor{contract: contract}, IStabilizationFilterer: IStabilizationFilterer{contract: contract}}, nil
}

// NewIStabilizationCaller creates a new read-only instance of IStabilization, bound to a specific deployed contract.
func NewIStabilizationCaller(address common.Address, caller bind.ContractCaller) (*IStabilizationCaller, error) {
	contract, err := bindIStabilization(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IStabilizationCaller{contract: contract}, nil
}

// NewIStabilizationTransactor creates a new write-only instance of IStabilization, bound to a specific deployed contract.
func NewIStabilizationTransactor(address common.Address, transactor bind.ContractTransactor) (*IStabilizationTransactor, error) {
	contract, err := bindIStabilization(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IStabilizationTransactor{contract: contract}, nil
}

// NewIStabilizationFilterer creates a new log filterer instance of IStabilization, bound to a specific deployed contract.
func NewIStabilizationFilterer(address common.Address, filterer bind.ContractFilterer) (*IStabilizationFilterer, error) {
	contract, err := bindIStabilization(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IStabilizationFilterer{contract: contract}, nil
}

// bindIStabilization binds a generic wrapper to an already deployed contract.
func bindIStabilization(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IStabilizationABI))
	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 (_IStabilization *IStabilizationRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IStabilization.Contract.IStabilizationCaller.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 (_IStabilization *IStabilizationRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IStabilization.Contract.IStabilizationTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IStabilization *IStabilizationRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IStabilization.Contract.IStabilizationTransactor.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 (_IStabilization *IStabilizationCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IStabilization.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 (_IStabilization *IStabilizationTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IStabilization.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IStabilization *IStabilizationTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IStabilization.Contract.contract.Transact(opts, method, params...)
}

// Cdps is a free data retrieval call binding the contract method 0x840c7e24.
//
// Solidity: function cdps(address owner) view returns((uint256,uint256,uint256,uint256,uint256))
func (_IStabilization *IStabilizationCaller) Cdps(opts *bind.CallOpts, owner common.Address) (IStabilizationCDP, error) {
	var out []interface{}
	err := _IStabilization.contract.Call(opts, &out, "cdps", owner)

	if err != nil {
		return *new(IStabilizationCDP), err
	}

	out0 := *abi.ConvertType(out[0], new(IStabilizationCDP)).(*IStabilizationCDP)

	return out0, err

}

// Cdps is a free data retrieval call binding the contract method 0x840c7e24.
//
// Solidity: function cdps(address owner) view returns((uint256,uint256,uint256,uint256,uint256))
func (_IStabilization *IStabilizationSession) Cdps(owner common.Address) (IStabilizationCDP, error) {
	return _IStabilization.Contract.Cdps(&_IStabilization.CallOpts, owner)
}

// Cdps is a free data retrieval call binding the contract method 0x840c7e24.
//
// Solidity: function cdps(address owner) view returns((uint256,uint256,uint256,uint256,uint256))
func (_IStabilization *IStabilizationCallerSession) Cdps(owner common.Address) (IStabilizationCDP, error) {
	return _IStabilization.Contract.Cdps(&_IStabilization.CallOpts, owner)
}

// CollateralPrice is a free data retrieval call binding the contract method 0x5891de72.
//
// Solidity: function collateralPrice() view returns(uint256 price)
func (_IStabilization *IStabilizationCaller) CollateralPrice(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _IStabilization.contract.Call(opts, &out, "collateralPrice")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// CollateralPrice is a free data retrieval call binding the contract method 0x5891de72.
//
// Solidity: function collateralPrice() view returns(uint256 price)
func (_IStabilization *IStabilizationSession) CollateralPrice() (*big.Int, error) {
	return _IStabilization.Contract.CollateralPrice(&_IStabilization.CallOpts)
}

// CollateralPrice is a free data retrieval call binding the contract method 0x5891de72.
//
// Solidity: function collateralPrice() view returns(uint256 price)
func (_IStabilization *IStabilizationCallerSession) CollateralPrice() (*big.Int, error) {
	return _IStabilization.Contract.CollateralPrice(&_IStabilization.CallOpts)
}

// Config is a free data retrieval call binding the contract method 0x79502c55.
//
// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))
func (_IStabilization *IStabilizationCaller) Config(opts *bind.CallOpts) (IStabilizationConfig, error) {
	var out []interface{}
	err := _IStabilization.contract.Call(opts, &out, "config")

	if err != nil {
		return *new(IStabilizationConfig), err
	}

	out0 := *abi.ConvertType(out[0], new(IStabilizationConfig)).(*IStabilizationConfig)

	return out0, err

}

// Config is a free data retrieval call binding the contract method 0x79502c55.
//
// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))
func (_IStabilization *IStabilizationSession) Config() (IStabilizationConfig, error) {
	return _IStabilization.Contract.Config(&_IStabilization.CallOpts)
}

// Config is a free data retrieval call binding the contract method 0x79502c55.
//
// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))
func (_IStabilization *IStabilizationCallerSession) Config() (IStabilizationConfig, error) {
	return _IStabilization.Contract.Config(&_IStabilization.CallOpts)
}

// DebtAmountAtTime is a free data retrieval call binding the contract method 0x8ffba9dd.
//
// Solidity: function debtAmountAtTime(address account, uint256 timestamp) view returns(uint256)
func (_IStabilization *IStabilizationCaller) DebtAmountAtTime(opts *bind.CallOpts, account common.Address, timestamp *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _IStabilization.contract.Call(opts, &out, "debtAmountAtTime", account, timestamp)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// DebtAmountAtTime is a free data retrieval call binding the contract method 0x8ffba9dd.
//
// Solidity: function debtAmountAtTime(address account, uint256 timestamp) view returns(uint256)
func (_IStabilization *IStabilizationSession) DebtAmountAtTime(account common.Address, timestamp *big.Int) (*big.Int, error) {
	return _IStabilization.Contract.DebtAmountAtTime(&_IStabilization.CallOpts, account, timestamp)
}

// DebtAmountAtTime is a free data retrieval call binding the contract method 0x8ffba9dd.
//
// Solidity: function debtAmountAtTime(address account, uint256 timestamp) view returns(uint256)
func (_IStabilization *IStabilizationCallerSession) DebtAmountAtTime(account common.Address, timestamp *big.Int) (*big.Int, error) {
	return _IStabilization.Contract.DebtAmountAtTime(&_IStabilization.CallOpts, account, timestamp)
}

// LastUpdated is a free data retrieval call binding the contract method 0xd0b06f5d.
//
// Solidity: function lastUpdated() view returns((uint256,uint256,uint256,uint256))
func (_IStabilization *IStabilizationCaller) LastUpdated(opts *bind.CallOpts) (IStabilizationLastUpdated, error) {
	var out []interface{}
	err := _IStabilization.contract.Call(opts, &out, "lastUpdated")

	if err != nil {
		return *new(IStabilizationLastUpdated), err
	}

	out0 := *abi.ConvertType(out[0], new(IStabilizationLastUpdated)).(*IStabilizationLastUpdated)

	return out0, err

}

// LastUpdated is a free data retrieval call binding the contract method 0xd0b06f5d.
//
// Solidity: function lastUpdated() view returns((uint256,uint256,uint256,uint256))
func (_IStabilization *IStabilizationSession) LastUpdated() (IStabilizationLastUpdated, error) {
	return _IStabilization.Contract.LastUpdated(&_IStabilization.CallOpts)
}

// LastUpdated is a free data retrieval call binding the contract method 0xd0b06f5d.
//
// Solidity: function lastUpdated() view returns((uint256,uint256,uint256,uint256))
func (_IStabilization *IStabilizationCallerSession) LastUpdated() (IStabilizationLastUpdated, error) {
	return _IStabilization.Contract.LastUpdated(&_IStabilization.CallOpts)
}

// Liquidate is a paid mutator transaction binding the contract method 0x4914c008.
//
// Solidity: function liquidate(address account, uint256 collateralSold, address bidder) payable returns()
func (_IStabilization *IStabilizationTransactor) Liquidate(opts *bind.TransactOpts, account common.Address, collateralSold *big.Int, bidder common.Address) (*types.Transaction, error) {
	return _IStabilization.contract.Transact(opts, "liquidate", account, collateralSold, bidder)
}

// Liquidate is a paid mutator transaction binding the contract method 0x4914c008.
//
// Solidity: function liquidate(address account, uint256 collateralSold, address bidder) payable returns()
func (_IStabilization *IStabilizationSession) Liquidate(account common.Address, collateralSold *big.Int, bidder common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.Liquidate(&_IStabilization.TransactOpts, account, collateralSold, bidder)
}

// Liquidate is a paid mutator transaction binding the contract method 0x4914c008.
//
// Solidity: function liquidate(address account, uint256 collateralSold, address bidder) payable returns()
func (_IStabilization *IStabilizationTransactorSession) Liquidate(account common.Address, collateralSold *big.Int, bidder common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.Liquidate(&_IStabilization.TransactOpts, account, collateralSold, bidder)
}

// SetACU is a paid mutator transaction binding the contract method 0x4b8ef943.
//
// Solidity: function setACU(address acu) returns()
func (_IStabilization *IStabilizationTransactor) SetACU(opts *bind.TransactOpts, acu common.Address) (*types.Transaction, error) {
	return _IStabilization.contract.Transact(opts, "setACU", acu)
}

// SetACU is a paid mutator transaction binding the contract method 0x4b8ef943.
//
// Solidity: function setACU(address acu) returns()
func (_IStabilization *IStabilizationSession) SetACU(acu common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.SetACU(&_IStabilization.TransactOpts, acu)
}

// SetACU is a paid mutator transaction binding the contract method 0x4b8ef943.
//
// Solidity: function setACU(address acu) returns()
func (_IStabilization *IStabilizationTransactorSession) SetACU(acu common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.SetACU(&_IStabilization.TransactOpts, acu)
}

// SetAuctioneer is a paid mutator transaction binding the contract method 0x00ede7e4.
//
// Solidity: function setAuctioneer(address auctioneer) returns()
func (_IStabilization *IStabilizationTransactor) SetAuctioneer(opts *bind.TransactOpts, auctioneer common.Address) (*types.Transaction, error) {
	return _IStabilization.contract.Transact(opts, "setAuctioneer", auctioneer)
}

// SetAuctioneer is a paid mutator transaction binding the contract method 0x00ede7e4.
//
// Solidity: function setAuctioneer(address auctioneer) returns()
func (_IStabilization *IStabilizationSession) SetAuctioneer(auctioneer common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.SetAuctioneer(&_IStabilization.TransactOpts, auctioneer)
}

// SetAuctioneer is a paid mutator transaction binding the contract method 0x00ede7e4.
//
// Solidity: function setAuctioneer(address auctioneer) returns()
func (_IStabilization *IStabilizationTransactorSession) SetAuctioneer(auctioneer common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.SetAuctioneer(&_IStabilization.TransactOpts, auctioneer)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_IStabilization *IStabilizationTransactor) SetOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
	return _IStabilization.contract.Transact(opts, "setOperator", operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_IStabilization *IStabilizationSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.SetOperator(&_IStabilization.TransactOpts, operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_IStabilization *IStabilizationTransactorSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.SetOperator(&_IStabilization.TransactOpts, operator)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_IStabilization *IStabilizationTransactor) SetOracle(opts *bind.TransactOpts, oracle common.Address) (*types.Transaction, error) {
	return _IStabilization.contract.Transact(opts, "setOracle", oracle)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_IStabilization *IStabilizationSession) SetOracle(oracle common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.SetOracle(&_IStabilization.TransactOpts, oracle)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_IStabilization *IStabilizationTransactorSession) SetOracle(oracle common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.SetOracle(&_IStabilization.TransactOpts, oracle)
}

// SetSupplyControl is a paid mutator transaction binding the contract method 0x52e5a050.
//
// Solidity: function setSupplyControl(address supplyControl) returns()
func (_IStabilization *IStabilizationTransactor) SetSupplyControl(opts *bind.TransactOpts, supplyControl common.Address) (*types.Transaction, error) {
	return _IStabilization.contract.Transact(opts, "setSupplyControl", supplyControl)
}

// SetSupplyControl is a paid mutator transaction binding the contract method 0x52e5a050.
//
// Solidity: function setSupplyControl(address supplyControl) returns()
func (_IStabilization *IStabilizationSession) SetSupplyControl(supplyControl common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.SetSupplyControl(&_IStabilization.TransactOpts, supplyControl)
}

// SetSupplyControl is a paid mutator transaction binding the contract method 0x52e5a050.
//
// Solidity: function setSupplyControl(address supplyControl) returns()
func (_IStabilization *IStabilizationTransactorSession) SetSupplyControl(supplyControl common.Address) (*types.Transaction, error) {
	return _IStabilization.Contract.SetSupplyControl(&_IStabilization.TransactOpts, supplyControl)
}

// ISupplyControlMetaData contains all meta data concerning the ISupplyControl contract.
var ISupplyControlMetaData = &bind.MetaData{
	ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"availableSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStabilizer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stabilizer_\",\"type\":\"address\"}],\"name\":\"setStabilizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"7ecc2b56": "availableSupply()",
		"44df8e70": "burn()",
		"80af1799": "getStabilizer()",
		"c4e41b22": "getTotalSupply()",
		"40c10f19": "mint(address,uint256)",
		"b3ab15fb": "setOperator(address)",
		"db7f521a": "setStabilizer(address)",
	},
}

// ISupplyControlABI is the input ABI used to generate the binding from.
// Deprecated: Use ISupplyControlMetaData.ABI instead.
var ISupplyControlABI = ISupplyControlMetaData.ABI

// Deprecated: Use ISupplyControlMetaData.Sigs instead.
// ISupplyControlFuncSigs maps the 4-byte function signature to its string representation.
var ISupplyControlFuncSigs = ISupplyControlMetaData.Sigs

// ISupplyControl is an auto generated Go binding around an Ethereum contract.
type ISupplyControl struct {
	ISupplyControlCaller     // Read-only binding to the contract
	ISupplyControlTransactor // Write-only binding to the contract
	ISupplyControlFilterer   // Log filterer for contract events
}

// ISupplyControlCaller is an auto generated read-only Go binding around an Ethereum contract.
type ISupplyControlCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ISupplyControlTransactor is an auto generated write-only Go binding around an Ethereum contract.
type ISupplyControlTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ISupplyControlFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type ISupplyControlFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ISupplyControlSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ISupplyControlSession struct {
	Contract     *ISupplyControl   // 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
}

// ISupplyControlCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type ISupplyControlCallerSession struct {
	Contract *ISupplyControlCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts         // Call options to use throughout this session
}

// ISupplyControlTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type ISupplyControlTransactorSession struct {
	Contract     *ISupplyControlTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts         // Transaction auth options to use throughout this session
}

// ISupplyControlRaw is an auto generated low-level Go binding around an Ethereum contract.
type ISupplyControlRaw struct {
	Contract *ISupplyControl // Generic contract binding to access the raw methods on
}

// ISupplyControlCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type ISupplyControlCallerRaw struct {
	Contract *ISupplyControlCaller // Generic read-only contract binding to access the raw methods on
}

// ISupplyControlTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type ISupplyControlTransactorRaw struct {
	Contract *ISupplyControlTransactor // Generic write-only contract binding to access the raw methods on
}

// NewISupplyControl creates a new instance of ISupplyControl, bound to a specific deployed contract.
func NewISupplyControl(address common.Address, backend bind.ContractBackend) (*ISupplyControl, error) {
	contract, err := bindISupplyControl(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &ISupplyControl{ISupplyControlCaller: ISupplyControlCaller{contract: contract}, ISupplyControlTransactor: ISupplyControlTransactor{contract: contract}, ISupplyControlFilterer: ISupplyControlFilterer{contract: contract}}, nil
}

// NewISupplyControlCaller creates a new read-only instance of ISupplyControl, bound to a specific deployed contract.
func NewISupplyControlCaller(address common.Address, caller bind.ContractCaller) (*ISupplyControlCaller, error) {
	contract, err := bindISupplyControl(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &ISupplyControlCaller{contract: contract}, nil
}

// NewISupplyControlTransactor creates a new write-only instance of ISupplyControl, bound to a specific deployed contract.
func NewISupplyControlTransactor(address common.Address, transactor bind.ContractTransactor) (*ISupplyControlTransactor, error) {
	contract, err := bindISupplyControl(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &ISupplyControlTransactor{contract: contract}, nil
}

// NewISupplyControlFilterer creates a new log filterer instance of ISupplyControl, bound to a specific deployed contract.
func NewISupplyControlFilterer(address common.Address, filterer bind.ContractFilterer) (*ISupplyControlFilterer, error) {
	contract, err := bindISupplyControl(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &ISupplyControlFilterer{contract: contract}, nil
}

// bindISupplyControl binds a generic wrapper to an already deployed contract.
func bindISupplyControl(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(ISupplyControlABI))
	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 (_ISupplyControl *ISupplyControlRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ISupplyControl.Contract.ISupplyControlCaller.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 (_ISupplyControl *ISupplyControlRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ISupplyControl.Contract.ISupplyControlTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ISupplyControl *ISupplyControlRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ISupplyControl.Contract.ISupplyControlTransactor.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 (_ISupplyControl *ISupplyControlCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ISupplyControl.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 (_ISupplyControl *ISupplyControlTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ISupplyControl.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ISupplyControl *ISupplyControlTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ISupplyControl.Contract.contract.Transact(opts, method, params...)
}

// AvailableSupply is a free data retrieval call binding the contract method 0x7ecc2b56.
//
// Solidity: function availableSupply() view returns(uint256)
func (_ISupplyControl *ISupplyControlCaller) AvailableSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _ISupplyControl.contract.Call(opts, &out, "availableSupply")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// AvailableSupply is a free data retrieval call binding the contract method 0x7ecc2b56.
//
// Solidity: function availableSupply() view returns(uint256)
func (_ISupplyControl *ISupplyControlSession) AvailableSupply() (*big.Int, error) {
	return _ISupplyControl.Contract.AvailableSupply(&_ISupplyControl.CallOpts)
}

// AvailableSupply is a free data retrieval call binding the contract method 0x7ecc2b56.
//
// Solidity: function availableSupply() view returns(uint256)
func (_ISupplyControl *ISupplyControlCallerSession) AvailableSupply() (*big.Int, error) {
	return _ISupplyControl.Contract.AvailableSupply(&_ISupplyControl.CallOpts)
}

// GetStabilizer is a free data retrieval call binding the contract method 0x80af1799.
//
// Solidity: function getStabilizer() view returns(address)
func (_ISupplyControl *ISupplyControlCaller) GetStabilizer(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _ISupplyControl.contract.Call(opts, &out, "getStabilizer")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetStabilizer is a free data retrieval call binding the contract method 0x80af1799.
//
// Solidity: function getStabilizer() view returns(address)
func (_ISupplyControl *ISupplyControlSession) GetStabilizer() (common.Address, error) {
	return _ISupplyControl.Contract.GetStabilizer(&_ISupplyControl.CallOpts)
}

// GetStabilizer is a free data retrieval call binding the contract method 0x80af1799.
//
// Solidity: function getStabilizer() view returns(address)
func (_ISupplyControl *ISupplyControlCallerSession) GetStabilizer() (common.Address, error) {
	return _ISupplyControl.Contract.GetStabilizer(&_ISupplyControl.CallOpts)
}

// GetTotalSupply is a free data retrieval call binding the contract method 0xc4e41b22.
//
// Solidity: function getTotalSupply() view returns(uint256)
func (_ISupplyControl *ISupplyControlCaller) GetTotalSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _ISupplyControl.contract.Call(opts, &out, "getTotalSupply")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetTotalSupply is a free data retrieval call binding the contract method 0xc4e41b22.
//
// Solidity: function getTotalSupply() view returns(uint256)
func (_ISupplyControl *ISupplyControlSession) GetTotalSupply() (*big.Int, error) {
	return _ISupplyControl.Contract.GetTotalSupply(&_ISupplyControl.CallOpts)
}

// GetTotalSupply is a free data retrieval call binding the contract method 0xc4e41b22.
//
// Solidity: function getTotalSupply() view returns(uint256)
func (_ISupplyControl *ISupplyControlCallerSession) GetTotalSupply() (*big.Int, error) {
	return _ISupplyControl.Contract.GetTotalSupply(&_ISupplyControl.CallOpts)
}

// Burn is a paid mutator transaction binding the contract method 0x44df8e70.
//
// Solidity: function burn() payable returns()
func (_ISupplyControl *ISupplyControlTransactor) Burn(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ISupplyControl.contract.Transact(opts, "burn")
}

// Burn is a paid mutator transaction binding the contract method 0x44df8e70.
//
// Solidity: function burn() payable returns()
func (_ISupplyControl *ISupplyControlSession) Burn() (*types.Transaction, error) {
	return _ISupplyControl.Contract.Burn(&_ISupplyControl.TransactOpts)
}

// Burn is a paid mutator transaction binding the contract method 0x44df8e70.
//
// Solidity: function burn() payable returns()
func (_ISupplyControl *ISupplyControlTransactorSession) Burn() (*types.Transaction, error) {
	return _ISupplyControl.Contract.Burn(&_ISupplyControl.TransactOpts)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address recipient, uint256 amount) returns()
func (_ISupplyControl *ISupplyControlTransactor) Mint(opts *bind.TransactOpts, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ISupplyControl.contract.Transact(opts, "mint", recipient, amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address recipient, uint256 amount) returns()
func (_ISupplyControl *ISupplyControlSession) Mint(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ISupplyControl.Contract.Mint(&_ISupplyControl.TransactOpts, recipient, amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address recipient, uint256 amount) returns()
func (_ISupplyControl *ISupplyControlTransactorSession) Mint(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _ISupplyControl.Contract.Mint(&_ISupplyControl.TransactOpts, recipient, amount)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_ISupplyControl *ISupplyControlTransactor) SetOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
	return _ISupplyControl.contract.Transact(opts, "setOperator", operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_ISupplyControl *ISupplyControlSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _ISupplyControl.Contract.SetOperator(&_ISupplyControl.TransactOpts, operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_ISupplyControl *ISupplyControlTransactorSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _ISupplyControl.Contract.SetOperator(&_ISupplyControl.TransactOpts, operator)
}

// SetStabilizer is a paid mutator transaction binding the contract method 0xdb7f521a.
//
// Solidity: function setStabilizer(address stabilizer_) returns()
func (_ISupplyControl *ISupplyControlTransactor) SetStabilizer(opts *bind.TransactOpts, stabilizer_ common.Address) (*types.Transaction, error) {
	return _ISupplyControl.contract.Transact(opts, "setStabilizer", stabilizer_)
}

// SetStabilizer is a paid mutator transaction binding the contract method 0xdb7f521a.
//
// Solidity: function setStabilizer(address stabilizer_) returns()
func (_ISupplyControl *ISupplyControlSession) SetStabilizer(stabilizer_ common.Address) (*types.Transaction, error) {
	return _ISupplyControl.Contract.SetStabilizer(&_ISupplyControl.TransactOpts, stabilizer_)
}

// SetStabilizer is a paid mutator transaction binding the contract method 0xdb7f521a.
//
// Solidity: function setStabilizer(address stabilizer_) returns()
func (_ISupplyControl *ISupplyControlTransactorSession) SetStabilizer(stabilizer_ common.Address) (*types.Transaction, error) {
	return _ISupplyControl.Contract.SetStabilizer(&_ISupplyControl.TransactOpts, stabilizer_)
}

// ISupplyControlBurnIterator is returned from FilterBurn and is used to iterate over the raw logs and unpacked data for Burn events raised by the ISupplyControl contract.
type ISupplyControlBurnIterator struct {
	Event *ISupplyControlBurn // 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 *ISupplyControlBurnIterator) 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(ISupplyControlBurn)
			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(ISupplyControlBurn)
		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 *ISupplyControlBurnIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ISupplyControlBurnIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// ISupplyControlBurn represents a Burn event raised by the ISupplyControl contract.
type ISupplyControlBurn struct {
	Amount *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterBurn is a free log retrieval operation binding the contract event 0xb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb.
//
// Solidity: event Burn(uint256 amount)
func (_ISupplyControl *ISupplyControlFilterer) FilterBurn(opts *bind.FilterOpts) (*ISupplyControlBurnIterator, error) {

	logs, sub, err := _ISupplyControl.contract.FilterLogs(opts, "Burn")
	if err != nil {
		return nil, err
	}
	return &ISupplyControlBurnIterator{contract: _ISupplyControl.contract, event: "Burn", logs: logs, sub: sub}, nil
}

// WatchBurn is a free log subscription operation binding the contract event 0xb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb.
//
// Solidity: event Burn(uint256 amount)
func (_ISupplyControl *ISupplyControlFilterer) WatchBurn(opts *bind.WatchOpts, sink chan<- *ISupplyControlBurn) (event.Subscription, error) {

	logs, sub, err := _ISupplyControl.contract.WatchLogs(opts, "Burn")
	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(ISupplyControlBurn)
				if err := _ISupplyControl.contract.UnpackLog(event, "Burn", 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
}

// ParseBurn is a log parse operation binding the contract event 0xb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb.
//
// Solidity: event Burn(uint256 amount)
func (_ISupplyControl *ISupplyControlFilterer) ParseBurn(log types.Log) (*ISupplyControlBurn, error) {
	event := new(ISupplyControlBurn)
	if err := _ISupplyControl.contract.UnpackLog(event, "Burn", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ISupplyControlMintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the ISupplyControl contract.
type ISupplyControlMintIterator struct {
	Event *ISupplyControlMint // 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 *ISupplyControlMintIterator) 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(ISupplyControlMint)
			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(ISupplyControlMint)
		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 *ISupplyControlMintIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ISupplyControlMintIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// ISupplyControlMint represents a Mint event raised by the ISupplyControl contract.
type ISupplyControlMint struct {
	Recipient common.Address
	Amount    *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterMint is a free log retrieval operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885.
//
// Solidity: event Mint(address recipient, uint256 amount)
func (_ISupplyControl *ISupplyControlFilterer) FilterMint(opts *bind.FilterOpts) (*ISupplyControlMintIterator, error) {

	logs, sub, err := _ISupplyControl.contract.FilterLogs(opts, "Mint")
	if err != nil {
		return nil, err
	}
	return &ISupplyControlMintIterator{contract: _ISupplyControl.contract, event: "Mint", logs: logs, sub: sub}, nil
}

// WatchMint is a free log subscription operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885.
//
// Solidity: event Mint(address recipient, uint256 amount)
func (_ISupplyControl *ISupplyControlFilterer) WatchMint(opts *bind.WatchOpts, sink chan<- *ISupplyControlMint) (event.Subscription, error) {

	logs, sub, err := _ISupplyControl.contract.WatchLogs(opts, "Mint")
	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(ISupplyControlMint)
				if err := _ISupplyControl.contract.UnpackLog(event, "Mint", 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
}

// ParseMint is a log parse operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885.
//
// Solidity: event Mint(address recipient, uint256 amount)
func (_ISupplyControl *ISupplyControlFilterer) ParseMint(log types.Log) (*ISupplyControlMint, error) {
	event := new(ISupplyControlMint)
	if err := _ISupplyControl.contract.UnpackLog(event, "Mint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// IUpgradeManagerMetaData contains all meta data concerning the IUpgradeManager contract.
var IUpgradeManagerMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"b3ab15fb": "setOperator(address)",
	},
}

// IUpgradeManagerABI is the input ABI used to generate the binding from.
// Deprecated: Use IUpgradeManagerMetaData.ABI instead.
var IUpgradeManagerABI = IUpgradeManagerMetaData.ABI

// Deprecated: Use IUpgradeManagerMetaData.Sigs instead.
// IUpgradeManagerFuncSigs maps the 4-byte function signature to its string representation.
var IUpgradeManagerFuncSigs = IUpgradeManagerMetaData.Sigs

// IUpgradeManager is an auto generated Go binding around an Ethereum contract.
type IUpgradeManager struct {
	IUpgradeManagerCaller     // Read-only binding to the contract
	IUpgradeManagerTransactor // Write-only binding to the contract
	IUpgradeManagerFilterer   // Log filterer for contract events
}

// IUpgradeManagerCaller is an auto generated read-only Go binding around an Ethereum contract.
type IUpgradeManagerCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IUpgradeManagerTransactor is an auto generated write-only Go binding around an Ethereum contract.
type IUpgradeManagerTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IUpgradeManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type IUpgradeManagerFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// IUpgradeManagerSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type IUpgradeManagerSession struct {
	Contract     *IUpgradeManager  // 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
}

// IUpgradeManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type IUpgradeManagerCallerSession struct {
	Contract *IUpgradeManagerCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts          // Call options to use throughout this session
}

// IUpgradeManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type IUpgradeManagerTransactorSession struct {
	Contract     *IUpgradeManagerTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts          // Transaction auth options to use throughout this session
}

// IUpgradeManagerRaw is an auto generated low-level Go binding around an Ethereum contract.
type IUpgradeManagerRaw struct {
	Contract *IUpgradeManager // Generic contract binding to access the raw methods on
}

// IUpgradeManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type IUpgradeManagerCallerRaw struct {
	Contract *IUpgradeManagerCaller // Generic read-only contract binding to access the raw methods on
}

// IUpgradeManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type IUpgradeManagerTransactorRaw struct {
	Contract *IUpgradeManagerTransactor // Generic write-only contract binding to access the raw methods on
}

// NewIUpgradeManager creates a new instance of IUpgradeManager, bound to a specific deployed contract.
func NewIUpgradeManager(address common.Address, backend bind.ContractBackend) (*IUpgradeManager, error) {
	contract, err := bindIUpgradeManager(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &IUpgradeManager{IUpgradeManagerCaller: IUpgradeManagerCaller{contract: contract}, IUpgradeManagerTransactor: IUpgradeManagerTransactor{contract: contract}, IUpgradeManagerFilterer: IUpgradeManagerFilterer{contract: contract}}, nil
}

// NewIUpgradeManagerCaller creates a new read-only instance of IUpgradeManager, bound to a specific deployed contract.
func NewIUpgradeManagerCaller(address common.Address, caller bind.ContractCaller) (*IUpgradeManagerCaller, error) {
	contract, err := bindIUpgradeManager(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &IUpgradeManagerCaller{contract: contract}, nil
}

// NewIUpgradeManagerTransactor creates a new write-only instance of IUpgradeManager, bound to a specific deployed contract.
func NewIUpgradeManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*IUpgradeManagerTransactor, error) {
	contract, err := bindIUpgradeManager(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &IUpgradeManagerTransactor{contract: contract}, nil
}

// NewIUpgradeManagerFilterer creates a new log filterer instance of IUpgradeManager, bound to a specific deployed contract.
func NewIUpgradeManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*IUpgradeManagerFilterer, error) {
	contract, err := bindIUpgradeManager(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &IUpgradeManagerFilterer{contract: contract}, nil
}

// bindIUpgradeManager binds a generic wrapper to an already deployed contract.
func bindIUpgradeManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(IUpgradeManagerABI))
	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 (_IUpgradeManager *IUpgradeManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IUpgradeManager.Contract.IUpgradeManagerCaller.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 (_IUpgradeManager *IUpgradeManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IUpgradeManager.Contract.IUpgradeManagerTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IUpgradeManager *IUpgradeManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IUpgradeManager.Contract.IUpgradeManagerTransactor.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 (_IUpgradeManager *IUpgradeManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _IUpgradeManager.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 (_IUpgradeManager *IUpgradeManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _IUpgradeManager.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_IUpgradeManager *IUpgradeManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _IUpgradeManager.Contract.contract.Transact(opts, method, params...)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _account) returns()
func (_IUpgradeManager *IUpgradeManagerTransactor) SetOperator(opts *bind.TransactOpts, _account common.Address) (*types.Transaction, error) {
	return _IUpgradeManager.contract.Transact(opts, "setOperator", _account)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _account) returns()
func (_IUpgradeManager *IUpgradeManagerSession) SetOperator(_account common.Address) (*types.Transaction, error) {
	return _IUpgradeManager.Contract.SetOperator(&_IUpgradeManager.TransactOpts, _account)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _account) returns()
func (_IUpgradeManager *IUpgradeManagerTransactorSession) SetOperator(_account common.Address) (*types.Transaction, error) {
	return _IUpgradeManager.Contract.SetOperator(&_IUpgradeManager.TransactOpts, _account)
}

// InflationControllerMetaData contains all meta data concerning the InflationController contract.
var InflationControllerMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"SD59x18\",\"name\":\"inflationRateInitial\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"inflationRateTransition\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"inflationCurveConvexity\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"inflationTransitionPeriod\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"inflationReserveDecayRate\",\"type\":\"int256\"}],\"internalType\":\"structInflationController.Params\",\"name\":\"_params\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv18_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Convert_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Convert_Underflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PRBMath_SD59x18_Div_InputTooSmall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Div_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Exp2_InputTooBig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Exp_InputTooBig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PRBMath_SD59x18_Mul_InputTooSmall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SD59x18\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"PRBMath_SD59x18_Mul_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currentSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_inflationReserve\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lastEpochTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentEpochTime\",\"type\":\"uint256\"}],\"name\":\"calculateSupplyDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getParams\",\"outputs\":[{\"components\":[{\"internalType\":\"SD59x18\",\"name\":\"inflationRateInitial\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"inflationRateTransition\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"inflationCurveConvexity\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"inflationTransitionPeriod\",\"type\":\"int256\"},{\"internalType\":\"SD59x18\",\"name\":\"inflationReserveDecayRate\",\"type\":\"int256\"}],\"internalType\":\"structInflationController.Params\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"92eff3cd": "calculateSupplyDelta(uint256,uint256,uint256,uint256)",
		"5e615a6b": "getParams()",
	},
	Bin: "0x6080604052348015600f57600080fd5b50604051611133380380611133833981016040819052602c916058565b8051600055602081015160015560408101516002556060810151600355608001516004554260055560d5565b600060a0828403128015606a57600080fd5b5060405160009060a081016001600160401b0381118282101715609b57634e487b7160e01b83526041600452602483fd5b6040908152845182526020808601519083015284810151908201526060808501519082015260809384015193810193909352509092915050565b61104f806100e46000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80635e615a6b1461003b57806392eff3cd1461008e575b600080fd5b6100436100af565b6040516100859190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b60405180910390f35b6100a161009c366004610f0a565b610116565b604051908152602001610085565b6100e16040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b506040805160a08101825260005481526001546020820152600254918101919091526003546060820152600454608082015290565b60008061012f6005548561012a9190610f52565b6101c3565b905060006101446005548561012a9190610f52565b60035490915081136101645761015b87838361024d565b925050506101bb565b6003548212156101ab576000610180888460006003015461024d565b90506000610194886000600301548561034d565b90506101a08183610f65565b9450505050506101bb565b6101b686838361034d565b925050505b949350505050565b60006101db670de0b6b3a7640000600160ff1b610f8e565b821215610203576040516399474eeb60e01b8152600481018390526024015b60405180910390fd5b61021c670de0b6b3a76400006001600160ff1b03610f8e565b82131561023f57604051639d58109160e01b8152600481018390526024016101fa565b50670de0b6b3a76400000290565b60008061026760006002015461026360006101c3565b1490565b156102a35760005460015461029c91906102979061028f906102899084610371565b88610380565b60035461044b565b6104f8565b9050610315565b60006102b761028f60006002015487610380565b905060006102ef6102d96102ca8461050d565b6102d460016101c3565b610371565b6102ea6102ca60006002015461050d565b61044b565b600054600154919250610310916102979061030a9083610371565b84610380565b925050505b600061033661032c83610327896101c3565b610380565b6103278688610371565b905061034181610562565b925050505b9392505050565b60006101bb61036961036161032c876101c3565b600454610380565b610562565b90565b600061034661036e8385610fca565b60008282600160ff1b8214806103995750600160ff1b81145b156103b75760405163a6070c2560e01b815260040160405180910390fd5b600080600084126103c857836103cd565b836000035b9150600083126103dd57826103e2565b826000035b905060006103f08383610576565b90506001600160ff1b038111156104245760405163120b5b4360e01b815260048101899052602481018890526044016101fa565b6000198585181361043e8161043a578260000390565b8290565b9998505050505050505050565b60008282600160ff1b8214806104645750600160ff1b81145b15610482576040516309fe2b4560e41b815260040160405180910390fd5b600080600084126104935783610498565b836000035b9150600083126104a857826104ad565b826000035b905060006104c483670de0b6b3a76400008461062c565b90506001600160ff1b038111156104245760405163d49c26b360e01b815260048101899052602481018890526044016101fa565b600061034661036e8385610ff1565b92915050565b600081680736ea4425c11ac63081131561053d5760405163ca7ec0c560e01b8152600481018490526024016101fa565b6714057b7ef767814f81026101bb61055d670de0b6b3a7640000835b0590565b610700565b6000610507670de0b6b3a764000083610f8e565b60008080600019848609848602925082811083820303915050806000036105aa5750670de0b6b3a764000090049050610507565b670de0b6b3a764000081106105dc57604051635173648d60e01b815260048101869052602481018590526044016101fa565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b60008080600019858709858702925082811083820303915050806000036106665783828161065c5761065c610f78565b0492505050610346565b83811061069757604051630c740aef60e31b81526004810187905260248101869052604481018590526064016101fa565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000818181121561075d5768033dd1780914b97114198112156107265750600092915050565b61075661073961036e61055d8460000390565b6ec097ce7bc90715b34b9f10000000008161055957610559610f78565b91506107a4565b680a688906bd8affffff81131561078957604051626c1a0560e31b8152600481018490526024016101fa565b670de0b6b3a7640000604082901b056101bb61036e826107aa565b50919050565b600160bf1b67ff000000000000008216156108b7576780000000000000008216156107de5768016a09e667f3bcc9090260401c5b6740000000000000008216156107fd576801306fe0a31b7152df0260401c5b67200000000000000082161561081c576801172b83c7d517adce0260401c5b67100000000000000082161561083b5768010b5586cf9890f62a0260401c5b67080000000000000082161561085a576801059b0d31585743ae0260401c5b67040000000000000082161561087957680102c9a3e778060ee70260401c5b6702000000000000008216156108985768010163da9fb33356d80260401c5b6701000000000000008216156108b757680100b1afa5abcbed610260401c5b66ff0000000000008216156109b65766800000000000008216156108e45768010058c86da1c09ea20260401c5b6640000000000000821615610902576801002c605e2e8cec500260401c5b662000000000000082161561092057680100162f3904051fa10260401c5b661000000000000082161561093e576801000b175effdc76ba0260401c5b660800000000000082161561095c57680100058ba01fb9f96d0260401c5b660400000000000082161561097a5768010002c5cc37da94920260401c5b6602000000000000821615610998576801000162e525ee05470260401c5b66010000000000008216156109b65768010000b17255775c040260401c5b65ff0000000000821615610aac57658000000000008216156109e1576801000058b91b5bc9ae0260401c5b654000000000008216156109fe57680100002c5c89d5ec6d0260401c5b65200000000000821615610a1b5768010000162e43f4f8310260401c5b65100000000000821615610a3857680100000b1721bcfc9a0260401c5b65080000000000821615610a555768010000058b90cf1e6e0260401c5b65040000000000821615610a72576801000002c5c863b73f0260401c5b65020000000000821615610a8f57680100000162e430e5a20260401c5b65010000000000821615610aac576801000000b1721835510260401c5b64ff00000000821615610b9957648000000000821615610ad557680100000058b90c0b490260401c5b644000000000821615610af15768010000002c5c8601cc0260401c5b642000000000821615610b0d576801000000162e42fff00260401c5b641000000000821615610b295768010000000b17217fbb0260401c5b640800000000821615610b45576801000000058b90bfce0260401c5b640400000000821615610b6157680100000002c5c85fe30260401c5b640200000000821615610b7d5768010000000162e42ff10260401c5b640100000000821615610b9957680100000000b17217f80260401c5b63ff000000821615610c7d576380000000821615610bc05768010000000058b90bfc0260401c5b6340000000821615610bdb576801000000002c5c85fe0260401c5b6320000000821615610bf657680100000000162e42ff0260401c5b6310000000821615610c11576801000000000b17217f0260401c5b6308000000821615610c2c57680100000000058b90c00260401c5b6304000000821615610c475768010000000002c5c8600260401c5b6302000000821615610c62576801000000000162e4300260401c5b6301000000821615610c7d5768010000000000b172180260401c5b62ff0000821615610d585762800000821615610ca2576801000000000058b90c0260401c5b62400000821615610cbc57680100000000002c5c860260401c5b62200000821615610cd65768010000000000162e430260401c5b62100000821615610cf057680100000000000b17210260401c5b62080000821615610d0a5768010000000000058b910260401c5b62040000821615610d24576801000000000002c5c80260401c5b62020000821615610d3e57680100000000000162e40260401c5b62010000821615610d58576801000000000000b1720260401c5b61ff00821615610e2a57618000821615610d7b57680100000000000058b90260401c5b614000821615610d945768010000000000002c5d0260401c5b612000821615610dad576801000000000000162e0260401c5b611000821615610dc65768010000000000000b170260401c5b610800821615610ddf576801000000000000058c0260401c5b610400821615610df857680100000000000002c60260401c5b610200821615610e1157680100000000000001630260401c5b610100821615610e2a57680100000000000000b10260401c5b60ff821615610ef3576080821615610e4b57680100000000000000590260401c5b6040821615610e63576801000000000000002c0260401c5b6020821615610e7b57680100000000000000160260401c5b6010821615610e93576801000000000000000b0260401c5b6008821615610eab57680100000000000000060260401c5b6004821615610ec357680100000000000000030260401c5b6002821615610edb57680100000000000000010260401c5b6001821615610ef357680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60008060008060808587031215610f2057600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561050757610507610f3c565b8082018082111561050757610507610f3c565b634e487b7160e01b600052601260045260246000fd5b600082610fab57634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610fc557610fc5610f3c565b500590565b8181036000831280158383131683831282161715610fea57610fea610f3c565b5092915050565b808201828112600083128015821682158216171561101157611011610f3c565b50509291505056fea2646970667358221220162979fd4610cfaab890bf71054b729c0348cc5566945a8b0a2fafc66c91fda864736f6c634300081e0033",
}

// InflationControllerABI is the input ABI used to generate the binding from.
// Deprecated: Use InflationControllerMetaData.ABI instead.
var InflationControllerABI = InflationControllerMetaData.ABI

// Deprecated: Use InflationControllerMetaData.Sigs instead.
// InflationControllerFuncSigs maps the 4-byte function signature to its string representation.
var InflationControllerFuncSigs = InflationControllerMetaData.Sigs

// InflationControllerBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use InflationControllerMetaData.Bin instead.
var InflationControllerBin = InflationControllerMetaData.Bin

// DeployInflationController deploys a new Ethereum contract, binding an instance of InflationController to it.
func DeployInflationController(auth *bind.TransactOpts, backend bind.ContractBackend, _params InflationControllerParams) (common.Address, *types.Transaction, *InflationController, error) {
	parsed, err := InflationControllerMetaData.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(InflationControllerBin), backend, _params)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &InflationController{InflationControllerCaller: InflationControllerCaller{contract: contract}, InflationControllerTransactor: InflationControllerTransactor{contract: contract}, InflationControllerFilterer: InflationControllerFilterer{contract: contract}}, nil
}

// InflationController is an auto generated Go binding around an Ethereum contract.
type InflationController struct {
	InflationControllerCaller     // Read-only binding to the contract
	InflationControllerTransactor // Write-only binding to the contract
	InflationControllerFilterer   // Log filterer for contract events
}

// InflationControllerCaller is an auto generated read-only Go binding around an Ethereum contract.
type InflationControllerCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// InflationControllerTransactor is an auto generated write-only Go binding around an Ethereum contract.
type InflationControllerTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// InflationControllerFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type InflationControllerFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// InflationControllerSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type InflationControllerSession struct {
	Contract     *InflationController // 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
}

// InflationControllerCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type InflationControllerCallerSession struct {
	Contract *InflationControllerCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts              // Call options to use throughout this session
}

// InflationControllerTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type InflationControllerTransactorSession struct {
	Contract     *InflationControllerTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts              // Transaction auth options to use throughout this session
}

// InflationControllerRaw is an auto generated low-level Go binding around an Ethereum contract.
type InflationControllerRaw struct {
	Contract *InflationController // Generic contract binding to access the raw methods on
}

// InflationControllerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type InflationControllerCallerRaw struct {
	Contract *InflationControllerCaller // Generic read-only contract binding to access the raw methods on
}

// InflationControllerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type InflationControllerTransactorRaw struct {
	Contract *InflationControllerTransactor // Generic write-only contract binding to access the raw methods on
}

// NewInflationController creates a new instance of InflationController, bound to a specific deployed contract.
func NewInflationController(address common.Address, backend bind.ContractBackend) (*InflationController, error) {
	contract, err := bindInflationController(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &InflationController{InflationControllerCaller: InflationControllerCaller{contract: contract}, InflationControllerTransactor: InflationControllerTransactor{contract: contract}, InflationControllerFilterer: InflationControllerFilterer{contract: contract}}, nil
}

// NewInflationControllerCaller creates a new read-only instance of InflationController, bound to a specific deployed contract.
func NewInflationControllerCaller(address common.Address, caller bind.ContractCaller) (*InflationControllerCaller, error) {
	contract, err := bindInflationController(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &InflationControllerCaller{contract: contract}, nil
}

// NewInflationControllerTransactor creates a new write-only instance of InflationController, bound to a specific deployed contract.
func NewInflationControllerTransactor(address common.Address, transactor bind.ContractTransactor) (*InflationControllerTransactor, error) {
	contract, err := bindInflationController(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &InflationControllerTransactor{contract: contract}, nil
}

// NewInflationControllerFilterer creates a new log filterer instance of InflationController, bound to a specific deployed contract.
func NewInflationControllerFilterer(address common.Address, filterer bind.ContractFilterer) (*InflationControllerFilterer, error) {
	contract, err := bindInflationController(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &InflationControllerFilterer{contract: contract}, nil
}

// bindInflationController binds a generic wrapper to an already deployed contract.
func bindInflationController(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(InflationControllerABI))
	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 (_InflationController *InflationControllerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _InflationController.Contract.InflationControllerCaller.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 (_InflationController *InflationControllerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _InflationController.Contract.InflationControllerTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_InflationController *InflationControllerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _InflationController.Contract.InflationControllerTransactor.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 (_InflationController *InflationControllerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _InflationController.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 (_InflationController *InflationControllerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _InflationController.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_InflationController *InflationControllerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _InflationController.Contract.contract.Transact(opts, method, params...)
}

// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd.
//
// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256)
func (_InflationController *InflationControllerCaller) CalculateSupplyDelta(opts *bind.CallOpts, _currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _InflationController.contract.Call(opts, &out, "calculateSupplyDelta", _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd.
//
// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256)
func (_InflationController *InflationControllerSession) CalculateSupplyDelta(_currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) {
	return _InflationController.Contract.CalculateSupplyDelta(&_InflationController.CallOpts, _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime)
}

// CalculateSupplyDelta is a free data retrieval call binding the contract method 0x92eff3cd.
//
// Solidity: function calculateSupplyDelta(uint256 _currentSupply, uint256 _inflationReserve, uint256 _lastEpochTime, uint256 _currentEpochTime) view returns(uint256)
func (_InflationController *InflationControllerCallerSession) CalculateSupplyDelta(_currentSupply *big.Int, _inflationReserve *big.Int, _lastEpochTime *big.Int, _currentEpochTime *big.Int) (*big.Int, error) {
	return _InflationController.Contract.CalculateSupplyDelta(&_InflationController.CallOpts, _currentSupply, _inflationReserve, _lastEpochTime, _currentEpochTime)
}

// GetParams is a free data retrieval call binding the contract method 0x5e615a6b.
//
// Solidity: function getParams() view returns((int256,int256,int256,int256,int256))
func (_InflationController *InflationControllerCaller) GetParams(opts *bind.CallOpts) (InflationControllerParams, error) {
	var out []interface{}
	err := _InflationController.contract.Call(opts, &out, "getParams")

	if err != nil {
		return *new(InflationControllerParams), err
	}

	out0 := *abi.ConvertType(out[0], new(InflationControllerParams)).(*InflationControllerParams)

	return out0, err

}

// GetParams is a free data retrieval call binding the contract method 0x5e615a6b.
//
// Solidity: function getParams() view returns((int256,int256,int256,int256,int256))
func (_InflationController *InflationControllerSession) GetParams() (InflationControllerParams, error) {
	return _InflationController.Contract.GetParams(&_InflationController.CallOpts)
}

// GetParams is a free data retrieval call binding the contract method 0x5e615a6b.
//
// Solidity: function getParams() view returns((int256,int256,int256,int256,int256))
func (_InflationController *InflationControllerCallerSession) GetParams() (InflationControllerParams, error) {
	return _InflationController.Contract.GetParams(&_InflationController.CallOpts)
}

// LiquidLogicMetaData contains all meta data concerning the LiquidLogic contract.
var LiquidLogicMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"UnbondingApproval\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COMMISSION_RATE_SCALE_FACTOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_FACTOR_UNIT_RECIP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_FACTOR_UNIT_RECIP_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approveUnbonding\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimTreasuryATN\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommissionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryUnclaimedATN\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"lock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"lockFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"lockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"redistribute\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rate\",\"type\":\"uint256\"}],\"name\":\"setCommissionRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"}],\"name\":\"unbondingAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"unclaimedRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegator\",\"type\":\"address\"}],\"name\":\"unlockedBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
	Sigs: map[string]string{
		"72c81963": "COMMISSION_RATE_DECIMALS()",
		"f5be3489": "COMMISSION_RATE_SCALE_FACTOR()",
		"187cf4d7": "FEE_FACTOR_UNIT_RECIP()",
		"3b80e355": "FEE_FACTOR_UNIT_RECIP_DECIMALS()",
		"dd62ed3e": "allowance(address,address)",
		"095ea7b3": "approve(address,uint256)",
		"bf99b73e": "approveUnbonding(address,uint256)",
		"70a08231": "balanceOf(address)",
		"9dc29fac": "burn(address,uint256)",
		"372500ab": "claimRewards()",
		"bd96102f": "claimTreasuryATN()",
		"313ce567": "decimals()",
		"3e4eb36c": "getCommissionRate()",
		"3b19e84a": "getTreasury()",
		"1eeffad0": "getTreasuryUnclaimedATN()",
		"1195e07e": "getValidator()",
		"282d3fdf": "lock(address,uint256)",
		"708e91e5": "lockFrom(address,address,uint256)",
		"59355736": "lockedBalanceOf(address)",
		"40c10f19": "mint(address,uint256)",
		"06fdde03": "name()",
		"a0ce552d": "redistribute(uint256)",
		"19fac8fd": "setCommissionRate(uint256)",
		"95d89b41": "symbol()",
		"18160ddd": "totalSupply()",
		"a9059cbb": "transfer(address,uint256)",
		"23b872dd": "transferFrom(address,address,uint256)",
		"d768d578": "unbondingAllowance(address,address)",
		"949813b8": "unclaimedRewards(address)",
		"7eee288d": "unlock(address,uint256)",
		"84955c88": "unlockedBalanceOf(address)",
	},
	Bin: "0x6080604052348015600f57600080fd5b50600f80546001600160a01b03191633179055611a8b806100316000396000f3fe6080604052600436106101dc5760003560e01c806359355736116101025780639dc29fac11610095578063bf99b73e11610064578063bf99b73e14610568578063d768d57814610588578063dd62ed3e146105a8578063f5be3489146105c8576101e3565b80639dc29fac14610500578063a0ce552d14610520578063a9059cbb14610533578063bd96102f14610553576101e3565b80637eee288d116100d15780637eee288d1461048b57806384955c88146104ab578063949813b8146104cb57806395d89b41146104eb576101e3565b80635935573614610416578063708e91e51461043657806370a082311461045657806372c8196314610476576101e3565b806323b872dd1161017a5780633b19e84a116101495780633b19e84a146103ae5780633b80e355146103cc5780633e4eb36c146103e157806340c10f19146103f6576101e3565b806323b872dd1461033d578063282d3fdf1461035d578063313ce5671461037d578063372500ab14610399576101e3565b806318160ddd116101b657806318160ddd146102ce578063187cf4d7146102f157806319fac8fd146103065780631eeffad014610328576101e3565b806306fdde0314610241578063095ea7b31461026c5780631195e07e1461029c576101e3565b366101e357005b60405162461bcd60e51b815260206004820152602860248201527f66616c6c6261636b206e6f7420696d706c656d656e74656420666f72204c69716044820152677569644c6f67696360c01b60648201526084015b60405180910390fd5b34801561024d57600080fd5b506102566105dd565b60405161026391906116e1565b60405180910390f35b34801561027857600080fd5b5061028c610287366004611746565b61066f565b6040519015158152602001610263565b3480156102a857600080fd5b50600b546001600160a01b03165b6040516001600160a01b039091168152602001610263565b3480156102da57600080fd5b506102e3610696565b604051908152602001610263565b3480156102fd57600080fd5b506102e36106c0565b34801561031257600080fd5b50610326610321366004611770565b6106cf565b005b34801561033457600080fd5b506102e3610712565b34801561034957600080fd5b5061028c610358366004611789565b61073c565b34801561036957600080fd5b50610326610378366004611746565b61083e565b34801561038957600080fd5b5060405160128152602001610263565b3480156103a557600080fd5b50610326610887565b3480156103ba57600080fd5b50600c546001600160a01b03166102b6565b3480156103d857600080fd5b506102e3600981565b3480156103ed57600080fd5b506102e3610949565b34801561040257600080fd5b50610326610411366004611746565b610973565b34801561042257600080fd5b506102e36104313660046117c6565b6109e8565b34801561044257600080fd5b50610326610451366004611789565b610a2b565b34801561046257600080fd5b506102e36104713660046117c6565b610b00565b34801561048257600080fd5b506102e3600481565b34801561049757600080fd5b506103266104a6366004611746565b610b3f565b3480156104b757600080fd5b506102e36104c63660046117c6565b610c1a565b3480156104d757600080fd5b506102e36104e63660046117c6565b610c6c565b3480156104f757600080fd5b50610256610cf5565b34801561050c57600080fd5b5061032661051b366004611746565b610d04565b6102e361052e366004611770565b610d6c565b34801561053f57600080fd5b5061028c61054e366004611746565b610f5b565b34801561055f57600080fd5b50610326610fb3565b34801561057457600080fd5b5061028c610583366004611746565b6110c9565b34801561059457600080fd5b506102e36105a33660046117e1565b6110de565b3480156105b457600080fd5b506102e36105c33660046117e1565b61112d565b3480156105d457600080fd5b506102e361117c565b6060600980546105ec90611814565b80601f016020809104026020016040519081016040528092919081815260200182805461061890611814565b80156106655780601f1061063a57610100808354040283529160200191610665565b820191906000526020600020905b81548152906001019060200180831161064857829003601f168201915b5050505050905090565b6000610679611188565b6106843384846111d5565b50600161069060008055565b92915050565b600080546001036106b95760405162461bcd60e51b81526004016102389061184e565b5060055490565b6106cc6009600a611982565b81565b6106d7611188565b600f546001600160a01b031633146107015760405162461bcd60e51b81526004016102389061198e565b600d81905561070f60008055565b50565b600080546001036107355760405162461bcd60e51b81526004016102389061184e565b50600e5490565b6000610746611188565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156107cb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610238565b6107df85336107da86856119d6565b6111d5565b6107e985846112fa565b6107f384846113e2565b836001600160a01b0316856001600160a01b0316600080516020611a368339815191528560405161082691815260200190565b60405180910390a350506000805560015b9392505050565b610846611188565b600f546001600160a01b031633146108705760405162461bcd60e51b81526004016102389061198e565b61087a8282611436565b61088360008055565b5050565b61088f611188565b600061089a336114e8565b3360008181526006602052604080822082905551929350916108fc90849084818181858888f193505050503d80600081146108f1576040519150601f19603f3d011682016040523d82523d6000602084013e6108f6565b606091505b505090508061093c5760405162461bcd60e51b81526020600482015260126024820152712330b4b632b2103a379039b2b7321020aa2760711b6044820152606401610238565b505061094760008055565b565b6000805460010361096c5760405162461bcd60e51b81526004016102389061184e565b50600d5490565b61097b611188565b600f546001600160a01b031633146109a55760405162461bcd60e51b81526004016102389061198e565b6109af82826113e2565b6040518181526001600160a01b03831690600090600080516020611a36833981519152906020015b60405180910390a361088360008055565b60008054600103610a0b5760405162461bcd60e51b81526004016102389061184e565b506001600160a01b0381166000908152600260205260409020545b919050565b610a33611188565b600f546001600160a01b03163314610a5d5760405162461bcd60e51b81526004016102389061198e565b6001600160a01b0380841660009081526004602090815260408083209386168352929052205481811015610ad35760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74206578636565647320616c6c6f77616e636500000000000000006044820152606401610238565b610ae78484610ae285856119d6565b611579565b610af18483611436565b50610afb60008055565b505050565b60008054600103610b235760405162461bcd60e51b81526004016102389061184e565b506001600160a01b031660009081526001602052604090205490565b610b47611188565b600f546001600160a01b03163314610b715760405162461bcd60e51b81526004016102389061198e565b6001600160a01b038216600090815260026020526040902054811115610be55760405162461bcd60e51b815260206004820152602360248201527f63616e277420756e6c6f636b206d6f72652066756e6473207468616e206c6f636044820152621ad95960ea1b6064820152608401610238565b6001600160a01b03821660009081526002602052604081208054839290610c0d9084906119d6565b9091555050600080555050565b60008054600103610c3d5760405162461bcd60e51b81526004016102389061184e565b6001600160a01b03821660009081526002602090815260408083205460019092529091205461069091906119d6565b60008054600103610c8f5760405162461bcd60e51b81526004016102389061184e565b6001600160a01b038216600090815260016020908152604080832054600854600790935290832054909291610cc69184919061167e565b6001600160a01b038516600090815260066020526040902054909150610ced9082906119e9565b949350505050565b6060600a80546105ec90611814565b610d0c611188565b600f546001600160a01b03163314610d365760405162461bcd60e51b81526004016102389061198e565b610d4082826112fa565b6040518181526000906001600160a01b03841690600080516020611a36833981519152906020016109d7565b6000610d76611188565b600f546001600160a01b03163314610da05760405162461bcd60e51b81526004016102389061198e565b346000610dac826116bb565b90508015610e4357610dbe81836119d6565b600c546040519193506000916001600160a01b03909116906108fc90849084818181858888f193505050503d8060008114610e15576040519150601f19603f3d011682016040523d82523d6000602084013e610e1a565b606091505b5090915050801515600003610e415781600e6000828254610e3b91906119e9565b90915550505b505b6000610e4e856116bb565b90508415610ee157600f54600b546001600160a01b039182169163f7fcc510911683610e7a818a6119d6565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b158015610ec857600080fd5b505af1158015610edc573d6000803e3d6000fd5b505050505b600554600090610ef36009600a611982565b610efd90866119fc565b610f079190611a13565b905080600854610f1791906119e9565b6008556000610f286009600a611982565b600554610f3590846119fc565b610f3f9190611a13565b9050610f4b81856119e9565b95505050505050610a2660008055565b6000610f65611188565b610f6f33836112fa565b610f7983836113e2565b6040518281526001600160a01b038416903390600080516020611a368339815191529060200160405180910390a350600161069060008055565b610fbb611188565b600c546001600160a01b031633146110205760405162461bcd60e51b815260206004820152602260248201527f6f6e6c792074726561737572792063616e20636c61696d2068697320726577616044820152611c9960f21b6064820152608401610238565b600e8054600091829055600c546040519192916001600160a01b03909116906108fc90849084818181858888f193505050503d806000811461107e576040519150601f19603f3d011682016040523d82523d6000602084013e611083565b606091505b505090508061093c5760405162461bcd60e51b81526020600482015260126024820152713330b4b632b2103a379039b2b7321020aa2760711b6044820152606401610238565b60006110d3611188565b610684338484611579565b600080546001036111015760405162461bcd60e51b81526004016102389061184e565b506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b600080546001036111505760405162461bcd60e51b81526004016102389061184e565b506001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6106cc6004600a611982565b600054156111ce5760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b6044820152606401610238565b6001600055565b6001600160a01b0383166112375760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610238565b6001600160a01b0382166112985760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610238565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b611303826114e8565b506001600160a01b03821660009081526001602090815260408083205460029092529091205461133390826119d6565b8211156113825760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e7420756e6c6f636b65642066756e647300000000006044820152606401610238565b61138c82826119d6565b6001600160a01b0384166000908152600160205260409020558082036113c6576001600160a01b0383166000908152600760205260408120555b81600560008282546113d891906119d6565b9091555050505050565b6113eb826114e8565b506001600160a01b038216600090815260016020526040812080548392906114149084906119e9565b92505081905550806005600082825461142d91906119e9565b90915550505050565b6001600160a01b0382166000908152600260209081526040808320546001909252909120548291611466916119d6565b10156114c05760405162461bcd60e51b8152602060048201526024808201527f63616e2774206c6f636b206d6f72652066756e6473207468616e20617661696c60448201526361626c6560e01b6064820152608401610238565b6001600160a01b0382166000908152600260205260408120805483929061142d9084906119e9565b6001600160a01b0381166000908152600160209081526040808320546008546007909352908320549091839161151f91849161167e565b6001600160a01b0385166000908152600660205260409020549091506115469082906119e9565b6001600160a01b039094166000908152600660209081526040808320879055600854600790925290912055509192915050565b6001600160a01b0383166115cf5760405162461bcd60e51b815260206004820152601d60248201527f617070726f76652066726f6d20746865207a65726f20616464726573730000006044820152606401610238565b6001600160a01b0382166116255760405162461bcd60e51b815260206004820152601b60248201527f617070726f766520746f20746865207a65726f206164647265737300000000006044820152606401610238565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f03530f06053c088596fe8c12632b52218b0685204ad1b757662178f87e27713b91016112ed565b60008360000361169057506000610837565b61169c6009600a611982565b846116a784866119d6565b6116b191906119fc565b610ced9190611a13565b6000806116ca6004600a611982565b600d546116d790856119fc565b6108379190611a13565b602081526000825180602084015260005b8181101561170f57602081860181015160408684010152016116f2565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610a2657600080fd5b6000806040838503121561175957600080fd5b6117628361172f565b946020939093013593505050565b60006020828403121561178257600080fd5b5035919050565b60008060006060848603121561179e57600080fd5b6117a78461172f565b92506117b56020850161172f565b929592945050506040919091013590565b6000602082840312156117d857600080fd5b6108378261172f565b600080604083850312156117f457600080fd5b6117fd8361172f565b915061180b6020840161172f565b90509250929050565b600181811c9082168061182857607f821691505b60208210810361184857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156118d6578085048111156118ba576118ba611885565b60018416156118c857908102905b60019390931c92800261189f565b935093915050565b6000826118ed57506001610690565b816118fa57506000610690565b8160018114611910576002811461191a57611936565b6001915050610690565b60ff84111561192b5761192b611885565b50506001821b610690565b5060208310610133831016604e8410600b8410161715611959575081810a610690565b611966600019848461189b565b806000190482111561197a5761197a611885565b029392505050565b600061083783836118de565b60208082526028908201527f43616c6c207265737472696374656420746f20746865204175746f6e6974792060408201526710dbdb9d1c9858dd60c21b606082015260800190565b8181038181111561069057610690611885565b8082018082111561069057610690611885565b808202811582820484141761069057610690611885565b600082611a3057634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e81bde77fbe59093f44ada6868ad5f6ece7ed4bea0887fd37197dbdfa14a639164736f6c634300081e0033",
}

// LiquidLogicABI is the input ABI used to generate the binding from.
// Deprecated: Use LiquidLogicMetaData.ABI instead.
var LiquidLogicABI = LiquidLogicMetaData.ABI

// Deprecated: Use LiquidLogicMetaData.Sigs instead.
// LiquidLogicFuncSigs maps the 4-byte function signature to its string representation.
var LiquidLogicFuncSigs = LiquidLogicMetaData.Sigs

// LiquidLogicBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use LiquidLogicMetaData.Bin instead.
var LiquidLogicBin = LiquidLogicMetaData.Bin

// DeployLiquidLogic deploys a new Ethereum contract, binding an instance of LiquidLogic to it.
func DeployLiquidLogic(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *LiquidLogic, error) {
	parsed, err := LiquidLogicMetaData.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(LiquidLogicBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &LiquidLogic{LiquidLogicCaller: LiquidLogicCaller{contract: contract}, LiquidLogicTransactor: LiquidLogicTransactor{contract: contract}, LiquidLogicFilterer: LiquidLogicFilterer{contract: contract}}, nil
}

// LiquidLogic is an auto generated Go binding around an Ethereum contract.
type LiquidLogic struct {
	LiquidLogicCaller     // Read-only binding to the contract
	LiquidLogicTransactor // Write-only binding to the contract
	LiquidLogicFilterer   // Log filterer for contract events
}

// LiquidLogicCaller is an auto generated read-only Go binding around an Ethereum contract.
type LiquidLogicCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidLogicTransactor is an auto generated write-only Go binding around an Ethereum contract.
type LiquidLogicTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidLogicFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type LiquidLogicFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidLogicSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type LiquidLogicSession struct {
	Contract     *LiquidLogic      // 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
}

// LiquidLogicCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type LiquidLogicCallerSession struct {
	Contract *LiquidLogicCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts      // Call options to use throughout this session
}

// LiquidLogicTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type LiquidLogicTransactorSession struct {
	Contract     *LiquidLogicTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
}

// LiquidLogicRaw is an auto generated low-level Go binding around an Ethereum contract.
type LiquidLogicRaw struct {
	Contract *LiquidLogic // Generic contract binding to access the raw methods on
}

// LiquidLogicCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type LiquidLogicCallerRaw struct {
	Contract *LiquidLogicCaller // Generic read-only contract binding to access the raw methods on
}

// LiquidLogicTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type LiquidLogicTransactorRaw struct {
	Contract *LiquidLogicTransactor // Generic write-only contract binding to access the raw methods on
}

// NewLiquidLogic creates a new instance of LiquidLogic, bound to a specific deployed contract.
func NewLiquidLogic(address common.Address, backend bind.ContractBackend) (*LiquidLogic, error) {
	contract, err := bindLiquidLogic(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &LiquidLogic{LiquidLogicCaller: LiquidLogicCaller{contract: contract}, LiquidLogicTransactor: LiquidLogicTransactor{contract: contract}, LiquidLogicFilterer: LiquidLogicFilterer{contract: contract}}, nil
}

// NewLiquidLogicCaller creates a new read-only instance of LiquidLogic, bound to a specific deployed contract.
func NewLiquidLogicCaller(address common.Address, caller bind.ContractCaller) (*LiquidLogicCaller, error) {
	contract, err := bindLiquidLogic(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &LiquidLogicCaller{contract: contract}, nil
}

// NewLiquidLogicTransactor creates a new write-only instance of LiquidLogic, bound to a specific deployed contract.
func NewLiquidLogicTransactor(address common.Address, transactor bind.ContractTransactor) (*LiquidLogicTransactor, error) {
	contract, err := bindLiquidLogic(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &LiquidLogicTransactor{contract: contract}, nil
}

// NewLiquidLogicFilterer creates a new log filterer instance of LiquidLogic, bound to a specific deployed contract.
func NewLiquidLogicFilterer(address common.Address, filterer bind.ContractFilterer) (*LiquidLogicFilterer, error) {
	contract, err := bindLiquidLogic(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &LiquidLogicFilterer{contract: contract}, nil
}

// bindLiquidLogic binds a generic wrapper to an already deployed contract.
func bindLiquidLogic(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(LiquidLogicABI))
	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 (_LiquidLogic *LiquidLogicRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _LiquidLogic.Contract.LiquidLogicCaller.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 (_LiquidLogic *LiquidLogicRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidLogic.Contract.LiquidLogicTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_LiquidLogic *LiquidLogicRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _LiquidLogic.Contract.LiquidLogicTransactor.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 (_LiquidLogic *LiquidLogicCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _LiquidLogic.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 (_LiquidLogic *LiquidLogicTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidLogic.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_LiquidLogic *LiquidLogicTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _LiquidLogic.Contract.contract.Transact(opts, method, params...)
}

// COMMISSIONRATEDECIMALS is a free data retrieval call binding the contract method 0x72c81963.
//
// Solidity: function COMMISSION_RATE_DECIMALS() view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) COMMISSIONRATEDECIMALS(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "COMMISSION_RATE_DECIMALS")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// COMMISSIONRATEDECIMALS is a free data retrieval call binding the contract method 0x72c81963.
//
// Solidity: function COMMISSION_RATE_DECIMALS() view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) COMMISSIONRATEDECIMALS() (*big.Int, error) {
	return _LiquidLogic.Contract.COMMISSIONRATEDECIMALS(&_LiquidLogic.CallOpts)
}

// COMMISSIONRATEDECIMALS is a free data retrieval call binding the contract method 0x72c81963.
//
// Solidity: function COMMISSION_RATE_DECIMALS() view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) COMMISSIONRATEDECIMALS() (*big.Int, error) {
	return _LiquidLogic.Contract.COMMISSIONRATEDECIMALS(&_LiquidLogic.CallOpts)
}

// COMMISSIONRATESCALEFACTOR is a free data retrieval call binding the contract method 0xf5be3489.
//
// Solidity: function COMMISSION_RATE_SCALE_FACTOR() view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) COMMISSIONRATESCALEFACTOR(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "COMMISSION_RATE_SCALE_FACTOR")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// COMMISSIONRATESCALEFACTOR is a free data retrieval call binding the contract method 0xf5be3489.
//
// Solidity: function COMMISSION_RATE_SCALE_FACTOR() view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) COMMISSIONRATESCALEFACTOR() (*big.Int, error) {
	return _LiquidLogic.Contract.COMMISSIONRATESCALEFACTOR(&_LiquidLogic.CallOpts)
}

// COMMISSIONRATESCALEFACTOR is a free data retrieval call binding the contract method 0xf5be3489.
//
// Solidity: function COMMISSION_RATE_SCALE_FACTOR() view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) COMMISSIONRATESCALEFACTOR() (*big.Int, error) {
	return _LiquidLogic.Contract.COMMISSIONRATESCALEFACTOR(&_LiquidLogic.CallOpts)
}

// FEEFACTORUNITRECIP is a free data retrieval call binding the contract method 0x187cf4d7.
//
// Solidity: function FEE_FACTOR_UNIT_RECIP() view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) FEEFACTORUNITRECIP(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "FEE_FACTOR_UNIT_RECIP")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// FEEFACTORUNITRECIP is a free data retrieval call binding the contract method 0x187cf4d7.
//
// Solidity: function FEE_FACTOR_UNIT_RECIP() view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) FEEFACTORUNITRECIP() (*big.Int, error) {
	return _LiquidLogic.Contract.FEEFACTORUNITRECIP(&_LiquidLogic.CallOpts)
}

// FEEFACTORUNITRECIP is a free data retrieval call binding the contract method 0x187cf4d7.
//
// Solidity: function FEE_FACTOR_UNIT_RECIP() view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) FEEFACTORUNITRECIP() (*big.Int, error) {
	return _LiquidLogic.Contract.FEEFACTORUNITRECIP(&_LiquidLogic.CallOpts)
}

// FEEFACTORUNITRECIPDECIMALS is a free data retrieval call binding the contract method 0x3b80e355.
//
// Solidity: function FEE_FACTOR_UNIT_RECIP_DECIMALS() view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) FEEFACTORUNITRECIPDECIMALS(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "FEE_FACTOR_UNIT_RECIP_DECIMALS")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// FEEFACTORUNITRECIPDECIMALS is a free data retrieval call binding the contract method 0x3b80e355.
//
// Solidity: function FEE_FACTOR_UNIT_RECIP_DECIMALS() view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) FEEFACTORUNITRECIPDECIMALS() (*big.Int, error) {
	return _LiquidLogic.Contract.FEEFACTORUNITRECIPDECIMALS(&_LiquidLogic.CallOpts)
}

// FEEFACTORUNITRECIPDECIMALS is a free data retrieval call binding the contract method 0x3b80e355.
//
// Solidity: function FEE_FACTOR_UNIT_RECIP_DECIMALS() view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) FEEFACTORUNITRECIPDECIMALS() (*big.Int, error) {
	return _LiquidLogic.Contract.FEEFACTORUNITRECIPDECIMALS(&_LiquidLogic.CallOpts)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address _owner, address _spender) view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) Allowance(opts *bind.CallOpts, _owner common.Address, _spender common.Address) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "allowance", _owner, _spender)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address _owner, address _spender) view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) Allowance(_owner common.Address, _spender common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.Allowance(&_LiquidLogic.CallOpts, _owner, _spender)
}

// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
//
// Solidity: function allowance(address _owner, address _spender) view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) Allowance(_owner common.Address, _spender common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.Allowance(&_LiquidLogic.CallOpts, _owner, _spender)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address _delegator) view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) BalanceOf(opts *bind.CallOpts, _delegator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "balanceOf", _delegator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address _delegator) view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) BalanceOf(_delegator common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.BalanceOf(&_LiquidLogic.CallOpts, _delegator)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address _delegator) view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) BalanceOf(_delegator common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.BalanceOf(&_LiquidLogic.CallOpts, _delegator)
}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_LiquidLogic *LiquidLogicCaller) Decimals(opts *bind.CallOpts) (uint8, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "decimals")

	if err != nil {
		return *new(uint8), err
	}

	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)

	return out0, err

}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_LiquidLogic *LiquidLogicSession) Decimals() (uint8, error) {
	return _LiquidLogic.Contract.Decimals(&_LiquidLogic.CallOpts)
}

// Decimals is a free data retrieval call binding the contract method 0x313ce567.
//
// Solidity: function decimals() pure returns(uint8)
func (_LiquidLogic *LiquidLogicCallerSession) Decimals() (uint8, error) {
	return _LiquidLogic.Contract.Decimals(&_LiquidLogic.CallOpts)
}

// GetCommissionRate is a free data retrieval call binding the contract method 0x3e4eb36c.
//
// Solidity: function getCommissionRate() view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) GetCommissionRate(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "getCommissionRate")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetCommissionRate is a free data retrieval call binding the contract method 0x3e4eb36c.
//
// Solidity: function getCommissionRate() view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) GetCommissionRate() (*big.Int, error) {
	return _LiquidLogic.Contract.GetCommissionRate(&_LiquidLogic.CallOpts)
}

// GetCommissionRate is a free data retrieval call binding the contract method 0x3e4eb36c.
//
// Solidity: function getCommissionRate() view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) GetCommissionRate() (*big.Int, error) {
	return _LiquidLogic.Contract.GetCommissionRate(&_LiquidLogic.CallOpts)
}

// GetTreasury is a free data retrieval call binding the contract method 0x3b19e84a.
//
// Solidity: function getTreasury() view returns(address)
func (_LiquidLogic *LiquidLogicCaller) GetTreasury(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "getTreasury")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetTreasury is a free data retrieval call binding the contract method 0x3b19e84a.
//
// Solidity: function getTreasury() view returns(address)
func (_LiquidLogic *LiquidLogicSession) GetTreasury() (common.Address, error) {
	return _LiquidLogic.Contract.GetTreasury(&_LiquidLogic.CallOpts)
}

// GetTreasury is a free data retrieval call binding the contract method 0x3b19e84a.
//
// Solidity: function getTreasury() view returns(address)
func (_LiquidLogic *LiquidLogicCallerSession) GetTreasury() (common.Address, error) {
	return _LiquidLogic.Contract.GetTreasury(&_LiquidLogic.CallOpts)
}

// GetTreasuryUnclaimedATN is a free data retrieval call binding the contract method 0x1eeffad0.
//
// Solidity: function getTreasuryUnclaimedATN() view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) GetTreasuryUnclaimedATN(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "getTreasuryUnclaimedATN")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetTreasuryUnclaimedATN is a free data retrieval call binding the contract method 0x1eeffad0.
//
// Solidity: function getTreasuryUnclaimedATN() view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) GetTreasuryUnclaimedATN() (*big.Int, error) {
	return _LiquidLogic.Contract.GetTreasuryUnclaimedATN(&_LiquidLogic.CallOpts)
}

// GetTreasuryUnclaimedATN is a free data retrieval call binding the contract method 0x1eeffad0.
//
// Solidity: function getTreasuryUnclaimedATN() view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) GetTreasuryUnclaimedATN() (*big.Int, error) {
	return _LiquidLogic.Contract.GetTreasuryUnclaimedATN(&_LiquidLogic.CallOpts)
}

// GetValidator is a free data retrieval call binding the contract method 0x1195e07e.
//
// Solidity: function getValidator() view returns(address)
func (_LiquidLogic *LiquidLogicCaller) GetValidator(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "getValidator")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetValidator is a free data retrieval call binding the contract method 0x1195e07e.
//
// Solidity: function getValidator() view returns(address)
func (_LiquidLogic *LiquidLogicSession) GetValidator() (common.Address, error) {
	return _LiquidLogic.Contract.GetValidator(&_LiquidLogic.CallOpts)
}

// GetValidator is a free data retrieval call binding the contract method 0x1195e07e.
//
// Solidity: function getValidator() view returns(address)
func (_LiquidLogic *LiquidLogicCallerSession) GetValidator() (common.Address, error) {
	return _LiquidLogic.Contract.GetValidator(&_LiquidLogic.CallOpts)
}

// LockedBalanceOf is a free data retrieval call binding the contract method 0x59355736.
//
// Solidity: function lockedBalanceOf(address _delegator) view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) LockedBalanceOf(opts *bind.CallOpts, _delegator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "lockedBalanceOf", _delegator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// LockedBalanceOf is a free data retrieval call binding the contract method 0x59355736.
//
// Solidity: function lockedBalanceOf(address _delegator) view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) LockedBalanceOf(_delegator common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.LockedBalanceOf(&_LiquidLogic.CallOpts, _delegator)
}

// LockedBalanceOf is a free data retrieval call binding the contract method 0x59355736.
//
// Solidity: function lockedBalanceOf(address _delegator) view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) LockedBalanceOf(_delegator common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.LockedBalanceOf(&_LiquidLogic.CallOpts, _delegator)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_LiquidLogic *LiquidLogicCaller) Name(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "name")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_LiquidLogic *LiquidLogicSession) Name() (string, error) {
	return _LiquidLogic.Contract.Name(&_LiquidLogic.CallOpts)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_LiquidLogic *LiquidLogicCallerSession) Name() (string, error) {
	return _LiquidLogic.Contract.Name(&_LiquidLogic.CallOpts)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_LiquidLogic *LiquidLogicCaller) Symbol(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "symbol")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_LiquidLogic *LiquidLogicSession) Symbol() (string, error) {
	return _LiquidLogic.Contract.Symbol(&_LiquidLogic.CallOpts)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_LiquidLogic *LiquidLogicCallerSession) Symbol() (string, error) {
	return _LiquidLogic.Contract.Symbol(&_LiquidLogic.CallOpts)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "totalSupply")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) TotalSupply() (*big.Int, error) {
	return _LiquidLogic.Contract.TotalSupply(&_LiquidLogic.CallOpts)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) TotalSupply() (*big.Int, error) {
	return _LiquidLogic.Contract.TotalSupply(&_LiquidLogic.CallOpts)
}

// UnbondingAllowance is a free data retrieval call binding the contract method 0xd768d578.
//
// Solidity: function unbondingAllowance(address _owner, address _caller) view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) UnbondingAllowance(opts *bind.CallOpts, _owner common.Address, _caller common.Address) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "unbondingAllowance", _owner, _caller)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// UnbondingAllowance is a free data retrieval call binding the contract method 0xd768d578.
//
// Solidity: function unbondingAllowance(address _owner, address _caller) view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) UnbondingAllowance(_owner common.Address, _caller common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.UnbondingAllowance(&_LiquidLogic.CallOpts, _owner, _caller)
}

// UnbondingAllowance is a free data retrieval call binding the contract method 0xd768d578.
//
// Solidity: function unbondingAllowance(address _owner, address _caller) view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) UnbondingAllowance(_owner common.Address, _caller common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.UnbondingAllowance(&_LiquidLogic.CallOpts, _owner, _caller)
}

// UnclaimedRewards is a free data retrieval call binding the contract method 0x949813b8.
//
// Solidity: function unclaimedRewards(address _account) view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) UnclaimedRewards(opts *bind.CallOpts, _account common.Address) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "unclaimedRewards", _account)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// UnclaimedRewards is a free data retrieval call binding the contract method 0x949813b8.
//
// Solidity: function unclaimedRewards(address _account) view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) UnclaimedRewards(_account common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.UnclaimedRewards(&_LiquidLogic.CallOpts, _account)
}

// UnclaimedRewards is a free data retrieval call binding the contract method 0x949813b8.
//
// Solidity: function unclaimedRewards(address _account) view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) UnclaimedRewards(_account common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.UnclaimedRewards(&_LiquidLogic.CallOpts, _account)
}

// UnlockedBalanceOf is a free data retrieval call binding the contract method 0x84955c88.
//
// Solidity: function unlockedBalanceOf(address _delegator) view returns(uint256)
func (_LiquidLogic *LiquidLogicCaller) UnlockedBalanceOf(opts *bind.CallOpts, _delegator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _LiquidLogic.contract.Call(opts, &out, "unlockedBalanceOf", _delegator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// UnlockedBalanceOf is a free data retrieval call binding the contract method 0x84955c88.
//
// Solidity: function unlockedBalanceOf(address _delegator) view returns(uint256)
func (_LiquidLogic *LiquidLogicSession) UnlockedBalanceOf(_delegator common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.UnlockedBalanceOf(&_LiquidLogic.CallOpts, _delegator)
}

// UnlockedBalanceOf is a free data retrieval call binding the contract method 0x84955c88.
//
// Solidity: function unlockedBalanceOf(address _delegator) view returns(uint256)
func (_LiquidLogic *LiquidLogicCallerSession) UnlockedBalanceOf(_delegator common.Address) (*big.Int, error) {
	return _LiquidLogic.Contract.UnlockedBalanceOf(&_LiquidLogic.CallOpts, _delegator)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address _spender, uint256 _amount) returns(bool)
func (_LiquidLogic *LiquidLogicTransactor) Approve(opts *bind.TransactOpts, _spender common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "approve", _spender, _amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address _spender, uint256 _amount) returns(bool)
func (_LiquidLogic *LiquidLogicSession) Approve(_spender common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Approve(&_LiquidLogic.TransactOpts, _spender, _amount)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address _spender, uint256 _amount) returns(bool)
func (_LiquidLogic *LiquidLogicTransactorSession) Approve(_spender common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Approve(&_LiquidLogic.TransactOpts, _spender, _amount)
}

// ApproveUnbonding is a paid mutator transaction binding the contract method 0xbf99b73e.
//
// Solidity: function approveUnbonding(address _caller, uint256 _amount) returns(bool)
func (_LiquidLogic *LiquidLogicTransactor) ApproveUnbonding(opts *bind.TransactOpts, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "approveUnbonding", _caller, _amount)
}

// ApproveUnbonding is a paid mutator transaction binding the contract method 0xbf99b73e.
//
// Solidity: function approveUnbonding(address _caller, uint256 _amount) returns(bool)
func (_LiquidLogic *LiquidLogicSession) ApproveUnbonding(_caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.ApproveUnbonding(&_LiquidLogic.TransactOpts, _caller, _amount)
}

// ApproveUnbonding is a paid mutator transaction binding the contract method 0xbf99b73e.
//
// Solidity: function approveUnbonding(address _caller, uint256 _amount) returns(bool)
func (_LiquidLogic *LiquidLogicTransactorSession) ApproveUnbonding(_caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.ApproveUnbonding(&_LiquidLogic.TransactOpts, _caller, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicTransactor) Burn(opts *bind.TransactOpts, _account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "burn", _account, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicSession) Burn(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Burn(&_LiquidLogic.TransactOpts, _account, _amount)
}

// Burn is a paid mutator transaction binding the contract method 0x9dc29fac.
//
// Solidity: function burn(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicTransactorSession) Burn(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Burn(&_LiquidLogic.TransactOpts, _account, _amount)
}

// ClaimRewards is a paid mutator transaction binding the contract method 0x372500ab.
//
// Solidity: function claimRewards() returns()
func (_LiquidLogic *LiquidLogicTransactor) ClaimRewards(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "claimRewards")
}

// ClaimRewards is a paid mutator transaction binding the contract method 0x372500ab.
//
// Solidity: function claimRewards() returns()
func (_LiquidLogic *LiquidLogicSession) ClaimRewards() (*types.Transaction, error) {
	return _LiquidLogic.Contract.ClaimRewards(&_LiquidLogic.TransactOpts)
}

// ClaimRewards is a paid mutator transaction binding the contract method 0x372500ab.
//
// Solidity: function claimRewards() returns()
func (_LiquidLogic *LiquidLogicTransactorSession) ClaimRewards() (*types.Transaction, error) {
	return _LiquidLogic.Contract.ClaimRewards(&_LiquidLogic.TransactOpts)
}

// ClaimTreasuryATN is a paid mutator transaction binding the contract method 0xbd96102f.
//
// Solidity: function claimTreasuryATN() returns()
func (_LiquidLogic *LiquidLogicTransactor) ClaimTreasuryATN(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "claimTreasuryATN")
}

// ClaimTreasuryATN is a paid mutator transaction binding the contract method 0xbd96102f.
//
// Solidity: function claimTreasuryATN() returns()
func (_LiquidLogic *LiquidLogicSession) ClaimTreasuryATN() (*types.Transaction, error) {
	return _LiquidLogic.Contract.ClaimTreasuryATN(&_LiquidLogic.TransactOpts)
}

// ClaimTreasuryATN is a paid mutator transaction binding the contract method 0xbd96102f.
//
// Solidity: function claimTreasuryATN() returns()
func (_LiquidLogic *LiquidLogicTransactorSession) ClaimTreasuryATN() (*types.Transaction, error) {
	return _LiquidLogic.Contract.ClaimTreasuryATN(&_LiquidLogic.TransactOpts)
}

// Lock is a paid mutator transaction binding the contract method 0x282d3fdf.
//
// Solidity: function lock(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicTransactor) Lock(opts *bind.TransactOpts, _account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "lock", _account, _amount)
}

// Lock is a paid mutator transaction binding the contract method 0x282d3fdf.
//
// Solidity: function lock(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicSession) Lock(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Lock(&_LiquidLogic.TransactOpts, _account, _amount)
}

// Lock is a paid mutator transaction binding the contract method 0x282d3fdf.
//
// Solidity: function lock(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicTransactorSession) Lock(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Lock(&_LiquidLogic.TransactOpts, _account, _amount)
}

// LockFrom is a paid mutator transaction binding the contract method 0x708e91e5.
//
// Solidity: function lockFrom(address _account, address _caller, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicTransactor) LockFrom(opts *bind.TransactOpts, _account common.Address, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "lockFrom", _account, _caller, _amount)
}

// LockFrom is a paid mutator transaction binding the contract method 0x708e91e5.
//
// Solidity: function lockFrom(address _account, address _caller, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicSession) LockFrom(_account common.Address, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.LockFrom(&_LiquidLogic.TransactOpts, _account, _caller, _amount)
}

// LockFrom is a paid mutator transaction binding the contract method 0x708e91e5.
//
// Solidity: function lockFrom(address _account, address _caller, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicTransactorSession) LockFrom(_account common.Address, _caller common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.LockFrom(&_LiquidLogic.TransactOpts, _account, _caller, _amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicTransactor) Mint(opts *bind.TransactOpts, _account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "mint", _account, _amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicSession) Mint(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Mint(&_LiquidLogic.TransactOpts, _account, _amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicTransactorSession) Mint(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Mint(&_LiquidLogic.TransactOpts, _account, _amount)
}

// Redistribute is a paid mutator transaction binding the contract method 0xa0ce552d.
//
// Solidity: function redistribute(uint256 _ntnReward) payable returns(uint256)
func (_LiquidLogic *LiquidLogicTransactor) Redistribute(opts *bind.TransactOpts, _ntnReward *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "redistribute", _ntnReward)
}

// Redistribute is a paid mutator transaction binding the contract method 0xa0ce552d.
//
// Solidity: function redistribute(uint256 _ntnReward) payable returns(uint256)
func (_LiquidLogic *LiquidLogicSession) Redistribute(_ntnReward *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Redistribute(&_LiquidLogic.TransactOpts, _ntnReward)
}

// Redistribute is a paid mutator transaction binding the contract method 0xa0ce552d.
//
// Solidity: function redistribute(uint256 _ntnReward) payable returns(uint256)
func (_LiquidLogic *LiquidLogicTransactorSession) Redistribute(_ntnReward *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Redistribute(&_LiquidLogic.TransactOpts, _ntnReward)
}

// SetCommissionRate is a paid mutator transaction binding the contract method 0x19fac8fd.
//
// Solidity: function setCommissionRate(uint256 _rate) returns()
func (_LiquidLogic *LiquidLogicTransactor) SetCommissionRate(opts *bind.TransactOpts, _rate *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "setCommissionRate", _rate)
}

// SetCommissionRate is a paid mutator transaction binding the contract method 0x19fac8fd.
//
// Solidity: function setCommissionRate(uint256 _rate) returns()
func (_LiquidLogic *LiquidLogicSession) SetCommissionRate(_rate *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.SetCommissionRate(&_LiquidLogic.TransactOpts, _rate)
}

// SetCommissionRate is a paid mutator transaction binding the contract method 0x19fac8fd.
//
// Solidity: function setCommissionRate(uint256 _rate) returns()
func (_LiquidLogic *LiquidLogicTransactorSession) SetCommissionRate(_rate *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.SetCommissionRate(&_LiquidLogic.TransactOpts, _rate)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address _to, uint256 _amount) returns(bool _success)
func (_LiquidLogic *LiquidLogicTransactor) Transfer(opts *bind.TransactOpts, _to common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "transfer", _to, _amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address _to, uint256 _amount) returns(bool _success)
func (_LiquidLogic *LiquidLogicSession) Transfer(_to common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Transfer(&_LiquidLogic.TransactOpts, _to, _amount)
}

// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
//
// Solidity: function transfer(address _to, uint256 _amount) returns(bool _success)
func (_LiquidLogic *LiquidLogicTransactorSession) Transfer(_to common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Transfer(&_LiquidLogic.TransactOpts, _to, _amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool)
func (_LiquidLogic *LiquidLogicTransactor) TransferFrom(opts *bind.TransactOpts, _sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "transferFrom", _sender, _recipient, _amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool)
func (_LiquidLogic *LiquidLogicSession) TransferFrom(_sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.TransferFrom(&_LiquidLogic.TransactOpts, _sender, _recipient, _amount)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address _sender, address _recipient, uint256 _amount) returns(bool)
func (_LiquidLogic *LiquidLogicTransactorSession) TransferFrom(_sender common.Address, _recipient common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.TransferFrom(&_LiquidLogic.TransactOpts, _sender, _recipient, _amount)
}

// Unlock is a paid mutator transaction binding the contract method 0x7eee288d.
//
// Solidity: function unlock(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicTransactor) Unlock(opts *bind.TransactOpts, _account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.contract.Transact(opts, "unlock", _account, _amount)
}

// Unlock is a paid mutator transaction binding the contract method 0x7eee288d.
//
// Solidity: function unlock(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicSession) Unlock(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Unlock(&_LiquidLogic.TransactOpts, _account, _amount)
}

// Unlock is a paid mutator transaction binding the contract method 0x7eee288d.
//
// Solidity: function unlock(address _account, uint256 _amount) returns()
func (_LiquidLogic *LiquidLogicTransactorSession) Unlock(_account common.Address, _amount *big.Int) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Unlock(&_LiquidLogic.TransactOpts, _account, _amount)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_LiquidLogic *LiquidLogicTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) {
	return _LiquidLogic.contract.RawTransact(opts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_LiquidLogic *LiquidLogicSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Fallback(&_LiquidLogic.TransactOpts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_LiquidLogic *LiquidLogicTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _LiquidLogic.Contract.Fallback(&_LiquidLogic.TransactOpts, calldata)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_LiquidLogic *LiquidLogicTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidLogic.contract.RawTransact(opts, nil) // calldata is disallowed for receive function
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_LiquidLogic *LiquidLogicSession) Receive() (*types.Transaction, error) {
	return _LiquidLogic.Contract.Receive(&_LiquidLogic.TransactOpts)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_LiquidLogic *LiquidLogicTransactorSession) Receive() (*types.Transaction, error) {
	return _LiquidLogic.Contract.Receive(&_LiquidLogic.TransactOpts)
}

// LiquidLogicApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the LiquidLogic contract.
type LiquidLogicApprovalIterator struct {
	Event *LiquidLogicApproval // 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 *LiquidLogicApprovalIterator) 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(LiquidLogicApproval)
			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(LiquidLogicApproval)
		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 *LiquidLogicApprovalIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *LiquidLogicApprovalIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// LiquidLogicApproval represents a Approval event raised by the LiquidLogic contract.
type LiquidLogicApproval struct {
	Owner   common.Address
	Spender common.Address
	Value   *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_LiquidLogic *LiquidLogicFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*LiquidLogicApprovalIterator, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _LiquidLogic.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
	if err != nil {
		return nil, err
	}
	return &LiquidLogicApprovalIterator{contract: _LiquidLogic.contract, event: "Approval", logs: logs, sub: sub}, nil
}

// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_LiquidLogic *LiquidLogicFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *LiquidLogicApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var spenderRule []interface{}
	for _, spenderItem := range spender {
		spenderRule = append(spenderRule, spenderItem)
	}

	logs, sub, err := _LiquidLogic.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
	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(LiquidLogicApproval)
				if err := _LiquidLogic.contract.UnpackLog(event, "Approval", 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
}

// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
func (_LiquidLogic *LiquidLogicFilterer) ParseApproval(log types.Log) (*LiquidLogicApproval, error) {
	event := new(LiquidLogicApproval)
	if err := _LiquidLogic.contract.UnpackLog(event, "Approval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// LiquidLogicTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the LiquidLogic contract.
type LiquidLogicTransferIterator struct {
	Event *LiquidLogicTransfer // 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 *LiquidLogicTransferIterator) 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(LiquidLogicTransfer)
			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(LiquidLogicTransfer)
		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 *LiquidLogicTransferIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *LiquidLogicTransferIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// LiquidLogicTransfer represents a Transfer event raised by the LiquidLogic contract.
type LiquidLogicTransfer struct {
	From  common.Address
	To    common.Address
	Value *big.Int
	Raw   types.Log // Blockchain specific contextual infos
}

// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_LiquidLogic *LiquidLogicFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*LiquidLogicTransferIterator, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _LiquidLogic.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
	if err != nil {
		return nil, err
	}
	return &LiquidLogicTransferIterator{contract: _LiquidLogic.contract, event: "Transfer", logs: logs, sub: sub}, nil
}

// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_LiquidLogic *LiquidLogicFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *LiquidLogicTransfer, from []common.Address, to []common.Address) (event.Subscription, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}

	logs, sub, err := _LiquidLogic.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
	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(LiquidLogicTransfer)
				if err := _LiquidLogic.contract.UnpackLog(event, "Transfer", 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
}

// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
func (_LiquidLogic *LiquidLogicFilterer) ParseTransfer(log types.Log) (*LiquidLogicTransfer, error) {
	event := new(LiquidLogicTransfer)
	if err := _LiquidLogic.contract.UnpackLog(event, "Transfer", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// LiquidLogicUnbondingApprovalIterator is returned from FilterUnbondingApproval and is used to iterate over the raw logs and unpacked data for UnbondingApproval events raised by the LiquidLogic contract.
type LiquidLogicUnbondingApprovalIterator struct {
	Event *LiquidLogicUnbondingApproval // 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 *LiquidLogicUnbondingApprovalIterator) 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(LiquidLogicUnbondingApproval)
			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(LiquidLogicUnbondingApproval)
		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 *LiquidLogicUnbondingApprovalIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *LiquidLogicUnbondingApprovalIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// LiquidLogicUnbondingApproval represents a UnbondingApproval event raised by the LiquidLogic contract.
type LiquidLogicUnbondingApproval struct {
	Owner  common.Address
	Caller common.Address
	Value  *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterUnbondingApproval is a free log retrieval operation binding the contract event 0x03530f06053c088596fe8c12632b52218b0685204ad1b757662178f87e27713b.
//
// Solidity: event UnbondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_LiquidLogic *LiquidLogicFilterer) FilterUnbondingApproval(opts *bind.FilterOpts, _owner []common.Address, _caller []common.Address) (*LiquidLogicUnbondingApprovalIterator, error) {

	var _ownerRule []interface{}
	for _, _ownerItem := range _owner {
		_ownerRule = append(_ownerRule, _ownerItem)
	}
	var _callerRule []interface{}
	for _, _callerItem := range _caller {
		_callerRule = append(_callerRule, _callerItem)
	}

	logs, sub, err := _LiquidLogic.contract.FilterLogs(opts, "UnbondingApproval", _ownerRule, _callerRule)
	if err != nil {
		return nil, err
	}
	return &LiquidLogicUnbondingApprovalIterator{contract: _LiquidLogic.contract, event: "UnbondingApproval", logs: logs, sub: sub}, nil
}

// WatchUnbondingApproval is a free log subscription operation binding the contract event 0x03530f06053c088596fe8c12632b52218b0685204ad1b757662178f87e27713b.
//
// Solidity: event UnbondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_LiquidLogic *LiquidLogicFilterer) WatchUnbondingApproval(opts *bind.WatchOpts, sink chan<- *LiquidLogicUnbondingApproval, _owner []common.Address, _caller []common.Address) (event.Subscription, error) {

	var _ownerRule []interface{}
	for _, _ownerItem := range _owner {
		_ownerRule = append(_ownerRule, _ownerItem)
	}
	var _callerRule []interface{}
	for _, _callerItem := range _caller {
		_callerRule = append(_callerRule, _callerItem)
	}

	logs, sub, err := _LiquidLogic.contract.WatchLogs(opts, "UnbondingApproval", _ownerRule, _callerRule)
	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(LiquidLogicUnbondingApproval)
				if err := _LiquidLogic.contract.UnpackLog(event, "UnbondingApproval", 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
}

// ParseUnbondingApproval is a log parse operation binding the contract event 0x03530f06053c088596fe8c12632b52218b0685204ad1b757662178f87e27713b.
//
// Solidity: event UnbondingApproval(address indexed _owner, address indexed _caller, uint256 _value)
func (_LiquidLogic *LiquidLogicFilterer) ParseUnbondingApproval(log types.Log) (*LiquidLogicUnbondingApproval, error) {
	event := new(LiquidLogicUnbondingApproval)
	if err := _LiquidLogic.contract.UnpackLog(event, "UnbondingApproval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// LiquidStateMetaData contains all meta data concerning the LiquidState contract.
var LiquidStateMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_index\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_liquidLogicAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
	Bin: "0x608060405234801561001057600080fd5b506040516105cf3803806105cf83398101604081905261002f916101af565b806001600160a01b031663f5be34896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009191906102a4565b83111561009d57600080fd5b600b80546001600160a01b038088166001600160a01b031992831617909255600c805492871692909116919091179055600d8390556040516100e39083906020016102bd565b604051602081830303815290604052600990816101009190610373565b508160405160200161011291906102bd565b604051602081830303815290604052600a908161012f9190610373565b5050600f80546001600160a01b031916331790555061043192505050565b6001600160a01b038116811461016257600080fd5b50565b80516101708161014d565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101a657818101518382015260200161018e565b50506000910152565b600080600080600060a086880312156101c757600080fd5b85516101d28161014d565b60208701519095506101e38161014d565b6040870151606088015191955093506001600160401b0381111561020657600080fd5b8601601f8101881361021757600080fd5b80516001600160401b0381111561023057610230610175565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025e5761025e610175565b6040528181528282016020018a101561027657600080fd5b61028782602083016020860161018b565b935061029891505060808701610165565b90509295509295909350565b6000602082840312156102b657600080fd5b5051919050565b644c4e544e2d60d81b8152600082516102dd81600585016020870161018b565b9190910160050192915050565b600181811c908216806102fe57607f821691505b60208210810361031e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561036e57806000526020600020601f840160051c8101602085101561034b5750805b601f840160051c820191505b8181101561036b5760008155600101610357565b50505b505050565b81516001600160401b0381111561038c5761038c610175565b6103a08161039a84546102ea565b84610324565b6020601f8211600181146103d457600083156103bc5750848201515b600019600385901b1c1916600184901b17845561036b565b600084815260208120601f198516915b8281101561040457878501518255602094850194600190920191016103e4565b50848210156104225786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b61018f806104406000396000f3fe6080604052366100245761002261001461002b565b6001600160a01b0316610106565b005b6100226100145b600080600f60009054906101000a90046001600160a01b03166001600160a01b0316634c1f1c776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a59190610129565b90506001600160a01b0381166101015760405162461bcd60e51b815260206004820152601d60248201527f6c6971756964206c6f67696320636f6e7472616374206e6f7420736574000000604482015260640160405180910390fd5b919050565b3660008037600080366000845af43d6000803e80610123573d6000fd5b503d6000f35b60006020828403121561013b57600080fd5b81516001600160a01b038116811461015257600080fd5b939250505056fea2646970667358221220ce2d0e61c8ad6acf83a736338add011753d52a2572b66d42a5f85bfe7de9136b64736f6c634300081e0033",
}

// LiquidStateABI is the input ABI used to generate the binding from.
// Deprecated: Use LiquidStateMetaData.ABI instead.
var LiquidStateABI = LiquidStateMetaData.ABI

// LiquidStateBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use LiquidStateMetaData.Bin instead.
var LiquidStateBin = LiquidStateMetaData.Bin

// DeployLiquidState deploys a new Ethereum contract, binding an instance of LiquidState to it.
func DeployLiquidState(auth *bind.TransactOpts, backend bind.ContractBackend, _validator common.Address, _treasury common.Address, _commissionRate *big.Int, _index string, _liquidLogicAddress common.Address) (common.Address, *types.Transaction, *LiquidState, error) {
	parsed, err := LiquidStateMetaData.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(LiquidStateBin), backend, _validator, _treasury, _commissionRate, _index, _liquidLogicAddress)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &LiquidState{LiquidStateCaller: LiquidStateCaller{contract: contract}, LiquidStateTransactor: LiquidStateTransactor{contract: contract}, LiquidStateFilterer: LiquidStateFilterer{contract: contract}}, nil
}

// LiquidState is an auto generated Go binding around an Ethereum contract.
type LiquidState struct {
	LiquidStateCaller     // Read-only binding to the contract
	LiquidStateTransactor // Write-only binding to the contract
	LiquidStateFilterer   // Log filterer for contract events
}

// LiquidStateCaller is an auto generated read-only Go binding around an Ethereum contract.
type LiquidStateCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidStateTransactor is an auto generated write-only Go binding around an Ethereum contract.
type LiquidStateTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidStateFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type LiquidStateFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidStateSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type LiquidStateSession struct {
	Contract     *LiquidState      // 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
}

// LiquidStateCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type LiquidStateCallerSession struct {
	Contract *LiquidStateCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts      // Call options to use throughout this session
}

// LiquidStateTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type LiquidStateTransactorSession struct {
	Contract     *LiquidStateTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
}

// LiquidStateRaw is an auto generated low-level Go binding around an Ethereum contract.
type LiquidStateRaw struct {
	Contract *LiquidState // Generic contract binding to access the raw methods on
}

// LiquidStateCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type LiquidStateCallerRaw struct {
	Contract *LiquidStateCaller // Generic read-only contract binding to access the raw methods on
}

// LiquidStateTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type LiquidStateTransactorRaw struct {
	Contract *LiquidStateTransactor // Generic write-only contract binding to access the raw methods on
}

// NewLiquidState creates a new instance of LiquidState, bound to a specific deployed contract.
func NewLiquidState(address common.Address, backend bind.ContractBackend) (*LiquidState, error) {
	contract, err := bindLiquidState(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &LiquidState{LiquidStateCaller: LiquidStateCaller{contract: contract}, LiquidStateTransactor: LiquidStateTransactor{contract: contract}, LiquidStateFilterer: LiquidStateFilterer{contract: contract}}, nil
}

// NewLiquidStateCaller creates a new read-only instance of LiquidState, bound to a specific deployed contract.
func NewLiquidStateCaller(address common.Address, caller bind.ContractCaller) (*LiquidStateCaller, error) {
	contract, err := bindLiquidState(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &LiquidStateCaller{contract: contract}, nil
}

// NewLiquidStateTransactor creates a new write-only instance of LiquidState, bound to a specific deployed contract.
func NewLiquidStateTransactor(address common.Address, transactor bind.ContractTransactor) (*LiquidStateTransactor, error) {
	contract, err := bindLiquidState(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &LiquidStateTransactor{contract: contract}, nil
}

// NewLiquidStateFilterer creates a new log filterer instance of LiquidState, bound to a specific deployed contract.
func NewLiquidStateFilterer(address common.Address, filterer bind.ContractFilterer) (*LiquidStateFilterer, error) {
	contract, err := bindLiquidState(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &LiquidStateFilterer{contract: contract}, nil
}

// bindLiquidState binds a generic wrapper to an already deployed contract.
func bindLiquidState(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(LiquidStateABI))
	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 (_LiquidState *LiquidStateRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _LiquidState.Contract.LiquidStateCaller.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 (_LiquidState *LiquidStateRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidState.Contract.LiquidStateTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_LiquidState *LiquidStateRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _LiquidState.Contract.LiquidStateTransactor.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 (_LiquidState *LiquidStateCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _LiquidState.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 (_LiquidState *LiquidStateTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidState.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_LiquidState *LiquidStateTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _LiquidState.Contract.contract.Transact(opts, method, params...)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_LiquidState *LiquidStateTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) {
	return _LiquidState.contract.RawTransact(opts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_LiquidState *LiquidStateSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _LiquidState.Contract.Fallback(&_LiquidState.TransactOpts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_LiquidState *LiquidStateTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _LiquidState.Contract.Fallback(&_LiquidState.TransactOpts, calldata)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_LiquidState *LiquidStateTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidState.contract.RawTransact(opts, nil) // calldata is disallowed for receive function
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_LiquidState *LiquidStateSession) Receive() (*types.Transaction, error) {
	return _LiquidState.Contract.Receive(&_LiquidState.TransactOpts)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_LiquidState *LiquidStateTransactorSession) Receive() (*types.Transaction, error) {
	return _LiquidState.Contract.Receive(&_LiquidState.TransactOpts)
}

// LiquidStateTestMetaData contains all meta data concerning the LiquidStateTest contract.
var LiquidStateTestMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"},{\"internalType\":\"addresspayable\",\"name\":\"_treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_index\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_liquidLogicAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"liquidLogicContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
	Sigs: map[string]string{
		"96f18a32": "liquidLogicContract()",
	},
	Bin: "0x608060405234801561001057600080fd5b5060405161063b38038061063b83398101604081905261002f916101b9565b8484848484806001600160a01b031663f5be34896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610072573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061009691906102ae565b8311156100a257600080fd5b600b80546001600160a01b038088166001600160a01b031992831617909255600c805492871692909116919091179055600d8390556040516100e89083906020016102c7565b60405160208183030381529060405260099081610105919061037d565b508160405160200161011791906102c7565b604051602081830303815290604052600a9081610134919061037d565b5050600f80546001600160a01b031916331790555061043b975050505050505050565b6001600160a01b038116811461016c57600080fd5b50565b805161017a81610157565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b0578181015183820152602001610198565b50506000910152565b600080600080600060a086880312156101d157600080fd5b85516101dc81610157565b60208701519095506101ed81610157565b6040870151606088015191955093506001600160401b0381111561021057600080fd5b8601601f8101881361022157600080fd5b80516001600160401b0381111561023a5761023a61017f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102685761026861017f565b6040528181528282016020018a101561028057600080fd5b610291826020830160208601610195565b93506102a29150506080870161016f565b90509295509295909350565b6000602082840312156102c057600080fd5b5051919050565b644c4e544e2d60d81b8152600082516102e7816005850160208701610195565b9190910160050192915050565b600181811c9082168061030857607f821691505b60208210810361032857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561037857806000526020600020601f840160051c810160208510156103555750805b601f840160051c820191505b818110156103755760008155600101610361565b50505b505050565b81516001600160401b038111156103965761039661017f565b6103aa816103a484546102f4565b8461032e565b6020601f8211600181146103de57600083156103c65750848201515b600019600385901b1c1916600184901b178455610375565b600084815260208120601f198516915b8281101561040e57878501518255602094850194600190920191016103ee565b508482101561042c5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6101f18061044a6000396000f3fe6080604052600436106100225760003560e01c806396f18a321461004d57610042565b366100425761004061003261007e565b6001600160a01b0316610159565b005b61004061003261007e565b34801561005957600080fd5b5061006261017c565b6040516001600160a01b03909116815260200160405180910390f35b600080600f60009054906101000a90046001600160a01b03166001600160a01b0316634c1f1c776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100f8919061018b565b90506001600160a01b0381166101545760405162461bcd60e51b815260206004820152601d60248201527f6c6971756964206c6f67696320636f6e7472616374206e6f7420736574000000604482015260640160405180910390fd5b919050565b3660008037600080366000845af43d6000803e80610176573d6000fd5b503d6000f35b600061018661007e565b905090565b60006020828403121561019d57600080fd5b81516001600160a01b03811681146101b457600080fd5b939250505056fea26469706673582212203d96ab4939c8fc903be00abee87e33122ca384b3b2756cf9a59022f3955d16c664736f6c634300081e0033",
}

// LiquidStateTestABI is the input ABI used to generate the binding from.
// Deprecated: Use LiquidStateTestMetaData.ABI instead.
var LiquidStateTestABI = LiquidStateTestMetaData.ABI

// Deprecated: Use LiquidStateTestMetaData.Sigs instead.
// LiquidStateTestFuncSigs maps the 4-byte function signature to its string representation.
var LiquidStateTestFuncSigs = LiquidStateTestMetaData.Sigs

// LiquidStateTestBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use LiquidStateTestMetaData.Bin instead.
var LiquidStateTestBin = LiquidStateTestMetaData.Bin

// DeployLiquidStateTest deploys a new Ethereum contract, binding an instance of LiquidStateTest to it.
func DeployLiquidStateTest(auth *bind.TransactOpts, backend bind.ContractBackend, _validator common.Address, _treasury common.Address, _commissionRate *big.Int, _index string, _liquidLogicAddress common.Address) (common.Address, *types.Transaction, *LiquidStateTest, error) {
	parsed, err := LiquidStateTestMetaData.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(LiquidStateTestBin), backend, _validator, _treasury, _commissionRate, _index, _liquidLogicAddress)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &LiquidStateTest{LiquidStateTestCaller: LiquidStateTestCaller{contract: contract}, LiquidStateTestTransactor: LiquidStateTestTransactor{contract: contract}, LiquidStateTestFilterer: LiquidStateTestFilterer{contract: contract}}, nil
}

// LiquidStateTest is an auto generated Go binding around an Ethereum contract.
type LiquidStateTest struct {
	LiquidStateTestCaller     // Read-only binding to the contract
	LiquidStateTestTransactor // Write-only binding to the contract
	LiquidStateTestFilterer   // Log filterer for contract events
}

// LiquidStateTestCaller is an auto generated read-only Go binding around an Ethereum contract.
type LiquidStateTestCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidStateTestTransactor is an auto generated write-only Go binding around an Ethereum contract.
type LiquidStateTestTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidStateTestFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type LiquidStateTestFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidStateTestSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type LiquidStateTestSession struct {
	Contract     *LiquidStateTest  // 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
}

// LiquidStateTestCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type LiquidStateTestCallerSession struct {
	Contract *LiquidStateTestCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts          // Call options to use throughout this session
}

// LiquidStateTestTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type LiquidStateTestTransactorSession struct {
	Contract     *LiquidStateTestTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts          // Transaction auth options to use throughout this session
}

// LiquidStateTestRaw is an auto generated low-level Go binding around an Ethereum contract.
type LiquidStateTestRaw struct {
	Contract *LiquidStateTest // Generic contract binding to access the raw methods on
}

// LiquidStateTestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type LiquidStateTestCallerRaw struct {
	Contract *LiquidStateTestCaller // Generic read-only contract binding to access the raw methods on
}

// LiquidStateTestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type LiquidStateTestTransactorRaw struct {
	Contract *LiquidStateTestTransactor // Generic write-only contract binding to access the raw methods on
}

// NewLiquidStateTest creates a new instance of LiquidStateTest, bound to a specific deployed contract.
func NewLiquidStateTest(address common.Address, backend bind.ContractBackend) (*LiquidStateTest, error) {
	contract, err := bindLiquidStateTest(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &LiquidStateTest{LiquidStateTestCaller: LiquidStateTestCaller{contract: contract}, LiquidStateTestTransactor: LiquidStateTestTransactor{contract: contract}, LiquidStateTestFilterer: LiquidStateTestFilterer{contract: contract}}, nil
}

// NewLiquidStateTestCaller creates a new read-only instance of LiquidStateTest, bound to a specific deployed contract.
func NewLiquidStateTestCaller(address common.Address, caller bind.ContractCaller) (*LiquidStateTestCaller, error) {
	contract, err := bindLiquidStateTest(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &LiquidStateTestCaller{contract: contract}, nil
}

// NewLiquidStateTestTransactor creates a new write-only instance of LiquidStateTest, bound to a specific deployed contract.
func NewLiquidStateTestTransactor(address common.Address, transactor bind.ContractTransactor) (*LiquidStateTestTransactor, error) {
	contract, err := bindLiquidStateTest(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &LiquidStateTestTransactor{contract: contract}, nil
}

// NewLiquidStateTestFilterer creates a new log filterer instance of LiquidStateTest, bound to a specific deployed contract.
func NewLiquidStateTestFilterer(address common.Address, filterer bind.ContractFilterer) (*LiquidStateTestFilterer, error) {
	contract, err := bindLiquidStateTest(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &LiquidStateTestFilterer{contract: contract}, nil
}

// bindLiquidStateTest binds a generic wrapper to an already deployed contract.
func bindLiquidStateTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(LiquidStateTestABI))
	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 (_LiquidStateTest *LiquidStateTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _LiquidStateTest.Contract.LiquidStateTestCaller.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 (_LiquidStateTest *LiquidStateTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidStateTest.Contract.LiquidStateTestTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_LiquidStateTest *LiquidStateTestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _LiquidStateTest.Contract.LiquidStateTestTransactor.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 (_LiquidStateTest *LiquidStateTestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _LiquidStateTest.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 (_LiquidStateTest *LiquidStateTestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidStateTest.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_LiquidStateTest *LiquidStateTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _LiquidStateTest.Contract.contract.Transact(opts, method, params...)
}

// LiquidLogicContract is a free data retrieval call binding the contract method 0x96f18a32.
//
// Solidity: function liquidLogicContract() view returns(address)
func (_LiquidStateTest *LiquidStateTestCaller) LiquidLogicContract(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _LiquidStateTest.contract.Call(opts, &out, "liquidLogicContract")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// LiquidLogicContract is a free data retrieval call binding the contract method 0x96f18a32.
//
// Solidity: function liquidLogicContract() view returns(address)
func (_LiquidStateTest *LiquidStateTestSession) LiquidLogicContract() (common.Address, error) {
	return _LiquidStateTest.Contract.LiquidLogicContract(&_LiquidStateTest.CallOpts)
}

// LiquidLogicContract is a free data retrieval call binding the contract method 0x96f18a32.
//
// Solidity: function liquidLogicContract() view returns(address)
func (_LiquidStateTest *LiquidStateTestCallerSession) LiquidLogicContract() (common.Address, error) {
	return _LiquidStateTest.Contract.LiquidLogicContract(&_LiquidStateTest.CallOpts)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_LiquidStateTest *LiquidStateTestTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) {
	return _LiquidStateTest.contract.RawTransact(opts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_LiquidStateTest *LiquidStateTestSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _LiquidStateTest.Contract.Fallback(&_LiquidStateTest.TransactOpts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_LiquidStateTest *LiquidStateTestTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _LiquidStateTest.Contract.Fallback(&_LiquidStateTest.TransactOpts, calldata)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_LiquidStateTest *LiquidStateTestTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidStateTest.contract.RawTransact(opts, nil) // calldata is disallowed for receive function
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_LiquidStateTest *LiquidStateTestSession) Receive() (*types.Transaction, error) {
	return _LiquidStateTest.Contract.Receive(&_LiquidStateTest.TransactOpts)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_LiquidStateTest *LiquidStateTestTransactorSession) Receive() (*types.Transaction, error) {
	return _LiquidStateTest.Contract.Receive(&_LiquidStateTest.TransactOpts)
}

// LiquidStorageMetaData contains all meta data concerning the LiquidStorage contract.
var LiquidStorageMetaData = &bind.MetaData{
	ABI: "[]",
	Bin: "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea264697066735822122074790b3422bf2ec139a43bc1b03d6939a5c4e5a9f3e54e34284f0f7f7baab28164736f6c634300081e0033",
}

// LiquidStorageABI is the input ABI used to generate the binding from.
// Deprecated: Use LiquidStorageMetaData.ABI instead.
var LiquidStorageABI = LiquidStorageMetaData.ABI

// LiquidStorageBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use LiquidStorageMetaData.Bin instead.
var LiquidStorageBin = LiquidStorageMetaData.Bin

// DeployLiquidStorage deploys a new Ethereum contract, binding an instance of LiquidStorage to it.
func DeployLiquidStorage(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *LiquidStorage, error) {
	parsed, err := LiquidStorageMetaData.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(LiquidStorageBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &LiquidStorage{LiquidStorageCaller: LiquidStorageCaller{contract: contract}, LiquidStorageTransactor: LiquidStorageTransactor{contract: contract}, LiquidStorageFilterer: LiquidStorageFilterer{contract: contract}}, nil
}

// LiquidStorage is an auto generated Go binding around an Ethereum contract.
type LiquidStorage struct {
	LiquidStorageCaller     // Read-only binding to the contract
	LiquidStorageTransactor // Write-only binding to the contract
	LiquidStorageFilterer   // Log filterer for contract events
}

// LiquidStorageCaller is an auto generated read-only Go binding around an Ethereum contract.
type LiquidStorageCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidStorageTransactor is an auto generated write-only Go binding around an Ethereum contract.
type LiquidStorageTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type LiquidStorageFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LiquidStorageSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type LiquidStorageSession struct {
	Contract     *LiquidStorage    // 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
}

// LiquidStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type LiquidStorageCallerSession struct {
	Contract *LiquidStorageCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts        // Call options to use throughout this session
}

// LiquidStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type LiquidStorageTransactorSession struct {
	Contract     *LiquidStorageTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts        // Transaction auth options to use throughout this session
}

// LiquidStorageRaw is an auto generated low-level Go binding around an Ethereum contract.
type LiquidStorageRaw struct {
	Contract *LiquidStorage // Generic contract binding to access the raw methods on
}

// LiquidStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type LiquidStorageCallerRaw struct {
	Contract *LiquidStorageCaller // Generic read-only contract binding to access the raw methods on
}

// LiquidStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type LiquidStorageTransactorRaw struct {
	Contract *LiquidStorageTransactor // Generic write-only contract binding to access the raw methods on
}

// NewLiquidStorage creates a new instance of LiquidStorage, bound to a specific deployed contract.
func NewLiquidStorage(address common.Address, backend bind.ContractBackend) (*LiquidStorage, error) {
	contract, err := bindLiquidStorage(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &LiquidStorage{LiquidStorageCaller: LiquidStorageCaller{contract: contract}, LiquidStorageTransactor: LiquidStorageTransactor{contract: contract}, LiquidStorageFilterer: LiquidStorageFilterer{contract: contract}}, nil
}

// NewLiquidStorageCaller creates a new read-only instance of LiquidStorage, bound to a specific deployed contract.
func NewLiquidStorageCaller(address common.Address, caller bind.ContractCaller) (*LiquidStorageCaller, error) {
	contract, err := bindLiquidStorage(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &LiquidStorageCaller{contract: contract}, nil
}

// NewLiquidStorageTransactor creates a new write-only instance of LiquidStorage, bound to a specific deployed contract.
func NewLiquidStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*LiquidStorageTransactor, error) {
	contract, err := bindLiquidStorage(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &LiquidStorageTransactor{contract: contract}, nil
}

// NewLiquidStorageFilterer creates a new log filterer instance of LiquidStorage, bound to a specific deployed contract.
func NewLiquidStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*LiquidStorageFilterer, error) {
	contract, err := bindLiquidStorage(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &LiquidStorageFilterer{contract: contract}, nil
}

// bindLiquidStorage binds a generic wrapper to an already deployed contract.
func bindLiquidStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(LiquidStorageABI))
	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 (_LiquidStorage *LiquidStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _LiquidStorage.Contract.LiquidStorageCaller.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 (_LiquidStorage *LiquidStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidStorage.Contract.LiquidStorageTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_LiquidStorage *LiquidStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _LiquidStorage.Contract.LiquidStorageTransactor.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 (_LiquidStorage *LiquidStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _LiquidStorage.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 (_LiquidStorage *LiquidStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _LiquidStorage.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_LiquidStorage *LiquidStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _LiquidStorage.Contract.contract.Transact(opts, method, params...)
}

// OmissionAccountabilityMetaData contains all meta data concerning the OmissionAccountability contract.
var OmissionAccountabilityMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"_autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"inactivityThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lookbackWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pastPerformanceWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialJailingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialProbationPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialSlashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"}],\"internalType\":\"structOmissionAccountability.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"}],\"name\":\"InactivityJailingEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"releaseBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isJailbound\",\"type\":\"bool\"}],\"name\":\"InactivitySlashingEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnReward\",\"type\":\"uint256\"}],\"name\":\"TotalProposerRewards\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SCALE_FACTOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ntnReward\",\"type\":\"uint256\"}],\"name\":\"distributeProposerRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_epochEnded\",\"type\":\"bool\"}],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAbsenteesLastHeight\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"inactivityThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lookbackWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pastPerformanceWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialJailingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialProbationPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialSlashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"}],\"internalType\":\"structOmissionAccountability.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelta\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epochID\",\"type\":\"uint256\"}],\"name\":\"getEpochCollusionDegree\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochCollusionDegreeLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"}],\"name\":\"getFaultyProposers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFaultyProposersInWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"getInactiveValidators\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"getInactivityCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"getInactivityScore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"getLastActive\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLookbackWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"getProbationPeriods\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"}],\"name\":\"getProposerEffort\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validator\",\"type\":\"address\"}],\"name\":\"getRepeatedOffences\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScaleFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalEffort\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votingPower\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"}],\"internalType\":\"structIAutonity.CommitteeMember[]\",\"name\":\"_committee\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"_treasuries\",\"type\":\"address[]\"}],\"name\":\"setCommittee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delta\",\"type\":\"uint256\"}],\"name\":\"setDelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epochBlock\",\"type\":\"uint256\"}],\"name\":\"setEpochBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_inactivityThreshold\",\"type\":\"uint256\"}],\"name\":\"setInactivityThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialJailingPeriod\",\"type\":\"uint256\"}],\"name\":\"setInitialJailingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialProbationPeriod\",\"type\":\"uint256\"}],\"name\":\"setInitialProbationPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialSlashingRate\",\"type\":\"uint256\"}],\"name\":\"setInitialSlashingRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_lookbackWindow\",\"type\":\"uint256\"}],\"name\":\"setLookbackWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pastPerformanceWeight\",\"type\":\"uint256\"}],\"name\":\"setPastPerformanceWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"ce4b5bbe": "SCALE_FACTOR()",
		"eeb92233": "distributeProposerRewards(uint256)",
		"6c9789b0": "finalize(bool)",
		"2b938932": "getAbsenteesLastHeight()",
		"c3f909d4": "getConfig()",
		"c549176e": "getDelta()",
		"7cc3e838": "getEpochCollusionDegree(uint256)",
		"73a25c59": "getEpochCollusionDegreeLength()",
		"fe6297af": "getFaultyProposers(uint256)",
		"54ff7481": "getFaultyProposersInWindow()",
		"172f4282": "getInactiveValidators(uint256,address)",
		"87ca6af1": "getInactivityCounter(address)",
		"9a11e0e6": "getInactivityScore(address)",
		"606ab752": "getLastActive(address)",
		"5ca1809c": "getLookbackWindow()",
		"0f2ff49a": "getProbationPeriods(address)",
		"5977fc63": "getProposerEffort(address)",
		"8d5de42f": "getRepeatedOffences(address)",
		"7f5e2f11": "getScaleFactor()",
		"53b1821b": "getTotalEffort()",
		"e3deef9c": "setCommittee((address,uint256,bytes)[],address[])",
		"025ff0a5": "setDelta(uint256)",
		"c024cc2c": "setEpochBlock(uint256)",
		"d7eaef49": "setInactivityThreshold(uint256)",
		"482893c7": "setInitialJailingPeriod(uint256)",
		"7e716823": "setInitialProbationPeriod(uint256)",
		"48fa7127": "setInitialSlashingRate(uint256)",
		"8bbde7e5": "setLookbackWindow(uint256)",
		"b3ab15fb": "setOperator(address)",
		"f85cffe2": "setPastPerformanceWeight(uint256)",
	},
	Bin: "0x608060405234801561001057600080fd5b50604051613d2e380380613d2e83398101604081905261002f916105ed565b8051612710101561009f5760405162461bcd60e51b815260206004820152602f60248201527f696e6163746976697479207468726573686f6c642063616e6e6f74206578636560448201526e32b21039b1b0b632903330b1ba37b960891b60648201526084015b60405180910390fd5b612710816040015111156101105760405162461bcd60e51b815260206004820152603260248201527f7061737420706572666f726d616e6365207765696768742063616e6e6f7420656044820152713c31b2b2b21039b1b0b632903330b1ba37b960711b6064820152608401610096565b61011c6004600a610795565b8160a0015111156101955760405162461bcd60e51b815260206004820152603e60248201527f696e697469616c20736c617368696e6720726174652063616e6e6f742065786360448201527f65656420736c617368696e672072617465207363616c6520666163746f7200006064820152608401610096565b601a80546001600160a01b0319166001600160a01b0385169081179091556040805163a9fd1a8f60e01b815290516000929163a9fd1a8f91600480830192869291908290030181865afa1580156101f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610218919081019061089b565b90508160c001518160800151146102bd5760405162461bcd60e51b815260206004820152605360248201527f6d69736d61746368206265747765656e2064656c74612073746f72656420696e60448201527f204175746f6e69747920636f6e747261637420616e6420746865206f6e65206960648201527f6e204f6d697373696f6e20636f6e747261637400000000000000000000000000608482015260a401610096565b600680546001600160a01b0319166001600160a01b0385161790558151601355602082015160145560408201516015556060820151601655608082015160175560a082015160185560c082015160195560005b8151518110156104da5760018260000151828151811061033257610332610a2f565b602090810291909101810151825460018082018555600094855293839020825160039092020180546001600160a01b0319166001600160a01b039092169190911781559181015192820192909255604082015160028201906103949082610ace565b505050600019600b6000600184815481106103b1576103b1610a2f565b600091825260208083206003909202909101546001600160a01b039081168452908301939093526040909101812092909255601a54845180519190921691631904bb2e918590811061040557610405610a2f565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381865afa158015610455573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047d9190810190610b9b565b5160028054600180820183556000929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0390931692909217909155919091019050610310565b5050601454600455505060195460055550610d1e565b6001600160a01b038116811461050557600080fd5b50565b8051610513816104f0565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561055057610550610518565b60405290565b60405160c081016001600160401b038111828210171561055057610550610518565b604051606081016001600160401b038111828210171561055057610550610518565b60405161028081016001600160401b038111828210171561055057610550610518565b604051601f8201601f191681016001600160401b03811182821017156105e5576105e5610518565b604052919050565b600080600083850361012081121561060457600080fd5b845161060f816104f0565b6020860151909450610620816104f0565b925060e0603f198201121561063457600080fd5b5061063d61052e565b604085810151825260608087015160208401526080808801519284019290925260a0808801519184019190915260c0808801519284019290925260e0870151908301526101009095015194810194909452509093909250565b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156106e7578085048111156106cb576106cb610696565b60018416156106d957908102905b60019390931c9280026106b0565b935093915050565b6000826106fe5750600161078f565b8161070b5750600061078f565b8160018114610721576002811461072b57610747565b600191505061078f565b60ff84111561073c5761073c610696565b50506001821b61078f565b5060208310610133831016604e8410600b841016171561076a575081810a61078f565b61077760001984846106ac565b806000190482111561078b5761078b610696565b0290505b92915050565b60006107a183836106ef565b9392505050565b600082601f8301126107b957600080fd5b8151602083016000806001600160401b038411156107d9576107d9610518565b50601f8301601f19166020016107ee816105bd565b91505082815285838301111561080357600080fd5b60005b83811015610824578083015160208284010152602081019050610806565b50600092810160200192909252509392505050565b60006080828403121561084b57600080fd5b604051608081016001600160401b038111828210171561086d5761086d610518565b6040908152835182526020808501519083015283810151908201526060928301519281019290925250919050565b6000602082840312156108ad57600080fd5b81516001600160401b038111156108c357600080fd5b820161012081850312156108d657600080fd5b6108de610556565b81516001600160401b038111156108f457600080fd5b8201601f8101861361090557600080fd5b80516001600160401b0381111561091e5761091e610518565b8060051b61092e602082016105bd565b9182526020818401810192908101908984111561094a57600080fd5b6020850192505b838310156109e75782516001600160401b0381111561096f57600080fd5b85016060818c03601f1901121561098557600080fd5b61098d610578565b602082015161099b816104f0565b81526040820151602082015260608201516001600160401b038111156109c057600080fd5b6109cf8d6020838601016107a8565b60408301525083525060209283019290910190610951565b85525050505060208281015190820152604080830151908201526060808301519082015260808083015190820152610a228560a08401610839565b60a0820152949350505050565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680610a5957607f821691505b602082108103610a7957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610ac957806000526020600020601f840160051c81016020851015610aa65750805b601f840160051c820191505b81811015610ac65760008155600101610ab2565b50505b505050565b81516001600160401b03811115610ae757610ae7610518565b610afb81610af58454610a45565b84610a7f565b6020601f821160018114610b2f5760008315610b175750848201515b600019600385901b1c1916600184901b178455610ac6565b600084815260208120601f198516915b82811015610b5f5787850151825560209485019460019092019101610b3f565b5084821015610b7d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b80516006811061051357600080fd5b600060208284031215610bad57600080fd5b81516001600160401b03811115610bc357600080fd5b82016102808185031215610bd657600080fd5b610bde61059a565b610be782610508565b8152610bf560208301610508565b6020820152610c0660408301610508565b604082015260608201516001600160401b03811115610c2457600080fd5b610c30868285016107a8565b6060830152506080828101519082015260a0808301519082015260c0808301519082015260e080830151908201526101008083015190820152610120808301519082015261014080830151908201526101608083015190820152610c976101808301610508565b6101808201526101a082810151908201526101c080830151908201526101e0808301519082015261020080830151908201526102208201516001600160401b03811115610ce357600080fd5b610cef868285016107a8565b61022083015250610d036102408301610b8c565b61024082015261026091820151918101919091529392505050565b61300180610d2d6000396000f3fe6080604052600436106101cd5760003560e01c80637f5e2f11116100f7578063c3f909d411610095578063e3deef9c11610064578063e3deef9c14610538578063eeb9223314610558578063f85cffe21461056b578063fe6297af1461058b57600080fd5b8063c3f909d414610482578063c549176e146104ed578063ce4b5bbe14610502578063d7eaef491461051857600080fd5b80638d5de42f116100d15780638d5de42f146104025780639a11e0e614610422578063b3ab15fb14610442578063c024cc2c1461046257600080fd5b80637f5e2f11146103ad57806387ca6af1146103c25780638bbde7e5146103e257600080fd5b806354ff74811161016f5780636c9789b01161013e5780636c9789b01461033857806373a25c59146103585780637cc3e8381461036d5780637e7168231461038d57600080fd5b806354ff7481146102ce5780635977fc63146102e35780635ca1809c14610303578063606ab7521461031857600080fd5b80632b938932116101ab5780632b93893214610257578063482893c71461027957806348fa71271461029957806353b1821b146102b957600080fd5b8063025ff0a5146101d25780630f2ff49a146101f4578063172f428214610227575b600080fd5b3480156101de57600080fd5b506101f26101ed36600461257a565b6105ab565b005b34801561020057600080fd5b5061021461020f3660046125a8565b6107ad565b6040519081526020015b60405180910390f35b34801561023357600080fd5b506102476102423660046125cc565b6107f0565b604051901515815260200161021e565b34801561026357600080fd5b5061026c610841565b60405161021e91906125fc565b34801561028557600080fd5b506101f261029436600461257a565b6108cc565b3480156102a557600080fd5b506101f26102b436600461257a565b610958565b3480156102c557600080fd5b50610214610a4f565b3480156102da57600080fd5b50610214610a79565b3480156102ef57600080fd5b506102146102fe3660046125a8565b610aa3565b34801561030f57600080fd5b50600454610214565b34801561032457600080fd5b506102146103333660046125a8565b610ae2565b34801561034457600080fd5b50610214610353366004612656565b610b21565b34801561036457600080fd5b50610214610dd7565b34801561037957600080fd5b5061021461038836600461257a565b610e01565b34801561039957600080fd5b506101f26103a836600461257a565b610e49565b3480156103b957600080fd5b50612710610214565b3480156103ce57600080fd5b506102146103dd3660046125a8565b610ed7565b3480156103ee57600080fd5b506101f26103fd36600461257a565b610f16565b34801561040e57600080fd5b5061021461041d3660046125a8565b611118565b34801561042e57600080fd5b5061021461043d3660046125a8565b611157565b34801561044e57600080fd5b506101f261045d3660046125a8565b611196565b34801561046e57600080fd5b506101f261047d36600461257a565b6111e2565b34801561048e57600080fd5b50610497611211565b60405161021e9190600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b3480156104f957600080fd5b50600554610214565b34801561050e57600080fd5b5061021461271081565b34801561052457600080fd5b506101f261053336600461257a565b6112b8565b34801561054457600080fd5b506101f261055336600461277d565b611420565b6101f261056636600461257a565b611540565b34801561057757600080fd5b506101f261058636600461257a565b6118a5565b34801561059757600080fd5b506102476105a636600461257a565b6119ff565b6006546001600160a01b031633146105de5760405162461bcd60e51b81526004016105d59061291f565b60405180910390fd5b600281101561062f5760405162461bcd60e51b815260206004820152601c60248201527f64656c7461206e6565647320746f206265206174206c6561737420320000000060448201526064016105d5565b601a5460408051636fd8d26960e11b815290516000926001600160a01b03169163dfb1a4d29160048083019260209291908290030181865afa158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d919061294f565b90506001600454836106af919061297e565b6106b99190612991565b81116106d75760405162461bcd60e51b81526004016105d5906129a4565b601a5460408051630aac2da160e01b815290516000926001600160a01b031691630aac2da19160048083019260209291908290030181865afa158015610721573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610745919061294f565b9050600080516020612fac833981519152601360060154848360035461076b919061297e565b6040805160808082526005908201526464656c746160d81b60a08201526020810194909452830191909152606082015260c00160405180910390a15050600555565b600080546001036107d05760405162461bcd60e51b81526004016105d590612a01565b506001600160a01b0381166000908152601060205260409020545b919050565b600080546001036108135760405162461bcd60e51b81526004016105d590612a01565b5060008281526009602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b606061084f60005460011490565b1561086c5760405162461bcd60e51b81526004016105d590612a01565b600a8054806020026020016040519081016040528092919081815260200182805480156108c257602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108a4575b5050505050905090565b6006546001600160a01b031633146108f65760405162461bcd60e51b81526004016105d59061291f565b601654604080516080808252601490820152731a5b9a5d1a585b12985a5b1a5b99d4195c9a5bd960621b60a082015260208101929092528101829052436060820152600080516020612fac8339815191529060c00160405180910390a1601655565b6006546001600160a01b031633146109825760405162461bcd60e51b81526004016105d59061291f565b61098e6004600a612b1f565b8111156109ee5760405162461bcd60e51b815260206004820152602860248201527f63616e6e6f742065786365656420736c617368696e672072617465207363616c60448201526732903330b1ba37b960c11b60648201526084016105d5565b60185460408051608080825260139082015272696e697469616c536c617368696e675261746560681b60a082015260208101929092528101829052436060820152600080516020612fac8339815191529060c00160405180910390a1601855565b60008054600103610a725760405162461bcd60e51b81526004016105d590612a01565b50600d5490565b60008054600103610a9c5760405162461bcd60e51b81526004016105d590612a01565b5060085490565b60008054600103610ac65760405162461bcd60e51b81526004016105d590612a01565b506001600160a01b03166000908152600e602052604090205490565b60008054600103610b055760405162461bcd60e51b81526004016105d590612a01565b506001600160a01b03166000908152600b602052604090205490565b6000610b2b611a38565b601a546001600160a01b03163314610b555760405162461bcd60e51b81526004016105d590612b2b565b601954600354600091610b679161297e565b43111590506000600190506000806000610b878560136006015486611a85565b9250925092508415610ba35750506019549350610dce92505050565b601954600090610bb39043612991565b9050600854601360010154600354610bcb919061297e565b610bd5919061297e565b8110610c48575b6000600854118015610c295750600854601454600791600091610bff9085612991565b610c099190612991565b610c1490600161297e565b815260208101919091526040016000205460ff165b15610c485760088054906000610c3e83612b77565b9190505550610bdc565b8315610c9f576000818152600760209081526040808320805460ff19166001179055418352600c9091528120805491610c8083612b8e565b909155505060088054906000610c9583612b8e565b9190505550610cfb565b6000818152600760209081526040808320805460ff19169055418352600e90915281208054859290610cd290849061297e565b9250508190555082600d6000828254610ceb919061297e565b90915550610cfb90508282611b51565b8715610dc2576000610d0b611dd4565b9050610d1681611fd1565b60005b600154811015610d6e576000600c600060018481548110610d3c57610d3c612ba7565b600091825260208083206003909202909101546001600160a01b03168352820192909252604001902055600101610d19565b5060006008819055610d8290600a90612452565b601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344401556004546014556005546019555b50506019549450505050505b6107eb60008055565b60008054600103610dfa5760405162461bcd60e51b81526004016105d590612a01565b5060125490565b60008054600103610e245760405162461bcd60e51b81526004016105d590612a01565b60128281548110610e3757610e37612ba7565b90600052602060002001549050919050565b6006546001600160a01b03163314610e735760405162461bcd60e51b81526004016105d59061291f565b601754604080516080808252601690820152751a5b9a5d1a585b141c9bd8985d1a5bdb94195c9a5bd960521b60a082015260208101929092528101829052436060820152600080516020612fac8339815191529060c00160405180910390a1601755565b60008054600103610efa5760405162461bcd60e51b81526004016105d590612a01565b506001600160a01b03166000908152600c602052604090205490565b6006546001600160a01b03163314610f405760405162461bcd60e51b81526004016105d59061291f565b6001811015610f915760405162461bcd60e51b815260206004820152601a60248201527f6c6f6f6b6261636b57696e646f772063616e6e6f74206265203000000000000060448201526064016105d5565b601a5460408051636fd8d26960e11b815290516000926001600160a01b03169163dfb1a4d29160048083019260209291908290030181865afa158015610fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fff919061294f565b9050600182600554611011919061297e565b61101b9190612991565b81116110395760405162461bcd60e51b81526004016105d5906129a4565b601a5460408051630aac2da160e01b815290516000926001600160a01b031691630aac2da19160048083019260209291908290030181865afa158015611083573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a7919061294f565b9050600080516020612fac83398151915260136001015484836003546110cd919061297e565b604080516080808252600e908201526d6c6f6f6b6261636b57696e646f7760901b60a08201526020810194909452830191909152606082015260c00160405180910390a15050600455565b6000805460010361113b5760405162461bcd60e51b81526004016105d590612a01565b506001600160a01b031660009081526011602052604090205490565b6000805460010361117a5760405162461bcd60e51b81526004016105d590612a01565b506001600160a01b03166000908152600f602052604090205490565b601a546001600160a01b031633146111c05760405162461bcd60e51b81526004016105d590612b2b565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b601a546001600160a01b0316331461120c5760405162461bcd60e51b81526004016105d590612b2b565b600355565b6112516040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000546001036112735760405162461bcd60e51b81526004016105d590612a01565b506040805160e08101825260135481526014546020820152601554918101919091526016546060820152601754608082015260185460a082015260195460c082015290565b6006546001600160a01b031633146112e25760405162461bcd60e51b81526004016105d59061291f565b6127108111156113345760405162461bcd60e51b815260206004820152601a60248201527f63616e6e6f7420657863656564207363616c6520666163746f7200000000000060448201526064016105d5565b6015548110156113be5760405162461bcd60e51b815260206004820152604960248201527f696e61637469766974795468726573686f6c64206e6565647320746f2062652060448201527f67726561746572206f7220657175616c20746f2070617374506572666f726d616064820152681b98d955d95a59da1d60ba1b608482015260a4016105d5565b60138054604080516080808252810193909352721a5b9858dd1a5d9a5d1e551a1c995cda1bdb19606a1b60a084015260208301919091528101829052436060820152600080516020612fac8339815191529060c00160405180910390a1601355565b601a546001600160a01b0316331461144a5760405162461bcd60e51b81526004016105d590612b2b565b61145660016000612470565b60005b825181101561152757600183828151811061147657611476612ba7565b602090810291909101810151825460018082018555600094855293839020825160039092020180546001600160a01b0319166001600160a01b039092169190911781559181015192820192909255604082015160028201906114d89082612c45565b505050600019600b6000600184815481106114f5576114f5612ba7565b600091825260208083206003909202909101546001600160a01b03168352820192909252604001902055600101611459565b50805161153b906002906020840190612491565b505050565b611548611a38565b601a546001600160a01b031633146115725760405162461bcd60e51b81526004016105d590612b2b565b4760005b6001548110156118595760006001828154811061159557611595612ba7565b600091825260208083206003909202909101546001600160a01b0316808352600e9091526040909120549091501561185057600d546001600160a01b0382166000908152600e60205260408120549091906115f1908690612d04565b6115fb9190612d1b565b600d546001600160a01b0384166000908152600e602052604081205492935091611626908890612d04565b6116309190612d1b565b905081156117c05760006002858154811061164d5761164d612ba7565b60009182526020822001546040516001600160a01b03909116916108fc918691818181858888f193505050503d80600081146116a5576040519150601f19603f3d011682016040523d82523d6000602084013e6116aa565b606091505b50509050806117be57601a546040805163f7866ee360e01b815290516000926001600160a01b03169163f7866ee39160048083019260209291908290030181865afa1580156116fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117219190612d3d565b9050600080826001600160a01b03168660405160006040518083038185875af1925050503d8060008114611771576040519150601f19603f3d011682016040523d82523d6000602084013e611776565b606091505b5091509150816117ba577f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d35283826040516117b1929190612d5a565b60405180910390a15b5050505b505b801561183457601a54604051630f7fcc5160e41b81526001600160a01b03858116600483015260248201849052600060448301529091169063f7fcc51090606401600060405180830381600087803b15801561181b57600080fd5b505af115801561182f573d6000803e3d6000fd5b505050505b50506001600160a01b0381166000908152600e60205260408120555b50600101611576565b5060408051838152602081018390527f9a3523e1fe0b3bf0d1084f46d56b3bfe5958389cacfe987a60fac8561dd66095910160405180910390a1506000600d556118a260008055565b50565b6006546001600160a01b031633146118cf5760405162461bcd60e51b81526004016105d59061291f565b6127108111156119215760405162461bcd60e51b815260206004820152601a60248201527f63616e6e6f7420657863656564207363616c6520666163746f7200000000000060448201526064016105d5565b60135481111561199b576040805162461bcd60e51b81526020600482015260248101919091527f70617374506572666f726d616e63655765696768742063616e6e6f742062652060448201527f67726561746572207468616e20696e61637469766974795468726573686f6c6460648201526084016105d5565b60158054604080516080808252810193909352741c185cdd14195c999bdc9b585b98d955d95a59da1d605a1b60a084015260208301919091528101829052436060820152600080516020612fac8339815191529060c00160405180910390a1601555565b60008054600103611a225760405162461bcd60e51b81526004016105d590612a01565b5060009081526007602052604090205460ff1690565b60005415611a7e5760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b60448201526064016105d5565b6001600055565b60405183151560f890811b602083015260218201849052604182018390526000918291606091839060610160405160208183030381529060405290506000806000835160208501865af4611ad857600080fd5b503d60008167ffffffffffffffff811115611af557611af5612673565b6040519080825280601f01601f191660200182016040528015611b1f576020820181803683370190505b509050816000602083013e80806020019051810190611b3e9190612dc5565b9650965096505050505093509350939050565b60005b600a54811015611bdb57611b8f83600a8381548110611b7557611b75612ba7565b6000918252602090912001546001600160a01b03166123f7565b611bd357600019600b6000600a8481548110611bad57611bad612ba7565b60009182526020808320909101546001600160a01b031683528201929092526040019020555b600101611b54565b508151611bef90600a906020850190612491565b5060005b825181101561153b576000828152600960205260408120845160019290869085908110611c2257611c22612ba7565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600b6000848381518110611c7757611c77612ba7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205460001903611cf657611cb3600183612e83565b600b6000858481518110611cc957611cc9612ba7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055505b600854601454600354611d09919061297e565b611d13919061297e565b8210611dcc57600854601454611d29919061297e565b611d339083612991565b600b6000858481518110611d4957611d49612ba7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411611dcc57600c6000848381518110611d8d57611d8d612ba7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000815480929190611dc690612b8e565b91905055505b600101611bf3565b600080601a60009054906101000a90046001600160a01b03166001600160a01b0316630aac2da16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4e919061294f565b601954601454919250600091829190611e679085612991565b611e7290600161297e565b611e7c9190612991565b601554909150600090611e9190612710612991565b905060005b600154811015611fc757600060018281548110611eb557611eb5612ba7565b600091825260208083206003909202909101546001600160a01b0316808352600c909152604090912054909150841015611f05576001600160a01b0381166000908152600c602052604090208490555b6000611f1385612710612d04565b6015546001600160a01b0384166000908152600f60205260409020548791611f3a91612d04565b611f449190612d04565b6001600160a01b0384166000908152600c60205260409020548690611f6c9061271090612d04565b611f769190612d04565b611f80919061297e565b611f8a9190612d1b565b601354909150811115611fa55785611fa181612b8e565b9650505b6001600160a01b039091166000908152600f6020526040902055600101611e96565b5091949350505050565b60005b6001548110156123f357600060018281548110611ff357611ff3612ba7565b6000918252602082206003919091020154601a54604051632dbeb61b60e11b81526001600160a01b03928316600482018190529450911690635b7d6c3690602401602060405180830381865afa158015612051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120759190612eaa565b9050600281600581111561208b5761208b612ecb565b14806120a8575060038160058111156120a6576120a6612ecb565b145b156120b45750506123eb565b6013546001600160a01b0383166000908152600f60205260409020541161215a576001600160a01b03821660009081526010602052604090205415612155576001600160a01b038216600090815260106020526040812080549161211783612b77565b90915550506001600160a01b0382166000908152601060205260408120549003612155576001600160a01b0382166000908152601160205260408120555b6123e8565b6001600160a01b038216600090815260116020526040812080549161217e83612b8e565b90915550506001600160a01b0382166000908152601160205260408120546121a69080612d04565b90506000816013600301546121bb9190612d04565b90506000826013600401546121d09190612d04565b6001600160a01b038616600090815260106020526040902054909150156122f857600087846013600501546122059190612d04565b61220f9190612d04565b601a54604051630915a09160e11b8152919250600091829182916001600160a01b039091169063122b412290612252908c9088908b906004906005908201612f03565b6060604051808303816000875af1158015612271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122959190612f45565b604080516001600160a01b038e16815260208101859052908101839052811515606082015292955090935091507f3cac37f432247a020a7112d5052bc279f35e1e3b80b0aab0eca49d1773ed3e3f9060800160405180910390a1505050506123b7565b601a5460405163154d76d760e01b81526000916001600160a01b03169063154d76d79061232d90899087906004908101612f7f565b6020604051808303816000875af115801561234c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612370919061294f565b604080516001600160a01b0389168152602081018390529192507fb057cb17fba40b7eb122da4822729894f42ef37e5e2b74e6081fd7efe5de4b64910160405180910390a1505b6001600160a01b038516600090815260106020526040812080548392906123df90849061297e565b90915550505050505b50505b600101611fd4565b5050565b6000805b835181101561244857826001600160a01b031684828151811061242057612420612ba7565b60200260200101516001600160a01b03160361244057600191505061083b565b6001016123fb565b5060009392505050565b50805460008255906000526020600020908101906118a291906124f6565b50805460008255600302906000526020600020908101906118a2919061250b565b8280548282559060005260206000209081019282156124e6579160200282015b828111156124e657825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906124b1565b506124f29291506124f6565b5090565b5b808211156124f257600081556001016124f7565b808211156124f25780546001600160a01b03191681556000600182018190556125376002830182612540565b5060030161250b565b50805461254c90612bbd565b6000825580601f1061255c575050565b601f0160209004906000526020600020908101906118a291906124f6565b60006020828403121561258c57600080fd5b5035919050565b6001600160a01b03811681146118a257600080fd5b6000602082840312156125ba57600080fd5b81356125c581612593565b9392505050565b600080604083850312156125df57600080fd5b8235915060208301356125f181612593565b809150509250929050565b602080825282518282018190526000918401906040840190835b8181101561263d5783516001600160a01b0316835260209384019390920191600101612616565b509095945050505050565b80151581146118a257600080fd5b60006020828403121561266857600080fd5b81356125c581612648565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156126ac576126ac612673565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156126db576126db612673565b604052919050565b600067ffffffffffffffff8211156126fd576126fd612673565b5060051b60200190565b600082601f83011261271857600080fd5b813561272b612726826126e3565b6126b2565b8082825260208201915060208360051b86010192508583111561274d57600080fd5b602085015b8381101561277357803561276581612593565b835260209283019201612752565b5095945050505050565b6000806040838503121561279057600080fd5b823567ffffffffffffffff8111156127a757600080fd5b8301601f810185136127b857600080fd5b80356127c6612726826126e3565b8082825260208201915060208360051b8501019250878311156127e857600080fd5b602084015b838110156128e957803567ffffffffffffffff81111561280c57600080fd5b85016060818b03601f1901121561282257600080fd5b61282a612689565b602082013561283881612593565b815260408201356020820152606082013567ffffffffffffffff81111561285e57600080fd5b6020818401019250508a601f83011261287657600080fd5b813567ffffffffffffffff81111561289057612890612673565b6128a3601f8201601f19166020016126b2565b8181528c60208386010111156128b857600080fd5b81602085016020830137600060208383010152806040840152505080855250506020830192506020810190506127ed565b509450505050602083013567ffffffffffffffff81111561290957600080fd5b61291585828601612707565b9150509250929050565b6020808252601690820152753932b9ba3934b1ba32b2103a379037b832b930ba37b960511b604082015260600190565b60006020828403121561296157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561083b5761083b612968565b8181038181111561083b5761083b612968565b6020808252603c908201527f65706f636820706572696f64206e6565647320746f206265206772656174657260408201527f207468616e2064656c74612b6c6f6f6b6261636b57696e646f772d3100000000606082015260800190565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b6001815b6001841115612a7357808504811115612a5757612a57612968565b6001841615612a6557908102905b60019390931c928002612a3c565b935093915050565b600082612a8a5750600161083b565b81612a975750600061083b565b8160018114612aad5760028114612ab757612ad3565b600191505061083b565b60ff841115612ac857612ac8612968565b50506001821b61083b565b5060208310610133831016604e8410600b8410161715612af6575081810a61083b565b612b036000198484612a38565b8060001904821115612b1757612b17612968565b029392505050565b60006125c58383612a7b565b6020808252602c908201527f66756e6374696f6e207265737472696374656420746f20746865204175746f6e60408201526b1a5d1e4810dbdb9d1c9858dd60a21b606082015260800190565b600081612b8657612b86612968565b506000190190565b600060018201612ba057612ba0612968565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680612bd157607f821691505b602082108103612bf157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561153b57806000526020600020601f840160051c81016020851015612c1e5750805b601f840160051c820191505b81811015612c3e5760008155600101612c2a565b5050505050565b815167ffffffffffffffff811115612c5f57612c5f612673565b612c7381612c6d8454612bbd565b84612bf7565b6020601f821160018114612ca75760008315612c8f5750848201515b600019600385901b1c1916600184901b178455612c3e565b600084815260208120601f198516915b82811015612cd75787850151825560209485019460019092019101612cb7565b5084821015612cf55786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b808202811582820484141761083b5761083b612968565b600082612d3857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612d4f57600080fd5b81516125c581612593565b60018060a01b03831681526060602082015260006060820152608060408201526000825180608084015260005b81811015612da457602081860181015160a0868401015201612d87565b50600060a0828501015260a0601f19601f8301168401019150509392505050565b600080600060608486031215612dda57600080fd5b8351612de581612648565b60208501516040860151919450925067ffffffffffffffff811115612e0957600080fd5b8401601f81018613612e1a57600080fd5b8051612e28612726826126e3565b8082825260208201915060208360051b850101925088831115612e4a57600080fd5b6020840193505b82841015612e75578351612e6481612593565b825260209384019390910190612e51565b809450505050509250925092565b8181036000831280158383131683831282161715612ea357612ea3612968565b5092915050565b600060208284031215612ebc57600080fd5b8151600681106125c557600080fd5b634e487b7160e01b600052602160045260246000fd5b60068110612eff57634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b0386168152602081018590526040810184905260a08101612f2e6060830185612ee1565b612f3b6080830184612ee1565b9695505050505050565b600080600060608486031215612f5a57600080fd5b8351602085015160408601519194509250612f7481612648565b809150509250925092565b6001600160a01b03841681526020810183905260608101612fa36040830184612ee1565b94935050505056fe207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1baa264697066735822122058fd913b9500019d08903bb401f59f83865d6e4d8f2f58fcdcfe69b9b13cf93264736f6c634300081e0033",
}

// OmissionAccountabilityABI is the input ABI used to generate the binding from.
// Deprecated: Use OmissionAccountabilityMetaData.ABI instead.
var OmissionAccountabilityABI = OmissionAccountabilityMetaData.ABI

// Deprecated: Use OmissionAccountabilityMetaData.Sigs instead.
// OmissionAccountabilityFuncSigs maps the 4-byte function signature to its string representation.
var OmissionAccountabilityFuncSigs = OmissionAccountabilityMetaData.Sigs

// OmissionAccountabilityBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use OmissionAccountabilityMetaData.Bin instead.
var OmissionAccountabilityBin = OmissionAccountabilityMetaData.Bin

// DeployOmissionAccountability deploys a new Ethereum contract, binding an instance of OmissionAccountability to it.
func DeployOmissionAccountability(auth *bind.TransactOpts, backend bind.ContractBackend, _autonity common.Address, _operator common.Address, _config OmissionAccountabilityConfig) (common.Address, *types.Transaction, *OmissionAccountability, error) {
	parsed, err := OmissionAccountabilityMetaData.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(OmissionAccountabilityBin), backend, _autonity, _operator, _config)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &OmissionAccountability{OmissionAccountabilityCaller: OmissionAccountabilityCaller{contract: contract}, OmissionAccountabilityTransactor: OmissionAccountabilityTransactor{contract: contract}, OmissionAccountabilityFilterer: OmissionAccountabilityFilterer{contract: contract}}, nil
}

// OmissionAccountability is an auto generated Go binding around an Ethereum contract.
type OmissionAccountability struct {
	OmissionAccountabilityCaller     // Read-only binding to the contract
	OmissionAccountabilityTransactor // Write-only binding to the contract
	OmissionAccountabilityFilterer   // Log filterer for contract events
}

// OmissionAccountabilityCaller is an auto generated read-only Go binding around an Ethereum contract.
type OmissionAccountabilityCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// OmissionAccountabilityTransactor is an auto generated write-only Go binding around an Ethereum contract.
type OmissionAccountabilityTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// OmissionAccountabilityFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type OmissionAccountabilityFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// OmissionAccountabilitySession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type OmissionAccountabilitySession struct {
	Contract     *OmissionAccountability // 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
}

// OmissionAccountabilityCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type OmissionAccountabilityCallerSession struct {
	Contract *OmissionAccountabilityCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts                 // Call options to use throughout this session
}

// OmissionAccountabilityTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type OmissionAccountabilityTransactorSession struct {
	Contract     *OmissionAccountabilityTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts                 // Transaction auth options to use throughout this session
}

// OmissionAccountabilityRaw is an auto generated low-level Go binding around an Ethereum contract.
type OmissionAccountabilityRaw struct {
	Contract *OmissionAccountability // Generic contract binding to access the raw methods on
}

// OmissionAccountabilityCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type OmissionAccountabilityCallerRaw struct {
	Contract *OmissionAccountabilityCaller // Generic read-only contract binding to access the raw methods on
}

// OmissionAccountabilityTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type OmissionAccountabilityTransactorRaw struct {
	Contract *OmissionAccountabilityTransactor // Generic write-only contract binding to access the raw methods on
}

// NewOmissionAccountability creates a new instance of OmissionAccountability, bound to a specific deployed contract.
func NewOmissionAccountability(address common.Address, backend bind.ContractBackend) (*OmissionAccountability, error) {
	contract, err := bindOmissionAccountability(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &OmissionAccountability{OmissionAccountabilityCaller: OmissionAccountabilityCaller{contract: contract}, OmissionAccountabilityTransactor: OmissionAccountabilityTransactor{contract: contract}, OmissionAccountabilityFilterer: OmissionAccountabilityFilterer{contract: contract}}, nil
}

// NewOmissionAccountabilityCaller creates a new read-only instance of OmissionAccountability, bound to a specific deployed contract.
func NewOmissionAccountabilityCaller(address common.Address, caller bind.ContractCaller) (*OmissionAccountabilityCaller, error) {
	contract, err := bindOmissionAccountability(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityCaller{contract: contract}, nil
}

// NewOmissionAccountabilityTransactor creates a new write-only instance of OmissionAccountability, bound to a specific deployed contract.
func NewOmissionAccountabilityTransactor(address common.Address, transactor bind.ContractTransactor) (*OmissionAccountabilityTransactor, error) {
	contract, err := bindOmissionAccountability(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityTransactor{contract: contract}, nil
}

// NewOmissionAccountabilityFilterer creates a new log filterer instance of OmissionAccountability, bound to a specific deployed contract.
func NewOmissionAccountabilityFilterer(address common.Address, filterer bind.ContractFilterer) (*OmissionAccountabilityFilterer, error) {
	contract, err := bindOmissionAccountability(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityFilterer{contract: contract}, nil
}

// bindOmissionAccountability binds a generic wrapper to an already deployed contract.
func bindOmissionAccountability(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(OmissionAccountabilityABI))
	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 (_OmissionAccountability *OmissionAccountabilityRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _OmissionAccountability.Contract.OmissionAccountabilityCaller.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 (_OmissionAccountability *OmissionAccountabilityRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.OmissionAccountabilityTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_OmissionAccountability *OmissionAccountabilityRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.OmissionAccountabilityTransactor.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 (_OmissionAccountability *OmissionAccountabilityCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _OmissionAccountability.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 (_OmissionAccountability *OmissionAccountabilityTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_OmissionAccountability *OmissionAccountabilityTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.contract.Transact(opts, method, params...)
}

// SCALEFACTOR is a free data retrieval call binding the contract method 0xce4b5bbe.
//
// Solidity: function SCALE_FACTOR() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) SCALEFACTOR(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "SCALE_FACTOR")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// SCALEFACTOR is a free data retrieval call binding the contract method 0xce4b5bbe.
//
// Solidity: function SCALE_FACTOR() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) SCALEFACTOR() (*big.Int, error) {
	return _OmissionAccountability.Contract.SCALEFACTOR(&_OmissionAccountability.CallOpts)
}

// SCALEFACTOR is a free data retrieval call binding the contract method 0xce4b5bbe.
//
// Solidity: function SCALE_FACTOR() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) SCALEFACTOR() (*big.Int, error) {
	return _OmissionAccountability.Contract.SCALEFACTOR(&_OmissionAccountability.CallOpts)
}

// GetAbsenteesLastHeight is a free data retrieval call binding the contract method 0x2b938932.
//
// Solidity: function getAbsenteesLastHeight() view returns(address[])
func (_OmissionAccountability *OmissionAccountabilityCaller) GetAbsenteesLastHeight(opts *bind.CallOpts) ([]common.Address, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getAbsenteesLastHeight")

	if err != nil {
		return *new([]common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)

	return out0, err

}

// GetAbsenteesLastHeight is a free data retrieval call binding the contract method 0x2b938932.
//
// Solidity: function getAbsenteesLastHeight() view returns(address[])
func (_OmissionAccountability *OmissionAccountabilitySession) GetAbsenteesLastHeight() ([]common.Address, error) {
	return _OmissionAccountability.Contract.GetAbsenteesLastHeight(&_OmissionAccountability.CallOpts)
}

// GetAbsenteesLastHeight is a free data retrieval call binding the contract method 0x2b938932.
//
// Solidity: function getAbsenteesLastHeight() view returns(address[])
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetAbsenteesLastHeight() ([]common.Address, error) {
	return _OmissionAccountability.Contract.GetAbsenteesLastHeight(&_OmissionAccountability.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,uint256,uint256,uint256,uint256))
func (_OmissionAccountability *OmissionAccountabilityCaller) GetConfig(opts *bind.CallOpts) (OmissionAccountabilityConfig, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getConfig")

	if err != nil {
		return *new(OmissionAccountabilityConfig), err
	}

	out0 := *abi.ConvertType(out[0], new(OmissionAccountabilityConfig)).(*OmissionAccountabilityConfig)

	return out0, err

}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,uint256,uint256,uint256,uint256))
func (_OmissionAccountability *OmissionAccountabilitySession) GetConfig() (OmissionAccountabilityConfig, error) {
	return _OmissionAccountability.Contract.GetConfig(&_OmissionAccountability.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((uint256,uint256,uint256,uint256,uint256,uint256,uint256))
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetConfig() (OmissionAccountabilityConfig, error) {
	return _OmissionAccountability.Contract.GetConfig(&_OmissionAccountability.CallOpts)
}

// GetDelta is a free data retrieval call binding the contract method 0xc549176e.
//
// Solidity: function getDelta() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetDelta(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getDelta")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetDelta is a free data retrieval call binding the contract method 0xc549176e.
//
// Solidity: function getDelta() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetDelta() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetDelta(&_OmissionAccountability.CallOpts)
}

// GetDelta is a free data retrieval call binding the contract method 0xc549176e.
//
// Solidity: function getDelta() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetDelta() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetDelta(&_OmissionAccountability.CallOpts)
}

// GetEpochCollusionDegree is a free data retrieval call binding the contract method 0x7cc3e838.
//
// Solidity: function getEpochCollusionDegree(uint256 _epochID) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetEpochCollusionDegree(opts *bind.CallOpts, _epochID *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getEpochCollusionDegree", _epochID)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetEpochCollusionDegree is a free data retrieval call binding the contract method 0x7cc3e838.
//
// Solidity: function getEpochCollusionDegree(uint256 _epochID) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetEpochCollusionDegree(_epochID *big.Int) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetEpochCollusionDegree(&_OmissionAccountability.CallOpts, _epochID)
}

// GetEpochCollusionDegree is a free data retrieval call binding the contract method 0x7cc3e838.
//
// Solidity: function getEpochCollusionDegree(uint256 _epochID) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetEpochCollusionDegree(_epochID *big.Int) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetEpochCollusionDegree(&_OmissionAccountability.CallOpts, _epochID)
}

// GetEpochCollusionDegreeLength is a free data retrieval call binding the contract method 0x73a25c59.
//
// Solidity: function getEpochCollusionDegreeLength() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetEpochCollusionDegreeLength(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getEpochCollusionDegreeLength")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetEpochCollusionDegreeLength is a free data retrieval call binding the contract method 0x73a25c59.
//
// Solidity: function getEpochCollusionDegreeLength() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetEpochCollusionDegreeLength() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetEpochCollusionDegreeLength(&_OmissionAccountability.CallOpts)
}

// GetEpochCollusionDegreeLength is a free data retrieval call binding the contract method 0x73a25c59.
//
// Solidity: function getEpochCollusionDegreeLength() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetEpochCollusionDegreeLength() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetEpochCollusionDegreeLength(&_OmissionAccountability.CallOpts)
}

// GetFaultyProposers is a free data retrieval call binding the contract method 0xfe6297af.
//
// Solidity: function getFaultyProposers(uint256 _height) view returns(bool)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetFaultyProposers(opts *bind.CallOpts, _height *big.Int) (bool, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getFaultyProposers", _height)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// GetFaultyProposers is a free data retrieval call binding the contract method 0xfe6297af.
//
// Solidity: function getFaultyProposers(uint256 _height) view returns(bool)
func (_OmissionAccountability *OmissionAccountabilitySession) GetFaultyProposers(_height *big.Int) (bool, error) {
	return _OmissionAccountability.Contract.GetFaultyProposers(&_OmissionAccountability.CallOpts, _height)
}

// GetFaultyProposers is a free data retrieval call binding the contract method 0xfe6297af.
//
// Solidity: function getFaultyProposers(uint256 _height) view returns(bool)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetFaultyProposers(_height *big.Int) (bool, error) {
	return _OmissionAccountability.Contract.GetFaultyProposers(&_OmissionAccountability.CallOpts, _height)
}

// GetFaultyProposersInWindow is a free data retrieval call binding the contract method 0x54ff7481.
//
// Solidity: function getFaultyProposersInWindow() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetFaultyProposersInWindow(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getFaultyProposersInWindow")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetFaultyProposersInWindow is a free data retrieval call binding the contract method 0x54ff7481.
//
// Solidity: function getFaultyProposersInWindow() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetFaultyProposersInWindow() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetFaultyProposersInWindow(&_OmissionAccountability.CallOpts)
}

// GetFaultyProposersInWindow is a free data retrieval call binding the contract method 0x54ff7481.
//
// Solidity: function getFaultyProposersInWindow() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetFaultyProposersInWindow() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetFaultyProposersInWindow(&_OmissionAccountability.CallOpts)
}

// GetInactiveValidators is a free data retrieval call binding the contract method 0x172f4282.
//
// Solidity: function getInactiveValidators(uint256 _height, address _validator) view returns(bool)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetInactiveValidators(opts *bind.CallOpts, _height *big.Int, _validator common.Address) (bool, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getInactiveValidators", _height, _validator)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// GetInactiveValidators is a free data retrieval call binding the contract method 0x172f4282.
//
// Solidity: function getInactiveValidators(uint256 _height, address _validator) view returns(bool)
func (_OmissionAccountability *OmissionAccountabilitySession) GetInactiveValidators(_height *big.Int, _validator common.Address) (bool, error) {
	return _OmissionAccountability.Contract.GetInactiveValidators(&_OmissionAccountability.CallOpts, _height, _validator)
}

// GetInactiveValidators is a free data retrieval call binding the contract method 0x172f4282.
//
// Solidity: function getInactiveValidators(uint256 _height, address _validator) view returns(bool)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetInactiveValidators(_height *big.Int, _validator common.Address) (bool, error) {
	return _OmissionAccountability.Contract.GetInactiveValidators(&_OmissionAccountability.CallOpts, _height, _validator)
}

// GetInactivityCounter is a free data retrieval call binding the contract method 0x87ca6af1.
//
// Solidity: function getInactivityCounter(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetInactivityCounter(opts *bind.CallOpts, _validator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getInactivityCounter", _validator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetInactivityCounter is a free data retrieval call binding the contract method 0x87ca6af1.
//
// Solidity: function getInactivityCounter(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetInactivityCounter(_validator common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetInactivityCounter(&_OmissionAccountability.CallOpts, _validator)
}

// GetInactivityCounter is a free data retrieval call binding the contract method 0x87ca6af1.
//
// Solidity: function getInactivityCounter(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetInactivityCounter(_validator common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetInactivityCounter(&_OmissionAccountability.CallOpts, _validator)
}

// GetInactivityScore is a free data retrieval call binding the contract method 0x9a11e0e6.
//
// Solidity: function getInactivityScore(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetInactivityScore(opts *bind.CallOpts, _validator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getInactivityScore", _validator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetInactivityScore is a free data retrieval call binding the contract method 0x9a11e0e6.
//
// Solidity: function getInactivityScore(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetInactivityScore(_validator common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetInactivityScore(&_OmissionAccountability.CallOpts, _validator)
}

// GetInactivityScore is a free data retrieval call binding the contract method 0x9a11e0e6.
//
// Solidity: function getInactivityScore(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetInactivityScore(_validator common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetInactivityScore(&_OmissionAccountability.CallOpts, _validator)
}

// GetLastActive is a free data retrieval call binding the contract method 0x606ab752.
//
// Solidity: function getLastActive(address _validator) view returns(int256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetLastActive(opts *bind.CallOpts, _validator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getLastActive", _validator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetLastActive is a free data retrieval call binding the contract method 0x606ab752.
//
// Solidity: function getLastActive(address _validator) view returns(int256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetLastActive(_validator common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetLastActive(&_OmissionAccountability.CallOpts, _validator)
}

// GetLastActive is a free data retrieval call binding the contract method 0x606ab752.
//
// Solidity: function getLastActive(address _validator) view returns(int256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetLastActive(_validator common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetLastActive(&_OmissionAccountability.CallOpts, _validator)
}

// GetLookbackWindow is a free data retrieval call binding the contract method 0x5ca1809c.
//
// Solidity: function getLookbackWindow() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetLookbackWindow(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getLookbackWindow")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetLookbackWindow is a free data retrieval call binding the contract method 0x5ca1809c.
//
// Solidity: function getLookbackWindow() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetLookbackWindow() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetLookbackWindow(&_OmissionAccountability.CallOpts)
}

// GetLookbackWindow is a free data retrieval call binding the contract method 0x5ca1809c.
//
// Solidity: function getLookbackWindow() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetLookbackWindow() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetLookbackWindow(&_OmissionAccountability.CallOpts)
}

// GetProbationPeriods is a free data retrieval call binding the contract method 0x0f2ff49a.
//
// Solidity: function getProbationPeriods(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetProbationPeriods(opts *bind.CallOpts, _validator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getProbationPeriods", _validator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetProbationPeriods is a free data retrieval call binding the contract method 0x0f2ff49a.
//
// Solidity: function getProbationPeriods(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetProbationPeriods(_validator common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetProbationPeriods(&_OmissionAccountability.CallOpts, _validator)
}

// GetProbationPeriods is a free data retrieval call binding the contract method 0x0f2ff49a.
//
// Solidity: function getProbationPeriods(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetProbationPeriods(_validator common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetProbationPeriods(&_OmissionAccountability.CallOpts, _validator)
}

// GetProposerEffort is a free data retrieval call binding the contract method 0x5977fc63.
//
// Solidity: function getProposerEffort(address _nodeAddress) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetProposerEffort(opts *bind.CallOpts, _nodeAddress common.Address) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getProposerEffort", _nodeAddress)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetProposerEffort is a free data retrieval call binding the contract method 0x5977fc63.
//
// Solidity: function getProposerEffort(address _nodeAddress) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetProposerEffort(_nodeAddress common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetProposerEffort(&_OmissionAccountability.CallOpts, _nodeAddress)
}

// GetProposerEffort is a free data retrieval call binding the contract method 0x5977fc63.
//
// Solidity: function getProposerEffort(address _nodeAddress) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetProposerEffort(_nodeAddress common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetProposerEffort(&_OmissionAccountability.CallOpts, _nodeAddress)
}

// GetRepeatedOffences is a free data retrieval call binding the contract method 0x8d5de42f.
//
// Solidity: function getRepeatedOffences(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetRepeatedOffences(opts *bind.CallOpts, _validator common.Address) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getRepeatedOffences", _validator)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetRepeatedOffences is a free data retrieval call binding the contract method 0x8d5de42f.
//
// Solidity: function getRepeatedOffences(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetRepeatedOffences(_validator common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetRepeatedOffences(&_OmissionAccountability.CallOpts, _validator)
}

// GetRepeatedOffences is a free data retrieval call binding the contract method 0x8d5de42f.
//
// Solidity: function getRepeatedOffences(address _validator) view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetRepeatedOffences(_validator common.Address) (*big.Int, error) {
	return _OmissionAccountability.Contract.GetRepeatedOffences(&_OmissionAccountability.CallOpts, _validator)
}

// GetScaleFactor is a free data retrieval call binding the contract method 0x7f5e2f11.
//
// Solidity: function getScaleFactor() pure returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetScaleFactor(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getScaleFactor")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetScaleFactor is a free data retrieval call binding the contract method 0x7f5e2f11.
//
// Solidity: function getScaleFactor() pure returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetScaleFactor() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetScaleFactor(&_OmissionAccountability.CallOpts)
}

// GetScaleFactor is a free data retrieval call binding the contract method 0x7f5e2f11.
//
// Solidity: function getScaleFactor() pure returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetScaleFactor() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetScaleFactor(&_OmissionAccountability.CallOpts)
}

// GetTotalEffort is a free data retrieval call binding the contract method 0x53b1821b.
//
// Solidity: function getTotalEffort() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCaller) GetTotalEffort(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _OmissionAccountability.contract.Call(opts, &out, "getTotalEffort")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetTotalEffort is a free data retrieval call binding the contract method 0x53b1821b.
//
// Solidity: function getTotalEffort() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) GetTotalEffort() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetTotalEffort(&_OmissionAccountability.CallOpts)
}

// GetTotalEffort is a free data retrieval call binding the contract method 0x53b1821b.
//
// Solidity: function getTotalEffort() view returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityCallerSession) GetTotalEffort() (*big.Int, error) {
	return _OmissionAccountability.Contract.GetTotalEffort(&_OmissionAccountability.CallOpts)
}

// DistributeProposerRewards is a paid mutator transaction binding the contract method 0xeeb92233.
//
// Solidity: function distributeProposerRewards(uint256 _ntnReward) payable returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) DistributeProposerRewards(opts *bind.TransactOpts, _ntnReward *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "distributeProposerRewards", _ntnReward)
}

// DistributeProposerRewards is a paid mutator transaction binding the contract method 0xeeb92233.
//
// Solidity: function distributeProposerRewards(uint256 _ntnReward) payable returns()
func (_OmissionAccountability *OmissionAccountabilitySession) DistributeProposerRewards(_ntnReward *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.DistributeProposerRewards(&_OmissionAccountability.TransactOpts, _ntnReward)
}

// DistributeProposerRewards is a paid mutator transaction binding the contract method 0xeeb92233.
//
// Solidity: function distributeProposerRewards(uint256 _ntnReward) payable returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) DistributeProposerRewards(_ntnReward *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.DistributeProposerRewards(&_OmissionAccountability.TransactOpts, _ntnReward)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnded) returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityTransactor) Finalize(opts *bind.TransactOpts, _epochEnded bool) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "finalize", _epochEnded)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnded) returns(uint256)
func (_OmissionAccountability *OmissionAccountabilitySession) Finalize(_epochEnded bool) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.Finalize(&_OmissionAccountability.TransactOpts, _epochEnded)
}

// Finalize is a paid mutator transaction binding the contract method 0x6c9789b0.
//
// Solidity: function finalize(bool _epochEnded) returns(uint256)
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) Finalize(_epochEnded bool) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.Finalize(&_OmissionAccountability.TransactOpts, _epochEnded)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe3deef9c.
//
// Solidity: function setCommittee((address,uint256,bytes)[] _committee, address[] _treasuries) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) SetCommittee(opts *bind.TransactOpts, _committee []IAutonityCommitteeMember, _treasuries []common.Address) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "setCommittee", _committee, _treasuries)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe3deef9c.
//
// Solidity: function setCommittee((address,uint256,bytes)[] _committee, address[] _treasuries) returns()
func (_OmissionAccountability *OmissionAccountabilitySession) SetCommittee(_committee []IAutonityCommitteeMember, _treasuries []common.Address) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetCommittee(&_OmissionAccountability.TransactOpts, _committee, _treasuries)
}

// SetCommittee is a paid mutator transaction binding the contract method 0xe3deef9c.
//
// Solidity: function setCommittee((address,uint256,bytes)[] _committee, address[] _treasuries) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) SetCommittee(_committee []IAutonityCommitteeMember, _treasuries []common.Address) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetCommittee(&_OmissionAccountability.TransactOpts, _committee, _treasuries)
}

// SetDelta is a paid mutator transaction binding the contract method 0x025ff0a5.
//
// Solidity: function setDelta(uint256 _delta) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) SetDelta(opts *bind.TransactOpts, _delta *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "setDelta", _delta)
}

// SetDelta is a paid mutator transaction binding the contract method 0x025ff0a5.
//
// Solidity: function setDelta(uint256 _delta) returns()
func (_OmissionAccountability *OmissionAccountabilitySession) SetDelta(_delta *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetDelta(&_OmissionAccountability.TransactOpts, _delta)
}

// SetDelta is a paid mutator transaction binding the contract method 0x025ff0a5.
//
// Solidity: function setDelta(uint256 _delta) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) SetDelta(_delta *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetDelta(&_OmissionAccountability.TransactOpts, _delta)
}

// SetEpochBlock is a paid mutator transaction binding the contract method 0xc024cc2c.
//
// Solidity: function setEpochBlock(uint256 _epochBlock) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) SetEpochBlock(opts *bind.TransactOpts, _epochBlock *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "setEpochBlock", _epochBlock)
}

// SetEpochBlock is a paid mutator transaction binding the contract method 0xc024cc2c.
//
// Solidity: function setEpochBlock(uint256 _epochBlock) returns()
func (_OmissionAccountability *OmissionAccountabilitySession) SetEpochBlock(_epochBlock *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetEpochBlock(&_OmissionAccountability.TransactOpts, _epochBlock)
}

// SetEpochBlock is a paid mutator transaction binding the contract method 0xc024cc2c.
//
// Solidity: function setEpochBlock(uint256 _epochBlock) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) SetEpochBlock(_epochBlock *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetEpochBlock(&_OmissionAccountability.TransactOpts, _epochBlock)
}

// SetInactivityThreshold is a paid mutator transaction binding the contract method 0xd7eaef49.
//
// Solidity: function setInactivityThreshold(uint256 _inactivityThreshold) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) SetInactivityThreshold(opts *bind.TransactOpts, _inactivityThreshold *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "setInactivityThreshold", _inactivityThreshold)
}

// SetInactivityThreshold is a paid mutator transaction binding the contract method 0xd7eaef49.
//
// Solidity: function setInactivityThreshold(uint256 _inactivityThreshold) returns()
func (_OmissionAccountability *OmissionAccountabilitySession) SetInactivityThreshold(_inactivityThreshold *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetInactivityThreshold(&_OmissionAccountability.TransactOpts, _inactivityThreshold)
}

// SetInactivityThreshold is a paid mutator transaction binding the contract method 0xd7eaef49.
//
// Solidity: function setInactivityThreshold(uint256 _inactivityThreshold) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) SetInactivityThreshold(_inactivityThreshold *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetInactivityThreshold(&_OmissionAccountability.TransactOpts, _inactivityThreshold)
}

// SetInitialJailingPeriod is a paid mutator transaction binding the contract method 0x482893c7.
//
// Solidity: function setInitialJailingPeriod(uint256 _initialJailingPeriod) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) SetInitialJailingPeriod(opts *bind.TransactOpts, _initialJailingPeriod *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "setInitialJailingPeriod", _initialJailingPeriod)
}

// SetInitialJailingPeriod is a paid mutator transaction binding the contract method 0x482893c7.
//
// Solidity: function setInitialJailingPeriod(uint256 _initialJailingPeriod) returns()
func (_OmissionAccountability *OmissionAccountabilitySession) SetInitialJailingPeriod(_initialJailingPeriod *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetInitialJailingPeriod(&_OmissionAccountability.TransactOpts, _initialJailingPeriod)
}

// SetInitialJailingPeriod is a paid mutator transaction binding the contract method 0x482893c7.
//
// Solidity: function setInitialJailingPeriod(uint256 _initialJailingPeriod) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) SetInitialJailingPeriod(_initialJailingPeriod *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetInitialJailingPeriod(&_OmissionAccountability.TransactOpts, _initialJailingPeriod)
}

// SetInitialProbationPeriod is a paid mutator transaction binding the contract method 0x7e716823.
//
// Solidity: function setInitialProbationPeriod(uint256 _initialProbationPeriod) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) SetInitialProbationPeriod(opts *bind.TransactOpts, _initialProbationPeriod *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "setInitialProbationPeriod", _initialProbationPeriod)
}

// SetInitialProbationPeriod is a paid mutator transaction binding the contract method 0x7e716823.
//
// Solidity: function setInitialProbationPeriod(uint256 _initialProbationPeriod) returns()
func (_OmissionAccountability *OmissionAccountabilitySession) SetInitialProbationPeriod(_initialProbationPeriod *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetInitialProbationPeriod(&_OmissionAccountability.TransactOpts, _initialProbationPeriod)
}

// SetInitialProbationPeriod is a paid mutator transaction binding the contract method 0x7e716823.
//
// Solidity: function setInitialProbationPeriod(uint256 _initialProbationPeriod) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) SetInitialProbationPeriod(_initialProbationPeriod *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetInitialProbationPeriod(&_OmissionAccountability.TransactOpts, _initialProbationPeriod)
}

// SetInitialSlashingRate is a paid mutator transaction binding the contract method 0x48fa7127.
//
// Solidity: function setInitialSlashingRate(uint256 _initialSlashingRate) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) SetInitialSlashingRate(opts *bind.TransactOpts, _initialSlashingRate *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "setInitialSlashingRate", _initialSlashingRate)
}

// SetInitialSlashingRate is a paid mutator transaction binding the contract method 0x48fa7127.
//
// Solidity: function setInitialSlashingRate(uint256 _initialSlashingRate) returns()
func (_OmissionAccountability *OmissionAccountabilitySession) SetInitialSlashingRate(_initialSlashingRate *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetInitialSlashingRate(&_OmissionAccountability.TransactOpts, _initialSlashingRate)
}

// SetInitialSlashingRate is a paid mutator transaction binding the contract method 0x48fa7127.
//
// Solidity: function setInitialSlashingRate(uint256 _initialSlashingRate) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) SetInitialSlashingRate(_initialSlashingRate *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetInitialSlashingRate(&_OmissionAccountability.TransactOpts, _initialSlashingRate)
}

// SetLookbackWindow is a paid mutator transaction binding the contract method 0x8bbde7e5.
//
// Solidity: function setLookbackWindow(uint256 _lookbackWindow) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) SetLookbackWindow(opts *bind.TransactOpts, _lookbackWindow *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "setLookbackWindow", _lookbackWindow)
}

// SetLookbackWindow is a paid mutator transaction binding the contract method 0x8bbde7e5.
//
// Solidity: function setLookbackWindow(uint256 _lookbackWindow) returns()
func (_OmissionAccountability *OmissionAccountabilitySession) SetLookbackWindow(_lookbackWindow *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetLookbackWindow(&_OmissionAccountability.TransactOpts, _lookbackWindow)
}

// SetLookbackWindow is a paid mutator transaction binding the contract method 0x8bbde7e5.
//
// Solidity: function setLookbackWindow(uint256 _lookbackWindow) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) SetLookbackWindow(_lookbackWindow *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetLookbackWindow(&_OmissionAccountability.TransactOpts, _lookbackWindow)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) SetOperator(opts *bind.TransactOpts, _operator common.Address) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "setOperator", _operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_OmissionAccountability *OmissionAccountabilitySession) SetOperator(_operator common.Address) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetOperator(&_OmissionAccountability.TransactOpts, _operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) SetOperator(_operator common.Address) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetOperator(&_OmissionAccountability.TransactOpts, _operator)
}

// SetPastPerformanceWeight is a paid mutator transaction binding the contract method 0xf85cffe2.
//
// Solidity: function setPastPerformanceWeight(uint256 _pastPerformanceWeight) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactor) SetPastPerformanceWeight(opts *bind.TransactOpts, _pastPerformanceWeight *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.contract.Transact(opts, "setPastPerformanceWeight", _pastPerformanceWeight)
}

// SetPastPerformanceWeight is a paid mutator transaction binding the contract method 0xf85cffe2.
//
// Solidity: function setPastPerformanceWeight(uint256 _pastPerformanceWeight) returns()
func (_OmissionAccountability *OmissionAccountabilitySession) SetPastPerformanceWeight(_pastPerformanceWeight *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetPastPerformanceWeight(&_OmissionAccountability.TransactOpts, _pastPerformanceWeight)
}

// SetPastPerformanceWeight is a paid mutator transaction binding the contract method 0xf85cffe2.
//
// Solidity: function setPastPerformanceWeight(uint256 _pastPerformanceWeight) returns()
func (_OmissionAccountability *OmissionAccountabilityTransactorSession) SetPastPerformanceWeight(_pastPerformanceWeight *big.Int) (*types.Transaction, error) {
	return _OmissionAccountability.Contract.SetPastPerformanceWeight(&_OmissionAccountability.TransactOpts, _pastPerformanceWeight)
}

// OmissionAccountabilityCallFailedIterator is returned from FilterCallFailed and is used to iterate over the raw logs and unpacked data for CallFailed events raised by the OmissionAccountability contract.
type OmissionAccountabilityCallFailedIterator struct {
	Event *OmissionAccountabilityCallFailed // 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 *OmissionAccountabilityCallFailedIterator) 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(OmissionAccountabilityCallFailed)
			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(OmissionAccountabilityCallFailed)
		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 *OmissionAccountabilityCallFailedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OmissionAccountabilityCallFailedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OmissionAccountabilityCallFailed represents a CallFailed event raised by the OmissionAccountability contract.
type OmissionAccountabilityCallFailed struct {
	To              common.Address
	MethodSignature string
	ReturnData      []byte
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterCallFailed is a free log retrieval operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_OmissionAccountability *OmissionAccountabilityFilterer) FilterCallFailed(opts *bind.FilterOpts) (*OmissionAccountabilityCallFailedIterator, error) {

	logs, sub, err := _OmissionAccountability.contract.FilterLogs(opts, "CallFailed")
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityCallFailedIterator{contract: _OmissionAccountability.contract, event: "CallFailed", logs: logs, sub: sub}, nil
}

// WatchCallFailed is a free log subscription operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_OmissionAccountability *OmissionAccountabilityFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *OmissionAccountabilityCallFailed) (event.Subscription, error) {

	logs, sub, err := _OmissionAccountability.contract.WatchLogs(opts, "CallFailed")
	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(OmissionAccountabilityCallFailed)
				if err := _OmissionAccountability.contract.UnpackLog(event, "CallFailed", 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
}

// ParseCallFailed is a log parse operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_OmissionAccountability *OmissionAccountabilityFilterer) ParseCallFailed(log types.Log) (*OmissionAccountabilityCallFailed, error) {
	event := new(OmissionAccountabilityCallFailed)
	if err := _OmissionAccountability.contract.UnpackLog(event, "CallFailed", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OmissionAccountabilityConfigUpdateAddressIterator is returned from FilterConfigUpdateAddress and is used to iterate over the raw logs and unpacked data for ConfigUpdateAddress events raised by the OmissionAccountability contract.
type OmissionAccountabilityConfigUpdateAddressIterator struct {
	Event *OmissionAccountabilityConfigUpdateAddress // 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 *OmissionAccountabilityConfigUpdateAddressIterator) 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(OmissionAccountabilityConfigUpdateAddress)
			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(OmissionAccountabilityConfigUpdateAddress)
		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 *OmissionAccountabilityConfigUpdateAddressIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OmissionAccountabilityConfigUpdateAddressIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OmissionAccountabilityConfigUpdateAddress represents a ConfigUpdateAddress event raised by the OmissionAccountability contract.
type OmissionAccountabilityConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*OmissionAccountabilityConfigUpdateAddressIterator, error) {

	logs, sub, err := _OmissionAccountability.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityConfigUpdateAddressIterator{contract: _OmissionAccountability.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *OmissionAccountabilityConfigUpdateAddress) (event.Subscription, error) {

	logs, sub, err := _OmissionAccountability.contract.WatchLogs(opts, "ConfigUpdateAddress")
	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(OmissionAccountabilityConfigUpdateAddress)
				if err := _OmissionAccountability.contract.UnpackLog(event, "ConfigUpdateAddress", 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
}

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) ParseConfigUpdateAddress(log types.Log) (*OmissionAccountabilityConfigUpdateAddress, error) {
	event := new(OmissionAccountabilityConfigUpdateAddress)
	if err := _OmissionAccountability.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OmissionAccountabilityConfigUpdateBoolIterator is returned from FilterConfigUpdateBool and is used to iterate over the raw logs and unpacked data for ConfigUpdateBool events raised by the OmissionAccountability contract.
type OmissionAccountabilityConfigUpdateBoolIterator struct {
	Event *OmissionAccountabilityConfigUpdateBool // 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 *OmissionAccountabilityConfigUpdateBoolIterator) 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(OmissionAccountabilityConfigUpdateBool)
			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(OmissionAccountabilityConfigUpdateBool)
		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 *OmissionAccountabilityConfigUpdateBoolIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OmissionAccountabilityConfigUpdateBoolIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OmissionAccountabilityConfigUpdateBool represents a ConfigUpdateBool event raised by the OmissionAccountability contract.
type OmissionAccountabilityConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*OmissionAccountabilityConfigUpdateBoolIterator, error) {

	logs, sub, err := _OmissionAccountability.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityConfigUpdateBoolIterator{contract: _OmissionAccountability.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *OmissionAccountabilityConfigUpdateBool) (event.Subscription, error) {

	logs, sub, err := _OmissionAccountability.contract.WatchLogs(opts, "ConfigUpdateBool")
	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(OmissionAccountabilityConfigUpdateBool)
				if err := _OmissionAccountability.contract.UnpackLog(event, "ConfigUpdateBool", 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
}

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) ParseConfigUpdateBool(log types.Log) (*OmissionAccountabilityConfigUpdateBool, error) {
	event := new(OmissionAccountabilityConfigUpdateBool)
	if err := _OmissionAccountability.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OmissionAccountabilityConfigUpdateIntIterator is returned from FilterConfigUpdateInt and is used to iterate over the raw logs and unpacked data for ConfigUpdateInt events raised by the OmissionAccountability contract.
type OmissionAccountabilityConfigUpdateIntIterator struct {
	Event *OmissionAccountabilityConfigUpdateInt // 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 *OmissionAccountabilityConfigUpdateIntIterator) 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(OmissionAccountabilityConfigUpdateInt)
			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(OmissionAccountabilityConfigUpdateInt)
		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 *OmissionAccountabilityConfigUpdateIntIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OmissionAccountabilityConfigUpdateIntIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OmissionAccountabilityConfigUpdateInt represents a ConfigUpdateInt event raised by the OmissionAccountability contract.
type OmissionAccountabilityConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*OmissionAccountabilityConfigUpdateIntIterator, error) {

	logs, sub, err := _OmissionAccountability.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityConfigUpdateIntIterator{contract: _OmissionAccountability.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *OmissionAccountabilityConfigUpdateInt) (event.Subscription, error) {

	logs, sub, err := _OmissionAccountability.contract.WatchLogs(opts, "ConfigUpdateInt")
	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(OmissionAccountabilityConfigUpdateInt)
				if err := _OmissionAccountability.contract.UnpackLog(event, "ConfigUpdateInt", 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
}

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) ParseConfigUpdateInt(log types.Log) (*OmissionAccountabilityConfigUpdateInt, error) {
	event := new(OmissionAccountabilityConfigUpdateInt)
	if err := _OmissionAccountability.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OmissionAccountabilityConfigUpdateUintIterator is returned from FilterConfigUpdateUint and is used to iterate over the raw logs and unpacked data for ConfigUpdateUint events raised by the OmissionAccountability contract.
type OmissionAccountabilityConfigUpdateUintIterator struct {
	Event *OmissionAccountabilityConfigUpdateUint // 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 *OmissionAccountabilityConfigUpdateUintIterator) 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(OmissionAccountabilityConfigUpdateUint)
			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(OmissionAccountabilityConfigUpdateUint)
		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 *OmissionAccountabilityConfigUpdateUintIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OmissionAccountabilityConfigUpdateUintIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OmissionAccountabilityConfigUpdateUint represents a ConfigUpdateUint event raised by the OmissionAccountability contract.
type OmissionAccountabilityConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*OmissionAccountabilityConfigUpdateUintIterator, error) {

	logs, sub, err := _OmissionAccountability.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityConfigUpdateUintIterator{contract: _OmissionAccountability.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *OmissionAccountabilityConfigUpdateUint) (event.Subscription, error) {

	logs, sub, err := _OmissionAccountability.contract.WatchLogs(opts, "ConfigUpdateUint")
	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(OmissionAccountabilityConfigUpdateUint)
				if err := _OmissionAccountability.contract.UnpackLog(event, "ConfigUpdateUint", 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
}

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_OmissionAccountability *OmissionAccountabilityFilterer) ParseConfigUpdateUint(log types.Log) (*OmissionAccountabilityConfigUpdateUint, error) {
	event := new(OmissionAccountabilityConfigUpdateUint)
	if err := _OmissionAccountability.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OmissionAccountabilityInactivityJailingEventIterator is returned from FilterInactivityJailingEvent and is used to iterate over the raw logs and unpacked data for InactivityJailingEvent events raised by the OmissionAccountability contract.
type OmissionAccountabilityInactivityJailingEventIterator struct {
	Event *OmissionAccountabilityInactivityJailingEvent // 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 *OmissionAccountabilityInactivityJailingEventIterator) 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(OmissionAccountabilityInactivityJailingEvent)
			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(OmissionAccountabilityInactivityJailingEvent)
		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 *OmissionAccountabilityInactivityJailingEventIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OmissionAccountabilityInactivityJailingEventIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OmissionAccountabilityInactivityJailingEvent represents a InactivityJailingEvent event raised by the OmissionAccountability contract.
type OmissionAccountabilityInactivityJailingEvent struct {
	Validator    common.Address
	ReleaseBlock *big.Int
	Raw          types.Log // Blockchain specific contextual infos
}

// FilterInactivityJailingEvent is a free log retrieval operation binding the contract event 0xb057cb17fba40b7eb122da4822729894f42ef37e5e2b74e6081fd7efe5de4b64.
//
// Solidity: event InactivityJailingEvent(address validator, uint256 releaseBlock)
func (_OmissionAccountability *OmissionAccountabilityFilterer) FilterInactivityJailingEvent(opts *bind.FilterOpts) (*OmissionAccountabilityInactivityJailingEventIterator, error) {

	logs, sub, err := _OmissionAccountability.contract.FilterLogs(opts, "InactivityJailingEvent")
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityInactivityJailingEventIterator{contract: _OmissionAccountability.contract, event: "InactivityJailingEvent", logs: logs, sub: sub}, nil
}

// WatchInactivityJailingEvent is a free log subscription operation binding the contract event 0xb057cb17fba40b7eb122da4822729894f42ef37e5e2b74e6081fd7efe5de4b64.
//
// Solidity: event InactivityJailingEvent(address validator, uint256 releaseBlock)
func (_OmissionAccountability *OmissionAccountabilityFilterer) WatchInactivityJailingEvent(opts *bind.WatchOpts, sink chan<- *OmissionAccountabilityInactivityJailingEvent) (event.Subscription, error) {

	logs, sub, err := _OmissionAccountability.contract.WatchLogs(opts, "InactivityJailingEvent")
	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(OmissionAccountabilityInactivityJailingEvent)
				if err := _OmissionAccountability.contract.UnpackLog(event, "InactivityJailingEvent", 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
}

// ParseInactivityJailingEvent is a log parse operation binding the contract event 0xb057cb17fba40b7eb122da4822729894f42ef37e5e2b74e6081fd7efe5de4b64.
//
// Solidity: event InactivityJailingEvent(address validator, uint256 releaseBlock)
func (_OmissionAccountability *OmissionAccountabilityFilterer) ParseInactivityJailingEvent(log types.Log) (*OmissionAccountabilityInactivityJailingEvent, error) {
	event := new(OmissionAccountabilityInactivityJailingEvent)
	if err := _OmissionAccountability.contract.UnpackLog(event, "InactivityJailingEvent", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OmissionAccountabilityInactivitySlashingEventIterator is returned from FilterInactivitySlashingEvent and is used to iterate over the raw logs and unpacked data for InactivitySlashingEvent events raised by the OmissionAccountability contract.
type OmissionAccountabilityInactivitySlashingEventIterator struct {
	Event *OmissionAccountabilityInactivitySlashingEvent // 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 *OmissionAccountabilityInactivitySlashingEventIterator) 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(OmissionAccountabilityInactivitySlashingEvent)
			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(OmissionAccountabilityInactivitySlashingEvent)
		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 *OmissionAccountabilityInactivitySlashingEventIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OmissionAccountabilityInactivitySlashingEventIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OmissionAccountabilityInactivitySlashingEvent represents a InactivitySlashingEvent event raised by the OmissionAccountability contract.
type OmissionAccountabilityInactivitySlashingEvent struct {
	Validator    common.Address
	Amount       *big.Int
	ReleaseBlock *big.Int
	IsJailbound  bool
	Raw          types.Log // Blockchain specific contextual infos
}

// FilterInactivitySlashingEvent is a free log retrieval operation binding the contract event 0x3cac37f432247a020a7112d5052bc279f35e1e3b80b0aab0eca49d1773ed3e3f.
//
// Solidity: event InactivitySlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound)
func (_OmissionAccountability *OmissionAccountabilityFilterer) FilterInactivitySlashingEvent(opts *bind.FilterOpts) (*OmissionAccountabilityInactivitySlashingEventIterator, error) {

	logs, sub, err := _OmissionAccountability.contract.FilterLogs(opts, "InactivitySlashingEvent")
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityInactivitySlashingEventIterator{contract: _OmissionAccountability.contract, event: "InactivitySlashingEvent", logs: logs, sub: sub}, nil
}

// WatchInactivitySlashingEvent is a free log subscription operation binding the contract event 0x3cac37f432247a020a7112d5052bc279f35e1e3b80b0aab0eca49d1773ed3e3f.
//
// Solidity: event InactivitySlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound)
func (_OmissionAccountability *OmissionAccountabilityFilterer) WatchInactivitySlashingEvent(opts *bind.WatchOpts, sink chan<- *OmissionAccountabilityInactivitySlashingEvent) (event.Subscription, error) {

	logs, sub, err := _OmissionAccountability.contract.WatchLogs(opts, "InactivitySlashingEvent")
	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(OmissionAccountabilityInactivitySlashingEvent)
				if err := _OmissionAccountability.contract.UnpackLog(event, "InactivitySlashingEvent", 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
}

// ParseInactivitySlashingEvent is a log parse operation binding the contract event 0x3cac37f432247a020a7112d5052bc279f35e1e3b80b0aab0eca49d1773ed3e3f.
//
// Solidity: event InactivitySlashingEvent(address validator, uint256 amount, uint256 releaseBlock, bool isJailbound)
func (_OmissionAccountability *OmissionAccountabilityFilterer) ParseInactivitySlashingEvent(log types.Log) (*OmissionAccountabilityInactivitySlashingEvent, error) {
	event := new(OmissionAccountabilityInactivitySlashingEvent)
	if err := _OmissionAccountability.contract.UnpackLog(event, "InactivitySlashingEvent", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OmissionAccountabilityTotalProposerRewardsIterator is returned from FilterTotalProposerRewards and is used to iterate over the raw logs and unpacked data for TotalProposerRewards events raised by the OmissionAccountability contract.
type OmissionAccountabilityTotalProposerRewardsIterator struct {
	Event *OmissionAccountabilityTotalProposerRewards // 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 *OmissionAccountabilityTotalProposerRewardsIterator) 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(OmissionAccountabilityTotalProposerRewards)
			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(OmissionAccountabilityTotalProposerRewards)
		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 *OmissionAccountabilityTotalProposerRewardsIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OmissionAccountabilityTotalProposerRewardsIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OmissionAccountabilityTotalProposerRewards represents a TotalProposerRewards event raised by the OmissionAccountability contract.
type OmissionAccountabilityTotalProposerRewards struct {
	NtnReward *big.Int
	AtnReward *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterTotalProposerRewards is a free log retrieval operation binding the contract event 0x9a3523e1fe0b3bf0d1084f46d56b3bfe5958389cacfe987a60fac8561dd66095.
//
// Solidity: event TotalProposerRewards(uint256 ntnReward, uint256 atnReward)
func (_OmissionAccountability *OmissionAccountabilityFilterer) FilterTotalProposerRewards(opts *bind.FilterOpts) (*OmissionAccountabilityTotalProposerRewardsIterator, error) {

	logs, sub, err := _OmissionAccountability.contract.FilterLogs(opts, "TotalProposerRewards")
	if err != nil {
		return nil, err
	}
	return &OmissionAccountabilityTotalProposerRewardsIterator{contract: _OmissionAccountability.contract, event: "TotalProposerRewards", logs: logs, sub: sub}, nil
}

// WatchTotalProposerRewards is a free log subscription operation binding the contract event 0x9a3523e1fe0b3bf0d1084f46d56b3bfe5958389cacfe987a60fac8561dd66095.
//
// Solidity: event TotalProposerRewards(uint256 ntnReward, uint256 atnReward)
func (_OmissionAccountability *OmissionAccountabilityFilterer) WatchTotalProposerRewards(opts *bind.WatchOpts, sink chan<- *OmissionAccountabilityTotalProposerRewards) (event.Subscription, error) {

	logs, sub, err := _OmissionAccountability.contract.WatchLogs(opts, "TotalProposerRewards")
	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(OmissionAccountabilityTotalProposerRewards)
				if err := _OmissionAccountability.contract.UnpackLog(event, "TotalProposerRewards", 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
}

// ParseTotalProposerRewards is a log parse operation binding the contract event 0x9a3523e1fe0b3bf0d1084f46d56b3bfe5958389cacfe987a60fac8561dd66095.
//
// Solidity: event TotalProposerRewards(uint256 ntnReward, uint256 atnReward)
func (_OmissionAccountability *OmissionAccountabilityFilterer) ParseTotalProposerRewards(log types.Log) (*OmissionAccountabilityTotalProposerRewards, error) {
	event := new(OmissionAccountabilityTotalProposerRewards)
	if err := _OmissionAccountability.contract.UnpackLog(event, "TotalProposerRewards", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleMetaData contains all meta data concerning the Oracle contract.
var OracleMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_voters\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_nodeAddresses\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_treasuries\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"components\":[{\"internalType\":\"contractIAutonity\",\"name\":\"autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votePeriod\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"outlierDetectionThreshold\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"outlierSlashingThreshold\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonRevealThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revealResetInterval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashingRateCap\",\"type\":\"uint256\"}],\"internalType\":\"structOracle.Config\",\"name\":\"_config\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_nonRevealCount\",\"type\":\"uint256\"}],\"name\":\"CommitRevealMissed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"cause\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"extra\",\"type\":\"uint8\"}],\"name\":\"InvalidVote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"}],\"name\":\"NewSymbols\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"extra\",\"type\":\"uint8\"}],\"name\":\"NewVoter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_missedReveal\",\"type\":\"uint256\"}],\"name\":\"NoRevealPenalty\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_participant\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_slashingAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_median\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint120\",\"name\":\"_reported\",\"type\":\"uint120\"}],\"name\":\"Penalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"PriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reporter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"extra\",\"type\":\"uint8\"}],\"name\":\"SuccessfulVote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ntnReward\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"atnReward\",\"type\":\"uint256\"}],\"name\":\"TotalOracleRewards\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ntn\",\"type\":\"uint256\"}],\"name\":\"distributeRewards\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIAutonity\",\"name\":\"autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"votePeriod\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"outlierDetectionThreshold\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"outlierSlashingThreshold\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"baseSlashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonRevealThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revealResetInterval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slashingRateCap\",\"type\":\"uint256\"}],\"internalType\":\"structOracle.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastRoundBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonRevealThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"getReports\",\"outputs\":[{\"components\":[{\"internalType\":\"uint120\",\"name\":\"price\",\"type\":\"uint120\"},{\"internalType\":\"uint8\",\"name\":\"confidence\",\"type\":\"uint8\"}],\"internalType\":\"structIOracle.Report\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"getRewardPeriodPerformance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_round\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"getRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbolUpdatedRound\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSymbols\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"getVoterInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"commit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"performance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonRevealCount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isVoter\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"reportAvailable\",\"type\":\"bool\"}],\"internalType\":\"structOracle.VoterInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"}],\"name\":\"getVoterTreasuries\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"}],\"name\":\"getVoterValidators\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVoters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"latestRoundData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"structIOracle.RoundData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_resetInterval\",\"type\":\"uint256\"}],\"name\":\"setCommitRevealConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_outlierSlashingThreshold\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"_outlierDetectionThreshold\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_baseSlashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRateCap\",\"type\":\"uint256\"}],\"name\":\"setSlashingConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"_symbols\",\"type\":\"string[]\"}],\"name\":\"setSymbols\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_votePeriod\",\"type\":\"uint256\"}],\"name\":\"setVotePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newVoters\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_treasury\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_validator\",\"type\":\"address[]\"}],\"name\":\"setVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateVotersAndSymbol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_commit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint120\",\"name\":\"price\",\"type\":\"uint120\"},{\"internalType\":\"uint8\",\"name\":\"confidence\",\"type\":\"uint8\"}],\"internalType\":\"structIOracle.Report[]\",\"name\":\"_reports\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_extra\",\"type\":\"uint8\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
	Sigs: map[string]string{
		"59974e38": "distributeRewards(uint256)",
		"4bb278f3": "finalize()",
		"c3f909d4": "getConfig()",
		"f0141d84": "getDecimals()",
		"5a4d3a27": "getLastRoundBlock()",
		"57eba759": "getNewVotePeriod()",
		"077945d3": "getNewVoters()",
		"ed78349d": "getNonRevealThreshold()",
		"fb09917e": "getReports(string,address)",
		"33d16293": "getRewardPeriodPerformance(address)",
		"9f8743f7": "getRound()",
		"3c8510fd": "getRoundData(uint256,string)",
		"99b0014b": "getSymbolUpdatedRound()",
		"df7f710e": "getSymbols()",
		"b78dec52": "getVotePeriod()",
		"9ed1f255": "getVoterInfo(address)",
		"ef5cc4d1": "getVoterTreasuries(address)",
		"2d35d158": "getVoterValidators(address)",
		"cdd72253": "getVoters()",
		"33f98c77": "latestRoundData(string)",
		"3f422ef3": "setCommitRevealConfig(uint256,uint256)",
		"b3ab15fb": "setOperator(address)",
		"da39fbfe": "setSlashingConfig(int256,int256,uint256,uint256)",
		"8d4f75d2": "setSymbols(string[])",
		"67b11630": "setVotePeriod(uint256)",
		"da78110e": "setVoters(address[],address[],address[])",
		"0f65875c": "updateVotersAndSymbol()",
		"56833ebe": "vote(uint256,(uint120,uint8)[],uint256,uint8)",
	},
	Bin: "0x6080604052600160ff1b600a5534801561001857600080fd5b5060405161577f38038061577f83398101604081905261003791610916565b8060e001518160c00151108015610052575060008160e00151115b6100945760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420636f6e66696760901b60448201526064015b60405180910390fd5b8051600180546001600160a01b03199081166001600160a01b039384161790915560208084015160028054909316931692909217905560408201516003556060820151600455608082015160055560a082015160065560c082015160075560e0820151600855610100820151600955825161011591600e919085019061063b565b50815161012990600f90602085019061063b565b5060005b85518110156102835783818151811061014857610148610ae1565b60200260200101516018600088848151811061016657610166610ae1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508481815181106101c4576101c4610ae1565b6020026020010151601960008884815181106101e2576101e2610ae1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001600c600088848151811061024657610246610ae1565b6020908102919091018101516001600160a01b03168252810191909152604001600020600401805460ff191691151591909117905560010161012d565b5061029d856000600188516102989190610b0d565b6102f6565b84516102b0906011906020880190610691565b5084516102c4906012906020880190610691565b506003546010556001601481905560158054909101815560005260408101516102ec906104a3565b5050505050610d64565b80821261030257505050565b818160008560026103138585610b26565b61031d9190610b4d565b6103279087610b89565b8151811061033757610337610ae1565b602002602001015190505b818313610475575b806001600160a01b031686848151811061036657610366610ae1565b60200260200101516001600160a01b0316101561038f578261038781610bb1565b93505061034a565b806001600160a01b03168683815181106103ab576103ab610ae1565b60200260200101516001600160a01b031611156103d457816103cc81610bd0565b92505061038f565b818313610470578582815181106103ed576103ed610ae1565b602002602001015186848151811061040757610407610ae1565b602002602001015187858151811061042157610421610ae1565b6020026020010188858151811061043a5761043a610ae1565b6001600160a01b039384166020918202929092010152911690528261045e81610bb1565b935050818061046c90610bd0565b9250505b610342565b81851215610488576104888686846102f6565b8383121561049b5761049b8684866102f6565b505050505050565b60015460408051630aac2da160e01b815290516000926001600160a01b031691630aac2da19160048083019260209291908290030181865afa1580156104ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105119190610bed565b90508061051f836002610c06565b111561056d5760405162461bcd60e51b815260206004820152601660248201527f766f746520706572696f6420697320746f6f2062696700000000000000000000604482015260640161008b565b60015460408051636fd8d26960e11b815290516001600160a01b039092169163dfb1a4d2916004808201926020929091908290030181865afa1580156105b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105db9190610bed565b9050806105e9836002610c06565b11156106375760405162461bcd60e51b815260206004820152601660248201527f766f746520706572696f6420697320746f6f2062696700000000000000000000604482015260640161008b565b5050565b828054828255906000526020600020908101928215610681579160200282015b8281111561068157825182906106719082610ca6565b509160200191906001019061065b565b5061068d9291506106f2565b5090565b8280548282559060005260206000209081019282156106e6579160200282015b828111156106e657825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906106b1565b5061068d92915061070f565b8082111561068d5760006107068282610724565b506001016106f2565b5b8082111561068d5760008155600101610710565b50805461073090610c1d565b6000825580601f10610740575050565b601f01602090049060005260206000209081019061075e919061070f565b50565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561079a5761079a610761565b60405290565b604051601f8201601f191681016001600160401b03811182821017156107c8576107c8610761565b604052919050565b60006001600160401b038211156107e9576107e9610761565b5060051b60200190565b6001600160a01b038116811461075e57600080fd5b8051610813816107f3565b919050565b600082601f83011261082957600080fd5b815161083c610837826107d0565b6107a0565b8082825260208201915060208360051b86010192508583111561085e57600080fd5b602085015b83811015610884578051610876816107f3565b835260209283019201610863565b5095945050505050565b600061012082840312156108a157600080fd5b6108a9610777565b90506108b482610808565b81526108c260208301610808565b602082015260408281015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e080830151908201526101009182015191810191909152919050565b60008060008060006101a0868803121561092f57600080fd5b85516001600160401b0381111561094557600080fd5b61095188828901610818565b602088015190965090506001600160401b0381111561096f57600080fd5b61097b88828901610818565b604088015190955090506001600160401b0381111561099957600080fd5b6109a588828901610818565b606088015190945090506001600160401b038111156109c357600080fd5b8601601f810188136109d457600080fd5b80516109e2610837826107d0565b8082825260208201915060208360051b85010192508a831115610a0457600080fd5b602084015b83811015610ac05780516001600160401b03811115610a2757600080fd5b8501603f81018d13610a3857600080fd5b60208101516001600160401b03811115610a5457610a54610761565b610a67601f8201601f19166020016107a0565b8181526040838301018f1015610a7c57600080fd5b60005b82811015610a9f5780840160400151602083830181019190915201610a7f565b50600060208383010152808652505050602083019250602081019050610a09565b5080955050505050610ad5876080880161088e565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610b2057610b20610af7565b92915050565b8181036000831280158383131683831282161715610b4657610b46610af7565b5092915050565b600082610b6a57634e487b7160e01b600052601260045260246000fd5b600160ff1b821460001984141615610b8457610b84610af7565b500590565b8082018281126000831280158216821582161715610ba957610ba9610af7565b505092915050565b60006001600160ff1b018201610bc957610bc9610af7565b5060010190565b6000600160ff1b8201610be557610be5610af7565b506000190190565b600060208284031215610bff57600080fd5b5051919050565b8082028115828204841417610b2057610b20610af7565b600181811c90821680610c3157607f821691505b602082108103610c5157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610ca157806000526020600020601f840160051c81016020851015610c7e5750805b601f840160051c820191505b81811015610c9e5760008155600101610c8a565b50505b505050565b81516001600160401b03811115610cbf57610cbf610761565b610cd381610ccd8454610c1d565b84610c57565b6020601f821160018114610d075760008315610cef5750848201515b600019600385901b1c1916600184901b178455610c9e565b600084815260208120601f198516915b82811015610d375787850151825560209485019460019092019101610d17565b5084821015610d555786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b614a0c80610d736000396000f3fe6080604052600436106101a25760003560e01c806399b0014b116100e0578063da39fbfe11610084578063ed78349d11610061578063ed78349d14610509578063ef5cc4d11461051e578063f0141d841461053e578063fb09917e1461055a57005b8063da39fbfe146104a7578063da78110e146104c7578063df7f710e146104e757005b8063b3ab15fb116100bd578063b3ab15fb1461043b578063b78dec521461045b578063c3f909d414610470578063cdd722531461049257005b806399b0014b146103a15780639ed1f255146103b65780639f8743f71461042657005b80634bb278f31161014757806359974e381161012457806359974e38146103395780635a4d3a271461034c57806367b11630146103615780638d4f75d21461038157005b80634bb278f3146102df57806356833ebe1461030457806357eba7591461032457005b806333d162931161018057806333d162931461021c57806333f98c771461024a5780633c8510fd1461029f5780633f422ef3146102bf57005b8063077945d3146101a45780630f65875c146101cf5780632d35d158146101e4575b005b3480156101b057600080fd5b506101b96105a1565b6040516101c69190613c49565b60405180910390f35b3480156101db57600080fd5b506101a2610636565b3480156101f057600080fd5b506102046101ff366004613cac565b6107a7565b6040516001600160a01b0390911681526020016101c6565b34801561022857600080fd5b5061023c610237366004613cac565b6107ec565b6040519081526020016101c6565b34801561025657600080fd5b5061026a610265366004613d7c565b61082b565b6040516101c6919081518152602080830151908201526040808301519082015260609182015115159181019190915260800190565b3480156102ab57600080fd5b5061026a6102ba366004613db0565b610937565b3480156102cb57600080fd5b506101a26102da366004613df6565b610a1a565b3480156102eb57600080fd5b506102f4610b52565b60405190151581526020016101c6565b34801561031057600080fd5b506101a261031f366004613e32565b610c9b565b34801561033057600080fd5b5061023c61118a565b6101a2610347366004613ecc565b6111b4565b34801561035857600080fd5b5061023c6111fb565b34801561036d57600080fd5b506101a261037c366004613ecc565b611225565b34801561038d57600080fd5b506101a261039c366004613f08565b6112c5565b3480156103ad57600080fd5b50600a5461023c565b3480156103c257600080fd5b506103d66103d1366004613cac565b611401565b6040516101c69190600060c0820190508251825260208301516020830152604083015160408301526060830151606083015260808301511515608083015260a0830151151560a083015292915050565b34801561043257600080fd5b5061023c6114cd565b34801561044757600080fd5b506101a2610456366004613cac565b6114f7565b34801561046757600080fd5b5061023c611543565b34801561047c57600080fd5b5061048561156d565b6040516101c69190613fc2565b34801561049e57600080fd5b506101b9611653565b3480156104b357600080fd5b506101a26104c236600461403e565b6116dc565b3480156104d357600080fd5b506101a26104e23660046140df565b6118be565b3480156104f357600080fd5b506104fc611a7e565b6040516101c6919061421c565b34801561051557600080fd5b5060075461023c565b34801561052a57600080fd5b50610204610539366004613cac565b611c3c565b34801561054a57600080fd5b50604051601281526020016101c6565b34801561056657600080fd5b5061057a61057536600461422f565b611c7e565b6040805182516001600160781b0316815260209283015160ff1692810192909252016101c6565b60606105af60005460011490565b156105d55760405162461bcd60e51b81526004016105cc9061427c565b60405180910390fd5b601280548060200260200160405190810160405280929190818152602001828054801561062b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161060d575b505050505090505b90565b6001546001600160a01b031633146106605760405162461bcd60e51b81526004016105cc906142b3565b60135460ff1615156001036106e95760005b6012548110156106d4576001600c600060128481548110610695576106956142f6565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600401805460ff1916911515919091179055600101610672565b506013805461ffff1916610100179055610711565b601354610100900460ff16151560010361071157610705611d14565b6013805461ff00191690555b600a5461071f906002614322565b601454036107a557600f805461073791600e91613a9e565b5060005b6011548110156107a3576000600c60006011848154811061075e5761075e6142f6565b60009182526020808320909101546001600160a01b03168352820192909252604001902060040180549115156101000261ff001990921691909117905560010161073b565b505b565b600080546001036107ca5760405162461bcd60e51b81526004016105cc9061427c565b506001600160a01b03808216600090815260196020526040902054165b919050565b6000805460010361080f5760405162461bcd60e51b81526004016105cc9061427c565b506001600160a01b03166000908152601a602052604090205490565b61085860405180608001604052806000815260200160008152602001600081526020016000151581525090565b60005460010361087a5760405162461bcd60e51b81526004016105cc9061427c565b60006015600160145461088d919061434a565b8154811061089d5761089d6142f6565b90600052602060002001836040516108b5919061435d565b90815260408051918290036020908101832060608401835280548452600180820154928501929092526002015460ff1615158383015281516080810190925260145492935060009282916109089161434a565b815260200183600001518152602001836020015181526020018360400151151581525090508092505050919050565b61096460405180608001604052806000815260200160008152602001600081526020016000151581525090565b6000546001036109865760405162461bcd60e51b81526004016105cc9061427c565b60006015848154811061099b5761099b6142f6565b90600052602060002001836040516109b3919061435d565b9081526040805191829003602090810183206060808501845281548552600182015485840190815260029092015460ff16151585850190815284516080810186528a8152955193860193909352905192840192909252511515908201529150505b92915050565b6002546001600160a01b03163314610a445760405162461bcd60e51b81526004016105cc90614379565b8082108015610a535750600081115b610a905760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420636f6e66696760901b60448201526064016105cc565b600854604080516080808252601390820152721c995d99585b14995cd95d125b9d195c9d985b606a1b60a0820152602081019290925281018290524360608201526000805160206149b78339815191529060c00160405180910390a16008819055600754604080516080808252601290820152711b9bdb94995d99585b151a1c995cda1bdb1960721b60a0820152602081019290925281018390524360608201526000805160206149b78339815191529060c00160405180910390a150600755565b6001546000906001600160a01b03163314610b7f5760405162461bcd60e51b81526004016105cc906142b3565b610b87611f0a565b600354600b54610b9791906143a9565b431015610ba657506000610c92565b6000610bb0611f57565b600854601454919250610bc2916143d2565b600003610bd157610bd161212b565b60158054600101815560009081525b600e54811015610c0657610bf48183612181565b610bff6001826143a9565b9050610be0565b50610c0f612908565b43600b81905550600160146000828254610c2991906143a9565b909155505060105460035414610c40576010546003555b601454600354604080519283524260208401528201527f5aec57d81928b24d30b1a2aec0d23d693412c37d7ec106b5d8259413716bb1f49060600160405180910390a1610c8c816129fc565b60019150505b61063360008055565b336000908152600c602052604090206004015460ff16610cfd5760405162461bcd60e51b815260206004820152601960248201527f7265737472696374656420746f206f6e6c7920766f746572730000000000000060448201526064016105cc565b610d05611f0a565b336000908152600c60205260409020601454815403610d565760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b60448201526064016105cc565b60018101805490879055815460145483556000819003610db3576040805133815260ff861660208201527fd2ec8e890a03083998d3e16f98044fd3dd13fe3e61b7bc2e58ee6da43b50af73910160405180910390a150505061117a565b6001601454610dc2919061434a565b8114610e5a57336001600160a01b03167f04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b16001601454610e02919061434a565b60408051608080825260169082015275098c2e6e8acdee8cac8a4deeadcc89ad2e6dac2e8c6d60531b60a08201526020810192909252810184905260ff8716606082015260c0015b60405180910390a250505061117a565b86868633604051602001610e7194939291906143fb565b6040516020818303038152906040528051906020012060001c9750878214610f0557610e9d3384612a8b565b604080516080808252600e908201526d086dedadad2e89ad2e6dac2e8c6d60931b60a08201526020810184905290810189905260ff8516606082015233907f04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b19060c001610e4a565b600e548614610f8057600e54604080516080808252601490820152730a4cae0dee4e898cadccee8d09ad2e6dac2e8c6d60631b60a0820152602081018990529081019190915260ff8516606082015233907f04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b19060c001610e4a565b60005b8681101561112c576064888883818110610f9f57610f9f6142f6565b9050604002016020016020810190610fb79190614477565b60ff1611156110085760405162461bcd60e51b815260206004820152601860248201527f696e76616c696420636f6e666964656e63652073636f7265000000000000000060448201526064016105cc565b600088888381811061101c5761101c6142f6565b6110329260206040909202019081019150614494565b6001600160781b031611801561107457506000888883818110611057576110576142f6565b905060400201602001602081019061106f9190614477565b60ff16115b6110b95760405162461bcd60e51b815260206004820152601660248201527531b7b73334b232b731b297b83934b1b29032b93937b960511b60448201526064016105cc565b8787828181106110cb576110cb6142f6565b905060400201600d600e83815481106110e6576110e66142f6565b906000526020600020016040516110fd91906144e5565b908152604080516020928190038301902033600090815292529020611122828261455a565b5050600101610f83565b5060048301805461ff00191661010017905560405160ff8516815233907f8bdddd7f2f2c74679ffa6beb8f86aa18bfa5baf1bfaf534d0b66596babc53f089060200160405180910390a25050505b61118360008055565b5050505050565b600080546001036111ad5760405162461bcd60e51b81526004016105cc9061427c565b5060105490565b6001546001600160a01b031633146111de5760405162461bcd60e51b81526004016105cc906142b3565b6111e6611f0a565b476111f18183612af8565b506107a360008055565b6000805460010361121e5760405162461bcd60e51b81526004016105cc9061427c565b50600b5490565b6002546001600160a01b0316331461124f5760405162461bcd60e51b81526004016105cc90614379565b61125881612d89565b6010819055600354600b546000805160206149b7833981519152919083906112819083906143a9565b604080516080808252600a90820152691d9bdd1954195c9a5bd960b21b60a08201526020810194909452830191909152606082015260c0015b60405180910390a150565b6002546001600160a01b031633146112ef5760405162461bcd60e51b81526004016105cc90614379565b80516000036113395760405162461bcd60e51b815260206004820152601660248201527573796d626f6c732063616e277420626520656d70747960501b60448201526064016105cc565b601454600a5461134a906001614322565b1415801561135c5750601454600a5414155b6113a85760405162461bcd60e51b815260206004820152601e60248201527f63616e2774206265207570646174656420696e207468697320726f756e64000060448201526064016105cc565b80516113bb90600f906020840190613af6565b50601454600a8190557faa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d9082906113f39060016143a9565b6040516112ba9291906145bb565b61143e6040518060c00160405280600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b6000546001036114605760405162461bcd60e51b81526004016105cc9061427c565b506001600160a01b03166000908152600c6020908152604091829020825160c081018452815481526001820154928101929092526002810154928201929092526003820154606082015260049091015460ff8082161515608084015261010090910416151560a082015290565b600080546001036114f05760405162461bcd60e51b81526004016105cc9061427c565b5060145490565b6001546001600160a01b031633146115215760405162461bcd60e51b81526004016105cc906142b3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001036115665760405162461bcd60e51b81526004016105cc9061427c565b5060035490565b6115ce60405180610120016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000546001036115f05760405162461bcd60e51b81526004016105cc9061427c565b5060408051610120810182526001546001600160a01b039081168252600254166020820152600354918101919091526004546060820152600554608082015260065460a082015260075460c082015260085460e082015260095461010082015290565b606061166160005460011490565b1561167e5760405162461bcd60e51b81526004016105cc9061427c565b601180548060200260200160405190810160405280929190818152602001828054801561062b576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161060d575050505050905090565b6002546001600160a01b031633146117065760405162461bcd60e51b81526004016105cc90614379565b6005546040805160808082526018908201527f6f75746c696572536c617368696e675468726573686f6c64000000000000000060a0820152602081019290925281018590524360608201527fb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c9060c00160405180910390a160058490556004546040805160808082526019908201527f6f75746c696572446574656374696f6e5468726573686f6c640000000000000060a0820152602081019290925281018490524360608201527fb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c9060c00160405180910390a160048390556006546040805160808082526010908201526f62617365536c617368696e675261746560801b60a0820152602081019290925281018390524360608201526000805160206149b78339815191529060c00160405180910390a16006829055600954604080516080808252600f908201526e0736c617368696e675261746543617608c1b60a0820152602081019290925281018290524360608201526000805160206149b78339815191529060c00160405180910390a1600955505050565b6001546001600160a01b031633146118e85760405162461bcd60e51b81526004016105cc906142b3565b6118f0611f0a565b82516000036119395760405162461bcd60e51b8152602060048201526015602482015274566f746572732063616e277420626520656d70747960581b60448201526064016105cc565b60005b8351811015611a3557828181518110611957576119576142f6565b602002602001015160186000868481518110611975576119756142f6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508181815181106119d3576119d36142f6565b6020026020010151601960008684815181106119f1576119f16142f6565b6020908102919091018101516001600160a01b0390811683529082019290925260400160002080546001600160a01b0319169290911691909117905560010161193c565b50611a4f83600060018651611a4a919061434a565b612f0f565b8251611a62906012906020860190613b3c565b506013805460ff19166001179055611a7960008055565b505050565b6060601454600a546001611a929190614322565b03611b6e57600f805480602002602001604051908101604052809291908181526020016000905b82821015611b65578382906000526020600020018054611ad8906144b1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b04906144b1565b8015611b515780601f10611b2657610100808354040283529160200191611b51565b820191906000526020600020905b815481529060010190602001808311611b3457829003601f168201915b505050505081526020019060010190611ab9565b50505050905090565b600e805480602002602001604051908101604052809291908181526020016000905b82821015611b65578382906000526020600020018054611baf906144b1565b80601f0160208091040260200160405190810160405280929190818152602001828054611bdb906144b1565b8015611c285780601f10611bfd57610100808354040283529160200191611c28565b820191906000526020600020905b815481529060010190602001808311611c0b57829003601f168201915b505050505081526020019060010190611b90565b60008054600103611c5f5760405162461bcd60e51b81526004016105cc9061427c565b506001600160a01b039081166000908152601860205260409020541690565b6040805180820190915260008082526020820152600054600103611cb45760405162461bcd60e51b81526004016105cc9061427c565b600d83604051611cc4919061435d565b90815260408051602092819003830181206001600160a01b0395909516600090815294835293819020848201909152546001600160781b0381168452600160781b900460ff169083015250919050565b6000805b60115482108015611d2a575060125481105b15611e7e5760128181548110611d4257611d426142f6565b600091825260209091200154601180546001600160a01b039092169184908110611d6e57611d6e6142f6565b6000918252602090912001546001600160a01b031603611da85781611d92816145dd565b9250508080611da0906145dd565b915050611d18565b60128181548110611dbb57611dbb6142f6565b600091825260209091200154601180546001600160a01b039092169184908110611de757611de76142f6565b6000918252602090912001546001600160a01b03161015611e7457600c600060118481548110611e1957611e196142f6565b60009182526020808320909101546001600160a01b03168352820192909252604001812081815560018101829055600281018290556003810191909155600401805461ffff1916905581611e6c816145dd565b925050611d18565b80611da0816145dd565b601154821015611efa57600c600060118481548110611e9f57611e9f6142f6565b60009182526020808320909101546001600160a01b03168352820192909252604001812081815560018101829055600281018290556003810191909155600401805461ffff1916905581611ef2816145dd565b925050611e7e565b60128054611a7991601191613b9d565b60005415611f505760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b60448201526064016105cc565b6001600055565b6011546060906000906001600160401b03811115611f7757611f77613cc7565b604051908082528060200260200182016040528015611fa0578160200160208202803683370190505b50905060005b60115481101561212557600060118281548110611fc557611fc56142f6565b60009182526020808320909101546001600160a01b0316808352600c909152604090912060145491925090611ffc9060019061434a565b815414801561200f575060008160010154115b1561201e5761201e8282612a8b565b6007546003820154111561211b576001848481518110612040576120406142f6565b911515602092830291909101820152601454600383015460408051928352928201526001600160a01b038416917f9e6b40f10c60d1ad09594f3b6ed7043d0e978f584d354ace6e1f6025660c42b1910160405180910390a2600060038201556001546009546040516302fb4d8560e01b81526001600160a01b03858116600483015260248201929092529116906302fb4d85906044016020604051808303816000875af11580156120f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211991906145f6565b505b5050600101611fa6565b50919050565b60005b6011548110156107a3576000600c600060118481548110612151576121516142f6565b60009182526020808320909101546001600160a01b0316835282019290925260400190206003015560010161212e565b6000600e8381548110612196576121966142f6565b9060005260206000200180546121ab906144b1565b80601f01602080910402602001604051908101604052809291908181526020018280546121d7906144b1565b80156122245780601f106121f957610100808354040283529160200191612224565b820191906000526020600020905b81548152906001019060200180831161220757829003601f168201915b5050505050905060006011805490506001600160401b0381111561224a5761224a613cc7565b60405190808252806020026020018201604052801561228f57816020015b60408051808201909152600080825260208201528152602001906001900390816122685790505b5090506000805b60115481101561237f576000601182815481106122b5576122b56142f6565b60009182526020808320909101546001600160a01b0316808352600c90915260409091206004015490915060ff610100909104166122f35750612377565b600d85604051612303919061435d565b9081526040805191829003602090810183206001600160a01b038516600090815290825282902083830190925290546001600160781b038116835260ff600160781b90910416908201528484612358816145dd565b95508151811061236a5761236a6142f6565b6020026020010181905250505b600101612296565b5080156127d657600061239283836130bc565b6001600160781b0316905060006123a9828661318c565b6060810151909150156126a35760005b81602001518110156125ab57600061248d836000015183815181106123e0576123e06142f6565b602002602001015185600d8a6040516123f9919061435d565b90815260200160405180910390206000601188600001518881518110612421576124216142f6565b602002602001015181548110612439576124396142f6565b60009182526020808320909101546001600160a01b0316835282810193909352604091820190208151808301909252546001600160781b038116825260ff600160781b90910416918101919091528b6134ab565b90506011836000015183815181106124a7576124a76142f6565b6020026020010151815481106124bf576124bf6142f6565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b03167f372858b237c8bd0714183e8351a461d6c3cb1ef83806181b36bf5943711f4f57828987600d8c60405161251a919061435d565b9081526020016040518091039020600060118a600001518a81518110612542576125426142f6565b60200260200101518154811061255a5761255a6142f6565b60009182526020808320909101546001600160a01b03168352820192909252604090810190912054905161259a949392916001600160781b03169061460f565b60405180910390a2506001016123b9565b5060006125c08260400151836060015161365c565b90506040518060600160405280828152602001428152602001600115158152506015601454815481106125f5576125f56142f6565b906000526020600020018760405161260d919061435d565b9081526040805160209281900383018120845181559284015160018401559201516002909101805460ff191691151591909117905561264d90879061435d565b604080519182900382206014548484526020840152600183830152426060840152905190917f5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c919081900360800190a2506127cf565b6000601560016014546126b6919061434a565b815481106126c6576126c66142f6565b90600052602060002001866040516126de919061435d565b9081526020016040518091039020600001549050604051806060016040528082815260200142815260200160001515815250601560145481548110612725576127256142f6565b906000526020600020018760405161273d919061435d565b9081526040805160209281900383018120845181559284015160018401559201516002909101805460ff191691151591909117905561277d90879061435d565b604080519182900382206014548484526020840152600083830152426060840152905190917f5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c919081900360800190a2505b5050611183565b6000601560016014546127e9919061434a565b815481106127f9576127f96142f6565b9060005260206000200184604051612811919061435d565b9081526020016040518091039020600001549050604051806060016040528082815260200142815260200160001515815250601560145481548110612858576128586142f6565b9060005260206000200185604051612870919061435d565b9081526040805160209281900383018120845181559284015160018401559201516002909101805460ff19169115159190911790556128b090859061435d565b604080519182900382206014548484526020840152600083830152426060840152905190917f5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c919081900360800190a2505050505050565b60005b6011548110156107a35760006011828154811061292a5761292a6142f6565b60009182526020808320909101546001600160a01b0316808352600c909152604090912060020154909150156129f357612965601682613712565b506001600160a01b0381166000908152600c6020908152604080832060020154601a909252822080549192909161299d9084906143a9565b90915550506001600160a01b0381166000908152600c6020526040812060020154601b8054919290916129d19084906143a9565b90915550506001600160a01b0381166000908152600c60205260408120600201555b5060010161290b565b60005b601154811015612a8757818181518110612a1b57612a1b6142f6565b602002602001015115612a7f576000600c600060118481548110612a4157612a416142f6565b60009182526020808320909101546001600160a01b03168352820192909252604001902060040180549115156101000261ff00199092169190911790555b6001016129ff565b5050565b600381018054906000612a9d836145dd565b9190505550816001600160a01b03167f176956a4e941f6737f81a3c9a09d8571dd0438d86e25a432beb2013aced430926014548360030154604051612aec929190918252602082015260400190565b60405180910390a25050565b601b54600003612b06575050565b6000612b12601661372e565b905060005b8151811015612d45576000828281518110612b3457612b346142f6565b602002602001015190506000601b54601a6000846001600160a01b03166001600160a01b031681526020019081526020016000205487612b749190614648565b612b7e919061465f565b601b546001600160a01b0384166000908152601a602052604081205492935091612ba89088614648565b612bb2919061465f565b90508115612c8b576001600160a01b03838116600090815260186020526040808220549051919283929116906108fc90869084818181858888f193505050503d8060008114612c1d576040519150601f19603f3d011682016040523d82523d6000602084013e612c22565b606091505b509092509050811515600003612c88576001600160a01b03808616600090815260186020526040908190205490517f1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d35292612c7f9216908490614673565b60405180910390a15b50505b8015612d11576001546001600160a01b03848116600090815260196020526040808220549051630f7fcc5160e41b8152908316600482015260248101859052604481019190915291169063f7fcc51090606401600060405180830381600087803b158015612cf857600080fd5b505af1158015612d0c573d6000803e3d6000fd5b505050505b6001600160a01b0383166000908152601a6020526040812055612d3560168461373b565b505060019092019150612b179050565b5060408051838152602081018590527f3e5aaff9e8fd4293ae18127809c2d4069d87fe10c7de92aa39557a1edbd48fec910160405180910390a150506000601b5550565b60015460408051630aac2da160e01b815290516000926001600160a01b031691630aac2da19160048083019260209291908290030181865afa158015612dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df791906145f6565b905080612e05836002614648565b1115612e4c5760405162461bcd60e51b8152602060048201526016602482015275766f746520706572696f6420697320746f6f2062696760501b60448201526064016105cc565b60015460408051636fd8d26960e11b815290516001600160a01b039092169163dfb1a4d2916004808201926020929091908290030181865afa158015612e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eba91906145f6565b905080612ec8836002614648565b1115612a875760405162461bcd60e51b8152602060048201526016602482015275766f746520706572696f6420697320746f6f2062696760501b60448201526064016105cc565b808212612f1b57505050565b81816000856002612f2c85856146a2565b612f3691906146c2565b612f409087614322565b81518110612f5057612f506142f6565b602002602001015190505b81831361308e575b806001600160a01b0316868481518110612f7f57612f7f6142f6565b60200260200101516001600160a01b03161015612fa85782612fa0816146f0565b935050612f63565b806001600160a01b0316868381518110612fc457612fc46142f6565b60200260200101516001600160a01b03161115612fed5781612fe581614708565b925050612fa8565b81831361308957858281518110613006576130066142f6565b6020026020010151868481518110613020576130206142f6565b602002602001015187858151811061303a5761303a6142f6565b60200260200101888581518110613053576130536142f6565b6001600160a01b0393841660209182029290920101529116905282613077816146f0565b935050818061308590614708565b9250505b612f5b565b818512156130a1576130a1868684612f0f565b838312156130b4576130b4868486612f0f565b505050505050565b6000816000036130ce57506000610a14565b6130e48360006130df60018661434a565b613750565b60006130f160028461465f565b90506130fe6002846143d2565b1561312657838181518110613115576131156142f6565b602002602001015160000151613184565b600284828151811061313a5761313a6142f6565b60200260200101516000015185600184613154919061434a565b81518110613164576131646142f6565b60200260200101516000015161317a9190614725565b6131849190614744565b949350505050565b6131b76040518060800160405280606081526020016000815260200160608152602001600081525090565b6131e26040518060800160405280606081526020016000815260200160608152602001600081525090565b6011546001600160401b038111156131fc576131fc613cc7565b60405190808252806020026020018201604052801561324157816020015b604080518082019091526000808252602082015281526020019060019003908161321a5790505b5060408201526011546001600160401b0381111561326157613261613cc7565b60405190808252806020026020018201604052801561328a578160200160208202803683370190505b50815260005b6011548110156134a3576000601182815481106132af576132af6142f6565b60009182526020808320909101546001600160a01b0316808352600c90915260409091206004015490915060ff610100909104166132ed575061349b565b600086600d87604051613300919061435d565b90815260408051602092819003830190206001600160a01b03861660009081529252902054613338906001600160781b0316896146a2565b613343906064614772565b61334d91906146c2565b600454909150811380159061336f575060045461336c82600019614772565b13155b1561346557600d86604051613384919061435d565b9081526040805191829003602090810183206001600160a01b03861660009081529082528290208383018352546001600160781b038116845260ff600160781b9091041690830152850151606086018051906133df826145dd565b9052815181106133f1576133f16142f6565b6020026020010181905250600d8660405161340c919061435d565b90815260408051602092819003830190206001600160a01b038516600090815290835281812054600c9093529081206002018054600160781b90930460ff169290919061345a9084906143a9565b909155506134989050565b8351602085018051859291613479826145dd565b90528151811061348b5761348b6142f6565b6020026020010181815250505b50505b600101613290565b509392505050565b600080601186815481106134c1576134c16142f6565b60009182526020808320909101546001600160a01b0316808352600c9091526040909120600401805461ff00191690558351909150839087908110613508576135086142f6565b60200260200101511561351f576000915050613184565b6000858686600001516001600160781b031661353b91906146a2565b613546906064614772565b61355091906146c2565b905061355c8180614772565b600554909150811361357357600092505050613184565b6000612710600160050154876020015160ff166001600401548561359791906146a2565b6135a19190614648565b6135ab9190614648565b6135b5919061465f565b6009549091508111156135c757506009545b6001546001600160a01b03848116600090815260196020526040908190205490516302fb4d8560e01b81529082166004820152602481018490529116906302fb4d85906044016020604051808303816000875af115801561362c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365091906145f6565b98975050505050505050565b60008080805b848110156136fe5785818151811061367c5761367c6142f6565b60200260200101516020015160ff1686828151811061369d5761369d6142f6565b6020026020010151600001516136b391906147a2565b6136c6906001600160781b0316836143a9565b91508581815181106136da576136da6142f6565b60200260200101516020015160ff16836136f491906143a9565b9250600101613662565b50613709828261465f565b95945050505050565b6000613727836001600160a01b0384166138f9565b9392505050565b6060600061372783613948565b6000613727836001600160a01b0384166139a4565b8181808203613760575050505050565b600085600261376f87876146a2565b61377991906146c2565b6137839087614322565b81518110613793576137936142f6565b60200260200101516000015190505b8183136138d3575b806001600160781b03168684815181106137c6576137c66142f6565b6020026020010151600001516001600160781b031610156137f357826137eb816146f0565b9350506137aa565b858281518110613805576138056142f6565b6020026020010151600001516001600160781b0316816001600160781b0316101561383c578161383481614708565b9250506137f3565b8183136138ce57858281518110613855576138556142f6565b602002602001015186848151811061386f5761386f6142f6565b6020026020010151878581518110613889576138896142f6565b602002602001018885815181106138a2576138a26142f6565b60200260200101829052829052505081806138bc90614708565b92505082806138ca906146f0565b9350505b6137a2565b818512156138e6576138e6868684613750565b838312156130b4576130b4868486613750565b600081815260018301602052604081205461394057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a14565b506000610a14565b60608160000180548060200260200160405190810160405280929190818152602001828054801561399857602002820191906000526020600020905b815481526020019060010190808311613984575b50505050509050919050565b60008181526001830160205260408120548015613a8d5760006139c860018361434a565b85549091506000906139dc9060019061434a565b9050808214613a415760008660000182815481106139fc576139fc6142f6565b9060005260206000200154905080876000018481548110613a1f57613a1f6142f6565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613a5257613a526147c4565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a14565b6000915050610a14565b5092915050565b828054828255906000526020600020908101928215613ae65760005260206000209182015b82811115613ae65781613ad68482614821565b5091600101919060010190613ac3565b50613af2929150613bdd565b5090565b828054828255906000526020600020908101928215613ae6579160200282015b82811115613ae65782518290613b2c9082614900565b5091602001919060010190613b16565b828054828255906000526020600020908101928215613b91579160200282015b82811115613b9157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613b5c565b50613af2929150613bfa565b828054828255906000526020600020908101928215613b915760005260206000209182015b82811115613b91578254825591600101919060010190613bc2565b80821115613af2576000613bf18282613c0f565b50600101613bdd565b5b80821115613af25760008155600101613bfb565b508054613c1b906144b1565b6000825580601f10613c2b575050565b601f0160209004906000526020600020908101906107a39190613bfa565b602080825282518282018190526000918401906040840190835b81811015613c8a5783516001600160a01b0316835260209384019390920191600101613c63565b509095945050505050565b80356001600160a01b03811681146107e757600080fd5b600060208284031215613cbe57600080fd5b61372782613c95565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613d0557613d05613cc7565b604052919050565b600082601f830112613d1e57600080fd5b81356001600160401b03811115613d3757613d37613cc7565b613d4a601f8201601f1916602001613cdd565b818152846020838601011115613d5f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613d8e57600080fd5b81356001600160401b03811115613da457600080fd5b61318484828501613d0d565b60008060408385031215613dc357600080fd5b8235915060208301356001600160401b03811115613de057600080fd5b613dec85828601613d0d565b9150509250929050565b60008060408385031215613e0957600080fd5b50508035926020909101359150565b60ff811681146107a357600080fd5b80356107e781613e18565b600080600080600060808688031215613e4a57600080fd5b8535945060208601356001600160401b03811115613e6757600080fd5b8601601f81018813613e7857600080fd5b80356001600160401b03811115613e8e57600080fd5b8860208260061b8401011115613ea357600080fd5b6020919091019450925060408601359150613ec060608701613e27565b90509295509295909350565b600060208284031215613ede57600080fd5b5035919050565b60006001600160401b03821115613efe57613efe613cc7565b5060051b60200190565b600060208284031215613f1a57600080fd5b81356001600160401b03811115613f3057600080fd5b8201601f81018413613f4157600080fd5b8035613f54613f4f82613ee5565b613cdd565b8082825260208201915060208360051b850101925086831115613f7657600080fd5b602084015b83811015613fb75780356001600160401b03811115613f9957600080fd5b613fa889602083890101613d0d565b84525060209283019201613f7b565b509695505050505050565b81516001600160a01b03168152602080830151610120830191613fef908401826001600160a01b03169052565b5060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b6000806000806080858703121561405457600080fd5b5050823594602084013594506040840135936060013592509050565b600082601f83011261408157600080fd5b813561408f613f4f82613ee5565b8082825260208201915060208360051b8601019250858311156140b157600080fd5b602085015b838110156140d5576140c781613c95565b8352602092830192016140b6565b5095945050505050565b6000806000606084860312156140f457600080fd5b83356001600160401b0381111561410a57600080fd5b61411686828701614070565b93505060208401356001600160401b0381111561413257600080fd5b61413e86828701614070565b92505060408401356001600160401b0381111561415a57600080fd5b61416686828701614070565b9150509250925092565b60005b8381101561418b578181015183820152602001614173565b50506000910152565b600081518084526141ac816020860160208601614170565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b8381101561421057601f198584030188526141fa838351614194565b60209889019890935091909101906001016141de565b50909695505050505050565b60208152600061372760208301846141c0565b6000806040838503121561424257600080fd5b82356001600160401b0381111561425857600080fd5b61426485828601613d0d565b92505061427360208401613c95565b90509250929050565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b60208082526023908201527f7265737472696374656420746f20746865206175746f6e69747920636f6e74726040820152621858dd60ea1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820182811260008312801582168215821617156143425761434261430c565b505092915050565b81810381811115610a1457610a1461430c565b6000825161436f818460208701614170565b9190910192915050565b6020808252601690820152753932b9ba3934b1ba32b2103a379037b832b930ba37b960511b604082015260600190565b80820180821115610a1457610a1461430c565b634e487b7160e01b600052601260045260246000fd5b6000826143e1576143e16143bc565b500690565b6001600160781b03811681146107a357600080fd5b6060808252810184905260008560808301825b87811015614454578235614421816143e6565b6001600160781b03168252602083013561443a81613e18565b60ff1660208301526040928301929091019060010161440e565b50602084019590955250506001600160a01b039190911660409091015292915050565b60006020828403121561448957600080fd5b813561372781613e18565b6000602082840312156144a657600080fd5b8135613727816143e6565b600181811c908216806144c557607f821691505b60208210810361212557634e487b7160e01b600052602260045260246000fd5b60008083546144f3816144b1565b60018216801561450a576001811461451f5761454f565b60ff198316865281151582028601935061454f565b86600052602060002060005b838110156145475781548882015260019091019060200161452b565b505081860193505b509195945050505050565b8135614565816143e6565b6001600160781b03811690508154816001600160781b03198216178355602084013561459081613e18565b6fffffffffffffffffffffffffffffffff199190911690911760789190911b60ff60781b1617905550565b6040815260006145ce60408301856141c0565b90508260208301529392505050565b6000600182016145ef576145ef61430c565b5060010190565b60006020828403121561460857600080fd5b5051919050565b8481526080602082015260006146286080830186614194565b90508360408301526001600160781b038316606083015295945050505050565b8082028115828204841417610a1457610a1461430c565b60008261466e5761466e6143bc565b500490565b60018060a01b038316815260606020820152600060608201526080604082015260006131846080830184614194565b8181036000831280158383131683831282161715613a9757613a9761430c565b6000826146d1576146d16143bc565b600160ff1b8214600019841416156146eb576146eb61430c565b500590565b60006001600160ff1b0182016145ef576145ef61430c565b6000600160ff1b820161471d5761471d61430c565b506000190190565b6001600160781b038181168382160190811115610a1457610a1461430c565b60006001600160781b0383168061475d5761475d6143bc565b806001600160781b0384160491505092915050565b80820260008212600160ff1b8414161561478e5761478e61430c565b8181058314821517610a1457610a1461430c565b6001600160781b038181168382160290811690818114613a9757613a9761430c565b634e487b7160e01b600052603160045260246000fd5b601f821115611a7957806000526020600020601f840160051c810160208510156148015750805b601f840160051c820191505b81811015611183576000815560010161480d565b81810361482c575050565b61483682546144b1565b6001600160401b0381111561484d5761484d613cc7565b6148618161485b84546144b1565b846147da565b6000601f821160018114614898576000831561487d5750848201545b600184901b600019600386901b1c198216175b855550611183565b600085815260209020601f19841690600086815260209020845b838110156148d257828601548255600195860195909101906020016148b2565b50858310156148f05781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b81516001600160401b0381111561491957614919613cc7565b6149278161485b84546144b1565b6020601f821160018114614959576000831561487d575081850151600184901b600019600386901b1c19821617614890565b600084815260208120601f198516915b828110156149895787850151825560209485019460019092019101614969565b50848210156149a75786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fe207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1baa264697066735822122082c79f8b4391fcda9be0222d4df856d508299eceb0c752ec76c03f1f0ff5cdaf64736f6c634300081e0033",
}

// OracleABI is the input ABI used to generate the binding from.
// Deprecated: Use OracleMetaData.ABI instead.
var OracleABI = OracleMetaData.ABI

// Deprecated: Use OracleMetaData.Sigs instead.
// OracleFuncSigs maps the 4-byte function signature to its string representation.
var OracleFuncSigs = OracleMetaData.Sigs

// OracleBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use OracleMetaData.Bin instead.
var OracleBin = OracleMetaData.Bin

// DeployOracle deploys a new Ethereum contract, binding an instance of Oracle to it.
func DeployOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _voters []common.Address, _nodeAddresses []common.Address, _treasuries []common.Address, _symbols []string, _config OracleConfig) (common.Address, *types.Transaction, *Oracle, error) {
	parsed, err := OracleMetaData.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(OracleBin), backend, _voters, _nodeAddresses, _treasuries, _symbols, _config)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Oracle{OracleCaller: OracleCaller{contract: contract}, OracleTransactor: OracleTransactor{contract: contract}, OracleFilterer: OracleFilterer{contract: contract}}, nil
}

// Oracle is an auto generated Go binding around an Ethereum contract.
type Oracle struct {
	OracleCaller     // Read-only binding to the contract
	OracleTransactor // Write-only binding to the contract
	OracleFilterer   // Log filterer for contract events
}

// OracleCaller is an auto generated read-only Go binding around an Ethereum contract.
type OracleCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// OracleTransactor is an auto generated write-only Go binding around an Ethereum contract.
type OracleTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// OracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type OracleFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// OracleSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type OracleSession struct {
	Contract     *Oracle           // 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
}

// OracleCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type OracleCallerSession struct {
	Contract *OracleCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts // Call options to use throughout this session
}

// OracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type OracleTransactorSession struct {
	Contract     *OracleTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}

// OracleRaw is an auto generated low-level Go binding around an Ethereum contract.
type OracleRaw struct {
	Contract *Oracle // Generic contract binding to access the raw methods on
}

// OracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type OracleCallerRaw struct {
	Contract *OracleCaller // Generic read-only contract binding to access the raw methods on
}

// OracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type OracleTransactorRaw struct {
	Contract *OracleTransactor // Generic write-only contract binding to access the raw methods on
}

// NewOracle creates a new instance of Oracle, bound to a specific deployed contract.
func NewOracle(address common.Address, backend bind.ContractBackend) (*Oracle, error) {
	contract, err := bindOracle(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Oracle{OracleCaller: OracleCaller{contract: contract}, OracleTransactor: OracleTransactor{contract: contract}, OracleFilterer: OracleFilterer{contract: contract}}, nil
}

// NewOracleCaller creates a new read-only instance of Oracle, bound to a specific deployed contract.
func NewOracleCaller(address common.Address, caller bind.ContractCaller) (*OracleCaller, error) {
	contract, err := bindOracle(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &OracleCaller{contract: contract}, nil
}

// NewOracleTransactor creates a new write-only instance of Oracle, bound to a specific deployed contract.
func NewOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*OracleTransactor, error) {
	contract, err := bindOracle(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &OracleTransactor{contract: contract}, nil
}

// NewOracleFilterer creates a new log filterer instance of Oracle, bound to a specific deployed contract.
func NewOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*OracleFilterer, error) {
	contract, err := bindOracle(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &OracleFilterer{contract: contract}, nil
}

// bindOracle binds a generic wrapper to an already deployed contract.
func bindOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(OracleABI))
	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 (_Oracle *OracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Oracle.Contract.OracleCaller.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 (_Oracle *OracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Oracle.Contract.OracleTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Oracle *OracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Oracle.Contract.OracleTransactor.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 (_Oracle *OracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Oracle.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 (_Oracle *OracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Oracle.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Oracle *OracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Oracle.Contract.contract.Transact(opts, method, params...)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((address,address,uint256,int256,int256,uint256,uint256,uint256,uint256))
func (_Oracle *OracleCaller) GetConfig(opts *bind.CallOpts) (OracleConfig, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getConfig")

	if err != nil {
		return *new(OracleConfig), err
	}

	out0 := *abi.ConvertType(out[0], new(OracleConfig)).(*OracleConfig)

	return out0, err

}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((address,address,uint256,int256,int256,uint256,uint256,uint256,uint256))
func (_Oracle *OracleSession) GetConfig() (OracleConfig, error) {
	return _Oracle.Contract.GetConfig(&_Oracle.CallOpts)
}

// GetConfig is a free data retrieval call binding the contract method 0xc3f909d4.
//
// Solidity: function getConfig() view returns((address,address,uint256,int256,int256,uint256,uint256,uint256,uint256))
func (_Oracle *OracleCallerSession) GetConfig() (OracleConfig, error) {
	return _Oracle.Contract.GetConfig(&_Oracle.CallOpts)
}

// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84.
//
// Solidity: function getDecimals() pure returns(uint8)
func (_Oracle *OracleCaller) GetDecimals(opts *bind.CallOpts) (uint8, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getDecimals")

	if err != nil {
		return *new(uint8), err
	}

	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)

	return out0, err

}

// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84.
//
// Solidity: function getDecimals() pure returns(uint8)
func (_Oracle *OracleSession) GetDecimals() (uint8, error) {
	return _Oracle.Contract.GetDecimals(&_Oracle.CallOpts)
}

// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84.
//
// Solidity: function getDecimals() pure returns(uint8)
func (_Oracle *OracleCallerSession) GetDecimals() (uint8, error) {
	return _Oracle.Contract.GetDecimals(&_Oracle.CallOpts)
}

// GetLastRoundBlock is a free data retrieval call binding the contract method 0x5a4d3a27.
//
// Solidity: function getLastRoundBlock() view returns(uint256)
func (_Oracle *OracleCaller) GetLastRoundBlock(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getLastRoundBlock")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetLastRoundBlock is a free data retrieval call binding the contract method 0x5a4d3a27.
//
// Solidity: function getLastRoundBlock() view returns(uint256)
func (_Oracle *OracleSession) GetLastRoundBlock() (*big.Int, error) {
	return _Oracle.Contract.GetLastRoundBlock(&_Oracle.CallOpts)
}

// GetLastRoundBlock is a free data retrieval call binding the contract method 0x5a4d3a27.
//
// Solidity: function getLastRoundBlock() view returns(uint256)
func (_Oracle *OracleCallerSession) GetLastRoundBlock() (*big.Int, error) {
	return _Oracle.Contract.GetLastRoundBlock(&_Oracle.CallOpts)
}

// GetNewVotePeriod is a free data retrieval call binding the contract method 0x57eba759.
//
// Solidity: function getNewVotePeriod() view returns(uint256)
func (_Oracle *OracleCaller) GetNewVotePeriod(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getNewVotePeriod")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetNewVotePeriod is a free data retrieval call binding the contract method 0x57eba759.
//
// Solidity: function getNewVotePeriod() view returns(uint256)
func (_Oracle *OracleSession) GetNewVotePeriod() (*big.Int, error) {
	return _Oracle.Contract.GetNewVotePeriod(&_Oracle.CallOpts)
}

// GetNewVotePeriod is a free data retrieval call binding the contract method 0x57eba759.
//
// Solidity: function getNewVotePeriod() view returns(uint256)
func (_Oracle *OracleCallerSession) GetNewVotePeriod() (*big.Int, error) {
	return _Oracle.Contract.GetNewVotePeriod(&_Oracle.CallOpts)
}

// GetNewVoters is a free data retrieval call binding the contract method 0x077945d3.
//
// Solidity: function getNewVoters() view returns(address[])
func (_Oracle *OracleCaller) GetNewVoters(opts *bind.CallOpts) ([]common.Address, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getNewVoters")

	if err != nil {
		return *new([]common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)

	return out0, err

}

// GetNewVoters is a free data retrieval call binding the contract method 0x077945d3.
//
// Solidity: function getNewVoters() view returns(address[])
func (_Oracle *OracleSession) GetNewVoters() ([]common.Address, error) {
	return _Oracle.Contract.GetNewVoters(&_Oracle.CallOpts)
}

// GetNewVoters is a free data retrieval call binding the contract method 0x077945d3.
//
// Solidity: function getNewVoters() view returns(address[])
func (_Oracle *OracleCallerSession) GetNewVoters() ([]common.Address, error) {
	return _Oracle.Contract.GetNewVoters(&_Oracle.CallOpts)
}

// GetNonRevealThreshold is a free data retrieval call binding the contract method 0xed78349d.
//
// Solidity: function getNonRevealThreshold() view returns(uint256)
func (_Oracle *OracleCaller) GetNonRevealThreshold(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getNonRevealThreshold")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetNonRevealThreshold is a free data retrieval call binding the contract method 0xed78349d.
//
// Solidity: function getNonRevealThreshold() view returns(uint256)
func (_Oracle *OracleSession) GetNonRevealThreshold() (*big.Int, error) {
	return _Oracle.Contract.GetNonRevealThreshold(&_Oracle.CallOpts)
}

// GetNonRevealThreshold is a free data retrieval call binding the contract method 0xed78349d.
//
// Solidity: function getNonRevealThreshold() view returns(uint256)
func (_Oracle *OracleCallerSession) GetNonRevealThreshold() (*big.Int, error) {
	return _Oracle.Contract.GetNonRevealThreshold(&_Oracle.CallOpts)
}

// GetReports is a free data retrieval call binding the contract method 0xfb09917e.
//
// Solidity: function getReports(string _symbol, address _voter) view returns((uint120,uint8))
func (_Oracle *OracleCaller) GetReports(opts *bind.CallOpts, _symbol string, _voter common.Address) (IOracleReport, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getReports", _symbol, _voter)

	if err != nil {
		return *new(IOracleReport), err
	}

	out0 := *abi.ConvertType(out[0], new(IOracleReport)).(*IOracleReport)

	return out0, err

}

// GetReports is a free data retrieval call binding the contract method 0xfb09917e.
//
// Solidity: function getReports(string _symbol, address _voter) view returns((uint120,uint8))
func (_Oracle *OracleSession) GetReports(_symbol string, _voter common.Address) (IOracleReport, error) {
	return _Oracle.Contract.GetReports(&_Oracle.CallOpts, _symbol, _voter)
}

// GetReports is a free data retrieval call binding the contract method 0xfb09917e.
//
// Solidity: function getReports(string _symbol, address _voter) view returns((uint120,uint8))
func (_Oracle *OracleCallerSession) GetReports(_symbol string, _voter common.Address) (IOracleReport, error) {
	return _Oracle.Contract.GetReports(&_Oracle.CallOpts, _symbol, _voter)
}

// GetRewardPeriodPerformance is a free data retrieval call binding the contract method 0x33d16293.
//
// Solidity: function getRewardPeriodPerformance(address _voter) view returns(uint256)
func (_Oracle *OracleCaller) GetRewardPeriodPerformance(opts *bind.CallOpts, _voter common.Address) (*big.Int, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getRewardPeriodPerformance", _voter)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetRewardPeriodPerformance is a free data retrieval call binding the contract method 0x33d16293.
//
// Solidity: function getRewardPeriodPerformance(address _voter) view returns(uint256)
func (_Oracle *OracleSession) GetRewardPeriodPerformance(_voter common.Address) (*big.Int, error) {
	return _Oracle.Contract.GetRewardPeriodPerformance(&_Oracle.CallOpts, _voter)
}

// GetRewardPeriodPerformance is a free data retrieval call binding the contract method 0x33d16293.
//
// Solidity: function getRewardPeriodPerformance(address _voter) view returns(uint256)
func (_Oracle *OracleCallerSession) GetRewardPeriodPerformance(_voter common.Address) (*big.Int, error) {
	return _Oracle.Contract.GetRewardPeriodPerformance(&_Oracle.CallOpts, _voter)
}

// GetRound is a free data retrieval call binding the contract method 0x9f8743f7.
//
// Solidity: function getRound() view returns(uint256)
func (_Oracle *OracleCaller) GetRound(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getRound")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetRound is a free data retrieval call binding the contract method 0x9f8743f7.
//
// Solidity: function getRound() view returns(uint256)
func (_Oracle *OracleSession) GetRound() (*big.Int, error) {
	return _Oracle.Contract.GetRound(&_Oracle.CallOpts)
}

// GetRound is a free data retrieval call binding the contract method 0x9f8743f7.
//
// Solidity: function getRound() view returns(uint256)
func (_Oracle *OracleCallerSession) GetRound() (*big.Int, error) {
	return _Oracle.Contract.GetRound(&_Oracle.CallOpts)
}

// GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd.
//
// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_Oracle *OracleCaller) GetRoundData(opts *bind.CallOpts, _round *big.Int, _symbol string) (IOracleRoundData, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getRoundData", _round, _symbol)

	if err != nil {
		return *new(IOracleRoundData), err
	}

	out0 := *abi.ConvertType(out[0], new(IOracleRoundData)).(*IOracleRoundData)

	return out0, err

}

// GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd.
//
// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_Oracle *OracleSession) GetRoundData(_round *big.Int, _symbol string) (IOracleRoundData, error) {
	return _Oracle.Contract.GetRoundData(&_Oracle.CallOpts, _round, _symbol)
}

// GetRoundData is a free data retrieval call binding the contract method 0x3c8510fd.
//
// Solidity: function getRoundData(uint256 _round, string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_Oracle *OracleCallerSession) GetRoundData(_round *big.Int, _symbol string) (IOracleRoundData, error) {
	return _Oracle.Contract.GetRoundData(&_Oracle.CallOpts, _round, _symbol)
}

// GetSymbolUpdatedRound is a free data retrieval call binding the contract method 0x99b0014b.
//
// Solidity: function getSymbolUpdatedRound() view returns(int256)
func (_Oracle *OracleCaller) GetSymbolUpdatedRound(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getSymbolUpdatedRound")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetSymbolUpdatedRound is a free data retrieval call binding the contract method 0x99b0014b.
//
// Solidity: function getSymbolUpdatedRound() view returns(int256)
func (_Oracle *OracleSession) GetSymbolUpdatedRound() (*big.Int, error) {
	return _Oracle.Contract.GetSymbolUpdatedRound(&_Oracle.CallOpts)
}

// GetSymbolUpdatedRound is a free data retrieval call binding the contract method 0x99b0014b.
//
// Solidity: function getSymbolUpdatedRound() view returns(int256)
func (_Oracle *OracleCallerSession) GetSymbolUpdatedRound() (*big.Int, error) {
	return _Oracle.Contract.GetSymbolUpdatedRound(&_Oracle.CallOpts)
}

// GetSymbols is a free data retrieval call binding the contract method 0xdf7f710e.
//
// Solidity: function getSymbols() view returns(string[])
func (_Oracle *OracleCaller) GetSymbols(opts *bind.CallOpts) ([]string, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getSymbols")

	if err != nil {
		return *new([]string), err
	}

	out0 := *abi.ConvertType(out[0], new([]string)).(*[]string)

	return out0, err

}

// GetSymbols is a free data retrieval call binding the contract method 0xdf7f710e.
//
// Solidity: function getSymbols() view returns(string[])
func (_Oracle *OracleSession) GetSymbols() ([]string, error) {
	return _Oracle.Contract.GetSymbols(&_Oracle.CallOpts)
}

// GetSymbols is a free data retrieval call binding the contract method 0xdf7f710e.
//
// Solidity: function getSymbols() view returns(string[])
func (_Oracle *OracleCallerSession) GetSymbols() ([]string, error) {
	return _Oracle.Contract.GetSymbols(&_Oracle.CallOpts)
}

// GetVotePeriod is a free data retrieval call binding the contract method 0xb78dec52.
//
// Solidity: function getVotePeriod() view returns(uint256)
func (_Oracle *OracleCaller) GetVotePeriod(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getVotePeriod")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetVotePeriod is a free data retrieval call binding the contract method 0xb78dec52.
//
// Solidity: function getVotePeriod() view returns(uint256)
func (_Oracle *OracleSession) GetVotePeriod() (*big.Int, error) {
	return _Oracle.Contract.GetVotePeriod(&_Oracle.CallOpts)
}

// GetVotePeriod is a free data retrieval call binding the contract method 0xb78dec52.
//
// Solidity: function getVotePeriod() view returns(uint256)
func (_Oracle *OracleCallerSession) GetVotePeriod() (*big.Int, error) {
	return _Oracle.Contract.GetVotePeriod(&_Oracle.CallOpts)
}

// GetVoterInfo is a free data retrieval call binding the contract method 0x9ed1f255.
//
// Solidity: function getVoterInfo(address _voter) view returns((uint256,uint256,uint256,uint256,bool,bool))
func (_Oracle *OracleCaller) GetVoterInfo(opts *bind.CallOpts, _voter common.Address) (OracleVoterInfo, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getVoterInfo", _voter)

	if err != nil {
		return *new(OracleVoterInfo), err
	}

	out0 := *abi.ConvertType(out[0], new(OracleVoterInfo)).(*OracleVoterInfo)

	return out0, err

}

// GetVoterInfo is a free data retrieval call binding the contract method 0x9ed1f255.
//
// Solidity: function getVoterInfo(address _voter) view returns((uint256,uint256,uint256,uint256,bool,bool))
func (_Oracle *OracleSession) GetVoterInfo(_voter common.Address) (OracleVoterInfo, error) {
	return _Oracle.Contract.GetVoterInfo(&_Oracle.CallOpts, _voter)
}

// GetVoterInfo is a free data retrieval call binding the contract method 0x9ed1f255.
//
// Solidity: function getVoterInfo(address _voter) view returns((uint256,uint256,uint256,uint256,bool,bool))
func (_Oracle *OracleCallerSession) GetVoterInfo(_voter common.Address) (OracleVoterInfo, error) {
	return _Oracle.Contract.GetVoterInfo(&_Oracle.CallOpts, _voter)
}

// GetVoterTreasuries is a free data retrieval call binding the contract method 0xef5cc4d1.
//
// Solidity: function getVoterTreasuries(address _oracleAddress) view returns(address)
func (_Oracle *OracleCaller) GetVoterTreasuries(opts *bind.CallOpts, _oracleAddress common.Address) (common.Address, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getVoterTreasuries", _oracleAddress)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetVoterTreasuries is a free data retrieval call binding the contract method 0xef5cc4d1.
//
// Solidity: function getVoterTreasuries(address _oracleAddress) view returns(address)
func (_Oracle *OracleSession) GetVoterTreasuries(_oracleAddress common.Address) (common.Address, error) {
	return _Oracle.Contract.GetVoterTreasuries(&_Oracle.CallOpts, _oracleAddress)
}

// GetVoterTreasuries is a free data retrieval call binding the contract method 0xef5cc4d1.
//
// Solidity: function getVoterTreasuries(address _oracleAddress) view returns(address)
func (_Oracle *OracleCallerSession) GetVoterTreasuries(_oracleAddress common.Address) (common.Address, error) {
	return _Oracle.Contract.GetVoterTreasuries(&_Oracle.CallOpts, _oracleAddress)
}

// GetVoterValidators is a free data retrieval call binding the contract method 0x2d35d158.
//
// Solidity: function getVoterValidators(address _oracleAddress) view returns(address)
func (_Oracle *OracleCaller) GetVoterValidators(opts *bind.CallOpts, _oracleAddress common.Address) (common.Address, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getVoterValidators", _oracleAddress)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetVoterValidators is a free data retrieval call binding the contract method 0x2d35d158.
//
// Solidity: function getVoterValidators(address _oracleAddress) view returns(address)
func (_Oracle *OracleSession) GetVoterValidators(_oracleAddress common.Address) (common.Address, error) {
	return _Oracle.Contract.GetVoterValidators(&_Oracle.CallOpts, _oracleAddress)
}

// GetVoterValidators is a free data retrieval call binding the contract method 0x2d35d158.
//
// Solidity: function getVoterValidators(address _oracleAddress) view returns(address)
func (_Oracle *OracleCallerSession) GetVoterValidators(_oracleAddress common.Address) (common.Address, error) {
	return _Oracle.Contract.GetVoterValidators(&_Oracle.CallOpts, _oracleAddress)
}

// GetVoters is a free data retrieval call binding the contract method 0xcdd72253.
//
// Solidity: function getVoters() view returns(address[])
func (_Oracle *OracleCaller) GetVoters(opts *bind.CallOpts) ([]common.Address, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "getVoters")

	if err != nil {
		return *new([]common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)

	return out0, err

}

// GetVoters is a free data retrieval call binding the contract method 0xcdd72253.
//
// Solidity: function getVoters() view returns(address[])
func (_Oracle *OracleSession) GetVoters() ([]common.Address, error) {
	return _Oracle.Contract.GetVoters(&_Oracle.CallOpts)
}

// GetVoters is a free data retrieval call binding the contract method 0xcdd72253.
//
// Solidity: function getVoters() view returns(address[])
func (_Oracle *OracleCallerSession) GetVoters() ([]common.Address, error) {
	return _Oracle.Contract.GetVoters(&_Oracle.CallOpts)
}

// LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77.
//
// Solidity: function latestRoundData(string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_Oracle *OracleCaller) LatestRoundData(opts *bind.CallOpts, _symbol string) (IOracleRoundData, error) {
	var out []interface{}
	err := _Oracle.contract.Call(opts, &out, "latestRoundData", _symbol)

	if err != nil {
		return *new(IOracleRoundData), err
	}

	out0 := *abi.ConvertType(out[0], new(IOracleRoundData)).(*IOracleRoundData)

	return out0, err

}

// LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77.
//
// Solidity: function latestRoundData(string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_Oracle *OracleSession) LatestRoundData(_symbol string) (IOracleRoundData, error) {
	return _Oracle.Contract.LatestRoundData(&_Oracle.CallOpts, _symbol)
}

// LatestRoundData is a free data retrieval call binding the contract method 0x33f98c77.
//
// Solidity: function latestRoundData(string _symbol) view returns((uint256,uint256,uint256,bool) data)
func (_Oracle *OracleCallerSession) LatestRoundData(_symbol string) (IOracleRoundData, error) {
	return _Oracle.Contract.LatestRoundData(&_Oracle.CallOpts, _symbol)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0x59974e38.
//
// Solidity: function distributeRewards(uint256 _ntn) payable returns()
func (_Oracle *OracleTransactor) DistributeRewards(opts *bind.TransactOpts, _ntn *big.Int) (*types.Transaction, error) {
	return _Oracle.contract.Transact(opts, "distributeRewards", _ntn)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0x59974e38.
//
// Solidity: function distributeRewards(uint256 _ntn) payable returns()
func (_Oracle *OracleSession) DistributeRewards(_ntn *big.Int) (*types.Transaction, error) {
	return _Oracle.Contract.DistributeRewards(&_Oracle.TransactOpts, _ntn)
}

// DistributeRewards is a paid mutator transaction binding the contract method 0x59974e38.
//
// Solidity: function distributeRewards(uint256 _ntn) payable returns()
func (_Oracle *OracleTransactorSession) DistributeRewards(_ntn *big.Int) (*types.Transaction, error) {
	return _Oracle.Contract.DistributeRewards(&_Oracle.TransactOpts, _ntn)
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns(bool)
func (_Oracle *OracleTransactor) Finalize(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Oracle.contract.Transact(opts, "finalize")
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns(bool)
func (_Oracle *OracleSession) Finalize() (*types.Transaction, error) {
	return _Oracle.Contract.Finalize(&_Oracle.TransactOpts)
}

// Finalize is a paid mutator transaction binding the contract method 0x4bb278f3.
//
// Solidity: function finalize() returns(bool)
func (_Oracle *OracleTransactorSession) Finalize() (*types.Transaction, error) {
	return _Oracle.Contract.Finalize(&_Oracle.TransactOpts)
}

// SetCommitRevealConfig is a paid mutator transaction binding the contract method 0x3f422ef3.
//
// Solidity: function setCommitRevealConfig(uint256 _threshold, uint256 _resetInterval) returns()
func (_Oracle *OracleTransactor) SetCommitRevealConfig(opts *bind.TransactOpts, _threshold *big.Int, _resetInterval *big.Int) (*types.Transaction, error) {
	return _Oracle.contract.Transact(opts, "setCommitRevealConfig", _threshold, _resetInterval)
}

// SetCommitRevealConfig is a paid mutator transaction binding the contract method 0x3f422ef3.
//
// Solidity: function setCommitRevealConfig(uint256 _threshold, uint256 _resetInterval) returns()
func (_Oracle *OracleSession) SetCommitRevealConfig(_threshold *big.Int, _resetInterval *big.Int) (*types.Transaction, error) {
	return _Oracle.Contract.SetCommitRevealConfig(&_Oracle.TransactOpts, _threshold, _resetInterval)
}

// SetCommitRevealConfig is a paid mutator transaction binding the contract method 0x3f422ef3.
//
// Solidity: function setCommitRevealConfig(uint256 _threshold, uint256 _resetInterval) returns()
func (_Oracle *OracleTransactorSession) SetCommitRevealConfig(_threshold *big.Int, _resetInterval *big.Int) (*types.Transaction, error) {
	return _Oracle.Contract.SetCommitRevealConfig(&_Oracle.TransactOpts, _threshold, _resetInterval)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_Oracle *OracleTransactor) SetOperator(opts *bind.TransactOpts, _operator common.Address) (*types.Transaction, error) {
	return _Oracle.contract.Transact(opts, "setOperator", _operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_Oracle *OracleSession) SetOperator(_operator common.Address) (*types.Transaction, error) {
	return _Oracle.Contract.SetOperator(&_Oracle.TransactOpts, _operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _operator) returns()
func (_Oracle *OracleTransactorSession) SetOperator(_operator common.Address) (*types.Transaction, error) {
	return _Oracle.Contract.SetOperator(&_Oracle.TransactOpts, _operator)
}

// SetSlashingConfig is a paid mutator transaction binding the contract method 0xda39fbfe.
//
// Solidity: function setSlashingConfig(int256 _outlierSlashingThreshold, int256 _outlierDetectionThreshold, uint256 _baseSlashingRate, uint256 _slashingRateCap) returns()
func (_Oracle *OracleTransactor) SetSlashingConfig(opts *bind.TransactOpts, _outlierSlashingThreshold *big.Int, _outlierDetectionThreshold *big.Int, _baseSlashingRate *big.Int, _slashingRateCap *big.Int) (*types.Transaction, error) {
	return _Oracle.contract.Transact(opts, "setSlashingConfig", _outlierSlashingThreshold, _outlierDetectionThreshold, _baseSlashingRate, _slashingRateCap)
}

// SetSlashingConfig is a paid mutator transaction binding the contract method 0xda39fbfe.
//
// Solidity: function setSlashingConfig(int256 _outlierSlashingThreshold, int256 _outlierDetectionThreshold, uint256 _baseSlashingRate, uint256 _slashingRateCap) returns()
func (_Oracle *OracleSession) SetSlashingConfig(_outlierSlashingThreshold *big.Int, _outlierDetectionThreshold *big.Int, _baseSlashingRate *big.Int, _slashingRateCap *big.Int) (*types.Transaction, error) {
	return _Oracle.Contract.SetSlashingConfig(&_Oracle.TransactOpts, _outlierSlashingThreshold, _outlierDetectionThreshold, _baseSlashingRate, _slashingRateCap)
}

// SetSlashingConfig is a paid mutator transaction binding the contract method 0xda39fbfe.
//
// Solidity: function setSlashingConfig(int256 _outlierSlashingThreshold, int256 _outlierDetectionThreshold, uint256 _baseSlashingRate, uint256 _slashingRateCap) returns()
func (_Oracle *OracleTransactorSession) SetSlashingConfig(_outlierSlashingThreshold *big.Int, _outlierDetectionThreshold *big.Int, _baseSlashingRate *big.Int, _slashingRateCap *big.Int) (*types.Transaction, error) {
	return _Oracle.Contract.SetSlashingConfig(&_Oracle.TransactOpts, _outlierSlashingThreshold, _outlierDetectionThreshold, _baseSlashingRate, _slashingRateCap)
}

// SetSymbols is a paid mutator transaction binding the contract method 0x8d4f75d2.
//
// Solidity: function setSymbols(string[] _symbols) returns()
func (_Oracle *OracleTransactor) SetSymbols(opts *bind.TransactOpts, _symbols []string) (*types.Transaction, error) {
	return _Oracle.contract.Transact(opts, "setSymbols", _symbols)
}

// SetSymbols is a paid mutator transaction binding the contract method 0x8d4f75d2.
//
// Solidity: function setSymbols(string[] _symbols) returns()
func (_Oracle *OracleSession) SetSymbols(_symbols []string) (*types.Transaction, error) {
	return _Oracle.Contract.SetSymbols(&_Oracle.TransactOpts, _symbols)
}

// SetSymbols is a paid mutator transaction binding the contract method 0x8d4f75d2.
//
// Solidity: function setSymbols(string[] _symbols) returns()
func (_Oracle *OracleTransactorSession) SetSymbols(_symbols []string) (*types.Transaction, error) {
	return _Oracle.Contract.SetSymbols(&_Oracle.TransactOpts, _symbols)
}

// SetVotePeriod is a paid mutator transaction binding the contract method 0x67b11630.
//
// Solidity: function setVotePeriod(uint256 _votePeriod) returns()
func (_Oracle *OracleTransactor) SetVotePeriod(opts *bind.TransactOpts, _votePeriod *big.Int) (*types.Transaction, error) {
	return _Oracle.contract.Transact(opts, "setVotePeriod", _votePeriod)
}

// SetVotePeriod is a paid mutator transaction binding the contract method 0x67b11630.
//
// Solidity: function setVotePeriod(uint256 _votePeriod) returns()
func (_Oracle *OracleSession) SetVotePeriod(_votePeriod *big.Int) (*types.Transaction, error) {
	return _Oracle.Contract.SetVotePeriod(&_Oracle.TransactOpts, _votePeriod)
}

// SetVotePeriod is a paid mutator transaction binding the contract method 0x67b11630.
//
// Solidity: function setVotePeriod(uint256 _votePeriod) returns()
func (_Oracle *OracleTransactorSession) SetVotePeriod(_votePeriod *big.Int) (*types.Transaction, error) {
	return _Oracle.Contract.SetVotePeriod(&_Oracle.TransactOpts, _votePeriod)
}

// SetVoters is a paid mutator transaction binding the contract method 0xda78110e.
//
// Solidity: function setVoters(address[] _newVoters, address[] _treasury, address[] _validator) returns()
func (_Oracle *OracleTransactor) SetVoters(opts *bind.TransactOpts, _newVoters []common.Address, _treasury []common.Address, _validator []common.Address) (*types.Transaction, error) {
	return _Oracle.contract.Transact(opts, "setVoters", _newVoters, _treasury, _validator)
}

// SetVoters is a paid mutator transaction binding the contract method 0xda78110e.
//
// Solidity: function setVoters(address[] _newVoters, address[] _treasury, address[] _validator) returns()
func (_Oracle *OracleSession) SetVoters(_newVoters []common.Address, _treasury []common.Address, _validator []common.Address) (*types.Transaction, error) {
	return _Oracle.Contract.SetVoters(&_Oracle.TransactOpts, _newVoters, _treasury, _validator)
}

// SetVoters is a paid mutator transaction binding the contract method 0xda78110e.
//
// Solidity: function setVoters(address[] _newVoters, address[] _treasury, address[] _validator) returns()
func (_Oracle *OracleTransactorSession) SetVoters(_newVoters []common.Address, _treasury []common.Address, _validator []common.Address) (*types.Transaction, error) {
	return _Oracle.Contract.SetVoters(&_Oracle.TransactOpts, _newVoters, _treasury, _validator)
}

// UpdateVotersAndSymbol is a paid mutator transaction binding the contract method 0x0f65875c.
//
// Solidity: function updateVotersAndSymbol() returns()
func (_Oracle *OracleTransactor) UpdateVotersAndSymbol(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Oracle.contract.Transact(opts, "updateVotersAndSymbol")
}

// UpdateVotersAndSymbol is a paid mutator transaction binding the contract method 0x0f65875c.
//
// Solidity: function updateVotersAndSymbol() returns()
func (_Oracle *OracleSession) UpdateVotersAndSymbol() (*types.Transaction, error) {
	return _Oracle.Contract.UpdateVotersAndSymbol(&_Oracle.TransactOpts)
}

// UpdateVotersAndSymbol is a paid mutator transaction binding the contract method 0x0f65875c.
//
// Solidity: function updateVotersAndSymbol() returns()
func (_Oracle *OracleTransactorSession) UpdateVotersAndSymbol() (*types.Transaction, error) {
	return _Oracle.Contract.UpdateVotersAndSymbol(&_Oracle.TransactOpts)
}

// Vote is a paid mutator transaction binding the contract method 0x56833ebe.
//
// Solidity: function vote(uint256 _commit, (uint120,uint8)[] _reports, uint256 _salt, uint8 _extra) returns()
func (_Oracle *OracleTransactor) Vote(opts *bind.TransactOpts, _commit *big.Int, _reports []IOracleReport, _salt *big.Int, _extra uint8) (*types.Transaction, error) {
	return _Oracle.contract.Transact(opts, "vote", _commit, _reports, _salt, _extra)
}

// Vote is a paid mutator transaction binding the contract method 0x56833ebe.
//
// Solidity: function vote(uint256 _commit, (uint120,uint8)[] _reports, uint256 _salt, uint8 _extra) returns()
func (_Oracle *OracleSession) Vote(_commit *big.Int, _reports []IOracleReport, _salt *big.Int, _extra uint8) (*types.Transaction, error) {
	return _Oracle.Contract.Vote(&_Oracle.TransactOpts, _commit, _reports, _salt, _extra)
}

// Vote is a paid mutator transaction binding the contract method 0x56833ebe.
//
// Solidity: function vote(uint256 _commit, (uint120,uint8)[] _reports, uint256 _salt, uint8 _extra) returns()
func (_Oracle *OracleTransactorSession) Vote(_commit *big.Int, _reports []IOracleReport, _salt *big.Int, _extra uint8) (*types.Transaction, error) {
	return _Oracle.Contract.Vote(&_Oracle.TransactOpts, _commit, _reports, _salt, _extra)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_Oracle *OracleTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) {
	return _Oracle.contract.RawTransact(opts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_Oracle *OracleSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _Oracle.Contract.Fallback(&_Oracle.TransactOpts, calldata)
}

// Fallback is a paid mutator transaction binding the contract fallback function.
//
// Solidity: fallback() payable returns()
func (_Oracle *OracleTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) {
	return _Oracle.Contract.Fallback(&_Oracle.TransactOpts, calldata)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_Oracle *OracleTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Oracle.contract.RawTransact(opts, nil) // calldata is disallowed for receive function
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_Oracle *OracleSession) Receive() (*types.Transaction, error) {
	return _Oracle.Contract.Receive(&_Oracle.TransactOpts)
}

// Receive is a paid mutator transaction binding the contract receive function.
//
// Solidity: receive() payable returns()
func (_Oracle *OracleTransactorSession) Receive() (*types.Transaction, error) {
	return _Oracle.Contract.Receive(&_Oracle.TransactOpts)
}

// OracleCallFailedIterator is returned from FilterCallFailed and is used to iterate over the raw logs and unpacked data for CallFailed events raised by the Oracle contract.
type OracleCallFailedIterator struct {
	Event *OracleCallFailed // 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 *OracleCallFailedIterator) 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(OracleCallFailed)
			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(OracleCallFailed)
		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 *OracleCallFailedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleCallFailedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleCallFailed represents a CallFailed event raised by the Oracle contract.
type OracleCallFailed struct {
	To              common.Address
	MethodSignature string
	ReturnData      []byte
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterCallFailed is a free log retrieval operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_Oracle *OracleFilterer) FilterCallFailed(opts *bind.FilterOpts) (*OracleCallFailedIterator, error) {

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "CallFailed")
	if err != nil {
		return nil, err
	}
	return &OracleCallFailedIterator{contract: _Oracle.contract, event: "CallFailed", logs: logs, sub: sub}, nil
}

// WatchCallFailed is a free log subscription operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_Oracle *OracleFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *OracleCallFailed) (event.Subscription, error) {

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "CallFailed")
	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(OracleCallFailed)
				if err := _Oracle.contract.UnpackLog(event, "CallFailed", 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
}

// ParseCallFailed is a log parse operation binding the contract event 0x1137d8c966ce69b9630fb2294be011f3d64cc56e91fad7d375f0662568e9d352.
//
// Solidity: event CallFailed(address to, string methodSignature, bytes returnData)
func (_Oracle *OracleFilterer) ParseCallFailed(log types.Log) (*OracleCallFailed, error) {
	event := new(OracleCallFailed)
	if err := _Oracle.contract.UnpackLog(event, "CallFailed", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleCommitRevealMissedIterator is returned from FilterCommitRevealMissed and is used to iterate over the raw logs and unpacked data for CommitRevealMissed events raised by the Oracle contract.
type OracleCommitRevealMissedIterator struct {
	Event *OracleCommitRevealMissed // 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 *OracleCommitRevealMissedIterator) 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(OracleCommitRevealMissed)
			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(OracleCommitRevealMissed)
		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 *OracleCommitRevealMissedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleCommitRevealMissedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleCommitRevealMissed represents a CommitRevealMissed event raised by the Oracle contract.
type OracleCommitRevealMissed struct {
	Voter          common.Address
	Round          *big.Int
	NonRevealCount *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterCommitRevealMissed is a free log retrieval operation binding the contract event 0x176956a4e941f6737f81a3c9a09d8571dd0438d86e25a432beb2013aced43092.
//
// Solidity: event CommitRevealMissed(address indexed _voter, uint256 _round, uint256 _nonRevealCount)
func (_Oracle *OracleFilterer) FilterCommitRevealMissed(opts *bind.FilterOpts, _voter []common.Address) (*OracleCommitRevealMissedIterator, error) {

	var _voterRule []interface{}
	for _, _voterItem := range _voter {
		_voterRule = append(_voterRule, _voterItem)
	}

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "CommitRevealMissed", _voterRule)
	if err != nil {
		return nil, err
	}
	return &OracleCommitRevealMissedIterator{contract: _Oracle.contract, event: "CommitRevealMissed", logs: logs, sub: sub}, nil
}

// WatchCommitRevealMissed is a free log subscription operation binding the contract event 0x176956a4e941f6737f81a3c9a09d8571dd0438d86e25a432beb2013aced43092.
//
// Solidity: event CommitRevealMissed(address indexed _voter, uint256 _round, uint256 _nonRevealCount)
func (_Oracle *OracleFilterer) WatchCommitRevealMissed(opts *bind.WatchOpts, sink chan<- *OracleCommitRevealMissed, _voter []common.Address) (event.Subscription, error) {

	var _voterRule []interface{}
	for _, _voterItem := range _voter {
		_voterRule = append(_voterRule, _voterItem)
	}

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "CommitRevealMissed", _voterRule)
	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(OracleCommitRevealMissed)
				if err := _Oracle.contract.UnpackLog(event, "CommitRevealMissed", 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
}

// ParseCommitRevealMissed is a log parse operation binding the contract event 0x176956a4e941f6737f81a3c9a09d8571dd0438d86e25a432beb2013aced43092.
//
// Solidity: event CommitRevealMissed(address indexed _voter, uint256 _round, uint256 _nonRevealCount)
func (_Oracle *OracleFilterer) ParseCommitRevealMissed(log types.Log) (*OracleCommitRevealMissed, error) {
	event := new(OracleCommitRevealMissed)
	if err := _Oracle.contract.UnpackLog(event, "CommitRevealMissed", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleConfigUpdateAddressIterator is returned from FilterConfigUpdateAddress and is used to iterate over the raw logs and unpacked data for ConfigUpdateAddress events raised by the Oracle contract.
type OracleConfigUpdateAddressIterator struct {
	Event *OracleConfigUpdateAddress // 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 *OracleConfigUpdateAddressIterator) 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(OracleConfigUpdateAddress)
			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(OracleConfigUpdateAddress)
		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 *OracleConfigUpdateAddressIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleConfigUpdateAddressIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleConfigUpdateAddress represents a ConfigUpdateAddress event raised by the Oracle contract.
type OracleConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*OracleConfigUpdateAddressIterator, error) {

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &OracleConfigUpdateAddressIterator{contract: _Oracle.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *OracleConfigUpdateAddress) (event.Subscription, error) {

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "ConfigUpdateAddress")
	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(OracleConfigUpdateAddress)
				if err := _Oracle.contract.UnpackLog(event, "ConfigUpdateAddress", 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
}

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) ParseConfigUpdateAddress(log types.Log) (*OracleConfigUpdateAddress, error) {
	event := new(OracleConfigUpdateAddress)
	if err := _Oracle.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleConfigUpdateBoolIterator is returned from FilterConfigUpdateBool and is used to iterate over the raw logs and unpacked data for ConfigUpdateBool events raised by the Oracle contract.
type OracleConfigUpdateBoolIterator struct {
	Event *OracleConfigUpdateBool // 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 *OracleConfigUpdateBoolIterator) 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(OracleConfigUpdateBool)
			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(OracleConfigUpdateBool)
		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 *OracleConfigUpdateBoolIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleConfigUpdateBoolIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleConfigUpdateBool represents a ConfigUpdateBool event raised by the Oracle contract.
type OracleConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*OracleConfigUpdateBoolIterator, error) {

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &OracleConfigUpdateBoolIterator{contract: _Oracle.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *OracleConfigUpdateBool) (event.Subscription, error) {

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "ConfigUpdateBool")
	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(OracleConfigUpdateBool)
				if err := _Oracle.contract.UnpackLog(event, "ConfigUpdateBool", 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
}

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) ParseConfigUpdateBool(log types.Log) (*OracleConfigUpdateBool, error) {
	event := new(OracleConfigUpdateBool)
	if err := _Oracle.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleConfigUpdateIntIterator is returned from FilterConfigUpdateInt and is used to iterate over the raw logs and unpacked data for ConfigUpdateInt events raised by the Oracle contract.
type OracleConfigUpdateIntIterator struct {
	Event *OracleConfigUpdateInt // 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 *OracleConfigUpdateIntIterator) 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(OracleConfigUpdateInt)
			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(OracleConfigUpdateInt)
		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 *OracleConfigUpdateIntIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleConfigUpdateIntIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleConfigUpdateInt represents a ConfigUpdateInt event raised by the Oracle contract.
type OracleConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*OracleConfigUpdateIntIterator, error) {

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &OracleConfigUpdateIntIterator{contract: _Oracle.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *OracleConfigUpdateInt) (event.Subscription, error) {

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "ConfigUpdateInt")
	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(OracleConfigUpdateInt)
				if err := _Oracle.contract.UnpackLog(event, "ConfigUpdateInt", 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
}

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) ParseConfigUpdateInt(log types.Log) (*OracleConfigUpdateInt, error) {
	event := new(OracleConfigUpdateInt)
	if err := _Oracle.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleConfigUpdateUintIterator is returned from FilterConfigUpdateUint and is used to iterate over the raw logs and unpacked data for ConfigUpdateUint events raised by the Oracle contract.
type OracleConfigUpdateUintIterator struct {
	Event *OracleConfigUpdateUint // 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 *OracleConfigUpdateUintIterator) 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(OracleConfigUpdateUint)
			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(OracleConfigUpdateUint)
		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 *OracleConfigUpdateUintIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleConfigUpdateUintIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleConfigUpdateUint represents a ConfigUpdateUint event raised by the Oracle contract.
type OracleConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*OracleConfigUpdateUintIterator, error) {

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &OracleConfigUpdateUintIterator{contract: _Oracle.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *OracleConfigUpdateUint) (event.Subscription, error) {

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "ConfigUpdateUint")
	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(OracleConfigUpdateUint)
				if err := _Oracle.contract.UnpackLog(event, "ConfigUpdateUint", 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
}

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Oracle *OracleFilterer) ParseConfigUpdateUint(log types.Log) (*OracleConfigUpdateUint, error) {
	event := new(OracleConfigUpdateUint)
	if err := _Oracle.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleInvalidVoteIterator is returned from FilterInvalidVote and is used to iterate over the raw logs and unpacked data for InvalidVote events raised by the Oracle contract.
type OracleInvalidVoteIterator struct {
	Event *OracleInvalidVote // 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 *OracleInvalidVoteIterator) 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(OracleInvalidVote)
			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(OracleInvalidVote)
		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 *OracleInvalidVoteIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleInvalidVoteIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleInvalidVote represents a InvalidVote event raised by the Oracle contract.
type OracleInvalidVote struct {
	Cause       string
	Reporter    common.Address
	ExpValue    *big.Int
	ActualValue *big.Int
	Extra       uint8
	Raw         types.Log // Blockchain specific contextual infos
}

// FilterInvalidVote is a free log retrieval operation binding the contract event 0x04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b1.
//
// Solidity: event InvalidVote(string cause, address indexed reporter, uint256 expValue, uint256 actualValue, uint8 extra)
func (_Oracle *OracleFilterer) FilterInvalidVote(opts *bind.FilterOpts, reporter []common.Address) (*OracleInvalidVoteIterator, error) {

	var reporterRule []interface{}
	for _, reporterItem := range reporter {
		reporterRule = append(reporterRule, reporterItem)
	}

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "InvalidVote", reporterRule)
	if err != nil {
		return nil, err
	}
	return &OracleInvalidVoteIterator{contract: _Oracle.contract, event: "InvalidVote", logs: logs, sub: sub}, nil
}

// WatchInvalidVote is a free log subscription operation binding the contract event 0x04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b1.
//
// Solidity: event InvalidVote(string cause, address indexed reporter, uint256 expValue, uint256 actualValue, uint8 extra)
func (_Oracle *OracleFilterer) WatchInvalidVote(opts *bind.WatchOpts, sink chan<- *OracleInvalidVote, reporter []common.Address) (event.Subscription, error) {

	var reporterRule []interface{}
	for _, reporterItem := range reporter {
		reporterRule = append(reporterRule, reporterItem)
	}

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "InvalidVote", reporterRule)
	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(OracleInvalidVote)
				if err := _Oracle.contract.UnpackLog(event, "InvalidVote", 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
}

// ParseInvalidVote is a log parse operation binding the contract event 0x04ca4e0efda95f8b780c116574d1521309010b38d8f7b75705495703a0f570b1.
//
// Solidity: event InvalidVote(string cause, address indexed reporter, uint256 expValue, uint256 actualValue, uint8 extra)
func (_Oracle *OracleFilterer) ParseInvalidVote(log types.Log) (*OracleInvalidVote, error) {
	event := new(OracleInvalidVote)
	if err := _Oracle.contract.UnpackLog(event, "InvalidVote", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleNewRoundIterator is returned from FilterNewRound and is used to iterate over the raw logs and unpacked data for NewRound events raised by the Oracle contract.
type OracleNewRoundIterator struct {
	Event *OracleNewRound // 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 *OracleNewRoundIterator) 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(OracleNewRound)
			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(OracleNewRound)
		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 *OracleNewRoundIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleNewRoundIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleNewRound represents a NewRound event raised by the Oracle contract.
type OracleNewRound struct {
	Round      *big.Int
	Timestamp  *big.Int
	VotePeriod *big.Int
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterNewRound is a free log retrieval operation binding the contract event 0x5aec57d81928b24d30b1a2aec0d23d693412c37d7ec106b5d8259413716bb1f4.
//
// Solidity: event NewRound(uint256 _round, uint256 _timestamp, uint256 _votePeriod)
func (_Oracle *OracleFilterer) FilterNewRound(opts *bind.FilterOpts) (*OracleNewRoundIterator, error) {

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "NewRound")
	if err != nil {
		return nil, err
	}
	return &OracleNewRoundIterator{contract: _Oracle.contract, event: "NewRound", logs: logs, sub: sub}, nil
}

// WatchNewRound is a free log subscription operation binding the contract event 0x5aec57d81928b24d30b1a2aec0d23d693412c37d7ec106b5d8259413716bb1f4.
//
// Solidity: event NewRound(uint256 _round, uint256 _timestamp, uint256 _votePeriod)
func (_Oracle *OracleFilterer) WatchNewRound(opts *bind.WatchOpts, sink chan<- *OracleNewRound) (event.Subscription, error) {

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "NewRound")
	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(OracleNewRound)
				if err := _Oracle.contract.UnpackLog(event, "NewRound", 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
}

// ParseNewRound is a log parse operation binding the contract event 0x5aec57d81928b24d30b1a2aec0d23d693412c37d7ec106b5d8259413716bb1f4.
//
// Solidity: event NewRound(uint256 _round, uint256 _timestamp, uint256 _votePeriod)
func (_Oracle *OracleFilterer) ParseNewRound(log types.Log) (*OracleNewRound, error) {
	event := new(OracleNewRound)
	if err := _Oracle.contract.UnpackLog(event, "NewRound", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleNewSymbolsIterator is returned from FilterNewSymbols and is used to iterate over the raw logs and unpacked data for NewSymbols events raised by the Oracle contract.
type OracleNewSymbolsIterator struct {
	Event *OracleNewSymbols // 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 *OracleNewSymbolsIterator) 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(OracleNewSymbols)
			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(OracleNewSymbols)
		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 *OracleNewSymbolsIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleNewSymbolsIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleNewSymbols represents a NewSymbols event raised by the Oracle contract.
type OracleNewSymbols struct {
	Symbols []string
	Round   *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterNewSymbols is a free log retrieval operation binding the contract event 0xaa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d.
//
// Solidity: event NewSymbols(string[] _symbols, uint256 _round)
func (_Oracle *OracleFilterer) FilterNewSymbols(opts *bind.FilterOpts) (*OracleNewSymbolsIterator, error) {

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "NewSymbols")
	if err != nil {
		return nil, err
	}
	return &OracleNewSymbolsIterator{contract: _Oracle.contract, event: "NewSymbols", logs: logs, sub: sub}, nil
}

// WatchNewSymbols is a free log subscription operation binding the contract event 0xaa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d.
//
// Solidity: event NewSymbols(string[] _symbols, uint256 _round)
func (_Oracle *OracleFilterer) WatchNewSymbols(opts *bind.WatchOpts, sink chan<- *OracleNewSymbols) (event.Subscription, error) {

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "NewSymbols")
	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(OracleNewSymbols)
				if err := _Oracle.contract.UnpackLog(event, "NewSymbols", 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
}

// ParseNewSymbols is a log parse operation binding the contract event 0xaa278e424da680ce5dad66510415760e78e0bd87d45c786c6e88bdde82f9342d.
//
// Solidity: event NewSymbols(string[] _symbols, uint256 _round)
func (_Oracle *OracleFilterer) ParseNewSymbols(log types.Log) (*OracleNewSymbols, error) {
	event := new(OracleNewSymbols)
	if err := _Oracle.contract.UnpackLog(event, "NewSymbols", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleNewVoterIterator is returned from FilterNewVoter and is used to iterate over the raw logs and unpacked data for NewVoter events raised by the Oracle contract.
type OracleNewVoterIterator struct {
	Event *OracleNewVoter // 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 *OracleNewVoterIterator) 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(OracleNewVoter)
			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(OracleNewVoter)
		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 *OracleNewVoterIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleNewVoterIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleNewVoter represents a NewVoter event raised by the Oracle contract.
type OracleNewVoter struct {
	Reporter common.Address
	Extra    uint8
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterNewVoter is a free log retrieval operation binding the contract event 0xd2ec8e890a03083998d3e16f98044fd3dd13fe3e61b7bc2e58ee6da43b50af73.
//
// Solidity: event NewVoter(address reporter, uint8 extra)
func (_Oracle *OracleFilterer) FilterNewVoter(opts *bind.FilterOpts) (*OracleNewVoterIterator, error) {

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "NewVoter")
	if err != nil {
		return nil, err
	}
	return &OracleNewVoterIterator{contract: _Oracle.contract, event: "NewVoter", logs: logs, sub: sub}, nil
}

// WatchNewVoter is a free log subscription operation binding the contract event 0xd2ec8e890a03083998d3e16f98044fd3dd13fe3e61b7bc2e58ee6da43b50af73.
//
// Solidity: event NewVoter(address reporter, uint8 extra)
func (_Oracle *OracleFilterer) WatchNewVoter(opts *bind.WatchOpts, sink chan<- *OracleNewVoter) (event.Subscription, error) {

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "NewVoter")
	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(OracleNewVoter)
				if err := _Oracle.contract.UnpackLog(event, "NewVoter", 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
}

// ParseNewVoter is a log parse operation binding the contract event 0xd2ec8e890a03083998d3e16f98044fd3dd13fe3e61b7bc2e58ee6da43b50af73.
//
// Solidity: event NewVoter(address reporter, uint8 extra)
func (_Oracle *OracleFilterer) ParseNewVoter(log types.Log) (*OracleNewVoter, error) {
	event := new(OracleNewVoter)
	if err := _Oracle.contract.UnpackLog(event, "NewVoter", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleNoRevealPenaltyIterator is returned from FilterNoRevealPenalty and is used to iterate over the raw logs and unpacked data for NoRevealPenalty events raised by the Oracle contract.
type OracleNoRevealPenaltyIterator struct {
	Event *OracleNoRevealPenalty // 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 *OracleNoRevealPenaltyIterator) 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(OracleNoRevealPenalty)
			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(OracleNoRevealPenalty)
		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 *OracleNoRevealPenaltyIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleNoRevealPenaltyIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleNoRevealPenalty represents a NoRevealPenalty event raised by the Oracle contract.
type OracleNoRevealPenalty struct {
	Voter        common.Address
	Round        *big.Int
	MissedReveal *big.Int
	Raw          types.Log // Blockchain specific contextual infos
}

// FilterNoRevealPenalty is a free log retrieval operation binding the contract event 0x9e6b40f10c60d1ad09594f3b6ed7043d0e978f584d354ace6e1f6025660c42b1.
//
// Solidity: event NoRevealPenalty(address indexed _voter, uint256 _round, uint256 _missedReveal)
func (_Oracle *OracleFilterer) FilterNoRevealPenalty(opts *bind.FilterOpts, _voter []common.Address) (*OracleNoRevealPenaltyIterator, error) {

	var _voterRule []interface{}
	for _, _voterItem := range _voter {
		_voterRule = append(_voterRule, _voterItem)
	}

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "NoRevealPenalty", _voterRule)
	if err != nil {
		return nil, err
	}
	return &OracleNoRevealPenaltyIterator{contract: _Oracle.contract, event: "NoRevealPenalty", logs: logs, sub: sub}, nil
}

// WatchNoRevealPenalty is a free log subscription operation binding the contract event 0x9e6b40f10c60d1ad09594f3b6ed7043d0e978f584d354ace6e1f6025660c42b1.
//
// Solidity: event NoRevealPenalty(address indexed _voter, uint256 _round, uint256 _missedReveal)
func (_Oracle *OracleFilterer) WatchNoRevealPenalty(opts *bind.WatchOpts, sink chan<- *OracleNoRevealPenalty, _voter []common.Address) (event.Subscription, error) {

	var _voterRule []interface{}
	for _, _voterItem := range _voter {
		_voterRule = append(_voterRule, _voterItem)
	}

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "NoRevealPenalty", _voterRule)
	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(OracleNoRevealPenalty)
				if err := _Oracle.contract.UnpackLog(event, "NoRevealPenalty", 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
}

// ParseNoRevealPenalty is a log parse operation binding the contract event 0x9e6b40f10c60d1ad09594f3b6ed7043d0e978f584d354ace6e1f6025660c42b1.
//
// Solidity: event NoRevealPenalty(address indexed _voter, uint256 _round, uint256 _missedReveal)
func (_Oracle *OracleFilterer) ParseNoRevealPenalty(log types.Log) (*OracleNoRevealPenalty, error) {
	event := new(OracleNoRevealPenalty)
	if err := _Oracle.contract.UnpackLog(event, "NoRevealPenalty", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OraclePenalizedIterator is returned from FilterPenalized and is used to iterate over the raw logs and unpacked data for Penalized events raised by the Oracle contract.
type OraclePenalizedIterator struct {
	Event *OraclePenalized // 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 *OraclePenalizedIterator) 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(OraclePenalized)
			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(OraclePenalized)
		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 *OraclePenalizedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OraclePenalizedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OraclePenalized represents a Penalized event raised by the Oracle contract.
type OraclePenalized struct {
	Participant    common.Address
	SlashingAmount *big.Int
	Symbol         string
	Median         *big.Int
	Reported       *big.Int
	Raw            types.Log // Blockchain specific contextual infos
}

// FilterPenalized is a free log retrieval operation binding the contract event 0x372858b237c8bd0714183e8351a461d6c3cb1ef83806181b36bf5943711f4f57.
//
// Solidity: event Penalized(address indexed _participant, uint256 _slashingAmount, string _symbol, int256 _median, uint120 _reported)
func (_Oracle *OracleFilterer) FilterPenalized(opts *bind.FilterOpts, _participant []common.Address) (*OraclePenalizedIterator, error) {

	var _participantRule []interface{}
	for _, _participantItem := range _participant {
		_participantRule = append(_participantRule, _participantItem)
	}

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "Penalized", _participantRule)
	if err != nil {
		return nil, err
	}
	return &OraclePenalizedIterator{contract: _Oracle.contract, event: "Penalized", logs: logs, sub: sub}, nil
}

// WatchPenalized is a free log subscription operation binding the contract event 0x372858b237c8bd0714183e8351a461d6c3cb1ef83806181b36bf5943711f4f57.
//
// Solidity: event Penalized(address indexed _participant, uint256 _slashingAmount, string _symbol, int256 _median, uint120 _reported)
func (_Oracle *OracleFilterer) WatchPenalized(opts *bind.WatchOpts, sink chan<- *OraclePenalized, _participant []common.Address) (event.Subscription, error) {

	var _participantRule []interface{}
	for _, _participantItem := range _participant {
		_participantRule = append(_participantRule, _participantItem)
	}

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "Penalized", _participantRule)
	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(OraclePenalized)
				if err := _Oracle.contract.UnpackLog(event, "Penalized", 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
}

// ParsePenalized is a log parse operation binding the contract event 0x372858b237c8bd0714183e8351a461d6c3cb1ef83806181b36bf5943711f4f57.
//
// Solidity: event Penalized(address indexed _participant, uint256 _slashingAmount, string _symbol, int256 _median, uint120 _reported)
func (_Oracle *OracleFilterer) ParsePenalized(log types.Log) (*OraclePenalized, error) {
	event := new(OraclePenalized)
	if err := _Oracle.contract.UnpackLog(event, "Penalized", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OraclePriceUpdatedIterator is returned from FilterPriceUpdated and is used to iterate over the raw logs and unpacked data for PriceUpdated events raised by the Oracle contract.
type OraclePriceUpdatedIterator struct {
	Event *OraclePriceUpdated // 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 *OraclePriceUpdatedIterator) 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(OraclePriceUpdated)
			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(OraclePriceUpdated)
		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 *OraclePriceUpdatedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OraclePriceUpdatedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OraclePriceUpdated represents a PriceUpdated event raised by the Oracle contract.
type OraclePriceUpdated struct {
	Price     *big.Int
	Round     *big.Int
	Symbol    common.Hash
	Status    bool
	Timestamp *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterPriceUpdated is a free log retrieval operation binding the contract event 0x5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c.
//
// Solidity: event PriceUpdated(uint256 price, uint256 round, string indexed symbol, bool status, uint256 timestamp)
func (_Oracle *OracleFilterer) FilterPriceUpdated(opts *bind.FilterOpts, symbol []string) (*OraclePriceUpdatedIterator, error) {

	var symbolRule []interface{}
	for _, symbolItem := range symbol {
		symbolRule = append(symbolRule, symbolItem)
	}

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "PriceUpdated", symbolRule)
	if err != nil {
		return nil, err
	}
	return &OraclePriceUpdatedIterator{contract: _Oracle.contract, event: "PriceUpdated", logs: logs, sub: sub}, nil
}

// WatchPriceUpdated is a free log subscription operation binding the contract event 0x5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c.
//
// Solidity: event PriceUpdated(uint256 price, uint256 round, string indexed symbol, bool status, uint256 timestamp)
func (_Oracle *OracleFilterer) WatchPriceUpdated(opts *bind.WatchOpts, sink chan<- *OraclePriceUpdated, symbol []string) (event.Subscription, error) {

	var symbolRule []interface{}
	for _, symbolItem := range symbol {
		symbolRule = append(symbolRule, symbolItem)
	}

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "PriceUpdated", symbolRule)
	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(OraclePriceUpdated)
				if err := _Oracle.contract.UnpackLog(event, "PriceUpdated", 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
}

// ParsePriceUpdated is a log parse operation binding the contract event 0x5f2aa51aa7889ad71d9318fa7fd83c8ff3277434249bd06073f15986e197911c.
//
// Solidity: event PriceUpdated(uint256 price, uint256 round, string indexed symbol, bool status, uint256 timestamp)
func (_Oracle *OracleFilterer) ParsePriceUpdated(log types.Log) (*OraclePriceUpdated, error) {
	event := new(OraclePriceUpdated)
	if err := _Oracle.contract.UnpackLog(event, "PriceUpdated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleSuccessfulVoteIterator is returned from FilterSuccessfulVote and is used to iterate over the raw logs and unpacked data for SuccessfulVote events raised by the Oracle contract.
type OracleSuccessfulVoteIterator struct {
	Event *OracleSuccessfulVote // 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 *OracleSuccessfulVoteIterator) 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(OracleSuccessfulVote)
			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(OracleSuccessfulVote)
		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 *OracleSuccessfulVoteIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleSuccessfulVoteIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleSuccessfulVote represents a SuccessfulVote event raised by the Oracle contract.
type OracleSuccessfulVote struct {
	Reporter common.Address
	Extra    uint8
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterSuccessfulVote is a free log retrieval operation binding the contract event 0x8bdddd7f2f2c74679ffa6beb8f86aa18bfa5baf1bfaf534d0b66596babc53f08.
//
// Solidity: event SuccessfulVote(address indexed reporter, uint8 extra)
func (_Oracle *OracleFilterer) FilterSuccessfulVote(opts *bind.FilterOpts, reporter []common.Address) (*OracleSuccessfulVoteIterator, error) {

	var reporterRule []interface{}
	for _, reporterItem := range reporter {
		reporterRule = append(reporterRule, reporterItem)
	}

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "SuccessfulVote", reporterRule)
	if err != nil {
		return nil, err
	}
	return &OracleSuccessfulVoteIterator{contract: _Oracle.contract, event: "SuccessfulVote", logs: logs, sub: sub}, nil
}

// WatchSuccessfulVote is a free log subscription operation binding the contract event 0x8bdddd7f2f2c74679ffa6beb8f86aa18bfa5baf1bfaf534d0b66596babc53f08.
//
// Solidity: event SuccessfulVote(address indexed reporter, uint8 extra)
func (_Oracle *OracleFilterer) WatchSuccessfulVote(opts *bind.WatchOpts, sink chan<- *OracleSuccessfulVote, reporter []common.Address) (event.Subscription, error) {

	var reporterRule []interface{}
	for _, reporterItem := range reporter {
		reporterRule = append(reporterRule, reporterItem)
	}

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "SuccessfulVote", reporterRule)
	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(OracleSuccessfulVote)
				if err := _Oracle.contract.UnpackLog(event, "SuccessfulVote", 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
}

// ParseSuccessfulVote is a log parse operation binding the contract event 0x8bdddd7f2f2c74679ffa6beb8f86aa18bfa5baf1bfaf534d0b66596babc53f08.
//
// Solidity: event SuccessfulVote(address indexed reporter, uint8 extra)
func (_Oracle *OracleFilterer) ParseSuccessfulVote(log types.Log) (*OracleSuccessfulVote, error) {
	event := new(OracleSuccessfulVote)
	if err := _Oracle.contract.UnpackLog(event, "SuccessfulVote", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// OracleTotalOracleRewardsIterator is returned from FilterTotalOracleRewards and is used to iterate over the raw logs and unpacked data for TotalOracleRewards events raised by the Oracle contract.
type OracleTotalOracleRewardsIterator struct {
	Event *OracleTotalOracleRewards // 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 *OracleTotalOracleRewardsIterator) 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(OracleTotalOracleRewards)
			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(OracleTotalOracleRewards)
		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 *OracleTotalOracleRewardsIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *OracleTotalOracleRewardsIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// OracleTotalOracleRewards represents a TotalOracleRewards event raised by the Oracle contract.
type OracleTotalOracleRewards struct {
	NtnReward *big.Int
	AtnReward *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterTotalOracleRewards is a free log retrieval operation binding the contract event 0x3e5aaff9e8fd4293ae18127809c2d4069d87fe10c7de92aa39557a1edbd48fec.
//
// Solidity: event TotalOracleRewards(uint256 ntnReward, uint256 atnReward)
func (_Oracle *OracleFilterer) FilterTotalOracleRewards(opts *bind.FilterOpts) (*OracleTotalOracleRewardsIterator, error) {

	logs, sub, err := _Oracle.contract.FilterLogs(opts, "TotalOracleRewards")
	if err != nil {
		return nil, err
	}
	return &OracleTotalOracleRewardsIterator{contract: _Oracle.contract, event: "TotalOracleRewards", logs: logs, sub: sub}, nil
}

// WatchTotalOracleRewards is a free log subscription operation binding the contract event 0x3e5aaff9e8fd4293ae18127809c2d4069d87fe10c7de92aa39557a1edbd48fec.
//
// Solidity: event TotalOracleRewards(uint256 ntnReward, uint256 atnReward)
func (_Oracle *OracleFilterer) WatchTotalOracleRewards(opts *bind.WatchOpts, sink chan<- *OracleTotalOracleRewards) (event.Subscription, error) {

	logs, sub, err := _Oracle.contract.WatchLogs(opts, "TotalOracleRewards")
	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(OracleTotalOracleRewards)
				if err := _Oracle.contract.UnpackLog(event, "TotalOracleRewards", 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
}

// ParseTotalOracleRewards is a log parse operation binding the contract event 0x3e5aaff9e8fd4293ae18127809c2d4069d87fe10c7de92aa39557a1edbd48fec.
//
// Solidity: event TotalOracleRewards(uint256 ntnReward, uint256 atnReward)
func (_Oracle *OracleFilterer) ParseTotalOracleRewards(log types.Log) (*OracleTotalOracleRewards, error) {
	event := new(OracleTotalOracleRewards)
	if err := _Oracle.contract.UnpackLog(event, "TotalOracleRewards", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// PrecompiledMetaData contains all meta data concerning the Precompiled contract.
var PrecompiledMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[],\"name\":\"ACCUSATION_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ACTIVITY_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COMPUTE_COMMITTEE_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENODE_VERIFIER_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INNOCENCE_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MISBEHAVIOUR_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POP_VERIFIER_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUCCESS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADER_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"4dc925d3": "ACCUSATION_CONTRACT()",
		"625fb940": "ACTIVITY_CONTRACT()",
		"2090a442": "COMPUTE_COMMITTEE_CONTRACT()",
		"c13974e1": "ENODE_VERIFIER_CONTRACT()",
		"8e153dc3": "INNOCENCE_CONTRACT()",
		"925c5492": "MISBEHAVIOUR_CONTRACT()",
		"50d93720": "POP_VERIFIER_CONTRACT()",
		"d0a6d1a6": "SUCCESS()",
		"a4ad5d91": "UPGRADER_CONTRACT()",
	},
	Bin: "0x61014b610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061009d5760003560e01c80638e153dc3116100705780638e153dc3146100df578063925c5492146100e7578063a4ad5d91146100ef578063c13974e1146100f7578063d0a6d1a6146100ff57600080fd5b80632090a442146100a25780634dc925d3146100c757806350d93720146100cf578063625fb940146100d7575b600080fd5b6100aa60fa81565b6040516001600160a01b0390911681526020015b60405180910390f35b6100aa60fc81565b6100aa60fb81565b6100aa60f881565b6100aa60fd81565b6100aa60fe81565b6100aa60f981565b6100aa60ff81565b610107600181565b6040519081526020016100be56fea264697066735822122030b09ebee8d0cbc968bff711e74c2de496f4734f98456065ba6f8eaced65ab6864736f6c634300081e0033",
}

// PrecompiledABI is the input ABI used to generate the binding from.
// Deprecated: Use PrecompiledMetaData.ABI instead.
var PrecompiledABI = PrecompiledMetaData.ABI

// Deprecated: Use PrecompiledMetaData.Sigs instead.
// PrecompiledFuncSigs maps the 4-byte function signature to its string representation.
var PrecompiledFuncSigs = PrecompiledMetaData.Sigs

// PrecompiledBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use PrecompiledMetaData.Bin instead.
var PrecompiledBin = PrecompiledMetaData.Bin

// DeployPrecompiled deploys a new Ethereum contract, binding an instance of Precompiled to it.
func DeployPrecompiled(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Precompiled, error) {
	parsed, err := PrecompiledMetaData.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(PrecompiledBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Precompiled{PrecompiledCaller: PrecompiledCaller{contract: contract}, PrecompiledTransactor: PrecompiledTransactor{contract: contract}, PrecompiledFilterer: PrecompiledFilterer{contract: contract}}, nil
}

// Precompiled is an auto generated Go binding around an Ethereum contract.
type Precompiled struct {
	PrecompiledCaller     // Read-only binding to the contract
	PrecompiledTransactor // Write-only binding to the contract
	PrecompiledFilterer   // Log filterer for contract events
}

// PrecompiledCaller is an auto generated read-only Go binding around an Ethereum contract.
type PrecompiledCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// PrecompiledTransactor is an auto generated write-only Go binding around an Ethereum contract.
type PrecompiledTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// PrecompiledFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type PrecompiledFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// PrecompiledSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type PrecompiledSession struct {
	Contract     *Precompiled      // 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
}

// PrecompiledCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type PrecompiledCallerSession struct {
	Contract *PrecompiledCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts      // Call options to use throughout this session
}

// PrecompiledTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type PrecompiledTransactorSession struct {
	Contract     *PrecompiledTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
}

// PrecompiledRaw is an auto generated low-level Go binding around an Ethereum contract.
type PrecompiledRaw struct {
	Contract *Precompiled // Generic contract binding to access the raw methods on
}

// PrecompiledCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type PrecompiledCallerRaw struct {
	Contract *PrecompiledCaller // Generic read-only contract binding to access the raw methods on
}

// PrecompiledTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type PrecompiledTransactorRaw struct {
	Contract *PrecompiledTransactor // Generic write-only contract binding to access the raw methods on
}

// NewPrecompiled creates a new instance of Precompiled, bound to a specific deployed contract.
func NewPrecompiled(address common.Address, backend bind.ContractBackend) (*Precompiled, error) {
	contract, err := bindPrecompiled(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Precompiled{PrecompiledCaller: PrecompiledCaller{contract: contract}, PrecompiledTransactor: PrecompiledTransactor{contract: contract}, PrecompiledFilterer: PrecompiledFilterer{contract: contract}}, nil
}

// NewPrecompiledCaller creates a new read-only instance of Precompiled, bound to a specific deployed contract.
func NewPrecompiledCaller(address common.Address, caller bind.ContractCaller) (*PrecompiledCaller, error) {
	contract, err := bindPrecompiled(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &PrecompiledCaller{contract: contract}, nil
}

// NewPrecompiledTransactor creates a new write-only instance of Precompiled, bound to a specific deployed contract.
func NewPrecompiledTransactor(address common.Address, transactor bind.ContractTransactor) (*PrecompiledTransactor, error) {
	contract, err := bindPrecompiled(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &PrecompiledTransactor{contract: contract}, nil
}

// NewPrecompiledFilterer creates a new log filterer instance of Precompiled, bound to a specific deployed contract.
func NewPrecompiledFilterer(address common.Address, filterer bind.ContractFilterer) (*PrecompiledFilterer, error) {
	contract, err := bindPrecompiled(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &PrecompiledFilterer{contract: contract}, nil
}

// bindPrecompiled binds a generic wrapper to an already deployed contract.
func bindPrecompiled(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(PrecompiledABI))
	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 (_Precompiled *PrecompiledRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Precompiled.Contract.PrecompiledCaller.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 (_Precompiled *PrecompiledRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Precompiled.Contract.PrecompiledTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Precompiled *PrecompiledRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Precompiled.Contract.PrecompiledTransactor.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 (_Precompiled *PrecompiledCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Precompiled.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 (_Precompiled *PrecompiledTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Precompiled.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Precompiled *PrecompiledTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Precompiled.Contract.contract.Transact(opts, method, params...)
}

// ACCUSATIONCONTRACT is a free data retrieval call binding the contract method 0x4dc925d3.
//
// Solidity: function ACCUSATION_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCaller) ACCUSATIONCONTRACT(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Precompiled.contract.Call(opts, &out, "ACCUSATION_CONTRACT")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// ACCUSATIONCONTRACT is a free data retrieval call binding the contract method 0x4dc925d3.
//
// Solidity: function ACCUSATION_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledSession) ACCUSATIONCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.ACCUSATIONCONTRACT(&_Precompiled.CallOpts)
}

// ACCUSATIONCONTRACT is a free data retrieval call binding the contract method 0x4dc925d3.
//
// Solidity: function ACCUSATION_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCallerSession) ACCUSATIONCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.ACCUSATIONCONTRACT(&_Precompiled.CallOpts)
}

// ACTIVITYCONTRACT is a free data retrieval call binding the contract method 0x625fb940.
//
// Solidity: function ACTIVITY_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCaller) ACTIVITYCONTRACT(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Precompiled.contract.Call(opts, &out, "ACTIVITY_CONTRACT")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// ACTIVITYCONTRACT is a free data retrieval call binding the contract method 0x625fb940.
//
// Solidity: function ACTIVITY_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledSession) ACTIVITYCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.ACTIVITYCONTRACT(&_Precompiled.CallOpts)
}

// ACTIVITYCONTRACT is a free data retrieval call binding the contract method 0x625fb940.
//
// Solidity: function ACTIVITY_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCallerSession) ACTIVITYCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.ACTIVITYCONTRACT(&_Precompiled.CallOpts)
}

// COMPUTECOMMITTEECONTRACT is a free data retrieval call binding the contract method 0x2090a442.
//
// Solidity: function COMPUTE_COMMITTEE_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCaller) COMPUTECOMMITTEECONTRACT(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Precompiled.contract.Call(opts, &out, "COMPUTE_COMMITTEE_CONTRACT")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// COMPUTECOMMITTEECONTRACT is a free data retrieval call binding the contract method 0x2090a442.
//
// Solidity: function COMPUTE_COMMITTEE_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledSession) COMPUTECOMMITTEECONTRACT() (common.Address, error) {
	return _Precompiled.Contract.COMPUTECOMMITTEECONTRACT(&_Precompiled.CallOpts)
}

// COMPUTECOMMITTEECONTRACT is a free data retrieval call binding the contract method 0x2090a442.
//
// Solidity: function COMPUTE_COMMITTEE_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCallerSession) COMPUTECOMMITTEECONTRACT() (common.Address, error) {
	return _Precompiled.Contract.COMPUTECOMMITTEECONTRACT(&_Precompiled.CallOpts)
}

// ENODEVERIFIERCONTRACT is a free data retrieval call binding the contract method 0xc13974e1.
//
// Solidity: function ENODE_VERIFIER_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCaller) ENODEVERIFIERCONTRACT(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Precompiled.contract.Call(opts, &out, "ENODE_VERIFIER_CONTRACT")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// ENODEVERIFIERCONTRACT is a free data retrieval call binding the contract method 0xc13974e1.
//
// Solidity: function ENODE_VERIFIER_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledSession) ENODEVERIFIERCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.ENODEVERIFIERCONTRACT(&_Precompiled.CallOpts)
}

// ENODEVERIFIERCONTRACT is a free data retrieval call binding the contract method 0xc13974e1.
//
// Solidity: function ENODE_VERIFIER_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCallerSession) ENODEVERIFIERCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.ENODEVERIFIERCONTRACT(&_Precompiled.CallOpts)
}

// INNOCENCECONTRACT is a free data retrieval call binding the contract method 0x8e153dc3.
//
// Solidity: function INNOCENCE_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCaller) INNOCENCECONTRACT(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Precompiled.contract.Call(opts, &out, "INNOCENCE_CONTRACT")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// INNOCENCECONTRACT is a free data retrieval call binding the contract method 0x8e153dc3.
//
// Solidity: function INNOCENCE_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledSession) INNOCENCECONTRACT() (common.Address, error) {
	return _Precompiled.Contract.INNOCENCECONTRACT(&_Precompiled.CallOpts)
}

// INNOCENCECONTRACT is a free data retrieval call binding the contract method 0x8e153dc3.
//
// Solidity: function INNOCENCE_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCallerSession) INNOCENCECONTRACT() (common.Address, error) {
	return _Precompiled.Contract.INNOCENCECONTRACT(&_Precompiled.CallOpts)
}

// MISBEHAVIOURCONTRACT is a free data retrieval call binding the contract method 0x925c5492.
//
// Solidity: function MISBEHAVIOUR_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCaller) MISBEHAVIOURCONTRACT(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Precompiled.contract.Call(opts, &out, "MISBEHAVIOUR_CONTRACT")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// MISBEHAVIOURCONTRACT is a free data retrieval call binding the contract method 0x925c5492.
//
// Solidity: function MISBEHAVIOUR_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledSession) MISBEHAVIOURCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.MISBEHAVIOURCONTRACT(&_Precompiled.CallOpts)
}

// MISBEHAVIOURCONTRACT is a free data retrieval call binding the contract method 0x925c5492.
//
// Solidity: function MISBEHAVIOUR_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCallerSession) MISBEHAVIOURCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.MISBEHAVIOURCONTRACT(&_Precompiled.CallOpts)
}

// POPVERIFIERCONTRACT is a free data retrieval call binding the contract method 0x50d93720.
//
// Solidity: function POP_VERIFIER_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCaller) POPVERIFIERCONTRACT(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Precompiled.contract.Call(opts, &out, "POP_VERIFIER_CONTRACT")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// POPVERIFIERCONTRACT is a free data retrieval call binding the contract method 0x50d93720.
//
// Solidity: function POP_VERIFIER_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledSession) POPVERIFIERCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.POPVERIFIERCONTRACT(&_Precompiled.CallOpts)
}

// POPVERIFIERCONTRACT is a free data retrieval call binding the contract method 0x50d93720.
//
// Solidity: function POP_VERIFIER_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCallerSession) POPVERIFIERCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.POPVERIFIERCONTRACT(&_Precompiled.CallOpts)
}

// SUCCESS is a free data retrieval call binding the contract method 0xd0a6d1a6.
//
// Solidity: function SUCCESS() view returns(uint256)
func (_Precompiled *PrecompiledCaller) SUCCESS(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Precompiled.contract.Call(opts, &out, "SUCCESS")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// SUCCESS is a free data retrieval call binding the contract method 0xd0a6d1a6.
//
// Solidity: function SUCCESS() view returns(uint256)
func (_Precompiled *PrecompiledSession) SUCCESS() (*big.Int, error) {
	return _Precompiled.Contract.SUCCESS(&_Precompiled.CallOpts)
}

// SUCCESS is a free data retrieval call binding the contract method 0xd0a6d1a6.
//
// Solidity: function SUCCESS() view returns(uint256)
func (_Precompiled *PrecompiledCallerSession) SUCCESS() (*big.Int, error) {
	return _Precompiled.Contract.SUCCESS(&_Precompiled.CallOpts)
}

// UPGRADERCONTRACT is a free data retrieval call binding the contract method 0xa4ad5d91.
//
// Solidity: function UPGRADER_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCaller) UPGRADERCONTRACT(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Precompiled.contract.Call(opts, &out, "UPGRADER_CONTRACT")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// UPGRADERCONTRACT is a free data retrieval call binding the contract method 0xa4ad5d91.
//
// Solidity: function UPGRADER_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledSession) UPGRADERCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.UPGRADERCONTRACT(&_Precompiled.CallOpts)
}

// UPGRADERCONTRACT is a free data retrieval call binding the contract method 0xa4ad5d91.
//
// Solidity: function UPGRADER_CONTRACT() view returns(address)
func (_Precompiled *PrecompiledCallerSession) UPGRADERCONTRACT() (common.Address, error) {
	return _Precompiled.Contract.UPGRADERCONTRACT(&_Precompiled.CallOpts)
}

// ReentrancyGuardMetaData contains all meta data concerning the ReentrancyGuard contract.
var ReentrancyGuardMetaData = &bind.MetaData{
	ABI: "[]",
}

// ReentrancyGuardABI is the input ABI used to generate the binding from.
// Deprecated: Use ReentrancyGuardMetaData.ABI instead.
var ReentrancyGuardABI = ReentrancyGuardMetaData.ABI

// ReentrancyGuard is an auto generated Go binding around an Ethereum contract.
type ReentrancyGuard struct {
	ReentrancyGuardCaller     // Read-only binding to the contract
	ReentrancyGuardTransactor // Write-only binding to the contract
	ReentrancyGuardFilterer   // Log filterer for contract events
}

// ReentrancyGuardCaller is an auto generated read-only Go binding around an Ethereum contract.
type ReentrancyGuardCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ReentrancyGuardTransactor is an auto generated write-only Go binding around an Ethereum contract.
type ReentrancyGuardTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ReentrancyGuardFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type ReentrancyGuardFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ReentrancyGuardSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ReentrancyGuardSession struct {
	Contract     *ReentrancyGuard  // 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
}

// ReentrancyGuardCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type ReentrancyGuardCallerSession struct {
	Contract *ReentrancyGuardCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts          // Call options to use throughout this session
}

// ReentrancyGuardTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type ReentrancyGuardTransactorSession struct {
	Contract     *ReentrancyGuardTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts          // Transaction auth options to use throughout this session
}

// ReentrancyGuardRaw is an auto generated low-level Go binding around an Ethereum contract.
type ReentrancyGuardRaw struct {
	Contract *ReentrancyGuard // Generic contract binding to access the raw methods on
}

// ReentrancyGuardCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type ReentrancyGuardCallerRaw struct {
	Contract *ReentrancyGuardCaller // Generic read-only contract binding to access the raw methods on
}

// ReentrancyGuardTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type ReentrancyGuardTransactorRaw struct {
	Contract *ReentrancyGuardTransactor // Generic write-only contract binding to access the raw methods on
}

// NewReentrancyGuard creates a new instance of ReentrancyGuard, bound to a specific deployed contract.
func NewReentrancyGuard(address common.Address, backend bind.ContractBackend) (*ReentrancyGuard, error) {
	contract, err := bindReentrancyGuard(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &ReentrancyGuard{ReentrancyGuardCaller: ReentrancyGuardCaller{contract: contract}, ReentrancyGuardTransactor: ReentrancyGuardTransactor{contract: contract}, ReentrancyGuardFilterer: ReentrancyGuardFilterer{contract: contract}}, nil
}

// NewReentrancyGuardCaller creates a new read-only instance of ReentrancyGuard, bound to a specific deployed contract.
func NewReentrancyGuardCaller(address common.Address, caller bind.ContractCaller) (*ReentrancyGuardCaller, error) {
	contract, err := bindReentrancyGuard(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &ReentrancyGuardCaller{contract: contract}, nil
}

// NewReentrancyGuardTransactor creates a new write-only instance of ReentrancyGuard, bound to a specific deployed contract.
func NewReentrancyGuardTransactor(address common.Address, transactor bind.ContractTransactor) (*ReentrancyGuardTransactor, error) {
	contract, err := bindReentrancyGuard(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &ReentrancyGuardTransactor{contract: contract}, nil
}

// NewReentrancyGuardFilterer creates a new log filterer instance of ReentrancyGuard, bound to a specific deployed contract.
func NewReentrancyGuardFilterer(address common.Address, filterer bind.ContractFilterer) (*ReentrancyGuardFilterer, error) {
	contract, err := bindReentrancyGuard(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &ReentrancyGuardFilterer{contract: contract}, nil
}

// bindReentrancyGuard binds a generic wrapper to an already deployed contract.
func bindReentrancyGuard(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(ReentrancyGuardABI))
	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 (_ReentrancyGuard *ReentrancyGuardRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ReentrancyGuard.Contract.ReentrancyGuardCaller.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 (_ReentrancyGuard *ReentrancyGuardRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ReentrancyGuard.Contract.ReentrancyGuardTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ReentrancyGuard *ReentrancyGuardRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ReentrancyGuard.Contract.ReentrancyGuardTransactor.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 (_ReentrancyGuard *ReentrancyGuardCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ReentrancyGuard.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 (_ReentrancyGuard *ReentrancyGuardTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ReentrancyGuard.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ReentrancyGuard *ReentrancyGuardTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ReentrancyGuard.Contract.contract.Transact(opts, method, params...)
}

// ScheduleControllerMetaData contains all meta data concerning the ScheduleController contract.
var ScheduleControllerMetaData = &bind.MetaData{
	ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"scheduleVault\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDuration\",\"type\":\"uint256\"}],\"name\":\"NewSchedule\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getSchedule\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unlockedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastUnlockTime\",\"type\":\"uint256\"}],\"internalType\":\"structIScheduleController.Schedule\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"}],\"name\":\"getTotalSchedules\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"7264c4da": "getSchedule(address,uint256)",
		"088566e9": "getTotalSchedules(address)",
	},
}

// ScheduleControllerABI is the input ABI used to generate the binding from.
// Deprecated: Use ScheduleControllerMetaData.ABI instead.
var ScheduleControllerABI = ScheduleControllerMetaData.ABI

// Deprecated: Use ScheduleControllerMetaData.Sigs instead.
// ScheduleControllerFuncSigs maps the 4-byte function signature to its string representation.
var ScheduleControllerFuncSigs = ScheduleControllerMetaData.Sigs

// ScheduleController is an auto generated Go binding around an Ethereum contract.
type ScheduleController struct {
	ScheduleControllerCaller     // Read-only binding to the contract
	ScheduleControllerTransactor // Write-only binding to the contract
	ScheduleControllerFilterer   // Log filterer for contract events
}

// ScheduleControllerCaller is an auto generated read-only Go binding around an Ethereum contract.
type ScheduleControllerCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ScheduleControllerTransactor is an auto generated write-only Go binding around an Ethereum contract.
type ScheduleControllerTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ScheduleControllerFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type ScheduleControllerFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// ScheduleControllerSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ScheduleControllerSession struct {
	Contract     *ScheduleController // 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
}

// ScheduleControllerCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type ScheduleControllerCallerSession struct {
	Contract *ScheduleControllerCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts             // Call options to use throughout this session
}

// ScheduleControllerTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type ScheduleControllerTransactorSession struct {
	Contract     *ScheduleControllerTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts             // Transaction auth options to use throughout this session
}

// ScheduleControllerRaw is an auto generated low-level Go binding around an Ethereum contract.
type ScheduleControllerRaw struct {
	Contract *ScheduleController // Generic contract binding to access the raw methods on
}

// ScheduleControllerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type ScheduleControllerCallerRaw struct {
	Contract *ScheduleControllerCaller // Generic read-only contract binding to access the raw methods on
}

// ScheduleControllerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type ScheduleControllerTransactorRaw struct {
	Contract *ScheduleControllerTransactor // Generic write-only contract binding to access the raw methods on
}

// NewScheduleController creates a new instance of ScheduleController, bound to a specific deployed contract.
func NewScheduleController(address common.Address, backend bind.ContractBackend) (*ScheduleController, error) {
	contract, err := bindScheduleController(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &ScheduleController{ScheduleControllerCaller: ScheduleControllerCaller{contract: contract}, ScheduleControllerTransactor: ScheduleControllerTransactor{contract: contract}, ScheduleControllerFilterer: ScheduleControllerFilterer{contract: contract}}, nil
}

// NewScheduleControllerCaller creates a new read-only instance of ScheduleController, bound to a specific deployed contract.
func NewScheduleControllerCaller(address common.Address, caller bind.ContractCaller) (*ScheduleControllerCaller, error) {
	contract, err := bindScheduleController(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &ScheduleControllerCaller{contract: contract}, nil
}

// NewScheduleControllerTransactor creates a new write-only instance of ScheduleController, bound to a specific deployed contract.
func NewScheduleControllerTransactor(address common.Address, transactor bind.ContractTransactor) (*ScheduleControllerTransactor, error) {
	contract, err := bindScheduleController(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &ScheduleControllerTransactor{contract: contract}, nil
}

// NewScheduleControllerFilterer creates a new log filterer instance of ScheduleController, bound to a specific deployed contract.
func NewScheduleControllerFilterer(address common.Address, filterer bind.ContractFilterer) (*ScheduleControllerFilterer, error) {
	contract, err := bindScheduleController(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &ScheduleControllerFilterer{contract: contract}, nil
}

// bindScheduleController binds a generic wrapper to an already deployed contract.
func bindScheduleController(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(ScheduleControllerABI))
	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 (_ScheduleController *ScheduleControllerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ScheduleController.Contract.ScheduleControllerCaller.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 (_ScheduleController *ScheduleControllerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ScheduleController.Contract.ScheduleControllerTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ScheduleController *ScheduleControllerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ScheduleController.Contract.ScheduleControllerTransactor.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 (_ScheduleController *ScheduleControllerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ScheduleController.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 (_ScheduleController *ScheduleControllerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ScheduleController.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ScheduleController *ScheduleControllerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ScheduleController.Contract.contract.Transact(opts, method, params...)
}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_ScheduleController *ScheduleControllerCaller) GetSchedule(opts *bind.CallOpts, _vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	var out []interface{}
	err := _ScheduleController.contract.Call(opts, &out, "getSchedule", _vault, _id)

	if err != nil {
		return *new(IScheduleControllerSchedule), err
	}

	out0 := *abi.ConvertType(out[0], new(IScheduleControllerSchedule)).(*IScheduleControllerSchedule)

	return out0, err

}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_ScheduleController *ScheduleControllerSession) GetSchedule(_vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	return _ScheduleController.Contract.GetSchedule(&_ScheduleController.CallOpts, _vault, _id)
}

// GetSchedule is a free data retrieval call binding the contract method 0x7264c4da.
//
// Solidity: function getSchedule(address _vault, uint256 _id) view returns((uint256,uint256,uint256,uint256,uint256))
func (_ScheduleController *ScheduleControllerCallerSession) GetSchedule(_vault common.Address, _id *big.Int) (IScheduleControllerSchedule, error) {
	return _ScheduleController.Contract.GetSchedule(&_ScheduleController.CallOpts, _vault, _id)
}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_ScheduleController *ScheduleControllerCaller) GetTotalSchedules(opts *bind.CallOpts, _vault common.Address) (*big.Int, error) {
	var out []interface{}
	err := _ScheduleController.contract.Call(opts, &out, "getTotalSchedules", _vault)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_ScheduleController *ScheduleControllerSession) GetTotalSchedules(_vault common.Address) (*big.Int, error) {
	return _ScheduleController.Contract.GetTotalSchedules(&_ScheduleController.CallOpts, _vault)
}

// GetTotalSchedules is a free data retrieval call binding the contract method 0x088566e9.
//
// Solidity: function getTotalSchedules(address _vault) view returns(uint256)
func (_ScheduleController *ScheduleControllerCallerSession) GetTotalSchedules(_vault common.Address) (*big.Int, error) {
	return _ScheduleController.Contract.GetTotalSchedules(&_ScheduleController.CallOpts, _vault)
}

// ScheduleControllerNewScheduleIterator is returned from FilterNewSchedule and is used to iterate over the raw logs and unpacked data for NewSchedule events raised by the ScheduleController contract.
type ScheduleControllerNewScheduleIterator struct {
	Event *ScheduleControllerNewSchedule // 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 *ScheduleControllerNewScheduleIterator) 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(ScheduleControllerNewSchedule)
			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(ScheduleControllerNewSchedule)
		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 *ScheduleControllerNewScheduleIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *ScheduleControllerNewScheduleIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// ScheduleControllerNewSchedule represents a NewSchedule event raised by the ScheduleController contract.
type ScheduleControllerNewSchedule struct {
	ScheduleVault common.Address
	Amount        *big.Int
	Start         *big.Int
	TotalDuration *big.Int
	Raw           types.Log // Blockchain specific contextual infos
}

// FilterNewSchedule is a free log retrieval operation binding the contract event 0xe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd.
//
// Solidity: event NewSchedule(address indexed scheduleVault, uint256 amount, uint256 start, uint256 totalDuration)
func (_ScheduleController *ScheduleControllerFilterer) FilterNewSchedule(opts *bind.FilterOpts, scheduleVault []common.Address) (*ScheduleControllerNewScheduleIterator, error) {

	var scheduleVaultRule []interface{}
	for _, scheduleVaultItem := range scheduleVault {
		scheduleVaultRule = append(scheduleVaultRule, scheduleVaultItem)
	}

	logs, sub, err := _ScheduleController.contract.FilterLogs(opts, "NewSchedule", scheduleVaultRule)
	if err != nil {
		return nil, err
	}
	return &ScheduleControllerNewScheduleIterator{contract: _ScheduleController.contract, event: "NewSchedule", logs: logs, sub: sub}, nil
}

// WatchNewSchedule is a free log subscription operation binding the contract event 0xe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd.
//
// Solidity: event NewSchedule(address indexed scheduleVault, uint256 amount, uint256 start, uint256 totalDuration)
func (_ScheduleController *ScheduleControllerFilterer) WatchNewSchedule(opts *bind.WatchOpts, sink chan<- *ScheduleControllerNewSchedule, scheduleVault []common.Address) (event.Subscription, error) {

	var scheduleVaultRule []interface{}
	for _, scheduleVaultItem := range scheduleVault {
		scheduleVaultRule = append(scheduleVaultRule, scheduleVaultItem)
	}

	logs, sub, err := _ScheduleController.contract.WatchLogs(opts, "NewSchedule", scheduleVaultRule)
	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(ScheduleControllerNewSchedule)
				if err := _ScheduleController.contract.UnpackLog(event, "NewSchedule", 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
}

// ParseNewSchedule is a log parse operation binding the contract event 0xe8c9fd2e555ad3e633f249786eff2a2a523c05e21f497fbf8daadfb2e78a1edd.
//
// Solidity: event NewSchedule(address indexed scheduleVault, uint256 amount, uint256 start, uint256 totalDuration)
func (_ScheduleController *ScheduleControllerFilterer) ParseNewSchedule(log types.Log) (*ScheduleControllerNewSchedule, error) {
	event := new(ScheduleControllerNewSchedule)
	if err := _ScheduleController.contract.UnpackLog(event, "NewSchedule", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// SlasherMetaData contains all meta data concerning the Slasher contract.
var SlasherMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[],\"name\":\"getSlashingScaleFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jailtime\",\"type\":\"uint256\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailedState\",\"type\":\"uint8\"}],\"name\":\"jail\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailboundState\",\"type\":\"uint8\"}],\"name\":\"jailbound\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRate\",\"type\":\"uint256\"}],\"name\":\"slash\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"_val\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_slashingRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_jailtime\",\"type\":\"uint256\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailedState\",\"type\":\"uint8\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"_newJailboundState\",\"type\":\"uint8\"}],\"name\":\"slashAndJail\",\"outputs\":[{\"components\":[{\"internalType\":\"addresspayable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nodeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"enode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"commissionRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfBondedStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfUnbondingStakeLocked\",\"type\":\"uint256\"},{\"internalType\":\"contractILiquid\",\"name\":\"liquidStateContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"registrationBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSlashed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"jailReleaseBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"consensusKey\",\"type\":\"bytes\"},{\"internalType\":\"enumIAutonity.ValidatorState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"conversionRatio\",\"type\":\"uint256\"}],\"internalType\":\"structIAutonity.Validator\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"d0c66054": "getSlashingScaleFactor()",
		"41b6cb0f": "jail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256),uint256,uint256,uint8)",
		"0273a3ee": "jailbound((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256),uint8)",
		"99ac2d48": "slash((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256),uint256)",
		"a00f313f": "slashAndJail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256),uint256,uint256,uint256,uint8,uint8)",
	},
	Bin: "0x6080604052348015600f57600080fd5b50610d818061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630273a3ee1461005c57806341b6cb0f1461008557806399ac2d4814610098578063a00f313f146100b9578063d0c66054146100db575b600080fd5b61006f61006a366004610843565b6100f1565b60405161007c9190610a5d565b60405180910390f35b61006f610093366004610a77565b61010c565b6100ab6100a6366004610ad8565b610129565b60405161007c929190610b1d565b6100cc6100c7366004610b3f565b610147565b60405161007c93929190610bb9565b6100e361020a565b60405190815260200161007c565b6100f9610517565b610103838361021d565b50815b92915050565b610114610517565b61012085858585610256565b50929392505050565b610131610517565b60008061013e8585610299565b94959350505050565b61014f610517565b60008061015e6004600a610ce0565b88106101da5760008961012001518a60c001518b60a001516101809190610cec565b61018a9190610cec565b600060a08c018190526101008c018190526101208c0181905260c08c01526101e08b01805191925082916101bf908390610cec565b9052506101cc8a8661021d565b8993509150600190506101fe565b60006101e68a8a610299565b90506101f48a898989610256565b8993509150600090505b96509650969350505050565b60006102186004600a610ce0565b905090565b6000610200830152610240820181600581111561023c5761023c6108d7565b9081600581111561024f5761024f6108d7565b9052505050565b6102608284610cec565b610200850152610240840181600581111561027d5761027d6108d7565b90816005811115610290576102906108d7565b90525050505050565b60006102a76004600a610ce0565b82106103085760405162461bcd60e51b815260206004820152602660248201527f63616e6e6f7420736c617368203130302520776974686f7574206a61696c626f604482015265756e64696e6760d01b606482015260840160405180910390fd5b60008361012001518460c001518560a001516103249190610cec565b61032e9190610cec565b9050600061033e6004600a610ce0565b6103488386610cff565b6103529190610d16565b905060008190508086610120015110610384578086610120018181516103789190610d38565b9052506000905061039f565b6101208601516103949082610d38565b600061012088015290505b801561041c5780866101000151106103e7578086610100018181516103c49190610d38565b90525060a0860180518291906103db908390610d38565b9052506000905061041c565b6101008601516103f79082610d38565b90508561010001518660a0018181516104109190610d38565b90525060006101008701525b60008111801561043f575060008660a001518760c0015161043d9190610cec565b115b156104eb5760008660a001518760c0015161045a9190610cec565b60c08801516104699084610cff565b6104739190610d16565b905060008760a001518860c0015161048b9190610cec565b60a089015161049a9085610cff565b6104a49190610d16565b9050818860c0018181516104b89190610d38565b90525060a0880180518291906104cf908390610d38565b9052506104dc8183610cec565b6104e69084610d38565b925050505b6104f58183610d38565b915081866101e00181815161050a9190610cec565b9052509095945050505050565b60405180610280016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160608152602001600060058111156105d8576105d86108d7565b8152602001600081525090565b634e487b7160e01b600052604160045260246000fd5b604051610280810167ffffffffffffffff8111828210171561061f5761061f6105e5565b60405290565b80356001600160a01b038116811461063c57600080fd5b919050565b600082601f83011261065257600080fd5b81356020830160008067ffffffffffffffff841115610673576106736105e5565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156106a2576106a26105e5565b6040528381529050808284018710156106ba57600080fd5b838360208301376000602085830101528094505050505092915050565b80356006811061063c57600080fd5b600061028082840312156106f957600080fd5b6107016105fb565b905061070c82610625565b815261071a60208301610625565b602082015261072b60408301610625565b6040820152606082013567ffffffffffffffff81111561074a57600080fd5b61075684828501610641565b6060830152506080828101359082015260a0808301359082015260c0808301359082015260e0808301359082015261010080830135908201526101208083013590820152610140808301359082015261016080830135908201526107bd6101808301610625565b6101808201526101a082810135908201526101c080830135908201526101e08083013590820152610200808301359082015261022082013567ffffffffffffffff81111561080a57600080fd5b61081684828501610641565b6102208301525061082a61024083016106d7565b6102408201526102609182013591810191909152919050565b6000806040838503121561085657600080fd5b823567ffffffffffffffff81111561086d57600080fd5b610879858286016106e6565b925050610888602084016106d7565b90509250929050565b6000815180845260005b818110156108b75760208185018101518683018201520161089b565b506000602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b600052602160045260246000fd5b6006811061090b57634e487b7160e01b600052602160045260246000fd5b9052565b80516001600160a01b031682526000602082015161093860208501826001600160a01b03169052565b50604082015161095360408501826001600160a01b03169052565b506060820151610280606085015261096f610280850182610891565b90506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008301516101008501526101208301516101208501526101408301516101408501526101608301516101608501526101808301516109e56101808601826001600160a01b03169052565b506101a08301516101a08501526101c08301516101c08501526101e08301516101e0850152610200830151610200850152610220830151848203610220860152610a2f8282610891565b915050610240830151610a466102408601826108ed565b506102608301516102608501528091505092915050565b602081526000610a70602083018461090f565b9392505050565b60008060008060808587031215610a8d57600080fd5b843567ffffffffffffffff811115610aa457600080fd5b610ab0878288016106e6565b9450506020850135925060408501359150610acd606086016106d7565b905092959194509250565b60008060408385031215610aeb57600080fd5b823567ffffffffffffffff811115610b0257600080fd5b610b0e858286016106e6565b95602094909401359450505050565b604081526000610b30604083018561090f565b90508260208301529392505050565b60008060008060008060c08789031215610b5857600080fd5b863567ffffffffffffffff811115610b6f57600080fd5b610b7b89828a016106e6565b965050602087013594506040870135935060608701359250610b9f608088016106d7565b9150610bad60a088016106d7565b90509295509295509295565b606081526000610bcc606083018661090f565b602083019490945250901515604090910152919050565b634e487b7160e01b600052601160045260246000fd5b6001815b6001841115610c3457808504811115610c1857610c18610be3565b6001841615610c2657908102905b60019390931c928002610bfd565b935093915050565b600082610c4b57506001610106565b81610c5857506000610106565b8160018114610c6e5760028114610c7857610c94565b6001915050610106565b60ff841115610c8957610c89610be3565b50506001821b610106565b5060208310610133831016604e8410600b8410161715610cb7575081810a610106565b610cc46000198484610bf9565b8060001904821115610cd857610cd8610be3565b029392505050565b6000610a708383610c3c565b8082018082111561010657610106610be3565b808202811582820484141761010657610106610be3565b600082610d3357634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561010657610106610be356fea2646970667358221220147eee18a661e7ad475ec0658edf33129576eb045153bd87b145a47945bc2d6264736f6c634300081e0033",
}

// SlasherABI is the input ABI used to generate the binding from.
// Deprecated: Use SlasherMetaData.ABI instead.
var SlasherABI = SlasherMetaData.ABI

// Deprecated: Use SlasherMetaData.Sigs instead.
// SlasherFuncSigs maps the 4-byte function signature to its string representation.
var SlasherFuncSigs = SlasherMetaData.Sigs

// SlasherBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use SlasherMetaData.Bin instead.
var SlasherBin = SlasherMetaData.Bin

// DeploySlasher deploys a new Ethereum contract, binding an instance of Slasher to it.
func DeploySlasher(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Slasher, error) {
	parsed, err := SlasherMetaData.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(SlasherBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Slasher{SlasherCaller: SlasherCaller{contract: contract}, SlasherTransactor: SlasherTransactor{contract: contract}, SlasherFilterer: SlasherFilterer{contract: contract}}, nil
}

// Slasher is an auto generated Go binding around an Ethereum contract.
type Slasher struct {
	SlasherCaller     // Read-only binding to the contract
	SlasherTransactor // Write-only binding to the contract
	SlasherFilterer   // Log filterer for contract events
}

// SlasherCaller is an auto generated read-only Go binding around an Ethereum contract.
type SlasherCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// SlasherTransactor is an auto generated write-only Go binding around an Ethereum contract.
type SlasherTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// SlasherFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type SlasherFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// SlasherSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type SlasherSession struct {
	Contract     *Slasher          // 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
}

// SlasherCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type SlasherCallerSession struct {
	Contract *SlasherCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts  // Call options to use throughout this session
}

// SlasherTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type SlasherTransactorSession struct {
	Contract     *SlasherTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
}

// SlasherRaw is an auto generated low-level Go binding around an Ethereum contract.
type SlasherRaw struct {
	Contract *Slasher // Generic contract binding to access the raw methods on
}

// SlasherCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type SlasherCallerRaw struct {
	Contract *SlasherCaller // Generic read-only contract binding to access the raw methods on
}

// SlasherTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type SlasherTransactorRaw struct {
	Contract *SlasherTransactor // Generic write-only contract binding to access the raw methods on
}

// NewSlasher creates a new instance of Slasher, bound to a specific deployed contract.
func NewSlasher(address common.Address, backend bind.ContractBackend) (*Slasher, error) {
	contract, err := bindSlasher(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Slasher{SlasherCaller: SlasherCaller{contract: contract}, SlasherTransactor: SlasherTransactor{contract: contract}, SlasherFilterer: SlasherFilterer{contract: contract}}, nil
}

// NewSlasherCaller creates a new read-only instance of Slasher, bound to a specific deployed contract.
func NewSlasherCaller(address common.Address, caller bind.ContractCaller) (*SlasherCaller, error) {
	contract, err := bindSlasher(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &SlasherCaller{contract: contract}, nil
}

// NewSlasherTransactor creates a new write-only instance of Slasher, bound to a specific deployed contract.
func NewSlasherTransactor(address common.Address, transactor bind.ContractTransactor) (*SlasherTransactor, error) {
	contract, err := bindSlasher(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &SlasherTransactor{contract: contract}, nil
}

// NewSlasherFilterer creates a new log filterer instance of Slasher, bound to a specific deployed contract.
func NewSlasherFilterer(address common.Address, filterer bind.ContractFilterer) (*SlasherFilterer, error) {
	contract, err := bindSlasher(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &SlasherFilterer{contract: contract}, nil
}

// bindSlasher binds a generic wrapper to an already deployed contract.
func bindSlasher(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(SlasherABI))
	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 (_Slasher *SlasherRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Slasher.Contract.SlasherCaller.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 (_Slasher *SlasherRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Slasher.Contract.SlasherTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Slasher *SlasherRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Slasher.Contract.SlasherTransactor.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 (_Slasher *SlasherCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Slasher.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 (_Slasher *SlasherTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Slasher.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Slasher *SlasherTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Slasher.Contract.contract.Transact(opts, method, params...)
}

// GetSlashingScaleFactor is a free data retrieval call binding the contract method 0xd0c66054.
//
// Solidity: function getSlashingScaleFactor() pure returns(uint256)
func (_Slasher *SlasherCaller) GetSlashingScaleFactor(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Slasher.contract.Call(opts, &out, "getSlashingScaleFactor")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetSlashingScaleFactor is a free data retrieval call binding the contract method 0xd0c66054.
//
// Solidity: function getSlashingScaleFactor() pure returns(uint256)
func (_Slasher *SlasherSession) GetSlashingScaleFactor() (*big.Int, error) {
	return _Slasher.Contract.GetSlashingScaleFactor(&_Slasher.CallOpts)
}

// GetSlashingScaleFactor is a free data retrieval call binding the contract method 0xd0c66054.
//
// Solidity: function getSlashingScaleFactor() pure returns(uint256)
func (_Slasher *SlasherCallerSession) GetSlashingScaleFactor() (*big.Int, error) {
	return _Slasher.Contract.GetSlashingScaleFactor(&_Slasher.CallOpts)
}

// Jail is a free data retrieval call binding the contract method 0x41b6cb0f.
//
// Solidity: function jail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_Slasher *SlasherCaller) Jail(opts *bind.CallOpts, _val IAutonityValidator, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8) (IAutonityValidator, error) {
	var out []interface{}
	err := _Slasher.contract.Call(opts, &out, "jail", _val, _blockNumber, _jailtime, _newJailedState)

	if err != nil {
		return *new(IAutonityValidator), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityValidator)).(*IAutonityValidator)

	return out0, err

}

// Jail is a free data retrieval call binding the contract method 0x41b6cb0f.
//
// Solidity: function jail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_Slasher *SlasherSession) Jail(_val IAutonityValidator, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8) (IAutonityValidator, error) {
	return _Slasher.Contract.Jail(&_Slasher.CallOpts, _val, _blockNumber, _jailtime, _newJailedState)
}

// Jail is a free data retrieval call binding the contract method 0x41b6cb0f.
//
// Solidity: function jail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_Slasher *SlasherCallerSession) Jail(_val IAutonityValidator, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8) (IAutonityValidator, error) {
	return _Slasher.Contract.Jail(&_Slasher.CallOpts, _val, _blockNumber, _jailtime, _newJailedState)
}

// Jailbound is a free data retrieval call binding the contract method 0x0273a3ee.
//
// Solidity: function jailbound((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint8 _newJailboundState) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_Slasher *SlasherCaller) Jailbound(opts *bind.CallOpts, _val IAutonityValidator, _newJailboundState uint8) (IAutonityValidator, error) {
	var out []interface{}
	err := _Slasher.contract.Call(opts, &out, "jailbound", _val, _newJailboundState)

	if err != nil {
		return *new(IAutonityValidator), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityValidator)).(*IAutonityValidator)

	return out0, err

}

// Jailbound is a free data retrieval call binding the contract method 0x0273a3ee.
//
// Solidity: function jailbound((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint8 _newJailboundState) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_Slasher *SlasherSession) Jailbound(_val IAutonityValidator, _newJailboundState uint8) (IAutonityValidator, error) {
	return _Slasher.Contract.Jailbound(&_Slasher.CallOpts, _val, _newJailboundState)
}

// Jailbound is a free data retrieval call binding the contract method 0x0273a3ee.
//
// Solidity: function jailbound((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint8 _newJailboundState) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256))
func (_Slasher *SlasherCallerSession) Jailbound(_val IAutonityValidator, _newJailboundState uint8) (IAutonityValidator, error) {
	return _Slasher.Contract.Jailbound(&_Slasher.CallOpts, _val, _newJailboundState)
}

// Slash is a free data retrieval call binding the contract method 0x99ac2d48.
//
// Solidity: function slash((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256)
func (_Slasher *SlasherCaller) Slash(opts *bind.CallOpts, _val IAutonityValidator, _slashingRate *big.Int) (IAutonityValidator, *big.Int, error) {
	var out []interface{}
	err := _Slasher.contract.Call(opts, &out, "slash", _val, _slashingRate)

	if err != nil {
		return *new(IAutonityValidator), *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityValidator)).(*IAutonityValidator)
	out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)

	return out0, out1, err

}

// Slash is a free data retrieval call binding the contract method 0x99ac2d48.
//
// Solidity: function slash((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256)
func (_Slasher *SlasherSession) Slash(_val IAutonityValidator, _slashingRate *big.Int) (IAutonityValidator, *big.Int, error) {
	return _Slasher.Contract.Slash(&_Slasher.CallOpts, _val, _slashingRate)
}

// Slash is a free data retrieval call binding the contract method 0x99ac2d48.
//
// Solidity: function slash((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256)
func (_Slasher *SlasherCallerSession) Slash(_val IAutonityValidator, _slashingRate *big.Int) (IAutonityValidator, *big.Int, error) {
	return _Slasher.Contract.Slash(&_Slasher.CallOpts, _val, _slashingRate)
}

// SlashAndJail is a free data retrieval call binding the contract method 0xa00f313f.
//
// Solidity: function slashAndJail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256, bool)
func (_Slasher *SlasherCaller) SlashAndJail(opts *bind.CallOpts, _val IAutonityValidator, _slashingRate *big.Int, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (IAutonityValidator, *big.Int, bool, error) {
	var out []interface{}
	err := _Slasher.contract.Call(opts, &out, "slashAndJail", _val, _slashingRate, _blockNumber, _jailtime, _newJailedState, _newJailboundState)

	if err != nil {
		return *new(IAutonityValidator), *new(*big.Int), *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(IAutonityValidator)).(*IAutonityValidator)
	out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
	out2 := *abi.ConvertType(out[2], new(bool)).(*bool)

	return out0, out1, out2, err

}

// SlashAndJail is a free data retrieval call binding the contract method 0xa00f313f.
//
// Solidity: function slashAndJail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256, bool)
func (_Slasher *SlasherSession) SlashAndJail(_val IAutonityValidator, _slashingRate *big.Int, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (IAutonityValidator, *big.Int, bool, error) {
	return _Slasher.Contract.SlashAndJail(&_Slasher.CallOpts, _val, _slashingRate, _blockNumber, _jailtime, _newJailedState, _newJailboundState)
}

// SlashAndJail is a free data retrieval call binding the contract method 0xa00f313f.
//
// Solidity: function slashAndJail((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256) _val, uint256 _slashingRate, uint256 _blockNumber, uint256 _jailtime, uint8 _newJailedState, uint8 _newJailboundState) pure returns((address,address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,bytes,uint8,uint256), uint256, bool)
func (_Slasher *SlasherCallerSession) SlashAndJail(_val IAutonityValidator, _slashingRate *big.Int, _blockNumber *big.Int, _jailtime *big.Int, _newJailedState uint8, _newJailboundState uint8) (IAutonityValidator, *big.Int, bool, error) {
	return _Slasher.Contract.SlashAndJail(&_Slasher.CallOpts, _val, _slashingRate, _blockNumber, _jailtime, _newJailedState, _newJailboundState)
}

// StabilizationMetaData contains all meta data concerning the Stabilization contract.
var StabilizationMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"borrowInterestRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"announcementWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minCollateralizationRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minDebtRequirement\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"targetPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultNTNATNPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultNTNUSDPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultACUUSDPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIStabilization.Config\",\"name\":\"config_\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"supplyControl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"auctioneer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"acu\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"collateralToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AnnouncementWindowPending\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientPayment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDebtPosition\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"InvalidParameter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrice\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Liquidatable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoDebtPosition\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotLiquidatable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotRestricted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv18_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"UD60x18\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"PRBMath_UD60x18_Exp2_InputTooBig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"UD60x18\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"PRBMath_UD60x18_Exp_InputTooBig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"PriceUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValue\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAnnouncementWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"activeSince\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"pendingWindowOverridden\",\"type\":\"bool\"}],\"name\":\"AnnouncementWindowUpdateAnnounced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CDPRestrictionsRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"activeSince\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"pendingRateOverridden\",\"type\":\"bool\"}],\"name\":\"InterestRateUpdateAnnounced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"}],\"name\":\"Liquidate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRatio\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"activeSince\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"pendingRatioOverridden\",\"type\":\"bool\"}],\"name\":\"LiquidationRatioUpdateAnnounced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRatio\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"activeSince\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"pendingRatioOverridden\",\"type\":\"bool\"}],\"name\":\"MinCollateralizationRatioUpdateAnnounced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"accounts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acuPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateralPriceACU\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"targetPriceACU\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mcr\",\"type\":\"uint256\"}],\"name\":\"borrowLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"cdps\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"principal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastAggregatedInterestExponent\",\"type\":\"uint256\"}],\"internalType\":\"structIStabilization.CDP\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralPriceACU\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"borrowInterestRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"announcementWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minCollateralizationRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minDebtRequirement\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"targetPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultNTNATNPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultNTNUSDPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"defaultACUUSDPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIStabilization.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"debtAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"debt\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"debtAmountAtTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"debt\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAggregatedInterestExponent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAnnouncementWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentRateActiveTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPendingAnnouncementWindowInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPendingInterestRateInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPendingLiquidationRatioInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPendingMinCollateralizationRatioInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"debt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateExponent\",\"type\":\"uint256\"}],\"name\":\"interestDue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"interestRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTimestamp\",\"type\":\"uint256\"}],\"name\":\"interestExponent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isLiquidatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastUpdated\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"borrowInterestRateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"announcementWindowTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationRatioTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minCollateralizationRatioTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structIStabilization.LastUpdated\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"collateralSold\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"bidder\",\"type\":\"address\"}],\"name\":\"liquidate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidationRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"name\":\"maxBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minCollateralizationRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"principal\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateralPriceACU\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"targetPriceACU\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mcr\",\"type\":\"uint256\"}],\"name\":\"minimumCollateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeCDPRestrictions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"repay\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"acu\",\"type\":\"address\"}],\"name\":\"setACU\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"atnSupplyOperator\",\"type\":\"address\"}],\"name\":\"setAtnSupplyOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"auctioneer\",\"type\":\"address\"}],\"name\":\"setAuctioneer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"defaultACUUSDPrice\",\"type\":\"uint256\"}],\"name\":\"setDefaultACUUSDPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"defaultNTNATNPrice\",\"type\":\"uint256\"}],\"name\":\"setDefaultNTNATNPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"defaultNTNUSDPrice\",\"type\":\"uint256\"}],\"name\":\"setDefaultNTNUSDPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"setMinDebtRequirement\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"supplyControl\",\"type\":\"address\"}],\"name\":\"setSupplyControl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"debt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationRatio\",\"type\":\"uint256\"}],\"name\":\"underCollateralized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"window\",\"type\":\"uint256\"}],\"name\":\"updateAnnouncementWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newInterestRate\",\"type\":\"uint256\"}],\"name\":\"updateBorrowInterestRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newLiquidationRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newMinCollateralizationRatio\",\"type\":\"uint256\"}],\"name\":\"updateRatios\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"useFixed\",\"type\":\"bool\"}],\"name\":\"useFixedGenesisPrices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"68cd03f6": "accounts()",
		"d0cf9c7a": "acuPrice()",
		"c5ebeaec": "borrow(uint256)",
		"83baa174": "borrowLimit(uint256,uint256,uint256,uint256)",
		"840c7e24": "cdps(address)",
		"5891de72": "collateralPrice()",
		"1fd084e8": "collateralPriceACU()",
		"79502c55": "config()",
		"54a9f42c": "debtAmount(address)",
		"8ffba9dd": "debtAmountAtTime(address,uint256)",
		"b6b55f25": "deposit(uint256)",
		"1506c0f8": "getAggregatedInterestExponent()",
		"a25bac32": "getAnnouncementWindow()",
		"f7fb07b0": "getCurrentRate()",
		"8d48dbea": "getCurrentRateActiveTimestamp()",
		"a223343c": "getPendingAnnouncementWindowInfo()",
		"a28a3d5d": "getPendingInterestRateInfo()",
		"21eb74ee": "getPendingLiquidationRatioInfo()",
		"7c404403": "getPendingMinCollateralizationRatioInfo()",
		"3dabe731": "interestDue(uint256,uint256)",
		"62713345": "interestExponent(uint256,uint256,uint256)",
		"042e02cf": "isLiquidatable(address)",
		"d0b06f5d": "lastUpdated()",
		"4914c008": "liquidate(address,uint256,address)",
		"1775765f": "liquidationRatio()",
		"61b24c37": "maxBorrow(uint256)",
		"ba1be554": "minCollateralizationRatio()",
		"2951ba56": "minimumCollateral(uint256,uint256,uint256,uint256)",
		"2c01c1b9": "removeCDPRestrictions()",
		"402d8883": "repay()",
		"4b8ef943": "setACU(address)",
		"3c1cb964": "setAtnSupplyOperator(address)",
		"00ede7e4": "setAuctioneer(address)",
		"b8287403": "setDefaultACUUSDPrice(uint256)",
		"5d429306": "setDefaultNTNATNPrice(uint256)",
		"f57d686c": "setDefaultNTNUSDPrice(uint256)",
		"53afe81d": "setMinDebtRequirement(uint256)",
		"b3ab15fb": "setOperator(address)",
		"7adbf973": "setOracle(address)",
		"52e5a050": "setSupplyControl(address)",
		"fbbe6991": "underCollateralized(uint256,uint256,uint256,uint256)",
		"6870929f": "updateAnnouncementWindow(uint256)",
		"179c114e": "updateBorrowInterestRate(uint256)",
		"db433efa": "updateRatios(uint256,uint256)",
		"ab385a45": "useFixedGenesisPrices(bool)",
		"2e1a7d4d": "withdraw(uint256)",
	},
	Bin: "0x608060405234801561001057600080fd5b5060405161454b38038061454b83398101604081905261002f91610481565b876060015180600003610072576040516305519d6f60e51b8152602060048201526005602482015264726174696f60d81b60448201526064015b60405180910390fd5b88604001518960600151808210158061009557506100926012600a610683565b82105b156100f9576040516305519d6f60e51b815260206004820152602d60248201527f6c69717569646174696f6e526174696f207c7c206d696e436f6c6c617465726160448201526c6c697a6174696f6e526174696f60981b6064820152608401610069565b8a6020015160000361011e57604051637c946ed760e01b815260040160405180910390fd5b8a6001600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070155610100820151816008015590505089600c60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555088600d60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087601160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555086601260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083601060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555085600e60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555084600f60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001601260146101000a81548160ff0219169083151502179055506001601560006101000a81548160ff0219169083151502179055508a6000015160148190555060405180608001604052806000815260200142815260200160008152602001600081525060176000820151816000015560208201518160010155604082015181600201556060820151816003015590505060405180608001604052808c602001518152602001428152602001600081526020016000815250601b6000820151816000015560208201518160010155604082015181600201556060820151816003015590505060405180608001604052808c60400151815260200142815260200160008152602001600081525060236000820151816000015560208201518160010155604082015181600201556060820151816003015590505060405180608001604052808c606001518152602001428152602001600081526020016000815250601f600082015181600001556020820151816001015560408201518160020155606082015181600301559050505050505050505050505050610696565b60405161012081016001600160401b038111828210171561045f57634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b038116811461047c57600080fd5b919050565b600080600080600080600080888a0361020081121561049f57600080fd5b6101208112156104ae57600080fd5b506104b761042e565b895181526020808b0151908201526040808b0151908201526060808b0151908201526080808b01519082015260a0808b01519082015260c0808b01519082015260e0808b015190820152610100808b015190820152975061051b6101208a01610465565b965061052a6101408a01610465565b95506105396101608a01610465565b94506105486101808a01610465565b93506105576101a08a01610465565b92506105666101c08a01610465565b91506105756101e08a01610465565b90509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156105d5578085048111156105b9576105b9610584565b60018416156105c757908102905b60019390931c92800261059e565b935093915050565b6000826105ec5750600161067d565b816105f95750600061067d565b816001811461060f576002811461061957610635565b600191505061067d565b60ff84111561062a5761062a610584565b50506001821b61067d565b5060208310610133831016604e8410600b8410161715610658575081810a61067d565b610665600019848461059a565b806000190482111561067957610679610584565b0290505b92915050565b600061068f83836105dd565b9392505050565b613ea6806106a56000396000f3fe60806040526004361061027c5760003560e01c806368cd03f61161014f578063ab385a45116100c1578063d0b06f5d1161007a578063d0b06f5d146107b8578063d0cf9c7a14610800578063db433efa14610815578063f57d686c14610835578063f7fb07b014610855578063fbbe69911461086a57600080fd5b8063ab385a4514610703578063b3ab15fb14610723578063b6b55f2514610743578063b828740314610763578063ba1be55414610783578063c5ebeaec1461079857600080fd5b8063840c7e2411610113578063840c7e241461062d5780638d48dbea1461068f5780638ffba9dd146106a4578063a223343c146106c4578063a25bac32146106d9578063a28a3d5d146106ee57600080fd5b806368cd03f61461053457806379502c55146105565780637adbf973146105d85780637c404403146105f857806383baa1741461060d57600080fd5b80633dabe731116101f357806354a9f42c116101ac57806354a9f42c1461047f5780635891de721461049f5780635d429306146104b457806361b24c37146104d457806362713345146104f45780636870929f1461051457600080fd5b80633dabe731146103e4578063402d8883146104045780634914c0081461040c5780634b8ef9431461041f57806352e5a0501461043f57806353afe81d1461045f57600080fd5b80631fd084e8116102455780631fd084e81461033057806321eb74ee146103455780632951ba561461036f5780632c01c1b91461038f5780632e1a7d4d146103a45780633c1cb964146103c457600080fd5b8062ede7e414610281578063042e02cf146102a35780631506c0f8146102d85780631775765f146102fb578063179c114e14610310575b600080fd5b34801561028d57600080fd5b506102a161029c36600461398a565b61088a565b005b3480156102af57600080fd5b506102c36102be36600461398a565b610931565b60405190151581526020015b60405180910390f35b3480156102e457600080fd5b506102ed61096e565b6040519081526020016102cf565b34801561030757600080fd5b506102ed61099f565b34801561031c57600080fd5b506102a161032b3660046139a5565b6109ab565b34801561033c57600080fd5b506102ed610aa9565b34801561035157600080fd5b5061035a610ad4565b604080519283526020830191909152016102cf565b34801561037b57600080fd5b506102ed61038a3660046139be565b610ae8565b34801561039b57600080fd5b506102a1610b01565b3480156103b057600080fd5b506102a16103bf3660046139a5565b610c29565b3480156103d057600080fd5b506102a16103df36600461398a565b610e5c565b3480156103f057600080fd5b506102ed6103ff3660046139f0565b610f0a565b6102a1610f1f565b6102a161041a366004613a12565b6111a5565b34801561042b57600080fd5b506102a161043a36600461398a565b61151f565b34801561044b57600080fd5b506102a161045a36600461398a565b6115bf565b34801561046b57600080fd5b506102a161047a3660046139a5565b611669565b34801561048b57600080fd5b506102ed61049a36600461398a565b6116f3565b3480156104ab57600080fd5b506102ed611784565b3480156104c057600080fd5b506102a16104cf3660046139a5565b6117af565b3480156104e057600080fd5b506102ed6104ef3660046139a5565b611839565b34801561050057600080fd5b506102ed61050f366004613a4e565b611865565b34801561052057600080fd5b506102a161052f3660046139a5565b61187c565b34801561054057600080fd5b506105496119ad565b6040516102cf9190613a7a565b34801561056257600080fd5b5061056b611a38565b6040516102cf9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b3480156105e457600080fd5b506102a16105f336600461398a565b611afa565b34801561060457600080fd5b5061035a611b9d565b34801561061957600080fd5b506102ed6106283660046139be565b611bad565b34801561063957600080fd5b5061064d61064836600461398a565b611bbb565b6040516102cf9190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b34801561069b57600080fd5b506018546102ed565b3480156106b057600080fd5b506102ed6106bf366004613ac6565b611c67565b3480156106d057600080fd5b5061035a611cf7565b3480156106e557600080fd5b506102ed611d07565b3480156106fa57600080fd5b5061035a611d13565b34801561070f57600080fd5b506102a161071e366004613b01565b611d23565b34801561072f57600080fd5b506102a161073e36600461398a565b611dd1565b34801561074f57600080fd5b506102a161075e3660046139a5565b611e76565b34801561076f57600080fd5b506102a161077e3660046139a5565b6120f0565b34801561078f57600080fd5b506102ed61217a565b3480156107a457600080fd5b506102a16107b33660046139a5565b612186565b3480156107c457600080fd5b506107cd61237b565b6040516102cf91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561080c57600080fd5b506102ed6123ef565b34801561082157600080fd5b506102a16108303660046139f0565b61241a565b34801561084157600080fd5b506102a16108503660046139a5565b61266b565b34801561086157600080fd5b506102ed6126f5565b34801561087657600080fd5b506102c36108853660046139be565b612701565b600c546001600160a01b031633146108b4576040516282b42960e81b815260040160405180910390fd5b600e54604080516080808252600a908201526930bab1ba34b7b732b2b960b11b60a08201526001600160a01b0392831660208201529183168282015243606083015251600080516020613e318339815191529181900360c00190a1600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000805460010361095d5760405162461bcd60e51b815260040161095490613b1e565b60405180910390fd5b6109668261270f565b90505b919050565b600080546001036109915760405162461bcd60e51b815260040161095490613b1e565b61099a42612751565b905090565b600061099a60236127d9565b601254600160a01b900460ff16156109d5576040516282b42960e81b815260040160405180910390fd5b600d546001600160a01b031633146109ff576040516282b42960e81b815260040160405180910390fd5b610a07612804565b6000610a2a82610a17601b6127d9565b610a219042613b6b565b6017919061285d565b601a54604080518581526020810192909252821515908201529091507fb12f349439574b70f65dab4d2f88d6c268a39280fd283047f8c0f734ed0ea9f29060600160405180910390a1600080516020613e51833981519152610a8c60176127d9565b8343604051610a9d93929190613b7e565b60405180910390a15050565b60008054600103610acc5760405162461bcd60e51b815260040161095490613b1e565b61099a6128b5565b60255460265460009182915b915091509091565b6000610af6858585856129c9565b90505b949350505050565b600d546001600160a01b03163314610b2b576040516282b42960e81b815260040160405180910390fd5b601254600160a01b900460ff161515600003610b5a576040516355d90bb960e01b815260040160405180910390fd5b6012805460ff60a01b19169055601454601781905542601855604051600080516020613e5183398151915291610b9591600091904390613b7e565b60405180910390a1604080516080808252600a90820152691c995cdd1c9a58dd195960b21b60a08201526001602082015260008183015243606082015290517f5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b9181900360c00190a16040517fa2e462158ad4e6546090511fe2857d985d816588431165cd3609c45df783a20c90600090a1565b8080600003610c4b5760405163162908e360e11b815260040160405180910390fd5b601254600160a01b900460ff168015610c6f57506013546001600160a01b03163314155b15610c8c576040516282b42960e81b815260040160405180910390fd5b610c94612a59565b336000908152600a602052604090206001810154831115610cc85760405163162908e360e11b815260040160405180910390fd5b6000610cd48242612aa6565b505090506000610ce2612b46565b9050610cfd83600101548284610cf860236127d9565b612c24565b15610d1b57604051636229415360e01b815260040160405180910390fd5b610d3d8360020154610d2b6128b5565b600654610d38601f6127d9565b6129c9565b858460010154610d4d9190613bca565b1015610d6c57604051633a23d82560e01b815260040160405180910390fd5b84836001016000828254610d809190613bca565b909155505060105460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa9190613bdd565b610e17576040516312171d8360e31b815260040160405180910390fd5b60405185815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a2505050610e5860008055565b5050565b600d546001600160a01b03163314610e86576040516282b42960e81b815260040160405180910390fd5b6013546040805160808082526011908201527030ba3729bab838363ca7b832b930ba37b960791b60a08201526001600160a01b0392831660208201529183168282015243606083015251600080516020613e318339815191529181900360c00190a1601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f168383612c56565b90505b92915050565b601254600160a01b900460ff168015610f4357506013546001600160a01b03163314155b15610f60576040516282b42960e81b815260040160405180910390fd5b610f68612a59565b34600003610f8957604051637c946ed760e01b815260040160405180910390fd5b336000908152600a602052604081206002810154909103610fbd57604051638aa5baf360e01b815260040160405180910390fd5b6000610fc98242612c8e565b90508034108015610fe45750600554610fe23483613bca565b105b156110025760405163e6bd447960e01b815260040160405180910390fd5b60008060006110118534612cc7565b9250925092508185600201600082825461102b9190613bca565b92505081905550828560030160008282546110469190613bca565b909155505082156110bb57600e60009054906101000a90046001600160a01b03166001600160a01b03166396e4547c846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110a157600080fd5b505af11580156110b5573d6000803e3d6000fd5b50505050505b811561112b57601260009054906101000a90046001600160a01b03166001600160a01b03166344df8e70836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561111157600080fd5b505af1158015611125573d6000803e3d6000fd5b50505050505b801561116057604051339082156108fc029083906000818181858888f1935050505015801561115e573d6000803e3d6000fd5b505b60405134815233907f5c16de4f8b59bd9caf0f49a545f25819a895ed223294290b408242e72a5942319060200160405180910390a250505050506111a360008055565b565b601254600160a01b900460ff16156111cf576040516282b42960e81b815260040160405180910390fd5b600e546001600160a01b031633146111f9576040516282b42960e81b815260040160405180910390fd5b611201612a59565b3460000361122257604051637c946ed760e01b815260040160405180910390fd5b6001600160a01b0383166000908152600a60205260408120600281015490910361125f57604051638aa5baf360e01b815260040160405180910390fd5b82816001015410156112845760405163162908e360e11b815260040160405180910390fd5b6000806112918342612aa6565b50915091506112b183600101546112a6612b46565b84610cf860236127d9565b6112ce57604051636ef5bcdd60e11b815260040160405180910390fd5b813410156112ef5760405163cd1c886760e01b815260040160405180910390fd5b601260009054906101000a90046001600160a01b03166001600160a01b03166344df8e7084600201546040518263ffffffff1660e01b81526004016000604051808303818588803b15801561134357600080fd5b505af1158015611357573d6000803e3d6000fd5b5050600e5460038701546001600160a01b0390911693506396e4547c9250611380915084613b6b565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113ab57600080fd5b505af11580156113bf573d6000803e3d6000fd5b5050505050600082346113d29190613bca565b60018501544286559091506113e78782613bca565b6001860155600060028601819055600386015560105460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018a90529091169063a9059cbb906044016020604051808303816000875af115801561144d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114719190613bdd565b61148e576040516312171d8360e31b815260040160405180910390fd5b81156114cc576040516001600160a01b0387169083156108fc029084906000818181858888f193505050501580156114ca573d6000803e3d6000fd5b505b6040516001600160a01b0387811682528916907fc3d81b2125598b9a2b024afe09e33981f0aa5b7bcbe3e30c4303a4dec209ddb49060200160405180910390a2505050505061151a60008055565b505050565b600c546001600160a01b03163314611549576040516282b42960e81b815260040160405180910390fd5b600f546040805160808082526003908201526261637560e81b60a08201526001600160a01b0392831660208201529183168282015243606083015251600080516020613e318339815191529181900360c00190a1600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146115e9576040516282b42960e81b815260040160405180910390fd5b601254604080516080808252600d908201526c1cdd5c1c1b1e50dbdb9d1c9bdb609a1b60a08201526001600160a01b0392831660208201529183168282015243606083015251600080516020613e318339815191529181900360c00190a1601280546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b03163314611693576040516282b42960e81b815260040160405180910390fd5b600554604080516080808252601290820152711b5a5b9119589d14995c5d5a5c995b595b9d60721b60a082015260208101929092528101829052436060820152600080516020613e518339815191529060c00160405180910390a1600555565b600080546001036117165760405162461bcd60e51b815260040161095490613b1e565b604051638ffba9dd60e01b81526001600160a01b03831660048201524260248201523090638ffba9dd90604401602060405180830381865afa158015611760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109669190613bfa565b600080546001036117a75760405162461bcd60e51b815260040161095490613b1e565b61099a612b46565b600d546001600160a01b031633146117d9576040516282b42960e81b815260040160405180910390fd5b6007546040805160808082526012908201527164656661756c744e544e41544e507269636560701b60a082015260208101929092528101829052436060820152600080516020613e518339815191529060c00160405180910390a1600755565b6000805460010361185c5760405162461bcd60e51b815260040161095490613b1e565b61096682612d3b565b6000611872848484612d8a565b90505b9392505050565b600d546001600160a01b031633146118a6576040516282b42960e81b815260040160405180910390fd5b806000036118c757604051637c946ed760e01b815260040160405180910390fd5b60006118ea826118d7601b6127d9565b6118e19042613b6b565b601b919061285d565b9050801561190b5760405163af13164760e01b815260040160405180910390fd5b601e5460408051848152602081019290925282151582820152517fed7f709ecbcef995208a1b2fc94064f0ff5a6f799d7f64bbd830670224c18f2d9181900360600190a1600080516020613e51833981519152611968601b6127d9565b60408051608080825260129082015271616e6e6f756e63656d656e7457696e646f7760701b60a08201526020810192909252810184905243606082015260c001610a9d565b60606119bb60005460011490565b156119d85760405162461bcd60e51b815260040161095490613b1e565b600b805480602002602001604051908101604052809291908181526020018280548015611a2e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a10575b5050505050905090565b611a876040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806101200160405280611a9d60176127d9565b8152602001611aac601b6127d9565b8152602001611abb60236127d9565b8152602001611aca601f6127d9565b8152600554602082015260065460408201526007546060820152600854608082015260095460a090910152919050565b600c546001600160a01b03163314611b24576040516282b42960e81b815260040160405180910390fd5b601154604080516080808252600690820152656f7261636c6560d01b60a08201526001600160a01b0392831660208201529183168282015243606083015251600080516020613e318339815191529181900360c00190a1601180546001600160a01b0319166001600160a01b0392909216919091179055565b6021546022546000918291610ae0565b6000610af685858585612e00565b611bed6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b600054600103611c0f5760405162461bcd60e51b815260040161095490613b1e565b506001600160a01b03166000908152600a6020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600490910154608082015290565b6001600160a01b0382166000908152600a60205260408120805484918491821015611ca5576040516305519d6f60e51b815260040161095490613c13565b600054600103611cc75760405162461bcd60e51b815260040161095490613b1e565b6001600160a01b0386166000908152600a60205260409020611ce98187612aa6565b509098975050505050505050565b601d54601e546000918291610ae0565b600061099a601b6127d9565b601954601a546000918291610ae0565b600d546001600160a01b03163314611d4d576040516282b42960e81b815260040160405180910390fd5b60155460408051608080825260129082015271666978656447656e6573697350726963657360701b60a082015260ff9092161515602083015282151582820152436060830152517f5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b9181900360c00190a16015805460ff1916911515919091179055565b600c546001600160a01b03163314611dfb576040516282b42960e81b815260040160405180910390fd5b600d546040805160808082526008908201526737b832b930ba37b960c11b60a08201526001600160a01b0392831660208201529183168282015243606083015251600080516020613e318339815191529181900360c00190a1600d80546001600160a01b0319166001600160a01b0392909216919091179055565b8080600003611e985760405163162908e360e11b815260040160405180910390fd5b601254600160a01b900460ff168015611ebc57506013546001600160a01b03163314155b15611ed9576040516282b42960e81b815260040160405180910390fd5b611ee1612a59565b601054604051636eb1769f60e11b815233600482015230602482015283916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015611f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f539190613bfa565b1015611f72576040516313be252b60e01b815260040160405180910390fd5b336000908152600a602052604081208054909103611fcd57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b031916331790555b611fd78142612c8e565b506010546040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561202f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120539190613bdd565b612070576040516312171d8360e31b815260040160405180910390fd5b828160010160008282546120849190613b6b565b9091555061209390503361270f565b156120b157604051636229415360e01b815260040160405180910390fd5b60405183815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250610e5860008055565b600d546001600160a01b0316331461211a576040516282b42960e81b815260040160405180910390fd5b6009546040805160808082526012908201527164656661756c74414355555344507269636560701b60a082015260208101929092528101829052436060820152600080516020613e518339815191529060c00160405180910390a1600955565b600061099a601f6127d9565b80806000036121a85760405163162908e360e11b815260040160405180910390fd5b601254600160a01b900460ff1680156121cc57506013546001600160a01b03163314155b156121e9576040516282b42960e81b815260040160405180910390fd5b6121f1612a59565b336000908152600a602052604081209061220b8242612c8e565b90506122178482613b6b565b60055490915081101561223d5760405163e6bd447960e01b815260040160405180910390fd5b6000612247612b46565b905061225d83600101548284610cf860236127d9565b1561227b57604051636229415360e01b815260040160405180910390fd5b600061228a8460010154612d3b565b90508086856002015461229d9190613b6b565b11156122bc57604051633a23d82560e01b815260040160405180910390fd5b858460020160008282546122d09190613b6b565b90915550506012546040516340c10f1960e01b8152336004820152602481018890526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561232157600080fd5b505af1158015612335573d6000803e3d6000fd5b50506040518881523392507fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750915060200160405180910390a250505050610e5860008055565b6123a66040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052806123bb6017612e96565b81526020016123ca601b612e96565b81526020016123d96023612e96565b81526020016123e8601f612e96565b9052919050565b600080546001036124125760405162461bcd60e51b815260040161095490613b1e565b61099a612ec4565b600d546001600160a01b03163314612444576040516282b42960e81b815260040160405180910390fd5b8181808210158061245f575061245c6012600a613d1d565b82105b156124c3576040516305519d6f60e51b815260206004820152602d60248201527f6c69717569646174696f6e526174696f207c7c206d696e436f6c6c617465726160448201526c6c697a6174696f6e526174696f60981b6064820152608401610954565b60006124e6856124d3601b6127d9565b6124dd9042613b6b565b6023919061285d565b9050600061250b856124f8601b6127d9565b6125029042613b6b565b601f919061285d565b602654604080518981526020810192909252841515908201529091507f19f747f98f8e30315324002333a1c5eaf5bafa2c4d0a90bc5f042634a2cbf6229060600160405180910390a160225460408051878152602081019290925282151582820152517f4f9980fcac197f6e3e043b71166dc66da4fb578adab225ce0ab6d02cc0bcaa7a9181900360600190a1600080516020613e518339815191526125b160236127d9565b6040805160808082526010908201526f6c69717569646174696f6e526174696f60801b60a08201526020810192909252810188905243606082015260c00160405180910390a1600080516020613e51833981519152612610601f6127d9565b6040805160808082526019908201527f6d696e436f6c6c61746572616c697a6174696f6e526174696f0000000000000060a08201526020810192909252810187905243606082015260c00160405180910390a1505050505050565b600d546001600160a01b03163314612695576040516282b42960e81b815260040160405180910390fd5b6008546040805160808082526012908201527164656661756c744e544e555344507269636560701b60a082015260208101929092528101829052436060820152600080516020613e518339815191529060c00160405180910390a1600855565b600061099a60176127d9565b6000610af685858585612c24565b6001600160a01b0381166000908152600a60205260408120816127328242612aa6565b50509050610af98260010154612746612b46565b83610cf860236127d9565b601654601754601854600092919080851015612780576040516305519d6f60e51b815260040161095490613c13565b601954601a546000811180156127965750868111155b156127b9576127a6848483612d8a565b6127b09086613b6b565b94508193508092505b6127c4848489612d8a565b6127ce9086613b6b565b979650505050505050565b60008082600301541180156127f2575042826003015411155b156127ff57506002015490565b505490565b601954601a5480158061281657504281115b1561281f575050565b601754601854612830828285612d8a565b601660008282546128419190613b6b565b9091555050506017929092556018555060006019819055601a55565b6000808460030154118015612876575042846003015411155b1561289c5750600283018054845582905560038301805460018501558190556000611875565b5060038301805460028501849055908290551515611875565b601554600090819060ff1680156128cd575060085415155b156128db5750600854612995565b60115460408051808201825260078152661395138b5554d160ca1b602082015290516333f98c7760e01b81526000926001600160a01b0316916333f98c77916129279190600401613d29565b608060405180830381865afa158015612944573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129689190613d77565b9050600081602001511161298e5760405162bfc92160e01b815260040160405180910390fd5b6020015190505b600061299f612ec4565b9050806129ae6012600a613d1d565b6129b89084613df7565b6129c29190613e0e565b9250505090565b60008315806129d6575081155b15612a24576040516305519d6f60e51b815260206004820152601960248201527f636f6c6c61746572616c5072696365414355207c7c206d6372000000000000006044820152606401610954565b612a306012600a613d1d565b612a3a9085613df7565b83612a458488613df7565b612a4f9190613df7565b610af69190613e0e565b60005415612a9f5760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b6044820152606401610954565b6001600055565b600080600083600003612acc576040516305519d6f60e51b815260040161095490613c13565b600085600301548660020154612ae29190613b6b565b9050612aed85612751565b915080600003612b04576000809350935050612b3f565b85548503612b155760009250612b31565b612b2e81876004015484612b299190613bca565b612c56565b92505b612b3b8382613b6b565b9350505b9250925092565b60155460009060ff168015612b5c575060075415155b15612b68575060075490565b6011546040805180820182526007815266272a2716a0aa2760c91b602082015290516333f98c7760e01b81526000926001600160a01b0316916333f98c7791612bb49190600401613d29565b608060405180830381865afa158015612bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf59190613d77565b90506000816020015111612c1b5760405162bfc92160e01b815260040160405180910390fd5b60200151919050565b600082600003612c3657506000610af9565b8183612c428688613df7565b612c4c9190613e0e565b1095945050505050565b6000828282612c6482613012565b905060006127ce612c87612c80612c7d6012600a613d1d565b90565b8490613060565b859061306f565b600080612c9b8484612aa6565b60048701556003860180549294509092508291600090612cbc908490613b6b565b909155505050915590565b60008060008085600301548660020154612ce19190613b6b565b905085600301548510612cf8578560030154612cfa565b845b9350808510612d0d578560020154612d17565b612d178486613bca565b9250808511612d27576000612d31565b612d318186613bca565b9150509250925092565b600080612d5c83612d4a6128b5565b600654612d57601f6127d9565b612e00565b90506000612d7b84612d6c612b46565b612d7660236127d9565b61307e565b90508082116118755781610af9565b600082821015612ddd576040516305519d6f60e51b815260206004820152601e60248201527f656e6454696d657374616d70207c7c20737461727454696d657374616d7000006044820152606401610954565b6301e13380612dec8484613bca565b612df69086613df7565b6118729190613e0e565b6000831580612e0d575081155b80612e16575082155b15612e76576040516305519d6f60e51b815260206004820152602960248201527f6d6372207c7c20746172676574446562745072696365207c7c20636f6c6c61746044820152686572616c507269636560b81b6064820152608401610954565b612e808383613df7565b612e8c6012600a613d1d565b612a458688613df7565b6000808260030154118015612eaf575042826003015411155b15612ebc57506003015490565b506001015490565b60155460009060ff168015612eda575060095415155b15612ee6575060095490565b600f60009054906101000a90046001600160a01b03166001600160a01b0316633fa4f2456040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612f55575060408051601f3d908101601f19168201909252612f5291810190613bfa565b60015b612f8c57604051639718df2360e01b81526020600482015260076024820152661050d54b5554d160ca1b6044820152606401610954565b61300c81600f60009054906101000a90046001600160a01b03166001600160a01b0316637f5e2f116040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130079190613bfa565b6130e4565b91505090565b600081680736ea4425c11ac63081111561304257604051630d7b1d6560e11b815260048101849052602401610954565b6714057b7ef767814f8102610af9670de0b6b3a76400008204613107565b6000610f16612c7d8385613bca565b6000610f16612c7d848461315d565b600082158061308b575081155b156130d9576040516305519d6f60e51b815260206004820152601960248201527f7072696365207c7c206c69717569646174696f6e526174696f000000000000006044820152606401610954565b81612df68486613df7565b6000816130f36012600a613d1d565b6130fd9085613df7565b610f169190613e0e565b600081680a688906bd8affffff8111156131375760405163b3b6ba1f60e01b815260048101849052602401610954565b600061314f670de0b6b3a7640000604084901b613e0e565b9050610af9612c7d82613213565b60008080600019848609848602925082811083820303915050806000036131915750670de0b6b3a764000090049050610f19565b670de0b6b3a764000081106131c357604051635173648d60e01b81526004810186905260248101859052604401610954565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b600160bf1b67ff00000000000000821615613320576780000000000000008216156132475768016a09e667f3bcc9090260401c5b674000000000000000821615613266576801306fe0a31b7152df0260401c5b672000000000000000821615613285576801172b83c7d517adce0260401c5b6710000000000000008216156132a45768010b5586cf9890f62a0260401c5b6708000000000000008216156132c3576801059b0d31585743ae0260401c5b6704000000000000008216156132e257680102c9a3e778060ee70260401c5b6702000000000000008216156133015768010163da9fb33356d80260401c5b67010000000000000082161561332057680100b1afa5abcbed610260401c5b66ff00000000000082161561341f57668000000000000082161561334d5768010058c86da1c09ea20260401c5b664000000000000082161561336b576801002c605e2e8cec500260401c5b662000000000000082161561338957680100162f3904051fa10260401c5b66100000000000008216156133a7576801000b175effdc76ba0260401c5b66080000000000008216156133c557680100058ba01fb9f96d0260401c5b66040000000000008216156133e35768010002c5cc37da94920260401c5b6602000000000000821615613401576801000162e525ee05470260401c5b660100000000000082161561341f5768010000b17255775c040260401c5b65ff0000000000821615613515576580000000000082161561344a576801000058b91b5bc9ae0260401c5b6540000000000082161561346757680100002c5c89d5ec6d0260401c5b652000000000008216156134845768010000162e43f4f8310260401c5b651000000000008216156134a157680100000b1721bcfc9a0260401c5b650800000000008216156134be5768010000058b90cf1e6e0260401c5b650400000000008216156134db576801000002c5c863b73f0260401c5b650200000000008216156134f857680100000162e430e5a20260401c5b65010000000000821615613515576801000000b1721835510260401c5b64ff000000008216156136025764800000000082161561353e57680100000058b90c0b490260401c5b64400000000082161561355a5768010000002c5c8601cc0260401c5b642000000000821615613576576801000000162e42fff00260401c5b6410000000008216156135925768010000000b17217fbb0260401c5b6408000000008216156135ae576801000000058b90bfce0260401c5b6404000000008216156135ca57680100000002c5c85fe30260401c5b6402000000008216156135e65768010000000162e42ff10260401c5b64010000000082161561360257680100000000b17217f80260401c5b63ff0000008216156136e65763800000008216156136295768010000000058b90bfc0260401c5b6340000000821615613644576801000000002c5c85fe0260401c5b632000000082161561365f57680100000000162e42ff0260401c5b631000000082161561367a576801000000000b17217f0260401c5b630800000082161561369557680100000000058b90c00260401c5b63040000008216156136b05768010000000002c5c8600260401c5b63020000008216156136cb576801000000000162e4300260401c5b63010000008216156136e65768010000000000b172180260401c5b62ff00008216156137c1576280000082161561370b576801000000000058b90c0260401c5b6240000082161561372557680100000000002c5c860260401c5b6220000082161561373f5768010000000000162e430260401c5b6210000082161561375957680100000000000b17210260401c5b620800008216156137735768010000000000058b910260401c5b6204000082161561378d576801000000000002c5c80260401c5b620200008216156137a757680100000000000162e40260401c5b620100008216156137c1576801000000000000b1720260401c5b61ff00821615613893576180008216156137e457680100000000000058b90260401c5b6140008216156137fd5768010000000000002c5d0260401c5b612000821615613816576801000000000000162e0260401c5b61100082161561382f5768010000000000000b170260401c5b610800821615613848576801000000000000058c0260401c5b61040082161561386157680100000000000002c60260401c5b61020082161561387a57680100000000000001630260401c5b61010082161561389357680100000000000000b10260401c5b60ff82161561395c5760808216156138b457680100000000000000590260401c5b60408216156138cc576801000000000000002c0260401c5b60208216156138e457680100000000000000160260401c5b60108216156138fc576801000000000000000b0260401c5b600882161561391457680100000000000000060260401c5b600482161561392c57680100000000000000030260401c5b600282161561394457680100000000000000010260401c5b600182161561395c57680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b80356001600160a01b038116811461096957600080fd5b60006020828403121561399c57600080fd5b610f1682613973565b6000602082840312156139b757600080fd5b5035919050565b600080600080608085870312156139d457600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613a0357600080fd5b50508035926020909101359150565b600080600060608486031215613a2757600080fd5b613a3084613973565b925060208401359150613a4560408501613973565b90509250925092565b600080600060608486031215613a6357600080fd5b505081359360208301359350604090920135919050565b602080825282518282018190526000918401906040840190835b81811015613abb5783516001600160a01b0316835260209384019390920191600101613a94565b509095945050505050565b60008060408385031215613ad957600080fd5b613ae283613973565b946020939093013593505050565b8015158114613afe57600080fd5b50565b600060208284031215613b1357600080fd5b813561187581613af0565b6020808252601d908201527f72656164206f6e6c79207265656e7472616e6379206465746563746564000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f1957610f19613b55565b608081526000613bb0608083016012815271626f72726f77496e7465726573745261746560701b602082015260400190565b602083019590955250604081019290925260609091015290565b81810381811115610f1957610f19613b55565b600060208284031215613bef57600080fd5b815161187581613af0565b600060208284031215613c0c57600080fd5b5051919050565b602080825260099082015268074696d657374616d760bc1b604082015260600190565b6001815b6001841115613c7157808504811115613c5557613c55613b55565b6001841615613c6357908102905b60019390931c928002613c3a565b935093915050565b600082613c8857506001610f19565b81613c9557506000610f19565b8160018114613cab5760028114613cb557613cd1565b6001915050610f19565b60ff841115613cc657613cc6613b55565b50506001821b610f19565b5060208310610133831016604e8410600b8410161715613cf4575081810a610f19565b613d016000198484613c36565b8060001904821115613d1557613d15613b55565b029392505050565b6000610f168383613c79565b602081526000825180602084015260005b81811015613d575760208186018101516040868401015201613d3a565b506000604082850101526040601f19601f83011684010191505092915050565b60006080828403128015613d8a57600080fd5b600090506040516080810181811067ffffffffffffffff82111715613dbd57634e487b7160e01b83526041600452602483fd5b60409081528451825260208086015190830152848101519082015260608401519150613de882613af0565b60608101919091529392505050565b8082028115828204841417610f1957610f19613b55565b600082613e2b57634e487b7160e01b600052601260045260246000fd5b50049056fee821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1baa2646970667358221220b0c6f0fc331709f9a784ad504741ef43c473402ed62e5986dda02f7299fcdeb964736f6c634300081e0033",
}

// StabilizationABI is the input ABI used to generate the binding from.
// Deprecated: Use StabilizationMetaData.ABI instead.
var StabilizationABI = StabilizationMetaData.ABI

// Deprecated: Use StabilizationMetaData.Sigs instead.
// StabilizationFuncSigs maps the 4-byte function signature to its string representation.
var StabilizationFuncSigs = StabilizationMetaData.Sigs

// StabilizationBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use StabilizationMetaData.Bin instead.
var StabilizationBin = StabilizationMetaData.Bin

// DeployStabilization deploys a new Ethereum contract, binding an instance of Stabilization to it.
func DeployStabilization(auth *bind.TransactOpts, backend bind.ContractBackend, config_ IStabilizationConfig, autonity common.Address, operator common.Address, oracle common.Address, supplyControl common.Address, auctioneer common.Address, acu common.Address, collateralToken common.Address) (common.Address, *types.Transaction, *Stabilization, error) {
	parsed, err := StabilizationMetaData.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(StabilizationBin), backend, config_, autonity, operator, oracle, supplyControl, auctioneer, acu, collateralToken)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Stabilization{StabilizationCaller: StabilizationCaller{contract: contract}, StabilizationTransactor: StabilizationTransactor{contract: contract}, StabilizationFilterer: StabilizationFilterer{contract: contract}}, nil
}

// Stabilization is an auto generated Go binding around an Ethereum contract.
type Stabilization struct {
	StabilizationCaller     // Read-only binding to the contract
	StabilizationTransactor // Write-only binding to the contract
	StabilizationFilterer   // Log filterer for contract events
}

// StabilizationCaller is an auto generated read-only Go binding around an Ethereum contract.
type StabilizationCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// StabilizationTransactor is an auto generated write-only Go binding around an Ethereum contract.
type StabilizationTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// StabilizationFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type StabilizationFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// StabilizationSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type StabilizationSession struct {
	Contract     *Stabilization    // 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
}

// StabilizationCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type StabilizationCallerSession struct {
	Contract *StabilizationCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts        // Call options to use throughout this session
}

// StabilizationTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type StabilizationTransactorSession struct {
	Contract     *StabilizationTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts        // Transaction auth options to use throughout this session
}

// StabilizationRaw is an auto generated low-level Go binding around an Ethereum contract.
type StabilizationRaw struct {
	Contract *Stabilization // Generic contract binding to access the raw methods on
}

// StabilizationCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type StabilizationCallerRaw struct {
	Contract *StabilizationCaller // Generic read-only contract binding to access the raw methods on
}

// StabilizationTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type StabilizationTransactorRaw struct {
	Contract *StabilizationTransactor // Generic write-only contract binding to access the raw methods on
}

// NewStabilization creates a new instance of Stabilization, bound to a specific deployed contract.
func NewStabilization(address common.Address, backend bind.ContractBackend) (*Stabilization, error) {
	contract, err := bindStabilization(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Stabilization{StabilizationCaller: StabilizationCaller{contract: contract}, StabilizationTransactor: StabilizationTransactor{contract: contract}, StabilizationFilterer: StabilizationFilterer{contract: contract}}, nil
}

// NewStabilizationCaller creates a new read-only instance of Stabilization, bound to a specific deployed contract.
func NewStabilizationCaller(address common.Address, caller bind.ContractCaller) (*StabilizationCaller, error) {
	contract, err := bindStabilization(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &StabilizationCaller{contract: contract}, nil
}

// NewStabilizationTransactor creates a new write-only instance of Stabilization, bound to a specific deployed contract.
func NewStabilizationTransactor(address common.Address, transactor bind.ContractTransactor) (*StabilizationTransactor, error) {
	contract, err := bindStabilization(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &StabilizationTransactor{contract: contract}, nil
}

// NewStabilizationFilterer creates a new log filterer instance of Stabilization, bound to a specific deployed contract.
func NewStabilizationFilterer(address common.Address, filterer bind.ContractFilterer) (*StabilizationFilterer, error) {
	contract, err := bindStabilization(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &StabilizationFilterer{contract: contract}, nil
}

// bindStabilization binds a generic wrapper to an already deployed contract.
func bindStabilization(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(StabilizationABI))
	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 (_Stabilization *StabilizationRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Stabilization.Contract.StabilizationCaller.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 (_Stabilization *StabilizationRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Stabilization.Contract.StabilizationTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Stabilization *StabilizationRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Stabilization.Contract.StabilizationTransactor.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 (_Stabilization *StabilizationCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Stabilization.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 (_Stabilization *StabilizationTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Stabilization.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Stabilization *StabilizationTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Stabilization.Contract.contract.Transact(opts, method, params...)
}

// Accounts is a free data retrieval call binding the contract method 0x68cd03f6.
//
// Solidity: function accounts() view returns(address[])
func (_Stabilization *StabilizationCaller) Accounts(opts *bind.CallOpts) ([]common.Address, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "accounts")

	if err != nil {
		return *new([]common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)

	return out0, err

}

// Accounts is a free data retrieval call binding the contract method 0x68cd03f6.
//
// Solidity: function accounts() view returns(address[])
func (_Stabilization *StabilizationSession) Accounts() ([]common.Address, error) {
	return _Stabilization.Contract.Accounts(&_Stabilization.CallOpts)
}

// Accounts is a free data retrieval call binding the contract method 0x68cd03f6.
//
// Solidity: function accounts() view returns(address[])
func (_Stabilization *StabilizationCallerSession) Accounts() ([]common.Address, error) {
	return _Stabilization.Contract.Accounts(&_Stabilization.CallOpts)
}

// AcuPrice is a free data retrieval call binding the contract method 0xd0cf9c7a.
//
// Solidity: function acuPrice() view returns(uint256 price)
func (_Stabilization *StabilizationCaller) AcuPrice(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "acuPrice")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// AcuPrice is a free data retrieval call binding the contract method 0xd0cf9c7a.
//
// Solidity: function acuPrice() view returns(uint256 price)
func (_Stabilization *StabilizationSession) AcuPrice() (*big.Int, error) {
	return _Stabilization.Contract.AcuPrice(&_Stabilization.CallOpts)
}

// AcuPrice is a free data retrieval call binding the contract method 0xd0cf9c7a.
//
// Solidity: function acuPrice() view returns(uint256 price)
func (_Stabilization *StabilizationCallerSession) AcuPrice() (*big.Int, error) {
	return _Stabilization.Contract.AcuPrice(&_Stabilization.CallOpts)
}

// BorrowLimit is a free data retrieval call binding the contract method 0x83baa174.
//
// Solidity: function borrowLimit(uint256 collateral, uint256 collateralPriceACU, uint256 targetPriceACU, uint256 mcr) pure returns(uint256)
func (_Stabilization *StabilizationCaller) BorrowLimit(opts *bind.CallOpts, collateral *big.Int, collateralPriceACU *big.Int, targetPriceACU *big.Int, mcr *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "borrowLimit", collateral, collateralPriceACU, targetPriceACU, mcr)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// BorrowLimit is a free data retrieval call binding the contract method 0x83baa174.
//
// Solidity: function borrowLimit(uint256 collateral, uint256 collateralPriceACU, uint256 targetPriceACU, uint256 mcr) pure returns(uint256)
func (_Stabilization *StabilizationSession) BorrowLimit(collateral *big.Int, collateralPriceACU *big.Int, targetPriceACU *big.Int, mcr *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.BorrowLimit(&_Stabilization.CallOpts, collateral, collateralPriceACU, targetPriceACU, mcr)
}

// BorrowLimit is a free data retrieval call binding the contract method 0x83baa174.
//
// Solidity: function borrowLimit(uint256 collateral, uint256 collateralPriceACU, uint256 targetPriceACU, uint256 mcr) pure returns(uint256)
func (_Stabilization *StabilizationCallerSession) BorrowLimit(collateral *big.Int, collateralPriceACU *big.Int, targetPriceACU *big.Int, mcr *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.BorrowLimit(&_Stabilization.CallOpts, collateral, collateralPriceACU, targetPriceACU, mcr)
}

// Cdps is a free data retrieval call binding the contract method 0x840c7e24.
//
// Solidity: function cdps(address owner) view returns((uint256,uint256,uint256,uint256,uint256))
func (_Stabilization *StabilizationCaller) Cdps(opts *bind.CallOpts, owner common.Address) (IStabilizationCDP, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "cdps", owner)

	if err != nil {
		return *new(IStabilizationCDP), err
	}

	out0 := *abi.ConvertType(out[0], new(IStabilizationCDP)).(*IStabilizationCDP)

	return out0, err

}

// Cdps is a free data retrieval call binding the contract method 0x840c7e24.
//
// Solidity: function cdps(address owner) view returns((uint256,uint256,uint256,uint256,uint256))
func (_Stabilization *StabilizationSession) Cdps(owner common.Address) (IStabilizationCDP, error) {
	return _Stabilization.Contract.Cdps(&_Stabilization.CallOpts, owner)
}

// Cdps is a free data retrieval call binding the contract method 0x840c7e24.
//
// Solidity: function cdps(address owner) view returns((uint256,uint256,uint256,uint256,uint256))
func (_Stabilization *StabilizationCallerSession) Cdps(owner common.Address) (IStabilizationCDP, error) {
	return _Stabilization.Contract.Cdps(&_Stabilization.CallOpts, owner)
}

// CollateralPrice is a free data retrieval call binding the contract method 0x5891de72.
//
// Solidity: function collateralPrice() view returns(uint256 price)
func (_Stabilization *StabilizationCaller) CollateralPrice(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "collateralPrice")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// CollateralPrice is a free data retrieval call binding the contract method 0x5891de72.
//
// Solidity: function collateralPrice() view returns(uint256 price)
func (_Stabilization *StabilizationSession) CollateralPrice() (*big.Int, error) {
	return _Stabilization.Contract.CollateralPrice(&_Stabilization.CallOpts)
}

// CollateralPrice is a free data retrieval call binding the contract method 0x5891de72.
//
// Solidity: function collateralPrice() view returns(uint256 price)
func (_Stabilization *StabilizationCallerSession) CollateralPrice() (*big.Int, error) {
	return _Stabilization.Contract.CollateralPrice(&_Stabilization.CallOpts)
}

// CollateralPriceACU is a free data retrieval call binding the contract method 0x1fd084e8.
//
// Solidity: function collateralPriceACU() view returns(uint256)
func (_Stabilization *StabilizationCaller) CollateralPriceACU(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "collateralPriceACU")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// CollateralPriceACU is a free data retrieval call binding the contract method 0x1fd084e8.
//
// Solidity: function collateralPriceACU() view returns(uint256)
func (_Stabilization *StabilizationSession) CollateralPriceACU() (*big.Int, error) {
	return _Stabilization.Contract.CollateralPriceACU(&_Stabilization.CallOpts)
}

// CollateralPriceACU is a free data retrieval call binding the contract method 0x1fd084e8.
//
// Solidity: function collateralPriceACU() view returns(uint256)
func (_Stabilization *StabilizationCallerSession) CollateralPriceACU() (*big.Int, error) {
	return _Stabilization.Contract.CollateralPriceACU(&_Stabilization.CallOpts)
}

// Config is a free data retrieval call binding the contract method 0x79502c55.
//
// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))
func (_Stabilization *StabilizationCaller) Config(opts *bind.CallOpts) (IStabilizationConfig, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "config")

	if err != nil {
		return *new(IStabilizationConfig), err
	}

	out0 := *abi.ConvertType(out[0], new(IStabilizationConfig)).(*IStabilizationConfig)

	return out0, err

}

// Config is a free data retrieval call binding the contract method 0x79502c55.
//
// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))
func (_Stabilization *StabilizationSession) Config() (IStabilizationConfig, error) {
	return _Stabilization.Contract.Config(&_Stabilization.CallOpts)
}

// Config is a free data retrieval call binding the contract method 0x79502c55.
//
// Solidity: function config() view returns((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))
func (_Stabilization *StabilizationCallerSession) Config() (IStabilizationConfig, error) {
	return _Stabilization.Contract.Config(&_Stabilization.CallOpts)
}

// DebtAmount is a free data retrieval call binding the contract method 0x54a9f42c.
//
// Solidity: function debtAmount(address account) view returns(uint256 debt)
func (_Stabilization *StabilizationCaller) DebtAmount(opts *bind.CallOpts, account common.Address) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "debtAmount", account)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// DebtAmount is a free data retrieval call binding the contract method 0x54a9f42c.
//
// Solidity: function debtAmount(address account) view returns(uint256 debt)
func (_Stabilization *StabilizationSession) DebtAmount(account common.Address) (*big.Int, error) {
	return _Stabilization.Contract.DebtAmount(&_Stabilization.CallOpts, account)
}

// DebtAmount is a free data retrieval call binding the contract method 0x54a9f42c.
//
// Solidity: function debtAmount(address account) view returns(uint256 debt)
func (_Stabilization *StabilizationCallerSession) DebtAmount(account common.Address) (*big.Int, error) {
	return _Stabilization.Contract.DebtAmount(&_Stabilization.CallOpts, account)
}

// DebtAmountAtTime is a free data retrieval call binding the contract method 0x8ffba9dd.
//
// Solidity: function debtAmountAtTime(address account, uint256 timestamp) view returns(uint256 debt)
func (_Stabilization *StabilizationCaller) DebtAmountAtTime(opts *bind.CallOpts, account common.Address, timestamp *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "debtAmountAtTime", account, timestamp)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// DebtAmountAtTime is a free data retrieval call binding the contract method 0x8ffba9dd.
//
// Solidity: function debtAmountAtTime(address account, uint256 timestamp) view returns(uint256 debt)
func (_Stabilization *StabilizationSession) DebtAmountAtTime(account common.Address, timestamp *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.DebtAmountAtTime(&_Stabilization.CallOpts, account, timestamp)
}

// DebtAmountAtTime is a free data retrieval call binding the contract method 0x8ffba9dd.
//
// Solidity: function debtAmountAtTime(address account, uint256 timestamp) view returns(uint256 debt)
func (_Stabilization *StabilizationCallerSession) DebtAmountAtTime(account common.Address, timestamp *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.DebtAmountAtTime(&_Stabilization.CallOpts, account, timestamp)
}

// GetAggregatedInterestExponent is a free data retrieval call binding the contract method 0x1506c0f8.
//
// Solidity: function getAggregatedInterestExponent() view returns(uint256)
func (_Stabilization *StabilizationCaller) GetAggregatedInterestExponent(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "getAggregatedInterestExponent")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetAggregatedInterestExponent is a free data retrieval call binding the contract method 0x1506c0f8.
//
// Solidity: function getAggregatedInterestExponent() view returns(uint256)
func (_Stabilization *StabilizationSession) GetAggregatedInterestExponent() (*big.Int, error) {
	return _Stabilization.Contract.GetAggregatedInterestExponent(&_Stabilization.CallOpts)
}

// GetAggregatedInterestExponent is a free data retrieval call binding the contract method 0x1506c0f8.
//
// Solidity: function getAggregatedInterestExponent() view returns(uint256)
func (_Stabilization *StabilizationCallerSession) GetAggregatedInterestExponent() (*big.Int, error) {
	return _Stabilization.Contract.GetAggregatedInterestExponent(&_Stabilization.CallOpts)
}

// GetAnnouncementWindow is a free data retrieval call binding the contract method 0xa25bac32.
//
// Solidity: function getAnnouncementWindow() view returns(uint256)
func (_Stabilization *StabilizationCaller) GetAnnouncementWindow(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "getAnnouncementWindow")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetAnnouncementWindow is a free data retrieval call binding the contract method 0xa25bac32.
//
// Solidity: function getAnnouncementWindow() view returns(uint256)
func (_Stabilization *StabilizationSession) GetAnnouncementWindow() (*big.Int, error) {
	return _Stabilization.Contract.GetAnnouncementWindow(&_Stabilization.CallOpts)
}

// GetAnnouncementWindow is a free data retrieval call binding the contract method 0xa25bac32.
//
// Solidity: function getAnnouncementWindow() view returns(uint256)
func (_Stabilization *StabilizationCallerSession) GetAnnouncementWindow() (*big.Int, error) {
	return _Stabilization.Contract.GetAnnouncementWindow(&_Stabilization.CallOpts)
}

// GetCurrentRate is a free data retrieval call binding the contract method 0xf7fb07b0.
//
// Solidity: function getCurrentRate() view returns(uint256)
func (_Stabilization *StabilizationCaller) GetCurrentRate(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "getCurrentRate")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetCurrentRate is a free data retrieval call binding the contract method 0xf7fb07b0.
//
// Solidity: function getCurrentRate() view returns(uint256)
func (_Stabilization *StabilizationSession) GetCurrentRate() (*big.Int, error) {
	return _Stabilization.Contract.GetCurrentRate(&_Stabilization.CallOpts)
}

// GetCurrentRate is a free data retrieval call binding the contract method 0xf7fb07b0.
//
// Solidity: function getCurrentRate() view returns(uint256)
func (_Stabilization *StabilizationCallerSession) GetCurrentRate() (*big.Int, error) {
	return _Stabilization.Contract.GetCurrentRate(&_Stabilization.CallOpts)
}

// GetCurrentRateActiveTimestamp is a free data retrieval call binding the contract method 0x8d48dbea.
//
// Solidity: function getCurrentRateActiveTimestamp() view returns(uint256)
func (_Stabilization *StabilizationCaller) GetCurrentRateActiveTimestamp(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "getCurrentRateActiveTimestamp")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetCurrentRateActiveTimestamp is a free data retrieval call binding the contract method 0x8d48dbea.
//
// Solidity: function getCurrentRateActiveTimestamp() view returns(uint256)
func (_Stabilization *StabilizationSession) GetCurrentRateActiveTimestamp() (*big.Int, error) {
	return _Stabilization.Contract.GetCurrentRateActiveTimestamp(&_Stabilization.CallOpts)
}

// GetCurrentRateActiveTimestamp is a free data retrieval call binding the contract method 0x8d48dbea.
//
// Solidity: function getCurrentRateActiveTimestamp() view returns(uint256)
func (_Stabilization *StabilizationCallerSession) GetCurrentRateActiveTimestamp() (*big.Int, error) {
	return _Stabilization.Contract.GetCurrentRateActiveTimestamp(&_Stabilization.CallOpts)
}

// GetPendingAnnouncementWindowInfo is a free data retrieval call binding the contract method 0xa223343c.
//
// Solidity: function getPendingAnnouncementWindowInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationCaller) GetPendingAnnouncementWindowInfo(opts *bind.CallOpts) (*big.Int, *big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "getPendingAnnouncementWindowInfo")

	if err != nil {
		return *new(*big.Int), *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)

	return out0, out1, err

}

// GetPendingAnnouncementWindowInfo is a free data retrieval call binding the contract method 0xa223343c.
//
// Solidity: function getPendingAnnouncementWindowInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationSession) GetPendingAnnouncementWindowInfo() (*big.Int, *big.Int, error) {
	return _Stabilization.Contract.GetPendingAnnouncementWindowInfo(&_Stabilization.CallOpts)
}

// GetPendingAnnouncementWindowInfo is a free data retrieval call binding the contract method 0xa223343c.
//
// Solidity: function getPendingAnnouncementWindowInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationCallerSession) GetPendingAnnouncementWindowInfo() (*big.Int, *big.Int, error) {
	return _Stabilization.Contract.GetPendingAnnouncementWindowInfo(&_Stabilization.CallOpts)
}

// GetPendingInterestRateInfo is a free data retrieval call binding the contract method 0xa28a3d5d.
//
// Solidity: function getPendingInterestRateInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationCaller) GetPendingInterestRateInfo(opts *bind.CallOpts) (*big.Int, *big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "getPendingInterestRateInfo")

	if err != nil {
		return *new(*big.Int), *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)

	return out0, out1, err

}

// GetPendingInterestRateInfo is a free data retrieval call binding the contract method 0xa28a3d5d.
//
// Solidity: function getPendingInterestRateInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationSession) GetPendingInterestRateInfo() (*big.Int, *big.Int, error) {
	return _Stabilization.Contract.GetPendingInterestRateInfo(&_Stabilization.CallOpts)
}

// GetPendingInterestRateInfo is a free data retrieval call binding the contract method 0xa28a3d5d.
//
// Solidity: function getPendingInterestRateInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationCallerSession) GetPendingInterestRateInfo() (*big.Int, *big.Int, error) {
	return _Stabilization.Contract.GetPendingInterestRateInfo(&_Stabilization.CallOpts)
}

// GetPendingLiquidationRatioInfo is a free data retrieval call binding the contract method 0x21eb74ee.
//
// Solidity: function getPendingLiquidationRatioInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationCaller) GetPendingLiquidationRatioInfo(opts *bind.CallOpts) (*big.Int, *big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "getPendingLiquidationRatioInfo")

	if err != nil {
		return *new(*big.Int), *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)

	return out0, out1, err

}

// GetPendingLiquidationRatioInfo is a free data retrieval call binding the contract method 0x21eb74ee.
//
// Solidity: function getPendingLiquidationRatioInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationSession) GetPendingLiquidationRatioInfo() (*big.Int, *big.Int, error) {
	return _Stabilization.Contract.GetPendingLiquidationRatioInfo(&_Stabilization.CallOpts)
}

// GetPendingLiquidationRatioInfo is a free data retrieval call binding the contract method 0x21eb74ee.
//
// Solidity: function getPendingLiquidationRatioInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationCallerSession) GetPendingLiquidationRatioInfo() (*big.Int, *big.Int, error) {
	return _Stabilization.Contract.GetPendingLiquidationRatioInfo(&_Stabilization.CallOpts)
}

// GetPendingMinCollateralizationRatioInfo is a free data retrieval call binding the contract method 0x7c404403.
//
// Solidity: function getPendingMinCollateralizationRatioInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationCaller) GetPendingMinCollateralizationRatioInfo(opts *bind.CallOpts) (*big.Int, *big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "getPendingMinCollateralizationRatioInfo")

	if err != nil {
		return *new(*big.Int), *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)

	return out0, out1, err

}

// GetPendingMinCollateralizationRatioInfo is a free data retrieval call binding the contract method 0x7c404403.
//
// Solidity: function getPendingMinCollateralizationRatioInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationSession) GetPendingMinCollateralizationRatioInfo() (*big.Int, *big.Int, error) {
	return _Stabilization.Contract.GetPendingMinCollateralizationRatioInfo(&_Stabilization.CallOpts)
}

// GetPendingMinCollateralizationRatioInfo is a free data retrieval call binding the contract method 0x7c404403.
//
// Solidity: function getPendingMinCollateralizationRatioInfo() view returns(uint256, uint256)
func (_Stabilization *StabilizationCallerSession) GetPendingMinCollateralizationRatioInfo() (*big.Int, *big.Int, error) {
	return _Stabilization.Contract.GetPendingMinCollateralizationRatioInfo(&_Stabilization.CallOpts)
}

// InterestDue is a free data retrieval call binding the contract method 0x3dabe731.
//
// Solidity: function interestDue(uint256 debt, uint256 rateExponent) pure returns(uint256)
func (_Stabilization *StabilizationCaller) InterestDue(opts *bind.CallOpts, debt *big.Int, rateExponent *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "interestDue", debt, rateExponent)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// InterestDue is a free data retrieval call binding the contract method 0x3dabe731.
//
// Solidity: function interestDue(uint256 debt, uint256 rateExponent) pure returns(uint256)
func (_Stabilization *StabilizationSession) InterestDue(debt *big.Int, rateExponent *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.InterestDue(&_Stabilization.CallOpts, debt, rateExponent)
}

// InterestDue is a free data retrieval call binding the contract method 0x3dabe731.
//
// Solidity: function interestDue(uint256 debt, uint256 rateExponent) pure returns(uint256)
func (_Stabilization *StabilizationCallerSession) InterestDue(debt *big.Int, rateExponent *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.InterestDue(&_Stabilization.CallOpts, debt, rateExponent)
}

// InterestExponent is a free data retrieval call binding the contract method 0x62713345.
//
// Solidity: function interestExponent(uint256 interestRate, uint256 startTimestamp, uint256 endTimestamp) pure returns(uint256)
func (_Stabilization *StabilizationCaller) InterestExponent(opts *bind.CallOpts, interestRate *big.Int, startTimestamp *big.Int, endTimestamp *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "interestExponent", interestRate, startTimestamp, endTimestamp)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// InterestExponent is a free data retrieval call binding the contract method 0x62713345.
//
// Solidity: function interestExponent(uint256 interestRate, uint256 startTimestamp, uint256 endTimestamp) pure returns(uint256)
func (_Stabilization *StabilizationSession) InterestExponent(interestRate *big.Int, startTimestamp *big.Int, endTimestamp *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.InterestExponent(&_Stabilization.CallOpts, interestRate, startTimestamp, endTimestamp)
}

// InterestExponent is a free data retrieval call binding the contract method 0x62713345.
//
// Solidity: function interestExponent(uint256 interestRate, uint256 startTimestamp, uint256 endTimestamp) pure returns(uint256)
func (_Stabilization *StabilizationCallerSession) InterestExponent(interestRate *big.Int, startTimestamp *big.Int, endTimestamp *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.InterestExponent(&_Stabilization.CallOpts, interestRate, startTimestamp, endTimestamp)
}

// IsLiquidatable is a free data retrieval call binding the contract method 0x042e02cf.
//
// Solidity: function isLiquidatable(address account) view returns(bool)
func (_Stabilization *StabilizationCaller) IsLiquidatable(opts *bind.CallOpts, account common.Address) (bool, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "isLiquidatable", account)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// IsLiquidatable is a free data retrieval call binding the contract method 0x042e02cf.
//
// Solidity: function isLiquidatable(address account) view returns(bool)
func (_Stabilization *StabilizationSession) IsLiquidatable(account common.Address) (bool, error) {
	return _Stabilization.Contract.IsLiquidatable(&_Stabilization.CallOpts, account)
}

// IsLiquidatable is a free data retrieval call binding the contract method 0x042e02cf.
//
// Solidity: function isLiquidatable(address account) view returns(bool)
func (_Stabilization *StabilizationCallerSession) IsLiquidatable(account common.Address) (bool, error) {
	return _Stabilization.Contract.IsLiquidatable(&_Stabilization.CallOpts, account)
}

// LastUpdated is a free data retrieval call binding the contract method 0xd0b06f5d.
//
// Solidity: function lastUpdated() view returns((uint256,uint256,uint256,uint256))
func (_Stabilization *StabilizationCaller) LastUpdated(opts *bind.CallOpts) (IStabilizationLastUpdated, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "lastUpdated")

	if err != nil {
		return *new(IStabilizationLastUpdated), err
	}

	out0 := *abi.ConvertType(out[0], new(IStabilizationLastUpdated)).(*IStabilizationLastUpdated)

	return out0, err

}

// LastUpdated is a free data retrieval call binding the contract method 0xd0b06f5d.
//
// Solidity: function lastUpdated() view returns((uint256,uint256,uint256,uint256))
func (_Stabilization *StabilizationSession) LastUpdated() (IStabilizationLastUpdated, error) {
	return _Stabilization.Contract.LastUpdated(&_Stabilization.CallOpts)
}

// LastUpdated is a free data retrieval call binding the contract method 0xd0b06f5d.
//
// Solidity: function lastUpdated() view returns((uint256,uint256,uint256,uint256))
func (_Stabilization *StabilizationCallerSession) LastUpdated() (IStabilizationLastUpdated, error) {
	return _Stabilization.Contract.LastUpdated(&_Stabilization.CallOpts)
}

// LiquidationRatio is a free data retrieval call binding the contract method 0x1775765f.
//
// Solidity: function liquidationRatio() view returns(uint256)
func (_Stabilization *StabilizationCaller) LiquidationRatio(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "liquidationRatio")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// LiquidationRatio is a free data retrieval call binding the contract method 0x1775765f.
//
// Solidity: function liquidationRatio() view returns(uint256)
func (_Stabilization *StabilizationSession) LiquidationRatio() (*big.Int, error) {
	return _Stabilization.Contract.LiquidationRatio(&_Stabilization.CallOpts)
}

// LiquidationRatio is a free data retrieval call binding the contract method 0x1775765f.
//
// Solidity: function liquidationRatio() view returns(uint256)
func (_Stabilization *StabilizationCallerSession) LiquidationRatio() (*big.Int, error) {
	return _Stabilization.Contract.LiquidationRatio(&_Stabilization.CallOpts)
}

// MaxBorrow is a free data retrieval call binding the contract method 0x61b24c37.
//
// Solidity: function maxBorrow(uint256 collateral) view returns(uint256)
func (_Stabilization *StabilizationCaller) MaxBorrow(opts *bind.CallOpts, collateral *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "maxBorrow", collateral)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// MaxBorrow is a free data retrieval call binding the contract method 0x61b24c37.
//
// Solidity: function maxBorrow(uint256 collateral) view returns(uint256)
func (_Stabilization *StabilizationSession) MaxBorrow(collateral *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.MaxBorrow(&_Stabilization.CallOpts, collateral)
}

// MaxBorrow is a free data retrieval call binding the contract method 0x61b24c37.
//
// Solidity: function maxBorrow(uint256 collateral) view returns(uint256)
func (_Stabilization *StabilizationCallerSession) MaxBorrow(collateral *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.MaxBorrow(&_Stabilization.CallOpts, collateral)
}

// MinCollateralizationRatio is a free data retrieval call binding the contract method 0xba1be554.
//
// Solidity: function minCollateralizationRatio() view returns(uint256)
func (_Stabilization *StabilizationCaller) MinCollateralizationRatio(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "minCollateralizationRatio")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// MinCollateralizationRatio is a free data retrieval call binding the contract method 0xba1be554.
//
// Solidity: function minCollateralizationRatio() view returns(uint256)
func (_Stabilization *StabilizationSession) MinCollateralizationRatio() (*big.Int, error) {
	return _Stabilization.Contract.MinCollateralizationRatio(&_Stabilization.CallOpts)
}

// MinCollateralizationRatio is a free data retrieval call binding the contract method 0xba1be554.
//
// Solidity: function minCollateralizationRatio() view returns(uint256)
func (_Stabilization *StabilizationCallerSession) MinCollateralizationRatio() (*big.Int, error) {
	return _Stabilization.Contract.MinCollateralizationRatio(&_Stabilization.CallOpts)
}

// MinimumCollateral is a free data retrieval call binding the contract method 0x2951ba56.
//
// Solidity: function minimumCollateral(uint256 principal, uint256 collateralPriceACU, uint256 targetPriceACU, uint256 mcr) pure returns(uint256)
func (_Stabilization *StabilizationCaller) MinimumCollateral(opts *bind.CallOpts, principal *big.Int, collateralPriceACU *big.Int, targetPriceACU *big.Int, mcr *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "minimumCollateral", principal, collateralPriceACU, targetPriceACU, mcr)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// MinimumCollateral is a free data retrieval call binding the contract method 0x2951ba56.
//
// Solidity: function minimumCollateral(uint256 principal, uint256 collateralPriceACU, uint256 targetPriceACU, uint256 mcr) pure returns(uint256)
func (_Stabilization *StabilizationSession) MinimumCollateral(principal *big.Int, collateralPriceACU *big.Int, targetPriceACU *big.Int, mcr *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.MinimumCollateral(&_Stabilization.CallOpts, principal, collateralPriceACU, targetPriceACU, mcr)
}

// MinimumCollateral is a free data retrieval call binding the contract method 0x2951ba56.
//
// Solidity: function minimumCollateral(uint256 principal, uint256 collateralPriceACU, uint256 targetPriceACU, uint256 mcr) pure returns(uint256)
func (_Stabilization *StabilizationCallerSession) MinimumCollateral(principal *big.Int, collateralPriceACU *big.Int, targetPriceACU *big.Int, mcr *big.Int) (*big.Int, error) {
	return _Stabilization.Contract.MinimumCollateral(&_Stabilization.CallOpts, principal, collateralPriceACU, targetPriceACU, mcr)
}

// UnderCollateralized is a free data retrieval call binding the contract method 0xfbbe6991.
//
// Solidity: function underCollateralized(uint256 collateral, uint256 price, uint256 debt, uint256 liquidationRatio) pure returns(bool)
func (_Stabilization *StabilizationCaller) UnderCollateralized(opts *bind.CallOpts, collateral *big.Int, price *big.Int, debt *big.Int, liquidationRatio *big.Int) (bool, error) {
	var out []interface{}
	err := _Stabilization.contract.Call(opts, &out, "underCollateralized", collateral, price, debt, liquidationRatio)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// UnderCollateralized is a free data retrieval call binding the contract method 0xfbbe6991.
//
// Solidity: function underCollateralized(uint256 collateral, uint256 price, uint256 debt, uint256 liquidationRatio) pure returns(bool)
func (_Stabilization *StabilizationSession) UnderCollateralized(collateral *big.Int, price *big.Int, debt *big.Int, liquidationRatio *big.Int) (bool, error) {
	return _Stabilization.Contract.UnderCollateralized(&_Stabilization.CallOpts, collateral, price, debt, liquidationRatio)
}

// UnderCollateralized is a free data retrieval call binding the contract method 0xfbbe6991.
//
// Solidity: function underCollateralized(uint256 collateral, uint256 price, uint256 debt, uint256 liquidationRatio) pure returns(bool)
func (_Stabilization *StabilizationCallerSession) UnderCollateralized(collateral *big.Int, price *big.Int, debt *big.Int, liquidationRatio *big.Int) (bool, error) {
	return _Stabilization.Contract.UnderCollateralized(&_Stabilization.CallOpts, collateral, price, debt, liquidationRatio)
}

// Borrow is a paid mutator transaction binding the contract method 0xc5ebeaec.
//
// Solidity: function borrow(uint256 amount) returns()
func (_Stabilization *StabilizationTransactor) Borrow(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "borrow", amount)
}

// Borrow is a paid mutator transaction binding the contract method 0xc5ebeaec.
//
// Solidity: function borrow(uint256 amount) returns()
func (_Stabilization *StabilizationSession) Borrow(amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.Borrow(&_Stabilization.TransactOpts, amount)
}

// Borrow is a paid mutator transaction binding the contract method 0xc5ebeaec.
//
// Solidity: function borrow(uint256 amount) returns()
func (_Stabilization *StabilizationTransactorSession) Borrow(amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.Borrow(&_Stabilization.TransactOpts, amount)
}

// Deposit is a paid mutator transaction binding the contract method 0xb6b55f25.
//
// Solidity: function deposit(uint256 amount) returns()
func (_Stabilization *StabilizationTransactor) Deposit(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "deposit", amount)
}

// Deposit is a paid mutator transaction binding the contract method 0xb6b55f25.
//
// Solidity: function deposit(uint256 amount) returns()
func (_Stabilization *StabilizationSession) Deposit(amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.Deposit(&_Stabilization.TransactOpts, amount)
}

// Deposit is a paid mutator transaction binding the contract method 0xb6b55f25.
//
// Solidity: function deposit(uint256 amount) returns()
func (_Stabilization *StabilizationTransactorSession) Deposit(amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.Deposit(&_Stabilization.TransactOpts, amount)
}

// Liquidate is a paid mutator transaction binding the contract method 0x4914c008.
//
// Solidity: function liquidate(address account, uint256 collateralSold, address bidder) payable returns()
func (_Stabilization *StabilizationTransactor) Liquidate(opts *bind.TransactOpts, account common.Address, collateralSold *big.Int, bidder common.Address) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "liquidate", account, collateralSold, bidder)
}

// Liquidate is a paid mutator transaction binding the contract method 0x4914c008.
//
// Solidity: function liquidate(address account, uint256 collateralSold, address bidder) payable returns()
func (_Stabilization *StabilizationSession) Liquidate(account common.Address, collateralSold *big.Int, bidder common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.Liquidate(&_Stabilization.TransactOpts, account, collateralSold, bidder)
}

// Liquidate is a paid mutator transaction binding the contract method 0x4914c008.
//
// Solidity: function liquidate(address account, uint256 collateralSold, address bidder) payable returns()
func (_Stabilization *StabilizationTransactorSession) Liquidate(account common.Address, collateralSold *big.Int, bidder common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.Liquidate(&_Stabilization.TransactOpts, account, collateralSold, bidder)
}

// RemoveCDPRestrictions is a paid mutator transaction binding the contract method 0x2c01c1b9.
//
// Solidity: function removeCDPRestrictions() returns()
func (_Stabilization *StabilizationTransactor) RemoveCDPRestrictions(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "removeCDPRestrictions")
}

// RemoveCDPRestrictions is a paid mutator transaction binding the contract method 0x2c01c1b9.
//
// Solidity: function removeCDPRestrictions() returns()
func (_Stabilization *StabilizationSession) RemoveCDPRestrictions() (*types.Transaction, error) {
	return _Stabilization.Contract.RemoveCDPRestrictions(&_Stabilization.TransactOpts)
}

// RemoveCDPRestrictions is a paid mutator transaction binding the contract method 0x2c01c1b9.
//
// Solidity: function removeCDPRestrictions() returns()
func (_Stabilization *StabilizationTransactorSession) RemoveCDPRestrictions() (*types.Transaction, error) {
	return _Stabilization.Contract.RemoveCDPRestrictions(&_Stabilization.TransactOpts)
}

// Repay is a paid mutator transaction binding the contract method 0x402d8883.
//
// Solidity: function repay() payable returns()
func (_Stabilization *StabilizationTransactor) Repay(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "repay")
}

// Repay is a paid mutator transaction binding the contract method 0x402d8883.
//
// Solidity: function repay() payable returns()
func (_Stabilization *StabilizationSession) Repay() (*types.Transaction, error) {
	return _Stabilization.Contract.Repay(&_Stabilization.TransactOpts)
}

// Repay is a paid mutator transaction binding the contract method 0x402d8883.
//
// Solidity: function repay() payable returns()
func (_Stabilization *StabilizationTransactorSession) Repay() (*types.Transaction, error) {
	return _Stabilization.Contract.Repay(&_Stabilization.TransactOpts)
}

// SetACU is a paid mutator transaction binding the contract method 0x4b8ef943.
//
// Solidity: function setACU(address acu) returns()
func (_Stabilization *StabilizationTransactor) SetACU(opts *bind.TransactOpts, acu common.Address) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "setACU", acu)
}

// SetACU is a paid mutator transaction binding the contract method 0x4b8ef943.
//
// Solidity: function setACU(address acu) returns()
func (_Stabilization *StabilizationSession) SetACU(acu common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetACU(&_Stabilization.TransactOpts, acu)
}

// SetACU is a paid mutator transaction binding the contract method 0x4b8ef943.
//
// Solidity: function setACU(address acu) returns()
func (_Stabilization *StabilizationTransactorSession) SetACU(acu common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetACU(&_Stabilization.TransactOpts, acu)
}

// SetAtnSupplyOperator is a paid mutator transaction binding the contract method 0x3c1cb964.
//
// Solidity: function setAtnSupplyOperator(address atnSupplyOperator) returns()
func (_Stabilization *StabilizationTransactor) SetAtnSupplyOperator(opts *bind.TransactOpts, atnSupplyOperator common.Address) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "setAtnSupplyOperator", atnSupplyOperator)
}

// SetAtnSupplyOperator is a paid mutator transaction binding the contract method 0x3c1cb964.
//
// Solidity: function setAtnSupplyOperator(address atnSupplyOperator) returns()
func (_Stabilization *StabilizationSession) SetAtnSupplyOperator(atnSupplyOperator common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetAtnSupplyOperator(&_Stabilization.TransactOpts, atnSupplyOperator)
}

// SetAtnSupplyOperator is a paid mutator transaction binding the contract method 0x3c1cb964.
//
// Solidity: function setAtnSupplyOperator(address atnSupplyOperator) returns()
func (_Stabilization *StabilizationTransactorSession) SetAtnSupplyOperator(atnSupplyOperator common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetAtnSupplyOperator(&_Stabilization.TransactOpts, atnSupplyOperator)
}

// SetAuctioneer is a paid mutator transaction binding the contract method 0x00ede7e4.
//
// Solidity: function setAuctioneer(address auctioneer) returns()
func (_Stabilization *StabilizationTransactor) SetAuctioneer(opts *bind.TransactOpts, auctioneer common.Address) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "setAuctioneer", auctioneer)
}

// SetAuctioneer is a paid mutator transaction binding the contract method 0x00ede7e4.
//
// Solidity: function setAuctioneer(address auctioneer) returns()
func (_Stabilization *StabilizationSession) SetAuctioneer(auctioneer common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetAuctioneer(&_Stabilization.TransactOpts, auctioneer)
}

// SetAuctioneer is a paid mutator transaction binding the contract method 0x00ede7e4.
//
// Solidity: function setAuctioneer(address auctioneer) returns()
func (_Stabilization *StabilizationTransactorSession) SetAuctioneer(auctioneer common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetAuctioneer(&_Stabilization.TransactOpts, auctioneer)
}

// SetDefaultACUUSDPrice is a paid mutator transaction binding the contract method 0xb8287403.
//
// Solidity: function setDefaultACUUSDPrice(uint256 defaultACUUSDPrice) returns()
func (_Stabilization *StabilizationTransactor) SetDefaultACUUSDPrice(opts *bind.TransactOpts, defaultACUUSDPrice *big.Int) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "setDefaultACUUSDPrice", defaultACUUSDPrice)
}

// SetDefaultACUUSDPrice is a paid mutator transaction binding the contract method 0xb8287403.
//
// Solidity: function setDefaultACUUSDPrice(uint256 defaultACUUSDPrice) returns()
func (_Stabilization *StabilizationSession) SetDefaultACUUSDPrice(defaultACUUSDPrice *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.SetDefaultACUUSDPrice(&_Stabilization.TransactOpts, defaultACUUSDPrice)
}

// SetDefaultACUUSDPrice is a paid mutator transaction binding the contract method 0xb8287403.
//
// Solidity: function setDefaultACUUSDPrice(uint256 defaultACUUSDPrice) returns()
func (_Stabilization *StabilizationTransactorSession) SetDefaultACUUSDPrice(defaultACUUSDPrice *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.SetDefaultACUUSDPrice(&_Stabilization.TransactOpts, defaultACUUSDPrice)
}

// SetDefaultNTNATNPrice is a paid mutator transaction binding the contract method 0x5d429306.
//
// Solidity: function setDefaultNTNATNPrice(uint256 defaultNTNATNPrice) returns()
func (_Stabilization *StabilizationTransactor) SetDefaultNTNATNPrice(opts *bind.TransactOpts, defaultNTNATNPrice *big.Int) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "setDefaultNTNATNPrice", defaultNTNATNPrice)
}

// SetDefaultNTNATNPrice is a paid mutator transaction binding the contract method 0x5d429306.
//
// Solidity: function setDefaultNTNATNPrice(uint256 defaultNTNATNPrice) returns()
func (_Stabilization *StabilizationSession) SetDefaultNTNATNPrice(defaultNTNATNPrice *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.SetDefaultNTNATNPrice(&_Stabilization.TransactOpts, defaultNTNATNPrice)
}

// SetDefaultNTNATNPrice is a paid mutator transaction binding the contract method 0x5d429306.
//
// Solidity: function setDefaultNTNATNPrice(uint256 defaultNTNATNPrice) returns()
func (_Stabilization *StabilizationTransactorSession) SetDefaultNTNATNPrice(defaultNTNATNPrice *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.SetDefaultNTNATNPrice(&_Stabilization.TransactOpts, defaultNTNATNPrice)
}

// SetDefaultNTNUSDPrice is a paid mutator transaction binding the contract method 0xf57d686c.
//
// Solidity: function setDefaultNTNUSDPrice(uint256 defaultNTNUSDPrice) returns()
func (_Stabilization *StabilizationTransactor) SetDefaultNTNUSDPrice(opts *bind.TransactOpts, defaultNTNUSDPrice *big.Int) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "setDefaultNTNUSDPrice", defaultNTNUSDPrice)
}

// SetDefaultNTNUSDPrice is a paid mutator transaction binding the contract method 0xf57d686c.
//
// Solidity: function setDefaultNTNUSDPrice(uint256 defaultNTNUSDPrice) returns()
func (_Stabilization *StabilizationSession) SetDefaultNTNUSDPrice(defaultNTNUSDPrice *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.SetDefaultNTNUSDPrice(&_Stabilization.TransactOpts, defaultNTNUSDPrice)
}

// SetDefaultNTNUSDPrice is a paid mutator transaction binding the contract method 0xf57d686c.
//
// Solidity: function setDefaultNTNUSDPrice(uint256 defaultNTNUSDPrice) returns()
func (_Stabilization *StabilizationTransactorSession) SetDefaultNTNUSDPrice(defaultNTNUSDPrice *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.SetDefaultNTNUSDPrice(&_Stabilization.TransactOpts, defaultNTNUSDPrice)
}

// SetMinDebtRequirement is a paid mutator transaction binding the contract method 0x53afe81d.
//
// Solidity: function setMinDebtRequirement(uint256 amount) returns()
func (_Stabilization *StabilizationTransactor) SetMinDebtRequirement(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "setMinDebtRequirement", amount)
}

// SetMinDebtRequirement is a paid mutator transaction binding the contract method 0x53afe81d.
//
// Solidity: function setMinDebtRequirement(uint256 amount) returns()
func (_Stabilization *StabilizationSession) SetMinDebtRequirement(amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.SetMinDebtRequirement(&_Stabilization.TransactOpts, amount)
}

// SetMinDebtRequirement is a paid mutator transaction binding the contract method 0x53afe81d.
//
// Solidity: function setMinDebtRequirement(uint256 amount) returns()
func (_Stabilization *StabilizationTransactorSession) SetMinDebtRequirement(amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.SetMinDebtRequirement(&_Stabilization.TransactOpts, amount)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_Stabilization *StabilizationTransactor) SetOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "setOperator", operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_Stabilization *StabilizationSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetOperator(&_Stabilization.TransactOpts, operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_Stabilization *StabilizationTransactorSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetOperator(&_Stabilization.TransactOpts, operator)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_Stabilization *StabilizationTransactor) SetOracle(opts *bind.TransactOpts, oracle common.Address) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "setOracle", oracle)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_Stabilization *StabilizationSession) SetOracle(oracle common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetOracle(&_Stabilization.TransactOpts, oracle)
}

// SetOracle is a paid mutator transaction binding the contract method 0x7adbf973.
//
// Solidity: function setOracle(address oracle) returns()
func (_Stabilization *StabilizationTransactorSession) SetOracle(oracle common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetOracle(&_Stabilization.TransactOpts, oracle)
}

// SetSupplyControl is a paid mutator transaction binding the contract method 0x52e5a050.
//
// Solidity: function setSupplyControl(address supplyControl) returns()
func (_Stabilization *StabilizationTransactor) SetSupplyControl(opts *bind.TransactOpts, supplyControl common.Address) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "setSupplyControl", supplyControl)
}

// SetSupplyControl is a paid mutator transaction binding the contract method 0x52e5a050.
//
// Solidity: function setSupplyControl(address supplyControl) returns()
func (_Stabilization *StabilizationSession) SetSupplyControl(supplyControl common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetSupplyControl(&_Stabilization.TransactOpts, supplyControl)
}

// SetSupplyControl is a paid mutator transaction binding the contract method 0x52e5a050.
//
// Solidity: function setSupplyControl(address supplyControl) returns()
func (_Stabilization *StabilizationTransactorSession) SetSupplyControl(supplyControl common.Address) (*types.Transaction, error) {
	return _Stabilization.Contract.SetSupplyControl(&_Stabilization.TransactOpts, supplyControl)
}

// UpdateAnnouncementWindow is a paid mutator transaction binding the contract method 0x6870929f.
//
// Solidity: function updateAnnouncementWindow(uint256 window) returns()
func (_Stabilization *StabilizationTransactor) UpdateAnnouncementWindow(opts *bind.TransactOpts, window *big.Int) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "updateAnnouncementWindow", window)
}

// UpdateAnnouncementWindow is a paid mutator transaction binding the contract method 0x6870929f.
//
// Solidity: function updateAnnouncementWindow(uint256 window) returns()
func (_Stabilization *StabilizationSession) UpdateAnnouncementWindow(window *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.UpdateAnnouncementWindow(&_Stabilization.TransactOpts, window)
}

// UpdateAnnouncementWindow is a paid mutator transaction binding the contract method 0x6870929f.
//
// Solidity: function updateAnnouncementWindow(uint256 window) returns()
func (_Stabilization *StabilizationTransactorSession) UpdateAnnouncementWindow(window *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.UpdateAnnouncementWindow(&_Stabilization.TransactOpts, window)
}

// UpdateBorrowInterestRate is a paid mutator transaction binding the contract method 0x179c114e.
//
// Solidity: function updateBorrowInterestRate(uint256 newInterestRate) returns()
func (_Stabilization *StabilizationTransactor) UpdateBorrowInterestRate(opts *bind.TransactOpts, newInterestRate *big.Int) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "updateBorrowInterestRate", newInterestRate)
}

// UpdateBorrowInterestRate is a paid mutator transaction binding the contract method 0x179c114e.
//
// Solidity: function updateBorrowInterestRate(uint256 newInterestRate) returns()
func (_Stabilization *StabilizationSession) UpdateBorrowInterestRate(newInterestRate *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.UpdateBorrowInterestRate(&_Stabilization.TransactOpts, newInterestRate)
}

// UpdateBorrowInterestRate is a paid mutator transaction binding the contract method 0x179c114e.
//
// Solidity: function updateBorrowInterestRate(uint256 newInterestRate) returns()
func (_Stabilization *StabilizationTransactorSession) UpdateBorrowInterestRate(newInterestRate *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.UpdateBorrowInterestRate(&_Stabilization.TransactOpts, newInterestRate)
}

// UpdateRatios is a paid mutator transaction binding the contract method 0xdb433efa.
//
// Solidity: function updateRatios(uint256 newLiquidationRatio, uint256 newMinCollateralizationRatio) returns()
func (_Stabilization *StabilizationTransactor) UpdateRatios(opts *bind.TransactOpts, newLiquidationRatio *big.Int, newMinCollateralizationRatio *big.Int) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "updateRatios", newLiquidationRatio, newMinCollateralizationRatio)
}

// UpdateRatios is a paid mutator transaction binding the contract method 0xdb433efa.
//
// Solidity: function updateRatios(uint256 newLiquidationRatio, uint256 newMinCollateralizationRatio) returns()
func (_Stabilization *StabilizationSession) UpdateRatios(newLiquidationRatio *big.Int, newMinCollateralizationRatio *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.UpdateRatios(&_Stabilization.TransactOpts, newLiquidationRatio, newMinCollateralizationRatio)
}

// UpdateRatios is a paid mutator transaction binding the contract method 0xdb433efa.
//
// Solidity: function updateRatios(uint256 newLiquidationRatio, uint256 newMinCollateralizationRatio) returns()
func (_Stabilization *StabilizationTransactorSession) UpdateRatios(newLiquidationRatio *big.Int, newMinCollateralizationRatio *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.UpdateRatios(&_Stabilization.TransactOpts, newLiquidationRatio, newMinCollateralizationRatio)
}

// UseFixedGenesisPrices is a paid mutator transaction binding the contract method 0xab385a45.
//
// Solidity: function useFixedGenesisPrices(bool useFixed) returns()
func (_Stabilization *StabilizationTransactor) UseFixedGenesisPrices(opts *bind.TransactOpts, useFixed bool) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "useFixedGenesisPrices", useFixed)
}

// UseFixedGenesisPrices is a paid mutator transaction binding the contract method 0xab385a45.
//
// Solidity: function useFixedGenesisPrices(bool useFixed) returns()
func (_Stabilization *StabilizationSession) UseFixedGenesisPrices(useFixed bool) (*types.Transaction, error) {
	return _Stabilization.Contract.UseFixedGenesisPrices(&_Stabilization.TransactOpts, useFixed)
}

// UseFixedGenesisPrices is a paid mutator transaction binding the contract method 0xab385a45.
//
// Solidity: function useFixedGenesisPrices(bool useFixed) returns()
func (_Stabilization *StabilizationTransactorSession) UseFixedGenesisPrices(useFixed bool) (*types.Transaction, error) {
	return _Stabilization.Contract.UseFixedGenesisPrices(&_Stabilization.TransactOpts, useFixed)
}

// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d.
//
// Solidity: function withdraw(uint256 amount) returns()
func (_Stabilization *StabilizationTransactor) Withdraw(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.contract.Transact(opts, "withdraw", amount)
}

// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d.
//
// Solidity: function withdraw(uint256 amount) returns()
func (_Stabilization *StabilizationSession) Withdraw(amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.Withdraw(&_Stabilization.TransactOpts, amount)
}

// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d.
//
// Solidity: function withdraw(uint256 amount) returns()
func (_Stabilization *StabilizationTransactorSession) Withdraw(amount *big.Int) (*types.Transaction, error) {
	return _Stabilization.Contract.Withdraw(&_Stabilization.TransactOpts, amount)
}

// StabilizationAnnouncementWindowUpdateAnnouncedIterator is returned from FilterAnnouncementWindowUpdateAnnounced and is used to iterate over the raw logs and unpacked data for AnnouncementWindowUpdateAnnounced events raised by the Stabilization contract.
type StabilizationAnnouncementWindowUpdateAnnouncedIterator struct {
	Event *StabilizationAnnouncementWindowUpdateAnnounced // 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 *StabilizationAnnouncementWindowUpdateAnnouncedIterator) 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(StabilizationAnnouncementWindowUpdateAnnounced)
			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(StabilizationAnnouncementWindowUpdateAnnounced)
		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 *StabilizationAnnouncementWindowUpdateAnnouncedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationAnnouncementWindowUpdateAnnouncedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationAnnouncementWindowUpdateAnnounced represents a AnnouncementWindowUpdateAnnounced event raised by the Stabilization contract.
type StabilizationAnnouncementWindowUpdateAnnounced struct {
	NewAnnouncementWindow   *big.Int
	ActiveSince             *big.Int
	PendingWindowOverridden bool
	Raw                     types.Log // Blockchain specific contextual infos
}

// FilterAnnouncementWindowUpdateAnnounced is a free log retrieval operation binding the contract event 0xed7f709ecbcef995208a1b2fc94064f0ff5a6f799d7f64bbd830670224c18f2d.
//
// Solidity: event AnnouncementWindowUpdateAnnounced(uint256 newAnnouncementWindow, uint256 activeSince, bool pendingWindowOverridden)
func (_Stabilization *StabilizationFilterer) FilterAnnouncementWindowUpdateAnnounced(opts *bind.FilterOpts) (*StabilizationAnnouncementWindowUpdateAnnouncedIterator, error) {

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "AnnouncementWindowUpdateAnnounced")
	if err != nil {
		return nil, err
	}
	return &StabilizationAnnouncementWindowUpdateAnnouncedIterator{contract: _Stabilization.contract, event: "AnnouncementWindowUpdateAnnounced", logs: logs, sub: sub}, nil
}

// WatchAnnouncementWindowUpdateAnnounced is a free log subscription operation binding the contract event 0xed7f709ecbcef995208a1b2fc94064f0ff5a6f799d7f64bbd830670224c18f2d.
//
// Solidity: event AnnouncementWindowUpdateAnnounced(uint256 newAnnouncementWindow, uint256 activeSince, bool pendingWindowOverridden)
func (_Stabilization *StabilizationFilterer) WatchAnnouncementWindowUpdateAnnounced(opts *bind.WatchOpts, sink chan<- *StabilizationAnnouncementWindowUpdateAnnounced) (event.Subscription, error) {

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "AnnouncementWindowUpdateAnnounced")
	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(StabilizationAnnouncementWindowUpdateAnnounced)
				if err := _Stabilization.contract.UnpackLog(event, "AnnouncementWindowUpdateAnnounced", 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
}

// ParseAnnouncementWindowUpdateAnnounced is a log parse operation binding the contract event 0xed7f709ecbcef995208a1b2fc94064f0ff5a6f799d7f64bbd830670224c18f2d.
//
// Solidity: event AnnouncementWindowUpdateAnnounced(uint256 newAnnouncementWindow, uint256 activeSince, bool pendingWindowOverridden)
func (_Stabilization *StabilizationFilterer) ParseAnnouncementWindowUpdateAnnounced(log types.Log) (*StabilizationAnnouncementWindowUpdateAnnounced, error) {
	event := new(StabilizationAnnouncementWindowUpdateAnnounced)
	if err := _Stabilization.contract.UnpackLog(event, "AnnouncementWindowUpdateAnnounced", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationBorrowIterator is returned from FilterBorrow and is used to iterate over the raw logs and unpacked data for Borrow events raised by the Stabilization contract.
type StabilizationBorrowIterator struct {
	Event *StabilizationBorrow // 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 *StabilizationBorrowIterator) 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(StabilizationBorrow)
			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(StabilizationBorrow)
		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 *StabilizationBorrowIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationBorrowIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationBorrow represents a Borrow event raised by the Stabilization contract.
type StabilizationBorrow struct {
	Account common.Address
	Amount  *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterBorrow is a free log retrieval operation binding the contract event 0xcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750.
//
// Solidity: event Borrow(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) FilterBorrow(opts *bind.FilterOpts, account []common.Address) (*StabilizationBorrowIterator, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "Borrow", accountRule)
	if err != nil {
		return nil, err
	}
	return &StabilizationBorrowIterator{contract: _Stabilization.contract, event: "Borrow", logs: logs, sub: sub}, nil
}

// WatchBorrow is a free log subscription operation binding the contract event 0xcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750.
//
// Solidity: event Borrow(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) WatchBorrow(opts *bind.WatchOpts, sink chan<- *StabilizationBorrow, account []common.Address) (event.Subscription, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "Borrow", 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(StabilizationBorrow)
				if err := _Stabilization.contract.UnpackLog(event, "Borrow", 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
}

// ParseBorrow is a log parse operation binding the contract event 0xcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750.
//
// Solidity: event Borrow(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) ParseBorrow(log types.Log) (*StabilizationBorrow, error) {
	event := new(StabilizationBorrow)
	if err := _Stabilization.contract.UnpackLog(event, "Borrow", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationCDPRestrictionsRemovedIterator is returned from FilterCDPRestrictionsRemoved and is used to iterate over the raw logs and unpacked data for CDPRestrictionsRemoved events raised by the Stabilization contract.
type StabilizationCDPRestrictionsRemovedIterator struct {
	Event *StabilizationCDPRestrictionsRemoved // 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 *StabilizationCDPRestrictionsRemovedIterator) 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(StabilizationCDPRestrictionsRemoved)
			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(StabilizationCDPRestrictionsRemoved)
		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 *StabilizationCDPRestrictionsRemovedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationCDPRestrictionsRemovedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationCDPRestrictionsRemoved represents a CDPRestrictionsRemoved event raised by the Stabilization contract.
type StabilizationCDPRestrictionsRemoved struct {
	Raw types.Log // Blockchain specific contextual infos
}

// FilterCDPRestrictionsRemoved is a free log retrieval operation binding the contract event 0xa2e462158ad4e6546090511fe2857d985d816588431165cd3609c45df783a20c.
//
// Solidity: event CDPRestrictionsRemoved()
func (_Stabilization *StabilizationFilterer) FilterCDPRestrictionsRemoved(opts *bind.FilterOpts) (*StabilizationCDPRestrictionsRemovedIterator, error) {

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "CDPRestrictionsRemoved")
	if err != nil {
		return nil, err
	}
	return &StabilizationCDPRestrictionsRemovedIterator{contract: _Stabilization.contract, event: "CDPRestrictionsRemoved", logs: logs, sub: sub}, nil
}

// WatchCDPRestrictionsRemoved is a free log subscription operation binding the contract event 0xa2e462158ad4e6546090511fe2857d985d816588431165cd3609c45df783a20c.
//
// Solidity: event CDPRestrictionsRemoved()
func (_Stabilization *StabilizationFilterer) WatchCDPRestrictionsRemoved(opts *bind.WatchOpts, sink chan<- *StabilizationCDPRestrictionsRemoved) (event.Subscription, error) {

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "CDPRestrictionsRemoved")
	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(StabilizationCDPRestrictionsRemoved)
				if err := _Stabilization.contract.UnpackLog(event, "CDPRestrictionsRemoved", 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
}

// ParseCDPRestrictionsRemoved is a log parse operation binding the contract event 0xa2e462158ad4e6546090511fe2857d985d816588431165cd3609c45df783a20c.
//
// Solidity: event CDPRestrictionsRemoved()
func (_Stabilization *StabilizationFilterer) ParseCDPRestrictionsRemoved(log types.Log) (*StabilizationCDPRestrictionsRemoved, error) {
	event := new(StabilizationCDPRestrictionsRemoved)
	if err := _Stabilization.contract.UnpackLog(event, "CDPRestrictionsRemoved", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationConfigUpdateAddressIterator is returned from FilterConfigUpdateAddress and is used to iterate over the raw logs and unpacked data for ConfigUpdateAddress events raised by the Stabilization contract.
type StabilizationConfigUpdateAddressIterator struct {
	Event *StabilizationConfigUpdateAddress // 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 *StabilizationConfigUpdateAddressIterator) 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(StabilizationConfigUpdateAddress)
			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(StabilizationConfigUpdateAddress)
		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 *StabilizationConfigUpdateAddressIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationConfigUpdateAddressIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationConfigUpdateAddress represents a ConfigUpdateAddress event raised by the Stabilization contract.
type StabilizationConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Stabilization *StabilizationFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*StabilizationConfigUpdateAddressIterator, error) {

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &StabilizationConfigUpdateAddressIterator{contract: _Stabilization.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Stabilization *StabilizationFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *StabilizationConfigUpdateAddress) (event.Subscription, error) {

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "ConfigUpdateAddress")
	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(StabilizationConfigUpdateAddress)
				if err := _Stabilization.contract.UnpackLog(event, "ConfigUpdateAddress", 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
}

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_Stabilization *StabilizationFilterer) ParseConfigUpdateAddress(log types.Log) (*StabilizationConfigUpdateAddress, error) {
	event := new(StabilizationConfigUpdateAddress)
	if err := _Stabilization.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationConfigUpdateBoolIterator is returned from FilterConfigUpdateBool and is used to iterate over the raw logs and unpacked data for ConfigUpdateBool events raised by the Stabilization contract.
type StabilizationConfigUpdateBoolIterator struct {
	Event *StabilizationConfigUpdateBool // 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 *StabilizationConfigUpdateBoolIterator) 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(StabilizationConfigUpdateBool)
			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(StabilizationConfigUpdateBool)
		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 *StabilizationConfigUpdateBoolIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationConfigUpdateBoolIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationConfigUpdateBool represents a ConfigUpdateBool event raised by the Stabilization contract.
type StabilizationConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Stabilization *StabilizationFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*StabilizationConfigUpdateBoolIterator, error) {

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &StabilizationConfigUpdateBoolIterator{contract: _Stabilization.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Stabilization *StabilizationFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *StabilizationConfigUpdateBool) (event.Subscription, error) {

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "ConfigUpdateBool")
	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(StabilizationConfigUpdateBool)
				if err := _Stabilization.contract.UnpackLog(event, "ConfigUpdateBool", 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
}

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_Stabilization *StabilizationFilterer) ParseConfigUpdateBool(log types.Log) (*StabilizationConfigUpdateBool, error) {
	event := new(StabilizationConfigUpdateBool)
	if err := _Stabilization.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationConfigUpdateUintIterator is returned from FilterConfigUpdateUint and is used to iterate over the raw logs and unpacked data for ConfigUpdateUint events raised by the Stabilization contract.
type StabilizationConfigUpdateUintIterator struct {
	Event *StabilizationConfigUpdateUint // 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 *StabilizationConfigUpdateUintIterator) 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(StabilizationConfigUpdateUint)
			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(StabilizationConfigUpdateUint)
		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 *StabilizationConfigUpdateUintIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationConfigUpdateUintIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationConfigUpdateUint represents a ConfigUpdateUint event raised by the Stabilization contract.
type StabilizationConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Stabilization *StabilizationFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*StabilizationConfigUpdateUintIterator, error) {

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &StabilizationConfigUpdateUintIterator{contract: _Stabilization.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Stabilization *StabilizationFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *StabilizationConfigUpdateUint) (event.Subscription, error) {

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "ConfigUpdateUint")
	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(StabilizationConfigUpdateUint)
				if err := _Stabilization.contract.UnpackLog(event, "ConfigUpdateUint", 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
}

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_Stabilization *StabilizationFilterer) ParseConfigUpdateUint(log types.Log) (*StabilizationConfigUpdateUint, error) {
	event := new(StabilizationConfigUpdateUint)
	if err := _Stabilization.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the Stabilization contract.
type StabilizationDepositIterator struct {
	Event *StabilizationDeposit // 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 *StabilizationDepositIterator) 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(StabilizationDeposit)
			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(StabilizationDeposit)
		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 *StabilizationDepositIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationDepositIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationDeposit represents a Deposit event raised by the Stabilization contract.
type StabilizationDeposit struct {
	Account common.Address
	Amount  *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterDeposit is a free log retrieval operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c.
//
// Solidity: event Deposit(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) FilterDeposit(opts *bind.FilterOpts, account []common.Address) (*StabilizationDepositIterator, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "Deposit", accountRule)
	if err != nil {
		return nil, err
	}
	return &StabilizationDepositIterator{contract: _Stabilization.contract, event: "Deposit", logs: logs, sub: sub}, nil
}

// WatchDeposit is a free log subscription operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c.
//
// Solidity: event Deposit(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *StabilizationDeposit, account []common.Address) (event.Subscription, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "Deposit", 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(StabilizationDeposit)
				if err := _Stabilization.contract.UnpackLog(event, "Deposit", 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
}

// ParseDeposit is a log parse operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c.
//
// Solidity: event Deposit(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) ParseDeposit(log types.Log) (*StabilizationDeposit, error) {
	event := new(StabilizationDeposit)
	if err := _Stabilization.contract.UnpackLog(event, "Deposit", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationInterestRateUpdateAnnouncedIterator is returned from FilterInterestRateUpdateAnnounced and is used to iterate over the raw logs and unpacked data for InterestRateUpdateAnnounced events raised by the Stabilization contract.
type StabilizationInterestRateUpdateAnnouncedIterator struct {
	Event *StabilizationInterestRateUpdateAnnounced // 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 *StabilizationInterestRateUpdateAnnouncedIterator) 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(StabilizationInterestRateUpdateAnnounced)
			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(StabilizationInterestRateUpdateAnnounced)
		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 *StabilizationInterestRateUpdateAnnouncedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationInterestRateUpdateAnnouncedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationInterestRateUpdateAnnounced represents a InterestRateUpdateAnnounced event raised by the Stabilization contract.
type StabilizationInterestRateUpdateAnnounced struct {
	NewRate               *big.Int
	ActiveSince           *big.Int
	PendingRateOverridden bool
	Raw                   types.Log // Blockchain specific contextual infos
}

// FilterInterestRateUpdateAnnounced is a free log retrieval operation binding the contract event 0xb12f349439574b70f65dab4d2f88d6c268a39280fd283047f8c0f734ed0ea9f2.
//
// Solidity: event InterestRateUpdateAnnounced(uint256 newRate, uint256 activeSince, bool pendingRateOverridden)
func (_Stabilization *StabilizationFilterer) FilterInterestRateUpdateAnnounced(opts *bind.FilterOpts) (*StabilizationInterestRateUpdateAnnouncedIterator, error) {

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "InterestRateUpdateAnnounced")
	if err != nil {
		return nil, err
	}
	return &StabilizationInterestRateUpdateAnnouncedIterator{contract: _Stabilization.contract, event: "InterestRateUpdateAnnounced", logs: logs, sub: sub}, nil
}

// WatchInterestRateUpdateAnnounced is a free log subscription operation binding the contract event 0xb12f349439574b70f65dab4d2f88d6c268a39280fd283047f8c0f734ed0ea9f2.
//
// Solidity: event InterestRateUpdateAnnounced(uint256 newRate, uint256 activeSince, bool pendingRateOverridden)
func (_Stabilization *StabilizationFilterer) WatchInterestRateUpdateAnnounced(opts *bind.WatchOpts, sink chan<- *StabilizationInterestRateUpdateAnnounced) (event.Subscription, error) {

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "InterestRateUpdateAnnounced")
	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(StabilizationInterestRateUpdateAnnounced)
				if err := _Stabilization.contract.UnpackLog(event, "InterestRateUpdateAnnounced", 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
}

// ParseInterestRateUpdateAnnounced is a log parse operation binding the contract event 0xb12f349439574b70f65dab4d2f88d6c268a39280fd283047f8c0f734ed0ea9f2.
//
// Solidity: event InterestRateUpdateAnnounced(uint256 newRate, uint256 activeSince, bool pendingRateOverridden)
func (_Stabilization *StabilizationFilterer) ParseInterestRateUpdateAnnounced(log types.Log) (*StabilizationInterestRateUpdateAnnounced, error) {
	event := new(StabilizationInterestRateUpdateAnnounced)
	if err := _Stabilization.contract.UnpackLog(event, "InterestRateUpdateAnnounced", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationLiquidateIterator is returned from FilterLiquidate and is used to iterate over the raw logs and unpacked data for Liquidate events raised by the Stabilization contract.
type StabilizationLiquidateIterator struct {
	Event *StabilizationLiquidate // 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 *StabilizationLiquidateIterator) 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(StabilizationLiquidate)
			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(StabilizationLiquidate)
		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 *StabilizationLiquidateIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationLiquidateIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationLiquidate represents a Liquidate event raised by the Stabilization contract.
type StabilizationLiquidate struct {
	Account    common.Address
	Liquidator common.Address
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterLiquidate is a free log retrieval operation binding the contract event 0xc3d81b2125598b9a2b024afe09e33981f0aa5b7bcbe3e30c4303a4dec209ddb4.
//
// Solidity: event Liquidate(address indexed account, address liquidator)
func (_Stabilization *StabilizationFilterer) FilterLiquidate(opts *bind.FilterOpts, account []common.Address) (*StabilizationLiquidateIterator, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "Liquidate", accountRule)
	if err != nil {
		return nil, err
	}
	return &StabilizationLiquidateIterator{contract: _Stabilization.contract, event: "Liquidate", logs: logs, sub: sub}, nil
}

// WatchLiquidate is a free log subscription operation binding the contract event 0xc3d81b2125598b9a2b024afe09e33981f0aa5b7bcbe3e30c4303a4dec209ddb4.
//
// Solidity: event Liquidate(address indexed account, address liquidator)
func (_Stabilization *StabilizationFilterer) WatchLiquidate(opts *bind.WatchOpts, sink chan<- *StabilizationLiquidate, account []common.Address) (event.Subscription, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "Liquidate", 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(StabilizationLiquidate)
				if err := _Stabilization.contract.UnpackLog(event, "Liquidate", 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
}

// ParseLiquidate is a log parse operation binding the contract event 0xc3d81b2125598b9a2b024afe09e33981f0aa5b7bcbe3e30c4303a4dec209ddb4.
//
// Solidity: event Liquidate(address indexed account, address liquidator)
func (_Stabilization *StabilizationFilterer) ParseLiquidate(log types.Log) (*StabilizationLiquidate, error) {
	event := new(StabilizationLiquidate)
	if err := _Stabilization.contract.UnpackLog(event, "Liquidate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationLiquidationRatioUpdateAnnouncedIterator is returned from FilterLiquidationRatioUpdateAnnounced and is used to iterate over the raw logs and unpacked data for LiquidationRatioUpdateAnnounced events raised by the Stabilization contract.
type StabilizationLiquidationRatioUpdateAnnouncedIterator struct {
	Event *StabilizationLiquidationRatioUpdateAnnounced // 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 *StabilizationLiquidationRatioUpdateAnnouncedIterator) 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(StabilizationLiquidationRatioUpdateAnnounced)
			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(StabilizationLiquidationRatioUpdateAnnounced)
		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 *StabilizationLiquidationRatioUpdateAnnouncedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationLiquidationRatioUpdateAnnouncedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationLiquidationRatioUpdateAnnounced represents a LiquidationRatioUpdateAnnounced event raised by the Stabilization contract.
type StabilizationLiquidationRatioUpdateAnnounced struct {
	NewRatio               *big.Int
	ActiveSince            *big.Int
	PendingRatioOverridden bool
	Raw                    types.Log // Blockchain specific contextual infos
}

// FilterLiquidationRatioUpdateAnnounced is a free log retrieval operation binding the contract event 0x19f747f98f8e30315324002333a1c5eaf5bafa2c4d0a90bc5f042634a2cbf622.
//
// Solidity: event LiquidationRatioUpdateAnnounced(uint256 newRatio, uint256 activeSince, bool pendingRatioOverridden)
func (_Stabilization *StabilizationFilterer) FilterLiquidationRatioUpdateAnnounced(opts *bind.FilterOpts) (*StabilizationLiquidationRatioUpdateAnnouncedIterator, error) {

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "LiquidationRatioUpdateAnnounced")
	if err != nil {
		return nil, err
	}
	return &StabilizationLiquidationRatioUpdateAnnouncedIterator{contract: _Stabilization.contract, event: "LiquidationRatioUpdateAnnounced", logs: logs, sub: sub}, nil
}

// WatchLiquidationRatioUpdateAnnounced is a free log subscription operation binding the contract event 0x19f747f98f8e30315324002333a1c5eaf5bafa2c4d0a90bc5f042634a2cbf622.
//
// Solidity: event LiquidationRatioUpdateAnnounced(uint256 newRatio, uint256 activeSince, bool pendingRatioOverridden)
func (_Stabilization *StabilizationFilterer) WatchLiquidationRatioUpdateAnnounced(opts *bind.WatchOpts, sink chan<- *StabilizationLiquidationRatioUpdateAnnounced) (event.Subscription, error) {

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "LiquidationRatioUpdateAnnounced")
	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(StabilizationLiquidationRatioUpdateAnnounced)
				if err := _Stabilization.contract.UnpackLog(event, "LiquidationRatioUpdateAnnounced", 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
}

// ParseLiquidationRatioUpdateAnnounced is a log parse operation binding the contract event 0x19f747f98f8e30315324002333a1c5eaf5bafa2c4d0a90bc5f042634a2cbf622.
//
// Solidity: event LiquidationRatioUpdateAnnounced(uint256 newRatio, uint256 activeSince, bool pendingRatioOverridden)
func (_Stabilization *StabilizationFilterer) ParseLiquidationRatioUpdateAnnounced(log types.Log) (*StabilizationLiquidationRatioUpdateAnnounced, error) {
	event := new(StabilizationLiquidationRatioUpdateAnnounced)
	if err := _Stabilization.contract.UnpackLog(event, "LiquidationRatioUpdateAnnounced", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationMinCollateralizationRatioUpdateAnnouncedIterator is returned from FilterMinCollateralizationRatioUpdateAnnounced and is used to iterate over the raw logs and unpacked data for MinCollateralizationRatioUpdateAnnounced events raised by the Stabilization contract.
type StabilizationMinCollateralizationRatioUpdateAnnouncedIterator struct {
	Event *StabilizationMinCollateralizationRatioUpdateAnnounced // 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 *StabilizationMinCollateralizationRatioUpdateAnnouncedIterator) 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(StabilizationMinCollateralizationRatioUpdateAnnounced)
			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(StabilizationMinCollateralizationRatioUpdateAnnounced)
		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 *StabilizationMinCollateralizationRatioUpdateAnnouncedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationMinCollateralizationRatioUpdateAnnouncedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationMinCollateralizationRatioUpdateAnnounced represents a MinCollateralizationRatioUpdateAnnounced event raised by the Stabilization contract.
type StabilizationMinCollateralizationRatioUpdateAnnounced struct {
	NewRatio               *big.Int
	ActiveSince            *big.Int
	PendingRatioOverridden bool
	Raw                    types.Log // Blockchain specific contextual infos
}

// FilterMinCollateralizationRatioUpdateAnnounced is a free log retrieval operation binding the contract event 0x4f9980fcac197f6e3e043b71166dc66da4fb578adab225ce0ab6d02cc0bcaa7a.
//
// Solidity: event MinCollateralizationRatioUpdateAnnounced(uint256 newRatio, uint256 activeSince, bool pendingRatioOverridden)
func (_Stabilization *StabilizationFilterer) FilterMinCollateralizationRatioUpdateAnnounced(opts *bind.FilterOpts) (*StabilizationMinCollateralizationRatioUpdateAnnouncedIterator, error) {

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "MinCollateralizationRatioUpdateAnnounced")
	if err != nil {
		return nil, err
	}
	return &StabilizationMinCollateralizationRatioUpdateAnnouncedIterator{contract: _Stabilization.contract, event: "MinCollateralizationRatioUpdateAnnounced", logs: logs, sub: sub}, nil
}

// WatchMinCollateralizationRatioUpdateAnnounced is a free log subscription operation binding the contract event 0x4f9980fcac197f6e3e043b71166dc66da4fb578adab225ce0ab6d02cc0bcaa7a.
//
// Solidity: event MinCollateralizationRatioUpdateAnnounced(uint256 newRatio, uint256 activeSince, bool pendingRatioOverridden)
func (_Stabilization *StabilizationFilterer) WatchMinCollateralizationRatioUpdateAnnounced(opts *bind.WatchOpts, sink chan<- *StabilizationMinCollateralizationRatioUpdateAnnounced) (event.Subscription, error) {

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "MinCollateralizationRatioUpdateAnnounced")
	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(StabilizationMinCollateralizationRatioUpdateAnnounced)
				if err := _Stabilization.contract.UnpackLog(event, "MinCollateralizationRatioUpdateAnnounced", 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
}

// ParseMinCollateralizationRatioUpdateAnnounced is a log parse operation binding the contract event 0x4f9980fcac197f6e3e043b71166dc66da4fb578adab225ce0ab6d02cc0bcaa7a.
//
// Solidity: event MinCollateralizationRatioUpdateAnnounced(uint256 newRatio, uint256 activeSince, bool pendingRatioOverridden)
func (_Stabilization *StabilizationFilterer) ParseMinCollateralizationRatioUpdateAnnounced(log types.Log) (*StabilizationMinCollateralizationRatioUpdateAnnounced, error) {
	event := new(StabilizationMinCollateralizationRatioUpdateAnnounced)
	if err := _Stabilization.contract.UnpackLog(event, "MinCollateralizationRatioUpdateAnnounced", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationRepayIterator is returned from FilterRepay and is used to iterate over the raw logs and unpacked data for Repay events raised by the Stabilization contract.
type StabilizationRepayIterator struct {
	Event *StabilizationRepay // 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 *StabilizationRepayIterator) 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(StabilizationRepay)
			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(StabilizationRepay)
		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 *StabilizationRepayIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationRepayIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationRepay represents a Repay event raised by the Stabilization contract.
type StabilizationRepay struct {
	Account common.Address
	Amount  *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterRepay is a free log retrieval operation binding the contract event 0x5c16de4f8b59bd9caf0f49a545f25819a895ed223294290b408242e72a594231.
//
// Solidity: event Repay(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) FilterRepay(opts *bind.FilterOpts, account []common.Address) (*StabilizationRepayIterator, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "Repay", accountRule)
	if err != nil {
		return nil, err
	}
	return &StabilizationRepayIterator{contract: _Stabilization.contract, event: "Repay", logs: logs, sub: sub}, nil
}

// WatchRepay is a free log subscription operation binding the contract event 0x5c16de4f8b59bd9caf0f49a545f25819a895ed223294290b408242e72a594231.
//
// Solidity: event Repay(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) WatchRepay(opts *bind.WatchOpts, sink chan<- *StabilizationRepay, account []common.Address) (event.Subscription, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "Repay", 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(StabilizationRepay)
				if err := _Stabilization.contract.UnpackLog(event, "Repay", 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
}

// ParseRepay is a log parse operation binding the contract event 0x5c16de4f8b59bd9caf0f49a545f25819a895ed223294290b408242e72a594231.
//
// Solidity: event Repay(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) ParseRepay(log types.Log) (*StabilizationRepay, error) {
	event := new(StabilizationRepay)
	if err := _Stabilization.contract.UnpackLog(event, "Repay", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the Stabilization contract.
type StabilizationWithdrawIterator struct {
	Event *StabilizationWithdraw // 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 *StabilizationWithdrawIterator) 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(StabilizationWithdraw)
			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(StabilizationWithdraw)
		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 *StabilizationWithdrawIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *StabilizationWithdrawIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// StabilizationWithdraw represents a Withdraw event raised by the Stabilization contract.
type StabilizationWithdraw struct {
	Account common.Address
	Amount  *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterWithdraw is a free log retrieval operation binding the contract event 0x884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364.
//
// Solidity: event Withdraw(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) FilterWithdraw(opts *bind.FilterOpts, account []common.Address) (*StabilizationWithdrawIterator, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _Stabilization.contract.FilterLogs(opts, "Withdraw", accountRule)
	if err != nil {
		return nil, err
	}
	return &StabilizationWithdrawIterator{contract: _Stabilization.contract, event: "Withdraw", logs: logs, sub: sub}, nil
}

// WatchWithdraw is a free log subscription operation binding the contract event 0x884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364.
//
// Solidity: event Withdraw(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) WatchWithdraw(opts *bind.WatchOpts, sink chan<- *StabilizationWithdraw, account []common.Address) (event.Subscription, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _Stabilization.contract.WatchLogs(opts, "Withdraw", 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(StabilizationWithdraw)
				if err := _Stabilization.contract.UnpackLog(event, "Withdraw", 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
}

// ParseWithdraw is a log parse operation binding the contract event 0x884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364.
//
// Solidity: event Withdraw(address indexed account, uint256 amount)
func (_Stabilization *StabilizationFilterer) ParseWithdraw(log types.Log) (*StabilizationWithdraw, error) {
	event := new(StabilizationWithdraw)
	if err := _Stabilization.contract.UnpackLog(event, "Withdraw", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// StabilizationMathMetaData contains all meta data concerning the StabilizationMath contract.
var StabilizationMathMetaData = &bind.MetaData{
	ABI: "[]",
	Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206051a26e613e458b51302c20463e937ec7c5bc13ac0b6eb3221fc48a7d4e8c1a64736f6c634300081e0033",
}

// StabilizationMathABI is the input ABI used to generate the binding from.
// Deprecated: Use StabilizationMathMetaData.ABI instead.
var StabilizationMathABI = StabilizationMathMetaData.ABI

// StabilizationMathBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use StabilizationMathMetaData.Bin instead.
var StabilizationMathBin = StabilizationMathMetaData.Bin

// DeployStabilizationMath deploys a new Ethereum contract, binding an instance of StabilizationMath to it.
func DeployStabilizationMath(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *StabilizationMath, error) {
	parsed, err := StabilizationMathMetaData.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(StabilizationMathBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &StabilizationMath{StabilizationMathCaller: StabilizationMathCaller{contract: contract}, StabilizationMathTransactor: StabilizationMathTransactor{contract: contract}, StabilizationMathFilterer: StabilizationMathFilterer{contract: contract}}, nil
}

// StabilizationMath is an auto generated Go binding around an Ethereum contract.
type StabilizationMath struct {
	StabilizationMathCaller     // Read-only binding to the contract
	StabilizationMathTransactor // Write-only binding to the contract
	StabilizationMathFilterer   // Log filterer for contract events
}

// StabilizationMathCaller is an auto generated read-only Go binding around an Ethereum contract.
type StabilizationMathCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// StabilizationMathTransactor is an auto generated write-only Go binding around an Ethereum contract.
type StabilizationMathTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// StabilizationMathFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type StabilizationMathFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// StabilizationMathSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type StabilizationMathSession struct {
	Contract     *StabilizationMath // 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
}

// StabilizationMathCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type StabilizationMathCallerSession struct {
	Contract *StabilizationMathCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts            // Call options to use throughout this session
}

// StabilizationMathTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type StabilizationMathTransactorSession struct {
	Contract     *StabilizationMathTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts            // Transaction auth options to use throughout this session
}

// StabilizationMathRaw is an auto generated low-level Go binding around an Ethereum contract.
type StabilizationMathRaw struct {
	Contract *StabilizationMath // Generic contract binding to access the raw methods on
}

// StabilizationMathCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type StabilizationMathCallerRaw struct {
	Contract *StabilizationMathCaller // Generic read-only contract binding to access the raw methods on
}

// StabilizationMathTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type StabilizationMathTransactorRaw struct {
	Contract *StabilizationMathTransactor // Generic write-only contract binding to access the raw methods on
}

// NewStabilizationMath creates a new instance of StabilizationMath, bound to a specific deployed contract.
func NewStabilizationMath(address common.Address, backend bind.ContractBackend) (*StabilizationMath, error) {
	contract, err := bindStabilizationMath(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &StabilizationMath{StabilizationMathCaller: StabilizationMathCaller{contract: contract}, StabilizationMathTransactor: StabilizationMathTransactor{contract: contract}, StabilizationMathFilterer: StabilizationMathFilterer{contract: contract}}, nil
}

// NewStabilizationMathCaller creates a new read-only instance of StabilizationMath, bound to a specific deployed contract.
func NewStabilizationMathCaller(address common.Address, caller bind.ContractCaller) (*StabilizationMathCaller, error) {
	contract, err := bindStabilizationMath(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &StabilizationMathCaller{contract: contract}, nil
}

// NewStabilizationMathTransactor creates a new write-only instance of StabilizationMath, bound to a specific deployed contract.
func NewStabilizationMathTransactor(address common.Address, transactor bind.ContractTransactor) (*StabilizationMathTransactor, error) {
	contract, err := bindStabilizationMath(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &StabilizationMathTransactor{contract: contract}, nil
}

// NewStabilizationMathFilterer creates a new log filterer instance of StabilizationMath, bound to a specific deployed contract.
func NewStabilizationMathFilterer(address common.Address, filterer bind.ContractFilterer) (*StabilizationMathFilterer, error) {
	contract, err := bindStabilizationMath(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &StabilizationMathFilterer{contract: contract}, nil
}

// bindStabilizationMath binds a generic wrapper to an already deployed contract.
func bindStabilizationMath(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(StabilizationMathABI))
	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 (_StabilizationMath *StabilizationMathRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _StabilizationMath.Contract.StabilizationMathCaller.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 (_StabilizationMath *StabilizationMathRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _StabilizationMath.Contract.StabilizationMathTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_StabilizationMath *StabilizationMathRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _StabilizationMath.Contract.StabilizationMathTransactor.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 (_StabilizationMath *StabilizationMathCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _StabilizationMath.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 (_StabilizationMath *StabilizationMathTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _StabilizationMath.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_StabilizationMath *StabilizationMathTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _StabilizationMath.Contract.contract.Transact(opts, method, params...)
}

// StabilizationMathTestMetaData contains all meta data concerning the StabilizationMathTest contract.
var StabilizationMathTestMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"InvalidParameter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv18_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"PRBMath_MulDiv_Overflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"UD60x18\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"PRBMath_UD60x18_Sqrt_Overflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NTN_SYMBOL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SCALE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SCALE_FACTOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SECONDS_IN_YEAR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumOffer\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialOffer\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"linearDecreaseAuctionAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumOffer\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumOffer\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"sqrtIncreaseAuctionAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"1f3a42a5": "NTN_SYMBOL()",
		"eced5526": "SCALE()",
		"ce4b5bbe": "SCALE_FACTOR()",
		"5dcc9391": "SECONDS_IN_YEAR()",
		"e11e00c1": "linearDecreaseAuctionAmount(uint256,uint256,uint256,uint256,uint256)",
		"ddf5b996": "sqrtIncreaseAuctionAmount(uint256,uint256,uint256,uint256,uint256)",
	},
	Bin: "0x6080604052348015600f57600080fd5b506108ae8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631f3a42a5146100675780635dcc939114610099578063ce4b5bbe146100ad578063ddf5b996146100b5578063e11e00c1146100c8578063eced5526146100db575b600080fd5b6040805180820182526007815266272a2716a0aa2760c91b602082015290516100909190610630565b60405180910390f35b6301e133805b604051908152602001610090565b61009f6100e2565b61009f6100c336600461067e565b6100f5565b61009f6100d636600461067e565b610110565b601261009f565b60006100f06012600a6107b6565b905090565b6000610104868686868661011f565b90505b95945050505050565b60006101048686868686610216565b60008585101561014b576040516305519d6f60e51b8152600401610142906107c2565b60405180910390fd5b60006101578787610803565b90508281106101695784915050610107565b8385600061018961017c6012600a6107b6565b6101869086610816565b90565b905060006101a661019c6012600a6107b6565b6101869089610816565b905060006101bc6101b7848461028c565b6102ab565b905060006101cf6101866012600a6107b6565b905060006102046101fd6101f66101e68587610301565b6101f08b87610301565b90610310565b849061031f565b879061028c565b9e9d5050505050505050505050505050565b600085851015610239576040516305519d6f60e51b8152600401610142906107c2565b60006102458787610803565b90508281106102575784915050610107565b82816102638787610803565b61026d9190610816565b6102779190610843565b6102819085610803565b979650505050505050565b60006102a461018684670de0b6b3a76400008561032e565b9392505050565b6000817812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218111156102eb5760405163edc236ad60e01b815260048101849052602401610142565b6102a4610186670de0b6b3a76400008302610401565b60006102a46101868385610803565b60006102a46101868484610579565b60006102a46101868385610865565b60008080600019858709858702925082811083820303915050806000036103685783828161035e5761035e61082d565b04925050506102a4565b83811061039957604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610142565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008160000361041357506000919050565b50600181600160801b811061042d5760409190911b9060801c5b6801000000000000000081106104485760209190911b9060401c5b640100000000811061045f5760109190911b9060201c5b6201000081106104745760089190911b9060101c5b61010081106104885760049190911b9060081c5b6010811061049b5760029190911b9060041c5b600481106104ab57600182901b91505b60018284816104bc576104bc61082d565b048301901c915060018284816104d4576104d461082d565b048301901c915060018284816104ec576104ec61082d565b048301901c915060018284816105045761050461082d565b048301901c9150600182848161051c5761051c61082d565b048301901c915060018284816105345761053461082d565b048301901c9150600182848161054c5761054c61082d565b048301901c915060008284816105645761056461082d565b049050808310610572578092505b5050919050565b60008080600019848609848602925082811083820303915050806000036105ad5750670de0b6b3a76400009004905061062a565b670de0b6b3a764000081106105df57604051635173648d60e01b81526004810186905260248101859052604401610142565b6000670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac10669029150505b92915050565b602081526000825180602084015260005b8181101561065e5760208186018101516040868401015201610641565b506000604082850101526040601f19601f83011684010191505092915050565b600080600080600060a0868803121561069657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b634e487b7160e01b600052601160045260246000fd5b6001815b600184111561070a578085048111156106ee576106ee6106b9565b60018416156106fc57908102905b60019390931c9280026106d3565b935093915050565b6000826107215750600161062a565b8161072e5750600061062a565b8160018114610744576002811461074e5761076a565b600191505061062a565b60ff84111561075f5761075f6106b9565b50506001821b61062a565b5060208310610133831016604e8410600b841016171561078d575081810a61062a565b61079a60001984846106cf565b80600019048211156107ae576107ae6106b9565b029392505050565b60006102a48383610712565b60208082526021908201527f63757272656e7454696d657374616d70203e20737461727454696d657374616d6040820152600760fc1b606082015260800190565b8181038181111561062a5761062a6106b9565b808202811582820484141761062a5761062a6106b9565b634e487b7160e01b600052601260045260246000fd5b60008261086057634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561062a5761062a6106b956fea2646970667358221220267097da92944c231478912640844ade6e0b0d22d31aa2a2319c8f44037bad4464736f6c634300081e0033",
}

// StabilizationMathTestABI is the input ABI used to generate the binding from.
// Deprecated: Use StabilizationMathTestMetaData.ABI instead.
var StabilizationMathTestABI = StabilizationMathTestMetaData.ABI

// Deprecated: Use StabilizationMathTestMetaData.Sigs instead.
// StabilizationMathTestFuncSigs maps the 4-byte function signature to its string representation.
var StabilizationMathTestFuncSigs = StabilizationMathTestMetaData.Sigs

// StabilizationMathTestBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use StabilizationMathTestMetaData.Bin instead.
var StabilizationMathTestBin = StabilizationMathTestMetaData.Bin

// DeployStabilizationMathTest deploys a new Ethereum contract, binding an instance of StabilizationMathTest to it.
func DeployStabilizationMathTest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *StabilizationMathTest, error) {
	parsed, err := StabilizationMathTestMetaData.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(StabilizationMathTestBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &StabilizationMathTest{StabilizationMathTestCaller: StabilizationMathTestCaller{contract: contract}, StabilizationMathTestTransactor: StabilizationMathTestTransactor{contract: contract}, StabilizationMathTestFilterer: StabilizationMathTestFilterer{contract: contract}}, nil
}

// StabilizationMathTest is an auto generated Go binding around an Ethereum contract.
type StabilizationMathTest struct {
	StabilizationMathTestCaller     // Read-only binding to the contract
	StabilizationMathTestTransactor // Write-only binding to the contract
	StabilizationMathTestFilterer   // Log filterer for contract events
}

// StabilizationMathTestCaller is an auto generated read-only Go binding around an Ethereum contract.
type StabilizationMathTestCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// StabilizationMathTestTransactor is an auto generated write-only Go binding around an Ethereum contract.
type StabilizationMathTestTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// StabilizationMathTestFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type StabilizationMathTestFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// StabilizationMathTestSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type StabilizationMathTestSession struct {
	Contract     *StabilizationMathTest // 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
}

// StabilizationMathTestCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type StabilizationMathTestCallerSession struct {
	Contract *StabilizationMathTestCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts                // Call options to use throughout this session
}

// StabilizationMathTestTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type StabilizationMathTestTransactorSession struct {
	Contract     *StabilizationMathTestTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts                // Transaction auth options to use throughout this session
}

// StabilizationMathTestRaw is an auto generated low-level Go binding around an Ethereum contract.
type StabilizationMathTestRaw struct {
	Contract *StabilizationMathTest // Generic contract binding to access the raw methods on
}

// StabilizationMathTestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type StabilizationMathTestCallerRaw struct {
	Contract *StabilizationMathTestCaller // Generic read-only contract binding to access the raw methods on
}

// StabilizationMathTestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type StabilizationMathTestTransactorRaw struct {
	Contract *StabilizationMathTestTransactor // Generic write-only contract binding to access the raw methods on
}

// NewStabilizationMathTest creates a new instance of StabilizationMathTest, bound to a specific deployed contract.
func NewStabilizationMathTest(address common.Address, backend bind.ContractBackend) (*StabilizationMathTest, error) {
	contract, err := bindStabilizationMathTest(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &StabilizationMathTest{StabilizationMathTestCaller: StabilizationMathTestCaller{contract: contract}, StabilizationMathTestTransactor: StabilizationMathTestTransactor{contract: contract}, StabilizationMathTestFilterer: StabilizationMathTestFilterer{contract: contract}}, nil
}

// NewStabilizationMathTestCaller creates a new read-only instance of StabilizationMathTest, bound to a specific deployed contract.
func NewStabilizationMathTestCaller(address common.Address, caller bind.ContractCaller) (*StabilizationMathTestCaller, error) {
	contract, err := bindStabilizationMathTest(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &StabilizationMathTestCaller{contract: contract}, nil
}

// NewStabilizationMathTestTransactor creates a new write-only instance of StabilizationMathTest, bound to a specific deployed contract.
func NewStabilizationMathTestTransactor(address common.Address, transactor bind.ContractTransactor) (*StabilizationMathTestTransactor, error) {
	contract, err := bindStabilizationMathTest(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &StabilizationMathTestTransactor{contract: contract}, nil
}

// NewStabilizationMathTestFilterer creates a new log filterer instance of StabilizationMathTest, bound to a specific deployed contract.
func NewStabilizationMathTestFilterer(address common.Address, filterer bind.ContractFilterer) (*StabilizationMathTestFilterer, error) {
	contract, err := bindStabilizationMathTest(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &StabilizationMathTestFilterer{contract: contract}, nil
}

// bindStabilizationMathTest binds a generic wrapper to an already deployed contract.
func bindStabilizationMathTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(StabilizationMathTestABI))
	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 (_StabilizationMathTest *StabilizationMathTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _StabilizationMathTest.Contract.StabilizationMathTestCaller.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 (_StabilizationMathTest *StabilizationMathTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _StabilizationMathTest.Contract.StabilizationMathTestTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_StabilizationMathTest *StabilizationMathTestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _StabilizationMathTest.Contract.StabilizationMathTestTransactor.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 (_StabilizationMathTest *StabilizationMathTestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _StabilizationMathTest.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 (_StabilizationMathTest *StabilizationMathTestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _StabilizationMathTest.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_StabilizationMathTest *StabilizationMathTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _StabilizationMathTest.Contract.contract.Transact(opts, method, params...)
}

// NTNSYMBOL is a free data retrieval call binding the contract method 0x1f3a42a5.
//
// Solidity: function NTN_SYMBOL() pure returns(string)
func (_StabilizationMathTest *StabilizationMathTestCaller) NTNSYMBOL(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _StabilizationMathTest.contract.Call(opts, &out, "NTN_SYMBOL")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// NTNSYMBOL is a free data retrieval call binding the contract method 0x1f3a42a5.
//
// Solidity: function NTN_SYMBOL() pure returns(string)
func (_StabilizationMathTest *StabilizationMathTestSession) NTNSYMBOL() (string, error) {
	return _StabilizationMathTest.Contract.NTNSYMBOL(&_StabilizationMathTest.CallOpts)
}

// NTNSYMBOL is a free data retrieval call binding the contract method 0x1f3a42a5.
//
// Solidity: function NTN_SYMBOL() pure returns(string)
func (_StabilizationMathTest *StabilizationMathTestCallerSession) NTNSYMBOL() (string, error) {
	return _StabilizationMathTest.Contract.NTNSYMBOL(&_StabilizationMathTest.CallOpts)
}

// SCALE is a free data retrieval call binding the contract method 0xeced5526.
//
// Solidity: function SCALE() pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestCaller) SCALE(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _StabilizationMathTest.contract.Call(opts, &out, "SCALE")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// SCALE is a free data retrieval call binding the contract method 0xeced5526.
//
// Solidity: function SCALE() pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestSession) SCALE() (*big.Int, error) {
	return _StabilizationMathTest.Contract.SCALE(&_StabilizationMathTest.CallOpts)
}

// SCALE is a free data retrieval call binding the contract method 0xeced5526.
//
// Solidity: function SCALE() pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestCallerSession) SCALE() (*big.Int, error) {
	return _StabilizationMathTest.Contract.SCALE(&_StabilizationMathTest.CallOpts)
}

// SCALEFACTOR is a free data retrieval call binding the contract method 0xce4b5bbe.
//
// Solidity: function SCALE_FACTOR() pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestCaller) SCALEFACTOR(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _StabilizationMathTest.contract.Call(opts, &out, "SCALE_FACTOR")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// SCALEFACTOR is a free data retrieval call binding the contract method 0xce4b5bbe.
//
// Solidity: function SCALE_FACTOR() pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestSession) SCALEFACTOR() (*big.Int, error) {
	return _StabilizationMathTest.Contract.SCALEFACTOR(&_StabilizationMathTest.CallOpts)
}

// SCALEFACTOR is a free data retrieval call binding the contract method 0xce4b5bbe.
//
// Solidity: function SCALE_FACTOR() pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestCallerSession) SCALEFACTOR() (*big.Int, error) {
	return _StabilizationMathTest.Contract.SCALEFACTOR(&_StabilizationMathTest.CallOpts)
}

// SECONDSINYEAR is a free data retrieval call binding the contract method 0x5dcc9391.
//
// Solidity: function SECONDS_IN_YEAR() pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestCaller) SECONDSINYEAR(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _StabilizationMathTest.contract.Call(opts, &out, "SECONDS_IN_YEAR")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// SECONDSINYEAR is a free data retrieval call binding the contract method 0x5dcc9391.
//
// Solidity: function SECONDS_IN_YEAR() pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestSession) SECONDSINYEAR() (*big.Int, error) {
	return _StabilizationMathTest.Contract.SECONDSINYEAR(&_StabilizationMathTest.CallOpts)
}

// SECONDSINYEAR is a free data retrieval call binding the contract method 0x5dcc9391.
//
// Solidity: function SECONDS_IN_YEAR() pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestCallerSession) SECONDSINYEAR() (*big.Int, error) {
	return _StabilizationMathTest.Contract.SECONDSINYEAR(&_StabilizationMathTest.CallOpts)
}

// LinearDecreaseAuctionAmount is a free data retrieval call binding the contract method 0xe11e00c1.
//
// Solidity: function linearDecreaseAuctionAmount(uint256 startTimestamp, uint256 currentTimestamp, uint256 minimumOffer, uint256 initialOffer, uint256 duration) pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestCaller) LinearDecreaseAuctionAmount(opts *bind.CallOpts, startTimestamp *big.Int, currentTimestamp *big.Int, minimumOffer *big.Int, initialOffer *big.Int, duration *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _StabilizationMathTest.contract.Call(opts, &out, "linearDecreaseAuctionAmount", startTimestamp, currentTimestamp, minimumOffer, initialOffer, duration)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// LinearDecreaseAuctionAmount is a free data retrieval call binding the contract method 0xe11e00c1.
//
// Solidity: function linearDecreaseAuctionAmount(uint256 startTimestamp, uint256 currentTimestamp, uint256 minimumOffer, uint256 initialOffer, uint256 duration) pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestSession) LinearDecreaseAuctionAmount(startTimestamp *big.Int, currentTimestamp *big.Int, minimumOffer *big.Int, initialOffer *big.Int, duration *big.Int) (*big.Int, error) {
	return _StabilizationMathTest.Contract.LinearDecreaseAuctionAmount(&_StabilizationMathTest.CallOpts, startTimestamp, currentTimestamp, minimumOffer, initialOffer, duration)
}

// LinearDecreaseAuctionAmount is a free data retrieval call binding the contract method 0xe11e00c1.
//
// Solidity: function linearDecreaseAuctionAmount(uint256 startTimestamp, uint256 currentTimestamp, uint256 minimumOffer, uint256 initialOffer, uint256 duration) pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestCallerSession) LinearDecreaseAuctionAmount(startTimestamp *big.Int, currentTimestamp *big.Int, minimumOffer *big.Int, initialOffer *big.Int, duration *big.Int) (*big.Int, error) {
	return _StabilizationMathTest.Contract.LinearDecreaseAuctionAmount(&_StabilizationMathTest.CallOpts, startTimestamp, currentTimestamp, minimumOffer, initialOffer, duration)
}

// SqrtIncreaseAuctionAmount is a free data retrieval call binding the contract method 0xddf5b996.
//
// Solidity: function sqrtIncreaseAuctionAmount(uint256 startTimestamp, uint256 currentTimestamp, uint256 maximumOffer, uint256 minimumOffer, uint256 duration) pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestCaller) SqrtIncreaseAuctionAmount(opts *bind.CallOpts, startTimestamp *big.Int, currentTimestamp *big.Int, maximumOffer *big.Int, minimumOffer *big.Int, duration *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _StabilizationMathTest.contract.Call(opts, &out, "sqrtIncreaseAuctionAmount", startTimestamp, currentTimestamp, maximumOffer, minimumOffer, duration)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// SqrtIncreaseAuctionAmount is a free data retrieval call binding the contract method 0xddf5b996.
//
// Solidity: function sqrtIncreaseAuctionAmount(uint256 startTimestamp, uint256 currentTimestamp, uint256 maximumOffer, uint256 minimumOffer, uint256 duration) pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestSession) SqrtIncreaseAuctionAmount(startTimestamp *big.Int, currentTimestamp *big.Int, maximumOffer *big.Int, minimumOffer *big.Int, duration *big.Int) (*big.Int, error) {
	return _StabilizationMathTest.Contract.SqrtIncreaseAuctionAmount(&_StabilizationMathTest.CallOpts, startTimestamp, currentTimestamp, maximumOffer, minimumOffer, duration)
}

// SqrtIncreaseAuctionAmount is a free data retrieval call binding the contract method 0xddf5b996.
//
// Solidity: function sqrtIncreaseAuctionAmount(uint256 startTimestamp, uint256 currentTimestamp, uint256 maximumOffer, uint256 minimumOffer, uint256 duration) pure returns(uint256)
func (_StabilizationMathTest *StabilizationMathTestCallerSession) SqrtIncreaseAuctionAmount(startTimestamp *big.Int, currentTimestamp *big.Int, maximumOffer *big.Int, minimumOffer *big.Int, duration *big.Int) (*big.Int, error) {
	return _StabilizationMathTest.Contract.SqrtIncreaseAuctionAmount(&_StabilizationMathTest.CallOpts, startTimestamp, currentTimestamp, maximumOffer, minimumOffer, duration)
}

// SupplyControlMetaData contains all meta data concerning the SupplyControl contract.
var SupplyControlMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stabilizer_\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValue\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"availableSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStabilizer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"stabilizer_\",\"type\":\"address\"}],\"name\":\"setStabilizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"7ecc2b56": "availableSupply()",
		"44df8e70": "burn()",
		"80af1799": "getStabilizer()",
		"c4e41b22": "getTotalSupply()",
		"40c10f19": "mint(address,uint256)",
		"b3ab15fb": "setOperator(address)",
		"db7f521a": "setStabilizer(address)",
	},
	Bin: "0x60806040526040516106f53803806106f583398101604081905260209160a0565b34600003604057604051637c946ed760e01b815260040160405180910390fd5b600380546001600160a01b039485166001600160a01b0319918216179091556004805493851693821693909317909255600180549190931691161790553460025560dc565b80516001600160a01b0381168114609b57600080fd5b919050565b60008060006060848603121560b457600080fd5b60bb846085565b925060c7602085016085565b915060d3604085016085565b90509250925092565b61060a806100eb6000396000f3fe6080604052600436106100705760003560e01c806380af17991161004e57806380af1799146100c7578063b3ab15fb146100ef578063c4e41b221461010f578063db7f521a1461012457600080fd5b806340c10f191461007557806344df8e70146100975780637ecc2b561461009f575b600080fd5b34801561008157600080fd5b50610095610090366004610588565b610144565b005b610095610267565b3480156100ab57600080fd5b506100b46102f8565b6040519081526020015b60405180910390f35b3480156100d357600080fd5b506001546040516001600160a01b0390911681526020016100be565b3480156100fb57600080fd5b5061009561010a3660046105b2565b610355565b34801561011b57600080fd5b506100b461040c565b34801561013057600080fd5b5061009561013f3660046105b2565b610466565b6001546001600160a01b0316331461016e576040516282b42960e81b815260040160405180910390fd5b61017661051f565b6001600160a01b038216158061019957506001546001600160a01b038381169116145b156101b757604051634e46966960e11b815260040160405180910390fd5b8015806101c357504781115b156101e15760405163162908e360e11b815260040160405180910390fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610217573d6000803e3d6000fd5b50604080516001600160a01b0384168152602081018390527f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885910160405180910390a161026360008055565b5050565b3460000361028857604051637c946ed760e01b815260040160405180910390fd5b6001546001600160a01b031633146102b2576040516282b42960e81b815260040160405180910390fd5b6102ba61051f565b6040513481527fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb9060200160405180910390a16102f660008055565b565b600080546001036103505760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e637920646574656374656400000060448201526064015b60405180910390fd5b504790565b6003546001600160a01b0316331461037f576040516282b42960e81b815260040160405180910390fd5b6004546040805160808082526008908201526737b832b930ba37b960c11b60a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000805460010361045f5760405162461bcd60e51b815260206004820152601d60248201527f72656164206f6e6c79207265656e7472616e63792064657465637465640000006044820152606401610347565b5060025490565b6003546001600160a01b03163314610490576040516282b42960e81b815260040160405180910390fd5b600154604080516080808252600a908201526939ba30b134b634bd32b960b11b60a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600054156105655760405162461bcd60e51b81526020600482015260136024820152721c99595b9d1c985b98de4819195d1958dd1959606a1b6044820152606401610347565b6001600055565b80356001600160a01b038116811461058357600080fd5b919050565b6000806040838503121561059b57600080fd5b6105a48361056c565b946020939093013593505050565b6000602082840312156105c457600080fd5b6105cd8261056c565b939250505056fea2646970667358221220f1245f7c146bd4b44a522428eb9a79d172488ff66e50f1a1bf36980c63b3d83c64736f6c634300081e0033",
}

// SupplyControlABI is the input ABI used to generate the binding from.
// Deprecated: Use SupplyControlMetaData.ABI instead.
var SupplyControlABI = SupplyControlMetaData.ABI

// Deprecated: Use SupplyControlMetaData.Sigs instead.
// SupplyControlFuncSigs maps the 4-byte function signature to its string representation.
var SupplyControlFuncSigs = SupplyControlMetaData.Sigs

// SupplyControlBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use SupplyControlMetaData.Bin instead.
var SupplyControlBin = SupplyControlMetaData.Bin

// DeploySupplyControl deploys a new Ethereum contract, binding an instance of SupplyControl to it.
func DeploySupplyControl(auth *bind.TransactOpts, backend bind.ContractBackend, autonity common.Address, operator common.Address, stabilizer_ common.Address) (common.Address, *types.Transaction, *SupplyControl, error) {
	parsed, err := SupplyControlMetaData.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(SupplyControlBin), backend, autonity, operator, stabilizer_)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &SupplyControl{SupplyControlCaller: SupplyControlCaller{contract: contract}, SupplyControlTransactor: SupplyControlTransactor{contract: contract}, SupplyControlFilterer: SupplyControlFilterer{contract: contract}}, nil
}

// SupplyControl is an auto generated Go binding around an Ethereum contract.
type SupplyControl struct {
	SupplyControlCaller     // Read-only binding to the contract
	SupplyControlTransactor // Write-only binding to the contract
	SupplyControlFilterer   // Log filterer for contract events
}

// SupplyControlCaller is an auto generated read-only Go binding around an Ethereum contract.
type SupplyControlCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// SupplyControlTransactor is an auto generated write-only Go binding around an Ethereum contract.
type SupplyControlTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// SupplyControlFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type SupplyControlFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// SupplyControlSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type SupplyControlSession struct {
	Contract     *SupplyControl    // 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
}

// SupplyControlCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type SupplyControlCallerSession struct {
	Contract *SupplyControlCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts        // Call options to use throughout this session
}

// SupplyControlTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type SupplyControlTransactorSession struct {
	Contract     *SupplyControlTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts        // Transaction auth options to use throughout this session
}

// SupplyControlRaw is an auto generated low-level Go binding around an Ethereum contract.
type SupplyControlRaw struct {
	Contract *SupplyControl // Generic contract binding to access the raw methods on
}

// SupplyControlCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type SupplyControlCallerRaw struct {
	Contract *SupplyControlCaller // Generic read-only contract binding to access the raw methods on
}

// SupplyControlTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type SupplyControlTransactorRaw struct {
	Contract *SupplyControlTransactor // Generic write-only contract binding to access the raw methods on
}

// NewSupplyControl creates a new instance of SupplyControl, bound to a specific deployed contract.
func NewSupplyControl(address common.Address, backend bind.ContractBackend) (*SupplyControl, error) {
	contract, err := bindSupplyControl(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &SupplyControl{SupplyControlCaller: SupplyControlCaller{contract: contract}, SupplyControlTransactor: SupplyControlTransactor{contract: contract}, SupplyControlFilterer: SupplyControlFilterer{contract: contract}}, nil
}

// NewSupplyControlCaller creates a new read-only instance of SupplyControl, bound to a specific deployed contract.
func NewSupplyControlCaller(address common.Address, caller bind.ContractCaller) (*SupplyControlCaller, error) {
	contract, err := bindSupplyControl(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &SupplyControlCaller{contract: contract}, nil
}

// NewSupplyControlTransactor creates a new write-only instance of SupplyControl, bound to a specific deployed contract.
func NewSupplyControlTransactor(address common.Address, transactor bind.ContractTransactor) (*SupplyControlTransactor, error) {
	contract, err := bindSupplyControl(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &SupplyControlTransactor{contract: contract}, nil
}

// NewSupplyControlFilterer creates a new log filterer instance of SupplyControl, bound to a specific deployed contract.
func NewSupplyControlFilterer(address common.Address, filterer bind.ContractFilterer) (*SupplyControlFilterer, error) {
	contract, err := bindSupplyControl(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &SupplyControlFilterer{contract: contract}, nil
}

// bindSupplyControl binds a generic wrapper to an already deployed contract.
func bindSupplyControl(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(SupplyControlABI))
	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 (_SupplyControl *SupplyControlRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _SupplyControl.Contract.SupplyControlCaller.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 (_SupplyControl *SupplyControlRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _SupplyControl.Contract.SupplyControlTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_SupplyControl *SupplyControlRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _SupplyControl.Contract.SupplyControlTransactor.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 (_SupplyControl *SupplyControlCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _SupplyControl.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 (_SupplyControl *SupplyControlTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _SupplyControl.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_SupplyControl *SupplyControlTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _SupplyControl.Contract.contract.Transact(opts, method, params...)
}

// AvailableSupply is a free data retrieval call binding the contract method 0x7ecc2b56.
//
// Solidity: function availableSupply() view returns(uint256)
func (_SupplyControl *SupplyControlCaller) AvailableSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _SupplyControl.contract.Call(opts, &out, "availableSupply")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// AvailableSupply is a free data retrieval call binding the contract method 0x7ecc2b56.
//
// Solidity: function availableSupply() view returns(uint256)
func (_SupplyControl *SupplyControlSession) AvailableSupply() (*big.Int, error) {
	return _SupplyControl.Contract.AvailableSupply(&_SupplyControl.CallOpts)
}

// AvailableSupply is a free data retrieval call binding the contract method 0x7ecc2b56.
//
// Solidity: function availableSupply() view returns(uint256)
func (_SupplyControl *SupplyControlCallerSession) AvailableSupply() (*big.Int, error) {
	return _SupplyControl.Contract.AvailableSupply(&_SupplyControl.CallOpts)
}

// GetStabilizer is a free data retrieval call binding the contract method 0x80af1799.
//
// Solidity: function getStabilizer() view returns(address)
func (_SupplyControl *SupplyControlCaller) GetStabilizer(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _SupplyControl.contract.Call(opts, &out, "getStabilizer")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetStabilizer is a free data retrieval call binding the contract method 0x80af1799.
//
// Solidity: function getStabilizer() view returns(address)
func (_SupplyControl *SupplyControlSession) GetStabilizer() (common.Address, error) {
	return _SupplyControl.Contract.GetStabilizer(&_SupplyControl.CallOpts)
}

// GetStabilizer is a free data retrieval call binding the contract method 0x80af1799.
//
// Solidity: function getStabilizer() view returns(address)
func (_SupplyControl *SupplyControlCallerSession) GetStabilizer() (common.Address, error) {
	return _SupplyControl.Contract.GetStabilizer(&_SupplyControl.CallOpts)
}

// GetTotalSupply is a free data retrieval call binding the contract method 0xc4e41b22.
//
// Solidity: function getTotalSupply() view returns(uint256)
func (_SupplyControl *SupplyControlCaller) GetTotalSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _SupplyControl.contract.Call(opts, &out, "getTotalSupply")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetTotalSupply is a free data retrieval call binding the contract method 0xc4e41b22.
//
// Solidity: function getTotalSupply() view returns(uint256)
func (_SupplyControl *SupplyControlSession) GetTotalSupply() (*big.Int, error) {
	return _SupplyControl.Contract.GetTotalSupply(&_SupplyControl.CallOpts)
}

// GetTotalSupply is a free data retrieval call binding the contract method 0xc4e41b22.
//
// Solidity: function getTotalSupply() view returns(uint256)
func (_SupplyControl *SupplyControlCallerSession) GetTotalSupply() (*big.Int, error) {
	return _SupplyControl.Contract.GetTotalSupply(&_SupplyControl.CallOpts)
}

// Burn is a paid mutator transaction binding the contract method 0x44df8e70.
//
// Solidity: function burn() payable returns()
func (_SupplyControl *SupplyControlTransactor) Burn(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _SupplyControl.contract.Transact(opts, "burn")
}

// Burn is a paid mutator transaction binding the contract method 0x44df8e70.
//
// Solidity: function burn() payable returns()
func (_SupplyControl *SupplyControlSession) Burn() (*types.Transaction, error) {
	return _SupplyControl.Contract.Burn(&_SupplyControl.TransactOpts)
}

// Burn is a paid mutator transaction binding the contract method 0x44df8e70.
//
// Solidity: function burn() payable returns()
func (_SupplyControl *SupplyControlTransactorSession) Burn() (*types.Transaction, error) {
	return _SupplyControl.Contract.Burn(&_SupplyControl.TransactOpts)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address recipient, uint256 amount) returns()
func (_SupplyControl *SupplyControlTransactor) Mint(opts *bind.TransactOpts, recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _SupplyControl.contract.Transact(opts, "mint", recipient, amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address recipient, uint256 amount) returns()
func (_SupplyControl *SupplyControlSession) Mint(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _SupplyControl.Contract.Mint(&_SupplyControl.TransactOpts, recipient, amount)
}

// Mint is a paid mutator transaction binding the contract method 0x40c10f19.
//
// Solidity: function mint(address recipient, uint256 amount) returns()
func (_SupplyControl *SupplyControlTransactorSession) Mint(recipient common.Address, amount *big.Int) (*types.Transaction, error) {
	return _SupplyControl.Contract.Mint(&_SupplyControl.TransactOpts, recipient, amount)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_SupplyControl *SupplyControlTransactor) SetOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
	return _SupplyControl.contract.Transact(opts, "setOperator", operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_SupplyControl *SupplyControlSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _SupplyControl.Contract.SetOperator(&_SupplyControl.TransactOpts, operator)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address operator) returns()
func (_SupplyControl *SupplyControlTransactorSession) SetOperator(operator common.Address) (*types.Transaction, error) {
	return _SupplyControl.Contract.SetOperator(&_SupplyControl.TransactOpts, operator)
}

// SetStabilizer is a paid mutator transaction binding the contract method 0xdb7f521a.
//
// Solidity: function setStabilizer(address stabilizer_) returns()
func (_SupplyControl *SupplyControlTransactor) SetStabilizer(opts *bind.TransactOpts, stabilizer_ common.Address) (*types.Transaction, error) {
	return _SupplyControl.contract.Transact(opts, "setStabilizer", stabilizer_)
}

// SetStabilizer is a paid mutator transaction binding the contract method 0xdb7f521a.
//
// Solidity: function setStabilizer(address stabilizer_) returns()
func (_SupplyControl *SupplyControlSession) SetStabilizer(stabilizer_ common.Address) (*types.Transaction, error) {
	return _SupplyControl.Contract.SetStabilizer(&_SupplyControl.TransactOpts, stabilizer_)
}

// SetStabilizer is a paid mutator transaction binding the contract method 0xdb7f521a.
//
// Solidity: function setStabilizer(address stabilizer_) returns()
func (_SupplyControl *SupplyControlTransactorSession) SetStabilizer(stabilizer_ common.Address) (*types.Transaction, error) {
	return _SupplyControl.Contract.SetStabilizer(&_SupplyControl.TransactOpts, stabilizer_)
}

// SupplyControlBurnIterator is returned from FilterBurn and is used to iterate over the raw logs and unpacked data for Burn events raised by the SupplyControl contract.
type SupplyControlBurnIterator struct {
	Event *SupplyControlBurn // 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 *SupplyControlBurnIterator) 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(SupplyControlBurn)
			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(SupplyControlBurn)
		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 *SupplyControlBurnIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *SupplyControlBurnIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// SupplyControlBurn represents a Burn event raised by the SupplyControl contract.
type SupplyControlBurn struct {
	Amount *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterBurn is a free log retrieval operation binding the contract event 0xb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb.
//
// Solidity: event Burn(uint256 amount)
func (_SupplyControl *SupplyControlFilterer) FilterBurn(opts *bind.FilterOpts) (*SupplyControlBurnIterator, error) {

	logs, sub, err := _SupplyControl.contract.FilterLogs(opts, "Burn")
	if err != nil {
		return nil, err
	}
	return &SupplyControlBurnIterator{contract: _SupplyControl.contract, event: "Burn", logs: logs, sub: sub}, nil
}

// WatchBurn is a free log subscription operation binding the contract event 0xb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb.
//
// Solidity: event Burn(uint256 amount)
func (_SupplyControl *SupplyControlFilterer) WatchBurn(opts *bind.WatchOpts, sink chan<- *SupplyControlBurn) (event.Subscription, error) {

	logs, sub, err := _SupplyControl.contract.WatchLogs(opts, "Burn")
	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(SupplyControlBurn)
				if err := _SupplyControl.contract.UnpackLog(event, "Burn", 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
}

// ParseBurn is a log parse operation binding the contract event 0xb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb.
//
// Solidity: event Burn(uint256 amount)
func (_SupplyControl *SupplyControlFilterer) ParseBurn(log types.Log) (*SupplyControlBurn, error) {
	event := new(SupplyControlBurn)
	if err := _SupplyControl.contract.UnpackLog(event, "Burn", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// SupplyControlConfigUpdateAddressIterator is returned from FilterConfigUpdateAddress and is used to iterate over the raw logs and unpacked data for ConfigUpdateAddress events raised by the SupplyControl contract.
type SupplyControlConfigUpdateAddressIterator struct {
	Event *SupplyControlConfigUpdateAddress // 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 *SupplyControlConfigUpdateAddressIterator) 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(SupplyControlConfigUpdateAddress)
			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(SupplyControlConfigUpdateAddress)
		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 *SupplyControlConfigUpdateAddressIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *SupplyControlConfigUpdateAddressIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// SupplyControlConfigUpdateAddress represents a ConfigUpdateAddress event raised by the SupplyControl contract.
type SupplyControlConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*SupplyControlConfigUpdateAddressIterator, error) {

	logs, sub, err := _SupplyControl.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &SupplyControlConfigUpdateAddressIterator{contract: _SupplyControl.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *SupplyControlConfigUpdateAddress) (event.Subscription, error) {

	logs, sub, err := _SupplyControl.contract.WatchLogs(opts, "ConfigUpdateAddress")
	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(SupplyControlConfigUpdateAddress)
				if err := _SupplyControl.contract.UnpackLog(event, "ConfigUpdateAddress", 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
}

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) ParseConfigUpdateAddress(log types.Log) (*SupplyControlConfigUpdateAddress, error) {
	event := new(SupplyControlConfigUpdateAddress)
	if err := _SupplyControl.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// SupplyControlConfigUpdateBoolIterator is returned from FilterConfigUpdateBool and is used to iterate over the raw logs and unpacked data for ConfigUpdateBool events raised by the SupplyControl contract.
type SupplyControlConfigUpdateBoolIterator struct {
	Event *SupplyControlConfigUpdateBool // 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 *SupplyControlConfigUpdateBoolIterator) 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(SupplyControlConfigUpdateBool)
			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(SupplyControlConfigUpdateBool)
		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 *SupplyControlConfigUpdateBoolIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *SupplyControlConfigUpdateBoolIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// SupplyControlConfigUpdateBool represents a ConfigUpdateBool event raised by the SupplyControl contract.
type SupplyControlConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*SupplyControlConfigUpdateBoolIterator, error) {

	logs, sub, err := _SupplyControl.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &SupplyControlConfigUpdateBoolIterator{contract: _SupplyControl.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *SupplyControlConfigUpdateBool) (event.Subscription, error) {

	logs, sub, err := _SupplyControl.contract.WatchLogs(opts, "ConfigUpdateBool")
	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(SupplyControlConfigUpdateBool)
				if err := _SupplyControl.contract.UnpackLog(event, "ConfigUpdateBool", 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
}

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) ParseConfigUpdateBool(log types.Log) (*SupplyControlConfigUpdateBool, error) {
	event := new(SupplyControlConfigUpdateBool)
	if err := _SupplyControl.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// SupplyControlConfigUpdateIntIterator is returned from FilterConfigUpdateInt and is used to iterate over the raw logs and unpacked data for ConfigUpdateInt events raised by the SupplyControl contract.
type SupplyControlConfigUpdateIntIterator struct {
	Event *SupplyControlConfigUpdateInt // 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 *SupplyControlConfigUpdateIntIterator) 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(SupplyControlConfigUpdateInt)
			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(SupplyControlConfigUpdateInt)
		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 *SupplyControlConfigUpdateIntIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *SupplyControlConfigUpdateIntIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// SupplyControlConfigUpdateInt represents a ConfigUpdateInt event raised by the SupplyControl contract.
type SupplyControlConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*SupplyControlConfigUpdateIntIterator, error) {

	logs, sub, err := _SupplyControl.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &SupplyControlConfigUpdateIntIterator{contract: _SupplyControl.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *SupplyControlConfigUpdateInt) (event.Subscription, error) {

	logs, sub, err := _SupplyControl.contract.WatchLogs(opts, "ConfigUpdateInt")
	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(SupplyControlConfigUpdateInt)
				if err := _SupplyControl.contract.UnpackLog(event, "ConfigUpdateInt", 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
}

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) ParseConfigUpdateInt(log types.Log) (*SupplyControlConfigUpdateInt, error) {
	event := new(SupplyControlConfigUpdateInt)
	if err := _SupplyControl.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// SupplyControlConfigUpdateUintIterator is returned from FilterConfigUpdateUint and is used to iterate over the raw logs and unpacked data for ConfigUpdateUint events raised by the SupplyControl contract.
type SupplyControlConfigUpdateUintIterator struct {
	Event *SupplyControlConfigUpdateUint // 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 *SupplyControlConfigUpdateUintIterator) 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(SupplyControlConfigUpdateUint)
			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(SupplyControlConfigUpdateUint)
		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 *SupplyControlConfigUpdateUintIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *SupplyControlConfigUpdateUintIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// SupplyControlConfigUpdateUint represents a ConfigUpdateUint event raised by the SupplyControl contract.
type SupplyControlConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*SupplyControlConfigUpdateUintIterator, error) {

	logs, sub, err := _SupplyControl.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &SupplyControlConfigUpdateUintIterator{contract: _SupplyControl.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *SupplyControlConfigUpdateUint) (event.Subscription, error) {

	logs, sub, err := _SupplyControl.contract.WatchLogs(opts, "ConfigUpdateUint")
	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(SupplyControlConfigUpdateUint)
				if err := _SupplyControl.contract.UnpackLog(event, "ConfigUpdateUint", 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
}

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_SupplyControl *SupplyControlFilterer) ParseConfigUpdateUint(log types.Log) (*SupplyControlConfigUpdateUint, error) {
	event := new(SupplyControlConfigUpdateUint)
	if err := _SupplyControl.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// SupplyControlMintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the SupplyControl contract.
type SupplyControlMintIterator struct {
	Event *SupplyControlMint // 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 *SupplyControlMintIterator) 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(SupplyControlMint)
			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(SupplyControlMint)
		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 *SupplyControlMintIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *SupplyControlMintIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// SupplyControlMint represents a Mint event raised by the SupplyControl contract.
type SupplyControlMint struct {
	Recipient common.Address
	Amount    *big.Int
	Raw       types.Log // Blockchain specific contextual infos
}

// FilterMint is a free log retrieval operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885.
//
// Solidity: event Mint(address recipient, uint256 amount)
func (_SupplyControl *SupplyControlFilterer) FilterMint(opts *bind.FilterOpts) (*SupplyControlMintIterator, error) {

	logs, sub, err := _SupplyControl.contract.FilterLogs(opts, "Mint")
	if err != nil {
		return nil, err
	}
	return &SupplyControlMintIterator{contract: _SupplyControl.contract, event: "Mint", logs: logs, sub: sub}, nil
}

// WatchMint is a free log subscription operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885.
//
// Solidity: event Mint(address recipient, uint256 amount)
func (_SupplyControl *SupplyControlFilterer) WatchMint(opts *bind.WatchOpts, sink chan<- *SupplyControlMint) (event.Subscription, error) {

	logs, sub, err := _SupplyControl.contract.WatchLogs(opts, "Mint")
	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(SupplyControlMint)
				if err := _SupplyControl.contract.UnpackLog(event, "Mint", 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
}

// ParseMint is a log parse operation binding the contract event 0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885.
//
// Solidity: event Mint(address recipient, uint256 amount)
func (_SupplyControl *SupplyControlFilterer) ParseMint(log types.Log) (*SupplyControlMint, error) {
	event := new(SupplyControlMint)
	if err := _SupplyControl.contract.UnpackLog(event, "Mint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// TestBaseMetaData contains all meta data concerning the TestBase contract.
var TestBaseMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_foo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Foo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"bfb4ebcf": "Foo()",
	},
	Bin: "0x608060405234801561001057600080fd5b5060405161041438038061041483398101604081905261002f91610058565b600061003b82826101ad565b505061026b565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561006a57600080fd5b81516001600160401b0381111561008057600080fd5b8201601f8101841361009157600080fd5b80516001600160401b038111156100aa576100aa610042565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100d8576100d8610042565b6040528181528282016020018610156100f057600080fd5b60005b8281101561010f576020818501810151838301820152016100f3565b50600091810160200191909152949350505050565b600181811c9082168061013857607f821691505b60208210810361015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101a857806000526020600020601f840160051c810160208510156101855750805b601f840160051c820191505b818110156101a55760008155600101610191565b50505b505050565b81516001600160401b038111156101c6576101c6610042565b6101da816101d48454610124565b8461015e565b6020601f82116001811461020e57600083156101f65750848201515b600019600385901b1c1916600184901b1784556101a5565b600084815260208120601f198516915b8281101561023e578785015182556020948501946001909201910161021e565b508482101561025c5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b61019a8061027a6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063bfb4ebcf14610030575b600080fd5b61003861004e565b60405161004591906100dc565b60405180910390f35b6000805461005b9061012a565b80601f01602080910402602001604051908101604052809291908181526020018280546100879061012a565b80156100d45780601f106100a9576101008083540402835291602001916100d4565b820191906000526020600020905b8154815290600101906020018083116100b757829003601f168201915b505050505081565b602081526000825180602084015260005b8181101561010a57602081860181015160408684010152016100ed565b506000604082850101526040601f19601f83011684010191505092915050565b600181811c9082168061013e57607f821691505b60208210810361015e57634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220ac328ed45ae95dd3f35d8d1117714eab04b361b21a4e7855fd614ba61400fcd264736f6c634300081e0033",
}

// TestBaseABI is the input ABI used to generate the binding from.
// Deprecated: Use TestBaseMetaData.ABI instead.
var TestBaseABI = TestBaseMetaData.ABI

// Deprecated: Use TestBaseMetaData.Sigs instead.
// TestBaseFuncSigs maps the 4-byte function signature to its string representation.
var TestBaseFuncSigs = TestBaseMetaData.Sigs

// TestBaseBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use TestBaseMetaData.Bin instead.
var TestBaseBin = TestBaseMetaData.Bin

// DeployTestBase deploys a new Ethereum contract, binding an instance of TestBase to it.
func DeployTestBase(auth *bind.TransactOpts, backend bind.ContractBackend, _foo string) (common.Address, *types.Transaction, *TestBase, error) {
	parsed, err := TestBaseMetaData.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(TestBaseBin), backend, _foo)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &TestBase{TestBaseCaller: TestBaseCaller{contract: contract}, TestBaseTransactor: TestBaseTransactor{contract: contract}, TestBaseFilterer: TestBaseFilterer{contract: contract}}, nil
}

// TestBase is an auto generated Go binding around an Ethereum contract.
type TestBase struct {
	TestBaseCaller     // Read-only binding to the contract
	TestBaseTransactor // Write-only binding to the contract
	TestBaseFilterer   // Log filterer for contract events
}

// TestBaseCaller is an auto generated read-only Go binding around an Ethereum contract.
type TestBaseCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// TestBaseTransactor is an auto generated write-only Go binding around an Ethereum contract.
type TestBaseTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// TestBaseFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type TestBaseFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// TestBaseSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type TestBaseSession struct {
	Contract     *TestBase         // 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
}

// TestBaseCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type TestBaseCallerSession struct {
	Contract *TestBaseCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts   // Call options to use throughout this session
}

// TestBaseTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type TestBaseTransactorSession struct {
	Contract     *TestBaseTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts   // Transaction auth options to use throughout this session
}

// TestBaseRaw is an auto generated low-level Go binding around an Ethereum contract.
type TestBaseRaw struct {
	Contract *TestBase // Generic contract binding to access the raw methods on
}

// TestBaseCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type TestBaseCallerRaw struct {
	Contract *TestBaseCaller // Generic read-only contract binding to access the raw methods on
}

// TestBaseTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type TestBaseTransactorRaw struct {
	Contract *TestBaseTransactor // Generic write-only contract binding to access the raw methods on
}

// NewTestBase creates a new instance of TestBase, bound to a specific deployed contract.
func NewTestBase(address common.Address, backend bind.ContractBackend) (*TestBase, error) {
	contract, err := bindTestBase(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &TestBase{TestBaseCaller: TestBaseCaller{contract: contract}, TestBaseTransactor: TestBaseTransactor{contract: contract}, TestBaseFilterer: TestBaseFilterer{contract: contract}}, nil
}

// NewTestBaseCaller creates a new read-only instance of TestBase, bound to a specific deployed contract.
func NewTestBaseCaller(address common.Address, caller bind.ContractCaller) (*TestBaseCaller, error) {
	contract, err := bindTestBase(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &TestBaseCaller{contract: contract}, nil
}

// NewTestBaseTransactor creates a new write-only instance of TestBase, bound to a specific deployed contract.
func NewTestBaseTransactor(address common.Address, transactor bind.ContractTransactor) (*TestBaseTransactor, error) {
	contract, err := bindTestBase(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &TestBaseTransactor{contract: contract}, nil
}

// NewTestBaseFilterer creates a new log filterer instance of TestBase, bound to a specific deployed contract.
func NewTestBaseFilterer(address common.Address, filterer bind.ContractFilterer) (*TestBaseFilterer, error) {
	contract, err := bindTestBase(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &TestBaseFilterer{contract: contract}, nil
}

// bindTestBase binds a generic wrapper to an already deployed contract.
func bindTestBase(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(TestBaseABI))
	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 (_TestBase *TestBaseRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _TestBase.Contract.TestBaseCaller.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 (_TestBase *TestBaseRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _TestBase.Contract.TestBaseTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_TestBase *TestBaseRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _TestBase.Contract.TestBaseTransactor.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 (_TestBase *TestBaseCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _TestBase.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 (_TestBase *TestBaseTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _TestBase.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_TestBase *TestBaseTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _TestBase.Contract.contract.Transact(opts, method, params...)
}

// Foo is a free data retrieval call binding the contract method 0xbfb4ebcf.
//
// Solidity: function Foo() view returns(string)
func (_TestBase *TestBaseCaller) Foo(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _TestBase.contract.Call(opts, &out, "Foo")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// Foo is a free data retrieval call binding the contract method 0xbfb4ebcf.
//
// Solidity: function Foo() view returns(string)
func (_TestBase *TestBaseSession) Foo() (string, error) {
	return _TestBase.Contract.Foo(&_TestBase.CallOpts)
}

// Foo is a free data retrieval call binding the contract method 0xbfb4ebcf.
//
// Solidity: function Foo() view returns(string)
func (_TestBase *TestBaseCallerSession) Foo() (string, error) {
	return _TestBase.Contract.Foo(&_TestBase.CallOpts)
}

// TestUpgradedMetaData contains all meta data concerning the TestUpgraded contract.
var TestUpgradedMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_bar\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_foo\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Bar\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"Foo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_foo\",\"type\":\"string\"}],\"name\":\"FooBar\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"b0a378b0": "Bar()",
		"bfb4ebcf": "Foo()",
		"1e4f3395": "FooBar(string)",
	},
	Bin: "0x608060405234801561001057600080fd5b5060405161069238038061069283398101604081905261002f9161010c565b80600061003c82826101fe565b506001905061004b83826101fe565b5050506102bc565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007a57600080fd5b81516001600160401b0381111561009357610093610053565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c1576100c1610053565b6040528181528382016020018510156100d957600080fd5b60005b828110156100f8576020818601810151838301820152016100dc565b506000918101602001919091529392505050565b6000806040838503121561011f57600080fd5b82516001600160401b0381111561013557600080fd5b61014185828601610069565b602085015190935090506001600160401b0381111561015f57600080fd5b61016b85828601610069565b9150509250929050565b600181811c9082168061018957607f821691505b6020821081036101a957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101f957806000526020600020601f840160051c810160208510156101d65750805b601f840160051c820191505b818110156101f657600081556001016101e2565b50505b505050565b81516001600160401b0381111561021757610217610053565b61022b816102258454610175565b846101af565b6020601f82116001811461025f57600083156102475750848201515b600019600385901b1c1916600184901b1784556101f6565b600084815260208120601f198516915b8281101561028f578785015182556020948501946001909201910161026f565b50848210156102ad5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6103c7806102cb6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631e4f339514610046578063b0a378b01461005b578063bfb4ebcf14610079575b600080fd5b610059610054366004610142565b610081565b005b610063610091565b60405161007091906101fb565b60405180910390f35b61006361011f565b600061008d82826102d2565b5050565b6001805461009e90610249565b80601f01602080910402602001604051908101604052809291908181526020018280546100ca90610249565b80156101175780601f106100ec57610100808354040283529160200191610117565b820191906000526020600020905b8154815290600101906020018083116100fa57829003601f168201915b505050505081565b6000805461009e90610249565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561015457600080fd5b813567ffffffffffffffff81111561016b57600080fd5b8201601f8101841361017c57600080fd5b803567ffffffffffffffff8111156101965761019661012c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156101c5576101c561012c565b6040528181528282016020018610156101dd57600080fd5b81602084016020830137600091810160200191909152949350505050565b602081526000825180602084015260005b81811015610229576020818601810151604086840101520161020c565b506000604082850101526040601f19601f83011684010191505092915050565b600181811c9082168061025d57607f821691505b60208210810361027d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102cd57806000526020600020601f840160051c810160208510156102aa5750805b601f840160051c820191505b818110156102ca57600081556001016102b6565b50505b505050565b815167ffffffffffffffff8111156102ec576102ec61012c565b610300816102fa8454610249565b84610283565b6020601f821160018114610334576000831561031c5750848201515b600019600385901b1c1916600184901b1784556102ca565b600084815260208120601f198516915b828110156103645787850151825560209485019460019092019101610344565b50848210156103825786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fea26469706673582212204db5b95649a0265fcd7b55b5cc1d9f4b638b538672e31af6fedebea1f97604d064736f6c634300081e0033",
}

// TestUpgradedABI is the input ABI used to generate the binding from.
// Deprecated: Use TestUpgradedMetaData.ABI instead.
var TestUpgradedABI = TestUpgradedMetaData.ABI

// Deprecated: Use TestUpgradedMetaData.Sigs instead.
// TestUpgradedFuncSigs maps the 4-byte function signature to its string representation.
var TestUpgradedFuncSigs = TestUpgradedMetaData.Sigs

// TestUpgradedBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use TestUpgradedMetaData.Bin instead.
var TestUpgradedBin = TestUpgradedMetaData.Bin

// DeployTestUpgraded deploys a new Ethereum contract, binding an instance of TestUpgraded to it.
func DeployTestUpgraded(auth *bind.TransactOpts, backend bind.ContractBackend, _bar string, _foo string) (common.Address, *types.Transaction, *TestUpgraded, error) {
	parsed, err := TestUpgradedMetaData.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(TestUpgradedBin), backend, _bar, _foo)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &TestUpgraded{TestUpgradedCaller: TestUpgradedCaller{contract: contract}, TestUpgradedTransactor: TestUpgradedTransactor{contract: contract}, TestUpgradedFilterer: TestUpgradedFilterer{contract: contract}}, nil
}

// TestUpgraded is an auto generated Go binding around an Ethereum contract.
type TestUpgraded struct {
	TestUpgradedCaller     // Read-only binding to the contract
	TestUpgradedTransactor // Write-only binding to the contract
	TestUpgradedFilterer   // Log filterer for contract events
}

// TestUpgradedCaller is an auto generated read-only Go binding around an Ethereum contract.
type TestUpgradedCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// TestUpgradedTransactor is an auto generated write-only Go binding around an Ethereum contract.
type TestUpgradedTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// TestUpgradedFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type TestUpgradedFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// TestUpgradedSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type TestUpgradedSession struct {
	Contract     *TestUpgraded     // 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
}

// TestUpgradedCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type TestUpgradedCallerSession struct {
	Contract *TestUpgradedCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts       // Call options to use throughout this session
}

// TestUpgradedTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type TestUpgradedTransactorSession struct {
	Contract     *TestUpgradedTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts       // Transaction auth options to use throughout this session
}

// TestUpgradedRaw is an auto generated low-level Go binding around an Ethereum contract.
type TestUpgradedRaw struct {
	Contract *TestUpgraded // Generic contract binding to access the raw methods on
}

// TestUpgradedCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type TestUpgradedCallerRaw struct {
	Contract *TestUpgradedCaller // Generic read-only contract binding to access the raw methods on
}

// TestUpgradedTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type TestUpgradedTransactorRaw struct {
	Contract *TestUpgradedTransactor // Generic write-only contract binding to access the raw methods on
}

// NewTestUpgraded creates a new instance of TestUpgraded, bound to a specific deployed contract.
func NewTestUpgraded(address common.Address, backend bind.ContractBackend) (*TestUpgraded, error) {
	contract, err := bindTestUpgraded(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &TestUpgraded{TestUpgradedCaller: TestUpgradedCaller{contract: contract}, TestUpgradedTransactor: TestUpgradedTransactor{contract: contract}, TestUpgradedFilterer: TestUpgradedFilterer{contract: contract}}, nil
}

// NewTestUpgradedCaller creates a new read-only instance of TestUpgraded, bound to a specific deployed contract.
func NewTestUpgradedCaller(address common.Address, caller bind.ContractCaller) (*TestUpgradedCaller, error) {
	contract, err := bindTestUpgraded(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &TestUpgradedCaller{contract: contract}, nil
}

// NewTestUpgradedTransactor creates a new write-only instance of TestUpgraded, bound to a specific deployed contract.
func NewTestUpgradedTransactor(address common.Address, transactor bind.ContractTransactor) (*TestUpgradedTransactor, error) {
	contract, err := bindTestUpgraded(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &TestUpgradedTransactor{contract: contract}, nil
}

// NewTestUpgradedFilterer creates a new log filterer instance of TestUpgraded, bound to a specific deployed contract.
func NewTestUpgradedFilterer(address common.Address, filterer bind.ContractFilterer) (*TestUpgradedFilterer, error) {
	contract, err := bindTestUpgraded(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &TestUpgradedFilterer{contract: contract}, nil
}

// bindTestUpgraded binds a generic wrapper to an already deployed contract.
func bindTestUpgraded(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(TestUpgradedABI))
	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 (_TestUpgraded *TestUpgradedRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _TestUpgraded.Contract.TestUpgradedCaller.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 (_TestUpgraded *TestUpgradedRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _TestUpgraded.Contract.TestUpgradedTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_TestUpgraded *TestUpgradedRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _TestUpgraded.Contract.TestUpgradedTransactor.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 (_TestUpgraded *TestUpgradedCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _TestUpgraded.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 (_TestUpgraded *TestUpgradedTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _TestUpgraded.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_TestUpgraded *TestUpgradedTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _TestUpgraded.Contract.contract.Transact(opts, method, params...)
}

// Bar is a free data retrieval call binding the contract method 0xb0a378b0.
//
// Solidity: function Bar() view returns(string)
func (_TestUpgraded *TestUpgradedCaller) Bar(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _TestUpgraded.contract.Call(opts, &out, "Bar")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// Bar is a free data retrieval call binding the contract method 0xb0a378b0.
//
// Solidity: function Bar() view returns(string)
func (_TestUpgraded *TestUpgradedSession) Bar() (string, error) {
	return _TestUpgraded.Contract.Bar(&_TestUpgraded.CallOpts)
}

// Bar is a free data retrieval call binding the contract method 0xb0a378b0.
//
// Solidity: function Bar() view returns(string)
func (_TestUpgraded *TestUpgradedCallerSession) Bar() (string, error) {
	return _TestUpgraded.Contract.Bar(&_TestUpgraded.CallOpts)
}

// Foo is a free data retrieval call binding the contract method 0xbfb4ebcf.
//
// Solidity: function Foo() view returns(string)
func (_TestUpgraded *TestUpgradedCaller) Foo(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _TestUpgraded.contract.Call(opts, &out, "Foo")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// Foo is a free data retrieval call binding the contract method 0xbfb4ebcf.
//
// Solidity: function Foo() view returns(string)
func (_TestUpgraded *TestUpgradedSession) Foo() (string, error) {
	return _TestUpgraded.Contract.Foo(&_TestUpgraded.CallOpts)
}

// Foo is a free data retrieval call binding the contract method 0xbfb4ebcf.
//
// Solidity: function Foo() view returns(string)
func (_TestUpgraded *TestUpgradedCallerSession) Foo() (string, error) {
	return _TestUpgraded.Contract.Foo(&_TestUpgraded.CallOpts)
}

// FooBar is a paid mutator transaction binding the contract method 0x1e4f3395.
//
// Solidity: function FooBar(string _foo) returns()
func (_TestUpgraded *TestUpgradedTransactor) FooBar(opts *bind.TransactOpts, _foo string) (*types.Transaction, error) {
	return _TestUpgraded.contract.Transact(opts, "FooBar", _foo)
}

// FooBar is a paid mutator transaction binding the contract method 0x1e4f3395.
//
// Solidity: function FooBar(string _foo) returns()
func (_TestUpgraded *TestUpgradedSession) FooBar(_foo string) (*types.Transaction, error) {
	return _TestUpgraded.Contract.FooBar(&_TestUpgraded.TransactOpts, _foo)
}

// FooBar is a paid mutator transaction binding the contract method 0x1e4f3395.
//
// Solidity: function FooBar(string _foo) returns()
func (_TestUpgraded *TestUpgradedTransactorSession) FooBar(_foo string) (*types.Transaction, error) {
	return _TestUpgraded.Contract.FooBar(&_TestUpgraded.TransactOpts, _foo)
}

// UpdatableConfigMetaData contains all meta data concerning the UpdatableConfig contract.
var UpdatableConfigMetaData = &bind.MetaData{
	ABI: "[]",
	Bin: "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cc472cc8c229b5282b82b9cf93a131b080d8bdfb1dd28f8f419ba9622161b20964736f6c634300081e0033",
}

// UpdatableConfigABI is the input ABI used to generate the binding from.
// Deprecated: Use UpdatableConfigMetaData.ABI instead.
var UpdatableConfigABI = UpdatableConfigMetaData.ABI

// UpdatableConfigBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use UpdatableConfigMetaData.Bin instead.
var UpdatableConfigBin = UpdatableConfigMetaData.Bin

// DeployUpdatableConfig deploys a new Ethereum contract, binding an instance of UpdatableConfig to it.
func DeployUpdatableConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *UpdatableConfig, error) {
	parsed, err := UpdatableConfigMetaData.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(UpdatableConfigBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &UpdatableConfig{UpdatableConfigCaller: UpdatableConfigCaller{contract: contract}, UpdatableConfigTransactor: UpdatableConfigTransactor{contract: contract}, UpdatableConfigFilterer: UpdatableConfigFilterer{contract: contract}}, nil
}

// UpdatableConfig is an auto generated Go binding around an Ethereum contract.
type UpdatableConfig struct {
	UpdatableConfigCaller     // Read-only binding to the contract
	UpdatableConfigTransactor // Write-only binding to the contract
	UpdatableConfigFilterer   // Log filterer for contract events
}

// UpdatableConfigCaller is an auto generated read-only Go binding around an Ethereum contract.
type UpdatableConfigCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// UpdatableConfigTransactor is an auto generated write-only Go binding around an Ethereum contract.
type UpdatableConfigTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// UpdatableConfigFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type UpdatableConfigFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// UpdatableConfigSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type UpdatableConfigSession struct {
	Contract     *UpdatableConfig  // 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
}

// UpdatableConfigCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type UpdatableConfigCallerSession struct {
	Contract *UpdatableConfigCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts          // Call options to use throughout this session
}

// UpdatableConfigTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type UpdatableConfigTransactorSession struct {
	Contract     *UpdatableConfigTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts          // Transaction auth options to use throughout this session
}

// UpdatableConfigRaw is an auto generated low-level Go binding around an Ethereum contract.
type UpdatableConfigRaw struct {
	Contract *UpdatableConfig // Generic contract binding to access the raw methods on
}

// UpdatableConfigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type UpdatableConfigCallerRaw struct {
	Contract *UpdatableConfigCaller // Generic read-only contract binding to access the raw methods on
}

// UpdatableConfigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type UpdatableConfigTransactorRaw struct {
	Contract *UpdatableConfigTransactor // Generic write-only contract binding to access the raw methods on
}

// NewUpdatableConfig creates a new instance of UpdatableConfig, bound to a specific deployed contract.
func NewUpdatableConfig(address common.Address, backend bind.ContractBackend) (*UpdatableConfig, error) {
	contract, err := bindUpdatableConfig(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &UpdatableConfig{UpdatableConfigCaller: UpdatableConfigCaller{contract: contract}, UpdatableConfigTransactor: UpdatableConfigTransactor{contract: contract}, UpdatableConfigFilterer: UpdatableConfigFilterer{contract: contract}}, nil
}

// NewUpdatableConfigCaller creates a new read-only instance of UpdatableConfig, bound to a specific deployed contract.
func NewUpdatableConfigCaller(address common.Address, caller bind.ContractCaller) (*UpdatableConfigCaller, error) {
	contract, err := bindUpdatableConfig(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &UpdatableConfigCaller{contract: contract}, nil
}

// NewUpdatableConfigTransactor creates a new write-only instance of UpdatableConfig, bound to a specific deployed contract.
func NewUpdatableConfigTransactor(address common.Address, transactor bind.ContractTransactor) (*UpdatableConfigTransactor, error) {
	contract, err := bindUpdatableConfig(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &UpdatableConfigTransactor{contract: contract}, nil
}

// NewUpdatableConfigFilterer creates a new log filterer instance of UpdatableConfig, bound to a specific deployed contract.
func NewUpdatableConfigFilterer(address common.Address, filterer bind.ContractFilterer) (*UpdatableConfigFilterer, error) {
	contract, err := bindUpdatableConfig(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &UpdatableConfigFilterer{contract: contract}, nil
}

// bindUpdatableConfig binds a generic wrapper to an already deployed contract.
func bindUpdatableConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(UpdatableConfigABI))
	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 (_UpdatableConfig *UpdatableConfigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _UpdatableConfig.Contract.UpdatableConfigCaller.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 (_UpdatableConfig *UpdatableConfigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _UpdatableConfig.Contract.UpdatableConfigTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_UpdatableConfig *UpdatableConfigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _UpdatableConfig.Contract.UpdatableConfigTransactor.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 (_UpdatableConfig *UpdatableConfigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _UpdatableConfig.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 (_UpdatableConfig *UpdatableConfigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _UpdatableConfig.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_UpdatableConfig *UpdatableConfigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _UpdatableConfig.Contract.contract.Transact(opts, method, params...)
}

// UpgradeManagerMetaData contains all meta data concerning the UpgradeManager contract.
var UpgradeManagerMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_autonity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newValue\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateBool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"oldValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"newValue\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateInt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"appliesAtHeight\",\"type\":\"uint256\"}],\"name\":\"ConfigUpdateUint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"UpgradeResult\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getAutonity\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_data\",\"type\":\"string\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Sigs: map[string]string{
		"7c8ccebe": "getAutonity()",
		"e7f43c68": "getOperator()",
		"b3ab15fb": "setOperator(address)",
		"6e3d9ff0": "upgrade(address,string)",
	},
	Bin: "0x6080604052348015600f57600080fd5b5060405161050b38038061050b833981016040819052602c916077565b600080546001600160a01b039384166001600160a01b0319918216179091556001805492909316911617905560a5565b80516001600160a01b0381168114607257600080fd5b919050565b60008060408385031215608957600080fd5b609083605c565b9150609c60208401605c565b90509250929050565b610457806100b46000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80636e3d9ff0146100515780637c8ccebe14610066578063b3ab15fb1461008f578063e7f43c68146100a2575b600080fd5b61006461005f3660046102ea565b6100b3565b005b6000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006461009d3660046103b4565b6101c5565b6001546001600160a01b0316610073565b6001546001600160a01b031633146101125760405162461bcd60e51b815260206004820152601a60248201527f63616c6c6572206973206e6f7420746865206f70657261746f7200000000000060448201526064015b60405180910390fd5b60405160f99060009061012b90859085906020016103d6565b60405160208183030381529060405290506000806060600080855160208701885af4809350503d91506040519050602082018101604052818152816000602083013e866001600160a01b03167f852faebd7b6261599c399849128319e84cd07abf61cfdea131405ee1d3934798846040516101aa911515815260200190565b60405180910390a2826101be578160208201fd5b8160208201f35b6000546001600160a01b0316331461022b5760405162461bcd60e51b815260206004820152602360248201527f63616c6c6572206973206e6f7420746865204175746f6e69747920636f6e74726044820152621858dd60ea1b6064820152608401610109565b6001546040805160808082526008908201526737b832b930ba37b960c11b60a08201526001600160a01b03928316602082015291831682820152436060830152517fe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a09181900360c00190a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b03811681146102cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156102fd57600080fd5b610306836102b8565b9150602083013567ffffffffffffffff81111561032257600080fd5b8301601f8101851361033357600080fd5b803567ffffffffffffffff81111561034d5761034d6102d4565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561037c5761037c6102d4565b60405281815282820160200187101561039457600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602082840312156103c657600080fd5b6103cf826102b8565b9392505050565b6bffffffffffffffffffffffff198360601b1681526000825160005b8181101561040f57602081860181015160148684010152016103f2565b5060009201601401918252509291505056fea26469706673582212208dbeae0a4c7117e4ea248c789d466ca974135c4b42705ea7c18a586e161f355864736f6c634300081e0033",
}

// UpgradeManagerABI is the input ABI used to generate the binding from.
// Deprecated: Use UpgradeManagerMetaData.ABI instead.
var UpgradeManagerABI = UpgradeManagerMetaData.ABI

// Deprecated: Use UpgradeManagerMetaData.Sigs instead.
// UpgradeManagerFuncSigs maps the 4-byte function signature to its string representation.
var UpgradeManagerFuncSigs = UpgradeManagerMetaData.Sigs

// UpgradeManagerBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use UpgradeManagerMetaData.Bin instead.
var UpgradeManagerBin = UpgradeManagerMetaData.Bin

// DeployUpgradeManager deploys a new Ethereum contract, binding an instance of UpgradeManager to it.
func DeployUpgradeManager(auth *bind.TransactOpts, backend bind.ContractBackend, _autonity common.Address, _operator common.Address) (common.Address, *types.Transaction, *UpgradeManager, error) {
	parsed, err := UpgradeManagerMetaData.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(UpgradeManagerBin), backend, _autonity, _operator)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &UpgradeManager{UpgradeManagerCaller: UpgradeManagerCaller{contract: contract}, UpgradeManagerTransactor: UpgradeManagerTransactor{contract: contract}, UpgradeManagerFilterer: UpgradeManagerFilterer{contract: contract}}, nil
}

// UpgradeManager is an auto generated Go binding around an Ethereum contract.
type UpgradeManager struct {
	UpgradeManagerCaller     // Read-only binding to the contract
	UpgradeManagerTransactor // Write-only binding to the contract
	UpgradeManagerFilterer   // Log filterer for contract events
}

// UpgradeManagerCaller is an auto generated read-only Go binding around an Ethereum contract.
type UpgradeManagerCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// UpgradeManagerTransactor is an auto generated write-only Go binding around an Ethereum contract.
type UpgradeManagerTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// UpgradeManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type UpgradeManagerFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// UpgradeManagerSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type UpgradeManagerSession struct {
	Contract     *UpgradeManager   // 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
}

// UpgradeManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type UpgradeManagerCallerSession struct {
	Contract *UpgradeManagerCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts         // Call options to use throughout this session
}

// UpgradeManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type UpgradeManagerTransactorSession struct {
	Contract     *UpgradeManagerTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts         // Transaction auth options to use throughout this session
}

// UpgradeManagerRaw is an auto generated low-level Go binding around an Ethereum contract.
type UpgradeManagerRaw struct {
	Contract *UpgradeManager // Generic contract binding to access the raw methods on
}

// UpgradeManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type UpgradeManagerCallerRaw struct {
	Contract *UpgradeManagerCaller // Generic read-only contract binding to access the raw methods on
}

// UpgradeManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type UpgradeManagerTransactorRaw struct {
	Contract *UpgradeManagerTransactor // Generic write-only contract binding to access the raw methods on
}

// NewUpgradeManager creates a new instance of UpgradeManager, bound to a specific deployed contract.
func NewUpgradeManager(address common.Address, backend bind.ContractBackend) (*UpgradeManager, error) {
	contract, err := bindUpgradeManager(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &UpgradeManager{UpgradeManagerCaller: UpgradeManagerCaller{contract: contract}, UpgradeManagerTransactor: UpgradeManagerTransactor{contract: contract}, UpgradeManagerFilterer: UpgradeManagerFilterer{contract: contract}}, nil
}

// NewUpgradeManagerCaller creates a new read-only instance of UpgradeManager, bound to a specific deployed contract.
func NewUpgradeManagerCaller(address common.Address, caller bind.ContractCaller) (*UpgradeManagerCaller, error) {
	contract, err := bindUpgradeManager(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &UpgradeManagerCaller{contract: contract}, nil
}

// NewUpgradeManagerTransactor creates a new write-only instance of UpgradeManager, bound to a specific deployed contract.
func NewUpgradeManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*UpgradeManagerTransactor, error) {
	contract, err := bindUpgradeManager(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &UpgradeManagerTransactor{contract: contract}, nil
}

// NewUpgradeManagerFilterer creates a new log filterer instance of UpgradeManager, bound to a specific deployed contract.
func NewUpgradeManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*UpgradeManagerFilterer, error) {
	contract, err := bindUpgradeManager(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &UpgradeManagerFilterer{contract: contract}, nil
}

// bindUpgradeManager binds a generic wrapper to an already deployed contract.
func bindUpgradeManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(UpgradeManagerABI))
	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 (_UpgradeManager *UpgradeManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _UpgradeManager.Contract.UpgradeManagerCaller.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 (_UpgradeManager *UpgradeManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _UpgradeManager.Contract.UpgradeManagerTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_UpgradeManager *UpgradeManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _UpgradeManager.Contract.UpgradeManagerTransactor.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 (_UpgradeManager *UpgradeManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _UpgradeManager.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 (_UpgradeManager *UpgradeManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _UpgradeManager.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_UpgradeManager *UpgradeManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _UpgradeManager.Contract.contract.Transact(opts, method, params...)
}

// GetAutonity is a free data retrieval call binding the contract method 0x7c8ccebe.
//
// Solidity: function getAutonity() view returns(address)
func (_UpgradeManager *UpgradeManagerCaller) GetAutonity(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _UpgradeManager.contract.Call(opts, &out, "getAutonity")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetAutonity is a free data retrieval call binding the contract method 0x7c8ccebe.
//
// Solidity: function getAutonity() view returns(address)
func (_UpgradeManager *UpgradeManagerSession) GetAutonity() (common.Address, error) {
	return _UpgradeManager.Contract.GetAutonity(&_UpgradeManager.CallOpts)
}

// GetAutonity is a free data retrieval call binding the contract method 0x7c8ccebe.
//
// Solidity: function getAutonity() view returns(address)
func (_UpgradeManager *UpgradeManagerCallerSession) GetAutonity() (common.Address, error) {
	return _UpgradeManager.Contract.GetAutonity(&_UpgradeManager.CallOpts)
}

// GetOperator is a free data retrieval call binding the contract method 0xe7f43c68.
//
// Solidity: function getOperator() view returns(address)
func (_UpgradeManager *UpgradeManagerCaller) GetOperator(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _UpgradeManager.contract.Call(opts, &out, "getOperator")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetOperator is a free data retrieval call binding the contract method 0xe7f43c68.
//
// Solidity: function getOperator() view returns(address)
func (_UpgradeManager *UpgradeManagerSession) GetOperator() (common.Address, error) {
	return _UpgradeManager.Contract.GetOperator(&_UpgradeManager.CallOpts)
}

// GetOperator is a free data retrieval call binding the contract method 0xe7f43c68.
//
// Solidity: function getOperator() view returns(address)
func (_UpgradeManager *UpgradeManagerCallerSession) GetOperator() (common.Address, error) {
	return _UpgradeManager.Contract.GetOperator(&_UpgradeManager.CallOpts)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _account) returns()
func (_UpgradeManager *UpgradeManagerTransactor) SetOperator(opts *bind.TransactOpts, _account common.Address) (*types.Transaction, error) {
	return _UpgradeManager.contract.Transact(opts, "setOperator", _account)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _account) returns()
func (_UpgradeManager *UpgradeManagerSession) SetOperator(_account common.Address) (*types.Transaction, error) {
	return _UpgradeManager.Contract.SetOperator(&_UpgradeManager.TransactOpts, _account)
}

// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb.
//
// Solidity: function setOperator(address _account) returns()
func (_UpgradeManager *UpgradeManagerTransactorSession) SetOperator(_account common.Address) (*types.Transaction, error) {
	return _UpgradeManager.Contract.SetOperator(&_UpgradeManager.TransactOpts, _account)
}

// Upgrade is a paid mutator transaction binding the contract method 0x6e3d9ff0.
//
// Solidity: function upgrade(address _target, string _data) returns()
func (_UpgradeManager *UpgradeManagerTransactor) Upgrade(opts *bind.TransactOpts, _target common.Address, _data string) (*types.Transaction, error) {
	return _UpgradeManager.contract.Transact(opts, "upgrade", _target, _data)
}

// Upgrade is a paid mutator transaction binding the contract method 0x6e3d9ff0.
//
// Solidity: function upgrade(address _target, string _data) returns()
func (_UpgradeManager *UpgradeManagerSession) Upgrade(_target common.Address, _data string) (*types.Transaction, error) {
	return _UpgradeManager.Contract.Upgrade(&_UpgradeManager.TransactOpts, _target, _data)
}

// Upgrade is a paid mutator transaction binding the contract method 0x6e3d9ff0.
//
// Solidity: function upgrade(address _target, string _data) returns()
func (_UpgradeManager *UpgradeManagerTransactorSession) Upgrade(_target common.Address, _data string) (*types.Transaction, error) {
	return _UpgradeManager.Contract.Upgrade(&_UpgradeManager.TransactOpts, _target, _data)
}

// UpgradeManagerConfigUpdateAddressIterator is returned from FilterConfigUpdateAddress and is used to iterate over the raw logs and unpacked data for ConfigUpdateAddress events raised by the UpgradeManager contract.
type UpgradeManagerConfigUpdateAddressIterator struct {
	Event *UpgradeManagerConfigUpdateAddress // 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 *UpgradeManagerConfigUpdateAddressIterator) 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(UpgradeManagerConfigUpdateAddress)
			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(UpgradeManagerConfigUpdateAddress)
		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 *UpgradeManagerConfigUpdateAddressIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *UpgradeManagerConfigUpdateAddressIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// UpgradeManagerConfigUpdateAddress represents a ConfigUpdateAddress event raised by the UpgradeManager contract.
type UpgradeManagerConfigUpdateAddress struct {
	Name            string
	OldValue        common.Address
	NewValue        common.Address
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateAddress is a free log retrieval operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) FilterConfigUpdateAddress(opts *bind.FilterOpts) (*UpgradeManagerConfigUpdateAddressIterator, error) {

	logs, sub, err := _UpgradeManager.contract.FilterLogs(opts, "ConfigUpdateAddress")
	if err != nil {
		return nil, err
	}
	return &UpgradeManagerConfigUpdateAddressIterator{contract: _UpgradeManager.contract, event: "ConfigUpdateAddress", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateAddress is a free log subscription operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) WatchConfigUpdateAddress(opts *bind.WatchOpts, sink chan<- *UpgradeManagerConfigUpdateAddress) (event.Subscription, error) {

	logs, sub, err := _UpgradeManager.contract.WatchLogs(opts, "ConfigUpdateAddress")
	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(UpgradeManagerConfigUpdateAddress)
				if err := _UpgradeManager.contract.UnpackLog(event, "ConfigUpdateAddress", 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
}

// ParseConfigUpdateAddress is a log parse operation binding the contract event 0xe821ac8084a7329d09d00cf1380cba50edea5f54a7bd453d49a9c354f565d4a0.
//
// Solidity: event ConfigUpdateAddress(string name, address oldValue, address newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) ParseConfigUpdateAddress(log types.Log) (*UpgradeManagerConfigUpdateAddress, error) {
	event := new(UpgradeManagerConfigUpdateAddress)
	if err := _UpgradeManager.contract.UnpackLog(event, "ConfigUpdateAddress", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// UpgradeManagerConfigUpdateBoolIterator is returned from FilterConfigUpdateBool and is used to iterate over the raw logs and unpacked data for ConfigUpdateBool events raised by the UpgradeManager contract.
type UpgradeManagerConfigUpdateBoolIterator struct {
	Event *UpgradeManagerConfigUpdateBool // 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 *UpgradeManagerConfigUpdateBoolIterator) 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(UpgradeManagerConfigUpdateBool)
			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(UpgradeManagerConfigUpdateBool)
		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 *UpgradeManagerConfigUpdateBoolIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *UpgradeManagerConfigUpdateBoolIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// UpgradeManagerConfigUpdateBool represents a ConfigUpdateBool event raised by the UpgradeManager contract.
type UpgradeManagerConfigUpdateBool struct {
	Name            string
	OldValue        bool
	NewValue        bool
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateBool is a free log retrieval operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) FilterConfigUpdateBool(opts *bind.FilterOpts) (*UpgradeManagerConfigUpdateBoolIterator, error) {

	logs, sub, err := _UpgradeManager.contract.FilterLogs(opts, "ConfigUpdateBool")
	if err != nil {
		return nil, err
	}
	return &UpgradeManagerConfigUpdateBoolIterator{contract: _UpgradeManager.contract, event: "ConfigUpdateBool", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateBool is a free log subscription operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) WatchConfigUpdateBool(opts *bind.WatchOpts, sink chan<- *UpgradeManagerConfigUpdateBool) (event.Subscription, error) {

	logs, sub, err := _UpgradeManager.contract.WatchLogs(opts, "ConfigUpdateBool")
	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(UpgradeManagerConfigUpdateBool)
				if err := _UpgradeManager.contract.UnpackLog(event, "ConfigUpdateBool", 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
}

// ParseConfigUpdateBool is a log parse operation binding the contract event 0x5edb308c5eddc69bcd31b4e689c5eed2fbd3155ae57915d1cad05425f6c1a39b.
//
// Solidity: event ConfigUpdateBool(string name, bool oldValue, bool newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) ParseConfigUpdateBool(log types.Log) (*UpgradeManagerConfigUpdateBool, error) {
	event := new(UpgradeManagerConfigUpdateBool)
	if err := _UpgradeManager.contract.UnpackLog(event, "ConfigUpdateBool", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// UpgradeManagerConfigUpdateIntIterator is returned from FilterConfigUpdateInt and is used to iterate over the raw logs and unpacked data for ConfigUpdateInt events raised by the UpgradeManager contract.
type UpgradeManagerConfigUpdateIntIterator struct {
	Event *UpgradeManagerConfigUpdateInt // 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 *UpgradeManagerConfigUpdateIntIterator) 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(UpgradeManagerConfigUpdateInt)
			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(UpgradeManagerConfigUpdateInt)
		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 *UpgradeManagerConfigUpdateIntIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *UpgradeManagerConfigUpdateIntIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// UpgradeManagerConfigUpdateInt represents a ConfigUpdateInt event raised by the UpgradeManager contract.
type UpgradeManagerConfigUpdateInt struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateInt is a free log retrieval operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) FilterConfigUpdateInt(opts *bind.FilterOpts) (*UpgradeManagerConfigUpdateIntIterator, error) {

	logs, sub, err := _UpgradeManager.contract.FilterLogs(opts, "ConfigUpdateInt")
	if err != nil {
		return nil, err
	}
	return &UpgradeManagerConfigUpdateIntIterator{contract: _UpgradeManager.contract, event: "ConfigUpdateInt", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateInt is a free log subscription operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) WatchConfigUpdateInt(opts *bind.WatchOpts, sink chan<- *UpgradeManagerConfigUpdateInt) (event.Subscription, error) {

	logs, sub, err := _UpgradeManager.contract.WatchLogs(opts, "ConfigUpdateInt")
	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(UpgradeManagerConfigUpdateInt)
				if err := _UpgradeManager.contract.UnpackLog(event, "ConfigUpdateInt", 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
}

// ParseConfigUpdateInt is a log parse operation binding the contract event 0xb5114472b89d1126433287defb6308bbabdb95b6ce5dd949ab2c151ed7b1ff4c.
//
// Solidity: event ConfigUpdateInt(string name, int256 oldValue, int256 newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) ParseConfigUpdateInt(log types.Log) (*UpgradeManagerConfigUpdateInt, error) {
	event := new(UpgradeManagerConfigUpdateInt)
	if err := _UpgradeManager.contract.UnpackLog(event, "ConfigUpdateInt", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// UpgradeManagerConfigUpdateUintIterator is returned from FilterConfigUpdateUint and is used to iterate over the raw logs and unpacked data for ConfigUpdateUint events raised by the UpgradeManager contract.
type UpgradeManagerConfigUpdateUintIterator struct {
	Event *UpgradeManagerConfigUpdateUint // 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 *UpgradeManagerConfigUpdateUintIterator) 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(UpgradeManagerConfigUpdateUint)
			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(UpgradeManagerConfigUpdateUint)
		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 *UpgradeManagerConfigUpdateUintIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *UpgradeManagerConfigUpdateUintIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// UpgradeManagerConfigUpdateUint represents a ConfigUpdateUint event raised by the UpgradeManager contract.
type UpgradeManagerConfigUpdateUint struct {
	Name            string
	OldValue        *big.Int
	NewValue        *big.Int
	AppliesAtHeight *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterConfigUpdateUint is a free log retrieval operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) FilterConfigUpdateUint(opts *bind.FilterOpts) (*UpgradeManagerConfigUpdateUintIterator, error) {

	logs, sub, err := _UpgradeManager.contract.FilterLogs(opts, "ConfigUpdateUint")
	if err != nil {
		return nil, err
	}
	return &UpgradeManagerConfigUpdateUintIterator{contract: _UpgradeManager.contract, event: "ConfigUpdateUint", logs: logs, sub: sub}, nil
}

// WatchConfigUpdateUint is a free log subscription operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) WatchConfigUpdateUint(opts *bind.WatchOpts, sink chan<- *UpgradeManagerConfigUpdateUint) (event.Subscription, error) {

	logs, sub, err := _UpgradeManager.contract.WatchLogs(opts, "ConfigUpdateUint")
	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(UpgradeManagerConfigUpdateUint)
				if err := _UpgradeManager.contract.UnpackLog(event, "ConfigUpdateUint", 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
}

// ParseConfigUpdateUint is a log parse operation binding the contract event 0x207e45ce6f2191c3efffe5d0d91591cf81afd23cbf4bd746981d7a8a8dcfe1ba.
//
// Solidity: event ConfigUpdateUint(string name, uint256 oldValue, uint256 newValue, uint256 appliesAtHeight)
func (_UpgradeManager *UpgradeManagerFilterer) ParseConfigUpdateUint(log types.Log) (*UpgradeManagerConfigUpdateUint, error) {
	event := new(UpgradeManagerConfigUpdateUint)
	if err := _UpgradeManager.contract.UnpackLog(event, "ConfigUpdateUint", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// UpgradeManagerUpgradeResultIterator is returned from FilterUpgradeResult and is used to iterate over the raw logs and unpacked data for UpgradeResult events raised by the UpgradeManager contract.
type UpgradeManagerUpgradeResultIterator struct {
	Event *UpgradeManagerUpgradeResult // 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 *UpgradeManagerUpgradeResultIterator) 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(UpgradeManagerUpgradeResult)
			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(UpgradeManagerUpgradeResult)
		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 *UpgradeManagerUpgradeResultIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *UpgradeManagerUpgradeResultIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// UpgradeManagerUpgradeResult represents a UpgradeResult event raised by the UpgradeManager contract.
type UpgradeManagerUpgradeResult struct {
	ContractAddress common.Address
	Success         bool
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterUpgradeResult is a free log retrieval operation binding the contract event 0x852faebd7b6261599c399849128319e84cd07abf61cfdea131405ee1d3934798.
//
// Solidity: event UpgradeResult(address indexed contractAddress, bool success)
func (_UpgradeManager *UpgradeManagerFilterer) FilterUpgradeResult(opts *bind.FilterOpts, contractAddress []common.Address) (*UpgradeManagerUpgradeResultIterator, error) {

	var contractAddressRule []interface{}
	for _, contractAddressItem := range contractAddress {
		contractAddressRule = append(contractAddressRule, contractAddressItem)
	}

	logs, sub, err := _UpgradeManager.contract.FilterLogs(opts, "UpgradeResult", contractAddressRule)
	if err != nil {
		return nil, err
	}
	return &UpgradeManagerUpgradeResultIterator{contract: _UpgradeManager.contract, event: "UpgradeResult", logs: logs, sub: sub}, nil
}

// WatchUpgradeResult is a free log subscription operation binding the contract event 0x852faebd7b6261599c399849128319e84cd07abf61cfdea131405ee1d3934798.
//
// Solidity: event UpgradeResult(address indexed contractAddress, bool success)
func (_UpgradeManager *UpgradeManagerFilterer) WatchUpgradeResult(opts *bind.WatchOpts, sink chan<- *UpgradeManagerUpgradeResult, contractAddress []common.Address) (event.Subscription, error) {

	var contractAddressRule []interface{}
	for _, contractAddressItem := range contractAddress {
		contractAddressRule = append(contractAddressRule, contractAddressItem)
	}

	logs, sub, err := _UpgradeManager.contract.WatchLogs(opts, "UpgradeResult", contractAddressRule)
	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(UpgradeManagerUpgradeResult)
				if err := _UpgradeManager.contract.UnpackLog(event, "UpgradeResult", 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
}

// ParseUpgradeResult is a log parse operation binding the contract event 0x852faebd7b6261599c399849128319e84cd07abf61cfdea131405ee1d3934798.
//
// Solidity: event UpgradeResult(address indexed contractAddress, bool success)
func (_UpgradeManager *UpgradeManagerFilterer) ParseUpgradeResult(log types.Log) (*UpgradeManagerUpgradeResult, error) {
	event := new(UpgradeManagerUpgradeResult)
	if err := _UpgradeManager.contract.UnpackLog(event, "UpgradeResult", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// UpgradeableMetaData contains all meta data concerning the Upgradeable contract.
var UpgradeableMetaData = &bind.MetaData{
	ABI: "[]",
}

// UpgradeableABI is the input ABI used to generate the binding from.
// Deprecated: Use UpgradeableMetaData.ABI instead.
var UpgradeableABI = UpgradeableMetaData.ABI

// Upgradeable is an auto generated Go binding around an Ethereum contract.
type Upgradeable struct {
	UpgradeableCaller     // Read-only binding to the contract
	UpgradeableTransactor // Write-only binding to the contract
	UpgradeableFilterer   // Log filterer for contract events
}

// UpgradeableCaller is an auto generated read-only Go binding around an Ethereum contract.
type UpgradeableCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// UpgradeableTransactor is an auto generated write-only Go binding around an Ethereum contract.
type UpgradeableTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// UpgradeableFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type UpgradeableFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// UpgradeableSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type UpgradeableSession struct {
	Contract     *Upgradeable      // 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
}

// UpgradeableCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type UpgradeableCallerSession struct {
	Contract *UpgradeableCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts      // Call options to use throughout this session
}

// UpgradeableTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type UpgradeableTransactorSession struct {
	Contract     *UpgradeableTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
}

// UpgradeableRaw is an auto generated low-level Go binding around an Ethereum contract.
type UpgradeableRaw struct {
	Contract *Upgradeable // Generic contract binding to access the raw methods on
}

// UpgradeableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type UpgradeableCallerRaw struct {
	Contract *UpgradeableCaller // Generic read-only contract binding to access the raw methods on
}

// UpgradeableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type UpgradeableTransactorRaw struct {
	Contract *UpgradeableTransactor // Generic write-only contract binding to access the raw methods on
}

// NewUpgradeable creates a new instance of Upgradeable, bound to a specific deployed contract.
func NewUpgradeable(address common.Address, backend bind.ContractBackend) (*Upgradeable, error) {
	contract, err := bindUpgradeable(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Upgradeable{UpgradeableCaller: UpgradeableCaller{contract: contract}, UpgradeableTransactor: UpgradeableTransactor{contract: contract}, UpgradeableFilterer: UpgradeableFilterer{contract: contract}}, nil
}

// NewUpgradeableCaller creates a new read-only instance of Upgradeable, bound to a specific deployed contract.
func NewUpgradeableCaller(address common.Address, caller bind.ContractCaller) (*UpgradeableCaller, error) {
	contract, err := bindUpgradeable(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &UpgradeableCaller{contract: contract}, nil
}

// NewUpgradeableTransactor creates a new write-only instance of Upgradeable, bound to a specific deployed contract.
func NewUpgradeableTransactor(address common.Address, transactor bind.ContractTransactor) (*UpgradeableTransactor, error) {
	contract, err := bindUpgradeable(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &UpgradeableTransactor{contract: contract}, nil
}

// NewUpgradeableFilterer creates a new log filterer instance of Upgradeable, bound to a specific deployed contract.
func NewUpgradeableFilterer(address common.Address, filterer bind.ContractFilterer) (*UpgradeableFilterer, error) {
	contract, err := bindUpgradeable(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &UpgradeableFilterer{contract: contract}, nil
}

// bindUpgradeable binds a generic wrapper to an already deployed contract.
func bindUpgradeable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(UpgradeableABI))
	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 (_Upgradeable *UpgradeableRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Upgradeable.Contract.UpgradeableCaller.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 (_Upgradeable *UpgradeableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Upgradeable.Contract.UpgradeableTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Upgradeable *UpgradeableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Upgradeable.Contract.UpgradeableTransactor.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 (_Upgradeable *UpgradeableCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Upgradeable.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 (_Upgradeable *UpgradeableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Upgradeable.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Upgradeable *UpgradeableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Upgradeable.Contract.contract.Transact(opts, method, params...)
}
