randomness-js
Version:
A library for consuming, verifying and using randomness from the dcipher network
717 lines (715 loc) • 197 kB
text/typescript
/* 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 {
DirectFundingTest,
DirectFundingTestInterface,
} from "../../DirectFunding.t.sol/DirectFundingTest";
const _abi = [
{
type: "function",
name: "IS_TEST",
inputs: [],
outputs: [
{
name: "",
type: "bool",
internalType: "bool",
},
],
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: "setUp",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
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_CallbackShouldNotRevert_IfInterfaceIsNotImplemented",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_Deployment_Configurations",
inputs: [],
outputs: [],
stateMutability: "view",
},
{
type: "function",
name: "test_FulfillDecryptionRequest_WithLowCallbackGasLimit",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_FulfillDecryptionRequest_WithRevertingReceiver",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_FulfillDecryptionRequest_WithZeroCallbackGasLimit",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_FulfillSignatureRequest_WithDirectFunding_Successfully",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_Randomness_SignatureVerification",
inputs: [],
outputs: [],
stateMutability: "view",
},
{
type: "function",
name: "test_SelectArrayIndices_One_returnsAll",
inputs: [],
outputs: [],
stateMutability: "pure",
},
{
type: "function",
name: "test_SelectArrayIndices_Zero_returnsEmpty",
inputs: [],
outputs: [],
stateMutability: "pure",
},
{
type: "function",
name: "test_Update_SignatureScheme",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_selectArrayIndices_ReturnsCorrectCount",
inputs: [],
outputs: [],
stateMutability: "pure",
},
{
type: "event",
name: "RandomnessCallbackFailed",
inputs: [
{
name: "requestID",
type: "uint256",
indexed: true,
internalType: "uint256",
},
],
anonymous: false,
},
{
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: "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 =
"0x600c8054600160ff199182168117909255601f80549091169091179055610120604052608080805280620161ef60a03960229061003c908261012a565b50604051806060016040528060408152602001620161af60409139602390610064908261012a565b5060408051602081019091525f8152602490610080908261012a565b5034801561008c575f5ffd5b506101e4565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806100ba57607f821691505b6020821081036100d857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561012557805f5260205f20601f840160051c810160208510156101035750805b601f840160051c820191505b81811015610122575f815560010161010f565b50505b505050565b81516001600160401b0381111561014357610143610092565b6101578161015184546100a6565b846100de565b6020601f821160018114610189575f83156101725750848201515b5f19600385901b1c1916600184901b178455610122565b5f84815260208120601f198516915b828110156101b85787850151825560209485019460019092019101610198565b50848210156101d557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b62015fbc80620001f35f395ff3fe608060405234801561000f575f5ffd5b506004361061018f575f3560e01c806385226c81116100dd578063d8c0b89d11610088578063e20c9f7111610063578063e20c9f7114610297578063edf06c381461029f578063fa7626d4146102a7575f5ffd5b8063d8c0b89d1461027f578063da6f544614610287578063dca042511461028f575f5ffd5b8063b5508aa9116100b8578063b5508aa914610257578063ba414fa61461025f578063c426f8dd14610277575f5ffd5b806385226c8114610225578063916a17c61461023a578063b0464fdc1461024f575f5ffd5b80633e5e3c231161013d578063658e172611610118578063658e17261461020057806366d9a9a0146102085780637b4074911461021d575f5ffd5b80633e5e3c23146101e85780633f7286f4146101f05780635c7c9813146101f8575f5ffd5b80631ed7831c1161016d5780631ed7831c146101ad5780632ade3880146101cb5780633cb41e7e146101e0575f5ffd5b80630a9254e4146101935780631245431f1461019d578063179c209b146101a5575b5f5ffd5b61019b6102b4565b005b61019b610372565b61019b610485565b6101b5610595565b6040516101c29190615189565b60405180910390f35b6101d36105f5565b6040516101c29190615202565b61019b610731565b6101b5610cf2565b6101b5610d50565b61019b610dae565b61019b611f4e565b6102106122b4565b6040516101c29190615363565b61019b61242d565b61022d6129ce565b6040516101c291906153ff565b610242612a99565b6040516101c29190615474565b610242612b8f565b61022d612c85565b610267612d50565b60405190151581526020016101c2565b61019b612e20565b61019b612f53565b61019b61347e565b61019b61357c565b6101b56136b9565b61019b613717565b601f546102679060ff1681565b6102bc613fe9565b6102c4613ff1565b602780547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b039384161790915560288054821693831693841790556026805482169483169490941790935560258054909316938116939093179091556020546103389216906145a3565b602980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b604080515f808252602082019092526040517f298f239c0000000000000000000000000000000000000000000000000000000081525f60048201819052600160248301527fdeadbeef00000000000000000000000000000000000000000000000000000000604483015291925073__$485e63c703b57fb39db2d057ed0b990874$__9063298f239c906064015f60405180830381865af4158015610418573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261043f91908101906155d7565b905061048182826040518060400160405280601381526020017f617272617920776173206e6f7420656d7074790000000000000000000000000081525061466c565b5050565b6040517f298f239c000000000000000000000000000000000000000000000000000000008152606460048201819052600a602483018190527fdeadbeef000000000000000000000000000000000000000000000000000000006044840152915f9073__$485e63c703b57fb39db2d057ed0b990874$__9063298f239c9084015f60405180830381865af415801561051e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261054591908101906155d7565b905061056c81518460405180606001604052806028815260200162015c65602891396146f1565b5f5b815181101561058f578281111561058757610587615683565b60010161056e565b50505050565b606060168054806020026020016040519081016040528092919081815260200182805480156105eb57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116105cd575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015610728575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610711578382905f5260205f20018054610686906156b0565b80601f01602080910402602001604051908101604052809291908181526020018280546106b2906156b0565b80156106fd5780601f106106d4576101008083540402835291602001916106fd565b820191905f5260205f20905b8154815290600101906020018083116106e057829003601f168201915b505050505081526020019060010190610669565b505050508152505081526020019060010190610618565b50505050905090565b602854601f546040515f926001600160a01b03908116926101009004169061075890615127565b6001600160a01b03928316815291166020820152604001604051809103905ff080158015610788573d5f5f3e3d5ffd5b506028546040517f4b16093500000000000000000000000000000000000000000000000000000000815262030d4060048201819052929350600192915f916001600160a01b0390911690634b16093590602401602060405180830381865afa1580156107f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081a9190615701565b6040517f4e6d441200000000000000000000000000000000000000000000000000000000815263ffffffff841660048201529091506001600160a01b03851690634e6d4412908390602401604080518083038185885af1158015610880573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108a59190615718565b50506028546040517fc58343ef000000000000000000000000000000000000000000000000000000008152600481018590525f916001600160a01b03169063c58343ef906024015f60405180830381865afa158015610906573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261092d91908101906157e3565b9050610949816040015163ffffffff168463ffffffff16614745565b61095781602001515f6147c1565b601f546040517fca669fa70000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b1580156109ca575f5ffd5b505af11580156109dc573d5f5f3e3d5ffd5b50506028546040517f86b9620d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506386b9620d91506024015f604051808303815f87803b158015610a4f575f5ffd5b505af1158015610a61573d5f5f3e3d5ffd5b50506040518692507f8f67472dde2126ccd0315b75dc482a5a73acb228a395553f8ae6edde5a0ca4fa91505f90a26027546040517fda8281160000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063da82811690610adb90879060239060040161598f565b5f604051808303815f87803b158015610af2575f5ffd5b505af1158015610b04573d5f5f3e3d5ffd5b50506028546040517fc58343ef000000000000000000000000000000000000000000000000000000008152600481018890526001600160a01b03909116925063c58343ef91506024015f60405180830381865afa158015610b67573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b8e91908101906157e3565b90505f856001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bcc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf09190615701565b6027546040517fcd802c9100000000000000000000000000000000000000000000000000000000815260048101839052919250610c81916001600160a01b039091169063cd802c91906024015b602060405180830381865afa158015610c58573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c7c91906159be565b614819565b610cea866001600160a01b031663360131896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce49190615701565b5f61488f565b505050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156105eb57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116105cd575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156105eb57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116105cd575050505050905090565b601f54602854610dcf916001600160a01b03610100909104811691166145a3565b602980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169182179055604080517f360131890000000000000000000000000000000000000000000000000000000081529051610e5c929163360131899160048083019260209291908290030181865afa158015610cc0573d5f5f3e3d5ffd5b60408051808201825260018082526029546001600160a01b039081166020840190815260285494517f775b839c0000000000000000000000000000000000000000000000000000000081528451600482015290518216602482015291938493925f92919091169063775b839c906044015f60405180830381865afa158015610ee6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f0d91908101906159de565b9050610f18816148e7565b6028546040517f4b1609350000000000000000000000000000000000000000000000000000000081526207a12060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610f7f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa39190615701565b9050610fe65f82116040518060400160405280601581526020017f496e76616c69642072657175657374207072696365000000000000000000000081525061495b565b6110256040518060400160405280601781526020017f457374696d617465642072657175657374207072696365000000000000000000815250826149ad565b6040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190525f60448301526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063491cc7c2906084015f604051808303815f87803b15801561109c575f5ffd5b505af11580156110ae573d5f5f3e3d5ffd5b50506029546040514281526001600160a01b03909116925088915087907feee7195b6cee0fa7044c3af0b86fe2febb1d2703d71191f44052ba0d60ffda649060200160405180910390a46029546040517f4e6d441200000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526001600160a01b0390911690634e6d4412908390602401604080518083038185885af115801561115f573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111849190615718565b5050602954604080517e6d6cae00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691626d6cae9160048083019260209291908290030181865afa1580156111e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112089190615701565b6027546040517fc58343ef000000000000000000000000000000000000000000000000000000008152600481018990529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa15801561126c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526112939190810190615a10565b6028546040517fc58343ef000000000000000000000000000000000000000000000000000000008152600481018a90529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156112f7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261131e91908101906157e3565b90506113558563ffffffff16826040015163ffffffff161460405180608001604052806048815260200162015d9b6048913961495b565b61137d815f01515f1460405180606001604052806028815260200162015e886028913961495b565b6113b55f82602001511180156113965750848260200151145b6040518060600160405280602f815260200162015c08602f913961495b565b6113de8882606001511460405180606001604052806040815260200162015de36040913961495b565b6040517f48f50c0f000000000000000000000000000000000000000000000000000000008152620186a06004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906348f50c0f906024015f604051808303815f87803b158015611443575f5ffd5b505af1158015611455573d5f5f3e3d5ffd5b505050505f5a601f546040517fca669fa70000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b1580156114d1575f5ffd5b505af11580156114e3573d5f5f3e3d5ffd5b50506027546040517fda8281160000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063da828116915061153390879060239060040161598f565b5f604051808303815f87803b15801561154a575f5ffd5b505af115801561155c573d5f5f3e3d5ffd5b505050505f5a90505f61156f8284615b77565b90506115ba6040518060400160405280601981526020017f526571756573742043616c6c6261636b4761734c696d69743a00000000000000815250856040015163ffffffff166149ad565b6115fd6040518060400160405280601981526020017f526571756573742043616c6c6261636b47617350726963653a0000000000000081525085602001516149ad565b61163c6040518060400160405280600c81526020017f54782047617320757365643a0000000000000000000000000000000000000000815250826149ad565b61167b6040518060400160405280601381526020017f5478204761732070726963652028776569293a000000000000000000000000008152503a6149ad565b60408051808201909152601481527f547820546f74616c20636f73742028776569293a00000000000000000000000060208201526116c2906116bd3a84615b90565b6149ad565b6027546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810188905261170e916001600160a01b03169063cd802c9190602401610c3d565b602954604080517f3601318900000000000000000000000000000000000000000000000000000000815290516117b0926001600160a01b03169163360131899160048083019260209291908290030181865afa158015611770573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117949190615701565b60236040516117a39190615ba7565b604051809103902061488f565b6027546040517fcd802c91000000000000000000000000000000000000000000000000000000008152600481018d90526001600160a01b039091169063cd802c9190602401602060405180830381865afa158015611810573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183491906159be565b1561184157611841615683565b60275f9054906101000a90046001600160a01b03166001600160a01b031663e63b5d586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611891573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b59190615701565b156118c2576118c2615683565b60275f9054906101000a90046001600160a01b03166001600160a01b0316636f421ea96040518163ffffffff1660e01b81526004015f60405180830381865afa158015611911573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261193891908101906155d7565b511561194657611946615683565b60275f9054906101000a90046001600160a01b03166001600160a01b031663571d70876040518163ffffffff1660e01b81526004015f60405180830381865afa158015611995573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119bc91908101906155d7565b516001146119cc576119cc615683565b6027546040517fb0947289000000000000000000000000000000000000000000000000000000008152600481018d9052611a72916001600160a01b03169063b094728990602401602060405180830381865afa158015611a2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a5291906159be565b1560405180608001604052806043815260200162015d586043913961495b565b6027546040517fc58343ef000000000000000000000000000000000000000000000000000000008152600481018d90526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015611ad1573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611af89190810190615a10565b9450611b218560c001516040518060600160405280603d815260200162015cc2603d913961495b565b6028546040517fc58343ef000000000000000000000000000000000000000000000000000000008152600481018d90526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015611b80573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ba791908101906157e3565b9350611bec6040518060400160405280601781526020017f4469726563742066756e64696e6720666565207061696400000000000000000081525085602001516149ad565b611c2260405180606001604052806025815260200162015f6260259139611c133a84615b90565b86602001516116bd9190615b77565b602854604080517f18e3dd270000000000000000000000000000000000000000000000000000000081529051611cd7926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa158015611c84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ca89190615c36565b6bffffffffffffffffffffffff165f1460405180606001604052806036815260200162015cff6036913961495b565b602080850151602854604080517f3bc32c750000000000000000000000000000000000000000000000000000000081529051611d8f946001600160a01b0390931692633bc32c7592600480820193918290030181865afa158015611d3d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d619190615c36565b6bffffffffffffffffffffffff161460405180606001604052806040815260200162015e486040913961495b565b602854604080517f995cb36e0000000000000000000000000000000000000000000000000000000081529051611df1926001600160a01b03169163995cb36e9160048083019260209291908290030181865afa158015611c84573d5f5f3e3d5ffd5b601f546040517fca669fa70000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015611e64575f5ffd5b505af1158015611e76573d5f5f3e3d5ffd5b5050601f546028546040517f54236fb30000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b03908116600484018190523194501691506354236fb3906024015f604051808303815f87803b158015611ee2575f5ffd5b505af1158015611ef4573d5f5f3e3d5ffd5b5050506020860151601f54611f3f92508391611f1f916001600160a01b036101009091041631615c61565b1160405180606001604052806035815260200162015c8d6035913961495b565b50505050505050505050505050565b602854601f546040517f91d148540000000000000000000000000000000000000000000000000000000081527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177560048201526101009091046001600160a01b03908116602483015261200a9216906391d14854906044015b602060405180830381865afa158015611fe1573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061200591906159be565b614a20565b602754601f546040517f91d148540000000000000000000000000000000000000000000000000000000081527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177560048201526101009091046001600160a01b0390811660248301526120869216906391d1485490604401611fc6565b6025546001600160a01b031661209e5761209e615683565b6026546001600160a01b03166120b6576120b6615683565b6027546001600160a01b03166120ce576120ce615683565b6028546001600160a01b03166120e6576120e6615683565b6029546001600160a01b03166120fe576120fe615683565b602754604080517fe6b3ca7100000000000000000000000000000000000000000000000000000000815290515f926001600160a01b03169163e6b3ca719160048083019260209291908290030181865afa15801561215e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121829190615c74565b6001600160a01b03160361219857612198615683565b602654604080517f5f7c75220000000000000000000000000000000000000000000000000000000081529051612225926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa1580156121f9573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261222091908101906159de565b6148e7565b602654604080517f5f7c752200000000000000000000000000000000000000000000000000000000815290516122b2926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa158015612286573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122ad91908101906159de565b614a72565b565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015610728578382905f5260205f2090600202016040518060400160405290815f82018054612307906156b0565b80601f0160208091040260200160405190810160405280929190818152602001828054612333906156b0565b801561237e5780601f106123555761010080835404028352916020019161237e565b820191905f5260205f20905b81548152906001019060200180831161236157829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561241557602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116123c25790505b505050505081525050815260200190600101906122d7565b602854604080517f57a8070a00000000000000000000000000000000000000000000000000000000815290516124ee926001600160a01b0316916357a8070a9160048083019260209291908290030181865afa15801561248f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b391906159be565b6040518060400160405280601e81526020017f426c6f636b6c6f636b53656e646572206e6f7420636f6e66696775726564000081525061495b565b602854604080517fa608a1e100000000000000000000000000000000000000000000000000000000815290516125af926001600160a01b03169163a608a1e19160048083019260209291908290030181865afa158015612550573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061257491906159be565b6040518060400160405280601981526020017f426c6f636b6c6f636b53656e6465722069732070617573656400000000000000815250614ae3565b6028546040517f4b1609350000000000000000000000000000000000000000000000000000000081526207a12060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015612616573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061263a9190615701565b6020546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b1580156126ac575f5ffd5b505af11580156126be573d5f5f3e3d5ffd5b50506028546040517f811ee32a00000000000000000000000000000000000000000000000000000000815263ffffffff861660048201528593505f92506001600160a01b039091169063811ee32a90859060240160206040518083038185885af115801561272e573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906127539190615701565b6040517f48f50c0f000000000000000000000000000000000000000000000000000000008152620186a06004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906348f50c0f906024015f604051808303815f87803b1580156127bb575f5ffd5b505af11580156127cd573d5f5f3e3d5ffd5b5050601f546040517fca669fa70000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015f604051808303815f87803b158015612844575f5ffd5b505af1158015612856573d5f5f3e3d5ffd5b50506027546040517fda8281160000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063da82811691506128a690849060239060040161598f565b5f604051808303815f87803b1580156128bd575f5ffd5b505af11580156128cf573d5f5f3e3d5ffd5b50506027546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810185905261292193506001600160a01b03909116915063cd802c9190602401610c3d565b6028546040517fc58343ef000000000000000000000000000000000000000000000000000000008152600481018390525f916001600160a01b03169063c58343ef906024015f60405180830381865afa158015612980573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526129a791908101906157e3565b90506129c78160c001518051906020012060236040516117a39190615ba7565b5050505050565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015610728578382905f5260205f20018054612a0e906156b0565b80601f0160208091040260200160405190810160405280929190818152602001828054612a3a906156b0565b8015612a855780601f10612a5c57610100808354040283529160200191612a85565b820191905f5260205f20905b815481529060010190602001808311612a6857829003601f168201915b5050505050815260200190600101906129f1565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015610728575f8481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612b7757602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612b245790505b50505050508152505081526020019060010190612abc565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015610728575f8481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612c6d57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612c1a5790505b50505050508152505081526020019060010190612bb2565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015610728578382905f5260205f20018054612cc5906156b0565b80601f0160208091040260200160405190810160405280929190818152602001828054612cf1906156b0565b8015612d3c5780601f10612d1357610100808354040283529160200191612d3c565b820191905f5260205f20905b815481529060010190602001808311612d1f57829003601f168201915b505050505081526020019060010190612ca8565b6008545f9060ff1615612d67575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015612df5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e199190615701565b1415905090565b602854602754604080518082018252600581527f424e323534000000000000000000000000000000000000000000000000000000602082015290517f317e6e73000000000000000000000000000000000000000000000000000000008152600a936001935f9373__$485e63c703b57fb39db2d057ed0b990874$__9363317e6e7393612ec5936001600160a01b039182169391169160239189918b9190600401615c8f565b602060405180830381865af4158015612ee0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0491906159be565b9050612f45816040518060400160405280601d81526020017f5369676e617475726520766572696669636174696f6e206661696c656400000081525061495b565b612f4e81614b35565b505050565b601f54602854612f74916001600160a01b03610100909104811691166145a3565b602980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169182179055604080517f360131890000000000000000000000000000000000000000000000000000000081529051613001929163360131899160048083019260209291908290030181865afa158015610cc0573d5f5f3e3d5ffd5b6028546040517f4b1609350000000000000000000000000000000000000000000000000000000081526103e86004820181905260019290915f916001600160a01b031690634b160935906024015b602060405180830381865afa15801561306a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061308e9190615701565b6029546040517f4e6d441200000000000000000000000000000000000000000000000000000000815263ffffffff851660048201529192506001600160a01b031690634e6d4412908390602401604080518083038185885af11580156130f6573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061311b9190615718565b50506028546040517fc58343ef000000000000000000000000000000000000000000000000000000008152600481018590525f916001600160a01b03169063c58343ef906024015f60405180830381865afa15801561317c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131a391908101906157e3565b90506131bf816040015163ffffffff168463ffffffff16614745565b6131cd81602001515f6147c1565b601f546040517fca669fa70000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015613240575f5ffd5b505af1158015613252573d5f5f3e3d5ffd5b50506027546040517fda8281160000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063da82811691506132a290879060239060040161598f565b5f604051808303815f87803b1580156132b9575f5ffd5b505af11580156132cb573d5f5f3e3d5ffd5b50506028546040517fc58343ef000000000000000000000000000000000000000000000000000000008152600481018890526001600160a01b03909116925063c58343ef91506024015f60405180830381865afa15801561332e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261335591908101906157e3565b90505f60295f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133cb9190615701565b6027546040517fcd802c910000000000000000000000000000000000000000000000000000000081526004810183905291925061341c916001600160a01b039091169063cd802c9190602401610c3d565b602954604080517f3601318900000000000000000000000000000000000000000000000000000000815290516129c7926001600160a01b03169163360131899160048083019260209291908290030181865afa158015610cc0573d5f5f3e3d5ffd5b601f5460285461349f916001600160a01b03610100909104811691166145a3565b602980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169182179055604080517f36013189000000000000000000000000000000000000000000000000000000008152905161352c929163360131899160048083019260209291908290030181865afa158015610cc0573d5f5f3e3d5ffd5b6028546040517f4b1609350000000000000000000000000000000000000000000000000000000081525f60048201819052600192909182916001600160a01b031690634b1609359060240161304f565b6040805160018082528183019092525f91602080830190803683370190505090505f815f815181106135b0576135b0615cf3565b60209081029190910101526040517f298f239c00000000000000000000000000000000000000000000000000000000815260016004820181905260248201527fdeadbeef0000000000000000000000000000000000000000000000000000000060448201525f9073__$485e63c703b57fb39db2d057ed0b990874$__9063298f239c906064015f60405180830381865af4158015613650573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261367791908101906155d7565b905061048182826040518060400160405280601a81526020017f66756c6c206172726179207761736e27742072657475726e656400000000000081525061466c565b606060158054806020026020016040519081016040528092919081815260200182805480156105eb57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116105cd575050505050905090565b60408051808201909152600581527f424e32353500000000000000000000000000000000000000000000000000000060208201525f61375582614ba4565b905061378f5f6001600160a01b0316826001600160a01b0316141560405180606001604052806025815260200162015e236025913961495b565b6137be816001600160a01b03163b5f1460405180606001604052806023815260200162015d356023913961495b565b601f546040517fca669fa70000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015613831575f5ffd5b505af1158015613843573d5f5f3e3d5ffd5b50506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f722073636860448201527f656d6541646472657373000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb391506084015f604051808303815f87803b1580156138fd575f5ffd5b505af115801561390f573d5f5f3e3d5ffd5b50506025546040517fbab867da0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063bab867da915061395e9085908590600401615d20565b5f604051808303815f87803b158015613975575f5ffd5b505af1158015613987573d5f5f3e3d5ffd5b50506026546040805160608101909152602d8082526001600160a01b0390921694506139c2935084151592509062015f08602083013961495b565b6139f15f826001600160a01b03163b1160405180606001604052806023815260200162015eb06023913961495b565b601f546040517fca669fa70000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015613a64575f5ffd5b505af1158015613a76573d5f5f3e3d5ffd5b50506025546040517fbab867da0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063bab867da9150613ac59085908590600401615d20565b5f604051808303815f87803b158015613adc575f5ffd5b505af1158015613aee573d5f5f3e3d5ffd5b50506025546040517f5bb09cf8000000000000000000000000000000000000000000000000000000008152613b9193506001600160a01b03858116935090911690635bb09cf890613b43908790600401615d4a565b602060405180830381865afa158015613b5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b829190615c74565b6001600160a01b031614614a20565b50602854601f546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090920482166004820152911690737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015613c0c575f5ffd5b505af1158015613c1e573d5f5f3e3d5ffd5b50506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d654960448201527f44000000000000000000000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb391506084015f604051808303815f87803b158015613cd8575f5ffd5b505af1158015613cea573d5f5f3e3d5ffd5b50506025546040517fbab867da0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063bab867da9150613d399085908590600401615d20565b5f604051808303815f87803b158015613d50575f5ffd5b505af1158015613d62573d5f5f3e3d5ffd5b50506025546040517f5bb09cf8000000000000000000000000000000000000000000000000000000008152613e2093506001600160a01b03858116935090911690635bb09cf890613db7908790600401615d4a565b602060405180830381865afa158015613dd2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613df69190615c74565b6001600160a01b0316141560405180606001604052806035815260200162015ed36035913961495b565b601f546040517fca669fa70000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b158015613e93575f5ffd5b505af1158015613ea5573d5f5f3e3d5ffd5b50506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f722073636860448201527f656d6541646472657373000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb391506084015f604051808303815f87803b158015613f5f575f5ffd5b505af1158015613f71573d5f5f3e3d5ffd5b50506025546040517fbab867da0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063bab867da9150613fc09085905f90600401615d20565b5f604051808303815f87803b158015613fd7575f5ffd5b505af1158015610cea573d5f5f3e3d5ffd5b6122b2614bb5565b601f546040517f06447d560000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201525f90819081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b15801561406c575f5ffd5b505af115801561407e573d5f5f3e3d5ffd5b505050505f60228054614090906156b0565b80601f01602080910402602001604051908101604052809291908181526020018280546140bc906156b0565b80156141075780601f106140de57610100808354040283529160200191614107565b820191905f5260205f20905b8154815290600101906020018083116140ea57829003601f168201915b505050505080602001905181019061411f9190615d9e565b90505f60405161412e90615135565b6001600160a01b039091168152602001604051809103905ff080158015614157573d5f5f3e3d5ffd5b5094506040518060400160405280825f015160016002811061417b5761417b615cf3565b60200201518152602001825f01515f6002811061419a5761419a615cf3565b6020020151815250604051806040016040528083602001516001600281106141c4576141c4615cf3565b6020020151815260200183602001515f600281106141e4576141e4615cf3565b602002015190526040516141f790615143565b614202929190615dff565b604051809103905ff08015801561421b573d5f5f3e3d5ffd5b50604080518082018252600581527f424e323534000000000000000000000000000000000000000000000000000000602082015290517fbab867da0000000000000000000000000000000000000000000000000000000081529195506001600160a01b0387169163bab867da91614296918890600401615d20565b5f604051808303815f87803b1580156142ad575f5ffd5b505af11580156142bf573d5f5f3e3d5ffd5b505050505f6040516142d090615151565b604051809103905ff0801580156142e9573d5f5f3e3d5ffd5b5090505f6040516142f99061515f565b604051809103905ff080158015614312573d5f5f3e3d5ffd5b5090505f826040516143239061516d565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff08015801561435a573d5f5f3e3d5ffd5b5090506143806040518060600160405280602d815260200162015f35602d913982614ea1565b5f8260405161438e9061516d565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff0801580156143c5573d5f5f3e3d5ffd5b5090506143eb6040518060600160405280602e815260200162015c37602e913982614ea1565b601f546040517f485cc9550000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0390811660048301528a811660248301529197509195508591879183169063485cc955906044015f604051808303815f87803b15801561445f575f5ffd5b505af1158015614471573d5f5f3e3d5ffd5b5050601f546040517f485cc9550000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015261010090920482166024820152908a16925063485cc95591506044015f604051808303815f87803b1580156144df575f5ffd5b505af11580156144f1573d5f5f3e3d5ffd5b506207a120925062061a809150620f42409050622dc6c0620c3500600a6113886145218e88888888888888614f14565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c6001600160a01b03166390c5013b6040518163f