@witnet/solidity 3.0.4 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/LICENSE +2 -2
  2. package/build/contracts/Bech32.json +1 -1
  3. package/build/contracts/Clonable.json +1 -1
  4. package/build/contracts/Context.json +1 -1
  5. package/build/contracts/Create3.json +1 -1
  6. package/build/contracts/ERC165.json +1 -1
  7. package/build/contracts/Escrowable.json +1 -1
  8. package/build/contracts/IChainlinkAggregatorV3.json +1 -1
  9. package/build/contracts/IERC165.json +1 -1
  10. package/build/contracts/IERC20.json +1 -1
  11. package/build/contracts/IERC2362.json +1 -1
  12. package/build/contracts/IPythChainlinkAggregatorV3.json +1 -1
  13. package/build/contracts/IWitAppliance.json +1 -1
  14. package/build/contracts/IWitOracle.json +1 -1
  15. package/build/contracts/IWitOracleAppliance.json +1 -1
  16. package/build/contracts/IWitOracleConsumer.json +1 -1
  17. package/build/contracts/IWitOracleConsumerLegacy.json +1 -1
  18. package/build/contracts/IWitOracleLegacy.json +1 -1
  19. package/build/contracts/IWitOracleQueriable.json +1 -1
  20. package/build/contracts/IWitOracleQueriableConsumer.json +1 -1
  21. package/build/contracts/IWitOracleQueriableEvents.json +1 -1
  22. package/build/contracts/IWitOracleQueriableExperimental.json +1 -1
  23. package/build/contracts/IWitOracleQueriableTrustableReporter.json +1 -1
  24. package/build/contracts/IWitOracleQueriableTrustlessReporter.json +1 -1
  25. package/build/contracts/IWitOracleRadonRegistry.json +1 -1
  26. package/build/contracts/IWitOracleRadonRegistryEvents.json +1 -1
  27. package/build/contracts/IWitOracleRadonRegistryLegacy.json +1 -1
  28. package/build/contracts/IWitOracleRadonRequestFactory.json +1 -1
  29. package/build/contracts/IWitOracleRadonRequestModal.json +1 -1
  30. package/build/contracts/IWitOracleRadonRequestTemplate.json +1 -1
  31. package/build/contracts/IWitOracleRequest.json +1 -1
  32. package/build/contracts/IWitOracleRequestFactory.json +1 -1
  33. package/build/contracts/IWitOracleRequestFactoryEvents.json +1 -1
  34. package/build/contracts/IWitOracleRequestTemplate.json +1 -1
  35. package/build/contracts/IWitOracleTrustableAdmin.json +1 -1
  36. package/build/contracts/IWitOracleTrustless.json +1 -1
  37. package/build/contracts/IWitPriceFeeds.json +1 -1
  38. package/build/contracts/IWitPriceFeedsAdmin.json +1 -1
  39. package/build/contracts/IWitPriceFeedsConsumer.json +1 -1
  40. package/build/contracts/IWitPriceFeedsEvents.json +1 -1
  41. package/build/contracts/IWitPriceFeedsLegacy.json +1 -1
  42. package/build/contracts/IWitPriceFeedsLegacyAdmin.json +1 -1
  43. package/build/contracts/IWitPriceFeedsLegacySolver.json +1 -1
  44. package/build/contracts/IWitPriceFeedsLegacySolverFactory.json +1 -1
  45. package/build/contracts/IWitPriceFeedsTypes.json +1 -1
  46. package/build/contracts/IWitPyth.json +1 -1
  47. package/build/contracts/IWitPythChainlinkAggregator.json +1 -1
  48. package/build/contracts/IWitPythErrors.json +1 -1
  49. package/build/contracts/IWitPythEvents.json +1 -1
  50. package/build/contracts/IWitPythReporter.json +1 -1
  51. package/build/contracts/IWitRandomness.json +1 -1
  52. package/build/contracts/IWitRandomnessAdmin.json +1 -1
  53. package/build/contracts/IWitRandomnessAdminV2.json +1 -1
  54. package/build/contracts/IWitRandomnessConsumer.json +1 -1
  55. package/build/contracts/IWitRandomnessEvents.json +1 -1
  56. package/build/contracts/IWitRandomnessLegacy.json +1 -1
  57. package/build/contracts/IWitRandomnessTypes.json +1 -1
  58. package/build/contracts/Initializable.json +1 -1
  59. package/build/contracts/OVM_GasPriceOracle.json +1 -1
  60. package/build/contracts/Ownable.json +1 -1
  61. package/build/contracts/Ownable2Step.json +1 -1
  62. package/build/contracts/Payable.json +1 -1
  63. package/build/contracts/Proxiable.json +1 -1
  64. package/build/contracts/ReentrancyGuard.json +1 -1
  65. package/build/contracts/Secp256k1.json +1 -1
  66. package/build/contracts/Slices.json +1 -1
  67. package/build/contracts/TestBech32.json +1 -1
  68. package/build/contracts/TestSecp256k1.json +1 -1
  69. package/build/contracts/Upgradeable.json +1 -1
  70. package/build/contracts/UsingWitOracle.json +1 -1
  71. package/build/contracts/UsingWitPriceFeeds.json +1 -1
  72. package/build/contracts/UsingWitRandomness.json +1 -1
  73. package/build/contracts/WitOracle.json +2 -13
  74. package/build/contracts/WitOracleBasePushOnly.json +1 -1
  75. package/build/contracts/WitOracleBasePushOnlyTrustable.json +1 -1
  76. package/build/contracts/WitOracleBasePushOnlyTrustless.json +1 -1
  77. package/build/contracts/WitOracleBasePushOnlyUpgradable.json +1 -1
  78. package/build/contracts/WitOracleBaseQueriable.json +1 -1
  79. package/build/contracts/WitOracleBaseQueriableTrustable.json +1 -1
  80. package/build/contracts/WitOracleBaseQueriableTrustless.json +1 -1
  81. package/build/contracts/WitOracleBaseQueriableUpgradable.json +1 -1
  82. package/build/contracts/WitOracleDataLib.json +2 -254
  83. package/build/contracts/WitOraclePushOnly.json +1 -1
  84. package/build/contracts/WitOracleRadonEncodingLib.json +2 -13
  85. package/build/contracts/WitOracleRadonRegistry.json +2 -13
  86. package/build/contracts/WitOracleRadonRegistryBase.json +1 -1
  87. package/build/contracts/WitOracleRadonRegistryBaseUpgradable.json +1 -1
  88. package/build/contracts/WitOracleRadonRegistryData.json +1 -1
  89. package/build/contracts/WitOracleRadonRegistryDefaultV21.json +1 -1
  90. package/build/contracts/WitOracleRadonRegistryUpgradableDefault.json +2 -17
  91. package/build/contracts/WitOracleRadonRegistryUpgradableNoSha256.json +1 -1
  92. package/build/contracts/WitOracleRadonRegistryUpgradableZkSync.json +1 -1
  93. package/build/contracts/WitOracleRadonRequestFactory.json +2 -13
  94. package/build/contracts/WitOracleRadonRequestFactoryBase.json +1 -1
  95. package/build/contracts/WitOracleRadonRequestFactoryBaseUpgradable.json +1 -1
  96. package/build/contracts/WitOracleRadonRequestFactoryModals.json +2 -13
  97. package/build/contracts/WitOracleRadonRequestFactoryModalsDefault.json +2 -13
  98. package/build/contracts/WitOracleRadonRequestFactoryTemplates.json +2 -13
  99. package/build/contracts/WitOracleRadonRequestFactoryTemplatesDefault.json +2 -13
  100. package/build/contracts/WitOracleRadonRequestFactoryUpgradableConfluxCore.json +1 -1
  101. package/build/contracts/WitOracleRadonRequestFactoryUpgradableDefault.json +2 -13
  102. package/build/contracts/WitOracleResultStatusLib.json +2 -14
  103. package/build/contracts/WitOracleTrustableDefault.json +2 -259
  104. package/build/contracts/WitOracleTrustableExperimental.json +1 -1
  105. package/build/contracts/WitOracleTrustableObscuro.json +1 -1
  106. package/build/contracts/WitOracleTrustableOvm2.json +1 -1
  107. package/build/contracts/WitOracleTrustablePushOnly.json +1 -1
  108. package/build/contracts/WitOracleTrustableReef.json +1 -1
  109. package/build/contracts/WitOracleTrustableZkSync.json +1 -1
  110. package/build/contracts/WitOracleTrustlessDataLib.json +1 -1
  111. package/build/contracts/WitOracleTrustlessDefaultV22.json +1 -1
  112. package/build/contracts/WitOracleTrustlessUpgradableDefault.json +1 -1
  113. package/build/contracts/WitPriceFeeds.json +2 -13
  114. package/build/contracts/WitPriceFeedsDataLib.json +2 -14
  115. package/build/contracts/WitPriceFeedsLegacy.json +2 -8
  116. package/build/contracts/WitPriceFeedsLegacyDataLib.json +2 -84
  117. package/build/contracts/WitPriceFeedsLegacyUpgradable.json +1 -1
  118. package/build/contracts/WitPriceFeedsLegacyUpgradableBypass.json +2 -80
  119. package/build/contracts/WitPriceFeedsSolverBase.json +1 -1
  120. package/build/contracts/WitPriceFeedsV3.json +1 -1
  121. package/build/contracts/WitPriceFeedsV3Upgradable.json +2 -17
  122. package/build/contracts/WitPythChainlinkAggregator.json +1 -1
  123. package/build/contracts/WitRandomness.json +2 -13
  124. package/build/contracts/WitRandomnessLegacy.json +1 -1
  125. package/build/contracts/WitRandomnessV3.json +2 -13
  126. package/build/contracts/WitRngConsumer.json +1 -1
  127. package/build/contracts/Witnet.json +1 -1
  128. package/build/contracts/WitnetBuffer.json +1 -1
  129. package/build/contracts/WitnetCBOR.json +1 -1
  130. package/build/contracts/WitnetDeployer.json +2 -13
  131. package/build/contracts/WitnetDeployerConfluxCore.json +1 -1
  132. package/build/contracts/WitnetDeployerDeferred.json +1 -1
  133. package/build/contracts/WitnetDeployerMeter.json +1 -1
  134. package/build/contracts/WitnetProxy.json +2 -9
  135. package/build/contracts/WitnetUpgradableBase.json +1 -1
  136. package/{migrations → dist/migrations}/addresses.json +1 -25
  137. package/{migrations → dist/migrations}/constructorArgs.json +1 -6
  138. package/dist/migrations/settings/artifacts.d.ts +95 -0
  139. package/dist/migrations/settings/artifacts.d.ts.map +1 -0
  140. package/dist/migrations/settings/artifacts.js +80 -0
  141. package/dist/migrations/settings/networks.d.ts +593 -0
  142. package/dist/migrations/settings/networks.d.ts.map +1 -0
  143. package/dist/migrations/settings/networks.js +593 -0
  144. package/dist/src/bin/helpers.cjs +350 -0
  145. package/dist/src/bin/helpers.d.cts +76 -0
  146. package/dist/src/bin/helpers.d.cts.map +1 -0
  147. package/dist/src/index.d.ts +6 -0
  148. package/dist/src/index.d.ts.map +1 -0
  149. package/dist/src/index.js +33 -0
  150. package/dist/src/lib/types.d.ts +99 -0
  151. package/dist/src/lib/types.d.ts.map +1 -0
  152. package/dist/src/lib/types.js +18 -0
  153. package/dist/src/lib/utils.d.ts +22 -0
  154. package/dist/src/lib/utils.d.ts.map +1 -0
  155. package/dist/src/lib/utils.js +267 -0
  156. package/dist/src/lib/wrappers/ContractWrapper.d.ts +47 -0
  157. package/dist/src/lib/wrappers/ContractWrapper.d.ts.map +1 -0
  158. package/dist/src/lib/wrappers/ContractWrapper.js +81 -0
  159. package/dist/src/lib/wrappers/WitAppliance.d.ts +7 -0
  160. package/dist/src/lib/wrappers/WitAppliance.d.ts.map +1 -0
  161. package/dist/src/lib/wrappers/WitAppliance.js +17 -0
  162. package/dist/src/lib/wrappers/WitArtifact.d.ts +6 -0
  163. package/dist/src/lib/wrappers/WitArtifact.d.ts.map +1 -0
  164. package/dist/src/lib/wrappers/WitArtifact.js +16 -0
  165. package/dist/src/lib/wrappers/WitOracle.d.ts +105 -0
  166. package/dist/src/lib/wrappers/WitOracle.d.ts.map +1 -0
  167. package/dist/src/lib/wrappers/WitOracle.js +217 -0
  168. package/dist/src/lib/wrappers/WitOracleConsumer.d.ts +16 -0
  169. package/dist/src/lib/wrappers/WitOracleConsumer.d.ts.map +1 -0
  170. package/dist/src/lib/wrappers/WitOracleConsumer.js +30 -0
  171. package/dist/src/lib/wrappers/WitOracleRadonRegistry.d.ts +102 -0
  172. package/dist/src/lib/wrappers/WitOracleRadonRegistry.d.ts.map +1 -0
  173. package/dist/src/lib/wrappers/WitOracleRadonRegistry.js +140 -0
  174. package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.d.ts +81 -0
  175. package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.d.ts.map +1 -0
  176. package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.js +257 -0
  177. package/dist/src/lib/wrappers/WitPriceFeeds.d.ts +91 -0
  178. package/dist/src/lib/wrappers/WitPriceFeeds.d.ts.map +1 -0
  179. package/dist/src/lib/wrappers/WitPriceFeeds.js +356 -0
  180. package/dist/src/lib/wrappers/WitPriceFeedsLegacy.d.ts +14 -0
  181. package/dist/src/lib/wrappers/WitPriceFeedsLegacy.d.ts.map +1 -0
  182. package/dist/src/lib/wrappers/WitPriceFeedsLegacy.js +64 -0
  183. package/dist/src/lib/wrappers/WitRandomness.d.ts +55 -0
  184. package/dist/src/lib/wrappers/WitRandomness.d.ts.map +1 -0
  185. package/dist/src/lib/wrappers/WitRandomness.js +165 -0
  186. package/dist/src/lib/wrappers.d.ts +8 -0
  187. package/dist/src/lib/wrappers.d.ts.map +1 -0
  188. package/dist/src/lib/wrappers.js +8 -0
  189. package/package.json +78 -54
  190. package/scripts/clean.cjs +21 -0
  191. package/scripts/eth-create2.cjs +38 -0
  192. package/scripts/eth-create3.cjs +45 -0
  193. package/scripts/postinstall.cjs +9 -0
  194. package/scripts/prepare.cjs +27 -0
  195. package/scripts/vanity2gen.cjs +121 -0
  196. package/scripts/vanity3gen.cjs +84 -0
  197. package/scripts/verify-proxies.cjs +50 -0
  198. package/scripts/verify-truffle.cjs +69 -0
  199. package/scripts/verify.js +95 -0
  200. package/scripts/wof-acls.js +17 -0
  201. package/src/bin/bots/bridge.cjs +0 -0
  202. package/src/bin/bots/randomizer.cjs +290 -0
  203. package/src/bin/bots/reporter.cjs +0 -0
  204. package/src/bin/cli/accounts.cjs +47 -0
  205. package/src/bin/cli/assets.cjs +466 -0
  206. package/src/bin/cli/framework.cjs +100 -0
  207. package/src/bin/cli/gateway.cjs +26 -0
  208. package/src/bin/cli/networks.cjs +63 -0
  209. package/src/bin/cli/priceFeeds.cjs +170 -0
  210. package/src/bin/cli/queries.cjs +217 -0
  211. package/src/bin/cli/randomness.cjs +367 -0
  212. package/src/bin/cli/reports.cjs +272 -0
  213. package/src/bin/cli/wizard.cjs +352 -0
  214. package/src/bin/helpers.cjs +388 -0
  215. package/src/bin/index.cjs +407 -0
  216. package/settings/artifacts.js +0 -71
  217. package/settings/index.js +0 -49
  218. package/settings/networks.js +0 -593
  219. package/settings/solidity.js +0 -11
  220. package/settings/specs.js +0 -102
  221. package/src/index.js +0 -96
  222. package/src/utils.js +0 -305
@@ -0,0 +1,91 @@
1
+ import type { Witnet } from "@witnet/sdk";
2
+ import { type ContractTransactionReceipt, type TransactionReceipt } from "ethers";
3
+ import { type DataPushReport, type PriceFeed, PriceFeedMappers, PriceFeedOracles, type PriceFeedUpdate, type PriceFeedUpdateConditions } from "../types.js";
4
+ import { WitAppliance } from "./WitAppliance.js";
5
+ import type { WitOracle } from "./WitOracle.js";
6
+ export declare class WitPriceFeeds extends WitAppliance {
7
+ protected constructor(witOracle: WitOracle, at: string);
8
+ static at(witOracle: WitOracle, target: string): Promise<WitPriceFeeds>;
9
+ createChainlinkAggregator(id4: Witnet.HexString, options?: {
10
+ evmConfirmations?: number;
11
+ evmGasPrice?: bigint;
12
+ evmTimeout?: number;
13
+ onTransaction?: (txHash: Witnet.Hash) => any;
14
+ onTransactionReceipt?: (receipt: TransactionReceipt | null) => any;
15
+ }): Promise<ContractTransactionReceipt | TransactionReceipt | null>;
16
+ pushDataReport(report: DataPushReport, options?: {
17
+ confirmations?: number;
18
+ gasPrice?: bigint;
19
+ gasLimit?: bigint;
20
+ maxGasPrice?: bigint;
21
+ timeout?: number;
22
+ onTransaction?: (txHash: string) => any;
23
+ onTransactionReceipt?: (receipt: TransactionReceipt | null) => any;
24
+ }): Promise<ContractTransactionReceipt | TransactionReceipt | null>;
25
+ settlePriceFeedRadonHash(caption: string, decimals: number, radHash: Witnet.HexString, options?: {
26
+ evmConfirmations?: number;
27
+ evmGasPrice?: bigint;
28
+ evmTimeout?: number;
29
+ onTransaction?: (txHash: Witnet.Hash) => any;
30
+ onTransactionReceipt?: (receipt: TransactionReceipt | null) => any;
31
+ }): Promise<ContractTransactionReceipt | TransactionReceipt | null>;
32
+ settlePriceFeedOracle(caption: string, decimals: number, oracle: PriceFeedOracles | string, target: Witnet.HexString, sources?: Witnet.HexString, options?: {
33
+ evmConfirmations?: number;
34
+ evmGasPrice?: bigint;
35
+ evmTimeout?: number;
36
+ onTransaction?: (txHash: Witnet.Hash) => any;
37
+ onTransactionReceipt?: (receipt: TransactionReceipt | null) => any;
38
+ }): Promise<ContractTransactionReceipt | TransactionReceipt | null>;
39
+ settlePriceFeedMapper(caption: string, decimals: number, mapper: PriceFeedMappers | string, dependencies: string[], options?: {
40
+ evmConfirmations?: number;
41
+ evmGasPrice?: bigint;
42
+ evmTimeout?: number;
43
+ onTransaction?: (txHash: Witnet.Hash) => any;
44
+ onTransactionReceipt?: (receipt: TransactionReceipt | null) => any;
45
+ }): Promise<ContractTransactionReceipt | TransactionReceipt | null>;
46
+ removePriceFeed(caption: string, options?: {
47
+ evmConfirmations?: number;
48
+ evmGasPrice?: bigint;
49
+ evmTimeout?: number;
50
+ onTransaction?: (txHash: Witnet.Hash) => any;
51
+ onTransactionReceipt?: (receipt: TransactionReceipt | null) => any;
52
+ }): Promise<ContractTransactionReceipt | TransactionReceipt | null>;
53
+ settleDefaultUpdateConditions(conditions: PriceFeedUpdateConditions, options?: {
54
+ evmConfirmations?: number;
55
+ evmGasPrice?: bigint;
56
+ evmTimeout?: number;
57
+ onTransaction?: (txHash: Witnet.Hash) => any;
58
+ onTransactionReceipt?: (receipt: TransactionReceipt | null) => any;
59
+ }): Promise<ContractTransactionReceipt | TransactionReceipt | null>;
60
+ settlePriceFeedUpdateConditions(caption: string, conditions: PriceFeedUpdateConditions, options?: {
61
+ evmConfirmations?: number;
62
+ evmGasPrice?: bigint;
63
+ evmTimeout?: number;
64
+ onTransaction?: (txHash: Witnet.Hash) => any;
65
+ onTransactionReceipt?: (receipt: TransactionReceipt | null) => any;
66
+ }): Promise<ContractTransactionReceipt | TransactionReceipt | null>;
67
+ clone(curator: string, options?: {
68
+ evmConfirmations?: number;
69
+ evmGasPrice?: bigint;
70
+ evmTimeout?: number;
71
+ onTransaction?: (TxHash: Witnet.Hash) => any;
72
+ onTransactionReceipt?: (receipt: TransactionReceipt | null) => any;
73
+ }): Promise<ContractTransactionReceipt | TransactionReceipt | null>;
74
+ getDefaultUpdateConditions(): Promise<PriceFeedUpdateConditions>;
75
+ determineChainlinkAggregatorAddress(id4: Witnet.HexString): Promise<string>;
76
+ getEvmClonableBase(): Promise<string>;
77
+ getEvmConsumer(): Promise<Witnet.HexString>;
78
+ getEvmCurator(): Promise<Witnet.HexString>;
79
+ getEvmFootprint(): Promise<string>;
80
+ getId4(caption: string): Promise<Witnet.HexString>;
81
+ getPrice(id4: Witnet.HexString): Promise<PriceFeedUpdate>;
82
+ getPriceNotOlderThan(id4: Witnet.HexString, age: number): Promise<PriceFeedUpdate>;
83
+ getPriceUnsafe(id4: Witnet.HexString): Promise<PriceFeedUpdate>;
84
+ isCaptionSupported(caption: string): Promise<boolean>;
85
+ lookupPriceFeed(id4: Witnet.HexString): Promise<PriceFeed>;
86
+ lookupPriceFeedCaption(id4: Witnet.HexString): Promise<string>;
87
+ lookupPriceFeedExponent(id4: Witnet.HexString): Promise<number>;
88
+ lookupPriceFeedID(id4: Witnet.HexString): Promise<Witnet.Hash>;
89
+ lookupPriceFeeds(): Promise<Array<PriceFeed>>;
90
+ }
91
+ //# sourceMappingURL=WitPriceFeeds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WitPriceFeeds.d.ts","sourceRoot":"","sources":["../../../../src/lib/wrappers/WitPriceFeeds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,356 @@
1
+ import { AbiCoder, formatUnits, } from "ethers";
2
+ import { PriceFeedMappers, PriceFeedOracles, } from "../types.js";
3
+ import { abiEncodeDataPushReport, abiEncodePriceFeedUpdateConditions, } from "../utils.js";
4
+ import { WitAppliance } from "./WitAppliance.js";
5
+ export class WitPriceFeeds extends WitAppliance {
6
+ constructor(witOracle, at) {
7
+ super(witOracle, "WitPriceFeeds", at);
8
+ }
9
+ static async at(witOracle, target) {
10
+ const priceFeeds = new WitPriceFeeds(witOracle, target);
11
+ let oracleAddr;
12
+ try {
13
+ oracleAddr = await priceFeeds.contract.witOracle.staticCall();
14
+ }
15
+ catch {
16
+ oracleAddr = await priceFeeds.provider
17
+ .call({
18
+ to: target,
19
+ data: "0x46d1d21a", // funcSig for 'witnet()'
20
+ })
21
+ .then((result) => AbiCoder.defaultAbiCoder().decode(["address"], result))
22
+ .then((result) => result.toString());
23
+ }
24
+ if (oracleAddr !== witOracle.address) {
25
+ throw new Error(`${WitPriceFeeds.constructor.name} at ${target}: mismatching Wit/Oracle address (${oracleAddr})`);
26
+ }
27
+ return priceFeeds;
28
+ }
29
+ async createChainlinkAggregator(id4, options) {
30
+ const evmTransaction = await this.contract.createChainlinkAggregator.populateTransaction(id4);
31
+ evmTransaction.gasPrice = options?.evmGasPrice || evmTransaction?.gasPrice;
32
+ return this.signer
33
+ .sendTransaction(evmTransaction)
34
+ .then((response) => {
35
+ if (options?.onTransaction) {
36
+ options.onTransaction(response.hash);
37
+ }
38
+ return response.wait(options?.evmConfirmations || 1, options?.evmTimeout);
39
+ })
40
+ .then((receipt) => {
41
+ if (options?.onTransactionReceipt) {
42
+ options.onTransactionReceipt(receipt);
43
+ }
44
+ return receipt;
45
+ });
46
+ }
47
+ async pushDataReport(report, options) {
48
+ return this.contract.pushDataReport
49
+ .populateTransaction(abiEncodeDataPushReport(report), report?.evm_proof)
50
+ .then((tx) => {
51
+ if (!options?.gasPrice && tx?.gasPrice && options?.maxGasPrice) {
52
+ if (tx.gasPrice > options.maxGasPrice) {
53
+ throw new Error(`${this.constructor.name}: network gas price too high: ${formatUnits(tx.gasPrice, 9)} > ${formatUnits(options.maxGasPrice, 9)} gwei`);
54
+ }
55
+ }
56
+ tx.gasPrice = options?.gasPrice || tx?.gasPrice;
57
+ tx.gasLimit = options?.gasLimit || tx?.gasLimit;
58
+ return this.signer.sendTransaction(tx);
59
+ })
60
+ .then((response) => {
61
+ if (options?.onTransaction) {
62
+ options.onTransaction(response.hash);
63
+ }
64
+ return response.wait(options?.confirmations || 1, options?.timeout);
65
+ })
66
+ .then((receipt) => {
67
+ if (options?.onTransactionReceipt) {
68
+ options.onTransactionReceipt(receipt);
69
+ }
70
+ return receipt;
71
+ });
72
+ }
73
+ async settlePriceFeedRadonHash(caption, decimals, radHash, options) {
74
+ const evmTransaction = await this.contract.settlePriceFeedRadonHash.populateTransaction(caption, decimals, radHash);
75
+ evmTransaction.gasPrice = options?.evmGasPrice || evmTransaction?.gasPrice;
76
+ return this.signer
77
+ .sendTransaction(evmTransaction)
78
+ .then((response) => {
79
+ if (options?.onTransaction) {
80
+ options.onTransaction(response.hash);
81
+ }
82
+ return response.wait(options?.evmConfirmations || 1, options?.evmTimeout);
83
+ })
84
+ .then((receipt) => {
85
+ if (options?.onTransactionReceipt) {
86
+ options.onTransactionReceipt(receipt);
87
+ }
88
+ return receipt;
89
+ });
90
+ }
91
+ async settlePriceFeedOracle(caption, decimals, oracle, target, sources, options) {
92
+ const evmTransaction = await this.contract.settlePriceFeedOracle.populateTransaction(caption, decimals, typeof oracle === "string"
93
+ ? Object.values(PriceFeedOracles).indexOf(oracle)
94
+ : oracle, target, sources ||
95
+ "0x0000000000000000000000000000000000000000000000000000000000000000");
96
+ evmTransaction.gasPrice = options?.evmGasPrice || evmTransaction?.gasPrice;
97
+ return this.signer
98
+ .sendTransaction(evmTransaction)
99
+ .then((response) => {
100
+ if (options?.onTransaction) {
101
+ options.onTransaction(response.hash);
102
+ }
103
+ return response.wait(options?.evmConfirmations || 1, options?.evmTimeout);
104
+ })
105
+ .then((receipt) => {
106
+ if (options?.onTransactionReceipt) {
107
+ options.onTransactionReceipt(receipt);
108
+ }
109
+ return receipt;
110
+ });
111
+ }
112
+ async settlePriceFeedMapper(caption, decimals, mapper, dependencies, options) {
113
+ const evmTransaction = await this.contract.settlePriceFeedMapper.populateTransaction(caption, decimals, typeof mapper === "string"
114
+ ? Object.values(PriceFeedMappers).indexOf(mapper)
115
+ : mapper, dependencies);
116
+ evmTransaction.gasPrice = options?.evmGasPrice || evmTransaction?.gasPrice;
117
+ return this.signer
118
+ .sendTransaction(evmTransaction)
119
+ .then((response) => {
120
+ if (options?.onTransaction) {
121
+ options.onTransaction(response.hash);
122
+ }
123
+ return response.wait(options?.evmConfirmations || 1, options?.evmTimeout);
124
+ })
125
+ .then((receipt) => {
126
+ if (options?.onTransactionReceipt) {
127
+ options.onTransactionReceipt(receipt);
128
+ }
129
+ return receipt;
130
+ });
131
+ }
132
+ async removePriceFeed(caption, options) {
133
+ const evmTransaction = await this.contract.removePriceFeed.populateTransaction(caption, true);
134
+ evmTransaction.gasPrice = options?.evmGasPrice || evmTransaction?.gasPrice;
135
+ return this.signer
136
+ .sendTransaction(evmTransaction)
137
+ .then((response) => {
138
+ if (options?.onTransaction) {
139
+ options.onTransaction(response.hash);
140
+ }
141
+ return response.wait(options?.evmConfirmations || 1, options?.evmTimeout);
142
+ })
143
+ .then((receipt) => {
144
+ if (options?.onTransactionReceipt) {
145
+ options.onTransactionReceipt(receipt);
146
+ }
147
+ return receipt;
148
+ });
149
+ }
150
+ async settleDefaultUpdateConditions(conditions, options) {
151
+ const evmTransaction = await this.contract.settleDefaultUpdateConditions.populateTransaction(abiEncodePriceFeedUpdateConditions(conditions));
152
+ evmTransaction.gasPrice = options?.evmGasPrice || evmTransaction?.gasPrice;
153
+ return this.signer
154
+ .sendTransaction(evmTransaction)
155
+ .then((response) => {
156
+ if (options?.onTransaction) {
157
+ options.onTransaction(response.hash);
158
+ }
159
+ return response.wait(options?.evmConfirmations || 1, options?.evmTimeout);
160
+ })
161
+ .then((receipt) => {
162
+ if (options?.onTransactionReceipt) {
163
+ options.onTransactionReceipt(receipt);
164
+ }
165
+ return receipt;
166
+ });
167
+ }
168
+ async settlePriceFeedUpdateConditions(caption, conditions, options) {
169
+ const evmTransaction = await this.contract.settlePriceFeedUpdateConditions.populateTransaction(caption, abiEncodePriceFeedUpdateConditions(conditions));
170
+ evmTransaction.gasPrice = options?.evmGasPrice || evmTransaction?.gasPrice;
171
+ return this.signer
172
+ .sendTransaction(evmTransaction)
173
+ .then((response) => {
174
+ if (options?.onTransaction) {
175
+ options.onTransaction(response.hash);
176
+ }
177
+ return response.wait(options?.evmConfirmations || 1, options?.evmTimeout);
178
+ })
179
+ .then((receipt) => {
180
+ if (options?.onTransactionReceipt) {
181
+ options.onTransactionReceipt(receipt);
182
+ }
183
+ return receipt;
184
+ });
185
+ }
186
+ async clone(curator, options) {
187
+ const tx = await this.contract.clone.populateTransaction(curator);
188
+ tx.gasPrice = options?.evmGasPrice || tx?.gasPrice;
189
+ return this.signer
190
+ .sendTransaction(tx)
191
+ .then((response) => {
192
+ if (options?.onTransaction) {
193
+ options.onTransaction(response.hash);
194
+ }
195
+ return response.wait(options?.evmConfirmations || 1, options?.evmTimeout);
196
+ })
197
+ .then((receipt) => {
198
+ if (options?.onTransactionReceipt) {
199
+ options.onTransactionReceipt(receipt);
200
+ }
201
+ return receipt;
202
+ });
203
+ }
204
+ async getDefaultUpdateConditions() {
205
+ return this.contract.defaultUpdateConditions.staticCall();
206
+ }
207
+ async determineChainlinkAggregatorAddress(id4) {
208
+ return this.contract.createChainlinkAggregator.staticCall(id4);
209
+ }
210
+ async getEvmClonableBase() {
211
+ return this.contract.base.staticCall();
212
+ }
213
+ async getEvmConsumer() {
214
+ return this.contract.consumer.staticCall();
215
+ }
216
+ async getEvmCurator() {
217
+ return this.contract.owner.staticCall();
218
+ }
219
+ async getEvmFootprint() {
220
+ return this.contract.footprint.staticCall();
221
+ }
222
+ async getId4(caption) {
223
+ return this.contract.hash.staticCall(caption).then((id) => id.slice(0, 10));
224
+ }
225
+ async getPrice(id4) {
226
+ return this.contract
227
+ .getFunction("getPrice(bytes4)")
228
+ .staticCall(id4)
229
+ .then((result) => ({
230
+ price: Number(result.price) / 10 ** Number(-result.exponent),
231
+ deltaPrice: Number(result.deltaPrice) / 10 ** Number(-result.exponent),
232
+ exponent: Number(result.exponent),
233
+ timestamp: Number(result.timestamp),
234
+ trail: result.trail,
235
+ }));
236
+ }
237
+ async getPriceNotOlderThan(id4, age) {
238
+ return this.contract
239
+ .getFunction("getPriceNotOlderThan(bytes4,uint24)")
240
+ .staticCall(id4, age)
241
+ .then((result) => ({
242
+ price: Number(result.price) / 10 ** Number(-result.exponent),
243
+ deltaPrice: Number(result.deltaPrice) / 10 ** Number(-result.exponent),
244
+ exponent: Number(result.exponent),
245
+ timestamp: Number(result.timestamp),
246
+ trail: result.trail,
247
+ }));
248
+ }
249
+ async getPriceUnsafe(id4) {
250
+ return this.contract
251
+ .getFunction("getPriceUnsafe(bytes4)")
252
+ .staticCall(id4)
253
+ .then((result) => ({
254
+ price: Number(result.price) / 10 ** Number(-result.exponent),
255
+ deltaPrice: Number(result.deltaPrice) / 10 ** Number(-result.exponent),
256
+ exponent: Number(result.exponent),
257
+ timestamp: Number(result.timestamp),
258
+ trail: result.trail,
259
+ }));
260
+ }
261
+ async isCaptionSupported(caption) {
262
+ return this.contract.supportsCaption.staticCall(caption);
263
+ }
264
+ async lookupPriceFeed(id4) {
265
+ return this.contract.lookupPriceFeed
266
+ .staticCall(id4)
267
+ .then((result) => ({
268
+ id: result.id,
269
+ id4: result.id.slice(0, 10),
270
+ exponent: Number(result.exponent),
271
+ symbol: result.symbol,
272
+ ...(result.mapper.class !== 0n
273
+ ? {
274
+ mapper: {
275
+ class: PriceFeedMappers[result.mapper.class],
276
+ deps: result.mapper.deps,
277
+ },
278
+ }
279
+ : {
280
+ oracle: {
281
+ class: PriceFeedOracles[result.oracle.class],
282
+ target: result.oracle.target,
283
+ sources: result.oracle.sources,
284
+ },
285
+ }),
286
+ updateConditions: {
287
+ callbackGas: Number(result.updateConditions.callbackGas),
288
+ computeEMA: result.updateConditions.computeEma,
289
+ cooldownSecs: Number(result.updateConditions.cooldownSecs),
290
+ heartbeatSecs: Number(result.updateConditions.heartbeatSecs),
291
+ maxDeviationPercentage: Number(result.updateConditions.maxDeviation1000) / 10,
292
+ minWitnesses: Number(result.updateConditions.minWitnesses),
293
+ },
294
+ lastUpdate: {
295
+ price: Number(result.lastUpdate.price) /
296
+ 10 ** Number(-result.lastUpdate.exponent),
297
+ deltaPrice: Number(result.lastUpdate.deltaPrice) /
298
+ 10 ** Number(-result.lastUpdate.exponent),
299
+ exponent: Number(result.lastUpdate.exponent),
300
+ timestamp: Number(result.lastUpdate.timestamp),
301
+ trail: result.lastUpdate.trail,
302
+ },
303
+ }));
304
+ }
305
+ async lookupPriceFeedCaption(id4) {
306
+ return this.contract.lookupSymbol.staticCall(id4);
307
+ }
308
+ async lookupPriceFeedExponent(id4) {
309
+ return this.contract.lookupPriceFeedExponent
310
+ .staticCall(id4)
311
+ .then((result) => Number(result));
312
+ }
313
+ async lookupPriceFeedID(id4) {
314
+ return this.contract.lookupPriceFeedID.staticCall(id4);
315
+ }
316
+ async lookupPriceFeeds() {
317
+ return this.contract.lookupPriceFeeds.staticCall().then((results) => results.map((result) => ({
318
+ id: result.id,
319
+ id4: result.id.slice(0, 10),
320
+ exponent: Number(result.exponent),
321
+ symbol: result.symbol,
322
+ ...(result.mapper.class !== 0n
323
+ ? {
324
+ mapper: {
325
+ class: PriceFeedMappers[result.mapper.class],
326
+ deps: result.mapper.deps,
327
+ },
328
+ }
329
+ : {
330
+ oracle: {
331
+ class: PriceFeedOracles[result.oracle.class],
332
+ target: result.oracle.target,
333
+ sources: result.oracle.sources,
334
+ },
335
+ }),
336
+ updateConditions: {
337
+ callbackGas: Number(result.updateConditions.callbackGas),
338
+ computeEMA: result.updateConditions.computeEma,
339
+ cooldownSecs: Number(result.updateConditions.cooldownSecs),
340
+ heartbeatSecs: Number(result.updateConditions.heartbeatSecs),
341
+ maxDeviationPercentage: Number(result.updateConditions.maxDeviation1000) / 10,
342
+ minWitnesses: Number(result.updateConditions.minWitnesses),
343
+ },
344
+ lastUpdate: {
345
+ price: Number(result.lastUpdate.price) /
346
+ 10 ** Number(-result.lastUpdate.exponent),
347
+ deltaPrice: Number(result.lastUpdate.deltaPrice) /
348
+ 10 ** Number(-result.lastUpdate.exponent),
349
+ exponent: Number(result.lastUpdate.exponent),
350
+ timestamp: BigInt(result.lastUpdate.timestamp),
351
+ trail: result.lastUpdate.trail,
352
+ },
353
+ })));
354
+ }
355
+ }
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2l0UHJpY2VGZWVkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvd3JhcHBlcnMvV2l0UHJpY2VGZWVkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ04sUUFBUSxFQUdSLFdBQVcsR0FFWCxNQUFNLFFBQVEsQ0FBQTtBQUNmLE9BQU8sRUFHTixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEdBR2hCLE1BQU0sYUFBYSxDQUFBO0FBQ3BCLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsa0NBQWtDLEdBQ2xDLE1BQU0sYUFBYSxDQUFBO0FBRXBCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUdoRCxNQUFNLE9BQU8sYUFBYyxTQUFRLFlBQVk7SUFDOUMsWUFBc0IsU0FBb0IsRUFBRSxFQUFVO1FBQ3JELEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDZCxTQUFvQixFQUNwQixNQUFjO1FBRWQsTUFBTSxVQUFVLEdBQUcsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZELElBQUksVUFBVSxDQUFBO1FBQ2QsSUFBSSxDQUFDO1lBQ0osVUFBVSxHQUFHLE1BQU0sVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDOUQsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNSLFVBQVUsR0FBRyxNQUFNLFVBQVUsQ0FBQyxRQUFRO2lCQUNwQyxJQUFJLENBQUM7Z0JBQ0wsRUFBRSxFQUFFLE1BQU07Z0JBQ1YsSUFBSSxFQUFFLFlBQVksRUFBRSx5QkFBeUI7YUFDN0MsQ0FBQztpQkFDRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNoQixRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxDQUFDLENB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QyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7YUFDMUQ7WUFDRCxVQUFVLEVBQUU7Z0JBQ1gsS0FBSyxFQUNKLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztvQkFDL0IsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUMxQyxVQUFVLEVBQ1QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO29CQUNwQyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzVDLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQzlDLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUs7YUFDOUI7U0FDRCxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0YsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBXaXRuZXQgfSBmcm9tIFwiQHdpdG5ldC9zZGtcIlxuaW1wb3J0IHtcblx0QWJpQ29kZXIsXG5cdHR5cGUgQ29udHJhY3RUcmFuc2FjdGlvbixcblx0dHlwZSBDb250cmFjdFRyYW5zYWN0aW9uUmVjZWlwdCxcblx0Zm9ybWF0VW5pdHMsXG5cdHR5cGUgVHJhbnNhY3Rpb25SZWNlaXB0LFxufSBmcm9tIFwiZXRoZXJzXCJcbmltcG9ydCB7XG5cdHR5cGUgRGF0YVB1c2hSZXBvcnQsXG5cdHR5cGUgUHJpY2VGZWVkLFxuXHRQcmljZUZlZWRNYXBwZXJzLFxuXHRQcmljZUZlZWRPcmFjbGVzLFxuXHR0eXBlIFByaWNlRmVlZFVwZGF0ZSxcblx0dHlwZSBQcmljZUZlZWRVcGRhdGVDb25kaXRpb25zLFxufSBmcm9tIFwiLi4vdHlwZXMuanNcIlxuaW1wb3J0IHtcblx0YWJpRW5jb2RlRGF0YVB1c2hSZXBvcnQsXG5cdGFiaUVuY29kZVByaWNlRmVlZFVwZGF0ZUNvbmRpdGlvbnMsXG59IGZyb20gXCIuLi91dGlscy5qc1wiXG5cbmltcG9ydCB7IFdpdEFwcGxpYW5jZSB9IGZyb20gXCIuL1dpdEFwcGxpYW5jZS5qc1wiXG5pbXBvcnQgdHlwZSB7IFdpdE9yYWNsZSB9IGZyb20gXCIuL1dpdE9yYWNsZS5qc1wiXG5cbmV4cG9ydCBjbGFzcyBXaXRQcmljZUZlZWRzIGV4dGVuZHMgV2l0QXBwbGlhbmNlIHtcblx0cHJvdGVjdGVkIGNvbnN0cnVjdG9yKHdpdE9yYWNsZTogV2l0T3JhY2xlLCBhdDogc3RyaW5nKSB7XG5cdFx0c3VwZXIod2l0T3JhY2xlLCBcIldpdFByaWNlRmVlZHNcIiwgYXQpXG5cdH1cblxuXHRzdGF0aWMgYXN5bmMgYXQoXG5cdFx0d2l0T3JhY2xlOiBXaXRPcmFjbGUsXG5cdFx0dGFyZ2V0OiBzdHJpbmcsXG5cdCk6IFByb21pc2U8V2l0UHJpY2VGZWVkcz4ge1xuXHRcdGNvbnN0IHByaWNlRmVlZHMgPSBuZXcgV2l0UHJpY2VGZWVkcyh3aXRPcmFjbGUsIHRhcmdldClcblx0XHRsZXQgb3JhY2xlQWRkclxuXHRcdHRyeSB7XG5cdFx0XHRvcmFjbGVBZGRyID0gYXdhaXQgcHJpY2VGZWVkcy5jb250cmFjdC53aXRPcmFjbGUuc3RhdGljQ2FsbCgpXG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRvcmFjbGVBZGRyID0gYXdhaXQgcHJpY2VGZWVkcy5wcm92aWRlclxuXHRcdFx0XHQuY2FsbCh7XG5cdFx0XHRcdFx0dG86IHRhcmdldCxcblx0XHRcdFx0XHRkYXRhOiBcIjB4NDZkMWQyMWFcIiwgLy8gZnVuY1NpZyBmb3IgJ3dpdG5ldCgpJ1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigocmVzdWx0KSA9PlxuXHRcdFx0XHRcdEFiaUNvZGVyLmRlZmF1bHRBYmlDb2RlcigpLmRlY29kZShbXCJhZGRyZXNzXCJdLCByZXN1bHQpLFxuXHRcdFx0XHQpXG5cdFx0XHRcdC50aGVuKChyZXN1bHQpID0+IHJlc3VsdC50b1N0cmluZygpKVxuXHRcdH1cblx0XHRpZiAob3JhY2xlQWRkciAhPT0gd2l0T3JhY2xlLmFkZHJlc3MpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YCR7V2l0UHJpY2VGZWVkcy5jb25zdHJ1Y3Rvci5uYW1lfSBhdCAke3RhcmdldH06IG1pc21hdGNoaW5nIFdpdC9PcmFjbGUgYWRkcmVzcyAoJHtvcmFjbGVBZGRyfSlgLFxuXHRcdFx0KVxuXHRcdH1cblx0XHRyZXR1cm4gcHJpY2VGZWVkc1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGNyZWF0ZUNoYWlubGlua0FnZ3JlZ2F0b3IoXG5cdFx0aWQ0OiBXaXRuZXQuSGV4U3RyaW5nLFxuXHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRldm1Db25maXJtYXRpb25zPzogbnVtYmVyXG5cdFx0XHRldm1HYXNQcmljZT86IGJpZ2ludFxuXHRcdFx0ZXZtVGltZW91dD86IG51bWJlclxuXHRcdFx0b25UcmFuc2FjdGlvbj86ICh0eEhhc2g6IFdpdG5ldC5IYXNoKSA9PiBhbnlcblx0XHRcdG9uVHJhbnNhY3Rpb25SZWNlaXB0PzogKHJlY2VpcHQ6IFRyYW5zYWN0aW9uUmVjZWlwdCB8IG51bGwpID0+IGFueVxuXHRcdH0sXG5cdCk6IFByb21pc2U8Q29udHJhY3RUcmFuc2FjdGlvblJlY2VpcHQgfCBUcmFuc2FjdGlvblJlY2VpcHQgfCBudWxsPiB7XG5cdFx0Y29uc3QgZXZtVHJhbnNhY3Rpb246IENvbnRyYWN0VHJhbnNhY3Rpb24gPVxuXHRcdFx0YXdhaXQgdGhpcy5jb250cmFjdC5jcmVhdGVDaGFpbmxpbmtBZ2dyZWdhdG9yLnBvcHVsYXRlVHJhbnNhY3Rpb24oaWQ0KVxuXHRcdGV2bVRyYW5zYWN0aW9uLmdhc1ByaWNlID0gb3B0aW9ucz8uZXZtR2FzUHJpY2UgfHwgZXZtVHJhbnNhY3Rpb24/Lmdhc1ByaWNlXG5cdFx0cmV0dXJuIHRoaXMuc2lnbmVyXG5cdFx0XHQuc2VuZFRyYW5zYWN0aW9uKGV2bVRyYW5zYWN0aW9uKVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGlmIChvcHRpb25zPy5vblRyYW5zYWN0aW9uKSB7XG5cdFx0XHRcdFx0b3B0aW9ucy5vblRyYW5zYWN0aW9uKHJlc3BvbnNlLmhhc2gpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLndhaXQoXG5cdFx0XHRcdFx0b3B0aW9ucz8uZXZtQ29uZmlybWF0aW9ucyB8fCAxLFxuXHRcdFx0XHRcdG9wdGlvbnM/LmV2bVRpbWVvdXQsXG5cdFx0XHRcdClcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocmVjZWlwdCkgPT4ge1xuXHRcdFx0XHRpZiAob3B0aW9ucz8ub25UcmFuc2FjdGlvblJlY2VpcHQpIHtcblx0XHRcdFx0XHRvcHRpb25zLm9uVHJhbnNhY3Rpb25SZWNlaXB0KHJlY2VpcHQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlY2VpcHRcblx0XHRcdH0pXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgcHVzaERhdGFSZXBvcnQoXG5cdFx0cmVwb3J0OiBEYXRhUHVzaFJlcG9ydCxcblx0XHRvcHRpb25zPzoge1xuXHRcdFx0Y29uZmlybWF0aW9ucz86IG51bWJlclxuXHRcdFx0Z2FzUHJpY2U/OiBiaWdpbnRcblx0XHRcdGdhc0xpbWl0PzogYmlnaW50XG5cdFx0XHRtYXhHYXNQcmljZT86IGJpZ2ludFxuXHRcdFx0dGltZW91dD86IG51bWJlclxuXHRcdFx0b25UcmFuc2FjdGlvbj86ICh0eEhhc2g6IHN0cmluZykgPT4gYW55XG5cdFx0XHRvblRyYW5zYWN0aW9uUmVjZWlwdD86IChyZWNlaXB0OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBudWxsKSA9PiBhbnlcblx0XHR9LFxuXHQpOiBQcm9taXNlPENvbnRyYWN0VHJhbnNhY3Rpb25SZWNlaXB0IHwgVHJhbnNhY3Rpb25SZWNlaXB0IHwgbnVsbD4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0LnB1c2hEYXRhUmVwb3J0XG5cdFx0XHQucG9wdWxhdGVUcmFuc2FjdGlvbihhYmlFbmNvZGVEYXRhUHVzaFJlcG9ydChyZXBvcnQpLCByZXBvcnQ/LmV2bV9wcm9vZilcblx0XHRcdC50aGVuKCh0eCkgPT4ge1xuXHRcdFx0XHRpZiAoIW9wdGlvbnM/Lmdhc1ByaWNlICYmIHR4Py5nYXNQcmljZSAmJiBvcHRpb25zPy5tYXhHYXNQcmljZSkge1xuXHRcdFx0XHRcdGlmICh0eC5nYXNQcmljZSA+IG9wdGlvbnMubWF4R2FzUHJpY2UpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdFx0YCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogbmV0d29yayBnYXMgcHJpY2UgdG9vIGhpZ2g6ICR7Zm9ybWF0VW5pdHMoXG5cdFx0XHRcdFx0XHRcdFx0dHguZ2FzUHJpY2UsXG5cdFx0XHRcdFx0XHRcdFx0OSxcblx0XHRcdFx0XHRcdFx0KX0gPiAke2Zvcm1hdFVuaXRzKG9wdGlvbnMubWF4R2FzUHJpY2UsIDkpfSBnd2VpYCxcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dHguZ2FzUHJpY2UgPSBvcHRpb25zPy5nYXNQcmljZSB8fCB0eD8uZ2FzUHJpY2Vcblx0XHRcdFx0dHguZ2FzTGltaXQgPSBvcHRpb25zPy5nYXNMaW1pdCB8fCB0eD8uZ2FzTGltaXRcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2lnbmVyLnNlbmRUcmFuc2FjdGlvbih0eClcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKG9wdGlvbnM/Lm9uVHJhbnNhY3Rpb24pIHtcblx0XHRcdFx0XHRvcHRpb25zLm9uVHJhbnNhY3Rpb24ocmVzcG9uc2UuaGFzaClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2Uud2FpdChvcHRpb25zPy5jb25maXJtYXRpb25zIHx8IDEsIG9wdGlvbnM/LnRpbWVvdXQpXG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKHJlY2VpcHQpID0+IHtcblx0XHRcdFx0aWYgKG9wdGlvbnM/Lm9uVHJhbnNhY3Rpb25SZWNlaXB0KSB7XG5cdFx0XHRcdFx0b3B0aW9ucy5vblRyYW5zYWN0aW9uUmVjZWlwdChyZWNlaXB0KVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZWNlaXB0XG5cdFx0XHR9KVxuXHR9XG5cblx0cHVibGljIGFzeW5jIHNldHRsZVByaWNlRmVlZFJhZG9uSGFzaChcblx0XHRjYXB0aW9uOiBzdHJpbmcsXG5cdFx0ZGVjaW1hbHM6IG51bWJlcixcblx0XHRyYWRIYXNoOiBXaXRuZXQuSGV4U3RyaW5nLFxuXHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRldm1Db25maXJtYXRpb25zPzogbnVtYmVyXG5cdFx0XHRldm1HYXNQcmljZT86IGJpZ2ludFxuXHRcdFx0ZXZtVGltZW91dD86IG51bWJlclxuXHRcdFx0b25UcmFuc2FjdGlvbj86ICh0eEhhc2g6IFdpdG5ldC5IYXNoKSA9PiBhbnlcblx0XHRcdG9uVHJhbnNhY3Rpb25SZWNlaXB0PzogKHJlY2VpcHQ6IFRyYW5zYWN0aW9uUmVjZWlwdCB8IG51bGwpID0+IGFueVxuXHRcdH0sXG5cdCk6IFByb21pc2U8Q29udHJhY3RUcmFuc2FjdGlvblJlY2VpcHQgfCBUcmFuc2FjdGlvblJlY2VpcHQgfCBudWxsPiB7XG5cdFx0Y29uc3QgZXZtVHJhbnNhY3Rpb246IENvbnRyYWN0VHJhbnNhY3Rpb24gPVxuXHRcdFx0YXdhaXQgdGhpcy5jb250cmFjdC5zZXR0bGVQcmljZUZlZWRSYWRvbkhhc2gucG9wdWxhdGVUcmFuc2FjdGlvbihcblx0XHRcdFx0Y2FwdGlvbixcblx0XHRcdFx0ZGVjaW1hbHMsXG5cdFx0XHRcdHJhZEhhc2gsXG5cdFx0XHQpXG5cdFx0ZXZtVHJhbnNhY3Rpb24uZ2FzUHJpY2UgPSBvcHRpb25zPy5ldm1HYXNQcmljZSB8fCBldm1UcmFuc2FjdGlvbj8uZ2FzUHJpY2Vcblx0XHRyZXR1cm4gdGhpcy5zaWduZXJcblx0XHRcdC5zZW5kVHJhbnNhY3Rpb24oZXZtVHJhbnNhY3Rpb24pXG5cdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKG9wdGlvbnM/Lm9uVHJhbnNhY3Rpb24pIHtcblx0XHRcdFx0XHRvcHRpb25zLm9uVHJhbnNhY3Rpb24ocmVzcG9uc2UuaGFzaClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2Uud2FpdChcblx0XHRcdFx0XHRvcHRpb25zPy5ldm1Db25maXJtYXRpb25zIHx8IDEsXG5cdFx0XHRcdFx0b3B0aW9ucz8uZXZtVGltZW91dCxcblx0XHRcdFx0KVxuXHRcdFx0fSlcblx0XHRcdC50aGVuKChyZWNlaXB0KSA9PiB7XG5cdFx0XHRcdGlmIChvcHRpb25zPy5vblRyYW5zYWN0aW9uUmVjZWlwdCkge1xuXHRcdFx0XHRcdG9wdGlvbnMub25UcmFuc2FjdGlvblJlY2VpcHQocmVjZWlwdClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVjZWlwdFxuXHRcdFx0fSlcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBzZXR0bGVQcmljZUZlZWRPcmFjbGUoXG5cdFx0Y2FwdGlvbjogc3RyaW5nLFxuXHRcdGRlY2ltYWxzOiBudW1iZXIsXG5cdFx0b3JhY2xlOiBQcmljZUZlZWRPcmFjbGVzIHwgc3RyaW5nLFxuXHRcdHRhcmdldDogV2l0bmV0LkhleFN0cmluZyxcblx0XHRzb3VyY2VzPzogV2l0bmV0LkhleFN0cmluZyxcblx0XHRvcHRpb25zPzoge1xuXHRcdFx0ZXZtQ29uZmlybWF0aW9ucz86IG51bWJlclxuXHRcdFx0ZXZtR2FzUHJpY2U/OiBiaWdpbnRcblx0XHRcdGV2bVRpbWVvdXQ/OiBudW1iZXJcblx0XHRcdG9uVHJhbnNhY3Rpb24/OiAodHhIYXNoOiBXaXRuZXQuSGFzaCkgPT4gYW55XG5cdFx0XHRvblRyYW5zYWN0aW9uUmVjZWlwdD86IChyZWNlaXB0OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBudWxsKSA9PiBhbnlcblx0XHR9LFxuXHQpOiBQcm9taXNlPENvbnRyYWN0VHJhbnNhY3Rpb25SZWNlaXB0IHwgVHJhbnNhY3Rpb25SZWNlaXB0IHwgbnVsbD4ge1xuXHRcdGNvbnN0IGV2bVRyYW5zYWN0aW9uOiBDb250cmFjdFRyYW5zYWN0aW9uID1cblx0XHRcdGF3YWl0IHRoaXMuY29udHJhY3Quc2V0dGxlUHJpY2VGZWVkT3JhY2xlLnBvcHVsYXRlVHJhbnNhY3Rpb24oXG5cdFx0XHRcdGNhcHRpb24sXG5cdFx0XHRcdGRlY2ltYWxzLFxuXHRcdFx0XHR0eXBlb2Ygb3JhY2xlID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdFx0PyBPYmplY3QudmFsdWVzKFByaWNlRmVlZE9yYWNsZXMpLmluZGV4T2Yob3JhY2xlKVxuXHRcdFx0XHRcdDogb3JhY2xlLFxuXHRcdFx0XHR0YXJnZXQsXG5cdFx0XHRcdHNvdXJjZXMgfHxcblx0XHRcdFx0XHRcIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFxuXHRcdFx0KVxuXHRcdGV2bVRyYW5zYWN0aW9uLmdhc1ByaWNlID0gb3B0aW9ucz8uZXZtR2FzUHJpY2UgfHwgZXZtVHJhbnNhY3Rpb24/Lmdhc1ByaWNlXG5cdFx0cmV0dXJuIHRoaXMuc2lnbmVyXG5cdFx0XHQuc2VuZFRyYW5zYWN0aW9uKGV2bVRyYW5zYWN0aW9uKVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGlmIChvcHRpb25zPy5vblRyYW5zYWN0aW9uKSB7XG5cdFx0XHRcdFx0b3B0aW9ucy5vblRyYW5zYWN0aW9uKHJlc3BvbnNlLmhhc2gpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLndhaXQoXG5cdFx0XHRcdFx0b3B0aW9ucz8uZXZtQ29uZmlybWF0aW9ucyB8fCAxLFxuXHRcdFx0XHRcdG9wdGlvbnM/LmV2bVRpbWVvdXQsXG5cdFx0XHRcdClcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocmVjZWlwdCkgPT4ge1xuXHRcdFx0XHRpZiAob3B0aW9ucz8ub25UcmFuc2FjdGlvblJlY2VpcHQpIHtcblx0XHRcdFx0XHRvcHRpb25zLm9uVHJhbnNhY3Rpb25SZWNlaXB0KHJlY2VpcHQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlY2VpcHRcblx0XHRcdH0pXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgc2V0dGxlUHJpY2VGZWVkTWFwcGVyKFxuXHRcdGNhcHRpb246IHN0cmluZyxcblx0XHRkZWNpbWFsczogbnVtYmVyLFxuXHRcdG1hcHBlcjogUHJpY2VGZWVkTWFwcGVycyB8IHN0cmluZyxcblx0XHRkZXBlbmRlbmNpZXM6IHN0cmluZ1tdLFxuXHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRldm1Db25maXJtYXRpb25zPzogbnVtYmVyXG5cdFx0XHRldm1HYXNQcmljZT86IGJpZ2ludFxuXHRcdFx0ZXZtVGltZW91dD86IG51bWJlclxuXHRcdFx0b25UcmFuc2FjdGlvbj86ICh0eEhhc2g6IFdpdG5ldC5IYXNoKSA9PiBhbnlcblx0XHRcdG9uVHJhbnNhY3Rpb25SZWNlaXB0PzogKHJlY2VpcHQ6IFRyYW5zYWN0aW9uUmVjZWlwdCB8IG51bGwpID0+IGFueVxuXHRcdH0sXG5cdCk6IFByb21pc2U8Q29udHJhY3RUcmFuc2FjdGlvblJlY2VpcHQgfCBUcmFuc2FjdGlvblJlY2VpcHQgfCBudWxsPiB7XG5cdFx0Y29uc3QgZXZtVHJhbnNhY3Rpb246IENvbnRyYWN0VHJhbnNhY3Rpb24gPVxuXHRcdFx0YXdhaXQgdGhpcy5jb250cmFjdC5zZXR0bGVQcmljZUZlZWRNYXBwZXIucG9wdWxhdGVUcmFuc2FjdGlvbihcblx0XHRcdFx0Y2FwdGlvbixcblx0XHRcdFx0ZGVjaW1hbHMsXG5cdFx0XHRcdHR5cGVvZiBtYXBwZXIgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHQ/IE9iamVjdC52YWx1ZXMoUHJpY2VGZWVkTWFwcGVycykuaW5kZXhPZihtYXBwZXIpXG5cdFx0XHRcdFx0OiBtYXBwZXIsXG5cdFx0XHRcdGRlcGVuZGVuY2llcyxcblx0XHRcdClcblx0XHRldm1UcmFuc2FjdGlvbi5nYXNQcmljZSA9IG9wdGlvbnM/LmV2bUdhc1ByaWNlIHx8IGV2bVRyYW5zYWN0aW9uPy5nYXNQcmljZVxuXHRcdHJldHVybiB0aGlzLnNpZ25lclxuXHRcdFx0LnNlbmRUcmFuc2FjdGlvbihldm1UcmFuc2FjdGlvbilcblx0XHRcdC50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRpZiAob3B0aW9ucz8ub25UcmFuc2FjdGlvbikge1xuXHRcdFx0XHRcdG9wdGlvbnMub25UcmFuc2FjdGlvbihyZXNwb25zZS5oYXNoKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXNwb25zZS53YWl0KFxuXHRcdFx0XHRcdG9wdGlvbnM/LmV2bUNvbmZpcm1hdGlvbnMgfHwgMSxcblx0XHRcdFx0XHRvcHRpb25zPy5ldm1UaW1lb3V0LFxuXHRcdFx0XHQpXG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKHJlY2VpcHQpID0+IHtcblx0XHRcdFx0aWYgKG9wdGlvbnM/Lm9uVHJhbnNhY3Rpb25SZWNlaXB0KSB7XG5cdFx0XHRcdFx0b3B0aW9ucy5vblRyYW5zYWN0aW9uUmVjZWlwdChyZWNlaXB0KVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZWNlaXB0XG5cdFx0XHR9KVxuXHR9XG5cblx0cHVibGljIGFzeW5jIHJlbW92ZVByaWNlRmVlZChcblx0XHRjYXB0aW9uOiBzdHJpbmcsXG5cdFx0b3B0aW9ucz86IHtcblx0XHRcdGV2bUNvbmZpcm1hdGlvbnM/OiBudW1iZXJcblx0XHRcdGV2bUdhc1ByaWNlPzogYmlnaW50XG5cdFx0XHRldm1UaW1lb3V0PzogbnVtYmVyXG5cdFx0XHRvblRyYW5zYWN0aW9uPzogKHR4SGFzaDogV2l0bmV0Lkhhc2gpID0+IGFueVxuXHRcdFx0b25UcmFuc2FjdGlvblJlY2VpcHQ/OiAocmVjZWlwdDogVHJhbnNhY3Rpb25SZWNlaXB0IHwgbnVsbCkgPT4gYW55XG5cdFx0fSxcblx0KTogUHJvbWlzZTxDb250cmFjdFRyYW5zYWN0aW9uUmVjZWlwdCB8IFRyYW5zYWN0aW9uUmVjZWlwdCB8IG51bGw+IHtcblx0XHRjb25zdCBldm1UcmFuc2FjdGlvbjogQ29udHJhY3RUcmFuc2FjdGlvbiA9XG5cdFx0XHRhd2FpdCB0aGlzLmNvbnRyYWN0LnJlbW92ZVByaWNlRmVlZC5wb3B1bGF0ZVRyYW5zYWN0aW9uKGNhcHRpb24sIHRydWUpXG5cdFx0ZXZtVHJhbnNhY3Rpb24uZ2FzUHJpY2UgPSBvcHRpb25zPy5ldm1HYXNQcmljZSB8fCBldm1UcmFuc2FjdGlvbj8uZ2FzUHJpY2Vcblx0XHRyZXR1cm4gdGhpcy5zaWduZXJcblx0XHRcdC5zZW5kVHJhbnNhY3Rpb24oZXZtVHJhbnNhY3Rpb24pXG5cdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKG9wdGlvbnM/Lm9uVHJhbnNhY3Rpb24pIHtcblx0XHRcdFx0XHRvcHRpb25zLm9uVHJhbnNhY3Rpb24ocmVzcG9uc2UuaGFzaClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2Uud2FpdChcblx0XHRcdFx0XHRvcHRpb25zPy5ldm1Db25maXJtYXRpb25zIHx8IDEsXG5cdFx0XHRcdFx0b3B0aW9ucz8uZXZtVGltZW91dCxcblx0XHRcdFx0KVxuXHRcdFx0fSlcblx0XHRcdC50aGVuKChyZWNlaXB0KSA9PiB7XG5cdFx0XHRcdGlmIChvcHRpb25zPy5vblRyYW5zYWN0aW9uUmVjZWlwdCkge1xuXHRcdFx0XHRcdG9wdGlvbnMub25UcmFuc2FjdGlvblJlY2VpcHQocmVjZWlwdClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVjZWlwdFxuXHRcdFx0fSlcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBzZXR0bGVEZWZhdWx0VXBkYXRlQ29uZGl0aW9ucyhcblx0XHRjb25kaXRpb25zOiBQcmljZUZlZWRVcGRhdGVDb25kaXRpb25zLFxuXHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRldm1Db25maXJtYXRpb25zPzogbnVtYmVyXG5cdFx0XHRldm1HYXNQcmljZT86IGJpZ2ludFxuXHRcdFx0ZXZtVGltZW91dD86IG51bWJlclxuXHRcdFx0b25UcmFuc2FjdGlvbj86ICh0eEhhc2g6IFdpdG5ldC5IYXNoKSA9PiBhbnlcblx0XHRcdG9uVHJhbnNhY3Rpb25SZWNlaXB0PzogKHJlY2VpcHQ6IFRyYW5zYWN0aW9uUmVjZWlwdCB8IG51bGwpID0+IGFueVxuXHRcdH0sXG5cdCk6IFByb21pc2U8Q29udHJhY3RUcmFuc2FjdGlvblJlY2VpcHQgfCBUcmFuc2FjdGlvblJlY2VpcHQgfCBudWxsPiB7XG5cdFx0Y29uc3QgZXZtVHJhbnNhY3Rpb246IENvbnRyYWN0VHJhbnNhY3Rpb24gPVxuXHRcdFx0YXdhaXQgdGhpcy5jb250cmFjdC5zZXR0bGVEZWZhdWx0VXBkYXRlQ29uZGl0aW9ucy5wb3B1bGF0ZVRyYW5zYWN0aW9uKFxuXHRcdFx0XHRhYmlFbmNvZGVQcmljZUZlZWRVcGRhdGVDb25kaXRpb25zKGNvbmRpdGlvbnMpLFxuXHRcdFx0KVxuXHRcdGV2bVRyYW5zYWN0aW9uLmdhc1ByaWNlID0gb3B0aW9ucz8uZXZtR2FzUHJpY2UgfHwgZXZtVHJhbnNhY3Rpb24/Lmdhc1ByaWNlXG5cdFx0cmV0dXJuIHRoaXMuc2lnbmVyXG5cdFx0XHQuc2VuZFRyYW5zYWN0aW9uKGV2bVRyYW5zYWN0aW9uKVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGlmIChvcHRpb25zPy5vblRyYW5zYWN0aW9uKSB7XG5cdFx0XHRcdFx0b3B0aW9ucy5vblRyYW5zYWN0aW9uKHJlc3BvbnNlLmhhc2gpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLndhaXQoXG5cdFx0XHRcdFx0b3B0aW9ucz8uZXZtQ29uZmlybWF0aW9ucyB8fCAxLFxuXHRcdFx0XHRcdG9wdGlvbnM/LmV2bVRpbWVvdXQsXG5cdFx0XHRcdClcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocmVjZWlwdCkgPT4ge1xuXHRcdFx0XHRpZiAob3B0aW9ucz8ub25UcmFuc2FjdGlvblJlY2VpcHQpIHtcblx0XHRcdFx0XHRvcHRpb25zLm9uVHJhbnNhY3Rpb25SZWNlaXB0KHJlY2VpcHQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlY2VpcHRcblx0XHRcdH0pXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgc2V0dGxlUHJpY2VGZWVkVXBkYXRlQ29uZGl0aW9ucyhcblx0XHRjYXB0aW9uOiBzdHJpbmcsXG5cdFx0Y29uZGl0aW9uczogUHJpY2VGZWVkVXBkYXRlQ29uZGl0aW9ucyxcblx0XHRvcHRpb25zPzoge1xuXHRcdFx0ZXZtQ29uZmlybWF0aW9ucz86IG51bWJlclxuXHRcdFx0ZXZtR2FzUHJpY2U/OiBiaWdpbnRcblx0XHRcdGV2bVRpbWVvdXQ/OiBudW1iZXJcblx0XHRcdG9uVHJhbnNhY3Rpb24/OiAodHhIYXNoOiBXaXRuZXQuSGFzaCkgPT4gYW55XG5cdFx0XHRvblRyYW5zYWN0aW9uUmVjZWlwdD86IChyZWNlaXB0OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBudWxsKSA9PiBhbnlcblx0XHR9LFxuXHQpOiBQcm9taXNlPENvbnRyYWN0VHJhbnNhY3Rpb25SZWNlaXB0IHwgVHJhbnNhY3Rpb25SZWNlaXB0IHwgbnVsbD4ge1xuXHRcdGNvbnN0IGV2bVRyYW5zYWN0aW9uOiBDb250cmFjdFRyYW5zYWN0aW9uID1cblx0XHRcdGF3YWl0IHRoaXMuY29udHJhY3Quc2V0dGxlUHJpY2VGZWVkVXBkYXRlQ29uZGl0aW9ucy5wb3B1bGF0ZVRyYW5zYWN0aW9uKFxuXHRcdFx0XHRjYXB0aW9uLFxuXHRcdFx0XHRhYmlFbmNvZGVQcmljZUZlZWRVcGRhdGVDb25kaXRpb25zKGNvbmRpdGlvbnMpLFxuXHRcdFx0KVxuXHRcdGV2bVRyYW5zYWN0aW9uLmdhc1ByaWNlID0gb3B0aW9ucz8uZXZtR2FzUHJpY2UgfHwgZXZtVHJhbnNhY3Rpb24/Lmdhc1ByaWNlXG5cdFx0cmV0dXJuIHRoaXMuc2lnbmVyXG5cdFx0XHQuc2VuZFRyYW5zYWN0aW9uKGV2bVRyYW5zYWN0aW9uKVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGlmIChvcHRpb25zPy5vblRyYW5zYWN0aW9uKSB7XG5cdFx0XHRcdFx0b3B0aW9ucy5vblRyYW5zYWN0aW9uKHJlc3BvbnNlLmhhc2gpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLndhaXQoXG5cdFx0XHRcdFx0b3B0aW9ucz8uZXZtQ29uZmlybWF0aW9ucyB8fCAxLFxuXHRcdFx0XHRcdG9wdGlvbnM/LmV2bVRpbWVvdXQsXG5cdFx0XHRcdClcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocmVjZWlwdCkgPT4ge1xuXHRcdFx0XHRpZiAob3B0aW9ucz8ub25UcmFuc2FjdGlvblJlY2VpcHQpIHtcblx0XHRcdFx0XHRvcHRpb25zLm9uVHJhbnNhY3Rpb25SZWNlaXB0KHJlY2VpcHQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlY2VpcHRcblx0XHRcdH0pXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgY2xvbmUoXG5cdFx0Y3VyYXRvcjogc3RyaW5nLFxuXHRcdG9wdGlvbnM/OiB7XG5cdFx0XHRldm1Db25maXJtYXRpb25zPzogbnVtYmVyXG5cdFx0XHRldm1HYXNQcmljZT86IGJpZ2ludFxuXHRcdFx0ZXZtVGltZW91dD86IG51bWJlclxuXHRcdFx0b25UcmFuc2FjdGlvbj86IChUeEhhc2g6IFdpdG5ldC5IYXNoKSA9PiBhbnlcblx0XHRcdG9uVHJhbnNhY3Rpb25SZWNlaXB0PzogKHJlY2VpcHQ6IFRyYW5zYWN0aW9uUmVjZWlwdCB8IG51bGwpID0+IGFueVxuXHRcdH0sXG5cdCk6IFByb21pc2U8Q29udHJhY3RUcmFuc2FjdGlvblJlY2VpcHQgfCBUcmFuc2FjdGlvblJlY2VpcHQgfCBudWxsPiB7XG5cdFx0Y29uc3QgdHg6IENvbnRyYWN0VHJhbnNhY3Rpb24gPVxuXHRcdFx0YXdhaXQgdGhpcy5jb250cmFjdC5jbG9uZS5wb3B1bGF0ZVRyYW5zYWN0aW9uKGN1cmF0b3IpXG5cdFx0dHguZ2FzUHJpY2UgPSBvcHRpb25zPy5ldm1HYXNQcmljZSB8fCB0eD8uZ2FzUHJpY2Vcblx0XHRyZXR1cm4gdGhpcy5zaWduZXJcblx0XHRcdC5zZW5kVHJhbnNhY3Rpb24odHgpXG5cdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0aWYgKG9wdGlvbnM/Lm9uVHJhbnNhY3Rpb24pIHtcblx0XHRcdFx0XHRvcHRpb25zLm9uVHJhbnNhY3Rpb24ocmVzcG9uc2UuaGFzaClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2Uud2FpdChcblx0XHRcdFx0XHRvcHRpb25zPy5ldm1Db25maXJtYXRpb25zIHx8IDEsXG5cdFx0XHRcdFx0b3B0aW9ucz8uZXZtVGltZW91dCxcblx0XHRcdFx0KVxuXHRcdFx0fSlcblx0XHRcdC50aGVuKChyZWNlaXB0KSA9PiB7XG5cdFx0XHRcdGlmIChvcHRpb25zPy5vblRyYW5zYWN0aW9uUmVjZWlwdCkge1xuXHRcdFx0XHRcdG9wdGlvbnMub25UcmFuc2FjdGlvblJlY2VpcHQocmVjZWlwdClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVjZWlwdFxuXHRcdFx0fSlcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXREZWZhdWx0VXBkYXRlQ29uZGl0aW9ucygpOiBQcm9taXNlPFByaWNlRmVlZFVwZGF0ZUNvbmRpdGlvbnM+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdC5kZWZhdWx0VXBkYXRlQ29uZGl0aW9ucy5zdGF0aWNDYWxsKClcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBkZXRlcm1pbmVDaGFpbmxpbmtBZ2dyZWdhdG9yQWRkcmVzcyhcblx0XHRpZDQ6IFdpdG5ldC5IZXhTdHJpbmcsXG5cdCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udHJhY3QuY3JlYXRlQ2hhaW5saW5rQWdncmVnYXRvci5zdGF0aWNDYWxsKGlkNClcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRFdm1DbG9uYWJsZUJhc2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdC5iYXNlLnN0YXRpY0NhbGwoKVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGdldEV2bUNvbnN1bWVyKCk6IFByb21pc2U8V2l0bmV0LkhleFN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0LmNvbnN1bWVyLnN0YXRpY0NhbGwoKVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGdldEV2bUN1cmF0b3IoKTogUHJvbWlzZTxXaXRuZXQuSGV4U3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udHJhY3Qub3duZXIuc3RhdGljQ2FsbCgpXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZ2V0RXZtRm9vdHByaW50KCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udHJhY3QuZm9vdHByaW50LnN0YXRpY0NhbGwoKVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGdldElkNChjYXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPFdpdG5ldC5IZXhTdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdC5oYXNoLnN0YXRpY0NhbGwoY2FwdGlvbikudGhlbigoaWQpID0+IGlkLnNsaWNlKDAsIDEwKSlcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRQcmljZShpZDQ6IFdpdG5ldC5IZXhTdHJpbmcpOiBQcm9taXNlPFByaWNlRmVlZFVwZGF0ZT4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0XG5cdFx0XHQuZ2V0RnVuY3Rpb24oXCJnZXRQcmljZShieXRlczQpXCIpXG5cdFx0XHQuc3RhdGljQ2FsbChpZDQpXG5cdFx0XHQudGhlbigocmVzdWx0OiBhbnkpID0+ICh7XG5cdFx0XHRcdHByaWNlOiBOdW1iZXIocmVzdWx0LnByaWNlKSAvIDEwICoqIE51bWJlcigtcmVzdWx0LmV4cG9uZW50KSxcblx0XHRcdFx0ZGVsdGFQcmljZTogTnVtYmVyKHJlc3VsdC5kZWx0YVByaWNlKSAvIDEwICoqIE51bWJlcigtcmVzdWx0LmV4cG9uZW50KSxcblx0XHRcdFx0ZXhwb25lbnQ6IE51bWJlcihyZXN1bHQuZXhwb25lbnQpLFxuXHRcdFx0XHR0aW1lc3RhbXA6IE51bWJlcihyZXN1bHQudGltZXN0YW1wKSxcblx0XHRcdFx0dHJhaWw6IHJlc3VsdC50cmFpbCxcblx0XHRcdH0pKVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGdldFByaWNlTm90T2xkZXJUaGFuKFxuXHRcdGlkNDogV2l0bmV0LkhleFN0cmluZyxcblx0XHRhZ2U6IG51bWJlcixcblx0KTogUHJvbWlzZTxQcmljZUZlZWRVcGRhdGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdFxuXHRcdFx0LmdldEZ1bmN0aW9uKFwiZ2V0UHJpY2VOb3RPbGRlclRoYW4oYnl0ZXM0LHVpbnQyNClcIilcblx0XHRcdC5zdGF0aWNDYWxsKGlkNCwgYWdlKVxuXHRcdFx0LnRoZW4oKHJlc3VsdDogYW55KSA9PiAoe1xuXHRcdFx0XHRwcmljZTogTnVtYmVyKHJlc3VsdC5wcmljZSkgLyAxMCAqKiBOdW1iZXIoLXJlc3VsdC5leHBvbmVudCksXG5cdFx0XHRcdGRlbHRhUHJpY2U6IE51bWJlcihyZXN1bHQuZGVsdGFQcmljZSkgLyAxMCAqKiBOdW1iZXIoLXJlc3VsdC5leHBvbmVudCksXG5cdFx0XHRcdGV4cG9uZW50OiBOdW1iZXIocmVzdWx0LmV4cG9uZW50KSxcblx0XHRcdFx0dGltZXN0YW1wOiBOdW1iZXIocmVzdWx0LnRpbWVzdGFtcCksXG5cdFx0XHRcdHRyYWlsOiByZXN1bHQudHJhaWwsXG5cdFx0XHR9KSlcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBnZXRQcmljZVVuc2FmZShpZDQ6IFdpdG5ldC5IZXhTdHJpbmcpOiBQcm9taXNlPFByaWNlRmVlZFVwZGF0ZT4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0XG5cdFx0XHQuZ2V0RnVuY3Rpb24oXCJnZXRQcmljZVVuc2FmZShieXRlczQpXCIpXG5cdFx0XHQuc3RhdGljQ2FsbChpZDQpXG5cdFx0XHQudGhlbigocmVzdWx0OiBhbnkpID0+ICh7XG5cdFx0XHRcdHByaWNlOiBOdW1iZXIocmVzdWx0LnByaWNlKSAvIDEwICoqIE51bWJlcigtcmVzdWx0LmV4cG9uZW50KSxcblx0XHRcdFx0ZGVsdGFQcmljZTogTnVtYmVyKHJlc3VsdC5kZWx0YVByaWNlKSAvIDEwICoqIE51bWJlcigtcmVzdWx0LmV4cG9uZW50KSxcblx0XHRcdFx0ZXhwb25lbnQ6IE51bWJlcihyZXN1bHQuZXhwb25lbnQpLFxuXHRcdFx0XHR0aW1lc3RhbXA6IE51bWJlcihyZXN1bHQudGltZXN0YW1wKSxcblx0XHRcdFx0dHJhaWw6IHJlc3VsdC50cmFpbCxcblx0XHRcdH0pKVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGlzQ2FwdGlvblN1cHBvcnRlZChjYXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdC5zdXBwb3J0c0NhcHRpb24uc3RhdGljQ2FsbChjYXB0aW9uKVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGxvb2t1cFByaWNlRmVlZChpZDQ6IFdpdG5ldC5IZXhTdHJpbmcpOiBQcm9taXNlPFByaWNlRmVlZD4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0Lmxvb2t1cFByaWNlRmVlZFxuXHRcdFx0LnN0YXRpY0NhbGwoaWQ0KVxuXHRcdFx0LnRoZW4oKHJlc3VsdDogYW55KSA9PiAoe1xuXHRcdFx0XHRpZDogcmVzdWx0LmlkLFxuXHRcdFx0XHRpZDQ6IHJlc3VsdC5pZC5zbGljZSgwLCAxMCksXG5cdFx0XHRcdGV4cG9uZW50OiBOdW1iZXIocmVzdWx0LmV4cG9uZW50KSxcblx0XHRcdFx0c3ltYm9sOiByZXN1bHQuc3ltYm9sLFxuXHRcdFx0XHQuLi4ocmVzdWx0Lm1hcHBlci5jbGFzcyAhPT0gMG5cblx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0bWFwcGVyOiB7XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M6IFByaWNlRmVlZE1hcHBlcnNbcmVzdWx0Lm1hcHBlci5jbGFzc10sXG5cdFx0XHRcdFx0XHRcdFx0ZGVwczogcmVzdWx0Lm1hcHBlci5kZXBzLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHRvcmFjbGU6IHtcblx0XHRcdFx0XHRcdFx0XHRjbGFzczogUHJpY2VGZWVkT3JhY2xlc1tyZXN1bHQub3JhY2xlLmNsYXNzXSxcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHJlc3VsdC5vcmFjbGUudGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRcdHNvdXJjZXM6IHJlc3VsdC5vcmFjbGUuc291cmNlcyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHR1cGRhdGVDb25kaXRpb25zOiB7XG5cdFx0XHRcdFx0Y2FsbGJhY2tHYXM6IE51bWJlcihyZXN1bHQudXBkYXRlQ29uZGl0aW9ucy5jYWxsYmFja0dhcyksXG5cdFx0XHRcdFx0Y29tcHV0ZUVNQTogcmVzdWx0LnVwZGF0ZUNvbmRpdGlvbnMuY29tcHV0ZUVtYSxcblx0XHRcdFx0XHRjb29sZG93blNlY3M6IE51bWJlcihyZXN1bHQudXBkYXRlQ29uZGl0aW9ucy5jb29sZG93blNlY3MpLFxuXHRcdFx0XHRcdGhlYXJ0YmVhdFNlY3M6IE51bWJlcihyZXN1bHQudXBkYXRlQ29uZGl0aW9ucy5oZWFydGJlYXRTZWNzKSxcblx0XHRcdFx0XHRtYXhEZXZpYXRpb25QZXJjZW50YWdlOlxuXHRcdFx0XHRcdFx0TnVtYmVyKHJlc3VsdC51cGRhdGVDb25kaXRpb25zLm1heERldmlhdGlvbjEwMDApIC8gMTAsXG5cdFx0XHRcdFx0bWluV2l0bmVzc2VzOiBOdW1iZXIocmVzdWx0LnVwZGF0ZUNvbmRpdGlvbnMubWluV2l0bmVzc2VzKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFzdFVwZGF0ZToge1xuXHRcdFx0XHRcdHByaWNlOlxuXHRcdFx0XHRcdFx0TnVtYmVyKHJlc3VsdC5sYXN0VXBkYXRlLnByaWNlKSAvXG5cdFx0XHRcdFx0XHQxMCAqKiBOdW1iZXIoLXJlc3VsdC5sYXN0VXBkYXRlLmV4cG9uZW50KSxcblx0XHRcdFx0XHRkZWx0YVByaWNlOlxuXHRcdFx0XHRcdFx0TnVtYmVyKHJlc3VsdC5sYXN0VXBkYXRlLmRlbHRhUHJpY2UpIC9cblx0XHRcdFx0XHRcdDEwICoqIE51bWJlcigtcmVzdWx0Lmxhc3RVcGRhdGUuZXhwb25lbnQpLFxuXHRcdFx0XHRcdGV4cG9uZW50OiBOdW1iZXIocmVzdWx0Lmxhc3RVcGRhdGUuZXhwb25lbnQpLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogTnVtYmVyKHJlc3VsdC5sYXN0VXBkYXRlLnRpbWVzdGFtcCksXG5cdFx0XHRcdFx0dHJhaWw6IHJlc3VsdC5sYXN0VXBkYXRlLnRyYWlsLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSkpXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgbG9va3VwUHJpY2VGZWVkQ2FwdGlvbihpZDQ6IFdpdG5ldC5IZXhTdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0Lmxvb2t1cFN5bWJvbC5zdGF0aWNDYWxsKGlkNClcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBsb29rdXBQcmljZUZlZWRFeHBvbmVudChpZDQ6IFdpdG5ldC5IZXhTdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuXHRcdHJldHVybiB0aGlzLmNvbnRyYWN0Lmxvb2t1cFByaWNlRmVlZEV4cG9uZW50XG5cdFx0XHQuc3RhdGljQ2FsbChpZDQpXG5cdFx0XHQudGhlbigocmVzdWx0KSA9PiBOdW1iZXIocmVzdWx0KSlcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBsb29rdXBQcmljZUZlZWRJRChpZDQ6IFdpdG5ldC5IZXhTdHJpbmcpOiBQcm9taXNlPFdpdG5ldC5IYXNoPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udHJhY3QubG9va3VwUHJpY2VGZWVkSUQuc3RhdGljQ2FsbChpZDQpXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgbG9va3VwUHJpY2VGZWVkcygpOiBQcm9taXNlPEFycmF5PFByaWNlRmVlZD4+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdC5sb29rdXBQcmljZUZlZWRzLnN0YXRpY0NhbGwoKS50aGVuKChyZXN1bHRzKSA9PlxuXHRcdFx0cmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiAoe1xuXHRcdFx0XHRpZDogcmVzdWx0LmlkLFxuXHRcdFx0XHRpZDQ6IHJlc3VsdC5pZC5zbGljZSgwLCAxMCksXG5cdFx0XHRcdGV4cG9uZW50OiBOdW1iZXIocmVzdWx0LmV4cG9uZW50KSxcblx0XHRcdFx0c3ltYm9sOiByZXN1bHQuc3ltYm9sLFxuXHRcdFx0XHQuLi4ocmVzdWx0Lm1hcHBlci5jbGFzcyAhPT0gMG5cblx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0bWFwcGVyOiB7XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M6IFByaWNlRmVlZE1hcHBlcnNbcmVzdWx0Lm1hcHBlci5jbGFzc10sXG5cdFx0XHRcdFx0XHRcdFx0ZGVwczogcmVzdWx0Lm1hcHBlci5kZXBzLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHRvcmFjbGU6IHtcblx0XHRcdFx0XHRcdFx0XHRjbGFzczogUHJpY2VGZWVkT3JhY2xlc1tyZXN1bHQub3JhY2xlLmNsYXNzXSxcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHJlc3VsdC5vcmFjbGUudGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRcdHNvdXJjZXM6IHJlc3VsdC5vcmFjbGUuc291cmNlcyxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHR1cGRhdGVDb25kaXRpb25zOiB7XG5cdFx0XHRcdFx0Y2FsbGJhY2tHYXM6IE51bWJlcihyZXN1bHQudXBkYXRlQ29uZGl0aW9ucy5jYWxsYmFja0dhcyksXG5cdFx0XHRcdFx0Y29tcHV0ZUVNQTogcmVzdWx0LnVwZGF0ZUNvbmRpdGlvbnMuY29tcHV0ZUVtYSxcblx0XHRcdFx0XHRjb29sZG93blNlY3M6IE51bWJlcihyZXN1bHQudXBkYXRlQ29uZGl0aW9ucy5jb29sZG93blNlY3MpLFxuXHRcdFx0XHRcdGhlYXJ0YmVhdFNlY3M6IE51bWJlcihyZXN1bHQudXBkYXRlQ29uZGl0aW9ucy5oZWFydGJlYXRTZWNzKSxcblx0XHRcdFx0XHRtYXhEZXZpYXRpb25QZXJjZW50YWdlOlxuXHRcdFx0XHRcdFx0TnVtYmVyKHJlc3VsdC51cGRhdGVDb25kaXRpb25zLm1heERldmlhdGlvbjEwMDApIC8gMTAsXG5cdFx0XHRcdFx0bWluV2l0bmVzc2VzOiBOdW1iZXIocmVzdWx0LnVwZGF0ZUNvbmRpdGlvbnMubWluV2l0bmVzc2VzKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFzdFVwZGF0ZToge1xuXHRcdFx0XHRcdHByaWNlOlxuXHRcdFx0XHRcdFx0TnVtYmVyKHJlc3VsdC5sYXN0VXBkYXRlLnByaWNlKSAvXG5cdFx0XHRcdFx0XHQxMCAqKiBOdW1iZXIoLXJlc3VsdC5sYXN0VXBkYXRlLmV4cG9uZW50KSxcblx0XHRcdFx0XHRkZWx0YVByaWNlOlxuXHRcdFx0XHRcdFx0TnVtYmVyKHJlc3VsdC5sYXN0VXBkYXRlLmRlbHRhUHJpY2UpIC9cblx0XHRcdFx0XHRcdDEwICoqIE51bWJlcigtcmVzdWx0Lmxhc3RVcGRhdGUuZXhwb25lbnQpLFxuXHRcdFx0XHRcdGV4cG9uZW50OiBOdW1iZXIocmVzdWx0Lmxhc3RVcGRhdGUuZXhwb25lbnQpLFxuXHRcdFx0XHRcdHRpbWVzdGFtcDogQmlnSW50KHJlc3VsdC5sYXN0VXBkYXRlLnRpbWVzdGFtcCksXG5cdFx0XHRcdFx0dHJhaWw6IHJlc3VsdC5sYXN0VXBkYXRlLnRyYWlsLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSkpLFxuXHRcdClcblx0fVxufVxuIl19
@@ -0,0 +1,14 @@
1
+ import type { Witnet } from "@witnet/sdk";
2
+ import type { PriceFeed } from "../types.js";
3
+ import { WitAppliance } from "./WitAppliance.js";
4
+ import type { WitOracle } from "./WitOracle.js";
5
+ export declare class WitPriceFeedsLegacy extends WitAppliance {
6
+ protected constructor(witOracle: WitOracle, at: string);
7
+ static at(witOracle: WitOracle, target: string): Promise<WitPriceFeedsLegacy>;
8
+ getEvmFootprint(): Promise<string>;
9
+ isCaptionSupported(caption: string): Promise<boolean>;
10
+ lookupPriceFeedCaption(id4: Witnet.HexString): Promise<string>;
11
+ lookupPriceFeedExponent(id4: Witnet.HexString): Promise<number>;
12
+ lookupPriceFeeds(): Promise<Array<PriceFeed>>;
13
+ }
14
+ //# sourceMappingURL=WitPriceFeedsLegacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WitPriceFeedsLegacy.d.ts","sourceRoot":"","sources":["../../../../src/lib/wrappers/WitPriceFeedsLegacy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,qBAAa,mBAAoB,SAAQ,YAAY;IACpD,SAAS,aAAa,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM;WAIzC,EAAE,CACd,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,mBAAmB,CAAC;IAWlB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrD,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9D,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAM/D,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;CAyC1D"}
@@ -0,0 +1,64 @@
1
+ import { WitAppliance } from "./WitAppliance.js";
2
+ export class WitPriceFeedsLegacy extends WitAppliance {
3
+ constructor(witOracle, at) {
4
+ super(witOracle, "WitPriceFeedsLegacy", at);
5
+ }
6
+ static async at(witOracle, target) {
7
+ const priceFeeds = new WitPriceFeedsLegacy(witOracle, target);
8
+ const oracleAddr = await priceFeeds.contract.witnet.staticCall();
9
+ if (oracleAddr !== witOracle.address) {
10
+ throw new Error(`WitPriceFeedsLegacy at ${target}: mismatching Wit/Oracle address (${oracleAddr})`);
11
+ }
12
+ return priceFeeds;
13
+ }
14
+ async getEvmFootprint() {
15
+ return this.contract.footprint.staticCall();
16
+ }
17
+ async isCaptionSupported(caption) {
18
+ return this.contract.supportsCaption.staticCall(caption);
19
+ }
20
+ async lookupPriceFeedCaption(id4) {
21
+ return this.contract.lookupCaption.staticCall(id4);
22
+ }
23
+ async lookupPriceFeedExponent(id4) {
24
+ return this.contract.lookupDecimals
25
+ .staticCall(id4)
26
+ .then((result) => Number(result));
27
+ }
28
+ async lookupPriceFeeds() {
29
+ const priceFeeds = await this.contract.supportedFeeds
30
+ .staticCall()
31
+ .then((results) => {
32
+ const [id4s, captions, dataSources] = results;
33
+ return id4s.map((id4, index) => ({
34
+ id4,
35
+ exponent: -Number(captions[index].split("#")[0].split("-").slice(-1)[0]),
36
+ symbol: captions[index],
37
+ ...(dataSources[index].endsWith("00000000000000")
38
+ ? {
39
+ mapper: {
40
+ class: "product",
41
+ deps: [dataSources[index].slice(0, 42)],
42
+ },
43
+ }
44
+ : {
45
+ oracle: {
46
+ class: "Witnet",
47
+ target: this.witOracle.address,
48
+ sources: dataSources[index],
49
+ },
50
+ }),
51
+ }));
52
+ });
53
+ const latestPrices = await this.contract.latestPrices.staticCall(priceFeeds.map((pf) => pf.id4));
54
+ return priceFeeds.map((pf, index) => ({
55
+ ...pf,
56
+ lastUpdate: {
57
+ timestamp: latestPrices[index].timestamp,
58
+ trail: latestPrices[index].drTxHash,
59
+ price: Number(latestPrices[index].value) / 10 ** -pf.exponent,
60
+ },
61
+ }));
62
+ }
63
+ }
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2l0UHJpY2VGZWVkc0xlZ2FjeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvd3JhcHBlcnMvV2l0UHJpY2VGZWVkc0xlZ2FjeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFHaEQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFlBQVk7SUFDcEQsWUFBc0IsU0FBb0IsRUFBRSxFQUFVO1FBQ3JELEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNkLFNBQW9CLEVBQ3BCLE1BQWM7UUFFZCxNQUFNLFVBQVUsR0FBRyxJQUFJLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUM3RCxNQUFNLFVBQVUsR0FBRyxNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2hFLElBQUksVUFBVSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUNkLDBCQUEwQixNQUFNLHFDQUFxQyxVQUFVLEdBQUcsQ0FDbEYsQ0FBQTtRQUNGLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQTtJQUNsQixDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWU7UUFDM0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUM1QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQWU7UUFDOUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxHQUFxQjtRQUN4RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLEdBQXFCO1FBQ3pELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjO2FBQ2pDLFVBQVUsQ0FBQyxHQUFHLENBQUM7YUFDZixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCO1FBQzVCLE1BQU0sVUFBVSxHQUFxQixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYzthQUNyRSxVQUFVLEVBQUU7YUFDWixJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNqQixNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUE7WUFDN0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDaEQsR0FBRztnQkFDSCxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQ2hCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNyRDtnQkFDRCxNQUFNLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDdkIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hELENBQUMsQ0FBQzt3QkFDQSxNQUFNLEVBQUU7NEJBQ1AsS0FBSyxFQUFFLFNBQVM7NEJBQ2hCLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3lCQUN2QztxQkFDRDtvQkFDRixDQUFDLENBQUM7d0JBQ0EsTUFBTSxFQUFFOzRCQUNQLEtBQUssRUFBRSxRQUFROzRCQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87NEJBQzlCLE9BQU8sRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO3lCQUMzQjtxQkFDRCxDQUFDO2FBQ0osQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtRQUVILE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUMvRCxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQzlCLENBQUE7UUFFRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLEdBQUcsRUFBRTtZQUNMLFVBQVUsRUFBRTtnQkFDWCxTQUFTLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVM7Z0JBQ3hDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUTtnQkFDbkMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVE7YUFDN0Q7U0FDRCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgV2l0bmV0IH0gZnJvbSBcIkB3aXRuZXQvc2RrXCJcbmltcG9ydCB0eXBlIHsgUHJpY2VGZWVkIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCJcbmltcG9ydCB7IFdpdEFwcGxpYW5jZSB9IGZyb20gXCIuL1dpdEFwcGxpYW5jZS5qc1wiXG5pbXBvcnQgdHlwZSB7IFdpdE9yYWNsZSB9IGZyb20gXCIuL1dpdE9yYWNsZS5qc1wiXG5cbmV4cG9ydCBjbGFzcyBXaXRQcmljZUZlZWRzTGVnYWN5IGV4dGVuZHMgV2l0QXBwbGlhbmNlIHtcblx0cHJvdGVjdGVkIGNvbnN0cnVjdG9yKHdpdE9yYWNsZTogV2l0T3JhY2xlLCBhdDogc3RyaW5nKSB7XG5cdFx0c3VwZXIod2l0T3JhY2xlLCBcIldpdFByaWNlRmVlZHNMZWdhY3lcIiwgYXQpXG5cdH1cblxuXHRzdGF0aWMgYXN5bmMgYXQoXG5cdFx0d2l0T3JhY2xlOiBXaXRPcmFjbGUsXG5cdFx0dGFyZ2V0OiBzdHJpbmcsXG5cdCk6IFByb21pc2U8V2l0UHJpY2VGZWVkc0xlZ2FjeT4ge1xuXHRcdGNvbnN0IHByaWNlRmVlZHMgPSBuZXcgV2l0UHJpY2VGZWVkc0xlZ2FjeSh3aXRPcmFjbGUsIHRhcmdldClcblx0XHRjb25zdCBvcmFjbGVBZGRyID0gYXdhaXQgcHJpY2VGZWVkcy5jb250cmFjdC53aXRuZXQuc3RhdGljQ2FsbCgpXG5cdFx0aWYgKG9yYWNsZUFkZHIgIT09IHdpdE9yYWNsZS5hZGRyZXNzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBXaXRQcmljZUZlZWRzTGVnYWN5IGF0ICR7dGFyZ2V0fTogbWlzbWF0Y2hpbmcgV2l0L09yYWNsZSBhZGRyZXNzICgke29yYWNsZUFkZHJ9KWAsXG5cdFx0XHQpXG5cdFx0fVxuXHRcdHJldHVybiBwcmljZUZlZWRzXG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZ2V0RXZtRm9vdHByaW50KCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udHJhY3QuZm9vdHByaW50LnN0YXRpY0NhbGwoKVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGlzQ2FwdGlvblN1cHBvcnRlZChjYXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdC5zdXBwb3J0c0NhcHRpb24uc3RhdGljQ2FsbChjYXB0aW9uKVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGxvb2t1cFByaWNlRmVlZENhcHRpb24oaWQ0OiBXaXRuZXQuSGV4U3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5jb250cmFjdC5sb29rdXBDYXB0aW9uLnN0YXRpY0NhbGwoaWQ0KVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGxvb2t1cFByaWNlRmVlZEV4cG9uZW50KGlkNDogV2l0bmV0LkhleFN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udHJhY3QubG9va3VwRGVjaW1hbHNcblx0XHRcdC5zdGF0aWNDYWxsKGlkNClcblx0XHRcdC50aGVuKChyZXN1bHQpID0+IE51bWJlcihyZXN1bHQpKVxuXHR9XG5cblx0cHVibGljIGFzeW5jIGxvb2t1cFByaWNlRmVlZHMoKTogUHJvbWlzZTxBcnJheTxQcmljZUZlZWQ+PiB7XG5cdFx0Y29uc3QgcHJpY2VGZWVkczogQXJyYXk8UHJpY2VGZWVkPiA9IGF3YWl0IHRoaXMuY29udHJhY3Quc3VwcG9ydGVkRmVlZHNcblx0XHRcdC5zdGF0aWNDYWxsKClcblx0XHRcdC50aGVuKChyZXN1bHRzKSA9PiB7XG5cdFx0XHRcdGNvbnN0IFtpZDRzLCBjYXB0aW9ucywgZGF0YVNvdXJjZXNdID0gcmVzdWx0c1xuXHRcdFx0XHRyZXR1cm4gaWQ0cy5tYXAoKGlkNDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiAoe1xuXHRcdFx0XHRcdGlkNCxcblx0XHRcdFx0XHRleHBvbmVudDogLU51bWJlcihcblx0XHRcdFx0XHRcdGNhcHRpb25zW2luZGV4XS5zcGxpdChcIiNcIilbMF0uc3BsaXQoXCItXCIpLnNsaWNlKC0xKVswXSxcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHN5bWJvbDogY2FwdGlvbnNbaW5kZXhdLFxuXHRcdFx0XHRcdC4uLihkYXRhU291cmNlc1tpbmRleF0uZW5kc1dpdGgoXCIwMDAwMDAwMDAwMDAwMFwiKVxuXHRcdFx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRcdFx0bWFwcGVyOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzczogXCJwcm9kdWN0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXBzOiBbZGF0YVNvdXJjZXNbaW5kZXhdLnNsaWNlKDAsIDQyKV0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0OiB7XG5cdFx0XHRcdFx0XHRcdFx0b3JhY2xlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzczogXCJXaXRuZXRcIixcblx0XHRcdFx0XHRcdFx0XHRcdHRhcmdldDogdGhpcy53aXRPcmFjbGUuYWRkcmVzcyxcblx0XHRcdFx0XHRcdFx0XHRcdHNvdXJjZXM6IGRhdGFTb3VyY2VzW2luZGV4XSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0fSkpXG5cdFx0XHR9KVxuXG5cdFx0Y29uc3QgbGF0ZXN0UHJpY2VzID0gYXdhaXQgdGhpcy5jb250cmFjdC5sYXRlc3RQcmljZXMuc3RhdGljQ2FsbChcblx0XHRcdHByaWNlRmVlZHMubWFwKChwZikgPT4gcGYuaWQ0KSxcblx0XHQpXG5cblx0XHRyZXR1cm4gcHJpY2VGZWVkcy5tYXAoKHBmLCBpbmRleCkgPT4gKHtcblx0XHRcdC4uLnBmLFxuXHRcdFx0bGFzdFVwZGF0ZToge1xuXHRcdFx0XHR0aW1lc3RhbXA6IGxhdGVzdFByaWNlc1tpbmRleF0udGltZXN0YW1wLFxuXHRcdFx0XHR0cmFpbDogbGF0ZXN0UHJpY2VzW2luZGV4XS5kclR4SGFzaCxcblx0XHRcdFx0cHJpY2U6IE51bWJlcihsYXRlc3RQcmljZXNbaW5kZXhdLnZhbHVlKSAvIDEwICoqIC1wZi5leHBvbmVudCxcblx0XHRcdH0sXG5cdFx0fSkpXG5cdH1cbn1cbiJdfQ==