@bitgo-beta/abstract-utxo 1.6.1-alpha.455 → 1.6.1-alpha.457

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 (156) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +4 -1
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +14 -11
  4. package/dist/cjs/src/address/fixedScript.d.ts +4 -4
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +13 -11
  7. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  8. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  9. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +4 -2
  10. package/dist/cjs/src/names.d.ts +2 -0
  11. package/dist/cjs/src/names.d.ts.map +1 -1
  12. package/dist/cjs/src/names.js +9 -1
  13. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts +2 -1
  14. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
  15. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +3 -5
  16. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts +2 -1
  17. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -1
  18. package/dist/cjs/src/offlineVault/TransactionExplanation.js +3 -4
  19. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
  20. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
  21. package/dist/cjs/src/offlineVault/descriptor/transaction.js +6 -3
  22. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  23. package/dist/cjs/src/recovery/backupKeyRecovery.js +8 -7
  24. package/dist/cjs/src/recovery/crossChainRecovery.d.ts +3 -2
  25. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  26. package/dist/cjs/src/recovery/crossChainRecovery.js +7 -6
  27. package/dist/cjs/src/recovery/psbt.d.ts +3 -2
  28. package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
  29. package/dist/cjs/src/recovery/psbt.js +5 -4
  30. package/dist/cjs/src/transaction/bip322.d.ts.map +1 -1
  31. package/dist/cjs/src/transaction/bip322.js +26 -11
  32. package/dist/cjs/src/transaction/decode.d.ts +4 -3
  33. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  34. package/dist/cjs/src/transaction/decode.js +8 -5
  35. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  36. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +7 -5
  37. package/dist/cjs/src/transaction/descriptor/parse.d.ts +2 -1
  38. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  39. package/dist/cjs/src/transaction/descriptor/parse.js +14 -14
  40. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +2 -1
  41. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  42. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +4 -4
  43. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
  44. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  45. package/dist/cjs/src/transaction/explainTransaction.js +5 -5
  46. package/dist/cjs/src/transaction/fetchInputs.d.ts +2 -1
  47. package/dist/cjs/src/transaction/fetchInputs.d.ts.map +1 -1
  48. package/dist/cjs/src/transaction/fetchInputs.js +4 -2
  49. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +4 -4
  50. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  51. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +24 -19
  52. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +3 -3
  53. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +6 -4
  54. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  55. package/dist/cjs/src/transaction/fixedScript/replayProtection.js +17 -49
  56. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +4 -2
  57. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  58. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +6 -5
  59. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +2 -1
  60. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  61. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +4 -4
  62. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +2 -2
  63. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts +3 -3
  64. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -1
  65. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.js +6 -39
  66. package/dist/cjs/src/transaction/recipient.d.ts +4 -4
  67. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  68. package/dist/cjs/src/transaction/recipient.js +7 -4
  69. package/dist/cjs/src/transaction/signTransaction.js +2 -2
  70. package/dist/cjs/test/unit/address.js +9 -9
  71. package/dist/cjs/test/unit/bip322.js +319 -3
  72. package/dist/cjs/test/unit/customChangeWallet.js +2 -2
  73. package/dist/cjs/test/unit/prebuildAndSign.js +2 -2
  74. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +6 -7
  75. package/dist/cjs/test/unit/transaction/descriptor/parse.js +2 -2
  76. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +7 -10
  77. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +4 -5
  78. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +3 -2
  79. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +5 -6
  80. package/dist/cjs/test/unit/transaction.js +23 -24
  81. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
  82. package/dist/cjs/test/unit/util/unspents.js +4 -2
  83. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  84. package/dist/esm/abstractUtxoCoin.d.ts +4 -1
  85. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  86. package/dist/esm/abstractUtxoCoin.js +16 -13
  87. package/dist/esm/address/fixedScript.d.ts +4 -4
  88. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  89. package/dist/esm/address/fixedScript.js +13 -11
  90. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  91. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  92. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +4 -2
  93. package/dist/esm/names.d.ts +2 -0
  94. package/dist/esm/names.d.ts.map +1 -1
  95. package/dist/esm/names.js +7 -1
  96. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +2 -1
  97. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -1
  98. package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +3 -5
  99. package/dist/esm/offlineVault/TransactionExplanation.d.ts +2 -1
  100. package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -1
  101. package/dist/esm/offlineVault/TransactionExplanation.js +3 -4
  102. package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
  103. package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
  104. package/dist/esm/offlineVault/descriptor/transaction.js +6 -3
  105. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  106. package/dist/esm/recovery/backupKeyRecovery.js +8 -7
  107. package/dist/esm/recovery/crossChainRecovery.d.ts +3 -2
  108. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  109. package/dist/esm/recovery/crossChainRecovery.js +8 -7
  110. package/dist/esm/recovery/psbt.d.ts +3 -2
  111. package/dist/esm/recovery/psbt.d.ts.map +1 -1
  112. package/dist/esm/recovery/psbt.js +5 -4
  113. package/dist/esm/transaction/bip322.d.ts.map +1 -1
  114. package/dist/esm/transaction/bip322.js +27 -12
  115. package/dist/esm/transaction/decode.d.ts +4 -3
  116. package/dist/esm/transaction/decode.d.ts.map +1 -1
  117. package/dist/esm/transaction/decode.js +8 -5
  118. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  119. package/dist/esm/transaction/descriptor/explainPsbt.js +7 -5
  120. package/dist/esm/transaction/descriptor/parse.d.ts +2 -1
  121. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  122. package/dist/esm/transaction/descriptor/parse.js +14 -14
  123. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +2 -1
  124. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  125. package/dist/esm/transaction/descriptor/verifyTransaction.js +4 -4
  126. package/dist/esm/transaction/explainTransaction.d.ts +2 -1
  127. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  128. package/dist/esm/transaction/explainTransaction.js +5 -5
  129. package/dist/esm/transaction/fetchInputs.d.ts +2 -1
  130. package/dist/esm/transaction/fetchInputs.d.ts.map +1 -1
  131. package/dist/esm/transaction/fetchInputs.js +4 -2
  132. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +4 -4
  133. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  134. package/dist/esm/transaction/fixedScript/explainTransaction.js +24 -19
  135. package/dist/esm/transaction/fixedScript/parseTransaction.js +3 -3
  136. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +6 -4
  137. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  138. package/dist/esm/transaction/fixedScript/replayProtection.js +17 -16
  139. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +4 -2
  140. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  141. package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +6 -5
  142. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +2 -1
  143. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  144. package/dist/esm/transaction/fixedScript/signTransaction.js +4 -4
  145. package/dist/esm/transaction/fixedScript/verifyTransaction.js +2 -2
  146. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +3 -3
  147. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts.map +1 -1
  148. package/dist/esm/transaction/getPayGoVerificationPubkey.js +6 -6
  149. package/dist/esm/transaction/recipient.d.ts +4 -4
  150. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  151. package/dist/esm/transaction/recipient.js +7 -4
  152. package/dist/esm/transaction/signTransaction.js +2 -2
  153. package/package.json +12 -12
  154. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts +0 -3
  155. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts.map +0 -1
  156. package/dist/cjs/test/unit/transaction/fixedScript/util.js +0 -41
@@ -45,7 +45,6 @@ const parseTransaction_1 = require("../../../../src/transaction/fixedScript/pars
45
45
  const util_1 = require("../../util");
46
46
  const fixedScript_1 = require("../../../../src/transaction/fixedScript");
47
47
  const names_1 = require("../../../../src/names");
48
- const util_2 = require("./util");
49
48
  function getTxParamsFromExplanation(explanation, { externalCustomChangeAddress }) {
50
49
  // The external outputs are the ones that are in outputs but not in changeOutputs
51
50
  const changeAddresses = new Set(explanation.changeOutputs.map((o) => o.address));
@@ -112,7 +111,7 @@ function describeParseTransactionWith(acidTest, label, backend, { txParams, exte
112
111
  let explanation;
113
112
  if (txFormat === 'psbt') {
114
113
  if (backend === 'utxolib') {
115
- explanation = (0, fixedScript_1.explainPsbt)(psbt, { pubs: acidTest.rootWalletKeys }, acidTest.network, {
114
+ explanation = (0, fixedScript_1.explainPsbt)(psbt, { pubs: acidTest.rootWalletKeys }, coinName, {
116
115
  strict: true,
117
116
  });
118
117
  }
@@ -132,7 +131,7 @@ function describeParseTransactionWith(acidTest, label, backend, { txParams, exte
132
131
  const pubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58());
133
132
  // Extract change info from PSBT to pass to explainLegacyTx
134
133
  const changeInfo = getChangeInfoFromPsbt(psbt);
135
- explanation = (0, fixedScript_1.explainLegacyTx)(tx, { pubs, changeInfo }, acidTest.network);
134
+ explanation = (0, fixedScript_1.explainLegacyTx)(tx, { pubs, changeInfo }, coinName);
136
135
  }
137
136
  else {
138
137
  throw new Error(`Invalid txFormat: ${txFormat}`);
@@ -284,5 +283,5 @@ function describeTransaction(backend, filter = () => true) {
284
283
  });
285
284
  }
286
285
  describeTransaction('utxolib');
287
- describeTransaction('wasm', (test) => (0, util_2.hasWasmUtxoSupport)(test.network));
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3BhcnNlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUF3QztBQUV4Qyw2Q0FBK0I7QUFDL0IsOERBQWdEO0FBQ2hELG1EQUFrRztBQUNsRyxnREFBcUQ7QUFFckQsK0ZBQTRGO0FBRzVGLHFDQUF5QztBQUN6Qyx5RUFBd0c7QUFLeEcsaURBQW9EO0FBR3BELGlDQUE0QztBQUU1QyxTQUFTLDBCQUEwQixDQUNqQyxXQUFtQyxFQUNuQyxFQUFFLDJCQUEyQixFQUE0QztJQUt6RSxpRkFBaUY7SUFDakYsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLElBQUksZUFBZSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUV0RyxJQUFJLGFBQWlDLENBQUM7SUFDdEMsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO1FBQ2hDLGdEQUFnRDtRQUNoRCxFQUFFO1FBQ0YsMEVBQTBFO1FBQzFFLHNEQUFzRDtRQUN0RCxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsYUFBYSxH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QUFDTCxDQUFDO0FBRUQsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFBLHlCQUFrQixFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IFdhbGxldCwgVmVyaWZpY2F0aW9uT3B0aW9ucywgSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBUcmlwbGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBwYXJzZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3BhcnNlVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgUGFyc2VkVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vdHlwZXMnO1xuaW1wb3J0IHsgVXR4b1dhbGxldCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy93YWxsZXQnO1xuaW1wb3J0IHsgZ2V0VXR4b0NvaW4gfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IGV4cGxhaW5MZWdhY3lUeCwgZXhwbGFpblBzYnQsIGV4cGxhaW5Qc2J0V2FzbSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdCc7XG5pbXBvcnQgdHlwZSB7XG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIENoYW5nZUFkZHJlc3NJbmZvLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IGdldENvaW5OYW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL25hbWVzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uUHJlYnVpbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYWJzdHJhY3RVdHhvQ29pbic7XG5cbmltcG9ydCB7IGhhc1dhc21VdHhvU3VwcG9ydCB9IGZyb20gJy4vdXRpbCc7XG5cbmZ1bmN0aW9uIGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKFxuICBleHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MgfTogeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M6IGJvb2xlYW4gfVxuKToge1xuICByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbiAgY2hhbmdlQWRkcmVzcz86IHN0cmluZztcbn0ge1xuICAvLyBUaGUgZXh0ZXJuYWwgb3V0cHV0cyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgaW4gb3V0cHV0cyBidXQgbm90IGluIGNoYW5nZU91dHB1dHNcbiAgY29uc3QgY2hhbmdlQWRkcmVzc2VzID0gbmV3IFNldChleHBsYW5hdGlvbi5jaGFuZ2VPdXRwdXRzLm1hcCgobykgPT4gby5hZGRyZXNzKSk7XG4gIGxldCBleHRlcm5hbE91dHB1dHMgPSBleHBsYW5hdGlvbi5vdXRwdXRzLmZpbHRlcigobykgPT4gby5hZGRyZXNzICYmICFjaGFuZ2VBZGRyZXNzZXMuaGFzKG8uYWRkcmVzcykpO1xuXG4gIGxldCBjaGFuZ2VBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmIChleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MpIHtcbiAgICAvLyBjb252ZXJ0IGFuIGV4dGVybmFsIG91dHB1dCB0byBhIGNoYW5nZSBvdXRwdXRcbiAgICAvL1xuICAgIC8vIGluIGNvbWJpbmF0aW9uIHdpdGggYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3MsIHRoaXMgYWxsb3dzIGFuIGV4dGVybmFsXG4gICAgLy8gb3V0cHV0IG9uIHRoZSB0cmFuc2FjdGlvbiB3aXRob3V0IGEgc2l6ZSBjb25zdHJhaW50XG4gICAgY29uc3QgZXh0ZXJuYWxPdXRwdXQgPSBleHRlcm5hbE91dHB1dHNbMF07XG4gICAgaWYgKCFleHRlcm5hbE91dHB1dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBleHRlcm5hbCBvdXRwdXQgZm91bmQnKTtcbiAgICB9XG4gICAgY2hhbmdlQWRkcmVzcyA9IGV4dGVybmFsT3V0cHV0LmFkZHJlc3M7XG4gICAgZXh0ZXJuYWxPdXRwdXRzID0gZXh0ZXJuYWxPdXRwdXRzLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZWNpcGllbnRzOiBleHRlcm5hbE91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MhLFxuICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LFxuICAgIH0pKSxcbiAgICBjaGFuZ2VBZGRyZXNzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDaGFuZ2VJbmZvRnJvbVBzYnQocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCk6IENoYW5nZUFkZHJlc3NJbmZvW10gfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmZpbmRJbnRlcm5hbE91dHB1dEluZGljZXMocHNidCkubWFwKChpKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBwc2J0LmRhdGEub3V0cHV0c1tpXTtcbiAgICAgIGNvbnN0IGRlcml2YXRpb25zID0gb3V0cHV0LmJpcDMyRGVyaXZhdGlvbiA/PyBvdXRwdXQudGFwQmlwMzJEZXJpdmF0aW9uID8/IHVuZGVmaW5lZDtcbiAgICAgIGlmICghZGVyaXZhdGlvbnMgfHwgZGVyaXZhdGlvbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgMyBkZXJpdmF0aW9uIHBhdGhzJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXRoID0gZGVyaXZhdGlvbnNbMF0ucGF0aDtcbiAgICAgIGNvbnN0IHsgY2hhaW4sIGluZGV4IH0gPSB1dHhvbGliLmJpdGdvLmdldENoYWluQW5kSW5kZXhGcm9tUGF0aChwYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KHBzYnQudHhPdXRwdXRzW2ldLnNjcmlwdCwgcHNidC5uZXR3b3JrKSxcbiAgICAgICAgY2hhaW4sXG4gICAgICAgIGluZGV4LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5FcnJvck5vTXVsdGlTaWdJbnB1dEZvdW5kKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgoXG4gIGFjaWRUZXN0OiB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0LFxuICBsYWJlbDogc3RyaW5nLFxuICBiYWNrZW5kOiAndXR4b2xpYicgfCAnd2FzbScsXG4gIHtcbiAgICB0eFBhcmFtcyxcbiAgICBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MgPSBmYWxzZSxcbiAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICB0eEZvcm1hdCA9ICdwc2J0JyxcbiAgfToge1xuICAgIHR4UGFyYW1zOlxuICAgICAgfCB7XG4gICAgICAgICAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIHJiZlR4SWRzOiBzdHJpbmdbXTtcbiAgICAgICAgfVxuICAgICAgfCAnaW5mZXJGcm9tRXhwbGFuYXRpb24nO1xuICAgIGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcz86IGJvb2xlYW47XG4gICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IGJpZ2ludDtcbiAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogYmlnaW50O1xuICAgIHR4Rm9ybWF0PzogJ3BzYnQnIHwgJ2xlZ2FjeSc7XG4gIH1cbikge1xuICBkZXNjcmliZShgJHthY2lkVGVzdC5uYW1lfS8ke2xhYmVsfWAsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcmVmUGFyc2VkVHJhbnNhY3Rpb246IFBhcnNlZFRyYW5zYWN0aW9uPGJpZ2ludD47XG4gICAgbGV0IGNvaW46IFJldHVyblR5cGU8dHlwZW9mIGdldFV0eG9Db2luPjtcbiAgICBsZXQgbW9ja1dhbGxldDogc2lub24uU2lub25TdHViYmVkSW5zdGFuY2U8V2FsbGV0PjtcbiAgICBsZXQgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbjogc2lub24uU2lub25TdHViO1xuXG4gICAgYmVmb3JlKCdwcmVwYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29pbk5hbWUgPSBnZXRDb2luTmFtZShhY2lkVGVzdC5uZXR3b3JrKTtcbiAgICAgIGNvaW4gPSBnZXRVdHhvQ29pbihjb2luTmFtZSk7XG5cbiAgICAgIC8vIENyZWF0ZSBQU0JUIGFuZCBleHBsYW5hdGlvblxuICAgICAgY29uc3QgcHNidCA9IGFjaWRUZXN0LmNyZWF0ZVBzYnQoKTtcbiAgICAgIGNvbnN0IHR4ID0gcHNidC5nZXRVbnNpZ25lZFR4KCk7XG4gICAgICBjb25zdCB0eEhhc2ggPSB0eC5nZXRJZCgpO1xuXG4gICAgICBsZXQgZXhwbGFuYXRpb246IFRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICBpZiAoYmFja2VuZCA9PT0gJ3V0eG9saWInKSB7XG4gICAgICAgICAgZXhwbGFuYXRpb24gPSBleHBsYWluUHNidChwc2J0LCB7IHB1YnM6IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzIH0sIGFjaWRUZXN0Lm5ldHdvcmssIHtcbiAgICAgICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChiYWNrZW5kID09PSAnd2FzbScpIHtcbiAgICAgICAgICBjb25zdCB3YXNtUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMoXG4gICAgICAgICAgICBwc2J0LnRvQnVmZmVyKCksXG4gICAgICAgICAgICB1dHhvbGliLmdldE5ldHdvcmtOYW1lKGFjaWRUZXN0Lm5ldHdvcmspIVxuICAgICAgICAgICk7XG4gICAgICAgICAgZXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20oXG4gICAgICAgICAgICB3YXNtUHNidCxcbiAgICAgICAgICAgIGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIHB1YmxpY0tleXM6IFthY2lkVGVzdC5nZXRSZXBsYXlQcm90ZWN0aW9uUHVibGljS2V5KCldLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJhY2tlbmQ6ICR7YmFja2VuZH1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgICAgY29uc3QgcHVicyA9IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgICAgICAgLy8gRXh0cmFjdCBjaGFuZ2UgaW5mbyBmcm9tIFBTQlQgdG8gcGFzcyB0byBleHBsYWluTGVnYWN5VHhcbiAgICAgICAgY29uc3QgY2hhbmdlSW5mbyA9IGdldENoYW5nZUluZm9Gcm9tUHNidChwc2J0KTtcbiAgICAgICAgZXhwbGFuYXRpb24gPSBleHBsYWluTGVnYWN5VHgodHgsIHsgcHVicywgY2hhbmdlSW5mbyB9LCBhY2lkVGVzdC5uZXR3b3JrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eEZvcm1hdDogJHt0eEZvcm1hdH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHR4UGFyYW1zXG4gICAgICBsZXQgcmVzb2x2ZWRUeFBhcmFtcztcbiAgICAgIGlmICh0eFBhcmFtcyA9PT0gJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyB8fCB0eFBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMgPSBnZXRUeFBhcmFtc0Zyb21FeHBsYW5hdGlvbihleHBsYW5hdGlvbiwgeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MgfSk7XG4gICAgICB9IGVsc2UgaWYgKCdyYmZUeElkcycgaW4gdHhQYXJhbXMpIHtcbiAgICAgICAgLy8gUmVwbGFjZSBwbGFjZWhvbGRlciB0eEhhc2ggd2l0aCBhY3R1YWwgY29tcHV0ZWQgdHhIYXNoXG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMgPSB7XG4gICAgICAgICAgcmJmVHhJZHM6IHR4UGFyYW1zLnJiZlR4SWRzLm1hcCgoaGFzaCkgPT4gKGhhc2ggPT09ICdQTEFDRUhPTERFUicgPyB0eEhhc2ggOiBoYXNoKSksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlZFR4UGFyYW1zID0gdHhQYXJhbXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MpIHtcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcy5hbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBtb2NrIHdhbGxldFxuICAgICAgbW9ja1dhbGxldCA9IHNpbm9uLmNyZWF0ZVN0dWJJbnN0YW5jZShXYWxsZXQpO1xuICAgICAgbW9ja1dhbGxldC5pZC5yZXR1cm5zKCd0ZXN0LXdhbGxldC1pZCcpO1xuICAgICAgbW9ja1dhbGxldC5jb2luLnJldHVybnMoY29pbi5nZXRDaGFpbigpKTtcbiAgICAgIG1vY2tXYWxsZXQuY29pblNwZWNpZmljLnJldHVybnModW5kZWZpbmVkKTtcblxuICAgICAgLy8gTW9jayBnZXRUcmFuc2FjdGlvbiBmb3IgUkJGIGNhc2VcbiAgICAgIGlmICgncmJmVHhJZHMnIGluIHJlc29sdmVkVHhQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcmJmVHhQYXJhbXMgPSBnZXRUeFBhcmFtc0Zyb21FeHBsYW5hdGlvbihleHBsYW5hdGlvbiwgeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M6IGZhbHNlIH0pO1xuICAgICAgICBtb2NrV2FsbGV0LmdldFRyYW5zYWN0aW9uLnJlc29sdmVzKHtcbiAgICAgICAgICBvdXRwdXRzOiByYmZUeFBhcmFtcy5yZWNpcGllbnRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgICAgIHZhbHVlU3RyaW5nOiB0eXBlb2Ygci5hbW91bnQgPT09ICdzdHJpbmcnID8gci5hbW91bnQgOiByLmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgICAgYWRkcmVzczogci5hZGRyZXNzLFxuICAgICAgICAgICAgLy8gd2FsbGV0IGZpZWxkIGlzIHVuZGVmaW5lZCBmb3IgZXh0ZXJuYWwgb3V0cHV0cyAobm90IHNlbGYtc2VuZHMpXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gTW9jayB2ZXJpZmljYXRpb24gb3B0aW9ucyB3aXRoIGtleWNoYWlucyB0byBkaXNhYmxlIG5ldHdvcmtpbmdcbiAgICAgIC8vIFVzZSB0aGUgc2FtZSBrZXljaGFpbnMgdGhhdCB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBQU0JUXG4gICAgICBjb25zdCBwdWJzID0gYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uOiBWZXJpZmljYXRpb25PcHRpb25zID0ge1xuICAgICAgICBkaXNhYmxlTmV0d29ya2luZzogdHJ1ZSxcbiAgICAgICAga2V5Y2hhaW5zOiB7XG4gICAgICAgICAgdXNlcjogeyBpZDogJzAnLCBwdWI6IHB1YnNbMF0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgICBiYWNrdXA6IHsgaWQ6ICcxJywgcHViOiBwdWJzWzFdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICAgICAgYml0Z286IHsgaWQ6ICcyJywgcHViOiBwdWJzWzJdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBTdHViIGV4cGxhaW5UcmFuc2FjdGlvbiB0byByZXR1cm4gdGhlIGV4cGxhbmF0aW9uIHdpdGhvdXQgbWFraW5nIG5ldHdvcmsgY2FsbHNcbiAgICAgIHN0dWJFeHBsYWluVHJhbnNhY3Rpb24gPSBzaW5vbi5zdHViKGNvaW4sICdleHBsYWluVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhleHBsYW5hdGlvbik7XG5cbiAgICAgIGxldCB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPGJpZ2ludD47XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHR4SGV4OiBwc2J0LnRvSGV4KCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHR4Rm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgICB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHR4SGV4OiBwc2J0LmdldFVuc2lnbmVkVHgoKS50b0hleCgpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR4Rm9ybWF0OiAke3R4Rm9ybWF0fWApO1xuICAgICAgfVxuXG4gICAgICByZWZQYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHBhcnNlVHJhbnNhY3Rpb24oY29pbiwge1xuICAgICAgICB3YWxsZXQ6IG1vY2tXYWxsZXQgYXMgdW5rbm93biBhcyBVdHhvV2FsbGV0LFxuICAgICAgICB0eFBhcmFtczogcmVzb2x2ZWRUeFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcignY2xlYW51cCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzdHViRXhwbGFpblRyYW5zYWN0aW9uKSB7XG4gICAgICAgIHN0dWJFeHBsYWluVHJhbnNhY3Rpb24ucmVzdG9yZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB0cmFuc2FjdGlvbiB3aXRob3V0IG5ldHdvcmsgY2FsbHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24pO1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucyk7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ub3V0cHV0cyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdmFsaWQga2V5Y2hhaW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy51c2VyKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYmFja3VwKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYml0Z28pO1xuICAgICAgY29uc3QgcHVicyA9IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMudXNlci5wdWIsIHB1YnNbMF0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy5iYWNrdXAucHViLCBwdWJzWzFdKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYml0Z28ucHViLCBwdWJzWzJdKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBvdXRwdXRzIGNsYXNzaWZpZWQgYXMgaW50ZXJuYWwgb3IgZXh0ZXJuYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTaW5jZSB3ZSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVjaXBpZW50cywgb3V0cHV0cyB3aWxsIGJlIGNsYXNzaWZpZWQgYmFzZWQgb24gd2hldGhlciB0aGV5IGNhbiBiZVxuICAgICAgLy8gdmVyaWZpZWQgYXMgd2FsbGV0IGFkZHJlc3Nlcy4gU29tZSBtYXkgYmUgZXh0ZXJuYWwgaWYgYWRkcmVzcyB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aG91dCBhIHByb3BlciB3YWxsZXQgc2V0dXAuXG4gICAgICBjb25zdCB0b3RhbE91dHB1dHMgPSByZWZQYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGNoYW5nZU91dHB1dHMgPSByZWZQYXJzZWRUcmFuc2FjdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGV4dGVybmFsT3V0cHV0cyA9IHJlZlBhcnNlZFRyYW5zYWN0aW9uLm91dHB1dHMuZmlsdGVyKChvKSA9PiBvLmV4dGVybmFsID09PSB0cnVlKS5sZW5ndGg7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXh0ZXJuYWxPdXRwdXRzLCAzKTtcblxuICAgICAgYXNzZXJ0Lm9rKHRvdGFsT3V0cHV0cyA+IDAsICdzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgb3V0cHV0Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2hhbmdlT3V0cHV0cyArIGV4dGVybmFsT3V0cHV0cywgdG90YWxPdXRwdXRzLCAnYWxsIG91dHB1dHMgc2hvdWxkIGJlIGNsYXNzaWZpZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBleHBlY3RlZCBleHBsaWNpdCBhbmQgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChCaWdJbnQocmVmUGFyc2VkVHJhbnNhY3Rpb24uZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSwgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKEJpZ0ludChyZWZQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpLCBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVRyYW5zYWN0aW9uKFxuICBiYWNrZW5kOiAndXR4b2xpYicgfCAnd2FzbScsXG4gIGZpbHRlcjogKHRlc3Q6IHV0eG9saWIudGVzdHV0aWwuQWNpZFRlc3QpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlXG4pIHtcbiAgZGVzY3JpYmUoYHBhcnNlVHJhbnNhY3Rpb24gKCR7YmFja2VuZH0pYCwgZnVuY3Rpb24gKCkge1xuICAgIHV0eG9saWIudGVzdHV0aWwuQWNpZFRlc3Quc3VpdGUoKVxuICAgICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgICAuZm9yRWFjaCgodGVzdCkgPT4ge1xuICAgICAgICAvLyBEZWZhdWx0IGNhc2U6IHBzYnQgZm9ybWF0LCBpbmZlciByZWNpcGllbnRzIGZyb20gZXhwbGFuYXRpb25cbiAgICAgICAgZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aCh0ZXN0LCAnZGVmYXVsdCcsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczogJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGVzdC5uZXR3b3JrICE9PSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0ZW5kZWQgdGVzdCBzdWl0ZSBmb3IgYml0Y29pblxuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2xlZ2FjeScsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eEZvcm1hdDogJ2xlZ2FjeScsXG4gICAgICAgICAgdHhQYXJhbXM6ICdpbmZlckZyb21FeHBsYW5hdGlvbicsXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aCh0ZXN0LCAnZW1wdHkgcmVjaXBpZW50cycsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdyYmYnLCBiYWNrZW5kLCB7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHJiZlR4SWRzOiBbJ1BMQUNFSE9MREVSJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcycsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczogJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyxcbiAgICAgICAgICBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M6IHRydWUsXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfSk7XG59XG5cbmRlc2NyaWJlVHJhbnNhY3Rpb24oJ3V0eG9saWInKTtcbmRlc2NyaWJlVHJhbnNhY3Rpb24oJ3dhc20nLCAodGVzdCkgPT4gaGFzV2FzbVV0eG9TdXBwb3J0KHRlc3QubmV0d29yaykpO1xuIl19
286
+ describeTransaction('wasm');
287
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3BhcnNlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUF3QztBQUV4Qyw2Q0FBK0I7QUFDL0IsOERBQWdEO0FBQ2hELG1EQUFrRztBQUNsRyxnREFBcUQ7QUFFckQsK0ZBQTRGO0FBRzVGLHFDQUF5QztBQUN6Qyx5RUFBd0c7QUFLeEcsaURBQW9EO0FBR3BELFNBQVMsMEJBQTBCLENBQ2pDLFdBQW1DLEVBQ25DLEVBQUUsMkJBQTJCLEVBQTRDO0lBS3pFLGlGQUFpRjtJQUNqRixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakYsSUFBSSxlQUFlLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXRHLElBQUksYUFBaUMsQ0FBQztJQUN0QyxJQUFJLDJCQUEyQixFQUFFLENBQUM7UUFDaEMsZ0RBQWdEO1FBQ2hELEVBQUU7UUFDRiwwRUFBMEU7UUFDMUUsc0RBQXNEO1FBQ3RELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxhQUFhLEdBQUcsY0FBYyxDQUFD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QUFDLENBQUM7QUFDL0IsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgV2FsbGV0LCBWZXJpZmljYXRpb25PcHRpb25zLCBJVHJhbnNhY3Rpb25SZWNpcGllbnQsIFRyaXBsZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IHBhcnNlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcGFyc2VUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBQYXJzZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBVdHhvV2FsbGV0IH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3dhbGxldCc7XG5pbXBvcnQgeyBnZXRVdHhvQ29pbiB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgZXhwbGFpbkxlZ2FjeVR4LCBleHBsYWluUHNidCwgZXhwbGFpblBzYnRXYXNtIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0JztcbmltcG9ydCB0eXBlIHtcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgQ2hhbmdlQWRkcmVzc0luZm8sXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZ2V0Q29pbk5hbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvbmFtZXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25QcmVidWlsZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luJztcblxuZnVuY3Rpb24gZ2V0VHhQYXJhbXNGcm9tRXhwbGFuYXRpb24oXG4gIGV4cGxhbmF0aW9uOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcyB9OiB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzczogYm9vbGVhbiB9XG4pOiB7XG4gIHJlY2lwaWVudHM6IElUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xufSB7XG4gIC8vIFRoZSBleHRlcm5hbCBvdXRwdXRzIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBpbiBvdXRwdXRzIGJ1dCBub3QgaW4gY2hhbmdlT3V0cHV0c1xuICBjb25zdCBjaGFuZ2VBZGRyZXNzZXMgPSBuZXcgU2V0KGV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubWFwKChvKSA9PiBvLmFkZHJlc3MpKTtcbiAgbGV0IGV4dGVybmFsT3V0cHV0cyA9IGV4cGxhbmF0aW9uLm91dHB1dHMuZmlsdGVyKChvKSA9PiBvLmFkZHJlc3MgJiYgIWNoYW5nZUFkZHJlc3Nlcy5oYXMoby5hZGRyZXNzKSk7XG5cbiAgbGV0IGNoYW5nZUFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcykge1xuICAgIC8vIGNvbnZlcnQgYW4gZXh0ZXJuYWwgb3V0cHV0IHRvIGEgY2hhbmdlIG91dHB1dFxuICAgIC8vXG4gICAgLy8gaW4gY29tYmluYXRpb24gd2l0aCBhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcywgdGhpcyBhbGxvd3MgYW4gZXh0ZXJuYWxcbiAgICAvLyBvdXRwdXQgb24gdGhlIHRyYW5zYWN0aW9uIHdpdGhvdXQgYSBzaXplIGNvbnN0cmFpbnRcbiAgICBjb25zdCBleHRlcm5hbE91dHB1dCA9IGV4dGVybmFsT3V0cHV0c1swXTtcbiAgICBpZiAoIWV4dGVybmFsT3V0cHV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGV4dGVybmFsIG91dHB1dCBmb3VuZCcpO1xuICAgIH1cbiAgICBjaGFuZ2VBZGRyZXNzID0gZXh0ZXJuYWxPdXRwdXQuYWRkcmVzcztcbiAgICBleHRlcm5hbE91dHB1dHMgPSBleHRlcm5hbE91dHB1dHMuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlY2lwaWVudHM6IGV4dGVybmFsT3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyEsXG4gICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQsXG4gICAgfSkpLFxuICAgIGNoYW5nZUFkZHJlc3MsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENoYW5nZUluZm9Gcm9tUHNidChwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KTogQ2hhbmdlQWRkcmVzc0luZm9bXSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28uZmluZEludGVybmFsT3V0cHV0SW5kaWNlcyhwc2J0KS5tYXAoKGkpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHBzYnQuZGF0YS5vdXRwdXRzW2ldO1xuICAgICAgY29uc3QgZGVyaXZhdGlvbnMgPSBvdXRwdXQuYmlwMzJEZXJpdmF0aW9uID8/IG91dHB1dC50YXBCaXAzMkRlcml2YXRpb24gPz8gdW5kZWZpbmVkO1xuICAgICAgaWYgKCFkZXJpdmF0aW9ucyB8fCBkZXJpdmF0aW9ucy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCAzIGRlcml2YXRpb24gcGF0aHMnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhdGggPSBkZXJpdmF0aW9uc1swXS5wYXRoO1xuICAgICAgY29uc3QgeyBjaGFpbiwgaW5kZXggfSA9IHV0eG9saWIuYml0Z28uZ2V0Q2hhaW5BbmRJbmRleEZyb21QYXRoKHBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRkcmVzczogdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQocHNidC50eE91dHB1dHNbaV0uc2NyaXB0LCBwc2J0Lm5ldHdvcmspLFxuICAgICAgICBjaGFpbixcbiAgICAgICAgaW5kZXgsXG4gICAgICB9O1xuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLkVycm9yTm9NdWx0aVNpZ0lucHV0Rm91bmQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aChcbiAgYWNpZFRlc3Q6IHV0eG9saWIudGVzdHV0aWwuQWNpZFRlc3QsXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGJhY2tlbmQ6ICd1dHhvbGliJyB8ICd3YXNtJyxcbiAge1xuICAgIHR4UGFyYW1zLFxuICAgIGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcyA9IGZhbHNlLFxuICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50LFxuICAgIHR4Rm9ybWF0ID0gJ3BzYnQnLFxuICB9OiB7XG4gICAgdHhQYXJhbXM6XG4gICAgICB8IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXTtcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgcmJmVHhJZHM6IHN0cmluZ1tdO1xuICAgICAgICB9XG4gICAgICB8ICdpbmZlckZyb21FeHBsYW5hdGlvbic7XG4gICAgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzPzogYm9vbGVhbjtcbiAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogYmlnaW50O1xuICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiBiaWdpbnQ7XG4gICAgdHhGb3JtYXQ/OiAncHNidCcgfCAnbGVnYWN5JztcbiAgfVxuKSB7XG4gIGRlc2NyaWJlKGAke2FjaWRUZXN0Lm5hbWV9LyR7bGFiZWx9YCwgZnVuY3Rpb24gKCkge1xuICAgIGxldCByZWZQYXJzZWRUcmFuc2FjdGlvbjogUGFyc2VkVHJhbnNhY3Rpb248YmlnaW50PjtcbiAgICBsZXQgY29pbjogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0VXR4b0NvaW4+O1xuICAgIGxldCBtb2NrV2FsbGV0OiBzaW5vbi5TaW5vblN0dWJiZWRJbnN0YW5jZTxXYWxsZXQ+O1xuICAgIGxldCBzdHViRXhwbGFpblRyYW5zYWN0aW9uOiBzaW5vbi5TaW5vblN0dWI7XG5cbiAgICBiZWZvcmUoJ3ByZXBhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb2luTmFtZSA9IGdldENvaW5OYW1lKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgY29pbiA9IGdldFV0eG9Db2luKGNvaW5OYW1lKTtcblxuICAgICAgLy8gQ3JlYXRlIFBTQlQgYW5kIGV4cGxhbmF0aW9uXG4gICAgICBjb25zdCBwc2J0ID0gYWNpZFRlc3QuY3JlYXRlUHNidCgpO1xuICAgICAgY29uc3QgdHggPSBwc2J0LmdldFVuc2lnbmVkVHgoKTtcbiAgICAgIGNvbnN0IHR4SGFzaCA9IHR4LmdldElkKCk7XG5cbiAgICAgIGxldCBleHBsYW5hdGlvbjogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbiAgICAgIGlmICh0eEZvcm1hdCA9PT0gJ3BzYnQnKSB7XG4gICAgICAgIGlmIChiYWNrZW5kID09PSAndXR4b2xpYicpIHtcbiAgICAgICAgICBleHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0KHBzYnQsIHsgcHViczogYWNpZFRlc3Qucm9vdFdhbGxldEtleXMgfSwgY29pbk5hbWUsIHtcbiAgICAgICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChiYWNrZW5kID09PSAnd2FzbScpIHtcbiAgICAgICAgICBjb25zdCB3YXNtUHNidCA9IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMoXG4gICAgICAgICAgICBwc2J0LnRvQnVmZmVyKCksXG4gICAgICAgICAgICB1dHhvbGliLmdldE5ldHdvcmtOYW1lKGFjaWRUZXN0Lm5ldHdvcmspIVxuICAgICAgICAgICk7XG4gICAgICAgICAgZXhwbGFuYXRpb24gPSBleHBsYWluUHNidFdhc20oXG4gICAgICAgICAgICB3YXNtUHNidCxcbiAgICAgICAgICAgIGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVwbGF5UHJvdGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIHB1YmxpY0tleXM6IFthY2lkVGVzdC5nZXRSZXBsYXlQcm90ZWN0aW9uUHVibGljS2V5KCldLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJhY2tlbmQ6ICR7YmFja2VuZH1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgICAgY29uc3QgcHVicyA9IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgICAgICAgLy8gRXh0cmFjdCBjaGFuZ2UgaW5mbyBmcm9tIFBTQlQgdG8gcGFzcyB0byBleHBsYWluTGVnYWN5VHhcbiAgICAgICAgY29uc3QgY2hhbmdlSW5mbyA9IGdldENoYW5nZUluZm9Gcm9tUHNidChwc2J0KTtcbiAgICAgICAgZXhwbGFuYXRpb24gPSBleHBsYWluTGVnYWN5VHgodHgsIHsgcHVicywgY2hhbmdlSW5mbyB9LCBjb2luTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHhGb3JtYXQ6ICR7dHhGb3JtYXR9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIERldGVybWluZSB0eFBhcmFtc1xuICAgICAgbGV0IHJlc29sdmVkVHhQYXJhbXM7XG4gICAgICBpZiAodHhQYXJhbXMgPT09ICdpbmZlckZyb21FeHBsYW5hdGlvbicgfHwgdHhQYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvbHZlZFR4UGFyYW1zID0gZ2V0VHhQYXJhbXNGcm9tRXhwbGFuYXRpb24oZXhwbGFuYXRpb24sIHsgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzIH0pO1xuICAgICAgfSBlbHNlIGlmICgncmJmVHhJZHMnIGluIHR4UGFyYW1zKSB7XG4gICAgICAgIC8vIFJlcGxhY2UgcGxhY2Vob2xkZXIgdHhIYXNoIHdpdGggYWN0dWFsIGNvbXB1dGVkIHR4SGFzaFxuICAgICAgICByZXNvbHZlZFR4UGFyYW1zID0ge1xuICAgICAgICAgIHJiZlR4SWRzOiB0eFBhcmFtcy5yYmZUeElkcy5tYXAoKGhhc2gpID0+IChoYXNoID09PSAnUExBQ0VIT0xERVInID8gdHhIYXNoIDogaGFzaCkpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcyA9IHR4UGFyYW1zO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzKSB7XG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMuYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3MgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgbW9jayB3YWxsZXRcbiAgICAgIG1vY2tXYWxsZXQgPSBzaW5vbi5jcmVhdGVTdHViSW5zdGFuY2UoV2FsbGV0KTtcbiAgICAgIG1vY2tXYWxsZXQuaWQucmV0dXJucygndGVzdC13YWxsZXQtaWQnKTtcbiAgICAgIG1vY2tXYWxsZXQuY29pbi5yZXR1cm5zKGNvaW4uZ2V0Q2hhaW4oKSk7XG4gICAgICBtb2NrV2FsbGV0LmNvaW5TcGVjaWZpYy5yZXR1cm5zKHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIE1vY2sgZ2V0VHJhbnNhY3Rpb24gZm9yIFJCRiBjYXNlXG4gICAgICBpZiAoJ3JiZlR4SWRzJyBpbiByZXNvbHZlZFR4UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHJiZlR4UGFyYW1zID0gZ2V0VHhQYXJhbXNGcm9tRXhwbGFuYXRpb24oZXhwbGFuYXRpb24sIHsgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzOiBmYWxzZSB9KTtcbiAgICAgICAgbW9ja1dhbGxldC5nZXRUcmFuc2FjdGlvbi5yZXNvbHZlcyh7XG4gICAgICAgICAgb3V0cHV0czogcmJmVHhQYXJhbXMucmVjaXBpZW50cy5tYXAoKHIpID0+ICh7XG4gICAgICAgICAgICB2YWx1ZVN0cmluZzogdHlwZW9mIHIuYW1vdW50ID09PSAnc3RyaW5nJyA/IHIuYW1vdW50IDogci5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFkZHJlc3M6IHIuYWRkcmVzcyxcbiAgICAgICAgICAgIC8vIHdhbGxldCBmaWVsZCBpcyB1bmRlZmluZWQgZm9yIGV4dGVybmFsIG91dHB1dHMgKG5vdCBzZWxmLXNlbmRzKVxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1vY2sgdmVyaWZpY2F0aW9uIG9wdGlvbnMgd2l0aCBrZXljaGFpbnMgdG8gZGlzYWJsZSBuZXR3b3JraW5nXG4gICAgICAvLyBVc2UgdGhlIHNhbWUga2V5Y2hhaW5zIHRoYXQgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgUFNCVFxuICAgICAgY29uc3QgcHVicyA9IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbjogVmVyaWZpY2F0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgZGlzYWJsZU5ldHdvcmtpbmc6IHRydWUsXG4gICAgICAgIGtleWNoYWluczoge1xuICAgICAgICAgIHVzZXI6IHsgaWQ6ICcwJywgcHViOiBwdWJzWzBdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICAgICAgYmFja3VwOiB7IGlkOiAnMScsIHB1YjogcHVic1sxXSwgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgICAgIGJpdGdvOiB7IGlkOiAnMicsIHB1YjogcHVic1syXSwgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgLy8gU3R1YiBleHBsYWluVHJhbnNhY3Rpb24gdG8gcmV0dXJuIHRoZSBleHBsYW5hdGlvbiB3aXRob3V0IG1ha2luZyBuZXR3b3JrIGNhbGxzXG4gICAgICBzdHViRXhwbGFpblRyYW5zYWN0aW9uID0gc2lub24uc3R1Yihjb2luLCAnZXhwbGFpblRyYW5zYWN0aW9uJykucmVzb2x2ZXMoZXhwbGFuYXRpb24pO1xuXG4gICAgICBsZXQgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxiaWdpbnQ+O1xuICAgICAgaWYgKHR4Rm9ybWF0ID09PSAncHNidCcpIHtcbiAgICAgICAgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICB0eEhleDogcHNidC50b0hleCgpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgICAgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgICB0eEhleDogcHNidC5nZXRVbnNpZ25lZFR4KCkudG9IZXgoKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eEZvcm1hdDogJHt0eEZvcm1hdH1gKTtcbiAgICAgIH1cblxuICAgICAgcmVmUGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBwYXJzZVRyYW5zYWN0aW9uKGNvaW4sIHtcbiAgICAgICAgd2FsbGV0OiBtb2NrV2FsbGV0IGFzIHVua25vd24gYXMgVXR4b1dhbGxldCxcbiAgICAgICAgdHhQYXJhbXM6IHJlc29sdmVkVHhQYXJhbXMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoJ2NsZWFudXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc3R1YkV4cGxhaW5UcmFuc2FjdGlvbikge1xuICAgICAgICBzdHViRXhwbGFpblRyYW5zYWN0aW9uLnJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdHJhbnNhY3Rpb24gd2l0aG91dCBuZXR3b3JrIGNhbGxzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMpO1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLm91dHB1dHMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIHZhbGlkIGtleWNoYWlucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMudXNlcik7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJhY2t1cCk7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJpdGdvKTtcbiAgICAgIGNvbnN0IHB1YnMgPSBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLnVzZXIucHViLCBwdWJzWzBdKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYmFja3VwLnB1YiwgcHVic1sxXSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJpdGdvLnB1YiwgcHVic1syXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgb3V0cHV0cyBjbGFzc2lmaWVkIGFzIGludGVybmFsIG9yIGV4dGVybmFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2luY2Ugd2UgZGlkbid0IHNwZWNpZnkgYW55IHJlY2lwaWVudHMsIG91dHB1dHMgd2lsbCBiZSBjbGFzc2lmaWVkIGJhc2VkIG9uIHdoZXRoZXIgdGhleSBjYW4gYmVcbiAgICAgIC8vIHZlcmlmaWVkIGFzIHdhbGxldCBhZGRyZXNzZXMuIFNvbWUgbWF5IGJlIGV4dGVybmFsIGlmIGFkZHJlc3MgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGhvdXQgYSBwcm9wZXIgd2FsbGV0IHNldHVwLlxuICAgICAgY29uc3QgdG90YWxPdXRwdXRzID0gcmVmUGFyc2VkVHJhbnNhY3Rpb24ub3V0cHV0cy5sZW5ndGg7XG4gICAgICBjb25zdCBjaGFuZ2VPdXRwdXRzID0gcmVmUGFyc2VkVHJhbnNhY3Rpb24uY2hhbmdlT3V0cHV0cy5sZW5ndGg7XG4gICAgICBjb25zdCBleHRlcm5hbE91dHB1dHMgPSByZWZQYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzLmZpbHRlcigobykgPT4gby5leHRlcm5hbCA9PT0gdHJ1ZSkubGVuZ3RoO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4dGVybmFsT3V0cHV0cywgMyk7XG5cbiAgICAgIGFzc2VydC5vayh0b3RhbE91dHB1dHMgPiAwLCAnc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb25lIG91dHB1dCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNoYW5nZU91dHB1dHMgKyBleHRlcm5hbE91dHB1dHMsIHRvdGFsT3V0cHV0cywgJ2FsbCBvdXRwdXRzIHNob3VsZCBiZSBjbGFzc2lmaWVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgZXhwZWN0ZWQgZXhwbGljaXQgYW5kIGltcGxpY2l0IGV4dGVybmFsIHNwZW5kIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoQmlnSW50KHJlZlBhcnNlZFRyYW5zYWN0aW9uLmV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCksIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChCaWdJbnQocmVmUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSwgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVUcmFuc2FjdGlvbihcbiAgYmFja2VuZDogJ3V0eG9saWInIHwgJ3dhc20nLFxuICBmaWx0ZXI6ICh0ZXN0OiB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKSB7XG4gIGRlc2NyaWJlKGBwYXJzZVRyYW5zYWN0aW9uICgke2JhY2tlbmR9KWAsIGZ1bmN0aW9uICgpIHtcbiAgICB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0LnN1aXRlKClcbiAgICAgIC5maWx0ZXIoZmlsdGVyKVxuICAgICAgLmZvckVhY2goKHRlc3QpID0+IHtcbiAgICAgICAgLy8gRGVmYXVsdCBjYXNlOiBwc2J0IGZvcm1hdCwgaW5mZXIgcmVjaXBpZW50cyBmcm9tIGV4cGxhbmF0aW9uXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2RlZmF1bHQnLCBiYWNrZW5kLCB7XG4gICAgICAgICAgdHhQYXJhbXM6ICdpbmZlckZyb21FeHBsYW5hdGlvbicsXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRlc3QubmV0d29yayAhPT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4dGVuZGVkIHRlc3Qgc3VpdGUgZm9yIGJpdGNvaW5cblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdsZWdhY3knLCBiYWNrZW5kLCB7XG4gICAgICAgICAgdHhGb3JtYXQ6ICdsZWdhY3knLFxuICAgICAgICAgIHR4UGFyYW1zOiAnaW5mZXJGcm9tRXhwbGFuYXRpb24nLFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxODAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2VtcHR5IHJlY2lwaWVudHMnLCBiYWNrZW5kLCB7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxODAwbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aCh0ZXN0LCAncmJmJywgYmFja2VuZCwge1xuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICByYmZUeElkczogWydQTEFDRUhPTERFUiddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aCh0ZXN0LCAnYWxsb3dFeHRlcm5hbENoYW5nZUFkZHJlc3MnLCBiYWNrZW5kLCB7XG4gICAgICAgICAgdHhQYXJhbXM6ICdpbmZlckZyb21FeHBsYW5hdGlvbicsXG4gICAgICAgICAgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzOiB0cnVlLFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxODAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH0pO1xufVxuXG5kZXNjcmliZVRyYW5zYWN0aW9uKCd1dHhvbGliJyk7XG5kZXNjcmliZVRyYW5zYWN0aW9uKCd3YXNtJyk7XG4iXX0=
@@ -47,13 +47,14 @@ function createReplayProtectionOutputScript(pubkey) {
47
47
  describe('replayProtection', function () {
48
48
  it('should have scriptPubKeys that match descriptor computation', function () {
49
49
  for (const pubkey of [replayProtection_1.pubkeyProd, replayProtection_1.pubkeyTestnet]) {
50
+ const coinName = pubkey === replayProtection_1.pubkeyProd ? 'bch' : 'tbch';
50
51
  const network = pubkey === replayProtection_1.pubkeyProd ? utxolib.networks.bitcoincash : utxolib.networks.bitcoincashTestnet;
51
52
  const expectedScript = createReplayProtectionOutputScript(pubkey);
52
- const actualAddresses = (0, replayProtection_1.getReplayProtectionAddresses)(network);
53
+ const actualAddresses = (0, replayProtection_1.getReplayProtectionAddresses)(coinName);
53
54
  strict_1.default.equal(actualAddresses.length, 1);
54
55
  const actualScript = Buffer.from(wasm_utxo_1.utxolibCompat.toOutputScript(actualAddresses[0], network));
55
56
  strict_1.default.deepStrictEqual(actualScript, expectedScript);
56
57
  }
57
58
  });
58
59
  });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5UHJvdGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0VBQXdDO0FBRXhDLDhEQUFnRDtBQUNoRCxnREFBNkQ7QUFFN0QsK0ZBSWtFO0FBRWxFLFNBQVMsa0NBQWtDLENBQUMsTUFBYztJQUN4RCxNQUFNLFVBQVUsR0FBRyxzQkFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMxRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtJQUMzQixFQUFFLENBQUMsNkRBQTZELEVBQUU7UUFDaEUsS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDLDZCQUFVLEVBQUUsZ0NBQWEsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLDZCQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1lBQzNHLE1BQU0sY0FBYyxHQUFHLGtDQUFrQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sZUFBZSxHQUFHLElBQUEsK0NBQTRCLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUFhLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVGLGdCQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQvc3RyaWN0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBEZXNjcmlwdG9yLCB1dHhvbGliQ29tcGF0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7XG4gIGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMsXG4gIHB1YmtleVByb2QsXG4gIHB1YmtleVRlc3RuZXQsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcblxuZnVuY3Rpb24gY3JlYXRlUmVwbGF5UHJvdGVjdGlvbk91dHB1dFNjcmlwdChwdWJrZXk6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yLmZyb21TdHJpbmcoYHNoKHBrKCR7cHVia2V5LnRvU3RyaW5nKCdoZXgnKX0pKWAsICdkZWZpbml0ZScpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oZGVzY3JpcHRvci5zY3JpcHRQdWJrZXkoKSk7XG59XG5cbmRlc2NyaWJlKCdyZXBsYXlQcm90ZWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGhhdmUgc2NyaXB0UHViS2V5cyB0aGF0IG1hdGNoIGRlc2NyaXB0b3IgY29tcHV0YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yIChjb25zdCBwdWJrZXkgb2YgW3B1YmtleVByb2QsIHB1YmtleVRlc3RuZXRdKSB7XG4gICAgICBjb25zdCBuZXR3b3JrID0gcHVia2V5ID09PSBwdWJrZXlQcm9kID8gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luY2FzaCA6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbmNhc2hUZXN0bmV0O1xuICAgICAgY29uc3QgZXhwZWN0ZWRTY3JpcHQgPSBjcmVhdGVSZXBsYXlQcm90ZWN0aW9uT3V0cHV0U2NyaXB0KHB1YmtleSk7XG4gICAgICBjb25zdCBhY3R1YWxBZGRyZXNzZXMgPSBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKG5ldHdvcmspO1xuICAgICAgYXNzZXJ0LmVxdWFsKGFjdHVhbEFkZHJlc3Nlcy5sZW5ndGgsIDEpO1xuICAgICAgY29uc3QgYWN0dWFsU2NyaXB0ID0gQnVmZmVyLmZyb20odXR4b2xpYkNvbXBhdC50b091dHB1dFNjcmlwdChhY3R1YWxBZGRyZXNzZXNbMF0sIG5ldHdvcmspKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYWN0dWFsU2NyaXB0LCBleHBlY3RlZFNjcmlwdCk7XG4gICAgfVxuICB9KTtcbn0pO1xuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5UHJvdGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0VBQXdDO0FBRXhDLDhEQUFnRDtBQUNoRCxnREFBNkQ7QUFFN0QsK0ZBSWtFO0FBR2xFLFNBQVMsa0NBQWtDLENBQUMsTUFBYztJQUN4RCxNQUFNLFVBQVUsR0FBRyxzQkFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMxRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtJQUMzQixFQUFFLENBQUMsNkRBQTZELEVBQUU7UUFDaEUsS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDLDZCQUFVLEVBQUUsZ0NBQWEsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxRQUFRLEdBQWlCLE1BQU0sS0FBSyw2QkFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0RSxNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssNkJBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUM7WUFDM0csTUFBTSxjQUFjLEdBQUcsa0NBQWtDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEUsTUFBTSxlQUFlLEdBQUcsSUFBQSwrQ0FBNEIsRUFBQyxRQUFRLENBQUMsQ0FBQztZQUMvRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQWEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUYsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IERlc2NyaXB0b3IsIHV0eG9saWJDb21wYXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHtcbiAgZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyxcbiAgcHVia2V5UHJvZCxcbiAgcHVia2V5VGVzdG5ldCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3JlcGxheVByb3RlY3Rpb24nO1xuaW1wb3J0IHsgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL25hbWVzJztcblxuZnVuY3Rpb24gY3JlYXRlUmVwbGF5UHJvdGVjdGlvbk91dHB1dFNjcmlwdChwdWJrZXk6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yLmZyb21TdHJpbmcoYHNoKHBrKCR7cHVia2V5LnRvU3RyaW5nKCdoZXgnKX0pKWAsICdkZWZpbml0ZScpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oZGVzY3JpcHRvci5zY3JpcHRQdWJrZXkoKSk7XG59XG5cbmRlc2NyaWJlKCdyZXBsYXlQcm90ZWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGhhdmUgc2NyaXB0UHViS2V5cyB0aGF0IG1hdGNoIGRlc2NyaXB0b3IgY29tcHV0YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yIChjb25zdCBwdWJrZXkgb2YgW3B1YmtleVByb2QsIHB1YmtleVRlc3RuZXRdKSB7XG4gICAgICBjb25zdCBjb2luTmFtZTogVXR4b0NvaW5OYW1lID0gcHVia2V5ID09PSBwdWJrZXlQcm9kID8gJ2JjaCcgOiAndGJjaCc7XG4gICAgICBjb25zdCBuZXR3b3JrID0gcHVia2V5ID09PSBwdWJrZXlQcm9kID8gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luY2FzaCA6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbmNhc2hUZXN0bmV0O1xuICAgICAgY29uc3QgZXhwZWN0ZWRTY3JpcHQgPSBjcmVhdGVSZXBsYXlQcm90ZWN0aW9uT3V0cHV0U2NyaXB0KHB1YmtleSk7XG4gICAgICBjb25zdCBhY3R1YWxBZGRyZXNzZXMgPSBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKGNvaW5OYW1lKTtcbiAgICAgIGFzc2VydC5lcXVhbChhY3R1YWxBZGRyZXNzZXMubGVuZ3RoLCAxKTtcbiAgICAgIGNvbnN0IGFjdHVhbFNjcmlwdCA9IEJ1ZmZlci5mcm9tKHV0eG9saWJDb21wYXQudG9PdXRwdXRTY3JpcHQoYWN0dWFsQWRkcmVzc2VzWzBdLCBuZXR3b3JrKSk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGFjdHVhbFNjcmlwdCwgZXhwZWN0ZWRTY3JpcHQpO1xuICAgIH1cbiAgfSk7XG59KTtcbiJdfQ==
@@ -42,7 +42,7 @@ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
42
42
  const decode_1 = require("../../../../src/transaction/decode");
43
43
  const signPsbtUtxolib_1 = require("../../../../src/transaction/fixedScript/signPsbtUtxolib");
44
44
  const signPsbtWasm_1 = require("../../../../src/transaction/fixedScript/signPsbtWasm");
45
- const util_1 = require("./util");
45
+ const names_1 = require("../../../../src/names");
46
46
  function getMockCoinUtxolib(keys) {
47
47
  return {
48
48
  async getMusig2Nonces(psbt, walletId) {
@@ -111,7 +111,8 @@ function describeSignPsbtWithMusig2Participant(acidTest, { decodeWith }) {
111
111
  describe(`${acidTest.name} ${decodeWith}`, function () {
112
112
  it('should sign unsigned psbt to halfsigned', async function () {
113
113
  // Create unsigned PSBT
114
- const psbt = (0, decode_1.decodePsbtWith)(acidTest.createPsbt().toBuffer(), acidTest.network, decodeWith);
114
+ const coinName = (0, names_1.getCoinName)(acidTest.network);
115
+ const psbt = (0, decode_1.decodePsbtWith)(acidTest.createPsbt().toBuffer(), coinName, decodeWith);
115
116
  let result;
116
117
  if (decodeWith === 'utxolib') {
117
118
  (0, strict_1.default)(psbt instanceof utxolib.bitgo.UtxoPsbt, 'psbt should be a UtxoPsbt');
@@ -147,9 +148,7 @@ describe('signPsbtWithMusig2ParticipantUtxolib', function () {
147
148
  .filter((test) => test.signStage === 'unsigned')
148
149
  .forEach((test) => {
149
150
  describeSignPsbtWithMusig2Participant(test, { decodeWith: 'utxolib' });
150
- if ((0, util_1.hasWasmUtxoSupport)(test.network)) {
151
- describeSignPsbtWithMusig2Participant(test, { decodeWith: 'wasm-utxo' });
152
- }
151
+ describeSignPsbtWithMusig2Participant(test, { decodeWith: 'wasm-utxo' });
153
152
  });
154
153
  });
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsOERBQWdEO0FBQ2hELGdEQUE0RDtBQUU1RCwrREFBb0U7QUFFcEUsNkZBQStHO0FBQy9HLHVGQUc4RDtBQUc5RCxpQ0FBNEM7QUFFNUMsU0FBUyxrQkFBa0IsQ0FBQyxJQUFrQztJQUM1RCxPQUFPO1FBQ0wsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUE0QixFQUFFLFFBQWdCO1lBQ2xFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FDdEIsSUFBa0MsRUFDbEMsT0FBd0I7SUFFeEIsbUVBQW1FO0lBQ25FLHVEQUF1RDtJQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLGlCQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsSUFBQSxnQkFBTSxFQUFDLFdBQVcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ2hELE9BQU87UUFDTCxLQUFLLENBQUMsZUFBZSxDQUFDLElBQWlDLEVBQUUsUUFBZ0I7WUFDdkUsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyx3REFBd0Q7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aURBQWlELENBQUMsQ0FBQztnQkFFekcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzNGLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRTtJQUMvQyxrRUFBa0U7SUFDbEUsb0VBQW9FO0lBQ3BFLDBFQUEwRTtJQUMxRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUNwRSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDO1NBQy9DLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2hCLHFDQUFxQyxDQUFDLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksSUFBQSx5QkFBa0IsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxxQ0FBcUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMzRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQvc3RyaWN0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBCSVAzMiwgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgZGVjb2RlUHNidFdpdGggfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IE11c2lnMlBhcnRpY2lwYW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L211c2lnMic7XG5pbXBvcnQgeyBzaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudFV0eG9saWIgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblBzYnRVdHhvbGliJztcbmltcG9ydCB7XG4gIFJlcGxheVByb3RlY3Rpb25LZXlzLFxuICBzaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudFdhc20sXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9zaWduUHNidFdhc20nO1xuaW1wb3J0IHsgU2RrQmFja2VuZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi90eXBlcyc7XG5cbmltcG9ydCB7IGhhc1dhc21VdHhvU3VwcG9ydCB9IGZyb20gJy4vdXRpbCc7XG5cbmZ1bmN0aW9uIGdldE1vY2tDb2luVXR4b2xpYihrZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKTogTXVzaWcyUGFydGljaXBhbnQ8dXR4b2xpYi5iaXRnby5VdHhvUHNidD4ge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldE11c2lnMk5vbmNlcyhwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCB3YWxsZXRJZDogc3RyaW5nKTogUHJvbWlzZTx1dHhvbGliLmJpdGdvLlV0eG9Qc2J0PiB7XG4gICAgICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQoa2V5cy5iaXRnbywgeyBkZXRlcm1pbmlzdGljOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuIHBzYnQ7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0NvaW5XYXNtKFxuICBrZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IE11c2lnMlBhcnRpY2lwYW50PGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4ge1xuICAvLyBDb252ZXJ0IHV0eG9saWIgUm9vdFdhbGxldEtleXMgdG8gd2FzbSBCSVAzMiB1c2luZyBiYXNlNTggc3RyaW5nXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGUgcHJpdmF0ZSBrZXkgaXMgcHJvcGVybHkgdHJhbnNmZXJyZWRcbiAgY29uc3QgYml0Z29YcHJ2ID0ga2V5cy5iaXRnby50b0Jhc2U1OCgpO1xuICBjb25zdCBiaXRnb0tleSA9IEJJUDMyLmZyb21CYXNlNTgoYml0Z29YcHJ2KTtcbiAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspO1xuICBhc3NlcnQobmV0d29ya05hbWUsICduZXR3b3JrIG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgcmV0dXJuIHtcbiAgICBhc3luYyBnZXRNdXNpZzJOb25jZXMocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LCB3YWxsZXRJZDogc3RyaW5nKTogUHJvbWlzZTxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+IHtcbiAgICAgIC8vIEdlbmVyYXRlIG5vbmNlcyB1c2luZyB0aGUgYml0Z28ga2V5XG4gICAgICBwc2J0LmdlbmVyYXRlTXVzaWcyTm9uY2VzKGJpdGdvS2V5KTtcbiAgICAgIC8vIFNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdG8gc2ltdWxhdGUgcmVtb3RlIHJlc3BvbnNlXG4gICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBuZXcgb2JqZWN0IHNvIHdlIGRvbid0IGdldCBcInJlY3Vyc2l2ZSB1c2Ugb2YgYW4gb2JqZWN0XCIgZXJyb3JcbiAgICAgIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnQuc2VyaWFsaXplKCksIG5ldHdvcmtOYW1lKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnRTaWduZWRVdHhvbGliKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIHVzZXJLZXk6IHV0eG9saWIuQklQMzJJbnRlcmZhY2UpOiB2b2lkIHtcbiAgLy8gVmVyaWZ5IHRoYXQgYWxsIHdhbGxldCBpbnB1dHMgaGF2ZSBiZWVuIHNpZ25lZCBieSB1c2VyIGtleVxuICBwc2J0LmRhdGEuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBzY3JpcHRUeXBlIH0gPSB1dHhvbGliLmJpdGdvLnBhcnNlUHNidElucHV0KGlucHV0KTtcblxuICAgIC8vIFNraXAgcmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzIChwMnNoUDJwaylcbiAgICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB1c2VyIHNpZ25hdHVyZSBpcyBwcmVzZW50XG4gICAgY29uc3QgaXNWYWxpZCA9IHBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dEhEKGlucHV0SW5kZXgsIHVzZXJLZXkpO1xuICAgIGFzc2VydChpc1ZhbGlkLCBgaW5wdXQgJHtpbnB1dEluZGV4fSBzaG91bGQgaGF2ZSB2YWxpZCB1c2VyIHNpZ25hdHVyZWApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2lnbmVkV2FzbShcbiAgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LFxuICB1c2VyS2V5OiB1dHhvbGliLkJJUDMySW50ZXJmYWNlLFxuICByb290V2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuSVdhbGxldEtleXMsXG4gIHJlcGxheVByb3RlY3Rpb246IFJlcGxheVByb3RlY3Rpb25LZXlzXG4pOiB2b2lkIHtcbiAgY29uc3Qgd2FzbVVzZXJLZXkgPSBCSVAzMi5mcm9tKHVzZXJLZXkpO1xuICBjb25zdCBwYXJzZWQgPSBwc2J0LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyhyb290V2FsbGV0S2V5cywgcmVwbGF5UHJvdGVjdGlvbik7XG5cbiAgLy8gVmVyaWZ5IHRoYXQgYWxsIHdhbGxldCBpbnB1dHMgaGF2ZSBiZWVuIHNpZ25lZCBieSB1c2VyIGtleVxuICBwYXJzZWQuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgLy8gU2tpcCByZXBsYXkgcHJvdGVjdGlvbiBpbnB1dHMgKHAyc2hQMnBrKVxuICAgIGlmIChpbnB1dC5zY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IHVzZXIgc2lnbmF0dXJlIGlzIHByZXNlbnRcbiAgICBjb25zdCBpc1ZhbGlkID0gcHNidC52ZXJpZnlTaWduYXR1cmUoaW5wdXRJbmRleCwgd2FzbVVzZXJLZXkpO1xuICAgIGFzc2VydChpc1ZhbGlkLCBgaW5wdXQgJHtpbnB1dEluZGV4fSBzaG91bGQgaGF2ZSB2YWxpZCB1c2VyIHNpZ25hdHVyZSAoc2NyaXB0VHlwZT0ke2lucHV0LnNjcmlwdFR5cGV9KWApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9XYXNtV2FsbGV0S2V5cyhrZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKTogZml4ZWRTY3JpcHRXYWxsZXQuSVdhbGxldEtleXMge1xuICByZXR1cm4ge1xuICAgIHRyaXBsZTogW2tleXMudXNlciwga2V5cy5iYWNrdXAsIGtleXMuYml0Z29dLFxuICAgIGRlcml2YXRpb25QcmVmaXhlczoga2V5cy5kZXJpdmF0aW9uUHJlZml4ZXMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlcGxheVByb3RlY3Rpb25LZXlzKGtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMpOiBSZXBsYXlQcm90ZWN0aW9uS2V5cyB7XG4gIC8vIFJlcGxheSBwcm90ZWN0aW9uIGlucHV0cyB1c2UgdGhlIHVuZGVyaXZlZCB1c2VyIHB1YmxpYyBrZXlcbiAgcmV0dXJuIHtcbiAgICBwdWJsaWNLZXlzOiBba2V5cy51c2VyLnB1YmxpY0tleV0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlU2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnQoXG4gIGFjaWRUZXN0OiB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0LFxuICB7IGRlY29kZVdpdGggfTogeyBkZWNvZGVXaXRoOiBTZGtCYWNrZW5kIH1cbikge1xuICBkZXNjcmliZShgJHthY2lkVGVzdC5uYW1lfSAke2RlY29kZVdpdGh9YCwgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2lnbiB1bnNpZ25lZCBwc2J0IHRvIGhhbGZzaWduZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDcmVhdGUgdW5zaWduZWQgUFNCVFxuICAgICAgY29uc3QgcHNidCA9IGRlY29kZVBzYnRXaXRoKGFjaWRUZXN0LmNyZWF0ZVBzYnQoKS50b0J1ZmZlcigpLCBhY2lkVGVzdC5uZXR3b3JrLCBkZWNvZGVXaXRoKTtcblxuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIGlmIChkZWNvZGVXaXRoID09PSAndXR4b2xpYicpIHtcbiAgICAgICAgYXNzZXJ0KHBzYnQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCAncHNidCBzaG91bGQgYmUgYSBVdHhvUHNidCcpO1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBzaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudFV0eG9saWIoXG4gICAgICAgICAgZ2V0TW9ja0NvaW5VdHhvbGliKGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzKSxcbiAgICAgICAgICBwc2J0LFxuICAgICAgICAgIGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnVzZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2lnbmluZ1N0ZXA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdhbGxldElkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgLy8gUmVzdWx0IHNob3VsZCBiZSBhIFBTQlQgKG5vdCBmaW5hbGl6ZWQpXG4gICAgICAgIGFzc2VydChyZXN1bHQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCAnc2hvdWxkIHJldHVybiBVdHhvUHNidCB3aGVuIG5vdCBsYXN0IHNpZ25hdHVyZScpO1xuXG4gICAgICAgIGFzc2VydFNpZ25lZFV0eG9saWIocmVzdWx0LCBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy51c2VyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChwc2J0IGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LCAncHNidCBzaG91bGQgYmUgYSBCaXRHb1BzYnQnKTtcbiAgICAgICAgY29uc3Qgd2FzbVdhbGxldEtleXMgPSB0b1dhc21XYWxsZXRLZXlzKGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzKTtcbiAgICAgICAgY29uc3QgcmVwbGF5UHJvdGVjdGlvbiA9IGdldFJlcGxheVByb3RlY3Rpb25LZXlzKGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzKTtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgc2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnRXYXNtKFxuICAgICAgICAgIGdldE1vY2tDb2luV2FzbShhY2lkVGVzdC5yb290V2FsbGV0S2V5cywgYWNpZFRlc3QubmV0d29yayksXG4gICAgICAgICAgcHNidCxcbiAgICAgICAgICBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy51c2VyLFxuICAgICAgICAgIGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oYWNpZFRlc3Qucm9vdFdhbGxldEtleXMpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcGxheVByb3RlY3Rpb24sXG4gICAgICAgICAgICBzaWduaW5nU3RlcDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgd2FsbGV0SWQ6ICd0ZXN0LXdhbGxldC1pZCcsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICAvLyBSZXN1bHQgc2hvdWxkIGJlIGEgUFNCVCAobm90IGZpbmFsaXplZClcbiAgICAgICAgYXNzZXJ0KHJlc3VsdCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCwgJ3Nob3VsZCByZXR1cm4gQml0R29Qc2J0IHdoZW4gbm90IGxhc3Qgc2lnbmF0dXJlJyk7XG5cbiAgICAgICAgYXNzZXJ0U2lnbmVkV2FzbShyZXN1bHQsIGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnVzZXIsIHdhc21XYWxsZXRLZXlzLCByZXBsYXlQcm90ZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmRlc2NyaWJlKCdzaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudFV0eG9saWInLCBmdW5jdGlvbiAoKSB7XG4gIC8vIENyZWF0ZSB0ZXN0IHN1aXRlIHdpdGggaW5jbHVkZVAydHJNdXNpZzJTY3JpcHRQYXRoIHNldCB0byBmYWxzZVxuICAvLyBwMnRyTXVzaWcyIHNjcmlwdCBwYXRoIGlucHV0cyBhcmUgc2lnbmVkIGJ5IHVzZXIgYW5kIGJhY2t1cCBrZXlzLFxuICAvLyB3aGljaCBpcyBub3QgdGhlIHR5cGljYWwgc2lnbmluZyBwYXR0ZXJuIGFuZCBtYWtlcyB0ZXN0aW5nIG1vcmUgY29tcGxleFxuICB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0LnN1aXRlKHsgaW5jbHVkZVAydHJNdXNpZzJTY3JpcHRQYXRoOiBmYWxzZSB9KVxuICAgIC5maWx0ZXIoKHRlc3QpID0+IHRlc3Quc2lnblN0YWdlID09PSAndW5zaWduZWQnKVxuICAgIC5mb3JFYWNoKCh0ZXN0KSA9PiB7XG4gICAgICBkZXNjcmliZVNpZ25Qc2J0V2l0aE11c2lnMlBhcnRpY2lwYW50KHRlc3QsIHsgZGVjb2RlV2l0aDogJ3V0eG9saWInIH0pO1xuICAgICAgaWYgKGhhc1dhc21VdHhvU3VwcG9ydCh0ZXN0Lm5ldHdvcmspKSB7XG4gICAgICAgIGRlc2NyaWJlU2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnQodGVzdCwgeyBkZWNvZGVXaXRoOiAnd2FzbS11dHhvJyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn0pO1xuIl19
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsOERBQWdEO0FBQ2hELGdEQUE0RDtBQUU1RCwrREFBb0U7QUFFcEUsNkZBQStHO0FBQy9HLHVGQUc4RDtBQUU5RCxpREFBb0Q7QUFFcEQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFrQztJQUM1RCxPQUFPO1FBQ0wsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUE0QixFQUFFLFFBQWdCO1lBQ2xFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FDdEIsSUFBa0MsRUFDbEMsT0FBd0I7SUFFeEIsbUVBQW1FO0lBQ25FLHVEQUF1RDtJQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLGlCQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsSUFBQSxnQkFBTSxFQUFDLFdBQVcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ2hELE9BQU87UUFDTCxLQUFLLENBQUMsZUFBZSxDQUFDLElBQWlDLEVBQUUsUUFBZ0I7WUFDdkUsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyx3REFBd0Q7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QzFDLElBQUEsZ0JBQU0sRUFBQyxNQUFNLFlBQVksNkJBQWlCLENBQUMsU0FBUyxFQUFFLGlEQUFpRCxDQUFDLENBQUM7Z0JBRXpHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUMzRixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxRQUFRLENBQUMsc0NBQXNDLEVBQUU7SUFDL0Msa0VBQWtFO0lBQ2xFLG9FQUFvRTtJQUNwRSwwRUFBMEU7SUFDMUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDcEUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQztTQUMvQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNoQixxQ0FBcUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN2RSxxQ0FBcUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBkZWNvZGVQc2J0V2l0aCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9kZWNvZGUnO1xuaW1wb3J0IHsgTXVzaWcyUGFydGljaXBhbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvbXVzaWcyJztcbmltcG9ydCB7IHNpZ25Qc2J0V2l0aE11c2lnMlBhcnRpY2lwYW50VXR4b2xpYiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9zaWduUHNidFV0eG9saWInO1xuaW1wb3J0IHtcbiAgUmVwbGF5UHJvdGVjdGlvbktleXMsXG4gIHNpZ25Qc2J0V2l0aE11c2lnMlBhcnRpY2lwYW50V2FzbSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3NpZ25Qc2J0V2FzbSc7XG5pbXBvcnQgeyBTZGtCYWNrZW5kIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3R5cGVzJztcbmltcG9ydCB7IGdldENvaW5OYW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL25hbWVzJztcblxuZnVuY3Rpb24gZ2V0TW9ja0NvaW5VdHhvbGliKGtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMpOiBNdXNpZzJQYXJ0aWNpcGFudDx1dHhvbGliLmJpdGdvLlV0eG9Qc2J0PiB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPHV0eG9saWIuYml0Z28uVXR4b1BzYnQ+IHtcbiAgICAgIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChrZXlzLmJpdGdvLCB7IGRldGVybWluaXN0aWM6IHRydWUgfSk7XG4gICAgICByZXR1cm4gcHNidDtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRNb2NrQ29pbldhc20oXG4gIGtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMsXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogTXVzaWcyUGFydGljaXBhbnQ8Zml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0PiB7XG4gIC8vIENvbnZlcnQgdXR4b2xpYiBSb290V2FsbGV0S2V5cyB0byB3YXNtIEJJUDMyIHVzaW5nIGJhc2U1OCBzdHJpbmdcbiAgLy8gVGhpcyBlbnN1cmVzIHRoZSBwcml2YXRlIGtleSBpcyBwcm9wZXJseSB0cmFuc2ZlcnJlZFxuICBjb25zdCBiaXRnb1hwcnYgPSBrZXlzLmJpdGdvLnRvQmFzZTU4KCk7XG4gIGNvbnN0IGJpdGdvS2V5ID0gQklQMzIuZnJvbUJhc2U1OChiaXRnb1hwcnYpO1xuICBjb25zdCBuZXR3b3JrTmFtZSA9IHV0eG9saWIuZ2V0TmV0d29ya05hbWUobmV0d29yayk7XG4gIGFzc2VydChuZXR3b3JrTmFtZSwgJ25ldHdvcmsgbmFtZSBpcyByZXF1aXJlZCcpO1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldE11c2lnMk5vbmNlcyhwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4ge1xuICAgICAgLy8gR2VuZXJhdGUgbm9uY2VzIHVzaW5nIHRoZSBiaXRnbyBrZXlcbiAgICAgIHBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXMoYml0Z29LZXkpO1xuICAgICAgLy8gU2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSB0byBzaW11bGF0ZSByZW1vdGUgcmVzcG9uc2VcbiAgICAgIC8vIFRoaXMgY3JlYXRlcyBhIG5ldyBvYmplY3Qgc28gd2UgZG9uJ3QgZ2V0IFwicmVjdXJzaXZlIHVzZSBvZiBhbiBvYmplY3RcIiBlcnJvclxuICAgICAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidC5zZXJpYWxpemUoKSwgbmV0d29ya05hbWUpO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpZ25lZFV0eG9saWIocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgdXNlcktleTogdXR4b2xpYi5CSVAzMkludGVyZmFjZSk6IHZvaWQge1xuICAvLyBWZXJpZnkgdGhhdCBhbGwgd2FsbGV0IGlucHV0cyBoYXZlIGJlZW4gc2lnbmVkIGJ5IHVzZXIga2V5XG4gIHBzYnQuZGF0YS5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICBjb25zdCB7IHNjcmlwdFR5cGUgfSA9IHV0eG9saWIuYml0Z28ucGFyc2VQc2J0SW5wdXQoaW5wdXQpO1xuXG4gICAgLy8gU2tpcCByZXBsYXkgcHJvdGVjdGlvbiBpbnB1dHMgKHAyc2hQMnBrKVxuICAgIGlmIChzY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IHVzZXIgc2lnbmF0dXJlIGlzIHByZXNlbnRcbiAgICBjb25zdCBpc1ZhbGlkID0gcHNidC52YWxpZGF0ZVNpZ25hdHVyZXNPZklucHV0SEQoaW5wdXRJbmRleCwgdXNlcktleSk7XG4gICAgYXNzZXJ0KGlzVmFsaWQsIGBpbnB1dCAke2lucHV0SW5kZXh9IHNob3VsZCBoYXZlIHZhbGlkIHVzZXIgc2lnbmF0dXJlYCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRTaWduZWRXYXNtKFxuICBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsXG4gIHVzZXJLZXk6IHV0eG9saWIuQklQMzJJbnRlcmZhY2UsXG4gIHJvb3RXYWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5JV2FsbGV0S2V5cyxcbiAgcmVwbGF5UHJvdGVjdGlvbjogUmVwbGF5UHJvdGVjdGlvbktleXNcbik6IHZvaWQge1xuICBjb25zdCB3YXNtVXNlcktleSA9IEJJUDMyLmZyb20odXNlcktleSk7XG4gIGNvbnN0IHBhcnNlZCA9IHBzYnQucGFyc2VUcmFuc2FjdGlvbldpdGhXYWxsZXRLZXlzKHJvb3RXYWxsZXRLZXlzLCByZXBsYXlQcm90ZWN0aW9uKTtcblxuICAvLyBWZXJpZnkgdGhhdCBhbGwgd2FsbGV0IGlucHV0cyBoYXZlIGJlZW4gc2lnbmVkIGJ5IHVzZXIga2V5XG4gIHBhcnNlZC5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICAvLyBTa2lwIHJlcGxheSBwcm90ZWN0aW9uIGlucHV0cyAocDJzaFAycGspXG4gICAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWZXJpZnkgdXNlciBzaWduYXR1cmUgaXMgcHJlc2VudFxuICAgIGNvbnN0IGlzVmFsaWQgPSBwc2J0LnZlcmlmeVNpZ25hdHVyZShpbnB1dEluZGV4LCB3YXNtVXNlcktleSk7XG4gICAgYXNzZXJ0KGlzVmFsaWQsIGBpbnB1dCAke2lucHV0SW5kZXh9IHNob3VsZCBoYXZlIHZhbGlkIHVzZXIgc2lnbmF0dXJlIChzY3JpcHRUeXBlPSR7aW5wdXQuc2NyaXB0VHlwZX0pYCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0b1dhc21XYWxsZXRLZXlzKGtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMpOiBmaXhlZFNjcmlwdFdhbGxldC5JV2FsbGV0S2V5cyB7XG4gIHJldHVybiB7XG4gICAgdHJpcGxlOiBba2V5cy51c2VyLCBrZXlzLmJhY2t1cCwga2V5cy5iaXRnb10sXG4gICAgZGVyaXZhdGlvblByZWZpeGVzOiBrZXlzLmRlcml2YXRpb25QcmVmaXhlcyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVwbGF5UHJvdGVjdGlvbktleXMoa2V5czogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyk6IFJlcGxheVByb3RlY3Rpb25LZXlzIHtcbiAgLy8gUmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzIHVzZSB0aGUgdW5kZXJpdmVkIHVzZXIgcHVibGljIGtleVxuICByZXR1cm4ge1xuICAgIHB1YmxpY0tleXM6IFtrZXlzLnVzZXIucHVibGljS2V5XSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVTaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudChcbiAgYWNpZFRlc3Q6IHV0eG9saWIudGVzdHV0aWwuQWNpZFRlc3QsXG4gIHsgZGVjb2RlV2l0aCB9OiB7IGRlY29kZVdpdGg6IFNka0JhY2tlbmQgfVxuKSB7XG4gIGRlc2NyaWJlKGAke2FjaWRUZXN0Lm5hbWV9ICR7ZGVjb2RlV2l0aH1gLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzaWduIHVuc2lnbmVkIHBzYnQgdG8gaGFsZnNpZ25lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIENyZWF0ZSB1bnNpZ25lZCBQU0JUXG4gICAgICBjb25zdCBjb2luTmFtZSA9IGdldENvaW5OYW1lKGFjaWRUZXN0Lm5ldHdvcmspO1xuICAgICAgY29uc3QgcHNidCA9IGRlY29kZVBzYnRXaXRoKGFjaWRUZXN0LmNyZWF0ZVBzYnQoKS50b0J1ZmZlcigpLCBjb2luTmFtZSwgZGVjb2RlV2l0aCk7XG5cbiAgICAgIGxldCByZXN1bHQ7XG4gICAgICBpZiAoZGVjb2RlV2l0aCA9PT0gJ3V0eG9saWInKSB7XG4gICAgICAgIGFzc2VydChwc2J0IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgJ3BzYnQgc2hvdWxkIGJlIGEgVXR4b1BzYnQnKTtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgc2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnRVdHhvbGliKFxuICAgICAgICAgIGdldE1vY2tDb2luVXR4b2xpYihhY2lkVGVzdC5yb290V2FsbGV0S2V5cyksXG4gICAgICAgICAgcHNidCxcbiAgICAgICAgICBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy51c2VyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpZ25pbmdTdGVwOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3YWxsZXRJZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIC8vIFJlc3VsdCBzaG91bGQgYmUgYSBQU0JUIChub3QgZmluYWxpemVkKVxuICAgICAgICBhc3NlcnQocmVzdWx0IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgJ3Nob3VsZCByZXR1cm4gVXR4b1BzYnQgd2hlbiBub3QgbGFzdCBzaWduYXR1cmUnKTtcblxuICAgICAgICBhc3NlcnRTaWduZWRVdHhvbGliKHJlc3VsdCwgYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudXNlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQocHNidCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCwgJ3BzYnQgc2hvdWxkIGJlIGEgQml0R29Qc2J0Jyk7XG4gICAgICAgIGNvbnN0IHdhc21XYWxsZXRLZXlzID0gdG9XYXNtV2FsbGV0S2V5cyhhY2lkVGVzdC5yb290V2FsbGV0S2V5cyk7XG4gICAgICAgIGNvbnN0IHJlcGxheVByb3RlY3Rpb24gPSBnZXRSZXBsYXlQcm90ZWN0aW9uS2V5cyhhY2lkVGVzdC5yb290V2FsbGV0S2V5cyk7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHNpZ25Qc2J0V2l0aE11c2lnMlBhcnRpY2lwYW50V2FzbShcbiAgICAgICAgICBnZXRNb2NrQ29pbldhc20oYWNpZFRlc3Qucm9vdFdhbGxldEtleXMsIGFjaWRUZXN0Lm5ldHdvcmspLFxuICAgICAgICAgIHBzYnQsXG4gICAgICAgICAgYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudXNlcixcbiAgICAgICAgICBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tKGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXBsYXlQcm90ZWN0aW9uLFxuICAgICAgICAgICAgc2lnbmluZ1N0ZXA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdhbGxldElkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgLy8gUmVzdWx0IHNob3VsZCBiZSBhIFBTQlQgKG5vdCBmaW5hbGl6ZWQpXG4gICAgICAgIGFzc2VydChyZXN1bHQgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsICdzaG91bGQgcmV0dXJuIEJpdEdvUHNidCB3aGVuIG5vdCBsYXN0IHNpZ25hdHVyZScpO1xuXG4gICAgICAgIGFzc2VydFNpZ25lZFdhc20ocmVzdWx0LCBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy51c2VyLCB3YXNtV2FsbGV0S2V5cywgcmVwbGF5UHJvdGVjdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5kZXNjcmliZSgnc2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnRVdHhvbGliJywgZnVuY3Rpb24gKCkge1xuICAvLyBDcmVhdGUgdGVzdCBzdWl0ZSB3aXRoIGluY2x1ZGVQMnRyTXVzaWcyU2NyaXB0UGF0aCBzZXQgdG8gZmFsc2VcbiAgLy8gcDJ0ck11c2lnMiBzY3JpcHQgcGF0aCBpbnB1dHMgYXJlIHNpZ25lZCBieSB1c2VyIGFuZCBiYWNrdXAga2V5cyxcbiAgLy8gd2hpY2ggaXMgbm90IHRoZSB0eXBpY2FsIHNpZ25pbmcgcGF0dGVybiBhbmQgbWFrZXMgdGVzdGluZyBtb3JlIGNvbXBsZXhcbiAgdXR4b2xpYi50ZXN0dXRpbC5BY2lkVGVzdC5zdWl0ZSh7IGluY2x1ZGVQMnRyTXVzaWcyU2NyaXB0UGF0aDogZmFsc2UgfSlcbiAgICAuZmlsdGVyKCh0ZXN0KSA9PiB0ZXN0LnNpZ25TdGFnZSA9PT0gJ3Vuc2lnbmVkJylcbiAgICAuZm9yRWFjaCgodGVzdCkgPT4ge1xuICAgICAgZGVzY3JpYmVTaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudCh0ZXN0LCB7IGRlY29kZVdpdGg6ICd1dHhvbGliJyB9KTtcbiAgICAgIGRlc2NyaWJlU2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnQodGVzdCwgeyBkZWNvZGVXaXRoOiAnd2FzbS11dHhvJyB9KTtcbiAgICB9KTtcbn0pO1xuIl19