UNPKG

@chainlink/functions-toolkit

Version:

An NPM package with collection of functions that can be used for working with Chainlink Functions.

1,306 lines 138 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FunctionsCoordinatorTestHelperSource = void 0; exports.FunctionsCoordinatorTestHelperSource = { _format: 'hh-sol-artifact-1', contractName: 'FunctionsCoordinatorTestHelper', sourceName: 'FunctionsCoordinatorTestHelper.sol', abi: [ { inputs: [ { internalType: 'address', name: 'router', type: 'address', }, { components: [ { internalType: 'uint32', name: 'fulfillmentGasPriceOverEstimationBP', type: 'uint32', }, { internalType: 'uint32', name: 'feedStalenessSeconds', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadBeforeCallback', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadAfterCallback', type: 'uint32', }, { internalType: 'uint40', name: 'minimumEstimateGasPriceWei', type: 'uint40', }, { internalType: 'uint16', name: 'maxSupportedRequestDataVersion', type: 'uint16', }, { internalType: 'uint64', name: 'fallbackUsdPerUnitLink', type: 'uint64', }, { internalType: 'uint8', name: 'fallbackUsdPerUnitLinkDecimals', type: 'uint8', }, { internalType: 'uint224', name: 'fallbackNativePerUnitLink', type: 'uint224', }, { internalType: 'uint32', name: 'requestTimeoutSeconds', type: 'uint32', }, { internalType: 'uint16', name: 'donFeeCentsUsd', type: 'uint16', }, { internalType: 'uint16', name: 'operationFeeCentsUsd', type: 'uint16', }, ], internalType: 'struct FunctionsBillingConfig', name: 'config', type: 'tuple', }, { internalType: 'address', name: 'linkToNativeFeed', type: 'address', }, { internalType: 'address', name: 'linkToUsdFeed', type: 'address', }, ], stateMutability: 'nonpayable', type: 'constructor', }, { inputs: [], name: 'EmptyPublicKey', type: 'error', }, { inputs: [], name: 'InconsistentReportData', type: 'error', }, { inputs: [], name: 'InsufficientBalance', type: 'error', }, { inputs: [], name: 'InvalidCalldata', type: 'error', }, { inputs: [ { internalType: 'string', name: 'message', type: 'string', }, ], name: 'InvalidConfig', type: 'error', }, { inputs: [ { internalType: 'int256', name: 'linkWei', type: 'int256', }, ], name: 'InvalidLinkWeiPrice', type: 'error', }, { inputs: [], name: 'InvalidSubscription', type: 'error', }, { inputs: [ { internalType: 'int256', name: 'usdLink', type: 'int256', }, ], name: 'InvalidUsdLinkPrice', type: 'error', }, { inputs: [ { internalType: 'address', name: 'owner', type: 'address', }, ], name: 'MustBeSubOwner', type: 'error', }, { inputs: [], name: 'NoTransmittersSet', type: 'error', }, { inputs: [], name: 'OnlyCallableByRouter', type: 'error', }, { inputs: [], name: 'OnlyCallableByRouterOwner', type: 'error', }, { inputs: [], name: 'PaymentTooLarge', type: 'error', }, { inputs: [ { internalType: 'string', name: 'message', type: 'string', }, ], name: 'ReportInvalid', type: 'error', }, { inputs: [], name: 'RouterMustBeSet', type: 'error', }, { inputs: [], name: 'UnauthorizedPublicKeyChange', type: 'error', }, { inputs: [], name: 'UnauthorizedSender', type: 'error', }, { inputs: [], name: 'UnsupportedRequestDataVersion', type: 'error', }, { anonymous: false, inputs: [ { indexed: false, internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, ], name: 'CommitmentDeleted', type: 'event', }, { anonymous: false, inputs: [ { indexed: false, internalType: 'uint32', name: 'previousConfigBlockNumber', type: 'uint32', }, { indexed: false, internalType: 'bytes32', name: 'configDigest', type: 'bytes32', }, { indexed: false, internalType: 'uint64', name: 'configCount', type: 'uint64', }, { indexed: false, internalType: 'address[]', name: 'signers', type: 'address[]', }, { indexed: false, internalType: 'address[]', name: 'transmitters', type: 'address[]', }, { indexed: false, internalType: 'uint8', name: 'f', type: 'uint8', }, { indexed: false, internalType: 'bytes', name: 'onchainConfig', type: 'bytes', }, { indexed: false, internalType: 'uint64', name: 'offchainConfigVersion', type: 'uint64', }, { indexed: false, internalType: 'bytes', name: 'offchainConfig', type: 'bytes', }, ], name: 'ConfigSet', type: 'event', }, { anonymous: false, inputs: [ { components: [ { internalType: 'uint32', name: 'fulfillmentGasPriceOverEstimationBP', type: 'uint32', }, { internalType: 'uint32', name: 'feedStalenessSeconds', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadBeforeCallback', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadAfterCallback', type: 'uint32', }, { internalType: 'uint40', name: 'minimumEstimateGasPriceWei', type: 'uint40', }, { internalType: 'uint16', name: 'maxSupportedRequestDataVersion', type: 'uint16', }, { internalType: 'uint64', name: 'fallbackUsdPerUnitLink', type: 'uint64', }, { internalType: 'uint8', name: 'fallbackUsdPerUnitLinkDecimals', type: 'uint8', }, { internalType: 'uint224', name: 'fallbackNativePerUnitLink', type: 'uint224', }, { internalType: 'uint32', name: 'requestTimeoutSeconds', type: 'uint32', }, { internalType: 'uint16', name: 'donFeeCentsUsd', type: 'uint16', }, { internalType: 'uint16', name: 'operationFeeCentsUsd', type: 'uint16', }, ], indexed: false, internalType: 'struct FunctionsBillingConfig', name: 'config', type: 'tuple', }, ], name: 'ConfigUpdated', type: 'event', }, { anonymous: false, inputs: [ { indexed: true, internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, { indexed: true, internalType: 'address', name: 'requestingContract', type: 'address', }, { indexed: false, internalType: 'address', name: 'requestInitiator', type: 'address', }, { indexed: false, internalType: 'uint64', name: 'subscriptionId', type: 'uint64', }, { indexed: false, internalType: 'address', name: 'subscriptionOwner', type: 'address', }, { indexed: false, internalType: 'bytes', name: 'data', type: 'bytes', }, { indexed: false, internalType: 'uint16', name: 'dataVersion', type: 'uint16', }, { indexed: false, internalType: 'bytes32', name: 'flags', type: 'bytes32', }, { indexed: false, internalType: 'uint64', name: 'callbackGasLimit', type: 'uint64', }, { components: [ { internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, { internalType: 'address', name: 'coordinator', type: 'address', }, { internalType: 'uint96', name: 'estimatedTotalCostJuels', type: 'uint96', }, { internalType: 'address', name: 'client', type: 'address', }, { internalType: 'uint64', name: 'subscriptionId', type: 'uint64', }, { internalType: 'uint32', name: 'callbackGasLimit', type: 'uint32', }, { internalType: 'uint72', name: 'adminFee', type: 'uint72', }, { internalType: 'uint72', name: 'donFee', type: 'uint72', }, { internalType: 'uint40', name: 'gasOverheadBeforeCallback', type: 'uint40', }, { internalType: 'uint40', name: 'gasOverheadAfterCallback', type: 'uint40', }, { internalType: 'uint32', name: 'timeoutTimestamp', type: 'uint32', }, ], indexed: false, internalType: 'struct FunctionsResponse.Commitment', name: 'commitment', type: 'tuple', }, ], name: 'OracleRequest', type: 'event', }, { anonymous: false, inputs: [ { indexed: true, internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, { indexed: false, internalType: 'address', name: 'transmitter', type: 'address', }, ], name: 'OracleResponse', type: 'event', }, { anonymous: false, inputs: [ { indexed: true, internalType: 'address', name: 'from', type: 'address', }, { indexed: true, internalType: 'address', name: 'to', type: 'address', }, ], name: 'OwnershipTransferRequested', type: 'event', }, { anonymous: false, inputs: [ { indexed: true, internalType: 'address', name: 'from', type: 'address', }, { indexed: true, internalType: 'address', name: 'to', type: 'address', }, ], name: 'OwnershipTransferred', type: 'event', }, { anonymous: false, inputs: [ { indexed: true, internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, { indexed: false, internalType: 'uint96', name: 'juelsPerGas', type: 'uint96', }, { indexed: false, internalType: 'uint256', name: 'l1FeeShareWei', type: 'uint256', }, { indexed: false, internalType: 'uint96', name: 'callbackCostJuels', type: 'uint96', }, { indexed: false, internalType: 'uint72', name: 'donFeeJuels', type: 'uint72', }, { indexed: false, internalType: 'uint72', name: 'adminFeeJuels', type: 'uint72', }, { indexed: false, internalType: 'uint72', name: 'operationFeeJuels', type: 'uint72', }, ], name: 'RequestBilled', type: 'event', }, { anonymous: false, inputs: [ { indexed: false, internalType: 'bytes32', name: 'configDigest', type: 'bytes32', }, { indexed: false, internalType: 'uint32', name: 'epoch', type: 'uint32', }, ], name: 'Transmitted', type: 'event', }, { inputs: [], name: 'acceptOwnership', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'bytes', name: 'report', type: 'bytes', }, ], name: 'callReport', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'bytes', name: 'report', type: 'bytes', }, { internalType: 'address', name: 'secondSigner', type: 'address', }, ], name: 'callReportMultipleSigners', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, ], name: 'deleteCommitment', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'uint64', name: 'subscriptionId', type: 'uint64', }, { internalType: 'bytes', name: 'data', type: 'bytes', }, { internalType: 'uint32', name: 'callbackGasLimit', type: 'uint32', }, { internalType: 'uint256', name: 'gasPriceWei', type: 'uint256', }, ], name: 'estimateCost', outputs: [ { internalType: 'uint96', name: '', type: 'uint96', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getAdminFeeJuels', outputs: [ { internalType: 'uint72', name: '', type: 'uint72', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getConfig', outputs: [ { components: [ { internalType: 'uint32', name: 'fulfillmentGasPriceOverEstimationBP', type: 'uint32', }, { internalType: 'uint32', name: 'feedStalenessSeconds', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadBeforeCallback', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadAfterCallback', type: 'uint32', }, { internalType: 'uint40', name: 'minimumEstimateGasPriceWei', type: 'uint40', }, { internalType: 'uint16', name: 'maxSupportedRequestDataVersion', type: 'uint16', }, { internalType: 'uint64', name: 'fallbackUsdPerUnitLink', type: 'uint64', }, { internalType: 'uint8', name: 'fallbackUsdPerUnitLinkDecimals', type: 'uint8', }, { internalType: 'uint224', name: 'fallbackNativePerUnitLink', type: 'uint224', }, { internalType: 'uint32', name: 'requestTimeoutSeconds', type: 'uint32', }, { internalType: 'uint16', name: 'donFeeCentsUsd', type: 'uint16', }, { internalType: 'uint16', name: 'operationFeeCentsUsd', type: 'uint16', }, ], internalType: 'struct FunctionsBillingConfig', name: '', type: 'tuple', }, ], stateMutability: 'view', type: 'function', }, { inputs: [ { internalType: 'bytes', name: '', type: 'bytes', }, ], name: 'getDONFeeJuels', outputs: [ { internalType: 'uint72', name: '', type: 'uint72', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getDONPublicKey', outputs: [ { internalType: 'bytes', name: '', type: 'bytes', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getOperationFeeJuels', outputs: [ { internalType: 'uint72', name: '', type: 'uint72', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getThresholdPublicKey', outputs: [ { internalType: 'bytes', name: '', type: 'bytes', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getUsdPerUnitLink', outputs: [ { internalType: 'uint256', name: '', type: 'uint256', }, { internalType: 'uint8', name: '', type: 'uint8', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getWeiPerUnitLink', outputs: [ { internalType: 'uint256', name: '', type: 'uint256', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'latestConfigDetails', outputs: [ { internalType: 'uint32', name: 'configCount', type: 'uint32', }, { internalType: 'uint32', name: 'blockNumber', type: 'uint32', }, { internalType: 'bytes32', name: 'configDigest', type: 'bytes32', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'latestConfigDigestAndEpoch', outputs: [ { internalType: 'bool', name: 'scanLogs', type: 'bool', }, { internalType: 'bytes32', name: 'configDigest', type: 'bytes32', }, { internalType: 'uint32', name: 'epoch', type: 'uint32', }, ], stateMutability: 'view', type: 'function', }, { inputs: [ { internalType: 'address', name: 'recipient', type: 'address', }, { internalType: 'uint96', name: 'amount', type: 'uint96', }, ], name: 'oracleWithdraw', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [], name: 'oracleWithdrawAll', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [], name: 'owner', outputs: [ { internalType: 'address', name: '', type: 'address', }, ], stateMutability: 'view', type: 'function', }, { inputs: [ { internalType: 'address[]', name: '_signers', type: 'address[]', }, { internalType: 'address[]', name: '_transmitters', type: 'address[]', }, { internalType: 'uint8', name: '_f', type: 'uint8', }, { internalType: 'bytes', name: '_onchainConfig', type: 'bytes', }, { internalType: 'uint64', name: '_offchainConfigVersion', type: 'uint64', }, { internalType: 'bytes', name: '_offchainConfig', type: 'bytes', }, ], name: 'setConfig', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'bytes', name: 'donPublicKey', type: 'bytes', }, ], name: 'setDONPublicKey', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'bytes', name: 'thresholdPublicKey', type: 'bytes', }, ], name: 'setThresholdPublicKey', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { components: [ { internalType: 'bytes', name: 'data', type: 'bytes', }, { internalType: 'bytes32', name: 'flags', type: 'bytes32', }, { internalType: 'address', name: 'requestingContract', type: 'address', }, { internalType: 'uint96', name: 'availableBalance', type: 'uint96', }, { internalType: 'uint72', name: 'adminFee', type: 'uint72', }, { internalType: 'uint64', name: 'subscriptionId', type: 'uint64', }, { internalType: 'uint64', name: 'initiatedRequests', type: 'uint64', }, { internalType: 'uint32', name: 'callbackGasLimit', type: 'uint32', }, { internalType: 'uint16', name: 'dataVersion', type: 'uint16', }, { internalType: 'uint64', name: 'completedRequests', type: 'uint64', }, { internalType: 'address', name: 'subscriptionOwner', type: 'address', }, ], internalType: 'struct FunctionsResponse.RequestMeta', name: 'request', type: 'tuple', }, ], name: 'startRequest', outputs: [ { components: [ { internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, { internalType: 'address', name: 'coordinator', type: 'address', }, { internalType: 'uint96', name: 'estimatedTotalCostJuels', type: 'uint96', }, { internalType: 'address', name: 'client', type: 'address', }, { internalType: 'uint64', name: 'subscriptionId', type: 'uint64', }, { internalType: 'uint32', name: 'callbackGasLimit', type: 'uint32', }, { internalType: 'uint72', name: 'adminFee', type: 'uint72', }, { internalType: 'uint72', name: 'donFee', type: 'uint72', }, { internalType: 'uint40', name: 'gasOverheadBeforeCallback', type: 'uint40', }, { internalType: 'uint40', name: 'gasOverheadAfterCallback', type: 'uint40', }, { internalType: 'uint32', name: 'timeoutTimestamp', type: 'uint32', }, ], internalType: 'struct FunctionsResponse.Commitment', name: 'commitment', type: 'tuple', }, ], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'address', name: 'to', type: 'address', }, ], name: 'transferOwnership', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'bytes32[3]', name: 'reportContext', type: 'bytes32[3]', }, { internalType: 'bytes', name: 'report', type: 'bytes', }, { internalType: 'bytes32[]', name: 'rs', type: 'bytes32[]', }, { internalType: 'bytes32[]', name: 'ss', type: 'bytes32[]', }, { internalType: 'bytes32', name: 'rawVs', type: 'bytes32', }, ], name: 'transmit', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [], name: 'transmitters', outputs: [ { internalType: 'address[]', name: '', type: 'address[]', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'typeAndVersion', outputs: [ { internalType: 'string', name: '', type: 'string', }, ], stateMutability: 'view', type: 'function', }, { inputs: [ { components: [ { internalType: 'uint32', name: 'fulfillmentGasPriceOverEstimationBP', type: 'uint32', }, { internalType: 'uint32', name: 'feedStalenessSeconds', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadBeforeCallback', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadAfterCallback', type: 'uint32', }, { internalType: 'uint40', name: 'minimumEstimateGasPriceWei', type: 'uint40', }, { internalType: 'uint16', name: 'maxSupportedRequestDataVersion', type: 'uint16', }, { internalType: 'uint64', name: 'fallbackUsdPerUnitLink', type: 'uint64', }, { internalType: 'uint8', name: 'fallbackUsdPerUnitLinkDecimals', type: 'uint8', }, { internalType: 'uint224', name: 'fallbackNativePerUnitLink', type: 'uint224', }, { internalType: 'uint32', name: 'requestTimeoutSeconds', type: 'uint32', }, { internalType: 'uint16', name: 'donFeeCentsUsd', type: 'uint16', }, { internalType: 'uint16', name: 'operationFeeCentsUsd', type: 'uint16', }, ], internalType: 'struct FunctionsBillingConfig', name: 'config', type: 'tuple', }, ], name: 'updateConfig', outputs: [], stateMutability: 'nonpayable', type: 'function', }, ], bytecode: '0x60a06040523480156200001157600080fd5b5060405162006196380380620061968339810160408190526200003491620004e3565b8383838383838383833380600081620000945760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c757620000c78162000156565b5050506001600160a01b038116620000f257604051632530e88560e11b815260040160405180910390fd5b6001600160a01b03908116608052600c80546001600160601b03166c0100000000000000000000000085841602179055600d80546001600160a01b031916918316919091179055620001448362000201565b5050505050505050505050506200074a565b336001600160a01b03821603620001b05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008b565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6200020b620003a6565b80516008805460208401516040808601516060870151608088015160a089015160c08a015160e08b015160ff16600160f81b026001600160f81b036001600160401b03909216600160b81b02919091166001600160b81b0361ffff938416600160a81b0261ffff60a81b1964ffffffffff909616600160801b029590951666ffffffffffffff60801b1963ffffffff9788166c010000000000000000000000000263ffffffff60601b19998916680100000000000000000299909916600160401b600160801b03199b8916640100000000026001600160401b0319909d169e89169e909e179b909b17999099169b909b1795909517979097169590951717969096161792909217909255610100840151610120850151909316600160e01b026001600160e01b0390931692909217600955610140830151600a80546101608601518416620100000263ffffffff19919091169290931691909117919091179055517f2e2c8535dcc25459d519f2300c114d2d2128bf6399722d04eca078461a3bf33a906200039b90839062000641565b60405180910390a150565b620003b0620003b2565b565b6000546001600160a01b03163314620003b05760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016200008b565b80516001600160a01b03811681146200042657600080fd5b919050565b60405161018081016001600160401b03811182821017156200045d57634e487b7160e01b600052604160045260246000fd5b60405290565b805163ffffffff811681146200042657600080fd5b805164ffffffffff811681146200042657600080fd5b805161ffff811681146200042657600080fd5b80516001600160401b03811681146200042657600080fd5b805160ff811681146200042657600080fd5b80516001600160e01b03811681146200042657600080fd5b6000806000808486036101e0811215620004fc57600080fd5b62000507866200040e565b945061018080601f19830112156200051e57600080fd5b620005286200042b565b9150620005386020880162000463565b8252620005486040880162000463565b60208301526200055b6060880162000463565b60408301526200056e6080880162000463565b60608301526200058160a0880162000478565b60808301526200059460c088016200048e565b60a0830152620005a760e08801620004a1565b60c0830152610100620005bc818901620004b9565b60e0840152610120620005d1818a01620004cb565b828501526101409150620005e7828a0162000463565b90840152610160620005fb8982016200048e565b828501526200060c838a016200048e565b90840152509093506200062590506101a086016200040e565b9150620006366101c086016200040e565b905092959194509250565b815163ffffffff1681526101808101602083015162000668602084018263ffffffff169052565b50604083015162000681604084018263ffffffff169052565b5060608301516200069a606084018263ffffffff169052565b506080830151620006b4608084018264ffffffffff169052565b5060a0830151620006cb60a084018261ffff169052565b5060c0830151620006e760c08401826001600160401b03169052565b5060e0830151620006fd60e084018260ff169052565b50610100838101516001600160e01b0316908301526101208084015163ffffffff16908301526101408084015161ffff908116918401919091526101609384015116929091019190915290565b608051615a06620007906000396000818161085501528181610d960152818161102a0152818161114001528181611c4501528181612b0301526139e30152615a066000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806385b214cf116100f9578063d227d24511610097578063e4ddcea611610071578063e4ddcea614610611578063f2f22ef114610627578063f2fde38b1461062f578063f6ea41f61461064257600080fd5b8063d227d245146105c6578063d328a91e146105f6578063e3d0e712146105fe57600080fd5b8063afcb95d7116100d3578063afcb95d7146103b2578063b1dc65a4146103d2578063ba9c924d146103e5578063c3f909d4146103f857600080fd5b806385b214cf146103575780638da5cb5b1461036a578063a631571e1461039257600080fd5b8063736d7e0f116101665780637f15e166116101405780637f15e166146102ba57806381411834146102cd57806381f1b938146102e257806381ff7048146102ea57600080fd5b8063736d7e0f1461029757806379ba5097146102aa5780637d480787146102b257600080fd5b8063626f458c11610197578063626f458c1461023857806366316d8d146102655780637212762f1461027857600080fd5b8063083a5466146101be578063181f5a77146101d35780633901c40e14610225575b600080fd5b6101d16101cc366004614128565b61064a565b005b61020f6040518060400160405280601c81526020017f46756e6374696f6e7320436f6f7264696e61746f722076312e332e300000000081525081565b60405161021c91906141d8565b60405180910390f35b6101d1610233366004614218565b61069f565b61024b6102463660046143c9565b61071c565b60405168ffffffffffffffffff909116815260200161021c565b6101d1610273366004614423565b610759565b610280610912565b6040805192835260ff90911660208301520161021c565b6101d16102a5366004614128565b610b25565b6101d1610b85565b6101d1610c82565b6101d16102c8366004614128565b610e82565b6102d5610ed2565b60405161021c91906144ad565b61020f610f41565b61033460015460025463ffffffff74010000000000000000000000000000000000000000830481169378010000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff94851681529390921660208401529082015260600161021c565b6101d16103653660046144c0565b611012565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021c565b6103a56103a03660046144d9565b6110cf565b60405161021c919061462e565b60408051600181526000602082018190529181019190915260600161021c565b6101d16103e0366004614682565b611360565b6101d16103f33660046147ed565b611976565b6105b96040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915250604080516101808101825260085463ffffffff80821683526401000000008204811660208401526801000000000000000082048116938301939093526c01000000000000000000000000810483166060830152700100000000000000000000000000000000810464ffffffffff1660808301527501000000000000000000000000000000000000000000810461ffff90811660a084015277010000000000000000000000000000000000000000000000820467ffffffffffffffff1660c08401527f010000000000000000000000000000000000000000000000000000000000000090910460ff1660e08301526009547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81166101008401527c01000000000000000000000000000000000000000000000000000000009004909216610120820152600a5480831661014083015262010000900490911661016082015290565b60405161021c91906148d9565b6105d96105d43660046149f6565b611c41565b6040516bffffffffffffffffffffffff909116815260200161021c565b61020f611daf565b6101d161060c366004614afe565b611e06565b610619612982565b60405190815260200161021c565b61024b612ac6565b6101d161063d366004614bcb565b612aeb565b61024b612aff565b610652612b90565b600081900361068d576040517f4f42be3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f61069a828483614c7b565b505050565b6106a76140c7565b33815273ffffffffffffffffffffffffffffffffffffffff821660208201526000808080806106d88989018a614ea0565b945094509450945094506107116040518060a0016040528087815260200186815260200185815260200184815260200183815250612c13565b505050505050505050565b600a54600090610753906064906107369061ffff16612d62565b6107409190614fd0565b6bffffffffffffffffffffffff16612daf565b92915050565b610761612e4e565b806bffffffffffffffffffffffff1660000361079b5750336000908152600b60205260409020546bffffffffffffffffffffffff166107f5565b336000908152600b60205260409020546bffffffffffffffffffffffff808316911610156107f5576040517ff4d678b80000000000000000000000