@bitgo-beta/utxo-lib 8.0.3-beta.71 → 8.0.3-beta.710

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 (207) hide show
  1. package/dist/src/address.d.ts +0 -1
  2. package/dist/src/address.d.ts.map +1 -1
  3. package/dist/src/address.js +10 -10
  4. package/dist/src/addressFormat.d.ts +1 -2
  5. package/dist/src/addressFormat.d.ts.map +1 -1
  6. package/dist/src/addressFormat.js +21 -26
  7. package/dist/src/bitgo/Musig2.d.ts +0 -1
  8. package/dist/src/bitgo/Musig2.d.ts.map +1 -1
  9. package/dist/src/bitgo/Musig2.js +42 -42
  10. package/dist/src/bitgo/PsbtUtil.d.ts +17 -1
  11. package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -1
  12. package/dist/src/bitgo/PsbtUtil.js +63 -10
  13. package/dist/src/bitgo/Unspent.d.ts +2 -3
  14. package/dist/src/bitgo/Unspent.d.ts.map +1 -1
  15. package/dist/src/bitgo/Unspent.js +14 -15
  16. package/dist/src/bitgo/UtxoPsbt.d.ts +8 -5
  17. package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
  18. package/dist/src/bitgo/UtxoPsbt.js +136 -120
  19. package/dist/src/bitgo/UtxoTransaction.d.ts +0 -1
  20. package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -1
  21. package/dist/src/bitgo/UtxoTransaction.js +12 -12
  22. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts +0 -1
  23. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts.map +1 -1
  24. package/dist/src/bitgo/UtxoTransactionBuilder.js +1 -1
  25. package/dist/src/bitgo/bitcoincash/address.d.ts +0 -1
  26. package/dist/src/bitgo/bitcoincash/address.d.ts.map +1 -1
  27. package/dist/src/bitgo/bitcoincash/address.js +11 -12
  28. package/dist/src/bitgo/bitcoincash/index.js +6 -2
  29. package/dist/src/bitgo/dash/DashPsbt.d.ts +0 -1
  30. package/dist/src/bitgo/dash/DashPsbt.d.ts.map +1 -1
  31. package/dist/src/bitgo/dash/DashTransaction.d.ts +0 -1
  32. package/dist/src/bitgo/dash/DashTransaction.d.ts.map +1 -1
  33. package/dist/src/bitgo/dash/DashTransaction.js +3 -3
  34. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts +0 -1
  35. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts.map +1 -1
  36. package/dist/src/bitgo/dash/DashTransactionBuilder.js +1 -1
  37. package/dist/src/bitgo/dash/index.js +6 -2
  38. package/dist/src/bitgo/index.d.ts +3 -1
  39. package/dist/src/bitgo/index.d.ts.map +1 -1
  40. package/dist/src/bitgo/index.js +9 -3
  41. package/dist/src/bitgo/keyutil.d.ts +9 -1
  42. package/dist/src/bitgo/keyutil.d.ts.map +1 -1
  43. package/dist/src/bitgo/keyutil.js +25 -4
  44. package/dist/src/bitgo/legacysafe/index.d.ts +14 -0
  45. package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -0
  46. package/dist/src/bitgo/legacysafe/index.js +60 -0
  47. package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts +0 -1
  48. package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts.map +1 -1
  49. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts +1 -2
  50. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts.map +1 -1
  51. package/dist/src/bitgo/litecoin/LitecoinTransaction.js +2 -2
  52. package/dist/src/bitgo/litecoin/index.js +6 -2
  53. package/dist/src/bitgo/nonStandardHalfSigned.js +2 -3
  54. package/dist/src/bitgo/outputScripts.d.ts +7 -7
  55. package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
  56. package/dist/src/bitgo/outputScripts.js +48 -33
  57. package/dist/src/bitgo/parseInput.d.ts +11 -8
  58. package/dist/src/bitgo/parseInput.d.ts.map +1 -1
  59. package/dist/src/bitgo/parseInput.js +30 -15
  60. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts +0 -1
  61. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +1 -1
  62. package/dist/src/bitgo/psbt/fromHalfSigned.js +7 -8
  63. package/dist/src/bitgo/psbt/scriptTypes.d.ts +0 -1
  64. package/dist/src/bitgo/psbt/scriptTypes.d.ts.map +1 -1
  65. package/dist/src/bitgo/psbt/scriptTypes.js +7 -8
  66. package/dist/src/bitgo/signature.d.ts +2 -3
  67. package/dist/src/bitgo/signature.d.ts.map +1 -1
  68. package/dist/src/bitgo/signature.js +25 -17
  69. package/dist/src/bitgo/tnumber.js +2 -3
  70. package/dist/src/bitgo/transaction.d.ts +13 -1
  71. package/dist/src/bitgo/transaction.d.ts.map +1 -1
  72. package/dist/src/bitgo/transaction.js +49 -23
  73. package/dist/src/bitgo/transactionAmounts.d.ts +9 -0
  74. package/dist/src/bitgo/transactionAmounts.d.ts.map +1 -0
  75. package/dist/src/bitgo/transactionAmounts.js +32 -0
  76. package/dist/src/bitgo/types.d.ts +8 -2
  77. package/dist/src/bitgo/types.d.ts.map +1 -1
  78. package/dist/src/bitgo/types.js +12 -4
  79. package/dist/src/bitgo/wallet/Psbt.d.ts +48 -19
  80. package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
  81. package/dist/src/bitgo/wallet/Psbt.js +144 -46
  82. package/dist/src/bitgo/wallet/Unspent.d.ts +23 -16
  83. package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
  84. package/dist/src/bitgo/wallet/Unspent.js +68 -64
  85. package/dist/src/bitgo/wallet/WalletKeys.d.ts +1 -2
  86. package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -1
  87. package/dist/src/bitgo/wallet/WalletKeys.js +3 -3
  88. package/dist/src/bitgo/wallet/WalletOutput.js +10 -11
  89. package/dist/src/bitgo/wallet/WalletScripts.js +4 -5
  90. package/dist/src/bitgo/wallet/WalletUnspentSigner.js +7 -7
  91. package/dist/src/bitgo/wallet/chains.d.ts +3 -3
  92. package/dist/src/bitgo/wallet/chains.d.ts.map +1 -1
  93. package/dist/src/bitgo/wallet/chains.js +10 -10
  94. package/dist/src/bitgo/wallet/index.d.ts +2 -0
  95. package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
  96. package/dist/src/bitgo/wallet/index.js +8 -2
  97. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts +50 -0
  98. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts.map +1 -0
  99. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.js +85 -0
  100. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts +32 -0
  101. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts.map +1 -0
  102. package/dist/src/bitgo/wallet/psbt/RootNodes.js +123 -0
  103. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts +1 -2
  104. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts.map +1 -1
  105. package/dist/src/bitgo/zcash/ZcashBufferutils.js +15 -15
  106. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +0 -2
  107. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
  108. package/dist/src/bitgo/zcash/ZcashPsbt.js +9 -17
  109. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +3 -2
  110. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +1 -1
  111. package/dist/src/bitgo/zcash/ZcashTransaction.js +31 -21
  112. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts +0 -1
  113. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts.map +1 -1
  114. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +6 -4
  115. package/dist/src/bitgo/zcash/address.d.ts +0 -1
  116. package/dist/src/bitgo/zcash/address.d.ts.map +1 -1
  117. package/dist/src/bitgo/zcash/address.js +7 -8
  118. package/dist/src/bitgo/zcash/hashZip0244.d.ts +1 -2
  119. package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +1 -1
  120. package/dist/src/bitgo/zcash/hashZip0244.js +9 -10
  121. package/dist/src/bitgo/zcash/index.js +6 -2
  122. package/dist/src/classify.d.ts +0 -1
  123. package/dist/src/classify.d.ts.map +1 -1
  124. package/dist/src/classify.js +5 -5
  125. package/dist/src/index.js +6 -2
  126. package/dist/src/networks.d.ts +2 -2
  127. package/dist/src/networks.d.ts.map +1 -1
  128. package/dist/src/networks.js +67 -21
  129. package/dist/src/noble_ecc.d.ts +7 -7
  130. package/dist/src/noble_ecc.d.ts.map +1 -1
  131. package/dist/src/noble_ecc.js +5 -5
  132. package/dist/src/payments/p2tr.js +11 -16
  133. package/dist/src/payments/p2tr_ns.js +3 -5
  134. package/dist/src/taproot.d.ts +1 -2
  135. package/dist/src/taproot.d.ts.map +1 -1
  136. package/dist/src/taproot.js +21 -22
  137. package/dist/src/templates/multisig/input.d.ts +0 -1
  138. package/dist/src/templates/multisig/input.d.ts.map +1 -1
  139. package/dist/src/templates/multisig/input.js +2 -3
  140. package/dist/src/templates/multisig/output.d.ts +0 -1
  141. package/dist/src/templates/multisig/output.d.ts.map +1 -1
  142. package/dist/src/templates/multisig/output.js +2 -3
  143. package/dist/src/templates/nulldata.d.ts +0 -1
  144. package/dist/src/templates/nulldata.d.ts.map +1 -1
  145. package/dist/src/templates/nulldata.js +3 -3
  146. package/dist/src/templates/pubkey/input.d.ts +0 -1
  147. package/dist/src/templates/pubkey/input.d.ts.map +1 -1
  148. package/dist/src/templates/pubkey/input.js +2 -3
  149. package/dist/src/templates/pubkey/output.d.ts +0 -1
  150. package/dist/src/templates/pubkey/output.d.ts.map +1 -1
  151. package/dist/src/templates/pubkey/output.js +2 -3
  152. package/dist/src/templates/pubkeyhash/input.d.ts +0 -1
  153. package/dist/src/templates/pubkeyhash/input.d.ts.map +1 -1
  154. package/dist/src/templates/pubkeyhash/input.js +2 -3
  155. package/dist/src/templates/pubkeyhash/output.d.ts +0 -1
  156. package/dist/src/templates/pubkeyhash/output.d.ts.map +1 -1
  157. package/dist/src/templates/pubkeyhash/output.js +2 -3
  158. package/dist/src/templates/scripthash/input.d.ts +0 -1
  159. package/dist/src/templates/scripthash/input.d.ts.map +1 -1
  160. package/dist/src/templates/scripthash/input.js +2 -3
  161. package/dist/src/templates/scripthash/output.d.ts +0 -1
  162. package/dist/src/templates/scripthash/output.d.ts.map +1 -1
  163. package/dist/src/templates/scripthash/output.js +2 -3
  164. package/dist/src/templates/taproot/input.d.ts +0 -1
  165. package/dist/src/templates/taproot/input.d.ts.map +1 -1
  166. package/dist/src/templates/taproot/input.js +2 -3
  167. package/dist/src/templates/taproot/output.d.ts +0 -1
  168. package/dist/src/templates/taproot/output.d.ts.map +1 -1
  169. package/dist/src/templates/taproot/output.js +2 -3
  170. package/dist/src/templates/taprootnofn/input.d.ts +0 -1
  171. package/dist/src/templates/taprootnofn/input.d.ts.map +1 -1
  172. package/dist/src/templates/taprootnofn/input.js +2 -3
  173. package/dist/src/templates/taprootnofn/output.d.ts +0 -1
  174. package/dist/src/templates/taprootnofn/output.d.ts.map +1 -1
  175. package/dist/src/templates/taprootnofn/output.js +2 -3
  176. package/dist/src/templates/witnesscommitment/output.d.ts +0 -1
  177. package/dist/src/templates/witnesscommitment/output.d.ts.map +1 -1
  178. package/dist/src/templates/witnesscommitment/output.js +4 -5
  179. package/dist/src/templates/witnesspubkeyhash/input.d.ts +0 -1
  180. package/dist/src/templates/witnesspubkeyhash/input.d.ts.map +1 -1
  181. package/dist/src/templates/witnesspubkeyhash/input.js +2 -3
  182. package/dist/src/templates/witnesspubkeyhash/output.d.ts +0 -1
  183. package/dist/src/templates/witnesspubkeyhash/output.d.ts.map +1 -1
  184. package/dist/src/templates/witnesspubkeyhash/output.js +2 -3
  185. package/dist/src/templates/witnessscripthash/input.d.ts +0 -1
  186. package/dist/src/templates/witnessscripthash/input.d.ts.map +1 -1
  187. package/dist/src/templates/witnessscripthash/input.js +2 -3
  188. package/dist/src/templates/witnessscripthash/output.d.ts +0 -1
  189. package/dist/src/templates/witnessscripthash/output.d.ts.map +1 -1
  190. package/dist/src/templates/witnessscripthash/output.js +2 -3
  191. package/dist/src/testutil/index.js +6 -2
  192. package/dist/src/testutil/keys.d.ts +4 -1
  193. package/dist/src/testutil/keys.d.ts.map +1 -1
  194. package/dist/src/testutil/keys.js +22 -8
  195. package/dist/src/testutil/mock.d.ts +1 -2
  196. package/dist/src/testutil/mock.d.ts.map +1 -1
  197. package/dist/src/testutil/mock.js +21 -21
  198. package/dist/src/testutil/psbt.d.ts +39 -15
  199. package/dist/src/testutil/psbt.d.ts.map +1 -1
  200. package/dist/src/testutil/psbt.js +53 -39
  201. package/dist/src/testutil/transaction.d.ts +15 -6
  202. package/dist/src/testutil/transaction.d.ts.map +1 -1
  203. package/dist/src/testutil/transaction.js +26 -26
  204. package/dist/src/transaction_builder.d.ts +0 -1
  205. package/dist/src/transaction_builder.d.ts.map +1 -1
  206. package/dist/src/transaction_builder.js +13 -18
  207. package/package.json +7 -7
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parsePubScript = exports.parsePubScript2Of3 = exports.parseSignatureScript2Of3 = exports.parseSignatureScript = exports.getLeafVersion = exports.calculateScriptPathLevel = exports.isValidControlBock = exports.isPlaceholderSignature = void 0;
3
+ exports.isPlaceholderSignature = isPlaceholderSignature;
4
+ exports.isValidControlBock = isValidControlBock;
5
+ exports.calculateScriptPathLevel = calculateScriptPathLevel;
6
+ exports.getLeafVersion = getLeafVersion;
7
+ exports.parseSignatureScript = parseSignatureScript;
8
+ exports.parseSignatureScript2Of3 = parseSignatureScript2Of3;
9
+ exports.parsePubScript2Of3 = parsePubScript2Of3;
10
+ exports.parsePubScript = parsePubScript;
11
+ exports.getChainAndIndexFromPath = getChainAndIndexFromPath;
4
12
  /* eslint no-redeclare: 0 */
5
13
  const opcodes = require("bitcoin-ops");
6
14
  const bitcoinjs_lib_1 = require("bitcoinjs-lib");
@@ -12,7 +20,6 @@ function isPlaceholderSignature(v) {
12
20
  }
13
21
  return v === 0;
14
22
  }
15
- exports.isPlaceholderSignature = isPlaceholderSignature;
16
23
  /**
17
24
  * @return true iff P2TR script path's control block matches BitGo's need
18
25
  */
@@ -20,7 +27,6 @@ function isValidControlBock(controlBlock) {
20
27
  // The last stack element is called the control block c, and must have length 33 + 32m
21
28
  return Buffer.isBuffer(controlBlock) && 33 <= controlBlock.length && controlBlock.length % 32 === 1;
22
29
  }
23
- exports.isValidControlBock = isValidControlBock;
24
30
  /**
25
31
  * @return script path level for P2TR control block
26
32
  */
@@ -36,7 +42,6 @@ function calculateScriptPathLevel(controlBlock) {
36
42
  }
37
43
  throw new Error('unexpected control block length.');
38
44
  }
39
- exports.calculateScriptPathLevel = calculateScriptPathLevel;
40
45
  /**
41
46
  * @return leaf version for P2TR control block.
42
47
  */
@@ -46,7 +51,6 @@ function getLeafVersion(controlBlock) {
46
51
  }
47
52
  throw new Error('unexpected leafVersion.');
48
53
  }
49
- exports.getLeafVersion = getLeafVersion;
50
54
  function emptyMatchResult() {
51
55
  return {
52
56
  ':pubkey': [],
@@ -198,7 +202,7 @@ function parseP2ms(decScript, scriptType) {
198
202
  return match;
199
203
  }
200
204
  const [redeemScript] = match[':script'];
201
- if (!types_1.isTriple(redeemScript.match[':pubkey'])) {
205
+ if (!(0, types_1.isTriple)(redeemScript.match[':pubkey'])) {
202
206
  throw new Error(`invalid pubkey count`);
203
207
  }
204
208
  return {
@@ -293,7 +297,7 @@ function parseSignatureScript(input) {
293
297
  ];
294
298
  for (const f of parsers) {
295
299
  const parsed = f({
296
- script: (decScript === null || decScript === void 0 ? void 0 : decScript.length) === 0 ? null : decScript,
300
+ script: decScript?.length === 0 ? null : decScript,
297
301
  witness: input.witness.length === 0 ? null : input.witness,
298
302
  });
299
303
  if (parsed instanceof MatchError) {
@@ -303,10 +307,9 @@ function parseSignatureScript(input) {
303
307
  }
304
308
  throw new Error(`could not parse input`);
305
309
  }
306
- exports.parseSignatureScript = parseSignatureScript;
307
310
  function parseSignatureScript2Of3(input) {
308
311
  const result = parseSignatureScript(input);
309
- if (!outputScripts_1.isScriptType2Of3(result.scriptType) &&
312
+ if (!(0, outputScripts_1.isScriptType2Of3)(result.scriptType) &&
310
313
  result.scriptType !== 'taprootKeyPathSpend' &&
311
314
  result.scriptType !== 'taprootScriptPathSpend') {
312
315
  throw new Error(`invalid script type`);
@@ -321,7 +324,6 @@ function parseSignatureScript2Of3(input) {
321
324
  }
322
325
  return result;
323
326
  }
324
- exports.parseSignatureScript2Of3 = parseSignatureScript2Of3;
325
327
  const parseP2shP2pkPubScript = (pubScript, scriptType) => {
326
328
  if (scriptType !== 'p2shP2pk') {
327
329
  throw new Error('invalid script type');
@@ -347,7 +349,7 @@ const parseP2msPubScript = (pubScript, scriptType) => {
347
349
  return match;
348
350
  }
349
351
  const [redeemScript] = match[':script'];
350
- if (!types_1.isTriple(redeemScript.match[':pubkey'])) {
352
+ if (!(0, types_1.isTriple)(redeemScript.match[':pubkey'])) {
351
353
  throw new Error('invalid pubkey count');
352
354
  }
353
355
  return {
@@ -406,12 +408,11 @@ function parsePubScript2Of3(inputPubScript, scriptType) {
406
408
  }
407
409
  if ((result.scriptType === 'taprootKeyPathSpend' && result.publicKeys.length !== 1) ||
408
410
  (result.scriptType === 'taprootScriptPathSpend' && result.publicKeys.length !== 2) ||
409
- (outputScripts_1.isScriptType2Of3(result.scriptType) && result.publicKeys.length !== 3)) {
411
+ ((0, outputScripts_1.isScriptType2Of3)(result.scriptType) && result.publicKeys.length !== 3)) {
410
412
  throw new Error('unexpected pubkey count');
411
413
  }
412
414
  return result;
413
415
  }
414
- exports.parsePubScript2Of3 = parsePubScript2Of3;
415
416
  function parsePubScript(inputPubScript, scriptType) {
416
417
  const result = scriptType === 'p2shP2pk'
417
418
  ? parseP2shP2pkPubScript(inputPubScript, scriptType)
@@ -424,5 +425,19 @@ function parsePubScript(inputPubScript, scriptType) {
424
425
  }
425
426
  return result;
426
427
  }
427
- exports.parsePubScript = parsePubScript;
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9wYXJzZUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRCQUE0QjtBQUM1Qix1Q0FBdUM7QUFDdkMsaURBQTJEO0FBRTNELG1DQUFtQztBQUNuQyxtREFBbUQ7QUFFbkQsU0FBZ0Isc0JBQXNCLENBQUMsQ0FBa0I7SUFDdkQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7S0FDdkI7SUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUxELHdEQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxZQUFvQjtJQUNyRCxzRkFBc0Y7SUFDdEYsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RyxDQUFDO0FBSEQsZ0RBR0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLFlBQW9CO0lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNoRDtJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDOUIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBWEQsNERBV0M7QUFFRDs7R0FF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QyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQUM1QztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFsQkQsd0NBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLXJlZGVjbGFyZTogMCAqL1xuaW1wb3J0ICogYXMgb3Bjb2RlcyBmcm9tICdiaXRjb2luLW9wcyc7XG5pbXBvcnQgeyBUeElucHV0LCBzY3JpcHQgYXMgYnNjcmlwdCB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuXG5pbXBvcnQgeyBpc1RyaXBsZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgaXNTY3JpcHRUeXBlMk9mMyB9IGZyb20gJy4vb3V0cHV0U2NyaXB0cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWNlaG9sZGVyU2lnbmF0dXJlKHY6IG51bWJlciB8IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHYpKSB7XG4gICAgcmV0dXJuIHYubGVuZ3RoID09PSAwO1xuICB9XG4gIHJldHVybiB2ID09PSAwO1xufVxuXG4vKipcbiAqIEByZXR1cm4gdHJ1ZSBpZmYgUDJUUiBzY3JpcHQgcGF0aCdzIGNvbnRyb2wgYmxvY2sgbWF0Y2hlcyBCaXRHbydzIG5lZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRDb250cm9sQm9jayhjb250cm9sQmxvY2s6IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICAvLyBUaGUgbGFzdCBzdGFjayBlbGVtZW50IGlzIGNhbGxlZCB0aGUgY29udHJvbCBibG9jayBjLCBhbmQgbXVzdCBoYXZlIGxlbmd0aCAzMyArIDMybVxuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGNvbnRyb2xCbG9jaykgJiYgMzMgPD0gY29udHJvbEJsb2NrLmxlbmd0aCAmJiBjb250cm9sQmxvY2subGVuZ3RoICUgMzIgPT09IDE7XG59XG5cbi8qKlxuICogQHJldHVybiBzY3JpcHQgcGF0aCBsZXZlbCBmb3IgUDJUUiBjb250cm9sIGJsb2NrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVTY3JpcHRQYXRoTGV2ZWwoY29udHJvbEJsb2NrOiBCdWZmZXIpOiBudW1iZXIge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbnRyb2wgYmxvY2sgdHlwZS4nKTtcbiAgfVxuICBpZiAoY29udHJvbEJsb2NrLmxlbmd0aCA9PT0gNjUpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBpZiAoY29udHJvbEJsb2NrLmxlbmd0aCA9PT0gOTcpIHtcbiAgICByZXR1cm4gMjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgY29udHJvbCBibG9jayBsZW5ndGguJyk7XG59XG5cbi8qKlxuICogQHJldHVybiBsZWFmIHZlcnNpb24gZm9yIFAyVFIgY29udHJvbCBibG9jay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExlYWZWZXJzaW9uKGNvbnRyb2xCbG9jazogQnVmZmVyKTogbnVtYmVyIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spICYmIGNvbnRyb2xCbG9jay5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGNvbnRyb2xCbG9ja1swXSAmIDB4ZmU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGxlYWZWZXJzaW9uLicpO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRTY3JpcHRUeXBlMk9mMyA9XG4gIHwgJ3Ayc2gnXG4gIHwgJ3Ayc2hQMndzaCdcbiAgfCAncDJ3c2gnXG4gIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnIC8vIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHAydHJNdXNpZzJcbiAgfCAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc7IC8vIGNhbiBiZSBmb3IgZWl0aGVyIHAydHIgb3IgcDJ0ck11c2lnMiBvdXRwdXQgc2NyaXB0XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFNjcmlwdFR5cGUgPSBQYXJzZWRTY3JpcHRUeXBlMk9mMyB8ICdwMnNoUDJwayc7XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFB1YlNjcmlwdCA9IHtcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCA9IHtcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGsgZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaFAycGsnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyXTtcbiAgc2lnbmF0dXJlczogW0J1ZmZlcl07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGggZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCc7XG4gIC8vIHgtb25seSB0YXBPdXRwdXRLZXlcbiAgcHVibGljS2V5czogW0J1ZmZlcl07XG4gIHB1YlNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXJdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCA9IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHViU2NyaXB0UDJtcyBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJztcbiAgcHVibGljS2V5czogW0J1ZmZlciwgQnVmZmVyLCBCdWZmZXJdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIHdpdG5lc3NTY3JpcHQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwayBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICdwMnNoUDJwayc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXJdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyBleHRlbmRzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJztcbiAgcHVibGljS2V5czogW0J1ZmZlciwgQnVmZmVyLCBCdWZmZXJdO1xuICBzaWduYXR1cmVzOlxuICAgIHwgW0J1ZmZlciwgQnVmZmVyXSAvLyBmdWxseS1zaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggc2lnbmF0dXJlc1xuICAgIC8qIFBhcnRpYWxseSBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICAgICBGb3IgcDJzaCwgdGhlIHBsYWNlaG9sZGVyIGlzIE9QXzAgKG51bWJlciAwKSAqL1xuICAgIHwgW0J1ZmZlciB8IDAsIEJ1ZmZlciB8IDAsIEJ1ZmZlciB8IDBdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIHdpdG5lc3NTY3JpcHQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBLZXlwYXRoIHNwZW5kcyBvbmx5IGhhdmUgYSBzaW5nbGUgc2lnbmF0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdEtleVBhdGggZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCc7XG4gIHNpZ25hdHVyZXM6IFtCdWZmZXJdO1xufVxuXG4vKipcbiAqIFRhcHJvb3QgU2NyaXB0cGF0aCBzcGVuZHMgYXJlIG1vcmUgc2ltaWxhciB0byByZWd1bGFyIHAybXMgc3BlbmRzIGFuZCBoYXZlIHR3byBwdWJsaWMga2V5cyBhbmRcbiAqIHR3byBzaWduYXR1cmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGggZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlcl07XG4gIHNpZ25hdHVyZXM6IFtCdWZmZXIsIEJ1ZmZlcl07XG4gIGNvbnRyb2xCbG9jazogQnVmZmVyO1xuICBsZWFmVmVyc2lvbjogbnVtYmVyO1xuICAvKiogSW5kaWNhdGVzIHRoZSBsZXZlbCBpbnNpZGUgdGhlIHRhcHRyZWUuICovXG4gIHNjcmlwdFBhdGhMZXZlbDogbnVtYmVyO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdCA9IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RLZXlQYXRoIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg7XG5cbnR5cGUgRGVjb21waWxlZFNjcmlwdCA9IEFycmF5PEJ1ZmZlciB8IG51bWJlcj47XG5cbi8qKlxuICogU3RhdGljIHNjcmlwdCBlbGVtZW50c1xuICovXG50eXBlIFNjcmlwdFBhdHRlcm5Db25zdGFudCA9XG4gIHwgJ09QXzAnXG4gIHwgJ09QXzEnXG4gIHwgJ09QXzInXG4gIHwgJ09QXzMnXG4gIHwgJ09QX0NIRUNLTVVMVElTSUcnXG4gIHwgJ09QX0NIRUNLU0lHJ1xuICB8ICdPUF9DSEVDS1NJR1ZFUklGWSc7XG5cbi8qKlxuICogU2NyaXB0IGVsZW1lbnRzIHRoYXQgY2FuIGJlIGNhcHR1cmVkXG4gKi9cbnR5cGUgU2NyaXB0UGF0dGVybkNhcHR1cmUgPVxuICB8ICc6cHVia2V5J1xuICB8ICc6cHVia2V5LXhvbmx5J1xuICB8ICc6c2lnbmF0dXJlJ1xuICB8ICc6Y29udHJvbC1ibG9jaydcbiAgfCB7ICc6c2NyaXB0JzogU2NyaXB0UGF0dGVybkVsZW1lbnRbXSB9O1xuXG50eXBlIFNjcmlwdFBhdHRlcm5FbGVtZW50ID0gU2NyaXB0UGF0dGVybkNvbnN0YW50IHwgU2NyaXB0UGF0dGVybkNhcHR1cmU7XG5cbi8qKlxuICogUmVzdWx0IGZvciBhIHN1Y2Nlc3NmdWwgc2NyaXB0IG1hdGNoXG4gKi9cbnR5cGUgTWF0Y2hSZXN1bHQgPSB7XG4gICc6cHVia2V5JzogQnVmZmVyW107XG4gICc6cHVia2V5LXhvbmx5JzogQnVmZmVyW107XG4gICc6Y29udHJvbC1ibG9jayc6IEJ1ZmZlcltdO1xuICAnOnNpZ25hdHVyZSc6IChCdWZmZXIgfCAwKVtdO1xuICAnOnNjcmlwdCc6IHsgYnVmZmVyOiBCdWZmZXI7IG1hdGNoOiBNYXRjaFJlc3VsdCB9W107XG59O1xuXG5mdW5jdGlvbiBlbXB0eU1hdGNoUmVzdWx0KCk6IE1hdGNoUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICAnOnB1YmtleSc6IFtdLFxuICAgICc6cHVia2V5LXhvbmx5JzogW10sXG4gICAgJzpjb250cm9sLWJsb2NrJzogW10sXG4gICAgJzpzaWduYXR1cmUnOiBbXSxcbiAgICAnOnNjcmlwdCc6IFtdLFxuICB9O1xufVxuXG5jbGFzcyBNYXRjaEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvLyB0aGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIHRvIHByb2hpYml0IGByZXR1cm4gbmV3IEVycm9yKClgIHdoZW4gdGhlIHJldHVybiB0eXBlIGRlbWFuZHMgYE1hdGNoRXJyb3JgXG4gIF9fdHlwZSA9ICdNYXRjaEVycm9yJztcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cblxuICBzdGF0aWMgZm9yUGF0dGVybkVsZW1lbnQocDogU2NyaXB0UGF0dGVybkVsZW1lbnQpOiBNYXRjaEVycm9yIHtcbiAgICBpZiAodHlwZW9mIHAgPT09ICdvYmplY3QnICYmICc6c2NyaXB0JyBpbiBwKSB7XG4gICAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGVycm9yIG1hdGNoaW5nIG5lc3RlZCBzY3JpcHRgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBlcnJvciBtYXRjaGluZyAke3B9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gcGF0dGVyblxuICogQHJldHVybiBNYXRjaFJlc3VsdCBpZiBzY3JpcHQgbWF0Y2hlcyBwYXR0ZXJuLiBUaGUgcmVzdWx0IHdpbGwgY29udGFpbiB0aGUgbWF0Y2hlZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoU2NyaXB0KHNjcmlwdDogRGVjb21waWxlZFNjcmlwdCwgcGF0dGVybjogU2NyaXB0UGF0dGVybkVsZW1lbnRbXSk6IE1hdGNoUmVzdWx0IHwgTWF0Y2hFcnJvciB7XG4gIC8qKlxuICAgKiBNYXRjaCBhIHNpbmdsZSBzY3JpcHQgZWxlbWVudCB3aXRoIGEgU2NyaXB0UGF0dGVybkVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIG1hdGNoRWxlbWVudChlOiBCdWZmZXIgfCBudW1iZXIsIHA6IFNjcmlwdFBhdHRlcm5FbGVtZW50KTogTWF0Y2hSZXN1bHQgfCBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHApIHtcbiAgICAgIGNhc2UgJ09QXzAnOlxuICAgICAgICByZXR1cm4gZSA9PT0gb3Bjb2Rlcy5PUF8wIHx8IChCdWZmZXIuaXNCdWZmZXIoZSkgJiYgZS5sZW5ndGggPT09IDApO1xuICAgICAgY2FzZSAnT1BfMSc6XG4gICAgICBjYXNlICdPUF8yJzpcbiAgICAgIGNhc2UgJ09QXzMnOlxuICAgICAgY2FzZSAnT1BfQ0hFQ0tNVUxUSVNJRyc6XG4gICAgICBjYXNlICdPUF9DSEVDS1NJRyc6XG4gICAgICBjYXNlICdPUF9DSEVDS1NJR1ZFUklGWSc6XG4gICAgICAgIHJldHVybiBlID09PSBvcGNvZGVzW3BdO1xuICAgICAgY2FzZSAnOnB1YmtleSc6XG4gICAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZSkgJiYgKGUubGVuZ3RoID09PSAzMyB8fCBlLmxlbmd0aCA9PT0gNjUpO1xuICAgICAgY2FzZSAnOnB1YmtleS14b25seSc6XG4gICAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZSkgJiYgZS5sZW5ndGggPT09IDMyO1xuICAgICAgY2FzZSAnOnNpZ25hdHVyZSc6XG4gICAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZSkgfHwgaXNQbGFjZWhvbGRlclNpZ25hdHVyZShlKTtcbiAgICAgIGNhc2UgJzpjb250cm9sLWJsb2NrJzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKSAmJiBpc1ZhbGlkQ29udHJvbEJvY2soZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gcGF0dGVybiBlbGVtZW50ICR7cH1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc2NyaXB0Lmxlbmd0aCAhPT0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGxlbmd0aCBtaXNtYXRjaGApO1xuICB9XG5cbiAgLy8gR28gb3ZlciBlYWNoIHBhdHRlcm4gZWxlbWVudC5cbiAgLy8gQ29sbGVjdCBjYXB0dXJlcyBpbnRvIGEgcmVzdWx0IG9iamVjdC5cbiAgcmV0dXJuIHBhdHRlcm4ucmVkdWNlKChvYmo6IE1hdGNoUmVzdWx0IHwgTWF0Y2hFcnJvciwgcCwgaSk6IE1hdGNoUmVzdWx0IHwgTWF0Y2hFcnJvciA9PiB7XG4gICAgLy8gaWYgd2UgaGFkIGEgcHJldmlvdXMgbWlzbWF0Y2gsIHNob3J0LWNpcmN1aXRcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBjb25zdCBlID0gc2NyaXB0W2ldO1xuXG4gICAgLy8gZm9yICc6c2NyaXB0JyBwYXR0ZXJuIGVsZW1lbnRzLCBkZWNvbXBpbGUgc2NyaXB0IGVsZW1lbnQgYW5kIHJlY3Vyc2VcbiAgICBpZiAodHlwZW9mIHAgPT09ICdvYmplY3QnICYmICc6c2NyaXB0JyBpbiBwKSB7XG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihlKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIGJ1ZmZlciBmb3IgOnNjcmlwdGApO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVjID0gYnNjcmlwdC5kZWNvbXBpbGUoZSk7XG4gICAgICBpZiAoIWRlYykge1xuICAgICAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGVycm9yIGRlY29tcGlsaW5nIG5lc3RlZCBzY3JpcHRgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoZGVjLCBwWyc6c2NyaXB0J10pO1xuICAgICAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9XG4gICAgICBvYmpbJzpzY3JpcHQnXS5wdXNoKHtcbiAgICAgICAgYnVmZmVyOiBlLFxuICAgICAgICBtYXRjaCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoRWxlbWVudChlLCBwKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICByZXR1cm4gTWF0Y2hFcnJvci5mb3JQYXR0ZXJuRWxlbWVudChwKTtcbiAgICB9XG5cbiAgICAvLyBpZiBwYXR0ZXJuIGVsZW1lbnQgaXMgYSBjYXB0dXJlLCBhZGQgaXQgdG8gdGhlIHJlc3VsdCBvYmpcbiAgICBpZiAocCA9PT0gJzpzaWduYXR1cmUnICYmIGUgPT09IDApIHtcbiAgICAgIG9ialtwXS5wdXNoKGUpO1xuICAgIH0gZWxzZSBpZiAocCBpbiBvYmopIHtcbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjYXB0dXJlIHZhbHVlYCk7XG4gICAgICB9XG4gICAgICBvYmpbcF0ucHVzaChlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9LCBlbXB0eU1hdGNoUmVzdWx0KCkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBzY3JpcHRcbiAqIEBwYXJhbSBwYXR0ZXJuc1xuICogQHJldHVybiBmaXJzdCBtYXRjaFxuICovXG5mdW5jdGlvbiBtYXRjaFNjcmlwdFNvbWUoc2NyaXB0OiBEZWNvbXBpbGVkU2NyaXB0LCBwYXR0ZXJuczogU2NyaXB0UGF0dGVybkVsZW1lbnRbXVtdKTogTWF0Y2hSZXN1bHQgfCBNYXRjaEVycm9yIHtcbiAgZm9yIChjb25zdCBwIG9mIHBhdHRlcm5zKSB7XG4gICAgY29uc3QgbSA9IG1hdGNoU2NyaXB0KHNjcmlwdCwgcCk7XG4gICAgaWYgKG0gaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIG07XG4gIH1cbiAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBubyBtYXRjaCBmb3Igc2NyaXB0YCk7XG59XG5cbnR5cGUgSW5wdXRTY3JpcHRzPFRTY3JpcHQsIFRXaXRuZXNzPiA9IHtcbiAgc2NyaXB0OiBUU2NyaXB0O1xuICB3aXRuZXNzOiBUV2l0bmVzcztcbn07XG5cbnR5cGUgSW5wdXRTY3JpcHRzTGVnYWN5ID0gSW5wdXRTY3JpcHRzPERlY29tcGlsZWRTY3JpcHQsIG51bGw+O1xudHlwZSBJbnB1dFNjcmlwdHNXcmFwcGVkU2Vnd2l0ID0gSW5wdXRTY3JpcHRzPERlY29tcGlsZWRTY3JpcHQsIEJ1ZmZlcltdPjtcbnR5cGUgSW5wdXRTY3JpcHRzTmF0aXZlU2Vnd2l0ID0gSW5wdXRTY3JpcHRzPG51bGwsIEJ1ZmZlcltdPjtcblxudHlwZSBJbnB1dFNjcmlwdHNVbmtub3duID0gSW5wdXRTY3JpcHRzPERlY29tcGlsZWRTY3JpcHQgfCBudWxsLCBCdWZmZXJbXSB8IG51bGw+O1xuXG50eXBlIElucHV0UGFyc2VyPFQgZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwayB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290PiA9IChcbiAgcDogSW5wdXRTY3JpcHRzVW5rbm93blxuKSA9PiBUIHwgTWF0Y2hFcnJvcjtcblxuZXhwb3J0IHR5cGUgSW5wdXRQdWJTY3JpcHQgPSBCdWZmZXI7XG5cbnR5cGUgUHViU2NyaXB0UGFyc2VyPFQgZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHRUYXByb290IHwgUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrPiA9IChcbiAgcDogSW5wdXRQdWJTY3JpcHQsXG4gIHQ6IFBhcnNlZFNjcmlwdFR5cGVcbikgPT4gVCB8IE1hdGNoRXJyb3I7XG5cbmZ1bmN0aW9uIGlzTGVnYWN5KHA6IElucHV0U2NyaXB0c1Vua25vd24pOiBwIGlzIElucHV0U2NyaXB0c0xlZ2FjeSB7XG4gIHJldHVybiBCb29sZWFuKHAuc2NyaXB0ICYmICFwLndpdG5lc3MpO1xufVxuXG5mdW5jdGlvbiBpc1dyYXBwZWRTZWd3aXQocDogSW5wdXRTY3JpcHRzVW5rbm93bik6IHAgaXMgSW5wdXRTY3JpcHRzV3JhcHBlZFNlZ3dpdCB7XG4gIHJldHVybiBCb29sZWFuKHAuc2NyaXB0ICYmIHAud2l0bmVzcyk7XG59XG5cbmZ1bmN0aW9uIGlzTmF0aXZlU2Vnd2l0KHA6IElucHV0U2NyaXB0c1Vua25vd24pOiBwIGlzIElucHV0U2NyaXB0c05hdGl2ZVNlZ3dpdCB7XG4gIHJldHVybiBCb29sZWFuKCFwLnNjcmlwdCAmJiBwLndpdG5lc3MpO1xufVxuXG5jb25zdCBwYXJzZVAyc2hQMnBrOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwaz4gPSAocCkgPT4ge1xuICBpZiAoIWlzTGVnYWN5KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBsZWdhY3kgaW5wdXRgKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KHAuc2NyaXB0LCBbJzpzaWduYXR1cmUnLCB7ICc6c2NyaXB0JzogWyc6cHVia2V5JywgJ09QX0NIRUNLU0lHJ10gfV0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJyxcbiAgICBwdWJsaWNLZXlzOiBtYXRjaFsnOnNjcmlwdCddWzBdLm1hdGNoWyc6cHVia2V5J10gYXMgW0J1ZmZlcl0sXG4gICAgc2lnbmF0dXJlczogbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBbQnVmZmVyXSxcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlUDJtcyhcbiAgZGVjU2NyaXB0OiBEZWNvbXBpbGVkU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCdcbik6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBNYXRjaEVycm9yIHtcbiAgY29uc3QgcGF0dGVybjJPZjM6IFNjcmlwdFBhdHRlcm5FbGVtZW50W10gPSBbJ09QXzInLCAnOnB1YmtleScsICc6cHVia2V5JywgJzpwdWJrZXknLCAnT1BfMycsICdPUF9DSEVDS01VTFRJU0lHJ107XG5cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdFNvbWUoZGVjU2NyaXB0LCBbXG4gICAgLyogZnVsbC1zaWduZWQsIG5vIHBsYWNlaG9sZGVyIHNpZ25hdHVyZSAqL1xuICAgIFsnT1BfMCcsICc6c2lnbmF0dXJlJywgJzpzaWduYXR1cmUnLCB7ICc6c2NyaXB0JzogcGF0dGVybjJPZjMgfV0sXG4gICAgLyogaGFsZi1zaWduZWQsIHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMgKi9cbiAgICBbJ09QXzAnLCAnOnNpZ25hdHVyZScsICc6c2lnbmF0dXJlJywgJzpzaWduYXR1cmUnLCB7ICc6c2NyaXB0JzogcGF0dGVybjJPZjMgfV0sXG4gIF0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgY29uc3QgW3JlZGVlbVNjcmlwdF0gPSBtYXRjaFsnOnNjcmlwdCddO1xuXG4gIGlmICghaXNUcmlwbGUocmVkZWVtU2NyaXB0Lm1hdGNoWyc6cHVia2V5J10pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHB1YmtleSBjb3VudGApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIHB1YmxpY0tleXM6IHJlZGVlbVNjcmlwdC5tYXRjaFsnOnB1YmtleSddLFxuICAgIHB1YlNjcmlwdDogcmVkZWVtU2NyaXB0LmJ1ZmZlcixcbiAgICBzaWduYXR1cmVzOiBtYXRjaFsnOnNpZ25hdHVyZSddIGFzIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXNbJ3NpZ25hdHVyZXMnXSxcbiAgICByZWRlZW1TY3JpcHQ6IHNjcmlwdFR5cGUgPT09ICdwMnNoJyA/IHJlZGVlbVNjcmlwdC5idWZmZXIgOiB1bmRlZmluZWQsXG4gICAgd2l0bmVzc1NjcmlwdDogc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHwgc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJyA/IHJlZGVlbVNjcmlwdC5idWZmZXIgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmNvbnN0IHBhcnNlUDJzaDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXM+ID0gKHApID0+IHtcbiAgaWYgKCFpc0xlZ2FjeShwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbGVnYWN5IGlucHV0YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUDJtcyhwLnNjcmlwdCwgJ3Ayc2gnKTtcbn07XG5cbmNvbnN0IHBhcnNlUDJzaFAyd3NoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcz4gPSAocCkgPT4ge1xuICBpZiAoIWlzV3JhcHBlZFNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgd3JhcHBlZCBzZWd3aXQgaW5wdXRgKTtcbiAgfVxuICByZXR1cm4geyAuLi5wYXJzZVAybXMocC53aXRuZXNzLCAncDJzaFAyd3NoJyksIHJlZGVlbVNjcmlwdDogcC5zY3JpcHRbMF0gYXMgQnVmZmVyIH07XG59O1xuXG5jb25zdCBwYXJzZVAyd3NoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcz4gPSAocCkgPT4ge1xuICBpZiAoIWlzTmF0aXZlU2Vnd2l0KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBuYXRpdmUgc2Vnd2l0YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUDJtcyhwLndpdG5lc3MsICdwMndzaCcpO1xufTtcblxuY29uc3QgcGFyc2VUYXByb290S2V5UGF0aDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RLZXlQYXRoPiA9IChwKSA9PiB7XG4gIGlmICghaXNOYXRpdmVTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIG5hdGl2ZSBzZWd3aXRgKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KHAud2l0bmVzcywgWyc6c2lnbmF0dXJlJ10pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG4gIGNvbnN0IHNpZ25hdHVyZXMgPSBtYXRjaFsnOnNpZ25hdHVyZSddIGFzIFtCdWZmZXJdO1xuICBpZiAoaXNQbGFjZWhvbGRlclNpZ25hdHVyZShzaWduYXR1cmVzWzBdKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB0YXByb290IGtleSBwYXRoIHNpZ25hdHVyZWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnLFxuICAgIHNpZ25hdHVyZXMsXG4gIH07XG59O1xuXG5jb25zdCBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoMk9mMzogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdD4gPSAocCkgPT4ge1xuICBpZiAoIWlzTmF0aXZlU2Vnd2l0KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBuYXRpdmUgc2Vnd2l0YCk7XG4gIH1cbiAgLy8gYXNzdW1lcyBubyBhbm5leFxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KHAud2l0bmVzcywgW1xuICAgICc6c2lnbmF0dXJlJyxcbiAgICAnOnNpZ25hdHVyZScsXG4gICAgeyAnOnNjcmlwdCc6IFsnOnB1YmtleS14b25seScsICdPUF9DSEVDS1NJR1ZFUklGWScsICc6cHVia2V5LXhvbmx5JywgJ09QX0NIRUNLU0lHJ10gfSxcbiAgICAnOmNvbnRyb2wtYmxvY2snLFxuICBdKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICBjb25zdCBbY29udHJvbEJsb2NrXSA9IG1hdGNoWyc6Y29udHJvbC1ibG9jayddO1xuICBjb25zdCBzY3JpcHRQYXRoTGV2ZWwgPSBjYWxjdWxhdGVTY3JpcHRQYXRoTGV2ZWwoY29udHJvbEJsb2NrKTtcblxuICBjb25zdCBsZWFmVmVyc2lvbiA9IGdldExlYWZWZXJzaW9uKGNvbnRyb2xCbG9jayk7XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcsXG4gICAgcHViU2NyaXB0OiBtYXRjaFsnOnNjcmlwdCddWzBdLmJ1ZmZlcixcbiAgICBwdWJsaWNLZXlzOiBtYXRjaFsnOnNjcmlwdCddWzBdLm1hdGNoWyc6cHVia2V5LXhvbmx5J10gYXMgW0J1ZmZlciwgQnVmZmVyXSxcbiAgICBzaWduYXR1cmVzOiBtYXRjaFsnOnNpZ25hdHVyZSddIGFzIFtCdWZmZXIsIEJ1ZmZlcl0sXG4gICAgY29udHJvbEJsb2NrLFxuICAgIHNjcmlwdFBhdGhMZXZlbCxcbiAgICBsZWFmVmVyc2lvbixcbiAgfTtcbn07XG5cbi8qKlxuICogUGFyc2UgYSB0cmFuc2FjdGlvbidzIHNpZ25hdHVyZSBzY3JpcHQgdG8gb2J0YWluIHB1YmxpYyBrZXlzLCBzaWduYXR1cmVzLCB0aGUgc2lnIHNjcmlwdCxcbiAqIGFuZCBvdGhlciBwcm9wZXJ0aWVzLlxuICpcbiAqIE9ubHkgc3VwcG9ydHMgc2NyaXB0IHR5cGVzIHVzZWQgaW4gQml0R28gdHJhbnNhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBpbnB1dFxuICogQHJldHVybnMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNpZ25hdHVyZVNjcmlwdChcbiAgaW5wdXQ6IFR4SW5wdXRcbik6IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Qge1xuICBjb25zdCBkZWNTY3JpcHQgPSBic2NyaXB0LmRlY29tcGlsZShpbnB1dC5zY3JpcHQpO1xuICBjb25zdCBwYXJzZXJzID0gW1xuICAgIHBhcnNlUDJzaDJPZjMsXG4gICAgcGFyc2VQMnNoUDJ3c2gyT2YzLFxuICAgIHBhcnNlUDJ3c2gyT2YzLFxuICAgIHBhcnNlVGFwcm9vdEtleVBhdGgyT2YzLFxuICAgIHBhcnNlVGFwcm9vdFNjcmlwdFBhdGgyT2YzLFxuICAgIHBhcnNlUDJzaFAycGssXG4gIF0gYXMgY29uc3Q7XG4gIGZvciAoY29uc3QgZiBvZiBwYXJzZXJzKSB7XG4gICAgY29uc3QgcGFyc2VkID0gZih7XG4gICAgICBzY3JpcHQ6IGRlY1NjcmlwdD8ubGVuZ3RoID09PSAwID8gbnVsbCA6IGRlY1NjcmlwdCxcbiAgICAgIHdpdG5lc3M6IGlucHV0LndpdG5lc3MubGVuZ3RoID09PSAwID8gbnVsbCA6IGlucHV0LndpdG5lc3MsXG4gICAgfSk7XG4gICAgaWYgKHBhcnNlZCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IHBhcnNlIGlucHV0YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNpZ25hdHVyZVNjcmlwdDJPZjMoaW5wdXQ6IFR4SW5wdXQpOiBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlU2lnbmF0dXJlU2NyaXB0KGlucHV0KTtcblxuICBpZiAoXG4gICAgIWlzU2NyaXB0VHlwZTJPZjMocmVzdWx0LnNjcmlwdFR5cGUpICYmXG4gICAgcmVzdWx0LnNjcmlwdFR5cGUgIT09ICd0YXByb290S2V5UGF0aFNwZW5kJyAmJlxuICAgIHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHNjcmlwdCB0eXBlYCk7XG4gIH1cblxuICBpZiAoIXJlc3VsdC5zaWduYXR1cmVzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtaXNzaW5nIHNpZ25hdHVyZXNgKTtcbiAgfVxuICBpZiAoXG4gICAgcmVzdWx0LnNjcmlwdFR5cGUgIT09ICd0YXByb290S2V5UGF0aFNwZW5kJyAmJlxuICAgIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMyAmJlxuICAgIChyZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDIgfHwgcmVzdWx0LnNjcmlwdFR5cGUgIT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHB1YmtleSBjb3VudGApO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdDtcbn1cblxuY29uc3QgcGFyc2VQMnNoUDJwa1B1YlNjcmlwdDogUHViU2NyaXB0UGFyc2VyPFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrPiA9IChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpID0+IHtcbiAgaWYgKHNjcmlwdFR5cGUgIT09ICdwMnNoUDJwaycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2NyaXB0IHR5cGUnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KFtwdWJTY3JpcHRdLCBbeyAnOnNjcmlwdCc6IFsnOnB1YmtleScsICdPUF9DSEVDS1NJRyddIH1dKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICBjb25zdCBbc2NyaXB0XSA9IG1hdGNoWyc6c2NyaXB0J107XG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZSxcbiAgICBwdWJsaWNLZXlzOiBzY3JpcHQubWF0Y2hbJzpwdWJrZXknXSBhcyBbQnVmZmVyXSxcbiAgICBwdWJTY3JpcHQ6IHB1YlNjcmlwdCxcbiAgICByZWRlZW1TY3JpcHQ6IHB1YlNjcmlwdCxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlUDJtc1B1YlNjcmlwdDogUHViU2NyaXB0UGFyc2VyPFBhcnNlZFB1YlNjcmlwdFAybXM+ID0gKHB1YlNjcmlwdCwgc2NyaXB0VHlwZSkgPT4ge1xuICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnIHx8IHNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyB8fCBzY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjcmlwdCB0eXBlJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChcbiAgICBbcHViU2NyaXB0XSxcbiAgICBbeyAnOnNjcmlwdCc6IFsnT1BfMicsICc6cHVia2V5JywgJzpwdWJrZXknLCAnOnB1YmtleScsICdPUF8zJywgJ09QX0NIRUNLTVVMVElTSUcnXSB9XVxuICApO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgY29uc3QgW3JlZGVlbVNjcmlwdF0gPSBtYXRjaFsnOnNjcmlwdCddO1xuXG4gIGlmICghaXNUcmlwbGUocmVkZWVtU2NyaXB0Lm1hdGNoWyc6cHVia2V5J10pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHB1YmtleSBjb3VudCcpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHRUeXBlLFxuICAgIHB1YmxpY0tleXM6IHJlZGVlbVNjcmlwdC5tYXRjaFsnOnB1YmtleSddLFxuICAgIHB1YlNjcmlwdDogcmVkZWVtU2NyaXB0LmJ1ZmZlcixcbiAgICByZWRlZW1TY3JpcHQ6IHNjcmlwdFR5cGUgPT09ICdwMnNoJyA/IHJlZGVlbVNjcmlwdC5idWZmZXIgOiB1bmRlZmluZWQsXG4gICAgd2l0bmVzc1NjcmlwdDogc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHwgc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJyA/IHJlZGVlbVNjcmlwdC5idWZmZXIgOiB1bmRlZmluZWQsXG4gIH07XG59O1xuXG5jb25zdCBwYXJzZVRhcHJvb3RLZXlQYXRoUHViU2NyaXB0OiBQdWJTY3JpcHRQYXJzZXI8UGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGg+ID0gKHB1YlNjcmlwdCwgc2NyaXB0VHlwZSkgPT4ge1xuICBpZiAoXG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2NyaXB0IHR5cGUnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KFtwdWJTY3JpcHRdLCBbeyAnOnNjcmlwdCc6IFsnT1BfMScsICc6cHVia2V5LXhvbmx5J10gfV0pO1xuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgY29uc3QgW3NjcmlwdF0gPSBtYXRjaFsnOnNjcmlwdCddO1xuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnLFxuICAgIHB1YmxpY0tleXM6IHNjcmlwdC5tYXRjaFsnOnB1YmtleS14b25seSddIGFzIFtCdWZmZXJdLFxuICAgIHB1YlNjcmlwdDogcHViU2NyaXB0LFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VUYXByb290U2NyaXB0UGF0aFB1YlNjcmlwdDogUHViU2NyaXB0UGFyc2VyPFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoPiA9IChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpID0+IHtcbiAgaWYgKFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjcmlwdCB0eXBlJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChcbiAgICBbcHViU2NyaXB0XSxcbiAgICBbeyAnOnNjcmlwdCc6IFsnOnB1YmtleS14b25seScsICdPUF9DSEVDS1NJR1ZFUklGWScsICc6cHVia2V5LXhvbmx5JywgJ09QX0NIRUNLU0lHJ10gfV1cbiAgKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZSxcbiAgICBwdWJTY3JpcHQ6IG1hdGNoWyc6c2NyaXB0J11bMF0uYnVmZmVyLFxuICAgIHB1YmxpY0tleXM6IG1hdGNoWyc6c2NyaXB0J11bMF0ubWF0Y2hbJzpwdWJrZXkteG9ubHknXSBhcyBbQnVmZmVyLCBCdWZmZXJdLFxuICB9O1xufTtcblxuLyoqXG4gKiBAcmV0dXJuIHB1YlNjcmlwdCAoc2NyaXB0UHViS2V5L3JlZGVlbVNjcmlwdC93aXRuZXNzU2NyaXB0KSBpcyBwYXJzZWQuXG4gKiBQMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAocmVkZWVtU2NyaXB0KSwgcmVkZWVtU2NyaXB0LCBwdWJsaWMga2V5c1xuICogUFcyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgd2l0bmVzc1NjcmlwdCwgcHVibGljIGtleXMuXG4gKiBQMlNILVBXMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAod2l0bmVzc1NjcmlwdCksIHdpdG5lc3NTY3JpcHQsIHB1YmxpYyBrZXlzLlxuICogdGFwcm9vdFNjcmlwdFBhdGhTcGVuZCAoUDJUUiBhbmQgUDJUUk1VSVNHMiBzY3JpcHQgcGF0aCkgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0LCBwdWIga2V5cy5cbiAqIHRhcHJvb3RLZXlQYXRoU3BlbmQgKFAyVFJNVUlTRzIga2V5IHBhdGgpID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAoMzQtYnl0ZSBvdXRwdXQgc2NyaXB0KSwgcHViIGtleSAodGFwT3V0cHV0S2V5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCdcbik6IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbik6IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCdcbik6IFBhcnNlZFB1YlNjcmlwdFAybXM7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGUyT2YzXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTJPZjNcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290IHtcbiAgY29uc3QgcmVzdWx0ID1cbiAgICBzY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCdcbiAgICAgID8gcGFyc2VUYXByb290S2V5UGF0aFB1YlNjcmlwdChpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSlcbiAgICAgIDogc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4gICAgICA/IHBhcnNlVGFwcm9vdFNjcmlwdFBhdGhQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpXG4gICAgICA6IHBhcnNlUDJtc1B1YlNjcmlwdChpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSk7XG5cbiAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKFxuICAgIChyZXN1bHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnICYmIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMSkgfHxcbiAgICAocmVzdWx0LnNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDIpIHx8XG4gICAgKGlzU2NyaXB0VHlwZTJPZjMocmVzdWx0LnNjcmlwdFR5cGUpICYmIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHB1YmtleSBjb3VudCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHB1YlNjcmlwdCAoc2NyaXB0UHViS2V5L3JlZGVlbVNjcmlwdC93aXRuZXNzU2NyaXB0KSBpcyBwYXJzZWQuXG4gKiBQMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAocmVkZWVtU2NyaXB0KSwgcmVkZWVtU2NyaXB0LCBwdWJsaWMga2V5c1xuICogUFcyU0ggPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0ICh3aXRuZXNzU2NyaXB0KSwgd2l0bmVzc1NjcmlwdCwgcHVibGljIGtleXMuXG4gKiBQMlNILVBXMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAod2l0bmVzc1NjcmlwdCksIHdpdG5lc3NTY3JpcHQsIHB1YmxpYyBrZXlzLlxuICogdGFwcm9vdFNjcmlwdFBhdGhTcGVuZCAoUDJUUiBhbmQgUDJUUk1VSVNHMiBzY3JpcHQgcGF0aCkgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0LCBwdWIga2V5cy5cbiAqIHRhcHJvb3RLZXlQYXRoU3BlbmQgKFAyVFJNVUlTRzIga2V5IHBhdGgpID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAoMzQtYnl0ZSBvdXRwdXQgc2NyaXB0KSwgcHViIGtleSAodGFwT3V0cHV0S2V5KS5cbiAqIFAyU0gtUDJQSyA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQsIHB1YiBrZXksIHJlZGVlbVNjcmlwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdEtleVBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGU6ICdwMnNoUDJwaycpOiBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwaztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCdcbik6IFBhcnNlZFB1YlNjcmlwdFAybXM7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZVxuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgfCBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwaztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB8IFBhcnNlZFB1YlNjcmlwdFAyc2hQMnBrIHtcbiAgY29uc3QgcmVzdWx0ID1cbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAycGsnXG4gICAgICA/IHBhcnNlUDJzaFAycGtQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpXG4gICAgICA6IHBhcnNlUHViU2NyaXB0Mk9mMyhpbnB1dFB1YlNjcmlwdCwgc2NyaXB0VHlwZSk7XG5cbiAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKHJlc3VsdC5zY3JpcHRUeXBlID09PSAncDJzaFAycGsnICYmIHJlc3VsdC5wdWJsaWNLZXlzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBwdWJrZXkgY291bnQnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
428
+ function getChainAndIndexFromPath(path) {
429
+ const parts = path.split('/');
430
+ if (parts.length <= 2) {
431
+ throw new Error(`invalid path "${path}"`);
432
+ }
433
+ const chain = Number(parts[parts.length - 2]);
434
+ const index = Number(parts[parts.length - 1]);
435
+ if (isNaN(chain) || isNaN(index)) {
436
+ throw new Error(`Could not parse chain and index into numbers from path ${path}`);
437
+ }
438
+ if (chain < 0 || index < 0) {
439
+ throw new Error(`chain and index must be non-negative`);
440
+ }
441
+ return { chain, index };
442
+ }
443
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9wYXJzZUlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esd0RBS0M7QUFLRCxnREFHQztBQUtELDREQVdDO0FBS0Qsd0NBS0M7QUFnYUQsb0RBdUJDO0FBRUQsNERBdUJDO0FBdUhELGdEQXdCQztBQTRCRCx3Q0FrQkM7QUFFRCw0REFlQztBQTVzQkQsNEJBQTRCO0FBQzVCLHVDQUF1QztBQUN2QyxpREFBMkQ7QUFFM0QsbUNBQW1DO0FBQ25DLG1EQUFtRDtBQUVuRCxTQUFnQixzQkFBc0IsQ0FBQyxDQUFrQjtJQUN2RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsWUFBb0I7SUFDckQsc0ZBQXNGO0lBQ3RGLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdEcsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsWUFBb0I7SUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMvQixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxNQUFN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LEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1yZWRlY2xhcmU6IDAgKi9cbmltcG9ydCAqIGFzIG9wY29kZXMgZnJvbSAnYml0Y29pbi1vcHMnO1xuaW1wb3J0IHsgVHhJbnB1dCwgc2NyaXB0IGFzIGJzY3JpcHQgfSBmcm9tICdiaXRjb2luanMtbGliJztcblxuaW1wb3J0IHsgaXNUcmlwbGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzU2NyaXB0VHlwZTJPZjMgfSBmcm9tICcuL291dHB1dFNjcmlwdHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFjZWhvbGRlclNpZ25hdHVyZSh2OiBudW1iZXIgfCBCdWZmZXIpOiBib29sZWFuIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2KSkge1xuICAgIHJldHVybiB2Lmxlbmd0aCA9PT0gMDtcbiAgfVxuICByZXR1cm4gdiA9PT0gMDtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHRydWUgaWZmIFAyVFIgc2NyaXB0IHBhdGgncyBjb250cm9sIGJsb2NrIG1hdGNoZXMgQml0R28ncyBuZWVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQ29udHJvbEJvY2soY29udHJvbEJsb2NrOiBCdWZmZXIpOiBib29sZWFuIHtcbiAgLy8gVGhlIGxhc3Qgc3RhY2sgZWxlbWVudCBpcyBjYWxsZWQgdGhlIGNvbnRyb2wgYmxvY2sgYywgYW5kIG11c3QgaGF2ZSBsZW5ndGggMzMgKyAzMm1cbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihjb250cm9sQmxvY2spICYmIDMzIDw9IGNvbnRyb2xCbG9jay5sZW5ndGggJiYgY29udHJvbEJsb2NrLmxlbmd0aCAlIDMyID09PSAxO1xufVxuXG4vKipcbiAqIEByZXR1cm4gc2NyaXB0IHBhdGggbGV2ZWwgZm9yIFAyVFIgY29udHJvbCBibG9ja1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2NyaXB0UGF0aExldmVsKGNvbnRyb2xCbG9jazogQnVmZmVyKTogbnVtYmVyIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY29udHJvbEJsb2NrKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb250cm9sIGJsb2NrIHR5cGUuJyk7XG4gIH1cbiAgaWYgKGNvbnRyb2xCbG9jay5sZW5ndGggPT09IDY1KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKGNvbnRyb2xCbG9jay5sZW5ndGggPT09IDk3KSB7XG4gICAgcmV0dXJuIDI7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGNvbnRyb2wgYmxvY2sgbGVuZ3RoLicpO1xufVxuXG4vKipcbiAqIEByZXR1cm4gbGVhZiB2ZXJzaW9uIGZvciBQMlRSIGNvbnRyb2wgYmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZWFmVmVyc2lvbihjb250cm9sQmxvY2s6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udHJvbEJsb2NrKSAmJiBjb250cm9sQmxvY2subGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBjb250cm9sQmxvY2tbMF0gJiAweGZlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBsZWFmVmVyc2lvbi4nKTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkU2NyaXB0VHlwZTJPZjMgPVxuICB8ICdwMnNoJ1xuICB8ICdwMnNoUDJ3c2gnXG4gIHwgJ3Ayd3NoJ1xuICB8ICd0YXByb290S2V5UGF0aFNwZW5kJyAvLyBvbmx5IGltcGxlbWVudGVkIGZvciBwMnRyTXVzaWcyXG4gIHwgJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnOyAvLyBjYW4gYmUgZm9yIGVpdGhlciBwMnRyIG9yIHAydHJNdXNpZzIgb3V0cHV0IHNjcmlwdFxuXG5leHBvcnQgdHlwZSBQYXJzZWRTY3JpcHRUeXBlID0gUGFyc2VkU2NyaXB0VHlwZTJPZjMgfCAncDJzaFAycGsnO1xuXG5leHBvcnQgdHlwZSBQYXJzZWRQdWJTY3JpcHQgPSB7XG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBQYXJzZWRTaWduYXR1cmVTY3JpcHQgPSB7XG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGU7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAyc2hQMnBrIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3Ayc2hQMnBrJztcbiAgcHVibGljS2V5czogW0J1ZmZlcl07XG4gIHNpZ25hdHVyZXM6IFtCdWZmZXJdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuICAvLyB4LW9ubHkgdGFwT3V0cHV0S2V5XG4gIHB1YmxpY0tleXM6IFtCdWZmZXJdO1xuICBwdWJTY3JpcHQ6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aCBleHRlbmRzIFBhcnNlZFB1YlNjcmlwdCB7XG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJztcbiAgcHVibGljS2V5czogW0J1ZmZlciwgQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgPSBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aCB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFB1YlNjcmlwdFAybXMgZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICB3aXRuZXNzU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUHViU2NyaXB0UDJzaFAycGsgZXh0ZW5kcyBQYXJzZWRQdWJTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaFAycGsnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdDogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgZXh0ZW5kcyBQYXJzZWRTaWduYXR1cmVTY3JpcHQge1xuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCc7XG4gIHB1YmxpY0tleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXTtcbiAgc2lnbmF0dXJlczpcbiAgICB8IFtCdWZmZXIsIEJ1ZmZlcl0gLy8gZnVsbHktc2lnbmVkIHRyYW5zYWN0aW9ucyB3aXRoIHNpZ25hdHVyZXNcbiAgICAvKiBQYXJ0aWFsbHkgc2lnbmVkIHRyYW5zYWN0aW9ucyB3aXRoIHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMuXG4gICAgICAgRm9yIHAyc2gsIHRoZSBwbGFjZWhvbGRlciBpcyBPUF8wIChudW1iZXIgMCkgKi9cbiAgICB8IFtCdWZmZXIgfCAwLCBCdWZmZXIgfCAwLCBCdWZmZXIgfCAwXTtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG4gIHJlZGVlbVNjcmlwdDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICB3aXRuZXNzU2NyaXB0OiBCdWZmZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogS2V5cGF0aCBzcGVuZHMgb25seSBoYXZlIGEgc2luZ2xlIHNpZ25hdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RLZXlQYXRoIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuICBzaWduYXR1cmVzOiBbQnVmZmVyXTtcbn1cblxuLyoqXG4gKiBUYXByb290IFNjcmlwdHBhdGggc3BlbmRzIGFyZSBtb3JlIHNpbWlsYXIgdG8gcmVndWxhciBwMm1zIHNwZW5kcyBhbmQgaGF2ZSB0d28gcHVibGljIGtleXMgYW5kXG4gKiB0d28gc2lnbmF0dXJlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0IHtcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnO1xuICBwdWJsaWNLZXlzOiBbQnVmZmVyLCBCdWZmZXJdO1xuICBzaWduYXR1cmVzOiBbQnVmZmVyLCBCdWZmZXJdO1xuICBjb250cm9sQmxvY2s6IEJ1ZmZlcjtcbiAgbGVhZlZlcnNpb246IG51bWJlcjtcbiAgLyoqIEluZGljYXRlcyB0aGUgbGV2ZWwgaW5zaWRlIHRoZSB0YXB0cmVlLiAqL1xuICBzY3JpcHRQYXRoTGV2ZWw6IG51bWJlcjtcbiAgcHViU2NyaXB0OiBCdWZmZXI7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3QgPSBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290S2V5UGF0aCB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3RTY3JpcHRQYXRoO1xuXG50eXBlIERlY29tcGlsZWRTY3JpcHQgPSBBcnJheTxCdWZmZXIgfCBudW1iZXI+O1xuXG4vKipcbiAqIFN0YXRpYyBzY3JpcHQgZWxlbWVudHNcbiAqL1xudHlwZSBTY3JpcHRQYXR0ZXJuQ29uc3RhbnQgPVxuICB8ICdPUF8wJ1xuICB8ICdPUF8xJ1xuICB8ICdPUF8yJ1xuICB8ICdPUF8zJ1xuICB8ICdPUF9DSEVDS01VTFRJU0lHJ1xuICB8ICdPUF9DSEVDS1NJRydcbiAgfCAnT1BfQ0hFQ0tTSUdWRVJJRlknO1xuXG4vKipcbiAqIFNjcmlwdCBlbGVtZW50cyB0aGF0IGNhbiBiZSBjYXB0dXJlZFxuICovXG50eXBlIFNjcmlwdFBhdHRlcm5DYXB0dXJlID1cbiAgfCAnOnB1YmtleSdcbiAgfCAnOnB1YmtleS14b25seSdcbiAgfCAnOnNpZ25hdHVyZSdcbiAgfCAnOmNvbnRyb2wtYmxvY2snXG4gIHwgeyAnOnNjcmlwdCc6IFNjcmlwdFBhdHRlcm5FbGVtZW50W10gfTtcblxudHlwZSBTY3JpcHRQYXR0ZXJuRWxlbWVudCA9IFNjcmlwdFBhdHRlcm5Db25zdGFudCB8IFNjcmlwdFBhdHRlcm5DYXB0dXJlO1xuXG4vKipcbiAqIFJlc3VsdCBmb3IgYSBzdWNjZXNzZnVsIHNjcmlwdCBtYXRjaFxuICovXG50eXBlIE1hdGNoUmVzdWx0ID0ge1xuICAnOnB1YmtleSc6IEJ1ZmZlcltdO1xuICAnOnB1YmtleS14b25seSc6IEJ1ZmZlcltdO1xuICAnOmNvbnRyb2wtYmxvY2snOiBCdWZmZXJbXTtcbiAgJzpzaWduYXR1cmUnOiAoQnVmZmVyIHwgMClbXTtcbiAgJzpzY3JpcHQnOiB7IGJ1ZmZlcjogQnVmZmVyOyBtYXRjaDogTWF0Y2hSZXN1bHQgfVtdO1xufTtcblxuZnVuY3Rpb24gZW1wdHlNYXRjaFJlc3VsdCgpOiBNYXRjaFJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgJzpwdWJrZXknOiBbXSxcbiAgICAnOnB1YmtleS14b25seSc6IFtdLFxuICAgICc6Y29udHJvbC1ibG9jayc6IFtdLFxuICAgICc6c2lnbmF0dXJlJzogW10sXG4gICAgJzpzY3JpcHQnOiBbXSxcbiAgfTtcbn1cblxuY2xhc3MgTWF0Y2hFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLy8gdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB0byBwcm9oaWJpdCBgcmV0dXJuIG5ldyBFcnJvcigpYCB3aGVuIHRoZSByZXR1cm4gdHlwZSBkZW1hbmRzIGBNYXRjaEVycm9yYFxuICBfX3R5cGUgPSAnTWF0Y2hFcnJvcic7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG5cbiAgc3RhdGljIGZvclBhdHRlcm5FbGVtZW50KHA6IFNjcmlwdFBhdHRlcm5FbGVtZW50KTogTWF0Y2hFcnJvciB7XG4gICAgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiAnOnNjcmlwdCcgaW4gcCkge1xuICAgICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBlcnJvciBtYXRjaGluZyBuZXN0ZWQgc2NyaXB0YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXJyb3IgbWF0Y2hpbmcgJHtwfWApO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHNjcmlwdFxuICogQHBhcmFtIHBhdHRlcm5cbiAqIEByZXR1cm4gTWF0Y2hSZXN1bHQgaWYgc2NyaXB0IG1hdGNoZXMgcGF0dGVybi4gVGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gdGhlIG1hdGNoZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBtYXRjaFNjcmlwdChzY3JpcHQ6IERlY29tcGlsZWRTY3JpcHQsIHBhdHRlcm46IFNjcmlwdFBhdHRlcm5FbGVtZW50W10pOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3Ige1xuICAvKipcbiAgICogTWF0Y2ggYSBzaW5nbGUgc2NyaXB0IGVsZW1lbnQgd2l0aCBhIFNjcmlwdFBhdHRlcm5FbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiBtYXRjaEVsZW1lbnQoZTogQnVmZmVyIHwgbnVtYmVyLCBwOiBTY3JpcHRQYXR0ZXJuRWxlbWVudCk6IE1hdGNoUmVzdWx0IHwgYm9vbGVhbiB7XG4gICAgc3dpdGNoIChwKSB7XG4gICAgICBjYXNlICdPUF8wJzpcbiAgICAgICAgcmV0dXJuIGUgPT09IG9wY29kZXMuT1BfMCB8fCAoQnVmZmVyLmlzQnVmZmVyKGUpICYmIGUubGVuZ3RoID09PSAwKTtcbiAgICAgIGNhc2UgJ09QXzEnOlxuICAgICAgY2FzZSAnT1BfMic6XG4gICAgICBjYXNlICdPUF8zJzpcbiAgICAgIGNhc2UgJ09QX0NIRUNLTVVMVElTSUcnOlxuICAgICAgY2FzZSAnT1BfQ0hFQ0tTSUcnOlxuICAgICAgY2FzZSAnT1BfQ0hFQ0tTSUdWRVJJRlknOlxuICAgICAgICByZXR1cm4gZSA9PT0gb3Bjb2Rlc1twXTtcbiAgICAgIGNhc2UgJzpwdWJrZXknOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpICYmIChlLmxlbmd0aCA9PT0gMzMgfHwgZS5sZW5ndGggPT09IDY1KTtcbiAgICAgIGNhc2UgJzpwdWJrZXkteG9ubHknOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpICYmIGUubGVuZ3RoID09PSAzMjtcbiAgICAgIGNhc2UgJzpzaWduYXR1cmUnOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpIHx8IGlzUGxhY2Vob2xkZXJTaWduYXR1cmUoZSk7XG4gICAgICBjYXNlICc6Y29udHJvbC1ibG9jayc6XG4gICAgICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZSkgJiYgaXNWYWxpZENvbnRyb2xCb2NrKGUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHBhdHRlcm4gZWxlbWVudCAke3B9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHNjcmlwdC5sZW5ndGggIT09IHBhdHRlcm4ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBsZW5ndGggbWlzbWF0Y2hgKTtcbiAgfVxuXG4gIC8vIEdvIG92ZXIgZWFjaCBwYXR0ZXJuIGVsZW1lbnQuXG4gIC8vIENvbGxlY3QgY2FwdHVyZXMgaW50byBhIHJlc3VsdCBvYmplY3QuXG4gIHJldHVybiBwYXR0ZXJuLnJlZHVjZSgob2JqOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3IsIHAsIGkpOiBNYXRjaFJlc3VsdCB8IE1hdGNoRXJyb3IgPT4ge1xuICAgIC8vIGlmIHdlIGhhZCBhIHByZXZpb3VzIG1pc21hdGNoLCBzaG9ydC1jaXJjdWl0XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgY29uc3QgZSA9IHNjcmlwdFtpXTtcblxuICAgIC8vIGZvciAnOnNjcmlwdCcgcGF0dGVybiBlbGVtZW50cywgZGVjb21waWxlIHNjcmlwdCBlbGVtZW50IGFuZCByZWN1cnNlXG4gICAgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiAnOnNjcmlwdCcgaW4gcCkge1xuICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBidWZmZXIgZm9yIDpzY3JpcHRgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlYyA9IGJzY3JpcHQuZGVjb21waWxlKGUpO1xuICAgICAgaWYgKCFkZWMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBlcnJvciBkZWNvbXBpbGluZyBuZXN0ZWQgc2NyaXB0YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaCA9IG1hdGNoU2NyaXB0KGRlYywgcFsnOnNjcmlwdCddKTtcbiAgICAgIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuICAgICAgb2JqWyc6c2NyaXB0J10ucHVzaCh7XG4gICAgICAgIGJ1ZmZlcjogZSxcbiAgICAgICAgbWF0Y2gsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaEVsZW1lbnQoZSwgcCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIE1hdGNoRXJyb3IuZm9yUGF0dGVybkVsZW1lbnQocCk7XG4gICAgfVxuXG4gICAgLy8gaWYgcGF0dGVybiBlbGVtZW50IGlzIGEgY2FwdHVyZSwgYWRkIGl0IHRvIHRoZSByZXN1bHQgb2JqXG4gICAgaWYgKHAgPT09ICc6c2lnbmF0dXJlJyAmJiBlID09PSAwKSB7XG4gICAgICBvYmpbcF0ucHVzaChlKTtcbiAgICB9IGVsc2UgaWYgKHAgaW4gb2JqKSB7XG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgY2FwdHVyZSB2YWx1ZWApO1xuICAgICAgfVxuICAgICAgb2JqW3BdLnB1c2goZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfSwgZW1wdHlNYXRjaFJlc3VsdCgpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gcGF0dGVybnNcbiAqIEByZXR1cm4gZmlyc3QgbWF0Y2hcbiAqL1xuZnVuY3Rpb24gbWF0Y2hTY3JpcHRTb21lKHNjcmlwdDogRGVjb21waWxlZFNjcmlwdCwgcGF0dGVybnM6IFNjcmlwdFBhdHRlcm5FbGVtZW50W11bXSk6IE1hdGNoUmVzdWx0IHwgTWF0Y2hFcnJvciB7XG4gIGZvciAoY29uc3QgcCBvZiBwYXR0ZXJucykge1xuICAgIGNvbnN0IG0gPSBtYXRjaFNjcmlwdChzY3JpcHQsIHApO1xuICAgIGlmIChtIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBtO1xuICB9XG4gIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgbm8gbWF0Y2ggZm9yIHNjcmlwdGApO1xufVxuXG50eXBlIElucHV0U2NyaXB0czxUU2NyaXB0LCBUV2l0bmVzcz4gPSB7XG4gIHNjcmlwdDogVFNjcmlwdDtcbiAgd2l0bmVzczogVFdpdG5lc3M7XG59O1xuXG50eXBlIElucHV0U2NyaXB0c0xlZ2FjeSA9IElucHV0U2NyaXB0czxEZWNvbXBpbGVkU2NyaXB0LCBudWxsPjtcbnR5cGUgSW5wdXRTY3JpcHRzV3JhcHBlZFNlZ3dpdCA9IElucHV0U2NyaXB0czxEZWNvbXBpbGVkU2NyaXB0LCBCdWZmZXJbXT47XG50eXBlIElucHV0U2NyaXB0c05hdGl2ZVNlZ3dpdCA9IElucHV0U2NyaXB0czxudWxsLCBCdWZmZXJbXT47XG5cbnR5cGUgSW5wdXRTY3JpcHRzVW5rbm93biA9IElucHV0U2NyaXB0czxEZWNvbXBpbGVkU2NyaXB0IHwgbnVsbCwgQnVmZmVyW10gfCBudWxsPjtcblxudHlwZSBJbnB1dFBhcnNlcjxUIGV4dGVuZHMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGsgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgUGFyc2VkU2lnbmF0dXJlU2NyaXB0VGFwcm9vdD4gPSAoXG4gIHA6IElucHV0U2NyaXB0c1Vua25vd25cbikgPT4gVCB8IE1hdGNoRXJyb3I7XG5cbmV4cG9ydCB0eXBlIElucHV0UHViU2NyaXB0ID0gQnVmZmVyO1xuXG50eXBlIFB1YlNjcmlwdFBhcnNlcjxUIGV4dGVuZHMgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB8IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwaz4gPSAoXG4gIHA6IElucHV0UHViU2NyaXB0LFxuICB0OiBQYXJzZWRTY3JpcHRUeXBlXG4pID0+IFQgfCBNYXRjaEVycm9yO1xuXG5mdW5jdGlvbiBpc0xlZ2FjeShwOiBJbnB1dFNjcmlwdHNVbmtub3duKTogcCBpcyBJbnB1dFNjcmlwdHNMZWdhY3kge1xuICByZXR1cm4gQm9vbGVhbihwLnNjcmlwdCAmJiAhcC53aXRuZXNzKTtcbn1cblxuZnVuY3Rpb24gaXNXcmFwcGVkU2Vnd2l0KHA6IElucHV0U2NyaXB0c1Vua25vd24pOiBwIGlzIElucHV0U2NyaXB0c1dyYXBwZWRTZWd3aXQge1xuICByZXR1cm4gQm9vbGVhbihwLnNjcmlwdCAmJiBwLndpdG5lc3MpO1xufVxuXG5mdW5jdGlvbiBpc05hdGl2ZVNlZ3dpdChwOiBJbnB1dFNjcmlwdHNVbmtub3duKTogcCBpcyBJbnB1dFNjcmlwdHNOYXRpdmVTZWd3aXQge1xuICByZXR1cm4gQm9vbGVhbighcC5zY3JpcHQgJiYgcC53aXRuZXNzKTtcbn1cblxuY29uc3QgcGFyc2VQMnNoUDJwazogSW5wdXRQYXJzZXI8UGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJzaFAycGs+ID0gKHApID0+IHtcbiAgaWYgKCFpc0xlZ2FjeShwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbGVnYWN5IGlucHV0YCk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChwLnNjcmlwdCwgWyc6c2lnbmF0dXJlJywgeyAnOnNjcmlwdCc6IFsnOnB1YmtleScsICdPUF9DSEVDS1NJRyddIH1dKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICdwMnNoUDJwaycsXG4gICAgcHVibGljS2V5czogbWF0Y2hbJzpzY3JpcHQnXVswXS5tYXRjaFsnOnB1YmtleSddIGFzIFtCdWZmZXJdLFxuICAgIHNpZ25hdHVyZXM6IG1hdGNoWyc6c2lnbmF0dXJlJ10gYXMgW0J1ZmZlcl0sXG4gIH07XG59O1xuXG5mdW5jdGlvbiBwYXJzZVAybXMoXG4gIGRlY1NjcmlwdDogRGVjb21waWxlZFNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnXG4pOiBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zIHwgTWF0Y2hFcnJvciB7XG4gIGNvbnN0IHBhdHRlcm4yT2YzOiBTY3JpcHRQYXR0ZXJuRWxlbWVudFtdID0gWydPUF8yJywgJzpwdWJrZXknLCAnOnB1YmtleScsICc6cHVia2V5JywgJ09QXzMnLCAnT1BfQ0hFQ0tNVUxUSVNJRyddO1xuXG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHRTb21lKGRlY1NjcmlwdCwgW1xuICAgIC8qIGZ1bGwtc2lnbmVkLCBubyBwbGFjZWhvbGRlciBzaWduYXR1cmUgKi9cbiAgICBbJ09QXzAnLCAnOnNpZ25hdHVyZScsICc6c2lnbmF0dXJlJywgeyAnOnNjcmlwdCc6IHBhdHRlcm4yT2YzIH1dLFxuICAgIC8qIGhhbGYtc2lnbmVkLCBwbGFjZWhvbGRlciBzaWduYXR1cmVzICovXG4gICAgWydPUF8wJywgJzpzaWduYXR1cmUnLCAnOnNpZ25hdHVyZScsICc6c2lnbmF0dXJlJywgeyAnOnNjcmlwdCc6IHBhdHRlcm4yT2YzIH1dLFxuICBdKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIGNvbnN0IFtyZWRlZW1TY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcblxuICBpZiAoIWlzVHJpcGxlKHJlZGVlbVNjcmlwdC5tYXRjaFsnOnB1YmtleSddKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwdWJrZXkgY291bnRgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZSxcbiAgICBwdWJsaWNLZXlzOiByZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSxcbiAgICBwdWJTY3JpcHQ6IHJlZGVlbVNjcmlwdC5idWZmZXIsXG4gICAgc2lnbmF0dXJlczogbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zWydzaWduYXR1cmVzJ10sXG4gICAgcmVkZWVtU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIHdpdG5lc3NTY3JpcHQ6IHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8IHNjcmlwdFR5cGUgPT09ICdwMndzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5jb25zdCBwYXJzZVAyc2gyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRQMm1zPiA9IChwKSA9PiB7XG4gIGlmICghaXNMZWdhY3kocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIGxlZ2FjeSBpbnB1dGApO1xuICB9XG4gIHJldHVybiBwYXJzZVAybXMocC5zY3JpcHQsICdwMnNoJyk7XG59O1xuXG5jb25zdCBwYXJzZVAyc2hQMndzaDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXM+ID0gKHApID0+IHtcbiAgaWYgKCFpc1dyYXBwZWRTZWd3aXQocCkpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoRXJyb3IoYGV4cGVjdGVkIHdyYXBwZWQgc2Vnd2l0IGlucHV0YCk7XG4gIH1cbiAgcmV0dXJuIHsgLi4ucGFyc2VQMm1zKHAud2l0bmVzcywgJ3Ayc2hQMndzaCcpLCByZWRlZW1TY3JpcHQ6IHAuc2NyaXB0WzBdIGFzIEJ1ZmZlciB9O1xufTtcblxuY29uc3QgcGFyc2VQMndzaDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXM+ID0gKHApID0+IHtcbiAgaWYgKCFpc05hdGl2ZVNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbmF0aXZlIHNlZ3dpdGApO1xuICB9XG4gIHJldHVybiBwYXJzZVAybXMocC53aXRuZXNzLCAncDJ3c2gnKTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdEtleVBhdGgyT2YzOiBJbnB1dFBhcnNlcjxQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290S2V5UGF0aD4gPSAocCkgPT4ge1xuICBpZiAoIWlzTmF0aXZlU2Vnd2l0KHApKSB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaEVycm9yKGBleHBlY3RlZCBuYXRpdmUgc2Vnd2l0YCk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChwLndpdG5lc3MsIFsnOnNpZ25hdHVyZSddKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuICBjb25zdCBzaWduYXR1cmVzID0gbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBbQnVmZmVyXTtcbiAgaWYgKGlzUGxhY2Vob2xkZXJTaWduYXR1cmUoc2lnbmF0dXJlc1swXSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdGFwcm9vdCBrZXkgcGF0aCBzaWduYXR1cmVgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJyxcbiAgICBzaWduYXR1cmVzLFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VUYXByb290U2NyaXB0UGF0aDJPZjM6IElucHV0UGFyc2VyPFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Q+ID0gKHApID0+IHtcbiAgaWYgKCFpc05hdGl2ZVNlZ3dpdChwKSkge1xuICAgIHJldHVybiBuZXcgTWF0Y2hFcnJvcihgZXhwZWN0ZWQgbmF0aXZlIHNlZ3dpdGApO1xuICB9XG4gIC8vIGFzc3VtZXMgbm8gYW5uZXhcbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChwLndpdG5lc3MsIFtcbiAgICAnOnNpZ25hdHVyZScsXG4gICAgJzpzaWduYXR1cmUnLFxuICAgIHsgJzpzY3JpcHQnOiBbJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUdWRVJJRlknLCAnOnB1YmtleS14b25seScsICdPUF9DSEVDS1NJRyddIH0sXG4gICAgJzpjb250cm9sLWJsb2NrJyxcbiAgXSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgY29uc3QgW2NvbnRyb2xCbG9ja10gPSBtYXRjaFsnOmNvbnRyb2wtYmxvY2snXTtcbiAgY29uc3Qgc2NyaXB0UGF0aExldmVsID0gY2FsY3VsYXRlU2NyaXB0UGF0aExldmVsKGNvbnRyb2xCbG9jayk7XG5cbiAgY29uc3QgbGVhZlZlcnNpb24gPSBnZXRMZWFmVmVyc2lvbihjb250cm9sQmxvY2spO1xuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnLFxuICAgIHB1YlNjcmlwdDogbWF0Y2hbJzpzY3JpcHQnXVswXS5idWZmZXIsXG4gICAgcHVibGljS2V5czogbWF0Y2hbJzpzY3JpcHQnXVswXS5tYXRjaFsnOnB1YmtleS14b25seSddIGFzIFtCdWZmZXIsIEJ1ZmZlcl0sXG4gICAgc2lnbmF0dXJlczogbWF0Y2hbJzpzaWduYXR1cmUnXSBhcyBbQnVmZmVyLCBCdWZmZXJdLFxuICAgIGNvbnRyb2xCbG9jayxcbiAgICBzY3JpcHRQYXRoTGV2ZWwsXG4gICAgbGVhZlZlcnNpb24sXG4gIH07XG59O1xuXG4vKipcbiAqIFBhcnNlIGEgdHJhbnNhY3Rpb24ncyBzaWduYXR1cmUgc2NyaXB0IHRvIG9idGFpbiBwdWJsaWMga2V5cywgc2lnbmF0dXJlcywgdGhlIHNpZyBzY3JpcHQsXG4gKiBhbmQgb3RoZXIgcHJvcGVydGllcy5cbiAqXG4gKiBPbmx5IHN1cHBvcnRzIHNjcmlwdCB0eXBlcyB1c2VkIGluIEJpdEdvIHRyYW5zYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEByZXR1cm5zIFBhcnNlZFNpZ25hdHVyZVNjcmlwdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTY3JpcHQoXG4gIGlucHV0OiBUeElucHV0XG4pOiBQYXJzZWRTaWduYXR1cmVTY3JpcHRQMnNoUDJwayB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFAybXMgfCBQYXJzZWRTaWduYXR1cmVTY3JpcHRUYXByb290IHtcbiAgY29uc3QgZGVjU2NyaXB0ID0gYnNjcmlwdC5kZWNvbXBpbGUoaW5wdXQuc2NyaXB0KTtcbiAgY29uc3QgcGFyc2VycyA9IFtcbiAgICBwYXJzZVAyc2gyT2YzLFxuICAgIHBhcnNlUDJzaFAyd3NoMk9mMyxcbiAgICBwYXJzZVAyd3NoMk9mMyxcbiAgICBwYXJzZVRhcHJvb3RLZXlQYXRoMk9mMyxcbiAgICBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoMk9mMyxcbiAgICBwYXJzZVAyc2hQMnBrLFxuICBdIGFzIGNvbnN0O1xuICBmb3IgKGNvbnN0IGYgb2YgcGFyc2Vycykge1xuICAgIGNvbnN0IHBhcnNlZCA9IGYoe1xuICAgICAgc2NyaXB0OiBkZWNTY3JpcHQ/Lmxlbmd0aCA9PT0gMCA/IG51bGwgOiBkZWNTY3JpcHQsXG4gICAgICB3aXRuZXNzOiBpbnB1dC53aXRuZXNzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBpbnB1dC53aXRuZXNzLFxuICAgIH0pO1xuICAgIGlmIChwYXJzZWQgaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBwYXJzZSBpbnB1dGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzKGlucHV0OiBUeElucHV0KTogUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Qge1xuICBjb25zdCByZXN1bHQgPSBwYXJzZVNpZ25hdHVyZVNjcmlwdChpbnB1dCk7XG5cbiAgaWYgKFxuICAgICFpc1NjcmlwdFR5cGUyT2YzKHJlc3VsdC5zY3JpcHRUeXBlKSAmJlxuICAgIHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiZcbiAgICByZXN1bHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzY3JpcHQgdHlwZWApO1xuICB9XG5cbiAgaWYgKCFyZXN1bHQuc2lnbmF0dXJlcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbWlzc2luZyBzaWduYXR1cmVzYCk7XG4gIH1cbiAgaWYgKFxuICAgIHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiZcbiAgICByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDMgJiZcbiAgICAocmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAyIHx8IHJlc3VsdC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBwdWJrZXkgY291bnRgKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgYXMgUGFyc2VkU2lnbmF0dXJlU2NyaXB0UDJtcyB8IFBhcnNlZFNpZ25hdHVyZVNjcmlwdFRhcHJvb3Q7XG59XG5cbmNvbnN0IHBhcnNlUDJzaFAycGtQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRQMnNoUDJwaz4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChzY3JpcHRUeXBlICE9PSAncDJzaFAycGsnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjcmlwdCB0eXBlJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChbcHViU2NyaXB0XSwgW3sgJzpzY3JpcHQnOiBbJzpwdWJrZXknLCAnT1BfQ0hFQ0tTSUcnXSB9XSk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbiAgY29uc3QgW3NjcmlwdF0gPSBtYXRjaFsnOnNjcmlwdCddO1xuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHVibGljS2V5czogc2NyaXB0Lm1hdGNoWyc6cHVia2V5J10gYXMgW0J1ZmZlcl0sXG4gICAgcHViU2NyaXB0OiBwdWJTY3JpcHQsXG4gICAgcmVkZWVtU2NyaXB0OiBwdWJTY3JpcHQsXG4gIH07XG59O1xuXG5jb25zdCBwYXJzZVAybXNQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRQMm1zPiA9IChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpID0+IHtcbiAgaWYgKHNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyB8fCBzY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgfHwgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoXG4gICAgW3B1YlNjcmlwdF0sXG4gICAgW3sgJzpzY3JpcHQnOiBbJ09QXzInLCAnOnB1YmtleScsICc6cHVia2V5JywgJzpwdWJrZXknLCAnT1BfMycsICdPUF9DSEVDS01VTFRJU0lHJ10gfV1cbiAgKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIGNvbnN0IFtyZWRlZW1TY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcblxuICBpZiAoIWlzVHJpcGxlKHJlZGVlbVNjcmlwdC5tYXRjaFsnOnB1YmtleSddKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwdWJrZXkgY291bnQnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2NyaXB0VHlwZSxcbiAgICBwdWJsaWNLZXlzOiByZWRlZW1TY3JpcHQubWF0Y2hbJzpwdWJrZXknXSxcbiAgICBwdWJTY3JpcHQ6IHJlZGVlbVNjcmlwdC5idWZmZXIsXG4gICAgcmVkZWVtU2NyaXB0OiBzY3JpcHRUeXBlID09PSAncDJzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIHdpdG5lc3NTY3JpcHQ6IHNjcmlwdFR5cGUgPT09ICdwMnNoUDJ3c2gnIHx8IHNjcmlwdFR5cGUgPT09ICdwMndzaCcgPyByZWRlZW1TY3JpcHQuYnVmZmVyIDogdW5kZWZpbmVkLFxuICB9O1xufTtcblxuY29uc3QgcGFyc2VUYXByb290S2V5UGF0aFB1YlNjcmlwdDogUHViU2NyaXB0UGFyc2VyPFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoPiA9IChwdWJTY3JpcHQsIHNjcmlwdFR5cGUpID0+IHtcbiAgaWYgKFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJyB8fFxuICAgIHNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjcmlwdCB0eXBlJyk7XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtYXRjaFNjcmlwdChbcHViU2NyaXB0XSwgW3sgJzpzY3JpcHQnOiBbJ09QXzEnLCAnOnB1YmtleS14b25seSddIH1dKTtcbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgTWF0Y2hFcnJvcikge1xuICAgIHJldHVybiBtYXRjaDtcbiAgfVxuXG4gIGNvbnN0IFtzY3JpcHRdID0gbWF0Y2hbJzpzY3JpcHQnXTtcblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJyxcbiAgICBwdWJsaWNLZXlzOiBzY3JpcHQubWF0Y2hbJzpwdWJrZXkteG9ubHknXSBhcyBbQnVmZmVyXSxcbiAgICBwdWJTY3JpcHQ6IHB1YlNjcmlwdCxcbiAgfTtcbn07XG5cbmNvbnN0IHBhcnNlVGFwcm9vdFNjcmlwdFBhdGhQdWJTY3JpcHQ6IFB1YlNjcmlwdFBhcnNlcjxQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aD4gPSAocHViU2NyaXB0LCBzY3JpcHRUeXBlKSA9PiB7XG4gIGlmIChcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJ3c2gnIHx8XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgfHxcbiAgICBzY3JpcHRUeXBlID09PSAncDJzaFAycGsnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzY3JpcHQgdHlwZScpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gbWF0Y2hTY3JpcHQoXG4gICAgW3B1YlNjcmlwdF0sXG4gICAgW3sgJzpzY3JpcHQnOiBbJzpwdWJrZXkteG9ubHknLCAnT1BfQ0hFQ0tTSUdWRVJJRlknLCAnOnB1YmtleS14b25seScsICdPUF9DSEVDS1NJRyddIH1dXG4gICk7XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIE1hdGNoRXJyb3IpIHtcbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdFR5cGUsXG4gICAgcHViU2NyaXB0OiBtYXRjaFsnOnNjcmlwdCddWzBdLmJ1ZmZlcixcbiAgICBwdWJsaWNLZXlzOiBtYXRjaFsnOnNjcmlwdCddWzBdLm1hdGNoWyc6cHVia2V5LXhvbmx5J10gYXMgW0J1ZmZlciwgQnVmZmVyXSxcbiAgfTtcbn07XG5cbi8qKlxuICogQHJldHVybiBwdWJTY3JpcHQgKHNjcmlwdFB1YktleS9yZWRlZW1TY3JpcHQvd2l0bmVzc1NjcmlwdCkgaXMgcGFyc2VkLlxuICogUDJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHJlZGVlbVNjcmlwdCksIHJlZGVlbVNjcmlwdCwgcHVibGljIGtleXNcbiAqIFBXMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAod2l0bmVzc1NjcmlwdCksIHdpdG5lc3NTY3JpcHQsIHB1YmxpYyBrZXlzLlxuICogUDJTSC1QVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIHRhcHJvb3RTY3JpcHRQYXRoU3BlbmQgKFAyVFIgYW5kIFAyVFJNVUlTRzIgc2NyaXB0IHBhdGgpID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCwgcHViIGtleXMuXG4gKiB0YXByb290S2V5UGF0aFNwZW5kIChQMlRSTVVJU0cyIGtleSBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKDM0LWJ5dGUgb3V0cHV0IHNjcmlwdCksIHB1YiBrZXkgKHRhcE91dHB1dEtleSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290S2V5UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnXG4pOiBQYXJzZWRQdWJTY3JpcHRUYXByb290U2NyaXB0UGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdDJPZjMoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0Mk9mMyhcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiBQYXJzZWRTY3JpcHRUeXBlMk9mM1xuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3Q7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQyT2YzKFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGUyT2YzXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zIHwgUGFyc2VkUHViU2NyaXB0VGFwcm9vdCB7XG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4gICAgICA/IHBhcnNlVGFwcm9vdEtleVBhdGhQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpXG4gICAgICA6IHNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuICAgICAgPyBwYXJzZVRhcHJvb3RTY3JpcHRQYXRoUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKVxuICAgICAgOiBwYXJzZVAybXNQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpO1xuXG4gIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcbiAgfVxuXG4gIGlmIChcbiAgICAocmVzdWx0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDEpIHx8XG4gICAgKHJlc3VsdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgJiYgcmVzdWx0LnB1YmxpY0tleXMubGVuZ3RoICE9PSAyKSB8fFxuICAgIChpc1NjcmlwdFR5cGUyT2YzKHJlc3VsdC5zY3JpcHRUeXBlKSAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDMpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBwdWJrZXkgY291bnQnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHJldHVybiBwdWJTY3JpcHQgKHNjcmlwdFB1YktleS9yZWRlZW1TY3JpcHQvd2l0bmVzc1NjcmlwdCkgaXMgcGFyc2VkLlxuICogUDJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHJlZGVlbVNjcmlwdCksIHJlZGVlbVNjcmlwdCwgcHVibGljIGtleXNcbiAqIFBXMlNIID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCAod2l0bmVzc1NjcmlwdCksIHdpdG5lc3NTY3JpcHQsIHB1YmxpYyBrZXlzLlxuICogUDJTSC1QVzJTSCA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKHdpdG5lc3NTY3JpcHQpLCB3aXRuZXNzU2NyaXB0LCBwdWJsaWMga2V5cy5cbiAqIHRhcHJvb3RTY3JpcHRQYXRoU3BlbmQgKFAyVFIgYW5kIFAyVFJNVUlTRzIgc2NyaXB0IHBhdGgpID0+IHNjcmlwdFR5cGUsIHB1YlNjcmlwdCwgcHViIGtleXMuXG4gKiB0YXByb290S2V5UGF0aFNwZW5kIChQMlRSTVVJU0cyIGtleSBwYXRoKSA9PiBzY3JpcHRUeXBlLCBwdWJTY3JpcHQgKDM0LWJ5dGUgb3V0cHV0IHNjcmlwdCksIHB1YiBrZXkgKHRhcE91dHB1dEtleSkuXG4gKiBQMlNILVAyUEsgPT4gc2NyaXB0VHlwZSwgcHViU2NyaXB0LCBwdWIga2V5LCByZWRlZW1TY3JpcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVB1YlNjcmlwdChcbiAgaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LFxuICBzY3JpcHRUeXBlOiAndGFwcm9vdEtleVBhdGhTcGVuZCdcbik6IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3RLZXlQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuKTogUGFyc2VkUHViU2NyaXB0VGFwcm9vdFNjcmlwdFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoaW5wdXRQdWJTY3JpcHQ6IElucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlOiAncDJzaFAycGsnKTogUGFyc2VkUHViU2NyaXB0UDJzaFAycGs7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnXG4pOiBQYXJzZWRQdWJTY3JpcHRQMm1zO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHViU2NyaXB0KFxuICBpbnB1dFB1YlNjcmlwdDogSW5wdXRQdWJTY3JpcHQsXG4gIHNjcmlwdFR5cGU6IFBhcnNlZFNjcmlwdFR5cGVcbik6IFBhcnNlZFB1YlNjcmlwdFAybXMgfCBQYXJzZWRQdWJTY3JpcHRUYXByb290IHwgUGFyc2VkUHViU2NyaXB0UDJzaFAycGs7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQdWJTY3JpcHQoXG4gIGlucHV0UHViU2NyaXB0OiBJbnB1dFB1YlNjcmlwdCxcbiAgc2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZVxuKTogUGFyc2VkUHViU2NyaXB0UDJtcyB8IFBhcnNlZFB1YlNjcmlwdFRhcHJvb3QgfCBQYXJzZWRQdWJTY3JpcHRQMnNoUDJwayB7XG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJ1xuICAgICAgPyBwYXJzZVAyc2hQMnBrUHViU2NyaXB0KGlucHV0UHViU2NyaXB0LCBzY3JpcHRUeXBlKVxuICAgICAgOiBwYXJzZVB1YlNjcmlwdDJPZjMoaW5wdXRQdWJTY3JpcHQsIHNjcmlwdFR5cGUpO1xuXG4gIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBNYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcbiAgfVxuXG4gIGlmIChyZXN1bHQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJyAmJiByZXN1bHQucHVibGljS2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgcHVia2V5IGNvdW50Jyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhaW5BbmRJbmRleEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IHsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9IHtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggPD0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwYXRoIFwiJHtwYXRofVwiYCk7XG4gIH1cbiAgY29uc3QgY2hhaW4gPSBOdW1iZXIocGFydHNbcGFydHMubGVuZ3RoIC0gMl0pO1xuICBjb25zdCBpbmRleCA9IE51bWJlcihwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSk7XG4gIGlmIChpc05hTihjaGFpbikgfHwgaXNOYU4oaW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgY2hhaW4gYW5kIGluZGV4IGludG8gbnVtYmVycyBmcm9tIHBhdGggJHtwYXRofWApO1xuICB9XG4gIGlmIChjaGFpbiA8IDAgfHwgaW5kZXggPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjaGFpbiBhbmQgaW5kZXggbXVzdCBiZSBub24tbmVnYXRpdmVgKTtcbiAgfVxuXG4gIHJldHVybiB7IGNoYWluLCBpbmRleCB9O1xufVxuIl19
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { PsbtInputUpdate } from 'bip174/src/lib/interfaces';
3
2
  import { TxOutput } from '../..';
4
3
  import { UtxoTransaction } from '../UtxoTransaction';
@@ -1 +1 @@
1
- {"version":3,"file":"fromHalfSigned.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/psbt/fromHalfSigned.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAc,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAiB,QAAQ,EAAiC,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASrD,wBAAgB,cAAc,CAC5B,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,EAC3B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,GACnD,eAAe,CA+DjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,eAAe,EAAE,CAOnG"}
1
+ {"version":3,"file":"fromHalfSigned.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/psbt/fromHalfSigned.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAc,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAiB,QAAQ,EAAiC,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASrD,wBAAgB,cAAc,CAC5B,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,EAC3B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,GACnD,eAAe,CA+DjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,eAAe,EAAE,CAOnG"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unsign = exports.getInputUpdate = void 0;
3
+ exports.getInputUpdate = getInputUpdate;
4
+ exports.unsign = unsign;
4
5
  const assert = require("assert");
5
6
  const __1 = require("../..");
6
7
  const parseInput_1 = require("../parseInput");
@@ -15,11 +16,11 @@ function getInputUpdate(tx, vin, prevOuts) {
15
16
  if (script.length === 0 && witness.length === 0) {
16
17
  return nonWitnessUtxo ? { nonWitnessUtxo } : {};
17
18
  }
18
- const parsedInput = parseInput_1.parseSignatureScript(tx.ins[vin]);
19
+ const parsedInput = (0, parseInput_1.parseSignatureScript)(tx.ins[vin]);
19
20
  assert.ok(parsedInput.scriptType !== 'taprootKeyPathSpend');
20
21
  function getPartialSigs() {
21
22
  assert.ok(parsedInput.scriptType !== 'taprootKeyPathSpend');
22
- return signature_1.getSignaturesWithPublicKeys(tx, vin, prevOuts, parsedInput.publicKeys).flatMap((signature, i) => signature
23
+ return (0, signature_1.getSignaturesWithPublicKeys)(tx, vin, prevOuts, parsedInput.publicKeys).flatMap((signature, i) => signature
23
24
  ? [
24
25
  {
25
26
  pubkey: parsedInput.publicKeys[i],
@@ -32,9 +33,9 @@ function getInputUpdate(tx, vin, prevOuts) {
32
33
  // with the previous transaction. Therefore, we can treat Zcash non-segwit transactions as Bitcoin
33
34
  // segwit transactions
34
35
  if (parsedInput.scriptType !== 'taprootScriptPathSpend' &&
35
- !outputScripts_1.hasWitnessData(parsedInput.scriptType) &&
36
+ !(0, outputScripts_1.hasWitnessData)(parsedInput.scriptType) &&
36
37
  !nonWitnessUtxo &&
37
- __1.getMainnet(tx.network) !== __1.networks.zcash) {
38
+ (0, __1.getMainnet)(tx.network) !== __1.networks.zcash) {
38
39
  throw new Error(`scriptType ${parsedInput.scriptType} requires prevTx Buffer`);
39
40
  }
40
41
  switch (parsedInput.scriptType) {
@@ -66,7 +67,6 @@ function getInputUpdate(tx, vin, prevOuts) {
66
67
  };
67
68
  }
68
69
  }
69
- exports.getInputUpdate = getInputUpdate;
70
70
  /**
71
71
  * Takes a partially signed transaction and removes the scripts and signatures.
72
72
  *
@@ -90,5 +90,4 @@ function unsign(tx, prevOuts) {
90
90
  return update;
91
91
  });
92
92
  }
93
- exports.unsign = unsign;
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUhhbGZTaWduZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vcHNidC9mcm9tSGFsZlNpZ25lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBaUM7QUFFakMsNkJBQStFO0FBRS9FLDhDQUFxRDtBQUNyRCw0Q0FBMkQ7QUFDM0Qsb0RBQWtEO0FBRWxELFNBQVMsYUFBYSxDQUFvQyxDQUEwQjtJQUNsRixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFNLENBQUM7QUFDeEYsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FDNUIsRUFBMkIsRUFDM0IsR0FBVyxFQUNYLFFBQW9EO0lBRXBELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDL0MsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNqRDtJQUVELE1BQU0sV0FBVyxHQUFHLGlDQUFvQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEtBQUsscUJBQXFCLENBQUMsQ0FBQztJQUU1RCxTQUFTLGNBQWM7UUFDckIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUM7UUFDNUQsT0FBTyx1Q0FBMkIsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3JHLFNBQVM7WUFDUCxDQUFDLENBQUM7Z0JBQ0U7b0JBQ0UsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxTQUFTO2lCQUNWO2FBQ0Y7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0QsMEdBQTBHO0lBQzFHLGtHQUFrRztJQUNsRyxzQkFBc0I7SUFDdEIsSUFDRSxXQUFXLENBQUMsVUFBVSxLQUFLLHdCQUF3QjtRQUNuRCxDQUFDLDhCQUFjLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN2QyxDQUFDLGNBQWM7UUFDZixjQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFlBQVEsQ0FBQyxLQUFLLEVBQ3pDO1FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLFdBQVcsQ0FBQyxVQUFVLHlCQUF5QixDQUFDLENBQUM7S0FDaEY7SUFFRCxRQUFRLFdBQVcsQ0FBQyxVQUFVLEVBQUU7UUFDOUIsS0FBSyxVQUFVO1lBQ2IsT0FBTztnQkFDTCxjQUFjO2dCQUNkLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUMxRixDQUFDO1FBQ0osS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssV0FBVztZQUNkLE9BQU8sYUFBYSxDQUFDO2dCQUNuQixjQUFjO2dCQUNkLFVBQVUsRUFBRSxjQUFjLEVBQUU7Z0JBQzVCLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTtnQkFDdEMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxhQUFhO2FBQ3pDLENBQUMsQ0FBQztRQUNMLEtBQUssd0JBQXdCO1lBQzNCLE1BQU0sUUFBUSxHQUFHLFdBQU8sQ0FBQyxjQUFjLENBQUMsT0FBTSxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pHLE9BQU87Z0JBQ0wsYUFBYSxFQUFFO29CQUNiO3dCQUNFLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTt3QkFDdEMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxTQUFTO3dCQUM3QixXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVc7cUJBQ3JDO2lCQUNGO2dCQUNELFlBQVksRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQ3BFLENBQUM7S0FDTDtBQUNILENBQUM7QUFuRUQsd0NBbUVDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFnQixNQUFNLENBQUMsRUFBMkIsRUFBRSxRQUE0QjtJQUM5RSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQy9CLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFQRCx3QkFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgUHNidElucHV0VXBkYXRlLCBQYXJ0aWFsU2lnIH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBlY2MgYXMgZWNjTGliLCBUeE91dHB1dCwgdGFwcm9vdCwgZ2V0TWFpbm5ldCwgbmV0d29ya3MgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9VdHhvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgcGFyc2VTaWduYXR1cmVTY3JpcHQgfSBmcm9tICcuLi9wYXJzZUlucHV0JztcbmltcG9ydCB7IGdldFNpZ25hdHVyZXNXaXRoUHVibGljS2V5cyB9IGZyb20gJy4uL3NpZ25hdHVyZSc7XG5pbXBvcnQgeyBoYXNXaXRuZXNzRGF0YSB9IGZyb20gJy4uL291dHB1dFNjcmlwdHMnO1xuXG5mdW5jdGlvbiBvbWl0VW5kZWZpbmVkPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBUIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh2KS5maWx0ZXIoKFtrLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkKSkgYXMgVDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0VXBkYXRlKFxuICB0eDogVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sXG4gIHZpbjogbnVtYmVyLFxuICBwcmV2T3V0czogKFR4T3V0cHV0PGJpZ2ludD4gJiB7IHByZXZUeD86IEJ1ZmZlciB9KVtdXG4pOiBQc2J0SW5wdXRVcGRhdGUge1xuICBjb25zdCBub25XaXRuZXNzVXR4byA9IHByZXZPdXRzW3Zpbl0ucHJldlR4O1xuICBjb25zdCB7IHNjcmlwdCwgd2l0bmVzcyB9ID0gdHguaW5zW3Zpbl07XG4gIGlmIChzY3JpcHQubGVuZ3RoID09PSAwICYmIHdpdG5lc3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5vbldpdG5lc3NVdHhvID8geyBub25XaXRuZXNzVXR4byB9IDoge307XG4gIH1cblxuICBjb25zdCBwYXJzZWRJbnB1dCA9IHBhcnNlU2lnbmF0dXJlU2NyaXB0KHR4Lmluc1t2aW5dKTtcbiAgYXNzZXJ0Lm9rKHBhcnNlZElucHV0LnNjcmlwdFR5cGUgIT09ICd0YXByb290S2V5UGF0aFNwZW5kJyk7XG5cbiAgZnVuY3Rpb24gZ2V0UGFydGlhbFNpZ3MoKTogUGFydGlhbFNpZ1tdIHtcbiAgICBhc3NlcnQub2socGFyc2VkSW5wdXQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKTtcbiAgICByZXR1cm4gZ2V0U2lnbmF0dXJlc1dpdGhQdWJsaWNLZXlzKHR4LCB2aW4sIHByZXZPdXRzLCBwYXJzZWRJbnB1dC5wdWJsaWNLZXlzKS5mbGF0TWFwKChzaWduYXR1cmUsIGkpID0+XG4gICAgICBzaWduYXR1cmVcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHB1YmtleTogcGFyc2VkSW5wdXQucHVibGljS2V5c1tpXSxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW11cbiAgICApO1xuICB9XG4gIC8vIEJlY2F1c2UgWmNhc2ggZGlyZWN0bHkgaGFzaGVzIHRoZSB2YWx1ZSBmb3Igbm9uLXNlZ3dpdCB0cmFuc2FjdGlvbnMsIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGluZGlyZWN0bHlcbiAgLy8gd2l0aCB0aGUgcHJldmlvdXMgdHJhbnNhY3Rpb24uIFRoZXJlZm9yZSwgd2UgY2FuIHRyZWF0IFpjYXNoIG5vbi1zZWd3aXQgdHJhbnNhY3Rpb25zIGFzIEJpdGNvaW5cbiAgLy8gc2Vnd2l0IHRyYW5zYWN0aW9uc1xuICBpZiAoXG4gICAgcGFyc2VkSW5wdXQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnICYmXG4gICAgIWhhc1dpdG5lc3NEYXRhKHBhcnNlZElucHV0LnNjcmlwdFR5cGUpICYmXG4gICAgIW5vbldpdG5lc3NVdHhvICYmXG4gICAgZ2V0TWFpbm5ldCh0eC5uZXR3b3JrKSAhPT0gbmV0d29ya3MuemNhc2hcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzY3JpcHRUeXBlICR7cGFyc2VkSW5wdXQuc2NyaXB0VHlwZX0gcmVxdWlyZXMgcHJldlR4IEJ1ZmZlcmApO1xuICB9XG5cbiAgc3dpdGNoIChwYXJzZWRJbnB1dC5zY3JpcHRUeXBlKSB7XG4gICAgY2FzZSAncDJzaFAycGsnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9uV2l0bmVzc1V0eG8sXG4gICAgICAgIHBhcnRpYWxTaWc6IFt7IHB1YmtleTogcGFyc2VkSW5wdXQucHVibGljS2V5c1swXSwgc2lnbmF0dXJlOiBwYXJzZWRJbnB1dC5zaWduYXR1cmVzWzBdIH1dLFxuICAgICAgfTtcbiAgICBjYXNlICdwMnNoJzpcbiAgICBjYXNlICdwMndzaCc6XG4gICAgY2FzZSAncDJzaFAyd3NoJzpcbiAgICAgIHJldHVybiBvbWl0VW5kZWZpbmVkKHtcbiAgICAgICAgbm9uV2l0bmVzc1V0eG8sXG4gICAgICAgIHBhcnRpYWxTaWc6IGdldFBhcnRpYWxTaWdzKCksXG4gICAgICAgIHJlZGVlbVNjcmlwdDogcGFyc2VkSW5wdXQucmVkZWVtU2NyaXB0LFxuICAgICAgICB3aXRuZXNzU2NyaXB0OiBwYXJzZWRJbnB1dC53aXRuZXNzU2NyaXB0LFxuICAgICAgfSk7XG4gICAgY2FzZSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCc6XG4gICAgICBjb25zdCBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBwYXJzZWRJbnB1dC5jb250cm9sQmxvY2ssIHBhcnNlZElucHV0LnB1YlNjcmlwdCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXBMZWFmU2NyaXB0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29udHJvbEJsb2NrOiBwYXJzZWRJbnB1dC5jb250cm9sQmxvY2ssXG4gICAgICAgICAgICBzY3JpcHQ6IHBhcnNlZElucHV0LnB1YlNjcmlwdCxcbiAgICAgICAgICAgIGxlYWZWZXJzaW9uOiBwYXJzZWRJbnB1dC5sZWFmVmVyc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0YXBTY3JpcHRTaWc6IGdldFBhcnRpYWxTaWdzKCkubWFwKChvYmopID0+ICh7IC4uLm9iaiwgbGVhZkhhc2ggfSkpLFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGEgcGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvbiBhbmQgcmVtb3ZlcyB0aGUgc2NyaXB0cyBhbmQgc2lnbmF0dXJlcy5cbiAqXG4gKiBJbnB1dHMgbXVzdCBiZSBvbmUgb2Y6XG4gKiAgLSBwMnNoUDJwa1xuICogIC0gcDJzaCAyLW9mLTNcbiAqICAtIHAyc2hQMndzaCAyLW9mLTNcbiAqICAtIHAyd3NoIDItb2YtM1xuICogIC0gcDJ0ciBzY3JpcHQgcGF0aCAyLW9mLTJcbiAqXG4gKiBAcGFyYW0gdHggdGhlIHBhcnRpYWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBwcmV2T3V0c1xuICpcbiAqIEByZXR1cm4gdGhlIHJlbW92ZWQgc2NyaXB0cyBhbmQgc2lnbmF0dXJlcywgcmVhZHkgdG8gYmUgYWRkZWQgdG8gYSBQU0JUXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnNpZ24odHg6IFV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+LCBwcmV2T3V0czogVHhPdXRwdXQ8YmlnaW50PltdKTogUHNidElucHV0VXBkYXRlW10ge1xuICByZXR1cm4gdHguaW5zLm1hcCgoaW5wdXQsIHZpbikgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZSA9IGdldElucHV0VXBkYXRlKHR4LCB2aW4sIHByZXZPdXRzKTtcbiAgICBpbnB1dC53aXRuZXNzID0gW107XG4gICAgaW5wdXQuc2NyaXB0ID0gQnVmZmVyLmFsbG9jKDApO1xuICAgIHJldHVybiB1cGRhdGU7XG4gIH0pO1xufVxuIl19
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUhhbGZTaWduZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vcHNidC9mcm9tSGFsZlNpZ25lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLHdDQW1FQztBQWlCRCx3QkFPQztBQXZHRCxpQ0FBaUM7QUFFakMsNkJBQStFO0FBRS9FLDhDQUFxRDtBQUNyRCw0Q0FBMkQ7QUFDM0Qsb0RBQWtEO0FBRWxELFNBQVMsYUFBYSxDQUFvQyxDQUEwQjtJQUNsRixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFNLENBQUM7QUFDeEYsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FDNUIsRUFBMkIsRUFDM0IsR0FBVyxFQUNYLFFBQW9EO0lBRXBELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxPQUFPLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLGlDQUFvQixFQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEtBQUsscUJBQXFCLENBQUMsQ0FBQztJ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ZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBQc2J0SW5wdXRVcGRhdGUsIFBhcnRpYWxTaWcgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGVjYyBhcyBlY2NMaWIsIFR4T3V0cHV0LCB0YXByb290LCBnZXRNYWlubmV0LCBuZXR3b3JrcyB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7IFV0eG9UcmFuc2FjdGlvbiB9IGZyb20gJy4uL1V0eG9UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBwYXJzZVNpZ25hdHVyZVNjcmlwdCB9IGZyb20gJy4uL3BhcnNlSW5wdXQnO1xuaW1wb3J0IHsgZ2V0U2lnbmF0dXJlc1dpdGhQdWJsaWNLZXlzIH0gZnJvbSAnLi4vc2lnbmF0dXJlJztcbmltcG9ydCB7IGhhc1dpdG5lc3NEYXRhIH0gZnJvbSAnLi4vb3V0cHV0U2NyaXB0cyc7XG5cbmZ1bmN0aW9uIG9taXRVbmRlZmluZWQ8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFQge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHYpLmZpbHRlcigoW2ssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQpKSBhcyBUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRVcGRhdGUoXG4gIHR4OiBVdHhvVHJhbnNhY3Rpb248YmlnaW50PixcbiAgdmluOiBudW1iZXIsXG4gIHByZXZPdXRzOiAoVHhPdXRwdXQ8YmlnaW50PiAmIHsgcHJldlR4PzogQnVmZmVyIH0pW11cbik6IFBzYnRJbnB1dFVwZGF0ZSB7XG4gIGNvbnN0IG5vbldpdG5lc3NVdHhvID0gcHJldk91dHNbdmluXS5wcmV2VHg7XG4gIGNvbnN0IHsgc2NyaXB0LCB3aXRuZXNzIH0gPSB0eC5pbnNbdmluXTtcbiAgaWYgKHNjcmlwdC5sZW5ndGggPT09IDAgJiYgd2l0bmVzcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbm9uV2l0bmVzc1V0eG8gPyB7IG5vbldpdG5lc3NVdHhvIH0gOiB7fTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZElucHV0ID0gcGFyc2VTaWduYXR1cmVTY3JpcHQodHguaW5zW3Zpbl0pO1xuICBhc3NlcnQub2socGFyc2VkSW5wdXQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKTtcblxuICBmdW5jdGlvbiBnZXRQYXJ0aWFsU2lncygpOiBQYXJ0aWFsU2lnW10ge1xuICAgIGFzc2VydC5vayhwYXJzZWRJbnB1dC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpO1xuICAgIHJldHVybiBnZXRTaWduYXR1cmVzV2l0aFB1YmxpY0tleXModHgsIHZpbiwgcHJldk91dHMsIHBhcnNlZElucHV0LnB1YmxpY0tleXMpLmZsYXRNYXAoKHNpZ25hdHVyZSwgaSkgPT5cbiAgICAgIHNpZ25hdHVyZVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHVia2V5OiBwYXJzZWRJbnB1dC5wdWJsaWNLZXlzW2ldLFxuICAgICAgICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXVxuICAgICk7XG4gIH1cbiAgLy8gQmVjYXVzZSBaY2FzaCBkaXJlY3RseSBoYXNoZXMgdGhlIHZhbHVlIGZvciBub24tc2Vnd2l0IHRyYW5zYWN0aW9ucywgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgaW5kaXJlY3RseVxuICAvLyB3aXRoIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gVGhlcmVmb3JlLCB3ZSBjYW4gdHJlYXQgWmNhc2ggbm9uLXNlZ3dpdCB0cmFuc2FjdGlvbnMgYXMgQml0Y29pblxuICAvLyBzZWd3aXQgdHJhbnNhY3Rpb25zXG4gIGlmIChcbiAgICBwYXJzZWRJbnB1dC5zY3JpcHRUeXBlICE9PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCcgJiZcbiAgICAhaGFzV2l0bmVzc0RhdGEocGFyc2VkSW5wdXQuc2NyaXB0VHlwZSkgJiZcbiAgICAhbm9uV2l0bmVzc1V0eG8gJiZcbiAgICBnZXRNYWlubmV0KHR4Lm5ldHdvcmspICE9PSBuZXR3b3Jrcy56Y2FzaFxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHNjcmlwdFR5cGUgJHtwYXJzZWRJbnB1dC5zY3JpcHRUeXBlfSByZXF1aXJlcyBwcmV2VHggQnVmZmVyYCk7XG4gIH1cblxuICBzd2l0Y2ggKHBhcnNlZElucHV0LnNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoUDJwayc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub25XaXRuZXNzVXR4byxcbiAgICAgICAgcGFydGlhbFNpZzogW3sgcHVia2V5OiBwYXJzZWRJbnB1dC5wdWJsaWNLZXlzWzBdLCBzaWduYXR1cmU6IHBhcnNlZElucHV0LnNpZ25hdHVyZXNbMF0gfV0sXG4gICAgICB9O1xuICAgIGNhc2UgJ3Ayc2gnOlxuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgcmV0dXJuIG9taXRVbmRlZmluZWQoe1xuICAgICAgICBub25XaXRuZXNzVXR4byxcbiAgICAgICAgcGFydGlhbFNpZzogZ2V0UGFydGlhbFNpZ3MoKSxcbiAgICAgICAgcmVkZWVtU2NyaXB0OiBwYXJzZWRJbnB1dC5yZWRlZW1TY3JpcHQsXG4gICAgICAgIHdpdG5lc3NTY3JpcHQ6IHBhcnNlZElucHV0LndpdG5lc3NTY3JpcHQsXG4gICAgICB9KTtcbiAgICBjYXNlICd0YXByb290U2NyaXB0UGF0aFNwZW5kJzpcbiAgICAgIGNvbnN0IGxlYWZIYXNoID0gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIHBhcnNlZElucHV0LmNvbnRyb2xCbG9jaywgcGFyc2VkSW5wdXQucHViU2NyaXB0KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhcExlYWZTY3JpcHQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250cm9sQmxvY2s6IHBhcnNlZElucHV0LmNvbnRyb2xCbG9jayxcbiAgICAgICAgICAgIHNjcmlwdDogcGFyc2VkSW5wdXQucHViU2NyaXB0LFxuICAgICAgICAgICAgbGVhZlZlcnNpb246IHBhcnNlZElucHV0LmxlYWZWZXJzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRhcFNjcmlwdFNpZzogZ2V0UGFydGlhbFNpZ3MoKS5tYXAoKG9iaikgPT4gKHsgLi4ub2JqLCBsZWFmSGFzaCB9KSksXG4gICAgICB9O1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYSBwYXJ0aWFsbHkgc2lnbmVkIHRyYW5zYWN0aW9uIGFuZCByZW1vdmVzIHRoZSBzY3JpcHRzIGFuZCBzaWduYXR1cmVzLlxuICpcbiAqIElucHV0cyBtdXN0IGJlIG9uZSBvZjpcbiAqICAtIHAyc2hQMnBrXG4gKiAgLSBwMnNoIDItb2YtM1xuICogIC0gcDJzaFAyd3NoIDItb2YtM1xuICogIC0gcDJ3c2ggMi1vZi0zXG4gKiAgLSBwMnRyIHNjcmlwdCBwYXRoIDItb2YtMlxuICpcbiAqIEBwYXJhbSB0eCB0aGUgcGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvblxuICogQHBhcmFtIHByZXZPdXRzXG4gKlxuICogQHJldHVybiB0aGUgcmVtb3ZlZCBzY3JpcHRzIGFuZCBzaWduYXR1cmVzLCByZWFkeSB0byBiZSBhZGRlZCB0byBhIFBTQlRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuc2lnbih0eDogVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sIHByZXZPdXRzOiBUeE91dHB1dDxiaWdpbnQ+W10pOiBQc2J0SW5wdXRVcGRhdGVbXSB7XG4gIHJldHVybiB0eC5pbnMubWFwKChpbnB1dCwgdmluKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlID0gZ2V0SW5wdXRVcGRhdGUodHgsIHZpbiwgcHJldk91dHMpO1xuICAgIGlucHV0LndpdG5lc3MgPSBbXTtcbiAgICBpbnB1dC5zY3JpcHQgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgcmV0dXJuIHVwZGF0ZTtcbiAgfSk7XG59XG4iXX0=
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  export declare function isP2wsh(scriptPubkey: Buffer, redeemScript?: Buffer): boolean;
3
2
  export declare function isP2wpkh(scriptPubkey: Buffer, redeemScript?: Buffer): boolean;
4
3
  export declare function isTaproot(scriptPubkey: Buffer): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"scriptTypes.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/psbt/scriptTypes.ts"],"names":[],"mappings":";AAEA,wBAAgB,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAG5E;AAED,wBAAgB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAG7E;AAED,wBAAgB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAE7E"}
1
+ {"version":3,"file":"scriptTypes.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/psbt/scriptTypes.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAG5E;AAED,wBAAgB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAG7E;AAED,wBAAgB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAE7E"}
@@ -1,23 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isSegwit = exports.isTaproot = exports.isP2wpkh = exports.isP2wsh = void 0;
3
+ exports.isP2wsh = isP2wsh;
4
+ exports.isP2wpkh = isP2wpkh;
5
+ exports.isTaproot = isTaproot;
6
+ exports.isSegwit = isSegwit;
4
7
  const opcodes = require("bitcoin-ops");
5
8
  function isP2wsh(scriptPubkey, redeemScript) {
6
- const witnessProgramCandidate = redeemScript !== null && redeemScript !== void 0 ? redeemScript : scriptPubkey;
9
+ const witnessProgramCandidate = redeemScript ?? scriptPubkey;
7
10
  return witnessProgramCandidate[0] === opcodes.OP_0 && witnessProgramCandidate.length === 34;
8
11
  }
9
- exports.isP2wsh = isP2wsh;
10
12
  function isP2wpkh(scriptPubkey, redeemScript) {
11
- const witnessProgramCandidate = redeemScript !== null && redeemScript !== void 0 ? redeemScript : scriptPubkey;
13
+ const witnessProgramCandidate = redeemScript ?? scriptPubkey;
12
14
  return witnessProgramCandidate[0] === opcodes.OP_0 && witnessProgramCandidate.length === 22;
13
15
  }
14
- exports.isP2wpkh = isP2wpkh;
15
16
  function isTaproot(scriptPubkey) {
16
17
  return scriptPubkey[0] === opcodes.OP_1 && scriptPubkey.length === 34;
17
18
  }
18
- exports.isTaproot = isTaproot;
19
19
  function isSegwit(scriptPubkey, redeemScript) {
20
20
  return isTaproot(scriptPubkey) || isP2wsh(scriptPubkey, redeemScript) || isP2wpkh(scriptPubkey, redeemScript);
21
21
  }
22
- exports.isSegwit = isSegwit;
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0VHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vcHNidC9zY3JpcHRUeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBdUM7QUFFdkMsU0FBZ0IsT0FBTyxDQUFDLFlBQW9CLEVBQUUsWUFBcUI7SUFDakUsTUFBTSx1QkFBdUIsR0FBRyxZQUFZLGFBQVosWUFBWSxjQUFaLFlBQVksR0FBSSxZQUFZLENBQUM7SUFDN0QsT0FBTyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLHVCQUF1QixDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDOUYsQ0FBQztBQUhELDBCQUdDO0FBRUQsU0FBZ0IsUUFBUSxDQUFDLFlBQW9CLEVBQUUsWUFBcUI7SUFDbEUsTUFBTSx1QkFBdUIsR0FBRyxZQUFZLGFBQVosWUFBWSxjQUFaLFlBQVksR0FBSSxZQUFZLENBQUM7SUFDN0QsT0FBTyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLHVCQUF1QixDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDOUYsQ0FBQztBQUhELDRCQUdDO0FBRUQsU0FBZ0IsU0FBUyxDQUFDLFlBQW9CO0lBQzVDLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUZELDhCQUVDO0FBRUQsU0FBZ0IsUUFBUSxDQUFDLFlBQW9CLEVBQUUsWUFBcUI7SUFDbEUsT0FBTyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2hILENBQUM7QUFGRCw0QkFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9wY29kZXMgZnJvbSAnYml0Y29pbi1vcHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQMndzaChzY3JpcHRQdWJrZXk6IEJ1ZmZlciwgcmVkZWVtU2NyaXB0PzogQnVmZmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IHdpdG5lc3NQcm9ncmFtQ2FuZGlkYXRlID0gcmVkZWVtU2NyaXB0ID8/IHNjcmlwdFB1YmtleTtcbiAgcmV0dXJuIHdpdG5lc3NQcm9ncmFtQ2FuZGlkYXRlWzBdID09PSBvcGNvZGVzLk9QXzAgJiYgd2l0bmVzc1Byb2dyYW1DYW5kaWRhdGUubGVuZ3RoID09PSAzNDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUDJ3cGtoKHNjcmlwdFB1YmtleTogQnVmZmVyLCByZWRlZW1TY3JpcHQ/OiBCdWZmZXIpOiBib29sZWFuIHtcbiAgY29uc3Qgd2l0bmVzc1Byb2dyYW1DYW5kaWRhdGUgPSByZWRlZW1TY3JpcHQgPz8gc2NyaXB0UHVia2V5O1xuICByZXR1cm4gd2l0bmVzc1Byb2dyYW1DYW5kaWRhdGVbMF0gPT09IG9wY29kZXMuT1BfMCAmJiB3aXRuZXNzUHJvZ3JhbUNhbmRpZGF0ZS5sZW5ndGggPT09IDIyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYXByb290KHNjcmlwdFB1YmtleTogQnVmZmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBzY3JpcHRQdWJrZXlbMF0gPT09IG9wY29kZXMuT1BfMSAmJiBzY3JpcHRQdWJrZXkubGVuZ3RoID09PSAzNDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2Vnd2l0KHNjcmlwdFB1YmtleTogQnVmZmVyLCByZWRlZW1TY3JpcHQ/OiBCdWZmZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVGFwcm9vdChzY3JpcHRQdWJrZXkpIHx8IGlzUDJ3c2goc2NyaXB0UHVia2V5LCByZWRlZW1TY3JpcHQpIHx8IGlzUDJ3cGtoKHNjcmlwdFB1YmtleSwgcmVkZWVtU2NyaXB0KTtcbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0VHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vcHNidC9zY3JpcHRUeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLDBCQUdDO0FBRUQsNEJBR0M7QUFFRCw4QkFFQztBQUVELDRCQUVDO0FBbEJELHVDQUF1QztBQUV2QyxTQUFnQixPQUFPLENBQUMsWUFBb0IsRUFBRSxZQUFxQjtJQUNqRSxNQUFNLHVCQUF1QixHQUFHLFlBQVksSUFBSSxZQUFZLENBQUM7SUFDN0QsT0FBTyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLHVCQUF1QixDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDOUYsQ0FBQztBQUVELFNBQWdCLFFBQVEsQ0FBQyxZQUFvQixFQUFFLFlBQXFCO0lBQ2xFLE1BQU0sdUJBQXVCLEdBQUcsWUFBWSxJQUFJLFlBQVksQ0FBQztJQUM3RCxPQUFPLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksdUJBQXVCLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQztBQUM5RixDQUFDO0FBRUQsU0FBZ0IsU0FBUyxDQUFDLFlBQW9CO0lBQzVDLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQWdCLFFBQVEsQ0FBQyxZQUFvQixFQUFFLFlBQXFCO0lBQ2xFLE9BQU8sU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNoSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3Bjb2RlcyBmcm9tICdiaXRjb2luLW9wcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Ayd3NoKHNjcmlwdFB1YmtleTogQnVmZmVyLCByZWRlZW1TY3JpcHQ/OiBCdWZmZXIpOiBib29sZWFuIHtcbiAgY29uc3Qgd2l0bmVzc1Byb2dyYW1DYW5kaWRhdGUgPSByZWRlZW1TY3JpcHQgPz8gc2NyaXB0UHVia2V5O1xuICByZXR1cm4gd2l0bmVzc1Byb2dyYW1DYW5kaWRhdGVbMF0gPT09IG9wY29kZXMuT1BfMCAmJiB3aXRuZXNzUHJvZ3JhbUNhbmRpZGF0ZS5sZW5ndGggPT09IDM0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQMndwa2goc2NyaXB0UHVia2V5OiBCdWZmZXIsIHJlZGVlbVNjcmlwdD86IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICBjb25zdCB3aXRuZXNzUHJvZ3JhbUNhbmRpZGF0ZSA9IHJlZGVlbVNjcmlwdCA/PyBzY3JpcHRQdWJrZXk7XG4gIHJldHVybiB3aXRuZXNzUHJvZ3JhbUNhbmRpZGF0ZVswXSA9PT0gb3Bjb2Rlcy5PUF8wICYmIHdpdG5lc3NQcm9ncmFtQ2FuZGlkYXRlLmxlbmd0aCA9PT0gMjI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RhcHJvb3Qoc2NyaXB0UHVia2V5OiBCdWZmZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNjcmlwdFB1YmtleVswXSA9PT0gb3Bjb2Rlcy5PUF8xICYmIHNjcmlwdFB1YmtleS5sZW5ndGggPT09IDM0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTZWd3aXQoc2NyaXB0UHVia2V5OiBCdWZmZXIsIHJlZGVlbVNjcmlwdD86IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNUYXByb290KHNjcmlwdFB1YmtleSkgfHwgaXNQMndzaChzY3JpcHRQdWJrZXksIHJlZGVlbVNjcmlwdCkgfHwgaXNQMndwa2goc2NyaXB0UHVia2V5LCByZWRlZW1TY3JpcHQpO1xufVxuIl19
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { BIP32Interface } from 'bip32';
3
2
  import { TxOutput } from 'bitcoinjs-lib';
4
3
  import { UtxoTransaction } from './UtxoTransaction';
@@ -11,7 +10,7 @@ import { Network } from '../networks';
11
10
  * Parameters are conjunctive: if multiple parameters are set, a verification for an individual
12
11
  * signature must satisfy all of them.
13
12
  */
14
- export declare type VerificationSettings = {
13
+ export type VerificationSettings = {
15
14
  /**
16
15
  * The index of the signature to verify. Only iterates over non-empty signatures.
17
16
  */
@@ -24,7 +23,7 @@ export declare type VerificationSettings = {
24
23
  /**
25
24
  * Result for a individual signature verification
26
25
  */
27
- export declare type SignatureVerification = {
26
+ export type SignatureVerification = {
28
27
  /** Set to the public key that signed for the signature */
29
28
  signedBy: Buffer;
30
29
  /** Set to the signature buffer */
@@ -1 +1 @@
1
- {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../../src/bitgo/signature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../../src/bitgo/signature.ts"],"names":[],"mappings":"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"}