import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PopulatedTransaction, Signer, utils } from "ethers";
import type { FunctionFragment, Result, EventFragment } from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from "./common";
export declare type BaseVotingWeightInfoStruct = {
    ownWeight: PromiseOrValue<BigNumberish>;
    votingAgent: PromiseOrValue<string>;
    delegationStatus: PromiseOrValue<BigNumberish>;
    lockedUntil: PromiseOrValue<BigNumberish>;
};
export declare type BaseVotingWeightInfoStructOutput = [
    BigNumber,
    string,
    number,
    BigNumber
] & {
    ownWeight: BigNumber;
    votingAgent: string;
    delegationStatus: number;
    lockedUntil: BigNumber;
};
export declare type MembershipProposalDetailsStruct = {
    addressToAdd: PromiseOrValue<string>;
    addressToRemove: PromiseOrValue<string>;
};
export declare type MembershipProposalDetailsStructOutput = [string, string] & {
    addressToAdd: string;
    addressToRemove: string;
};
export declare namespace IVoting {
    type VotingParamsStruct = {
        votingStartTime: PromiseOrValue<BigNumberish>;
        votingEndTime: PromiseOrValue<BigNumberish>;
        vetoEndTime: PromiseOrValue<BigNumberish>;
        proposalExecutionP: PromiseOrValue<BigNumberish>;
        requiredQuorum: PromiseOrValue<BigNumberish>;
        requiredMajority: PromiseOrValue<BigNumberish>;
        requiredSMajority: PromiseOrValue<BigNumberish>;
        requiredSQuorum: PromiseOrValue<BigNumberish>;
    };
    type VotingParamsStructOutput = [
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        votingStartTime: BigNumber;
        votingEndTime: BigNumber;
        vetoEndTime: BigNumber;
        proposalExecutionP: BigNumber;
        requiredQuorum: BigNumber;
        requiredMajority: BigNumber;
        requiredSMajority: BigNumber;
        requiredSQuorum: BigNumber;
    };
    type VotingCountersStruct = {
        weightFor: PromiseOrValue<BigNumberish>;
        weightAgainst: PromiseOrValue<BigNumberish>;
        vetosCount: PromiseOrValue<BigNumberish>;
    };
    type VotingCountersStructOutput = [BigNumber, BigNumber, BigNumber] & {
        weightFor: BigNumber;
        weightAgainst: BigNumber;
        vetosCount: BigNumber;
    };
    type BaseProposalStruct = {
        remark: PromiseOrValue<string>;
        params: IVoting.VotingParamsStruct;
        counters: IVoting.VotingCountersStruct;
        executed: PromiseOrValue<boolean>;
    };
    type BaseProposalStructOutput = [
        string,
        IVoting.VotingParamsStructOutput,
        IVoting.VotingCountersStructOutput,
        boolean
    ] & {
        remark: string;
        params: IVoting.VotingParamsStructOutput;
        counters: IVoting.VotingCountersStructOutput;
        executed: boolean;
    };
    type VotingStatsStruct = {
        requiredQuorum: PromiseOrValue<BigNumberish>;
        currentQuorum: PromiseOrValue<BigNumberish>;
        requiredMajority: PromiseOrValue<BigNumberish>;
        currentMajority: PromiseOrValue<BigNumberish>;
        currentVetoPercentage: PromiseOrValue<BigNumberish>;
    };
    type VotingStatsStructOutput = [
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        requiredQuorum: BigNumber;
        currentQuorum: BigNumber;
        requiredMajority: BigNumber;
        currentMajority: BigNumber;
        currentVetoPercentage: BigNumber;
    };
}
export declare namespace IQthVoting {
    type VotingWeightInfoStruct = {
        hasAlreadyVoted: PromiseOrValue<boolean>;
        canVote: PromiseOrValue<boolean>;
        base: BaseVotingWeightInfoStruct;
    };
    type VotingWeightInfoStructOutput = [
        boolean,
        boolean,
        BaseVotingWeightInfoStructOutput
    ] & {
        hasAlreadyVoted: boolean;
        canVote: boolean;
        base: BaseVotingWeightInfoStructOutput;
    };
}
export interface EPDR_MembershipVotingInterface extends utils.Interface {
    functions: {
        "createAddExpertProposal(string,address)": FunctionFragment;
        "createChangeExpertProposal(string,address,address)": FunctionFragment;
        "createRemoveExpertProposal(string,address)": FunctionFragment;
        "execute(uint256)": FunctionFragment;
        "expertKey()": FunctionFragment;
        "getProposal(uint256)": FunctionFragment;
        "getProposalStats(uint256)": FunctionFragment;
        "getStatus(uint256)": FunctionFragment;
        "getVetosNumber(uint256)": FunctionFragment;
        "getVetosPercentage(uint256)": FunctionFragment;
        "getVotesAgainst(uint256)": FunctionFragment;
        "getVotesFor(uint256)": FunctionFragment;
        "getVotingWeightInfo(uint256)": FunctionFragment;
        "hasRootVetoed(uint256,address)": FunctionFragment;
        "hasUserVoted(uint256,address)": FunctionFragment;
        "majorityKey()": FunctionFragment;
        "proposalCount()": FunctionFragment;
        "proposals(uint256)": FunctionFragment;
        "veto(uint256)": FunctionFragment;
        "vetoPeriodKey()": FunctionFragment;
        "voteAgainst(uint256)": FunctionFragment;
        "voteFor(uint256)": FunctionFragment;
        "votingPeriodKey()": FunctionFragment;
        "votingQuorumKey()": FunctionFragment;
        "initialize(address)": FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: "createAddExpertProposal" | "createChangeExpertProposal" | "createRemoveExpertProposal" | "execute" | "expertKey" | "getProposal" | "getProposalStats" | "getStatus" | "getVetosNumber" | "getVetosPercentage" | "getVotesAgainst" | "getVotesFor" | "getVotingWeightInfo" | "hasRootVetoed" | "hasUserVoted" | "majorityKey" | "proposalCount" | "proposals" | "veto" | "vetoPeriodKey" | "voteAgainst" | "voteFor" | "votingPeriodKey" | "votingQuorumKey" | "initialize"): FunctionFragment;
    encodeFunctionData(functionFragment: "createAddExpertProposal", values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "createChangeExpertProposal", values: [
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<string>
    ]): string;
    encodeFunctionData(functionFragment: "createRemoveExpertProposal", values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "execute", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "expertKey", values?: undefined): string;
    encodeFunctionData(functionFragment: "getProposal", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getProposalStats", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getStatus", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getVetosNumber", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getVetosPercentage", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getVotesAgainst", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getVotesFor", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getVotingWeightInfo", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "hasRootVetoed", values: [PromiseOrValue<BigNumberish>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "hasUserVoted", values: [PromiseOrValue<BigNumberish>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "majorityKey", values?: undefined): string;
    encodeFunctionData(functionFragment: "proposalCount", values?: undefined): string;
    encodeFunctionData(functionFragment: "proposals", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "veto", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "vetoPeriodKey", values?: undefined): string;
    encodeFunctionData(functionFragment: "voteAgainst", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "voteFor", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "votingPeriodKey", values?: undefined): string;
    encodeFunctionData(functionFragment: "votingQuorumKey", values?: undefined): string;
    encodeFunctionData(functionFragment: "initialize", values: [PromiseOrValue<string>]): string;
    decodeFunctionResult(functionFragment: "createAddExpertProposal", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "createChangeExpertProposal", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "createRemoveExpertProposal", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "expertKey", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getProposal", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getProposalStats", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getStatus", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getVetosNumber", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getVetosPercentage", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getVotesAgainst", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getVotesFor", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getVotingWeightInfo", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "hasRootVetoed", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "hasUserVoted", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "majorityKey", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "proposalCount", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "proposals", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "veto", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "vetoPeriodKey", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "voteAgainst", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "voteFor", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "votingPeriodKey", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "votingQuorumKey", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
    events: {
        "ProposalCreated(uint256,tuple)": EventFragment;
        "ProposalExecuted(uint256)": EventFragment;
        "QuorumReached(uint256)": EventFragment;
        "UserVoted(uint256,uint8,uint256)": EventFragment;
        "VetoOccurred(uint256,address)": EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: "ProposalCreated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "ProposalExecuted"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "QuorumReached"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "UserVoted"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "VetoOccurred"): EventFragment;
}
export interface ProposalCreatedEventObject {
    _id: BigNumber;
    _proposal: IVoting.BaseProposalStructOutput;
}
export declare type ProposalCreatedEvent = TypedEvent<[
    BigNumber,
    IVoting.BaseProposalStructOutput
], ProposalCreatedEventObject>;
export declare type ProposalCreatedEventFilter = TypedEventFilter<ProposalCreatedEvent>;
export interface ProposalExecutedEventObject {
    _proposalId: BigNumber;
}
export declare type ProposalExecutedEvent = TypedEvent<[
    BigNumber
], ProposalExecutedEventObject>;
export declare type ProposalExecutedEventFilter = TypedEventFilter<ProposalExecutedEvent>;
export interface QuorumReachedEventObject {
    id: BigNumber;
}
export declare type QuorumReachedEvent = TypedEvent<[
    BigNumber
], QuorumReachedEventObject>;
export declare type QuorumReachedEventFilter = TypedEventFilter<QuorumReachedEvent>;
export interface UserVotedEventObject {
    _proposalId: BigNumber;
    _votingOption: number;
    _amount: BigNumber;
}
export declare type UserVotedEvent = TypedEvent<[
    BigNumber,
    number,
    BigNumber
], UserVotedEventObject>;
export declare type UserVotedEventFilter = TypedEventFilter<UserVotedEvent>;
export interface VetoOccurredEventObject {
    id: BigNumber;
    sender: string;
}
export declare type VetoOccurredEvent = TypedEvent<[
    BigNumber,
    string
], VetoOccurredEventObject>;
export declare type VetoOccurredEventFilter = TypedEventFilter<VetoOccurredEvent>;
export interface EPDR_MembershipVoting extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: EPDR_MembershipVotingInterface;
    queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
    listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
    listeners(eventName?: string): Array<Listener>;
    removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
    removeAllListeners(eventName?: string): this;
    off: OnEvent<this>;
    on: OnEvent<this>;
    once: OnEvent<this>;
    removeListener: OnEvent<this>;
    functions: {
        createAddExpertProposal(_remark: PromiseOrValue<string>, _newExpert: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        createChangeExpertProposal(_remark: PromiseOrValue<string>, _newExpert: PromiseOrValue<string>, _expertToBeChanged: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        createRemoveExpertProposal(_remark: PromiseOrValue<string>, _toRemoveExpert: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        execute(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        expertKey(overrides?: CallOverrides): Promise<[string]>;
        getProposal(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[IVoting.BaseProposalStructOutput]>;
        getProposalStats(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[IVoting.VotingStatsStructOutput]>;
        getStatus(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[number]>;
        getVetosNumber(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        getVetosPercentage(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        getVotesAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        getVotesFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        getVotingWeightInfo(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[IQthVoting.VotingWeightInfoStructOutput]>;
        hasRootVetoed(arg0: PromiseOrValue<BigNumberish>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        hasUserVoted(arg0: PromiseOrValue<BigNumberish>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        majorityKey(overrides?: CallOverrides): Promise<[string]>;
        proposalCount(overrides?: CallOverrides): Promise<[BigNumber]>;
        proposals(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[
            IVoting.BaseProposalStructOutput,
            MembershipProposalDetailsStructOutput
        ] & {
            base: IVoting.BaseProposalStructOutput;
            proposalDetails: MembershipProposalDetailsStructOutput;
        }>;
        veto(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        vetoPeriodKey(overrides?: CallOverrides): Promise<[string]>;
        voteAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        voteFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        votingPeriodKey(overrides?: CallOverrides): Promise<[string]>;
        votingQuorumKey(overrides?: CallOverrides): Promise<[string]>;
        initialize(_registry: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    createAddExpertProposal(_remark: PromiseOrValue<string>, _newExpert: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    createChangeExpertProposal(_remark: PromiseOrValue<string>, _newExpert: PromiseOrValue<string>, _expertToBeChanged: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    createRemoveExpertProposal(_remark: PromiseOrValue<string>, _toRemoveExpert: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    execute(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    expertKey(overrides?: CallOverrides): Promise<string>;
    getProposal(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IVoting.BaseProposalStructOutput>;
    getProposalStats(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IVoting.VotingStatsStructOutput>;
    getStatus(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<number>;
    getVetosNumber(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    getVetosPercentage(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    getVotesAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    getVotesFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    getVotingWeightInfo(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IQthVoting.VotingWeightInfoStructOutput>;
    hasRootVetoed(arg0: PromiseOrValue<BigNumberish>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    hasUserVoted(arg0: PromiseOrValue<BigNumberish>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    majorityKey(overrides?: CallOverrides): Promise<string>;
    proposalCount(overrides?: CallOverrides): Promise<BigNumber>;
    proposals(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[
        IVoting.BaseProposalStructOutput,
        MembershipProposalDetailsStructOutput
    ] & {
        base: IVoting.BaseProposalStructOutput;
        proposalDetails: MembershipProposalDetailsStructOutput;
    }>;
    veto(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    vetoPeriodKey(overrides?: CallOverrides): Promise<string>;
    voteAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    voteFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    votingPeriodKey(overrides?: CallOverrides): Promise<string>;
    votingQuorumKey(overrides?: CallOverrides): Promise<string>;
    initialize(_registry: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        createAddExpertProposal(_remark: PromiseOrValue<string>, _newExpert: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        createChangeExpertProposal(_remark: PromiseOrValue<string>, _newExpert: PromiseOrValue<string>, _expertToBeChanged: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        createRemoveExpertProposal(_remark: PromiseOrValue<string>, _toRemoveExpert: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        execute(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        expertKey(overrides?: CallOverrides): Promise<string>;
        getProposal(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IVoting.BaseProposalStructOutput>;
        getProposalStats(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IVoting.VotingStatsStructOutput>;
        getStatus(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<number>;
        getVetosNumber(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVetosPercentage(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVotesAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVotesFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVotingWeightInfo(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<IQthVoting.VotingWeightInfoStructOutput>;
        hasRootVetoed(arg0: PromiseOrValue<BigNumberish>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        hasUserVoted(arg0: PromiseOrValue<BigNumberish>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        majorityKey(overrides?: CallOverrides): Promise<string>;
        proposalCount(overrides?: CallOverrides): Promise<BigNumber>;
        proposals(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[
            IVoting.BaseProposalStructOutput,
            MembershipProposalDetailsStructOutput
        ] & {
            base: IVoting.BaseProposalStructOutput;
            proposalDetails: MembershipProposalDetailsStructOutput;
        }>;
        veto(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        vetoPeriodKey(overrides?: CallOverrides): Promise<string>;
        voteAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        voteFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        votingPeriodKey(overrides?: CallOverrides): Promise<string>;
        votingQuorumKey(overrides?: CallOverrides): Promise<string>;
        initialize(_registry: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        "ProposalCreated(uint256,tuple)"(_id?: null, _proposal?: null): ProposalCreatedEventFilter;
        ProposalCreated(_id?: null, _proposal?: null): ProposalCreatedEventFilter;
        "ProposalExecuted(uint256)"(_proposalId?: PromiseOrValue<BigNumberish> | null): ProposalExecutedEventFilter;
        ProposalExecuted(_proposalId?: PromiseOrValue<BigNumberish> | null): ProposalExecutedEventFilter;
        "QuorumReached(uint256)"(id?: null): QuorumReachedEventFilter;
        QuorumReached(id?: null): QuorumReachedEventFilter;
        "UserVoted(uint256,uint8,uint256)"(_proposalId?: PromiseOrValue<BigNumberish> | null, _votingOption?: null, _amount?: null): UserVotedEventFilter;
        UserVoted(_proposalId?: PromiseOrValue<BigNumberish> | null, _votingOption?: null, _amount?: null): UserVotedEventFilter;
        "VetoOccurred(uint256,address)"(id?: PromiseOrValue<BigNumberish> | null, sender?: PromiseOrValue<string> | null): VetoOccurredEventFilter;
        VetoOccurred(id?: PromiseOrValue<BigNumberish> | null, sender?: PromiseOrValue<string> | null): VetoOccurredEventFilter;
    };
    estimateGas: {
        createAddExpertProposal(_remark: PromiseOrValue<string>, _newExpert: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        createChangeExpertProposal(_remark: PromiseOrValue<string>, _newExpert: PromiseOrValue<string>, _expertToBeChanged: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        createRemoveExpertProposal(_remark: PromiseOrValue<string>, _toRemoveExpert: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        execute(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        expertKey(overrides?: CallOverrides): Promise<BigNumber>;
        getProposal(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getProposalStats(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getStatus(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVetosNumber(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVetosPercentage(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVotesAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVotesFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        getVotingWeightInfo(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        hasRootVetoed(arg0: PromiseOrValue<BigNumberish>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        hasUserVoted(arg0: PromiseOrValue<BigNumberish>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        majorityKey(overrides?: CallOverrides): Promise<BigNumber>;
        proposalCount(overrides?: CallOverrides): Promise<BigNumber>;
        proposals(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        veto(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        vetoPeriodKey(overrides?: CallOverrides): Promise<BigNumber>;
        voteAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        voteFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        votingPeriodKey(overrides?: CallOverrides): Promise<BigNumber>;
        votingQuorumKey(overrides?: CallOverrides): Promise<BigNumber>;
        initialize(_registry: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        createAddExpertProposal(_remark: PromiseOrValue<string>, _newExpert: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        createChangeExpertProposal(_remark: PromiseOrValue<string>, _newExpert: PromiseOrValue<string>, _expertToBeChanged: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        createRemoveExpertProposal(_remark: PromiseOrValue<string>, _toRemoveExpert: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        execute(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        expertKey(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getProposal(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getProposalStats(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getStatus(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getVetosNumber(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getVetosPercentage(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getVotesAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getVotesFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getVotingWeightInfo(_proposalId: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        hasRootVetoed(arg0: PromiseOrValue<BigNumberish>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        hasUserVoted(arg0: PromiseOrValue<BigNumberish>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        majorityKey(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        proposalCount(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        proposals(arg0: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        veto(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        vetoPeriodKey(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        voteAgainst(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        voteFor(_proposalId: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        votingPeriodKey(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        votingQuorumKey(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        initialize(_registry: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
