/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
  Contract,
  ContractFactory,
  ContractTransactionResponse,
  Interface,
} from "ethers";
import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
import type { NonPayableOverrides } from "../../common";
import type {
  RandomnessSenderTest,
  RandomnessSenderTestInterface,
} from "../../Randomness.t.sol/RandomnessSenderTest";

const _abi = [
  {
    type: "function",
    name: "ADMIN_ROLE",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "bytes32",
        internalType: "bytes32",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "IS_TEST",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "bool",
        internalType: "bool",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "addrProvider",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "contract SignatureSchemeAddressProvider",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "bn254SignatureScheme",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "contract BN254SignatureScheme",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "bn254SignatureSchemeID",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "string",
        internalType: "string",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "conditions",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "bytes",
        internalType: "bytes",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "excludeArtifacts",
    inputs: [],
    outputs: [
      {
        name: "excludedArtifacts_",
        type: "string[]",
        internalType: "string[]",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "excludeContracts",
    inputs: [],
    outputs: [
      {
        name: "excludedContracts_",
        type: "address[]",
        internalType: "address[]",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "excludeSelectors",
    inputs: [],
    outputs: [
      {
        name: "excludedSelectors_",
        type: "tuple[]",
        internalType: "struct StdInvariant.FuzzSelector[]",
        components: [
          {
            name: "addr",
            type: "address",
            internalType: "address",
          },
          {
            name: "selectors",
            type: "bytes4[]",
            internalType: "bytes4[]",
          },
        ],
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "excludeSenders",
    inputs: [],
    outputs: [
      {
        name: "excludedSenders_",
        type: "address[]",
        internalType: "address[]",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "failed",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "bool",
        internalType: "bool",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "owner",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "address",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "randomnessSender",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "contract RandomnessSender",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "setUp",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "signatureSender",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "address",
        internalType: "contract SignatureSender",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "targetArtifactSelectors",
    inputs: [],
    outputs: [
      {
        name: "targetedArtifactSelectors_",
        type: "tuple[]",
        internalType: "struct StdInvariant.FuzzArtifactSelector[]",
        components: [
          {
            name: "artifact",
            type: "string",
            internalType: "string",
          },
          {
            name: "selectors",
            type: "bytes4[]",
            internalType: "bytes4[]",
          },
        ],
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "targetArtifacts",
    inputs: [],
    outputs: [
      {
        name: "targetedArtifacts_",
        type: "string[]",
        internalType: "string[]",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "targetContracts",
    inputs: [],
    outputs: [
      {
        name: "targetedContracts_",
        type: "address[]",
        internalType: "address[]",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "targetInterfaces",
    inputs: [],
    outputs: [
      {
        name: "targetedInterfaces_",
        type: "tuple[]",
        internalType: "struct StdInvariant.FuzzInterface[]",
        components: [
          {
            name: "addr",
            type: "address",
            internalType: "address",
          },
          {
            name: "artifacts",
            type: "string[]",
            internalType: "string[]",
          },
        ],
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "targetSelectors",
    inputs: [],
    outputs: [
      {
        name: "targetedSelectors_",
        type: "tuple[]",
        internalType: "struct StdInvariant.FuzzSelector[]",
        components: [
          {
            name: "addr",
            type: "address",
            internalType: "address",
          },
          {
            name: "selectors",
            type: "bytes4[]",
            internalType: "bytes4[]",
          },
        ],
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "targetSenders",
    inputs: [],
    outputs: [
      {
        name: "targetedSenders_",
        type: "address[]",
        internalType: "address[]",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "test_DeploymentConfigurations",
    inputs: [],
    outputs: [],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "test_UpdateSignatureScheme",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "test_randomnessSignatureVerification",
    inputs: [],
    outputs: [],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "test_requestRandomness",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "test_requestRandomnessWithCallback",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "test_selectArrayIndices_One_returnsAll",
    inputs: [],
    outputs: [],
    stateMutability: "pure",
  },
  {
    type: "function",
    name: "test_selectArrayIndices_ReturnsCorrectCount",
    inputs: [],
    outputs: [],
    stateMutability: "pure",
  },
  {
    type: "function",
    name: "test_selectArrayIndices_Zero_returnsEmpty",
    inputs: [],
    outputs: [],
    stateMutability: "pure",
  },
  {
    type: "function",
    name: "validPK",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "bytes",
        internalType: "bytes",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "validSignature",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "bytes",
        internalType: "bytes",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "event",
    name: "RandomnessRequested",
    inputs: [
      {
        name: "requestID",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "nonce",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "requester",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "requestedAt",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "SignatureRequestFulfilled",
    inputs: [
      {
        name: "requestID",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "signature",
        type: "bytes",
        indexed: false,
        internalType: "bytes",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "SignatureRequested",
    inputs: [
      {
        name: "requestID",
        type: "uint256",
        indexed: true,
        internalType: "uint256",
      },
      {
        name: "callback",
        type: "address",
        indexed: true,
        internalType: "address",
      },
      {
        name: "schemeID",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "message",
        type: "bytes",
        indexed: false,
        internalType: "bytes",
      },
      {
        name: "messageHashToSign",
        type: "bytes",
        indexed: false,
        internalType: "bytes",
      },
      {
        name: "condition",
        type: "bytes",
        indexed: false,
        internalType: "bytes",
      },
      {
        name: "requestedAt",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log",
    inputs: [
      {
        name: "",
        type: "string",
        indexed: false,
        internalType: "string",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_address",
    inputs: [
      {
        name: "",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_array",
    inputs: [
      {
        name: "val",
        type: "uint256[]",
        indexed: false,
        internalType: "uint256[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_array",
    inputs: [
      {
        name: "val",
        type: "int256[]",
        indexed: false,
        internalType: "int256[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_array",
    inputs: [
      {
        name: "val",
        type: "address[]",
        indexed: false,
        internalType: "address[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_bytes",
    inputs: [
      {
        name: "",
        type: "bytes",
        indexed: false,
        internalType: "bytes",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_bytes32",
    inputs: [
      {
        name: "",
        type: "bytes32",
        indexed: false,
        internalType: "bytes32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_int",
    inputs: [
      {
        name: "",
        type: "int256",
        indexed: false,
        internalType: "int256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_address",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_array",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "uint256[]",
        indexed: false,
        internalType: "uint256[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_array",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "int256[]",
        indexed: false,
        internalType: "int256[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_array",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "address[]",
        indexed: false,
        internalType: "address[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_bytes",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "bytes",
        indexed: false,
        internalType: "bytes",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_bytes32",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "bytes32",
        indexed: false,
        internalType: "bytes32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_decimal_int",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "int256",
        indexed: false,
        internalType: "int256",
      },
      {
        name: "decimals",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_decimal_uint",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
      {
        name: "decimals",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_int",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "int256",
        indexed: false,
        internalType: "int256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_string",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "string",
        indexed: false,
        internalType: "string",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_named_uint",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "val",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_string",
    inputs: [
      {
        name: "",
        type: "string",
        indexed: false,
        internalType: "string",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "log_uint",
    inputs: [
      {
        name: "",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "logs",
    inputs: [
      {
        name: "",
        type: "bytes",
        indexed: false,
        internalType: "bytes",
      },
    ],
    anonymous: false,
  },
] as const;

const _bytecode =
  "0x600c8054600160ff199182168117909255601f80549091169091179055610140604052608060a08181529061eb9460c03960259061003d908261012f565b5060405180606001604052806040815260200161eb5460409139602690610064908261012f565b5060408051602081019091525f8152602790610080908261012f565b506001608052348015610091575f5ffd5b506101e9565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806100bf57607f821691505b6020821081036100dd57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561012a57805f5260205f20601f840160051c810160208510156101085750805b601f840160051c820191505b81811015610127575f8155600101610114565b50505b505050565b81516001600160401b0381111561014857610148610097565b61015c8161015684546100ab565b846100e3565b6020601f82116001811461018e575f83156101775750848201515b5f19600385901b1c1916600184901b178455610127565b5f84815260208120601f198516915b828110156101bd578785015182556020948501946001909201910161019d565b50848210156101da57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805161e91b6102395f395f81816103580152818161048d015281816109dc01528181610a83015281816110fa015281816115fc015281816116e801528181611aff0152612b2c015261e91b5ff3fe608060405234801561000f575f5ffd5b50600436106101dc575f3560e01c80637d46810611610109578063d415afea1161009e578063e35c59d01161006e578063e35c59d0146103f7578063ee4fe0b1146103ff578063efebd38914610407578063fa7626d414610443575f5ffd5b8063d415afea146103bf578063dc6af447146103c7578063df3fafe8146103cf578063e20c9f71146103ef575f5ffd5b806393ecedd7116100d957806393ecedd71461038f578063b0464fdc14610397578063b5508aa91461039f578063ba414fa6146103a7575f5ffd5b80637d4681061461031e57806385226c811461033e5780638da5cb5b14610353578063916a17c61461037a575f5ffd5b80633e5e3c231161017f57806366d9a9a01161014f57806366d9a9a0146102a757806375b238fc146102bc57806377a33a68146102f15780637bd0199614610316575f5ffd5b80633e5e3c231461023d5780633f7286f41461024557806344ce68431461024d57806345adb35f14610292575f5ffd5b8063179c209b116101ba578063179c209b146101fa5780631ed7831c146102025780631fcc9a0a146102205780632ade388014610228575f5ffd5b80630a9254e4146101e05780630ad5dfb0146101ea57806315bbabfb146101f2575b5f5ffd5b6101e8610450565b005b6101e8610b67565b6101e8611596565b6101e8611946565b61020a611a55565b604051610217919061325f565b60405180910390f35b6101e8611ac2565b610230611d05565b60405161021791906132e5565b61020a611e4e565b61020a611eb9565b60205461026d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610217565b61029a611f24565b60405161021791906133f7565b6102af611fb0565b604051610217919061346c565b6102e37fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b604051908152602001610217565b601f5461026d90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101e8612129565b60235461026d9073ffffffffffffffffffffffffffffffffffffffff1681565b61034661226a565b6040516102179190613508565b61026d7f000000000000000000000000000000000000000000000000000000000000000081565b610382612335565b604051610217919061357d565b6101e8612438565b610382612579565b61034661267c565b6103af612747565b6040519015158152602001610217565b61029a612817565b6101e8612824565b60245461026d9073ffffffffffffffffffffffffffffffffffffffff1681565b61020a612c89565b61029a612cf4565b6101e8612d01565b61029a6040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b601f546103af9060ff1681565b6040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156104e8575f5ffd5b505af11580156104fa573d5f5f3e3d5ffd5b505050505f60405161050b90613211565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015610541573d5f5f3e3d5ffd5b50601f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405161058e9061321e565b604051809103905ff0801580156105a7573d5f5f3e3d5ffd5b50602080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081178255601f54604080518082018252600581527f424e32353400000000000000000000000000000000000000000000000000000094810194909452517fbab867da0000000000000000000000000000000000000000000000000000000081526101009091049093169263bab867da9261066592909160040161361f565b5f604051808303815f87803b15801561067c575f5ffd5b505af115801561068e573d5f5f3e3d5ffd5b505050505f602580546106a090613656565b80601f01602080910402602001604051908101604052809291908181526020018280546106cc90613656565b80156107175780601f106106ee57610100808354040283529160200191610717565b820191905f5260205f20905b8154815290600101906020018083116106fa57829003601f168201915b505050505080602001905181019061072f9190613770565b90505f60405161073e9061322b565b604051809103905ff080158015610757573d5f5f3e3d5ffd5b5090505f60405161076790613238565b604051809103905ff080158015610780573d5f5f3e3d5ffd5b5090508160405161079090613245565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff0801580156107d4573d5f5f3e3d5ffd5b5060215f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061084e6040518060600160405280602d815260200161e8b9602d913960215473ffffffffffffffffffffffffffffffffffffffff16612e10565b8060405161085b90613245565b73ffffffffffffffffffffffffffffffffffffffff90911681526040602082018190525f90820152606001604051809103905ff08015801561089f573d5f5f3e3d5ffd5b5060225f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109196040518060600160405280602e815260200161e823602e913960225473ffffffffffffffffffffffffffffffffffffffff16612e10565b602154602380547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384169081179092556022546024805490921690841617905560408051808201825286516020908101518252875151818301528251808401845281890180518301518252515191810191909152601f5492517f702ef38c000000000000000000000000000000000000000000000000000000008152939463702ef38c94610a0c947f00000000000000000000000000000000000000000000000000000000000000009261010090910416906004016137fe565b5f604051808303815f87803b158015610a23575f5ffd5b505af1158015610a35573d5f5f3e3d5ffd5b5050602480546023546040517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f000000000000000000000000000000000000000000000000000000000000000082169381019390935216925063485cc95591506044015f604051808303815f87803b158015610acf575f5ffd5b505af1158015610ae1573d5f5f3e3d5ffd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610b4c575f5ffd5b505af1158015610b5e573d5f5f3e3d5ffd5b50505050505050565b6024546040515f9173ffffffffffffffffffffffffffffffffffffffff1690610b8f90613252565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015610bc5573d5f5f3e3d5ffd5b5090505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663df3fafe86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4c919061385a565b73ffffffffffffffffffffffffffffffffffffffff1603610c6f57610c6f61388d565b60408051808201825260208082527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf68183015282516060810184528381526001935f9261e879908301396023546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff9091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b158015610d54575f5ffd5b505af1158015610d66573d5f5f3e3d5ffd5b505060245460405173ffffffffffffffffffffffffffffffffffffffff90911692508591507ff0a5ef4bc87d6534674b1469f4b31d03c6510d0f7ab353f3e53f9d1d87ead02b90610dbc908690869042906138ba565b60405180910390a38373ffffffffffffffffffffffffffffffffffffffff1663837e7cc66040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610e09575f5ffd5b505af1158015610e1b573d5f5f3e3d5ffd5b505050505f8473ffffffffffffffffffffffffffffffffffffffff16626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c9190613931565b90505f8111610e9d57610e9d61388d565b6023546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff9091169063cd802c9190602401602060405180830381865afa158015610f0a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2e9190613948565b610f3a57610f3a61388d565b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e63b5d586040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc89190613931565b600114610fd757610fd761388d565b6023546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190525f602483018190526044830152606482015273ffffffffffffffffffffffffffffffffffffffff9091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801561106e575f5ffd5b505af1158015611080573d5f5f3e3d5ffd5b50505050807f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b3695560266040516110b59190613a04565b60405180910390a26040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015611155575f5ffd5b505af1158015611167573d5f5f3e3d5ffd5b50506023546040517f5eab2b2000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635eab2b2091506111c4908490602690600401613a16565b5f604051808303815f87803b1580156111db575f5ffd5b505af11580156111ed573d5f5f3e3d5ffd5b50506023546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810185905261128c935073ffffffffffffffffffffffffffffffffffffffff909116915063cd802c91906024015b602060405180830381865afa158015611263573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112879190613948565b612e83565b6113188573ffffffffffffffffffffffffffffffffffffffff1663360131896040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fc9190613931565b602660405161130b9190613a36565b6040518091039020612ef9565b6023546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff9091169063cd802c9190602401602060405180830381865afa158015611385573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a99190613948565b156113b6576113b661388d565b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e63b5d586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611420573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114449190613931565b156114515761145161388d565b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f421ea96040518163ffffffff1660e01b81526004015f60405180830381865afa1580156114ba573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114e19190810190613ac5565b51156114ef576114ef61388d565b60235f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663571d70876040518163ffffffff1660e01b81526004015f60405180830381865afa158015611558573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261157f9190810190613ac5565b5160011461158f5761158f61388d565b5050505050565b6023546040517f91d148540000000000000000000000000000000000000000000000000000000081527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301526116769216906391d14854906044015b602060405180830381865afa15801561164d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116719190613948565b612f74565b6024546040517f91d1485400000000000000000000000000000000000000000000000000000000815261172f9173ffffffffffffffffffffffffffffffffffffffff16906391d1485490611632907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775907f00000000000000000000000000000000000000000000000000000000000000009060040191825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60235473ffffffffffffffffffffffffffffffffffffffff166117545761175461388d565b60245473ffffffffffffffffffffffffffffffffffffffff166117795761177961388d565b602054604080517f5f7c752200000000000000000000000000000000000000000000000000000000815290516118139273ffffffffffffffffffffffffffffffffffffffff1691635f7c7522916004808301925f9291908290030181865afa1580156117e7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261180e9190810190613b71565b612fc6565b60208054604080517f3408e47000000000000000000000000000000000000000000000000000000000815290516118aa9373ffffffffffffffffffffffffffffffffffffffff90931692633408e47092600480820193918290030181865afa158015611881573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a59190613931565b61303a565b602054604080517f5f7c752200000000000000000000000000000000000000000000000000000000815290516119449273ffffffffffffffffffffffffffffffffffffffff1691635f7c7522916004808301925f9291908290030181865afa158015611918573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261193f9190810190613b71565b6130ad565b565b6040517f298f239c000000000000000000000000000000000000000000000000000000008152606460048201819052600a602483018190527fdeadbeef000000000000000000000000000000000000000000000000000000006044840152915f9073__$485e63c703b57fb39db2d057ed0b990874$__9063298f239c9084015f60405180830381865af41580156119df573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a069190810190613ac5565b9050611a2c81518460405180606001604052806028815260200161e8516028913961311e565b5f5b8151811015611a4f5782811115611a4757611a4761388d565b600101611a2e565b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015611ab857602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a8d575b5050505050905090565b6040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015611b5a575f5ffd5b505af1158015611b6c573d5f5f3e3d5ffd5b50506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f722073636860448201527f656d6541646472657373000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb391506084015f604051808303815f87803b158015611c26575f5ffd5b505af1158015611c38573d5f5f3e3d5ffd5b5050601f54604080518082018252600581527f424e323534000000000000000000000000000000000000000000000000000000602082015290517fbab867da00000000000000000000000000000000000000000000000000000000815261010090920473ffffffffffffffffffffffffffffffffffffffff16935063bab867da9250611cdc917373d1ecca90a16f27691c63ecad7d5119f0bc743a9060040161361f565b5f604051808303815f87803b158015611cf3575f5ffd5b505af1158015611a4f573d5f5f3e3d5ffd5b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015611e45575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611e2e578382905f5260205f20018054611da390613656565b80601f0160208091040260200160405190810160405280929190818152602001828054611dcf90613656565b8015611e1a5780601f10611df157610100808354040283529160200191611e1a565b820191905f5260205f20905b815481529060010190602001808311611dfd57829003601f168201915b505050505081526020019060010190611d86565b505050508152505081526020019060010190611d28565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611ab857602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a8d575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611ab857602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a8d575050505050905090565b60258054611f3190613656565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5d90613656565b8015611fa85780601f10611f7f57610100808354040283529160200191611fa8565b820191905f5260205f20905b815481529060010190602001808311611f8b57829003601f168201915b505050505081565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015611e45578382905f5260205f2090600202016040518060400160405290815f8201805461200390613656565b80601f016020809104026020016040519081016040528092919081815260200182805461202f90613656565b801561207a5780601f106120515761010080835404028352916020019161207a565b820191905f5260205f20905b81548152906001019060200180831161205d57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561211157602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120be5790505b50505050508152505081526020019060010190611fd3565b6040805160018082528183019092525f91602080830190803683370190505090505f815f8151811061215d5761215d6137af565b60209081029190910101526040517f298f239c00000000000000000000000000000000000000000000000000000000815260016004820181905260248201527fdeadbeef0000000000000000000000000000000000000000000000000000000060448201525f9073__$485e63c703b57fb39db2d057ed0b990874$__9063298f239c906064015f60405180830381865af41580156121fd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122249190810190613ac5565b905061226682826040518060400160405280601a81526020017f66756c6c206172726179207761736e27742072657475726e656400000000000081525061319a565b5050565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015611e45578382905f5260205f200180546122aa90613656565b80601f01602080910402602001604051908101604052809291908181526020018280546122d690613656565b80156123215780601f106122f857610100808354040283529160200191612321565b820191905f5260205f20905b81548152906001019060200180831161230457829003601f168201915b50505050508152602001906001019061228d565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015611e45575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561242057602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116123cd5790505b50505050508152505081526020019060010190612358565b602454602354602054604080517f5f7c75220000000000000000000000000000000000000000000000000000000081529051600a946001945f9473__$485e63c703b57fb39db2d057ed0b990874$__94639e43d9849473ffffffffffffffffffffffffffffffffffffffff94851694938416936026938a938c939190921691635f7c7522916004808301928d9291908290030181865afa1580156124de573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125059190810190613b71565b6040518763ffffffff1660e01b815260040161252696959493929190613c05565b602060405180830381865af4158015612541573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125659190613948565b9050806125745761257461388d565b505050565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015611e45575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561266457602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116126115790505b5050505050815250508152602001906001019061259c565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015611e45578382905f5260205f200180546126bc90613656565b80601f01602080910402602001604051908101604052809291908181526020018280546126e890613656565b80156127335780601f1061270a57610100808354040283529160200191612733565b820191905f5260205f20905b81548152906001019060200180831161271657829003601f168201915b50505050508152602001906001019061269f565b6008545f9060ff161561275e575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa1580156127ec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128109190613931565b1415905090565b60268054611f3190613656565b6024546040515f9173ffffffffffffffffffffffffffffffffffffffff169061284c90613252565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015612882573d5f5f3e3d5ffd5b50604080518082018252600180825273ffffffffffffffffffffffffffffffffffffffff848116602084019081526024805495517f775b839c000000000000000000000000000000000000000000000000000000008152855160048201529151831690820152949550909384935f92169063775b839c906044015f60405180830381865afa158015612916573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261293d9190810190613b71565b905061294881612fc6565b6040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190525f60448301526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063491cc7c2906084015f604051808303815f87803b1580156129bf575f5ffd5b505af11580156129d1573d5f5f3e3d5ffd5b505050508473ffffffffffffffffffffffffffffffffffffffff1684847feee7195b6cee0fa7044c3af0b86fe2febb1d2703d71191f44052ba0d60ffda6442604051612a1f91815260200190565b60405180910390a48473ffffffffffffffffffffffffffffffffffffffff1663837e7cc66040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612a6c575f5ffd5b505af1158015612a7e573d5f5f3e3d5ffd5b505050505f8573ffffffffffffffffffffffffffffffffffffffff16626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612acb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aef9190613931565b6040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015612b8a575f5ffd5b505af1158015612b9c573d5f5f3e3d5ffd5b50506023546040517f5eab2b2000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169250635eab2b209150612bf9908490602690600401613a16565b5f604051808303815f87803b158015612c10575f5ffd5b505af1158015612c22573d5f5f3e3d5ffd5b50506023546040517fcd802c9100000000000000000000000000000000000000000000000000000000815260048101859052612c81935073ffffffffffffffffffffffffffffffffffffffff909116915063cd802c9190602401611248565b505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611ab857602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611a8d575050505050905090565b60278054611f3190613656565b604080515f808252602082019092526040517f298f239c0000000000000000000000000000000000000000000000000000000081525f60048201819052600160248301527fdeadbeef00000000000000000000000000000000000000000000000000000000604483015291925073__$485e63c703b57fb39db2d057ed0b990874$__9063298f239c906064015f60405180830381865af4158015612da7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612dce9190810190613ac5565b905061226682826040518060400160405280601381526020017f617272617920776173206e6f7420656d7074790000000000000000000000000081525061319a565b6122668282604051602401612e2692919061361f565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f319af333000000000000000000000000000000000000000000000000000000001790526131ee565b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b5f6040518083038186803b158015612ee7575f5ffd5b505afa15801561158f573d5f5f3e3d5ffd5b6040517f7c84c69b0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d90637c84c69b906044015f6040518083038186803b158015612f62575f5ffd5b505afa158015612c81573d5f5f3e3d5ffd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401612ed1565b61303781604051602401612fda91906133f7565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0be77f56000000000000000000000000000000000000000000000000000000001790526131ee565b50565b6130378160405160240161305091815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff82c50f1000000000000000000000000000000000000000000000000000000001790526131ee565b613037816040516024016130c191906133f7565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac000000000000000000000000000000000000000000000000000000001790526131ee565b6040517f88b44c85000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906388b44c859061317290869086908690600401613c90565b5f6040518083038186803b158015613188575f5ffd5b505afa158015610b5e573d5f5f3e3d5ffd5b6040517f5d18c73a000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d90635d18c73a9061317290869086908690600401613ce7565b613037815f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b610bda80613d2a83390190565b6129d58061490483390190565b61468b806172d983390190565b6126538061b96483390190565b6104468061dfb783390190565b6104268061e3fd83390190565b602080825282518282018190525f918401906040840190835b818110156132ac57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101613278565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156133eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805173ffffffffffffffffffffffffffffffffffffffff168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b818110156133d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526133bb8486516132b7565b6020958601959094509290920191600101613381565b50919750505060209485019492909201915060010161330b565b50929695505050505050565b602081525f61340960208301846132b7565b9392505050565b5f8151808452602084019350602083015f5b828110156134625781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101613422565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156133eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526134d660408801826132b7565b90506020820151915086810360208801526134f18183613410565b965050506020938401939190910190600101613492565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156133eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526135688583516132b7565b9450602093840193919091019060010161352e565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156133eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff815116865260208101519050604060208701526136096040870182613410565b95505060209384019391909101906001016135a3565b604081525f61363160408301856132b7565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b600181811c9082168061366a57607f821691505b6020821081036136a1577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156136f7576136f76136a7565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613726576137266136a7565b604052919050565b5f82601f83011261373d575f5ffd5b6137456136d4565b806040840185811115613756575f5ffd5b845b818110156132ac578051845260209384019301613758565b5f6080828403128015613781575f5ffd5b5061378a6136d4565b613794848461372e565b81526137a3846040850161372e565b60208201529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805f5b6002811015611a4f5781518452602093840193909101906001016137df565b60c0810161380c82876137dc565b61381960408301866137dc565b73ffffffffffffffffffffffffffffffffffffffff8416608083015273ffffffffffffffffffffffffffffffffffffffff831660a083015295945050505050565b5f6020828403121561386a575f5ffd5b815173ffffffffffffffffffffffffffffffffffffffff81168114613409575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b60a08152600560a08201527f424e32353400000000000000000000000000000000000000000000000000000060c082015260e060208201525f61390060e08301866132b7565b828103604084015261391281866132b7565b83810360608501525f8152608090930193909352506020019392505050565b5f60208284031215613941575f5ffd5b5051919050565b5f60208284031215613958575f5ffd5b81518015158114613409575f5ffd5b5f815461397381613656565b80855260018216801561398d57600181146139c7576139fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166020870152602082151560051b87010193506139fb565b845f5260205f205f5b838110156139f25781546020828a0101526001820191506020810190506139d0565b87016020019450505b50505092915050565b602081525f6134096020830184613967565b828152604060208201525f613a2e6040830184613967565b949350505050565b5f5f8354613a4381613656565b600182168015613a5a5760018114613a8d57613aba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083168652811515820286019350613aba565b865f5260205f205f5b83811015613ab257815488820152600190910190602001613a96565b505081860193505b509195945050505050565b5f60208284031215613ad5575f5ffd5b815167ffffffffffffffff811115613aeb575f5ffd5b8201601f81018413613afb575f5ffd5b805167ffffffffffffffff811115613b1557613b156136a7565b8060051b613b25602082016136fd565b91825260208184018101929081019087841115613b40575f5ffd5b6020850194505b83851015613b6657845180835260209586019590935090910190613b47565b979650505050505050565b5f60208284031215613b81575f5ffd5b815167ffffffffffffffff811115613b97575f5ffd5b8201601f81018413613ba7575f5ffd5b805167ffffffffffffffff811115613bc157613bc16136a7565b613bd46020601f19601f840116016136fd565b818152856020838501011115613be8575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015260c060408201525f613c4f60c0830187613967565b85606084015273ffffffffffffffffffffffffffffffffffffffff8516608084015282810360a0840152613c8381856132b7565b9998505050505050505050565b838152826020820152606060408201525f613cae60608301846132b7565b95945050505050565b5f8151808452602084019350602083015f5b82811015613462578151865260209586019590910190600101613cc9565b606081525f613cf96060830186613cb7565b8281036020840152613d0b8186613cb7565b90508281036040840152613d1f81856132b7565b969550505050505056fe608060405234801561000f575f5ffd5b50604051610bda380380610bda83398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6109f9806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100c4575f3560e01c80635bb09cf81161007d578063a217fddf11610058578063a217fddf146101fd578063bab867da14610204578063d547741f14610217575f5ffd5b80635bb09cf81461015b57806375b238fc1461019357806391d14854146101ba575f5ffd5b80632f2ff15d116100ad5780632f2ff15d146101205780632fc9fa331461013557806336568abe14610148575f5ffd5b806301ffc9a7146100c8578063248a9ca3146100f0575b5f5ffd5b6100db6100d6366004610831565b61022a565b60405190151581526020015b60405180910390f35b6101126100fe366004610877565b5f9081526020819052604090206001015490565b6040519081526020016100e7565b61013361012e3660046108b6565b6102c2565b005b6100db610143366004610925565b6102ec565b6101336101563660046108b6565b610346565b61016e610169366004610925565b6103a4565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100e7565b6101127fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100db6101c83660046108b6565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101125f81565b610133610212366004610964565b6103e5565b6101336102253660046108b6565b6105c5565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102bc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f828152602081905260409020600101546102dc816105e9565b6102e683836105f6565b50505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff16600184846040516103169291906109b4565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff161415905092915050565b73ffffffffffffffffffffffffffffffffffffffff81163314610395576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039f82826106ef565b505050565b5f600183836040516103b79291906109b4565b9081526040519081900360200190205473ffffffffffffffffffffffffffffffffffffffff16905092915050565b61040e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105e9565b73ffffffffffffffffffffffffffffffffffffffff811615801590610449575073ffffffffffffffffffffffffffffffffffffffff81163b15155b6104da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f722073636860448201527f656d65416464726573730000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b80600184846040516104ed9291906109b4565b908152604051908190036020018120805473ffffffffffffffffffffffffffffffffffffffff939093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915560019061055290859085906109b4565b9081526040519081900360200181205473ffffffffffffffffffffffffffffffffffffffff169061058690859085906109b4565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105df816105e9565b6102e683836106ef565b6105f381336107a8565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166106e8575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556106863390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102bc565b505f6102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156106e8575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102bc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661082d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016104d1565b5050565b5f60208284031215610841575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610870575f5ffd5b9392505050565b5f60208284031215610887575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b1575f5ffd5b919050565b5f5f604083850312156108c7575f5ffd5b823591506108d76020840161088e565b90509250929050565b5f5f83601f8401126108f0575f5ffd5b50813567ffffffffffffffff811115610907575f5ffd5b60208301915083602082850101111561091e575f5ffd5b9250929050565b5f5f60208385031215610936575f5ffd5b823567ffffffffffffffff81111561094c575f5ffd5b610958858286016108e0565b90969095509350505050565b5f5f5f60408486031215610976575f5ffd5b833567ffffffffffffffff81111561098c575f5ffd5b610998868287016108e0565b90945092506109ab90506020850161088e565b90509250925092565b818382375f910190815291905056fea26469706673582212204365ebfe0316198161211e6648f602ef30b54b8310b64cd331285d5e76802ca464736f6c634300081c0033608060405234801561000f575f5ffd5b506100194661004b565b6040516020016100299190610212565b6040516020818303038152906040525f90816100459190610318565b5061042a565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106100ab576100ab6103d2565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106100d9576100d96103d2565b60200101906001600160f81b03191690815f1a9053505f5b602081101561020a5782600486836020811061010f5761010f6103d2565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110610135576101356103d2565b01602001516001600160f81b031916826101508360026103fa565b61015b906002610417565b8151811061016b5761016b6103d2565b60200101906001600160f81b03191690815f1a90535082858260208110610194576101946103d2565b825191901a600f169081106101ab576101ab6103d2565b01602001516001600160f81b031916826101c68360026103fa565b6101d1906002610417565b6101dc906001610417565b815181106101ec576101ec6103d2565b60200101906001600160f81b03191690815f1a9053506001016100f1565b509392505050565b7f646369706865722d72616e646f6d6e6573732d7630312d424e32353447315f5881527f4d443a4b454343414b2d3235365f535644575f524f5f0000000000000000000060208201525f82518060208501603685015e605f60f81b6036939091019283015250603701919050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806102a857607f821691505b6020821081036102c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561031357805f5260205f20601f840160051c810160208510156102f15750805b601f840160051c820191505b81811015610310575f81556001016102fd565b50505b505050565b81516001600160401b0381111561033157610331610280565b6103458161033f8454610294565b846102cc565b6020601f821160018114610377575f83156103605750848201515b5f19600385901b1c1916600184901b178455610310565b5f84815260208120601f198516915b828110156103a65787850151825560209485019460019092019101610386565b50848210156103c357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610411576104116103e6565b92915050565b80820180821115610411576104116103e6565b61259e806104375f395ff3fe608060405234801561000f575f5ffd5b506004361061006f575f3560e01c80638a1f165a1161004d5780638a1f165a146100c3578063eae1e15b146100ff578063f6e548e914610112575f5ffd5b80633033cc51146100735780633408e470146100a05780635f7c7522146100ae575b5f5ffd5b610086610081366004612188565b610135565b604080519283526020830191909152015b60405180910390f35b604051468152602001610097565b6100b6610214565b6040516100979190612213565b6100b66040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b6100b661010d366004612188565b61029f565b61012561012036600461222c565b6102d9565b6040519015158152602001610097565b5f5f5f6101fe5f8054610147906122cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610173906122cb565b80156101be5780601f10610195576101008083540402835291602001916101be565b820191905f5260205f20905b8154815290600101906020018083116101a157829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506103c892505050565b80516020909101519093509150505b9250929050565b5f8054610220906122cb565b80601f016020809104026020016040519081016040528092919081815260200182805461024c906122cb565b80156102975780601f1061026e57610100808354040283529160200191610297565b820191905f5260205f20905b81548152906001019060200180831161027a57829003601f168201915b505050505081565b60605f5f6102ad8585610135565b915091506102ce6040518060400160405280848152602001838152506104ad565b925050505b92915050565b5f5f61031988888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e692505050565b90505f61035a87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e692505050565b90505f61039b86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061058392505050565b90505f5f6103aa84848761063e565b915091508180156103b85750805b9c9b505050505050505050505050565b604080518082019091525f80825260208201525f6103e684846107b1565b90505f6103f982825b60200201516108fc565b90505f6104078360016103ef565b90506104116120cb565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa90508061048557816040517f128e3f0800000000000000000000000000000000000000000000000000000000815260040161047c9190612349565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f80825260208201528151604014610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161047c565b5060208181015160409283015183518085019094529083529082015290565b61058b6120e9565b81516080146105f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161047c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106107215761072161231c565b60200201518152602001865f01515f600281106107405761074061231c565b6020020151815260200186602001516001600281106107615761076161231c565b6020020151815260200186602001515f600281106107815761078161231c565b60200201519052905061079261210e565b6020816101808460086107d05a03fa9051151597909650945050505050565b6107b961212c565b5f6107c48484610da4565b90505f5f5f5f6018850177ffffffffffffffffffffffffffffffffffffffffffffffff815116935060308601905077ffffffffffffffffffffffffffffffffffffffffffffffff81511694507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47857f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778010000000000000000000000000000000000000000000000008709086048870151606088015177ffffffffffffffffffffffffffffffffffffffffffffffff908116975016945092507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47905084817801000000000000000000000000000000000000000000000000860908604080518082019091529283526020830152509695505050505050565b61090461212c565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478210610960576040517fd53e94150000000000000000000000000000000000000000000000000000000081526004810183905260240161047c565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760047f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478586090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478260010890507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610a1e837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b60010891505f610a507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838509610f8e565b90505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4778016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47888b09090990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47610b24837f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b7f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47837f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea30890505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786870990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4786830990505f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47807f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610c5e610c5988610f98565b61100a565b5f0b600103610cc757868c52610c7387610f98565b9050610c7e816110ba565b60208e0191909152915081610cc2576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b610d43565b610cd3610c5987610f98565b5f0b600103610ce857858c52610c7386610f98565b828c52610cf483610f98565b9050610cff816110ba565b60208e0191909152915081610d43576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810182905260240161047c565b60208c0151610d51906110f4565b610d5a8e6110f4565b14610d945760208c0151610d8e907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b60208d01525b5050505050505050505050919050565b815160609060ff811115610de657836040517f26e4f9ba00000000000000000000000000000000000000000000000000000000815260040161047c9190612213565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610e2697969594939291906123d0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610e5b94939291906124ab565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610f5257858418610ecc82600161251d565b8d8b604051602001610ee194939291906124ab565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830181028501810195909552805194810194909420939450600101610eb6565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016020908102820101919091529550505050505092915050565b5f6102d382611100565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760037f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47847f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47868709090892915050565b5f5f61101583611858565b905061104260017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476123a6565b810361107057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92915050565b8015801590611080575080600114155b156102d3576040517f396ec7710000000000000000000000000000000000000000000000000000000081526004810184905260240161047c565b5f5f6110c583611985565b9150827f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47838409149050915091565b5f6102d3600283612530565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360a08401527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4760c0808501919091529293505f92839160055afa90505f5192508061197e576040517fc6daf7ab000000000000000000000000000000000000000000000000000000008152600481018590527f183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea360248201527f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47604482015260640161047c565b5050919050565b5f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806120fc61212c565b815260200161210961212c565b905290565b60405180602001604052806001906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b5f5f83601f84011261215a575f5ffd5b50813567ffffffffffffffff811115612171575f5ffd5b60208301915083602082850101111561020d575f5ffd5b5f5f60208385031215612199575f5ffd5b823567ffffffffffffffff8111156121af575f5ffd5b6121bb8582860161214a565b90969095509350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61222560208301846121c7565b9392505050565b5f5f5f5f5f5f60608789031215612241575f5ffd5b863567ffffffffffffffff811115612257575f5ffd5b61226389828a0161214a565b909750955050602087013567ffffffffffffffff811115612282575f5ffd5b61228e89828a0161214a565b909550935050604087013567ffffffffffffffff8111156122ad575f5ffd5b6122b989828a0161214a565b979a9699509497509295939492505050565b600181811c908216806122df57607f821691505b602082108103612316577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6080810181835f5b6004811015612370578151835260209283019290910190600101612351565b50505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156102d3576102d3612379565b5f81518060208401855e5f93019283525090919050565b5f6123e46123de838b6123b9565b896123b9565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b1681527fff000000000000000000000000000000000000000000000000000000000000008760f81b1660018201527fff000000000000000000000000000000000000000000000000000000000000008660f81b16600282015261246f60038201866123b9565b60f89490941b7fff0000000000000000000000000000000000000000000000000000000000000016845250506001909101979650505050505050565b8481527fff000000000000000000000000000000000000000000000000000000000000008460f81b1660208201525f6124e760218301856123b9565b60f89390931b7fff0000000000000000000000000000000000000000000000000000000000000016835250506001019392505050565b808201808211156102d3576102d3612379565b5f82612563577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50069056fea26469706673582212206df3649d590cafccfd4873076b90bc107f722eecb7166da8e6c43928f9acbc4d64736f6c634300081c0033306080525f80805560e081815261010082905260a08181526101606040526101208381526101409390935260c0929092526001906100409082906002610124565b5060208201516100569060028084019190610124565b505050348015610064575f5ffd5b5061006d610072565b610176565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100c25760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101215780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b8260028101928215610152579160200282015b82811115610152578251825591602001919060010190610137565b5061015e929150610162565b5090565b5b8082111561015e575f8155600101610163565b6080516144ef61019c5f395f8181612b7101528181612b9a0152612dbb01526144ef5ff3fe6080604052600436106101f5575f3560e01c806375b238fc11610117578063acae9fee116100ac578063ca15c8731161007c578063d547741f11610062578063d547741f146106c0578063e63b5d58146106df578063e6b3ca71146106f3575f5ffd5b8063ca15c87314610682578063cd802c91146106a1575f5ffd5b8063acae9fee146105db578063ad3cb1cc146105ef578063b094728914610637578063c58343ef14610656575f5ffd5b806395b8d073116100e757806395b8d07314610551578063a217fddf14610570578063a3246ad314610583578063ac9650d8146105af575f5ffd5b806375b238fc1461043857806381d12c581461046b5780639010d07c1461049d57806391d14854146104e1575f5ffd5b80634b96e1661161018d578063571d70871161015d578063571d7087146103d25780635eab2b20146103e65780636f421ea914610405578063702ef38c14610419575f5ffd5b80634b96e1661461033c5780634f1ef2861461035d57806352d1902d1461037057806354fd4d5014610384575f5ffd5b80632e334452116101c85780632e334452146102c85780632f2ff15d146102ea57806336568abe1461030957806347c0318614610328575f5ffd5b80630138c60d146101f957806301ffc9a71461021a57806316cc9a981461024e578063248a9ca31461026d575b5f5ffd5b348015610204575f5ffd5b506102186102133660046137bd565b61071f565b005b348015610225575f5ffd5b506102396102343660046137d4565b610c74565b60405190151581526020015b60405180910390f35b348015610259575f5ffd5b50610218610268366004613834565b610ccf565b348015610278575f5ffd5b506102ba6102873660046137bd565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610245565b3480156102d3575f5ffd5b506102dc610d66565b604051610245929190613871565b3480156102f5575f5ffd5b5061021861030436600461388c565b610de1565b348015610314575f5ffd5b5061021861032336600461388c565b610e2a565b348015610333575f5ffd5b506102ba5f5481565b348015610347575f5ffd5b50610350610e83565b60405161024591906138ba565b61021861036b366004613981565b610e94565b34801561037b575f5ffd5b506102ba610eb3565b34801561038f575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516102459190613a3c565b3480156103dd575f5ffd5b50610350610ee1565b3480156103f1575f5ffd5b50610218610400366004613a93565b610eed565b348015610410575f5ffd5b5061035061163b565b348015610424575f5ffd5b50610218610433366004613b48565b611647565b348015610443575f5ffd5b506102ba7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b348015610476575f5ffd5b5061048a6104853660046137bd565b6119ee565b6040516102459796959493929190613b9f565b3480156104a8575f5ffd5b506104bc6104b7366004613c32565b611ce4565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610245565b3480156104ec575f5ffd5b506102396104fb36600461388c565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561055c575f5ffd5b506102ba61056b366004613c52565b611d24565b34801561057b575f5ffd5b506102ba5f81565b34801561058e575f5ffd5b506105a261059d3660046137bd565b612429565b6040516102459190613cf1565b3480156105ba575f5ffd5b506105ce6105c9366004613d3e565b61246c565b6040516102459190613daf565b3480156105e6575f5ffd5b506103c5612552565b3480156105fa575f5ffd5b506103c56040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b348015610642575f5ffd5b506102396106513660046137bd565b6125cd565b348015610661575f5ffd5b506106756106703660046137bd565b6125d9565b6040516102459190613e30565b34801561068d575f5ffd5b506102ba61069c3660046137bd565b612951565b3480156106ac575f5ffd5b506102396106bb3660046137bd565b612988565b3480156106cb575f5ffd5b506102186106da36600461388c565b6129a5565b3480156106ea575f5ffd5b506102ba6129e8565b3480156106fe575f5ffd5b506006546104bc9073ffffffffffffffffffffffffffffffffffffffff1681565b610728816125cd565b6107b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f74494420686173206572726f726564000000000000000000000000000000000060648201526084015b60405180910390fd5b5f81815260056020526040808220815160e081019092528054829082906107df90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461080b90613f01565b80156108565780601f1061082d57610100808354040283529160200191610856565b820191905f5260205f20905b81548152906001019060200180831161083957829003601f168201915b5050505050815260200160018201805461086f90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461089b90613f01565b80156108e65780601f106108bd576101008083540402835291602001916108e6565b820191905f5260205f20905b8154815290600101906020018083116108c957829003601f168201915b505050505081526020016002820180546108ff90613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90613f01565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b5050505050815260200160038201805461098f90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546109bb90613f01565b8015610a065780601f106109dd57610100808354040283529160200191610a06565b820191905f5260205f20905b8154815290600101906020018083116109e957829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff166020820152600582018054604090920191610a4390613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f90613f01565b8015610aba5780601f10610a9157610100808354040283529160200191610aba565b820191905f5260205f20905b815481529060010190602001808311610a9d57829003601f168201915b50505091835250506006919091015460ff161515602090910152608081015160a08201516040519293505f9273ffffffffffffffffffffffffffffffffffffffff909216917fc8db65820000000000000000000000000000000000000000000000000000000091610b3091879190602401613f52565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610b9b9190613f81565b5f604051808303815f865af19150503d805f8114610bd4576040519150601f19603f3d011682016040523d82523d5f602084013e610bd9565b606091505b5050905080610c1a576040518381527fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde31679060200160405180910390a1505050565b610c25600b846129f3565b50610c316007846129fe565b50827f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b369558360a00151604051610c669190613a3c565b60405180910390a25b505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610cc95750610cc982612a09565b92915050565b610cf87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b610d6e61374d565b610d7661374d565b604080518082019182905260019160039190839060029082845b815481526020019060010190808311610d90575050604080518082019182905294965085935060029250905082845b815481526020019060010190808311610dbf5750505050509050915091509091565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e1a81612a9f565b610e248383612aac565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610e79576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6f8282612b01565b6060610e8f6009612b4d565b905090565b610e9c612b59565b610ea582612c5f565b610eaf8282612c88565b5050565b5f610ebc612da3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6060610e8f6007612b4d565b610f167fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b610f1f83612988565b610fab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4e6f20726571756573742077697468207370656369666965642072657175657360448201527f744944000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b5f83815260056020526040808220815160e08101909252805482908290610fd190613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffd90613f01565b80156110485780601f1061101f57610100808354040283529160200191611048565b820191905f5260205f20905b81548152906001019060200180831161102b57829003601f168201915b5050505050815260200160018201805461106190613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461108d90613f01565b80156110d85780601f106110af576101008083540402835291602001916110d8565b820191905f5260205f20905b8154815290600101906020018083116110bb57829003601f168201915b505050505081526020016002820180546110f190613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461111d90613f01565b80156111685780601f1061113f57610100808354040283529160200191611168565b820191905f5260205f20905b81548152906001019060200180831161114b57829003601f168201915b5050505050815260200160038201805461118190613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613f01565b80156111f85780601f106111cf576101008083540402835291602001916111f8565b820191905f5260205f20905b8154815290600101906020018083116111db57829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff16602082015260058201805460409092019161123590613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461126190613f01565b80156112ac5780601f10611283576101008083540402835291602001916112ac565b820191905f5260205f20905b81548152906001019060200180831161128f57829003601f168201915b505050918352505060069182015460ff161515602090910152606082015190546040517f5bb09cf800000000000000000000000000000000000000000000000000000000815292935090915f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890611324908590600401613a3c565b602060405180830381865afa15801561133f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113639190613f8c565b90505f8190508073ffffffffffffffffffffffffffffffffffffffff1663f6e548e985602001518888611394612552565b6040518563ffffffff1660e01b81526004016113b39493929190613fd0565b602060405180830381865afa1580156113ce573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f29190614014565b611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107b0565b5f846080015173ffffffffffffffffffffffffffffffffffffffff1663c8db658260e01b89898960405160240161149193929190614033565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516114fc9190613f81565b5f604051808303815f865af19150503d805f8114611535576040519150601f19603f3d011682016040523d82523d5f602084013e61153a565b606091505b50505f8981526005602081905260409091209192500161155b878983614097565b505f88815260056020526040902060060180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556115a06009896129f3565b50806115ea576115b1600b896129fe565b506040518881527fb447474448cd6fcec713160a7af96335b628994d6abcc074f215b856ccde31679060200160405180910390a1611631565b6115f56007896129fe565b50877f9a03aa0053cbc9522f2f584b8e74ba5478cadd5f83b136eaf2d4338795b36955888860405161162892919061418f565b60405180910390a25b5050505050505050565b6060610e8f600b612b4d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156116915750825b90505f8267ffffffffffffffff1660011480156116ad5750303b155b9050811580156116bb575080155b156116f2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156117535784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61175b612e12565b611763612e12565b60408051808201909152898152602081018990526001611785818c600261376b565b50602082015161179b906002808401919061376b565b509050506117c97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177588612aac565b61182f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064016107b0565b6118395f88612aac565b61189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4772616e7420726f6c652072657665727473000000000000000000000000000060448201526064016107b0565b73ffffffffffffffffffffffffffffffffffffffff8616611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f7475726520736368656d6520616464726573732070726f76696465720000000060648201526084016107b0565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881617905583156119e35784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60056020525f9081526040902080548190611a0890613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3490613f01565b8015611a7f5780601f10611a5657610100808354040283529160200191611a7f565b820191905f5260205f20905b815481529060010190602001808311611a6257829003601f168201915b505050505090806001018054611a9490613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac090613f01565b8015611b0b5780601f10611ae257610100808354040283529160200191611b0b565b820191905f5260205f20905b815481529060010190602001808311611aee57829003601f168201915b505050505090806002018054611b2090613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4c90613f01565b8015611b975780601f10611b6e57610100808354040283529160200191611b97565b820191905f5260205f20905b815481529060010190602001808311611b7a57829003601f168201915b505050505090806003018054611bac90613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd890613f01565b8015611c235780601f10611bfa57610100808354040283529160200191611c23565b820191905f5260205f20905b815481529060010190602001808311611c0657829003601f168201915b5050506004840154600585018054949573ffffffffffffffffffffffffffffffffffffffff909216949193509150611c5a90613f01565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8690613f01565b8015611cd15780601f10611ca857610100808354040283529160200191611cd1565b820191905f5260205f20905b815481529060010190602001808311611cb457829003601f168201915b5050506006909301549192505060ff1687565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220611d1c9084612e1a565b949350505050565b5f60015f5f828254611d3691906141cf565b90915550506006546040517f2fc9fa3300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632fc9fa3390611d93908a908a9060040161418f565b602060405180830381865afa158015611dae573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd29190614014565b611e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107b0565b611e7f600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929493925050612e259050565b611f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4d657373616765206661696c6564206c656e67746820626f756e64732063686560448201527f636b00000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b611f515f61100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929493925050612e259050565b611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e6473206360448201527f6865636b0000000000000000000000000000000000000000000000000000000060648201526084016107b0565b8180156120ae5761202184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612ed192505050565b156120ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a6560448201527f726f73000000000000000000000000000000000000000000000000000000000060648201526084016107b0565b6006546040517f5bb09cf80000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff1690635bb09cf890612106908c908c9060040161418f565b602060405180830381865afa158015612121573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121459190613f8c565b6040517feae1e15b00000000000000000000000000000000000000000000000000000000815290915081905f9073ffffffffffffffffffffffffffffffffffffffff83169063eae1e15b906121a0908c908c9060040161418f565b5f60405180830381865afa1580156121ba573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121e191908101906141e2565b604080516101006020601f8d01819004028201810190925260e081018b81529293509182918c908c90819085018382808284375f92019190915250505090825250602080820184905260408051601f8b0183900483028101830182528a8152920191908a908a90819084018382808284375f92019190915250505090825250604080516020601f8f018190048102820181019092528d815291810191908e908e90819084018382808284375f92018290525093855250503360208085019190915260408051808301825284815281860152606090940183905282548352600590525020815181906122d29082614257565b50602082015160018201906122e79082614257565b50604082015160028201906122fc9082614257565b50606082015160038201906123119082614257565b5060808201516004820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560a082015160058201906123719082614257565b5060c09190910151600690910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555f546123b9906009906129fe565b503373ffffffffffffffffffffffffffffffffffffffff165f547ff0a5ef4bc87d6534674b1469f4b31d03c6510d0f7ab353f3e53f9d1d87ead02b8d8d8d8d878e8e42604051612410989796959493929190614350565b60405180910390a350505f549998505050505050505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260409091206060919061246590612b4d565b9392505050565b604080515f8152602081019091526060908267ffffffffffffffff811115612496576124966138fc565b6040519080825280602002602001820160405280156124c957816020015b60608152602001906001900390816124b45790505b5091505f5b8381101561254a57612525308686848181106124ec576124ec6143c8565b90506020028101906124fe91906143f5565b8560405160200161251193929190614456565b604051602081830303815290604052612f34565b838281518110612537576125376143c8565b60209081029190910101526001016124ce565b505092915050565b6040805160808101808352606092610e8f9291600191839190820190839060029082845b81548152602001906001019080831161257657505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116125ac57505050505081525050612faa565b5f610cc9600b83613006565b61262f6040518060e00160405280606081526020016060815260200160608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081526020015f151581525090565b5f8281526005602052604090819020815160e0810190925280548290829061265690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461268290613f01565b80156126cd5780601f106126a4576101008083540402835291602001916126cd565b820191905f5260205f20905b8154815290600101906020018083116126b057829003601f168201915b505050505081526020016001820180546126e690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461271290613f01565b801561275d5780601f106127345761010080835404028352916020019161275d565b820191905f5260205f20905b81548152906001019060200180831161274057829003601f168201915b5050505050815260200160028201805461277690613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546127a290613f01565b80156127ed5780601f106127c4576101008083540402835291602001916127ed565b820191905f5260205f20905b8154815290600101906020018083116127d057829003601f168201915b5050505050815260200160038201805461280690613f01565b80601f016020809104026020016040519081016040528092919081815260200182805461283290613f01565b801561287d5780601f106128545761010080835404028352916020019161287d565b820191905f5260205f20905b81548152906001019060200180831161286057829003601f168201915b5050509183525050600482015473ffffffffffffffffffffffffffffffffffffffff1660208201526005820180546040909201916128ba90613f01565b80601f01602080910402602001604051908101604052809291908181526020018280546128e690613f01565b80156129315780601f1061290857610100808354040283529160200191612931565b820191905f5260205f20905b81548152906001019060200180831161291457829003601f168201915b50505091835250506006919091015460ff16151560209091015292915050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604082206124659061301d565b5f612994600983613006565b80610cc95750610cc9600b83613006565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546129de81612a9f565b610e248383612b01565b5f610e8f600961301d565b5f6124658383613026565b5f6124658383613109565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610cc957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610cc9565b612aa98133613155565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612ad985856131fb565b90508015611d1c575f858152602083905260409020612af89085613310565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200081612b2e8585613331565b90508015611d1c575f858152602083905260409020612af8908561340d565b60605f6124658361342e565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480612c2657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612c0d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15612c5d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612aa97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612a9f565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612cef575060408051601f3d908101601f19168201909252612cec91810190614475565b60015b612d3d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016107b0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612d99576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016107b0565b610c6f8383613487565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612c5d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c5d6134e9565b5f6124658383613550565b5f81831115612eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107b0565b8351838110801590612ec85750828111155b95945050505050565b5f805b8251811015612f2b57828181518110612eef57612eef6143c8565b01602001517fff000000000000000000000000000000000000000000000000000000000000001615612f2357505f92915050565b600101612ed4565b50600192915050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051612f5d9190613f81565b5f60405180830381855af49150503d805f8114612f95576040519150601f19603f3d011682016040523d82523d5f602084013e612f9a565b606091505b5091509150612ec8858383613576565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b5f8181526001830160205260408120541515612465565b5f610cc9825490565b5f8181526001830160205260408120548015613100575f6130486001836143b5565b85549091505f9061305b906001906143b5565b90508082146130ba575f865f018281548110613079576130796143c8565b905f5260205f200154905080875f018481548110613099576130996143c8565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806130cb576130cb61448c565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610cc9565b5f915050610cc9565b5f81815260018301602052604081205461314e57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610cc9565b505f610cc9565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610eaf576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044016107b0565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16613100575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556132ac3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610cc9565b5f6124658373ffffffffffffffffffffffffffffffffffffffff8416613109565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615613100575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610cc9565b5f6124658373ffffffffffffffffffffffffffffffffffffffff8416613026565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561347b57602002820191905f5260205f20905b815481526020019060010190808311613467575b50505050509050919050565b61349082613605565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156134e157610c6f8282612f34565b610eaf6136d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16612c5d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825f018281548110613565576135656143c8565b905f5260205f200154905092915050565b60608261358b576135868261370b565b612465565b81511580156135af575073ffffffffffffffffffffffffffffffffffffffff84163b155b156135fe576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107b0565b5080612465565b8073ffffffffffffffffffffffffffffffffffffffff163b5f0361366d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016107b0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3415612c5d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80511561371b5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806002906020820280368337509192915050565b8260028101928215613799579160200282015b8281111561379957825182559160200191906001019061377e565b506137a59291506137a9565b5090565b5b808211156137a5575f81556001016137aa565b5f602082840312156137cd575f5ffd5b5035919050565b5f602082840312156137e4575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612465575f5ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114612aa9575f5ffd5b5f60208284031215613844575f5ffd5b813561246581613813565b805f5b6002811015610e24578151845260209384019390910190600101613852565b6080810161387f828561384f565b612465604083018461384f565b5f5f6040838503121561389d575f5ffd5b8235915060208301356138af81613813565b809150509250929050565b602080825282518282018190525f918401906040840190835b818110156138f15783518352602093840193909201916001016138d3565b509095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613952576139526138fc565b604052919050565b5f67ffffffffffffffff821115613973576139736138fc565b50601f01601f191660200190565b5f5f60408385031215613992575f5ffd5b823561399d81613813565b9150602083013567ffffffffffffffff8111156139b8575f5ffd5b8301601f810185136139c8575f5ffd5b80356139db6139d68261395a565b613929565b8181528660208385010111156139ef575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6124656020830184613a0e565b5f5f83601f840112613a5e575f5ffd5b50813567ffffffffffffffff811115613a75575f5ffd5b602083019150836020828501011115613a8c575f5ffd5b9250929050565b5f5f5f60408486031215613aa5575f5ffd5b83359250602084013567ffffffffffffffff811115613ac2575f5ffd5b613ace86828701613a4e565b9497909650939450505050565b5f82601f830112613aea575f5ffd5b6040805190810167ffffffffffffffff81118282101715613b0d57613b0d6138fc565b8060405250806040840185811115613b23575f5ffd5b845b81811015613b3d578035835260209283019201613b25565b509195945050505050565b5f5f5f5f60c08587031215613b5b575f5ffd5b613b658686613adb565b9350613b748660408701613adb565b92506080850135613b8481613813565b915060a0850135613b9481613813565b939692955090935050565b60e081525f613bb160e083018a613a0e565b8281036020840152613bc3818a613a0e565b90508281036040840152613bd78189613a0e565b90508281036060840152613beb8188613a0e565b905073ffffffffffffffffffffffffffffffffffffffff8616608084015282810360a0840152613c1b8186613a0e565b91505082151560c083015298975050505050505050565b5f5f60408385031215613c43575f5ffd5b50508035926020909101359150565b5f5f5f5f5f5f60608789031215613c67575f5ffd5b863567ffffffffffffffff811115613c7d575f5ffd5b613c8989828a01613a4e565b909750955050602087013567ffffffffffffffff811115613ca8575f5ffd5b613cb489828a01613a4e565b909550935050604087013567ffffffffffffffff811115613cd3575f5ffd5b613cdf89828a01613a4e565b979a9699509497509295939492505050565b602080825282518282018190525f918401906040840190835b818110156138f157835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101613d0a565b5f5f60208385031215613d4f575f5ffd5b823567ffffffffffffffff811115613d65575f5ffd5b8301601f81018513613d75575f5ffd5b803567ffffffffffffffff811115613d8b575f5ffd5b8560208260051b8401011115613d9f575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613e0f858351613a0e565b94506020938401939190910190600101613dd5565b50929695505050505050565b602081525f825160e06020840152613e4c610100840182613a0e565b90506020840151601f19848303016040850152613e698282613a0e565b9150506040840151601f19848303016060850152613e878282613a0e565b9150506060840151601f19848303016080850152613ea58282613a0e565b91505073ffffffffffffffffffffffffffffffffffffffff60808501511660a084015260a0840151601f198483030160c0850152613ee38282613a0e565b91505060c0840151613ef960e085018215159052565b509392505050565b600181811c90821680613f1557607f821691505b602082108103613f4c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b828152604060208201525f611d1c6040830184613a0e565b5f81518060208401855e5f93019283525090919050565b5f6124658284613f6a565b5f60208284031215613f9c575f5ffd5b815161246581613813565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b606081525f613fe26060830187613a0e565b8281036020840152613ff5818688613fa7565b905082810360408401526140098185613a0e565b979650505050505050565b5f60208284031215614024575f5ffd5b81518015158114612465575f5ffd5b838152604060208201525f612ec8604083018486613fa7565b601f821115610c6f57805f5260205f20601f840160051c810160208510156140715750805b601f840160051c820191505b81811015614090575f815560010161407d565b5050505050565b67ffffffffffffffff8311156140af576140af6138fc565b6140c3836140bd8354613f01565b8361404c565b5f601f841160018114614113575f85156140dd5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355614090565b5f83815260208120601f198716915b828110156141425786850135825560209485019460019092019101614122565b508682101561417d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081525f611d1c602083018486613fa7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610cc957610cc96141a2565b5f602082840312156141f2575f5ffd5b815167ffffffffffffffff811115614208575f5ffd5b8201601f81018413614218575f5ffd5b80516142266139d68261395a565b81815285602083850101111561423a575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b815167ffffffffffffffff811115614271576142716138fc565b6142858161427f8454613f01565b8461404c565b6020601f8211600181146142d6575f83156142a05750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455614090565b5f84815260208120601f198516915b8281101561430557878501518255602094850194600190920191016142e5565b508482101561434157868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b60a081525f61436360a083018a8c613fa7565b828103602084015261437681898b613fa7565b9050828103604084015261438a8188613a0e565b9050828103606084015261439f818688613fa7565b9150508260808301529998505050505050505050565b81810381811115610cc957610cc96141a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614428575f5ffd5b83018035915067ffffffffffffffff821115614442575f5ffd5b602001915036819003821315613a8c575f5ffd5b828482375f8382015f815261446b8185613f6a565b9695505050505050565b5f60208284031215614485575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212207f33e7672e5328ae7dfef406ddca56e21c29c4c4d46bb1f9d05ba19afd9c928264736f6c634300081c003360a0604052306080525f600155348015610017575f5ffd5b50610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516125566100fd5f395f818161123701528181611260015261149d01526125565ff3fe608060405260043610610199575f3560e01c806391d14854116100dc578063c8db658211610087578063d547741f11610062578063d547741f146105eb578063f8413b071461060a578063f8fa0d661461061e578063fb1a002a1461063d575f5ffd5b8063c8db65821461058e578063ca15c873146105ad578063cd802c91146105cc575f5ffd5b8063ad3cb1cc116100b7578063ad3cb1cc146104b8578063affed0e014610500578063c58343ef14610515575f5ffd5b806391d1485414610409578063a217fddf14610479578063a3246ad31461048c575f5ffd5b806352d1902d11610147578063775b839c11610122578063775b839c146103335780637d468106146103525780638a1f165a146103a25780639010d07c146103ea575f5ffd5b806352d1902d1461029e57806354fd4d50146102b257806375b238fc14610300575f5ffd5b806336568abe1161017757806336568abe1461024d578063485cc9551461026c5780634f1ef2861461028b575f5ffd5b806301ffc9a71461019d578063248a9ca3146101d15780632f2ff15d1461022c575b5f5ffd5b3480156101a8575f5ffd5b506101bc6101b7366004611f2b565b61065e565b60405190151581526020015b60405180910390f35b3480156101dc575f5ffd5b5061021e6101eb366004611f6a565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c8565b348015610237575f5ffd5b5061024b610246366004611fa9565b6106b9565b005b348015610258575f5ffd5b5061024b610267366004611fa9565b610702565b348015610277575f5ffd5b5061024b610286366004611fd3565b610760565b61024b610299366004612077565b610acd565b3480156102a9575f5ffd5b5061021e610aec565b3480156102bd575f5ffd5b5060408051808201909152600581527f302e302e3100000000000000000000000000000000000000000000000000000060208201525b6040516101c89190612186565b34801561030b575f5ffd5b5061021e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561033e575f5ffd5b506102f361034d366004612198565b610b1a565b34801561035d575f5ffd5b505f5461037d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b3480156103ad575f5ffd5b506102f36040518060400160405280600581526020017f424e32353400000000000000000000000000000000000000000000000000000081525081565b3480156103f5575f5ffd5b5061037d6104043660046121ec565b610b83565b348015610414575f5ffd5b506101bc610423366004611fa9565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b348015610484575f5ffd5b5061021e5f81565b348015610497575f5ffd5b506104ab6104a6366004611f6a565b610bc3565b6040516101c8919061220c565b3480156104c3575f5ffd5b506102f36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561050b575f5ffd5b5061021e60015481565b348015610520575f5ffd5b5061058161052f366004611f6a565b604080518082019091525f8082526020820152505f908152600260209081526040918290208251808401909352805483526001015473ffffffffffffffffffffffffffffffffffffffff169082015290565b6040516101c89190612264565b348015610599575f5ffd5b5061024b6105a8366004612291565b610c06565b3480156105b8575f5ffd5b5061021e6105c7366004611f6a565b610c91565b3480156105d7575f5ffd5b506101bc6105e6366004611f6a565b610cc8565b3480156105f6575f5ffd5b5061024b610605366004611fa9565b610d59565b348015610615575f5ffd5b5061021e610d9c565b348015610629575f5ffd5b5061024b610638366004612308565b610fbc565b348015610648575f5ffd5b50610651611051565b6040516101c89190612321565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806106b357506106b3826110d1565b92915050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546106f281611167565b6106fc8383611174565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610751576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075b82826111c9565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156107aa5750825b90505f8267ffffffffffffffff1660011480156107c65750303b155b9050811580156107d4575080155b1561080b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561086c5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610874611215565b61087c611215565b6108a67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177587611174565b610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c656400000000000000000000000000000060448201526064015b60405180910390fd5b61091b5f87611174565b610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4772616e7420726f6c65206661696c65640000000000000000000000000000006044820152606401610908565b73ffffffffffffffffffffffffffffffffffffffff8716610a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e6e6f7420736574207a65726f2061646472657373206173207369676e6160448201527f747572652073656e6465720000000000000000000000000000000000000000006064820152608401610908565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558315610ac45784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610ad561121f565b610ade82611323565b610ae8828261134c565b5050565b5f610af5611485565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b8051604051606091610b329160200190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830152016040516020818303038152906040529050919050565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bbb90846114f4565b949350505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604090912060609190610bff906114ff565b9392505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f6e6c79207369676e617475726553656e6465722063616e2063616c6c0000006044820152606401610908565b61075b83838361150b565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bff9061177c565b5f80546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063cd802c9190602401602060405180830381865afa158015610d35573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b39190612383565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d9281611167565b6106fc83836111c9565b5f6001805f828254610dae91906123cf565b90915550506040805180820190915260015481523360208201525f610dd282610b1a565b60408051602080820183525f8083525483518085018552600581527f424e3235340000000000000000000000000000000000000000000000000000009281019290925292517f95b8d073000000000000000000000000000000000000000000000000000000008152939450909273ffffffffffffffffffffffffffffffffffffffff909216916395b8d07391610e6e91869086906004016123e2565b6020604051808303815f875af1158015610e8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eae9190612424565b5f818152600260208181526040808420885181558883018051600192830180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560038054808601825598528b517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b989097029788019690965590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c9096018054909516951694909417909255915490514281529296503392909187917feee7195b6cee0fa7044c3af0b86fe2febb1d2703d71191f44052ba0d60ffda64910160405180910390a450505090565b610fe57fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611167565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917f229f6c3b095d683755a99ab458956747a8b7066c3dd42927d850631c34c238f191a250565b60606003805480602002602001604051908101604052809291908181526020015f905b828210156110c8575f84815260209081902060408051808201909152600285029091018054825260019081015473ffffffffffffffffffffffffffffffffffffffff16828401529083529092019101611074565b50505050905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106b357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106b3565b6111718133611785565b50565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816111a1858561182b565b90508015610bbb575f8581526020839052604090206111c09085611949565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816111f6858561196a565b90508015610bbb575f8581526020839052604090206111c09085611a46565b61121d611a67565b565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806112ec57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112d37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561121d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111717fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611167565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113d1575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113ce91810190612424565b60015b61141f576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610908565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461147b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610908565b61075b8383611ace565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461121d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610bff8383611b30565b60605f610bff83611b56565b5f838152600260209081526040918290208251808401909352805480845260019091015473ffffffffffffffffffffffffffffffffffffffff16918301919091526115d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f526571756573742077697468207468617420726571756573744944206469642060448201527f6e6f7420657869737400000000000000000000000000000000000000000000006064820152608401610908565b5f83836040516115e992919061243b565b604051809103902090505f826020015173ffffffffffffffffffffffffffffffffffffffff1663431ac65760e01b8784604051602401611633929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516116bc919061244a565b5f604051808303815f865af19150503d805f81146116f5576040519150601f19603f3d011682016040523d82523d5f602084013e6116fa565b606091505b5050905080611738576040517f8f67472d00000000000000000000000000000000000000000000000000000000815260048101879052602401610908565b857fb74b3204a538cd8021662d42e794681ddc339924ef675b8fd11e9eaf6aa19eb583878760405161176c93929190612460565b60405180910390a2505050505050565b5f6106b3825490565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610ae8576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610908565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16611940575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118dc3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106b3565b5f9150506106b3565b5f610bff8373ffffffffffffffffffffffffffffffffffffffff8416611baf565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615611940575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106b3565b5f610bff8373ffffffffffffffffffffffffffffffffffffffff8416611bfb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661121d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad782611cd5565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611b285761075b8282611da3565b610ae8611e22565b5f825f018281548110611b4557611b456124b3565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015611ba357602002820191905f5260205f20905b815481526020019060010190808311611b8f575b50505050509050919050565b5f818152600183016020526040812054611bf457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556106b3565b505f6106b3565b5f8181526001830160205260408120548015611940575f611c1d6001836124e0565b85549091505f90611c30906001906124e0565b9050808214611c8f575f865f018281548110611c4e57611c4e6124b3565b905f5260205f200154905080875f018481548110611c6e57611c6e6124b3565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611ca057611ca06124f3565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506106b3565b8073ffffffffffffffffffffffffffffffffffffffff163b5f03611d3d576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610908565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff1684604051611dcc919061244a565b5f60405180830381855af49150503d805f8114611e04576040519150601f19603f3d011682016040523d82523d5f602084013e611e09565b606091505b5091509150611e19858383611e5a565b95945050505050565b341561121d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082611e6f57611e6a82611ee9565b610bff565b8151158015611e93575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611ee2576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610908565b5092915050565b805115611ef95780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60208284031215611f3b575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610bff575f5ffd5b5f60208284031215611f7a575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fa4575f5ffd5b919050565b5f5f60408385031215611fba575f5ffd5b82359150611fca60208401611f81565b90509250929050565b5f5f60408385031215611fe4575f5ffd5b611fed83611f81565b9150611fca60208401611f81565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561206f5761206f611ffb565b604052919050565b5f5f60408385031215612088575f5ffd5b61209183611f81565b9150602083013567ffffffffffffffff8111156120ac575f5ffd5b8301601f810185136120bc575f5ffd5b803567ffffffffffffffff8111156120d6576120d6611ffb565b61210760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612028565b81815286602083850101111561211b575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f610bff602083018461213a565b5f60408284031280156121a9575f5ffd5b506040805190810167ffffffffffffffff811182821017156121cd576121cd611ffb565b604052823581526121e060208401611f81565b60208201529392505050565b5f5f604083850312156121fd575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561225957835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612225565b509095945050505050565b8151815260208083015173ffffffffffffffffffffffffffffffffffffffff1690820152604081016106b3565b5f5f5f604084860312156122a3575f5ffd5b83359250602084013567ffffffffffffffff8111156122c0575f5ffd5b8401601f810186136122d0575f5ffd5b803567ffffffffffffffff8111156122e6575f5ffd5b8660208284010111156122f7575f5ffd5b939660209190910195509293505050565b5f60208284031215612318575f5ffd5b610bff82611f81565b602080825282518282018190525f918401906040840190835b818110156122595761236d8385518051825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b602093909301926040929092019160010161233a565b5f60208284031215612393575f5ffd5b81518015158114610bff575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106b3576106b36123a2565b606081525f6123f4606083018661213a565b8281036020840152612406818661213a565b9050828103604084015261241a818561213a565b9695505050505050565b5f60208284031215612434575f5ffd5b5051919050565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b83815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b818103818111156106b3576106b36123a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220dceaab71410f9aca3092ce386ea2cd2c0a9afa36ac96d9d087ba45c3f73ba79264736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161044638038061044683398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b6101088061033e5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b6021605d565b005b348015602d575f5ffd5b506034606b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b606960656077565b60b5565b565b5f60726077565b905090565b5f60727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b365f5f375f5f365f845af43d5f5f3e80801560ce573d5ff35b3d5ffdfea26469706673582212203a14936dfa35a4f93d2dbb66496c5b5d61ba92112a94605bb4b8c917080600b764736f6c634300081c003360a060405234801561000f575f5ffd5b5060405161042638038061042683398101604081905261002e916100b0565b806001600160a01b03811661009e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574207a65726f20616464726573732061732072616e646f60448201526b36b732b9b99039b2b73232b960a11b606482015260840160405180910390fd5b6001600160a01b0316608052506100dd565b5f602082840312156100c0575f5ffd5b81516001600160a01b03811681146100d6575f5ffd5b9392505050565b6080516103246101025f395f818160ad0152818161010c015261022601526103245ff3fe608060405234801561000f575f5ffd5b5060043610610063575f3560e01c8063431ac6571161004d578063431ac6571461008b578063837e7cc6146100a0578063df3fafe8146100a8575f5ffd5b80626d6cae146100675780633601318914610083575b5f5ffd5b61007060015481565b6040519081526020015b60405180910390f35b6100705f5481565b61009e6100993660046102b7565b6100f4565b005b61009e6101a6565b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161007a565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f6e6c792072616e646f6d6e65737353656e6465722063616e2063616c6c000060448201526064015b60405180910390fd5b6101a282826101b3565b5050565b6101ae610223565b600155565b816001541461021e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f52657175657374204944206d69736d6174636800000000000000000000000000604482015260640161018f565b5f5550565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8413b076040518163ffffffff1660e01b81526004016020604051808303815f875af115801561028e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b291906102d7565b905090565b5f5f604083850312156102c8575f5ffd5b50508035926020909101359150565b5f602082840312156102e7575f5ffd5b505191905056fea2646970667358221220e3dc079a3a90b9d3908b9f60d311360e8849c23b3a4dcef80857bcb15237404d64736f6c634300081c003352616e646f6d6e6573732053656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a2061727261792072657475726e206469646e277420686176652074686520726967687420636f756e7413bdbf3f759a1131f123b2db998675f963efc434b14a4e244533e1bd21312a27136e00872336b98d30449c6b08f8ed8b34306c6ffd969f036833ec1ed81ca31f5369676e61747572652053656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a20a2646970667358221220c44a85057e7cf78e9741a474fd608e0b95aea11b061508b3b9b25948938efae164736f6c634300081c00330d1a2ccd46cb80f94b40809dbd638b44c78e456a4e06b886e8c8f300fa4073950b438ea53140bb1bc93a1c632ab4df0a07d702f34e48ecb7d31da7762a320ad5204a5468e6d01b87c07655eebbb1d43913e197f53281a7d56e2b1a0beac194aa00899f6a3998ecb2f832d35025bf38bef7429005e6b591d9e0ffb10078409f220a6758eec538bb8a511eed78c922a213e4cc06743aeb10ed77f63416fe964c3505d04df1d2daeefa07790b41a9e0ab762e264798bc36340dc3a0cc5654cefa4b";

type RandomnessSenderTestConstructorParams =
  | [
      linkLibraryAddresses: RandomnessSenderTestLibraryAddresses,
      signer?: Signer
    ]
  | ConstructorParameters<typeof ContractFactory>;

const isSuperArgs = (
  xs: RandomnessSenderTestConstructorParams
): xs is ConstructorParameters<typeof ContractFactory> => {
  return (
    typeof xs[0] === "string" ||
    (Array.isArray as (arg: any) => arg is readonly any[])(xs[0]) ||
    "_isInterface" in xs[0]
  );
};

export class RandomnessSenderTest__factory extends ContractFactory {
  constructor(...args: RandomnessSenderTestConstructorParams) {
    if (isSuperArgs(args)) {
      super(...args);
    } else {
      const [linkLibraryAddresses, signer] = args;
      super(
        _abi,
        RandomnessSenderTest__factory.linkBytecode(linkLibraryAddresses),
        signer
      );
    }
  }

  static linkBytecode(
    linkLibraryAddresses: RandomnessSenderTestLibraryAddresses
  ): string {
    let linkedBytecode = _bytecode;

    linkedBytecode = linkedBytecode.replace(
      new RegExp("__\\$485e63c703b57fb39db2d057ed0b990874\\$__", "g"),
      linkLibraryAddresses["src/randomness/Randomness.sol:Randomness"]
        .replace(/^0x/, "")
        .toLowerCase()
    );

    return linkedBytecode;
  }

  override getDeployTransaction(
    overrides?: NonPayableOverrides & { from?: string }
  ): Promise<ContractDeployTransaction> {
    return super.getDeployTransaction(overrides || {});
  }
  override deploy(overrides?: NonPayableOverrides & { from?: string }) {
    return super.deploy(overrides || {}) as Promise<
      RandomnessSenderTest & {
        deploymentTransaction(): ContractTransactionResponse;
      }
    >;
  }
  override connect(
    runner: ContractRunner | null
  ): RandomnessSenderTest__factory {
    return super.connect(runner) as RandomnessSenderTest__factory;
  }

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

export interface RandomnessSenderTestLibraryAddresses {
  ["src/randomness/Randomness.sol:Randomness"]: string;
}
