/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
  Contract,
  ContractFactory,
  ContractTransactionResponse,
  Interface,
} from "ethers";
import type {
  Signer,
  BytesLike,
  AddressLike,
  ContractDeployTransaction,
  ContractRunner,
} from "ethers";
import type { NonPayableOverrides } from "../common";
import type { UUPSProxy, UUPSProxyInterface } from "../UUPSProxy";

const _abi = [
  {
    type: "constructor",
    inputs: [
      {
        name: "_implementation",
        type: "address",
        internalType: "address",
      },
      {
        name: "_data",
        type: "bytes",
        internalType: "bytes",
      },
    ],
    stateMutability: "nonpayable",
  },
  {
    type: "fallback",
    stateMutability: "payable",
  },
  {
    type: "function",
    name: "getImplementation",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "event",
    name: "Upgraded",
    inputs: [
      {
        name: "implementation",
        type: "address",
        indexed: true,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "error",
    name: "AddressEmptyCode",
    inputs: [
      {
        name: "target",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "ERC1967InvalidImplementation",
    inputs: [
      {
        name: "implementation",
        type: "address",
        internalType: "address",
      },
    ],
  },
  {
    type: "error",
    name: "ERC1967NonPayable",
    inputs: [],
  },
  {
    type: "error",
    name: "FailedCall",
    inputs: [],
  },
] as const;

const _bytecode =
  "0x608060405234801561000f575f5ffd5b5060405161042b38038061042b83398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60ee8061033d5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b60216050565b005b348015602d575f5ffd5b506034605e565b6040516001600160a01b03909116815260200160405180910390f35b605c6058606a565b609b565b565b5f6065606a565b905090565b5f60657f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b365f5f375f5f365f845af43d5f5f3e80801560b4573d5ff35b3d5ffdfea26469706673582212201f88a9384bfa30d2906e52bacd1d97e51a08a4400b82dd22dfa2452b39c5cca764736f6c634300081c0033";

type UUPSProxyConstructorParams =
  | [signer?: Signer]
  | ConstructorParameters<typeof ContractFactory>;

const isSuperArgs = (
  xs: UUPSProxyConstructorParams
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;

export class UUPSProxy__factory extends ContractFactory {
  constructor(...args: UUPSProxyConstructorParams) {
    if (isSuperArgs(args)) {
      super(...args);
    } else {
      super(_abi, _bytecode, args[0]);
    }
  }

  override getDeployTransaction(
    _implementation: AddressLike,
    _data: BytesLike,
    overrides?: NonPayableOverrides & { from?: string }
  ): Promise<ContractDeployTransaction> {
    return super.getDeployTransaction(_implementation, _data, overrides || {});
  }
  override deploy(
    _implementation: AddressLike,
    _data: BytesLike,
    overrides?: NonPayableOverrides & { from?: string }
  ) {
    return super.deploy(_implementation, _data, overrides || {}) as Promise<
      UUPSProxy & {
        deploymentTransaction(): ContractTransactionResponse;
      }
    >;
  }
  override connect(runner: ContractRunner | null): UUPSProxy__factory {
    return super.connect(runner) as UUPSProxy__factory;
  }

  static readonly bytecode = _bytecode;
  static readonly abi = _abi;
  static createInterface(): UUPSProxyInterface {
    return new Interface(_abi) as UUPSProxyInterface;
  }
  static connect(address: string, runner?: ContractRunner | null): UUPSProxy {
    return new Contract(address, _abi, runner) as unknown as UUPSProxy;
  }
}
