@bitgo/abstract-utxo 12.6.0 → 12.7.0

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 (180) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +7 -2
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +19 -34
  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 +4 -3
  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 +3 -4
  10. package/dist/cjs/src/impl/bch/bch.d.ts +15 -1
  11. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
  12. package/dist/cjs/src/impl/bch/bch.js +29 -5
  13. package/dist/cjs/src/impl/btc/index.d.ts +2 -0
  14. package/dist/cjs/src/impl/btc/index.d.ts.map +1 -1
  15. package/dist/cjs/src/impl/btc/index.js +3 -1
  16. package/dist/cjs/src/impl/btc/inscriptionBuilder.js +4 -4
  17. package/dist/cjs/src/impl/btc/tbtcstx.d.ts +10 -0
  18. package/dist/cjs/src/impl/btc/tbtcstx.d.ts.map +1 -0
  19. package/dist/cjs/src/impl/btc/tbtcstx.js +18 -0
  20. package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts +9 -0
  21. package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
  22. package/dist/cjs/src/impl/btc/tbtcstxprivate1.js +15 -0
  23. package/dist/cjs/src/impl/zec/address.d.ts +45 -0
  24. package/dist/cjs/src/impl/zec/address.d.ts.map +1 -1
  25. package/dist/cjs/src/impl/zec/address.js +66 -1
  26. package/dist/cjs/src/impl/zec/recipients.d.ts +2 -1
  27. package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -1
  28. package/dist/cjs/src/impl/zec/recipients.js +1 -1
  29. package/dist/cjs/src/impl/zec/types.d.ts +0 -2
  30. package/dist/cjs/src/impl/zec/types.d.ts.map +1 -1
  31. package/dist/cjs/src/impl/zec/types.js +1 -1
  32. package/dist/cjs/src/impl/zec/zec.d.ts +2 -0
  33. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
  34. package/dist/cjs/src/impl/zec/zec.js +6 -3
  35. package/dist/cjs/src/names.d.ts +5 -2
  36. package/dist/cjs/src/names.d.ts.map +1 -1
  37. package/dist/cjs/src/names.js +19 -1
  38. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +2 -2
  39. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  40. package/dist/cjs/src/recovery/backupKeyRecovery.js +5 -5
  41. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  42. package/dist/cjs/src/recovery/crossChainRecovery.js +4 -4
  43. package/dist/cjs/src/transaction/decode.d.ts +2 -2
  44. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  45. package/dist/cjs/src/transaction/decode.js +3 -2
  46. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +2 -2
  47. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  48. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +6 -5
  49. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  50. package/dist/cjs/src/transaction/descriptor/parse.js +3 -4
  51. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  52. package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +2 -3
  53. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  54. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +2 -3
  55. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -2
  56. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  57. package/dist/cjs/src/transaction/explainTransaction.js +1 -1
  58. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  59. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +3 -3
  60. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +4 -4
  61. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  62. package/dist/cjs/src/transaction/fixedScript/replayProtection.js +1 -1
  63. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +2 -2
  64. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  65. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +1 -1
  66. package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -1
  67. package/dist/cjs/src/transaction/parseTransaction.js +2 -3
  68. package/dist/cjs/src/transaction/recipient.d.ts +6 -3
  69. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  70. package/dist/cjs/src/transaction/recipient.js +18 -7
  71. package/dist/cjs/src/transaction/signTransaction.js +2 -2
  72. package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -1
  73. package/dist/cjs/src/transaction/verifyTransaction.js +2 -3
  74. package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
  75. package/dist/cjs/test/unit/descriptorAddress.js +24 -4
  76. package/dist/cjs/test/unit/impl/bch/unit/bch.js +9 -1
  77. package/dist/cjs/test/unit/impl/zec/unit/address.js +140 -1
  78. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +2 -2
  79. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +2 -2
  80. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +2 -2
  81. package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
  82. package/dist/cjs/test/unit/recovery/mock.js +5 -3
  83. package/dist/cjs/test/unit/tbtcstx.d.ts +2 -0
  84. package/dist/cjs/test/unit/tbtcstx.d.ts.map +1 -0
  85. package/dist/cjs/test/unit/tbtcstx.js +60 -0
  86. package/dist/cjs/test/unit/tbtcstxprivate1.d.ts +2 -0
  87. package/dist/cjs/test/unit/tbtcstxprivate1.d.ts.map +1 -0
  88. package/dist/cjs/test/unit/tbtcstxprivate1.js +61 -0
  89. package/dist/cjs/test/unit/transaction/addressCodec.d.ts +2 -0
  90. package/dist/cjs/test/unit/transaction/addressCodec.d.ts.map +1 -0
  91. package/dist/cjs/test/unit/transaction/addressCodec.js +30 -0
  92. package/dist/cjs/test/unit/transaction.js +2 -2
  93. package/dist/cjs/test/unit/util/address.d.ts +2 -1
  94. package/dist/cjs/test/unit/util/address.d.ts.map +1 -1
  95. package/dist/cjs/test/unit/util/address.js +3 -2
  96. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -1
  97. package/dist/cjs/test/unit/util/nockIndexerAPI.js +3 -4
  98. package/dist/cjs/test/unit/util/transaction.d.ts +1 -1
  99. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
  100. package/dist/cjs/test/unit/util/transaction.js +5 -4
  101. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
  102. package/dist/cjs/test/unit/util/unspents.js +3 -3
  103. package/dist/cjs/test/unit/util/utxoCoins.d.ts +2 -2
  104. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
  105. package/dist/cjs/test/unit/util/utxoCoins.js +17 -33
  106. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  107. package/dist/esm/abstractUtxoCoin.d.ts +7 -2
  108. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  109. package/dist/esm/abstractUtxoCoin.js +21 -36
  110. package/dist/esm/address/fixedScript.d.ts +4 -4
  111. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  112. package/dist/esm/address/fixedScript.js +4 -3
  113. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  114. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  115. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -4
  116. package/dist/esm/impl/bch/bch.d.ts +15 -1
  117. package/dist/esm/impl/bch/bch.d.ts.map +1 -1
  118. package/dist/esm/impl/bch/bch.js +29 -5
  119. package/dist/esm/impl/btc/index.d.ts +2 -0
  120. package/dist/esm/impl/btc/index.d.ts.map +1 -1
  121. package/dist/esm/impl/btc/index.js +3 -1
  122. package/dist/esm/impl/btc/inscriptionBuilder.js +4 -4
  123. package/dist/esm/impl/btc/tbtcstx.d.ts +10 -0
  124. package/dist/esm/impl/btc/tbtcstx.d.ts.map +1 -0
  125. package/dist/esm/impl/btc/tbtcstx.js +14 -0
  126. package/dist/esm/impl/btc/tbtcstxprivate1.d.ts +9 -0
  127. package/dist/esm/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
  128. package/dist/esm/impl/btc/tbtcstxprivate1.js +11 -0
  129. package/dist/esm/impl/zec/address.d.ts +45 -0
  130. package/dist/esm/impl/zec/address.d.ts.map +1 -1
  131. package/dist/esm/impl/zec/address.js +65 -2
  132. package/dist/esm/impl/zec/recipients.d.ts +2 -1
  133. package/dist/esm/impl/zec/recipients.d.ts.map +1 -1
  134. package/dist/esm/impl/zec/recipients.js +1 -1
  135. package/dist/esm/impl/zec/types.d.ts +0 -2
  136. package/dist/esm/impl/zec/types.d.ts.map +1 -1
  137. package/dist/esm/impl/zec/types.js +1 -1
  138. package/dist/esm/impl/zec/zec.d.ts +2 -0
  139. package/dist/esm/impl/zec/zec.d.ts.map +1 -1
  140. package/dist/esm/impl/zec/zec.js +6 -3
  141. package/dist/esm/names.d.ts +5 -2
  142. package/dist/esm/names.d.ts.map +1 -1
  143. package/dist/esm/names.js +18 -1
  144. package/dist/esm/recovery/backupKeyRecovery.d.ts +2 -2
  145. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  146. package/dist/esm/recovery/backupKeyRecovery.js +6 -6
  147. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  148. package/dist/esm/recovery/crossChainRecovery.js +4 -4
  149. package/dist/esm/transaction/decode.d.ts +2 -2
  150. package/dist/esm/transaction/decode.d.ts.map +1 -1
  151. package/dist/esm/transaction/decode.js +3 -2
  152. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +2 -2
  153. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  154. package/dist/esm/transaction/descriptor/explainPsbt.js +6 -5
  155. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  156. package/dist/esm/transaction/descriptor/parse.js +3 -4
  157. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  158. package/dist/esm/transaction/descriptor/parseToAmountType.js +2 -3
  159. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  160. package/dist/esm/transaction/descriptor/verifyTransaction.js +2 -3
  161. package/dist/esm/transaction/explainTransaction.d.ts +2 -2
  162. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  163. package/dist/esm/transaction/explainTransaction.js +1 -1
  164. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  165. package/dist/esm/transaction/fixedScript/parseTransaction.js +3 -3
  166. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +4 -4
  167. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  168. package/dist/esm/transaction/fixedScript/replayProtection.js +1 -1
  169. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +2 -2
  170. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  171. package/dist/esm/transaction/fixedScript/signTransaction.js +1 -1
  172. package/dist/esm/transaction/parseTransaction.d.ts.map +1 -1
  173. package/dist/esm/transaction/parseTransaction.js +2 -3
  174. package/dist/esm/transaction/recipient.d.ts +6 -3
  175. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  176. package/dist/esm/transaction/recipient.js +18 -7
  177. package/dist/esm/transaction/signTransaction.js +2 -2
  178. package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -1
  179. package/dist/esm/transaction/verifyTransaction.js +2 -3
  180. package/package.json +6 -5
@@ -32,7 +32,7 @@ function createTestUnspents() {
32
32
  * Clone a PSBT - necessary because formatBackupKeyRecoveryResult mutates when finalizing.
33
33
  */
34
34
  function clonePsbt(psbt) {
35
- return wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt.serialize(), coin.name);
35
+ return wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt.serialize(), coin.wasmName);
36
36
  }
37
37
  describe('formatBackupKeyRecoveryResult', function () {
38
38
  const { walletKeys: externalWallet } = (0, util_1.createWasmWalletKeys)('external');
@@ -186,4 +186,4 @@ describe('formatBackupKeyRecoveryResult', function () {
186
186
  });
187
187
  });
188
188
  });
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFHeEMsZ0RBQTBFO0FBRTFFLHNDQUtzQjtBQUV0QixrQ0FTaUI7QUFFakIsaUVBQWlFO0FBQ2pFLE1BQU0sSUFBSSxHQUFHLGdCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFFLENBQUM7QUFDN0QsTUFBTSxVQUFVLEdBQUcsV0FBb0IsQ0FBQztBQUV4QyxrREFBa0Q7QUFDbEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSwrQkFBd0IsR0FBRSxDQUFDO0FBRXhGOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxPQUF5RDtJQUNqRixPQUFPO1FBQ0wsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCO0tBQ2xDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsT0FBTztRQUNMLElBQUEsZ0JBQVMsRUFBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJ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LEVBQUUscUJBQXFCO2dCQUNqQyxJQUFJLEVBQUUsV0FBVztnQkFDakIsbUJBQW1CO2dCQUNuQixRQUFRO2FBQ1QsQ0FBb0MsQ0FBQztZQUV0QyxJQUFBLHdCQUFpQixFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVDLElBQUEsd0JBQWlCLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRXBDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHdCQUFZLEVBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUJBQWlCLEVBQUUsS0FBSztZQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLG1DQUE2QixFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xFLFVBQVUsRUFBRSxxQkFBcUI7Z0JBQ2pDLElBQUksRUFBRSxXQUFXO2dCQUNqQixtQkFBbUI7Z0JBQ25CLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsaUJBQVUsRUFBQyxJQUFJLEVBQUUsOENBQThDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0YsSUFBQSxzQkFBZSxFQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCSVAzMiwgZml4ZWRTY3JpcHRXYWxsZXQsIGhhc1BzYnRNYWdpYyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQge1xuICBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyxcbiAgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbixcbiAgZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQsXG4gIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB0eXBlIHsgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uLy4uLy4uL3NyYy91bnNwZW50JztcbmltcG9ydCB7XG4gIGFzc2VydEVxdWFsSlNPTixcbiAgYXNzZXJ0SGFzUHJvcGVydHksXG4gIGNyZWF0ZVdhc21XYWxsZXRLZXlzLFxuICBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gIGdldEZpeHR1cmUsXG4gIGdldFdhbGxldEFkZHJlc3MsXG4gIHRvVW5zcGVudCxcbiAgdXR4b0NvaW5zLFxufSBmcm9tICcuLi91dGlsJztcblxuLy8gVXNlIHRidGMgZm9yIGFsbCB0ZXN0cyAtIGZvcm1hdHRpbmcgbG9naWMgZG9lc24ndCB2YXJ5IGJ5IGNvaW5cbmNvbnN0IGNvaW4gPSB1dHhvQ29pbnMuZmluZCgoYykgPT4gYy5nZXRDaGFpbigpID09PSAndGJ0YycpITtcbmNvbnN0IHNjcmlwdFR5cGUgPSAncDJzaFAyd3NoJyBhcyBjb25zdDtcblxuLy8gR2V0IGRlZmF1bHQgd2FzbSB3YWxsZXQga2V5cyAoeHB1YnMgYW5kIHhwcml2cylcbmNvbnN0IHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCB4cHVicywgeHByaXZzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcblxuLyoqXG4gKiBCdWlsZCBzaWduaW5nIGtleXMgdHJpcGxlIHdpdGggc3BlY2lmaWVkIG5ldXRlciBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBidWlsZFNpZ25pbmdLZXlzKG9wdGlvbnM6IHsgbmV1dGVyVXNlcj86IGJvb2xlYW47IG5ldXRlckJhY2t1cD86IGJvb2xlYW4gfSk6IFRyaXBsZTxCSVAzMj4ge1xuICByZXR1cm4gW1xuICAgIG9wdGlvbnMubmV1dGVyVXNlciA/IHhwdWJzWzBdIDogeHByaXZzWzBdLFxuICAgIG9wdGlvbnMubmV1dGVyQmFja3VwID8geHB1YnNbMV0gOiB4cHJpdnNbMV0sXG4gICAgeHB1YnNbMl0sIC8vIGJpdGdvIGlzIGFsd2F5cyB4cHViXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRlc3RVbnNwZW50cygpOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSB7XG4gIHJldHVybiBbXG4gICAgdG9VbnNwZW50KHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCgxZTgpIH0sIDAsIGNvaW4ubmFtZSwgZGVmYXVsdFdhc21XYWxsZXRLZXlzKSxcbiAgICB0b1Vuc3BlbnQoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDJlOCkgfSwgMCwgY29pbi5uYW1lLCBkZWZhdWx0V2FzbVdhbGxldEtleXMpLFxuICBdO1xufVxuXG4vKipcbiAqIENsb25lIGEgUFNCVCAtIG5lY2Vzc2FyeSBiZWNhdXNlIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0IG11dGF0ZXMgd2hlbiBmaW5hbGl6aW5nLlxuICovXG5mdW5jdGlvbiBjbG9uZVBzYnQocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidC5zZXJpYWxpemUoKSwgY29pbi5uYW1lKTtcbn1cblxuZGVzY3JpYmUoJ2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHdhbGxldEtleXM6IGV4dGVybmFsV2FsbGV0IH0gPSBjcmVhdGVXYXNtV2FsbGV0S2V5cygnZXh0ZXJuYWwnKTtcbiAgY29uc3QgcmVjb3ZlcnlEZXN0aW5hdGlvbiA9IGdldFdhbGxldEFkZHJlc3MoY29pbi5uYW1lLCBleHRlcm5hbFdhbGxldCk7XG4gIGNvbnN0IGZlZVJhdGVTYXRWQiA9IDEwMDtcblxuICBkZXNjcmliZSgndW5zaWduZWQgc3dlZXAgKG5vIHNpZ25hdHVyZXMpJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG4gICAgbGV0IHNpZ25pbmdLZXlzOiBUcmlwbGU8QklQMzI+O1xuICAgIGxldCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W107XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdW5zcGVudHMgPSBjcmVhdGVUZXN0VW5zcGVudHMoKTtcbiAgICAgIHNpZ25pbmdLZXlzID0gYnVpbGRTaWduaW5nS2V5cyh7IG5ldXRlclVzZXI6IHRydWUsIG5ldXRlckJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICAgICAgY29pbi5uYW1lLFxuICAgICAgICB7IHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cywga2V5czogc2lnbmluZ0tleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiB9LFxuICAgICAgICB1bnNwZW50c1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB3aXRoIFBTQlQgaGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSkgYXMgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvO1xuXG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICd0eEhleCcpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAndHhJbmZvJyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdmZWVJbmZvJyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdjb2luJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmNvaW4hLCBjb2luLmdldENoYWluKCkpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50eEhleCwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGhhc1BzYnRNYWdpYyh0eEJ1ZiksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LXVuc2lnbmVkJywgcmVzdWx0KTtcbiAgICAgIGFzc2VydEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS1JTIHJlY292ZXJ5IHdpdGgga2V5dGVybmFsIChsZWdhY3kgZm9ybWF0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCBzaWduaW5nS2V5czogVHJpcGxlPEJJUDMyPjtcbiAgICBsZXQgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3BlbnRzID0gY3JlYXRlVGVzdFVuc3BlbnRzKCk7XG4gICAgICBzaWduaW5nS2V5cyA9IGJ1aWxkU2lnbmluZ0tleXMoeyBuZXV0ZXJVc2VyOiBmYWxzZSwgbmV1dGVyQmFja3VwOiB0cnVlIH0pO1xuICAgICAgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgICAgICBjb2luLm5hbWUsXG4gICAgICAgIHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCBrZXlzOiBzaWduaW5nS2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCIH0sXG4gICAgICAgIHVuc3BlbnRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIGxlZ2FjeSB0eCBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAga3JzUHJvdmlkZXI6ICdrZXl0ZXJuYWwnLFxuICAgICAgICBiYWNrdXBLZXk6ICd0ZXN0LWJhY2t1cC1rZXknLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3RyYW5zYWN0aW9uSGV4Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdjb2luJyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdiYWNrdXBLZXknKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3JlY292ZXJ5QW1vdW50Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdpbnB1dHMnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuYmFja3VwS2V5ISwgJ3Rlc3QtYmFja3VwLWtleScpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChoYXNQc2J0TWFnaWModHhCdWYpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0Y2hlcyBmaXh0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIGtyc1Byb3ZpZGVyOiAna2V5dGVybmFsJyxcbiAgICAgICAgYmFja3VwS2V5OiAndGVzdC1iYWNrdXAta2V5JyxcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSBhd2FpdCBnZXRGaXh0dXJlKGNvaW4sICdyZWNvdmVyeS9mb3JtYXRCYWNrdXBLZXlSZWNvdmVyeS1rcnMta2V5dGVybmFsJywgcmVzdWx0KTtcbiAgICAgIGFzc2VydEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS1JTIHJlY292ZXJ5IHdpdGggZGFpIChQU0JUIGZvcm1hdCknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBsZXQgc2lnbmluZ0tleXM6IFRyaXBsZTxCSVAzMj47XG4gICAgbGV0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICB1bnNwZW50cyA9IGNyZWF0ZVRlc3RVbnNwZW50cygpO1xuICAgICAgc2lnbmluZ0tleXMgPSBidWlsZFNpZ25pbmdLZXlzKHsgbmV1dGVyVXNlcjogZmFsc2UsIG5ldXRlckJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICAgICAgY29pbi5uYW1lLFxuICAgICAgICB7IHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cywga2V5czogc2lnbmluZ0tleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiB9LFxuICAgICAgICB1bnNwZW50c1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBQU0JUIGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2RhaScsXG4gICAgICAgIGJhY2t1cEtleTogJ3Rlc3QtYmFja3VwLWtleScsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSkgYXMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAndHJhbnNhY3Rpb25IZXgnKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2NvaW4nKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2JhY2t1cEtleScpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAncmVjb3ZlcnlBbW91bnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuYmFja3VwS2V5ISwgJ3Rlc3QtYmFja3VwLWtleScpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChoYXNQc2J0TWFnaWModHhCdWYpLCB0cnVlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuaW5wdXRzLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2RhaScsXG4gICAgICAgIGJhY2t1cEtleTogJ3Rlc3QtYmFja3VwLWtleScsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmaXh0dXJlID0gYXdhaXQgZ2V0Rml4dHVyZShjb2luLCAncmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3Zlcnkta3JzLWRhaScsIHJlc3VsdCk7XG4gICAgICBhc3NlcnRFcXVhbEpTT04ocmVzdWx0LCBmaXh0dXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Z1bGwgcmVjb3ZlcnkgKHVzZXIgKyBiYWNrdXAgc2lnbmF0dXJlcyknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBsZXQgc2lnbmluZ0tleXM6IFRyaXBsZTxCSVAzMj47XG4gICAgbGV0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICB1bnNwZW50cyA9IGNyZWF0ZVRlc3RVbnNwZW50cygpO1xuICAgICAgc2lnbmluZ0tleXMgPSBidWlsZFNpZ25pbmdLZXlzKHsgbmV1dGVyVXNlcjogZmFsc2UsIG5ldXRlckJhY2t1cDogZmFsc2UgfSk7XG4gICAgICBwc2J0ID0gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gICAgICAgIGNvaW4ubmFtZSxcbiAgICAgICAgeyB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsIGtleXM6IHNpZ25pbmdLZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uLCBmZWVSYXRlU2F0VkIgfSxcbiAgICAgICAgdW5zcGVudHNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggZmluYWxpemVkIHR4IGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3RyYW5zYWN0aW9uSGV4Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdpbnB1dHMnKTtcblxuICAgICAgY29uc3QgdHhCdWYgPSBCdWZmZXIuZnJvbShyZXN1bHQudHJhbnNhY3Rpb25IZXghLCAnaGV4Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaGFzUHNidE1hZ2ljKHR4QnVmKSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LWZ1bGx5U2lnbmVkJywgcmVzdWx0KTtcbiAgICAgIGFzc2VydEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFHeEMsZ0RBQTBFO0FBRTFFLHNDQUtzQjtBQUV0QixrQ0FTaUI7QUFFakIsaUVBQWlFO0FBQ2pFLE1BQU0sSUFBSSxHQUFHLGdCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFFLENBQUM7QUFDN0QsTUFBTSxVQUFVLEdBQUcsV0FBb0IsQ0FBQztBQUV4QyxrREFBa0Q7QUFDbEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSwrQkFBd0IsR0FBRSxDQUFDO0FBRXhGOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxPQUF5RDtJQUNqRixPQUFPO1FBQ0wsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCO0tBQ2xDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsT0FBTztRQUNMLElBQUEsZ0JBQVMsRUFBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJ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LEVBQUUscUJBQXFCO2dCQUNqQyxJQUFJLEVBQUUsV0FBVztnQkFDakIsbUJBQW1CO2dCQUNuQixRQUFRO2FBQ1QsQ0FBb0MsQ0FBQztZQUV0QyxJQUFBLHdCQUFpQixFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVDLElBQUEsd0JBQWlCLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRXBDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHdCQUFZLEVBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUJBQWlCLEVBQUUsS0FBSztZQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLG1DQUE2QixFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xFLFVBQVUsRUFBRSxxQkFBcUI7Z0JBQ2pDLElBQUksRUFBRSxXQUFXO2dCQUNqQixtQkFBbUI7Z0JBQ25CLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsaUJBQVUsRUFBQyxJQUFJLEVBQUUsOENBQThDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0YsSUFBQSxzQkFBZSxFQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCSVAzMiwgZml4ZWRTY3JpcHRXYWxsZXQsIGhhc1BzYnRNYWdpYyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQge1xuICBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyxcbiAgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbixcbiAgZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQsXG4gIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB0eXBlIHsgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uLy4uLy4uL3NyYy91bnNwZW50JztcbmltcG9ydCB7XG4gIGFzc2VydEVxdWFsSlNPTixcbiAgYXNzZXJ0SGFzUHJvcGVydHksXG4gIGNyZWF0ZVdhc21XYWxsZXRLZXlzLFxuICBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gIGdldEZpeHR1cmUsXG4gIGdldFdhbGxldEFkZHJlc3MsXG4gIHRvVW5zcGVudCxcbiAgdXR4b0NvaW5zLFxufSBmcm9tICcuLi91dGlsJztcblxuLy8gVXNlIHRidGMgZm9yIGFsbCB0ZXN0cyAtIGZvcm1hdHRpbmcgbG9naWMgZG9lc24ndCB2YXJ5IGJ5IGNvaW5cbmNvbnN0IGNvaW4gPSB1dHhvQ29pbnMuZmluZCgoYykgPT4gYy5nZXRDaGFpbigpID09PSAndGJ0YycpITtcbmNvbnN0IHNjcmlwdFR5cGUgPSAncDJzaFAyd3NoJyBhcyBjb25zdDtcblxuLy8gR2V0IGRlZmF1bHQgd2FzbSB3YWxsZXQga2V5cyAoeHB1YnMgYW5kIHhwcml2cylcbmNvbnN0IHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCB4cHVicywgeHByaXZzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcblxuLyoqXG4gKiBCdWlsZCBzaWduaW5nIGtleXMgdHJpcGxlIHdpdGggc3BlY2lmaWVkIG5ldXRlciBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBidWlsZFNpZ25pbmdLZXlzKG9wdGlvbnM6IHsgbmV1dGVyVXNlcj86IGJvb2xlYW47IG5ldXRlckJhY2t1cD86IGJvb2xlYW4gfSk6IFRyaXBsZTxCSVAzMj4ge1xuICByZXR1cm4gW1xuICAgIG9wdGlvbnMubmV1dGVyVXNlciA/IHhwdWJzWzBdIDogeHByaXZzWzBdLFxuICAgIG9wdGlvbnMubmV1dGVyQmFja3VwID8geHB1YnNbMV0gOiB4cHJpdnNbMV0sXG4gICAgeHB1YnNbMl0sIC8vIGJpdGdvIGlzIGFsd2F5cyB4cHViXG4gIF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRlc3RVbnNwZW50cygpOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSB7XG4gIHJldHVybiBbXG4gICAgdG9VbnNwZW50KHsgc2NyaXB0VHlwZSwgdmFsdWU6IEJpZ0ludCgxZTgpIH0sIDAsIGNvaW4ubmFtZSwgZGVmYXVsdFdhc21XYWxsZXRLZXlzKSxcbiAgICB0b1Vuc3BlbnQoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDJlOCkgfSwgMCwgY29pbi5uYW1lLCBkZWZhdWx0V2FzbVdhbGxldEtleXMpLFxuICBdO1xufVxuXG4vKipcbiAqIENsb25lIGEgUFNCVCAtIG5lY2Vzc2FyeSBiZWNhdXNlIGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0IG11dGF0ZXMgd2hlbiBmaW5hbGl6aW5nLlxuICovXG5mdW5jdGlvbiBjbG9uZVBzYnQocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0KTogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHtcbiAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidC5mcm9tQnl0ZXMocHNidC5zZXJpYWxpemUoKSwgY29pbi53YXNtTmFtZSk7XG59XG5cbmRlc2NyaWJlKCdmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgeyB3YWxsZXRLZXlzOiBleHRlcm5hbFdhbGxldCB9ID0gY3JlYXRlV2FzbVdhbGxldEtleXMoJ2V4dGVybmFsJyk7XG4gIGNvbnN0IHJlY292ZXJ5RGVzdGluYXRpb24gPSBnZXRXYWxsZXRBZGRyZXNzKGNvaW4ubmFtZSwgZXh0ZXJuYWxXYWxsZXQpO1xuICBjb25zdCBmZWVSYXRlU2F0VkIgPSAxMDA7XG5cbiAgZGVzY3JpYmUoJ3Vuc2lnbmVkIHN3ZWVwIChubyBzaWduYXR1cmVzKScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCBzaWduaW5nS2V5czogVHJpcGxlPEJJUDMyPjtcbiAgICBsZXQgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3BlbnRzID0gY3JlYXRlVGVzdFVuc3BlbnRzKCk7XG4gICAgICBzaWduaW5nS2V5cyA9IGJ1aWxkU2lnbmluZ0tleXMoeyBuZXV0ZXJVc2VyOiB0cnVlLCBuZXV0ZXJCYWNrdXA6IHRydWUgfSk7XG4gICAgICBwc2J0ID0gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gICAgICAgIGNvaW4ubmFtZSxcbiAgICAgICAgeyB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsIGtleXM6IHNpZ25pbmdLZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uLCBmZWVSYXRlU2F0VkIgfSxcbiAgICAgICAgdW5zcGVudHNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8gd2l0aCBQU0JUIGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbztcblxuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAndHhIZXgnKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3R4SW5mbycpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAnZmVlSW5mbycpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAnY29pbicpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5jb2luISwgY29pbi5nZXRDaGFpbigpKTtcblxuICAgICAgY29uc3QgdHhCdWYgPSBCdWZmZXIuZnJvbShyZXN1bHQudHhIZXgsICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChoYXNQc2J0TWFnaWModHhCdWYpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIGZpeHR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSBhd2FpdCBnZXRGaXh0dXJlKGNvaW4sICdyZWNvdmVyeS9mb3JtYXRCYWNrdXBLZXlSZWNvdmVyeS11bnNpZ25lZCcsIHJlc3VsdCk7XG4gICAgICBhc3NlcnRFcXVhbEpTT04ocmVzdWx0LCBmaXh0dXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tSUyByZWNvdmVyeSB3aXRoIGtleXRlcm5hbCAobGVnYWN5IGZvcm1hdCknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBsZXQgc2lnbmluZ0tleXM6IFRyaXBsZTxCSVAzMj47XG4gICAgbGV0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICB1bnNwZW50cyA9IGNyZWF0ZVRlc3RVbnNwZW50cygpO1xuICAgICAgc2lnbmluZ0tleXMgPSBidWlsZFNpZ25pbmdLZXlzKHsgbmV1dGVyVXNlcjogZmFsc2UsIG5ldXRlckJhY2t1cDogdHJ1ZSB9KTtcbiAgICAgIHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICAgICAgY29pbi5uYW1lLFxuICAgICAgICB7IHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cywga2V5czogc2lnbmluZ0tleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiB9LFxuICAgICAgICB1bnNwZW50c1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBsZWdhY3kgdHggaGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIGtyc1Byb3ZpZGVyOiAna2V5dGVybmFsJyxcbiAgICAgICAgYmFja3VwS2V5OiAndGVzdC1iYWNrdXAta2V5JyxcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KSBhcyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uO1xuXG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICd0cmFuc2FjdGlvbkhleCcpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAnY29pbicpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAnYmFja3VwS2V5Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdyZWNvdmVyeUFtb3VudCcpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAnaW5wdXRzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmJhY2t1cEtleSEsICd0ZXN0LWJhY2t1cC1rZXknKTtcblxuICAgICAgY29uc3QgdHhCdWYgPSBCdWZmZXIuZnJvbShyZXN1bHQudHJhbnNhY3Rpb25IZXghLCAnaGV4Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaGFzUHNidE1hZ2ljKHR4QnVmKSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21hdGNoZXMgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2tleXRlcm5hbCcsXG4gICAgICAgIGJhY2t1cEtleTogJ3Rlc3QtYmFja3VwLWtleScsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmaXh0dXJlID0gYXdhaXQgZ2V0Rml4dHVyZShjb2luLCAncmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3Zlcnkta3JzLWtleXRlcm5hbCcsIHJlc3VsdCk7XG4gICAgICBhc3NlcnRFcXVhbEpTT04ocmVzdWx0LCBmaXh0dXJlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tSUyByZWNvdmVyeSB3aXRoIGRhaSAoUFNCVCBmb3JtYXQpJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG4gICAgbGV0IHNpZ25pbmdLZXlzOiBUcmlwbGU8QklQMzI+O1xuICAgIGxldCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W107XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdW5zcGVudHMgPSBjcmVhdGVUZXN0VW5zcGVudHMoKTtcbiAgICAgIHNpZ25pbmdLZXlzID0gYnVpbGRTaWduaW5nS2V5cyh7IG5ldXRlclVzZXI6IGZhbHNlLCBuZXV0ZXJCYWNrdXA6IHRydWUgfSk7XG4gICAgICBwc2J0ID0gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gICAgICAgIGNvaW4ubmFtZSxcbiAgICAgICAgeyB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsIGtleXM6IHNpZ25pbmdLZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uLCBmZWVSYXRlU2F0VkIgfSxcbiAgICAgICAgdW5zcGVudHNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggUFNCVCBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAga3JzUHJvdmlkZXI6ICdkYWknLFxuICAgICAgICBiYWNrdXBLZXk6ICd0ZXN0LWJhY2t1cC1rZXknLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pIGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG5cbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3RyYW5zYWN0aW9uSGV4Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdjb2luJyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdiYWNrdXBLZXknKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3JlY292ZXJ5QW1vdW50Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmJhY2t1cEtleSEsICd0ZXN0LWJhY2t1cC1rZXknKTtcblxuICAgICAgY29uc3QgdHhCdWYgPSBCdWZmZXIuZnJvbShyZXN1bHQudHJhbnNhY3Rpb25IZXghLCAnaGV4Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaGFzUHNidE1hZ2ljKHR4QnVmKSwgdHJ1ZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmlucHV0cywgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIGZpeHR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAga3JzUHJvdmlkZXI6ICdkYWknLFxuICAgICAgICBiYWNrdXBLZXk6ICd0ZXN0LWJhY2t1cC1rZXknLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LWtycy1kYWknLCByZXN1bHQpO1xuICAgICAgYXNzZXJ0RXF1YWxKU09OKHJlc3VsdCwgZml4dHVyZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmdWxsIHJlY292ZXJ5ICh1c2VyICsgYmFja3VwIHNpZ25hdHVyZXMpJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG4gICAgbGV0IHNpZ25pbmdLZXlzOiBUcmlwbGU8QklQMzI+O1xuICAgIGxldCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W107XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdW5zcGVudHMgPSBjcmVhdGVUZXN0VW5zcGVudHMoKTtcbiAgICAgIHNpZ25pbmdLZXlzID0gYnVpbGRTaWduaW5nS2V5cyh7IG5ldXRlclVzZXI6IGZhbHNlLCBuZXV0ZXJCYWNrdXA6IGZhbHNlIH0pO1xuICAgICAgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgICAgICBjb2luLm5hbWUsXG4gICAgICAgIHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCBrZXlzOiBzaWduaW5nS2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCIH0sXG4gICAgICAgIHVuc3BlbnRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIGZpbmFsaXplZCB0eCBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KSBhcyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uO1xuXG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICd0cmFuc2FjdGlvbkhleCcpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAnaW5wdXRzJyk7XG5cbiAgICAgIGNvbnN0IHR4QnVmID0gQnVmZmVyLmZyb20ocmVzdWx0LnRyYW5zYWN0aW9uSGV4ISwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGhhc1BzYnRNYWdpYyh0eEJ1ZiksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIGZpeHR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSBhd2FpdCBnZXRGaXh0dXJlKGNvaW4sICdyZWNvdmVyeS9mb3JtYXRCYWNrdXBLZXlSZWNvdmVyeS1mdWxseVNpZ25lZCcsIHJlc3VsdCk7XG4gICAgICBhc3NlcnRFcXVhbEpTT04ocmVzdWx0LCBmaXh0dXJlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../../../test/unit/recovery/mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EAAiB,KAAK,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/G,qBAAa,oBAAqB,YAAW,gBAAgB;IACpD,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACnC,OAAO,CAAC,WAAW,CAA8B;gBACrC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;IASjC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQrD,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAUhE,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAItD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAItD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAGvD;AAED;;;GAGG;AACH,qBAAa,8BAA8B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,CAAE,YAAW,gBAAgB;IAK7F,IAAI,EAAE,gBAAgB;IAC7B,oEAAoE;IAC7D,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC;IAC7C,yEAAyE;IAClE,cAAc,EAAE,MAAM,EAAE;IARjC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,aAAa,CAAgB;gBAG5B,IAAI,EAAE,gBAAgB;IAC7B,oEAAoE;IAC7D,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC;IAC7C,yEAAyE;IAClE,cAAc,EAAE,MAAM,EAAE;IAM3B,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAwBhE,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0BtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIrD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAItD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;CAGhE"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../../../test/unit/recovery/mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EAAiB,KAAK,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/G,qBAAa,oBAAqB,YAAW,gBAAgB;IACpD,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACnC,OAAO,CAAC,WAAW,CAA8B;gBACrC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;IASjC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQrD,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAUhE,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAItD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAItD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAGvD;AAED;;;GAGG;AACH,qBAAa,8BAA8B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,CAAE,YAAW,gBAAgB;IAK7F,IAAI,EAAE,gBAAgB;IAC7B,oEAAoE;IAC7D,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC;IAC7C,yEAAyE;IAClE,cAAc,EAAE,MAAM,EAAE;IARjC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,aAAa,CAAgB;gBAG5B,IAAI,EAAE,gBAAgB;IAC7B,oEAAoE;IAC7D,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC;IAC7C,yEAAyE;IAClE,cAAc,EAAE,MAAM,EAAE;IAM3B,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAqBhE,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAuBtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIrD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAItD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;CAGhE"}
@@ -63,7 +63,8 @@ class WasmCrossChainRecoveryProvider {
63
63
  // Format the deposit address for BCH-like coins
64
64
  let formattedAddress = this.depositUnspent.address;
65
65
  if (this.addressFormat === 'cashaddr') {
66
- formattedAddress = wasm_utxo_1.address.fromOutputScriptWithCoin(wasm_utxo_1.address.toOutputScriptWithCoin(this.depositUnspent.address, this.coin.name), this.coin.name, this.addressFormat);
66
+ const script = wasm_utxo_1.address.toOutputScriptWithCoin(this.depositUnspent.address, this.coin.wasmName);
67
+ formattedAddress = wasm_utxo_1.address.fromOutputScriptWithCoin(script, this.coin.wasmName, 'cashaddr');
67
68
  if (formattedAddress.includes(':')) {
68
69
  [, formattedAddress] = formattedAddress.split(':');
69
70
  }
@@ -81,7 +82,8 @@ class WasmCrossChainRecoveryProvider {
81
82
  // Format deposit address for output
82
83
  let outputAddress = this.depositUnspent.address;
83
84
  if (this.addressFormat === 'cashaddr') {
84
- outputAddress = wasm_utxo_1.address.fromOutputScriptWithCoin(wasm_utxo_1.address.toOutputScriptWithCoin(this.depositUnspent.address, this.coin.name), this.coin.name, this.addressFormat);
85
+ const script = wasm_utxo_1.address.toOutputScriptWithCoin(this.depositUnspent.address, this.coin.wasmName);
86
+ outputAddress = wasm_utxo_1.address.fromOutputScriptWithCoin(script, this.coin.wasmName, 'cashaddr');
85
87
  if (outputAddress.includes(':')) {
86
88
  [, outputAddress] = outputAddress.split(':');
87
89
  }
@@ -108,4 +110,4 @@ class WasmCrossChainRecoveryProvider {
108
110
  }
109
111
  }
110
112
  exports.WasmCrossChainRecoveryProvider = WasmCrossChainRecoveryProvider;
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9yZWNvdmVyeS9tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGdEQUF5RTtBQUd6RSwrQ0FBNEM7QUFDNUMsK0NBQTRDO0FBQzVDLGtEQUErRztBQUMvRyxNQUFhLG9CQUFvQjtJQUcvQixZQUFZLFFBQTJCO1FBRC9CLGdCQUFXLEdBQTJCLEVBQUUsQ0FBQztRQUUvQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzFCLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBQSx1QkFBYSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBSSxDQUErQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkYsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBZTtRQUNsQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztRQUMzRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakMsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFL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dEMsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQWU7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBWTtRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVk7UUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQTVFRCx3RUE0RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZGRyZXNzSW5mbywgVHJhbnNhY3Rpb25JTyB9IGZyb20gJ0BiaXRnby9ibG9ja2FwaXMnO1xuaW1wb3J0IHsgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcywgQWRkcmVzc0Zvcm1hdCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBSZWNvdmVyeVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IEJjaCB9IGZyb20gJy4uLy4uLy4uL3NyYy9pbXBsL2JjaCc7XG5pbXBvcnQgeyBCc3YgfSBmcm9tICcuLi8uLi8uLi9zcmMvaW1wbC9ic3YnO1xuaW1wb3J0IHsgcGFyc2VPdXRwdXRJZCwgdHlwZSBVbnNwZW50LCB0eXBlIFVuc3BlbnRXaXRoUHJldlR4LCB0eXBlIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5leHBvcnQgY2xhc3MgTW9ja1JlY292ZXJ5UHJvdmlkZXIgaW1wbGVtZW50cyBSZWNvdmVyeVByb3ZpZGVyIHtcbiAgcHVibGljIHVuc3BlbnRzOiBVbnNwZW50PGJpZ2ludD5bXTtcbiAgcHJpdmF0ZSBwcmV2VHhDYWNoZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBjb25zdHJ1Y3Rvcih1bnNwZW50czogVW5zcGVudDxiaWdpbnQ+W10pIHtcbiAgICB0aGlzLnVuc3BlbnRzID0gdW5zcGVudHM7XG4gICAgdGhpcy51bnNwZW50cy5mb3JFYWNoKCh1KSA9PiB7XG4gICAgICBpZiAoJ3ByZXZUeCcgaW4gdSkge1xuICAgICAgICBjb25zdCB7IHR4aWQgfSA9IHBhcnNlT3V0cHV0SWQodS5pZCk7XG4gICAgICAgIHRoaXMucHJldlR4Q2FjaGVbdHhpZF0gPSAodSBhcyBVbnNwZW50V2l0aFByZXZUeDxiaWdpbnQ+KS5wcmV2VHgudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIGdldEFkZHJlc3NJbmZvKGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8QWRkcmVzc0luZm8+IHtcbiAgICBjb25zdCB1ID0gdGhpcy51bnNwZW50cy5maW5kKCh1KSA9PiB1LmFkZHJlc3MgPT09IGFkZHJlc3MpO1xuICAgIHJldHVybiB7XG4gICAgICB0eENvdW50OiB1ID8gMSA6IDAsXG4gICAgICBiYWxhbmNlOiB1ID8gTnVtYmVyKHUudmFsdWUpIDogMCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0VW5zcGVudHNGb3JBZGRyZXNzZXMoYWRkcmVzc2VzOiBzdHJpbmdbXSk6IFByb21pc2U8VW5zcGVudFtdPiB7XG4gICAgcmV0dXJuIHRoaXMudW5zcGVudHNcbiAgICAgIC5maWx0ZXIoKHUpID0+IGFkZHJlc3Nlcy5pbmNsdWRlcyh1LmFkZHJlc3MpKVxuICAgICAgLm1hcCgodSkgPT4gKHtcbiAgICAgICAgaWQ6IHUuaWQsXG4gICAgICAgIGFkZHJlc3M6IHUuYWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IE51bWJlcih1LnZhbHVlKSxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIGdldFRyYW5zYWN0aW9uSGV4KHR4aWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMucHJldlR4Q2FjaGVbdHhpZF07XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvbklucHV0cyh0eGlkOiBzdHJpbmcpOiBQcm9taXNlPFVuc3BlbnRbXT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm90IGltcGxlbWVudGVkYCk7XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvbklPKHR4aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JTz4ge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm90IGltcGxlbWVudGVkYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcm9zcy1jaGFpbiByZWNvdmVyeSBtb2NrIHByb3ZpZGVyIHVzaW5nIHdhc20tdXR4byBvbmx5IChubyB1dHhvbGliIGRlcGVuZGVuY3kpLlxuICogVXNlcyBkaXJlY3QgdW5zcGVudCBkYXRhIGluc3RlYWQgb2YgcGFyc2luZyBhIHV0eG9saWIgdHJhbnNhY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBXYXNtQ3Jvc3NDaGFpblJlY292ZXJ5UHJvdmlkZXI8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4gaW1wbGVtZW50cyBSZWNvdmVyeVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSBhZGRyZXNzVmVyc2lvbjogJ2Nhc2hhZGRyJyB8ICdiYXNlNTgnO1xuICBwcml2YXRlIGFkZHJlc3NGb3JtYXQ6IEFkZHJlc3NGb3JtYXQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gICAgLyoqIFRoZSB3YWxsZXQgdW5zcGVudCByZXByZXNlbnRpbmcgdGhlIG91dHB1dCBvbiB0aGUgd3JvbmcgY2hhaW4gKi9cbiAgICBwdWJsaWMgZGVwb3NpdFVuc3BlbnQ6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj4sXG4gICAgLyoqIFRoZSBhZGRyZXNzZXMgdGhhdCB3ZXJlIGlucHV0cyB0byB0aGUgb3JpZ2luYWwgZGVwb3NpdCB0cmFuc2FjdGlvbiAqL1xuICAgIHB1YmxpYyBpbnB1dEFkZHJlc3Nlczogc3RyaW5nW11cbiAgKSB7XG4gICAgdGhpcy5hZGRyZXNzRm9ybWF0ID0gdGhpcy5jb2luIGluc3RhbmNlb2YgQmNoICYmICEodGhpcy5jb2luIGluc3RhbmNlb2YgQnN2KSA/ICdjYXNoYWRkcicgOiAnZGVmYXVsdCc7XG4gICAgdGhpcy5hZGRyZXNzVmVyc2lvbiA9IHRoaXMuY29pbiBpbnN0YW5jZW9mIEJjaCAmJiAhKHRoaXMuY29pbiBpbnN0YW5jZW9mIEJzdikgPyAnY2FzaGFkZHInIDogJ2Jhc2U1OCc7XG4gIH1cblxuICBhc3luYyBnZXRVbnNwZW50c0ZvckFkZHJlc3NlcyhhZGRyZXNzZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxVbnNwZW50W10+IHtcbiAgICAvLyBGb3JtYXQgdGhlIGRlcG9zaXQgYWRkcmVzcyBmb3IgQkNILWxpa2UgY29pbnNcbiAgICBsZXQgZm9ybWF0dGVkQWRkcmVzcyA9IHRoaXMuZGVwb3NpdFVuc3BlbnQuYWRkcmVzcztcbiAgICBpZiAodGhpcy5hZGRyZXNzRm9ybWF0ID09PSAnY2FzaGFkZHInKSB7XG4gICAgICBmb3JtYXR0ZWRBZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKFxuICAgICAgICB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKHRoaXMuZGVwb3NpdFVuc3BlbnQuYWRkcmVzcywgdGhpcy5jb2luLm5hbWUpLFxuICAgICAgICB0aGlzLmNvaW4ubmFtZSxcbiAgICAgICAgdGhpcy5hZGRyZXNzRm9ybWF0XG4gICAgICApO1xuICAgICAgaWYgKGZvcm1hdHRlZEFkZHJlc3MuaW5jbHVkZXMoJzonKSkge1xuICAgICAgICBbLCBmb3JtYXR0ZWRBZGRyZXNzXSA9IGZvcm1hdHRlZEFkZHJlc3Muc3BsaXQoJzonKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogdGhpcy5kZXBvc2l0VW5zcGVudC5pZCxcbiAgICAgICAgYWRkcmVzczogZm9ybWF0dGVkQWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IE51bWJlcih0aGlzLmRlcG9zaXRVbnNwZW50LnZhbHVlKSxcbiAgICAgICAgLi4uKHRoaXMuY29pbi5hbW91bnRUeXBlID09PSAnYmlnaW50JyA/IHsgdmFsdWVTdHJpbmc6IHRoaXMuZGVwb3NpdFVuc3BlbnQudmFsdWUudG9TdHJpbmcoKSB9IDoge30pLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgYXN5bmMgZ2V0VHJhbnNhY3Rpb25JTyh0eGlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSU8+IHtcbiAgICAvLyBGb3JtYXQgZGVwb3NpdCBhZGRyZXNzIGZvciBvdXRwdXRcbiAgICBsZXQgb3V0cHV0QWRkcmVzcyA9IHRoaXMuZGVwb3NpdFVuc3BlbnQuYWRkcmVzcztcbiAgICBpZiAodGhpcy5hZGRyZXNzRm9ybWF0ID09PSAnY2FzaGFkZHInKSB7XG4gICAgICBvdXRwdXRBZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKFxuICAgICAgICB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKHRoaXMuZGVwb3NpdFVuc3BlbnQuYWRkcmVzcywgdGhpcy5jb2luLm5hbWUpLFxuICAgICAgICB0aGlzLmNvaW4ubmFtZSxcbiAgICAgICAgdGhpcy5hZGRyZXNzRm9ybWF0XG4gICAgICApO1xuICAgICAgaWYgKG91dHB1dEFkZHJlc3MuaW5jbHVkZXMoJzonKSkge1xuICAgICAgICBbLCBvdXRwdXRBZGRyZXNzXSA9IG91dHB1dEFkZHJlc3Muc3BsaXQoJzonKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXRzOiB0aGlzLmlucHV0QWRkcmVzc2VzLm1hcCgoYWRkcikgPT4ge1xuICAgICAgICBsZXQgYWRkcmVzcyA9IHRoaXMuY29pbi5jYW5vbmljYWxBZGRyZXNzKGFkZHIsIHRoaXMuYWRkcmVzc1ZlcnNpb24pO1xuICAgICAgICBpZiAoYWRkcmVzcy5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgICAgWywgYWRkcmVzc10gPSBhZGRyZXNzLnNwbGl0KCc6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgYWRkcmVzcyB9O1xuICAgICAgfSksXG4gICAgICBvdXRwdXRzOiBbeyBhZGRyZXNzOiBvdXRwdXRBZGRyZXNzIH1dLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRBZGRyZXNzSW5mbyhhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPEFkZHJlc3NJbmZvPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGFzeW5jIGdldFRyYW5zYWN0aW9uSGV4KHR4aWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldFRyYW5zYWN0aW9uSW5wdXRzKHR4aWQ6IHN0cmluZyk6IFByb21pc2U8VW5zcGVudDxUTnVtYmVyPltdPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuIl19
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9yZWNvdmVyeS9tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGdEQUF5RTtBQUd6RSwrQ0FBNEM7QUFDNUMsK0NBQTRDO0FBQzVDLGtEQUErRztBQUMvRyxNQUFhLG9CQUFvQjtJQUcvQixZQUFZLFFBQTJCO1FBRC9CLGdCQUFXLEdBQTJCLEVBQUUsQ0FBQztRQUUvQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzFCLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBQSx1QkFBYSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBSSxDQUErQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkYsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBZTtRQUNsQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztRQUMzRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakMsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFL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Q0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQztTQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBZTtRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFZO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBWTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBdEVELHdFQXNFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3NJbmZvLCBUcmFuc2FjdGlvbklPIH0gZnJvbSAnQGJpdGdvL2Jsb2NrYXBpcyc7XG5pbXBvcnQgeyBhZGRyZXNzIGFzIHdhc21BZGRyZXNzLCBBZGRyZXNzRm9ybWF0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFJlY292ZXJ5UHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgQmNoIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2ltcGwvYmNoJztcbmltcG9ydCB7IEJzdiB9IGZyb20gJy4uLy4uLy4uL3NyYy9pbXBsL2Jzdic7XG5pbXBvcnQgeyBwYXJzZU91dHB1dElkLCB0eXBlIFVuc3BlbnQsIHR5cGUgVW5zcGVudFdpdGhQcmV2VHgsIHR5cGUgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uLy4uLy4uL3NyYy91bnNwZW50JztcbmV4cG9ydCBjbGFzcyBNb2NrUmVjb3ZlcnlQcm92aWRlciBpbXBsZW1lbnRzIFJlY292ZXJ5UHJvdmlkZXIge1xuICBwdWJsaWMgdW5zcGVudHM6IFVuc3BlbnQ8YmlnaW50PltdO1xuICBwcml2YXRlIHByZXZUeENhY2hlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvbnN0cnVjdG9yKHVuc3BlbnRzOiBVbnNwZW50PGJpZ2ludD5bXSkge1xuICAgIHRoaXMudW5zcGVudHMgPSB1bnNwZW50cztcbiAgICB0aGlzLnVuc3BlbnRzLmZvckVhY2goKHUpID0+IHtcbiAgICAgIGlmICgncHJldlR4JyBpbiB1KSB7XG4gICAgICAgIGNvbnN0IHsgdHhpZCB9ID0gcGFyc2VPdXRwdXRJZCh1LmlkKTtcbiAgICAgICAgdGhpcy5wcmV2VHhDYWNoZVt0eGlkXSA9ICh1IGFzIFVuc3BlbnRXaXRoUHJldlR4PGJpZ2ludD4pLnByZXZUeC50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgZ2V0QWRkcmVzc0luZm8oYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxBZGRyZXNzSW5mbz4ge1xuICAgIGNvbnN0IHUgPSB0aGlzLnVuc3BlbnRzLmZpbmQoKHUpID0+IHUuYWRkcmVzcyA9PT0gYWRkcmVzcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR4Q291bnQ6IHUgPyAxIDogMCxcbiAgICAgIGJhbGFuY2U6IHUgPyBOdW1iZXIodS52YWx1ZSkgOiAwLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRVbnNwZW50c0ZvckFkZHJlc3NlcyhhZGRyZXNzZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxVbnNwZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy51bnNwZW50c1xuICAgICAgLmZpbHRlcigodSkgPT4gYWRkcmVzc2VzLmluY2x1ZGVzKHUuYWRkcmVzcykpXG4gICAgICAubWFwKCh1KSA9PiAoe1xuICAgICAgICBpZDogdS5pZCxcbiAgICAgICAgYWRkcmVzczogdS5hZGRyZXNzLFxuICAgICAgICB2YWx1ZTogTnVtYmVyKHUudmFsdWUpLFxuICAgICAgfSkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VHJhbnNhY3Rpb25IZXgodHhpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5wcmV2VHhDYWNoZVt0eGlkXTtcbiAgfVxuXG4gIGdldFRyYW5zYWN0aW9uSW5wdXRzKHR4aWQ6IHN0cmluZyk6IFByb21pc2U8VW5zcGVudFtdPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBub3QgaW1wbGVtZW50ZWRgKTtcbiAgfVxuXG4gIGdldFRyYW5zYWN0aW9uSU8odHhpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbklPPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBub3QgaW1wbGVtZW50ZWRgKTtcbiAgfVxufVxuXG4vKipcbiAqIENyb3NzLWNoYWluIHJlY292ZXJ5IG1vY2sgcHJvdmlkZXIgdXNpbmcgd2FzbS11dHhvIG9ubHkgKG5vIHV0eG9saWIgZGVwZW5kZW5jeSkuXG4gKiBVc2VzIGRpcmVjdCB1bnNwZW50IGRhdGEgaW5zdGVhZCBvZiBwYXJzaW5nIGEgdXR4b2xpYiB0cmFuc2FjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFdhc21Dcm9zc0NoYWluUmVjb3ZlcnlQcm92aWRlcjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiBpbXBsZW1lbnRzIFJlY292ZXJ5UHJvdmlkZXIge1xuICBwcml2YXRlIGFkZHJlc3NWZXJzaW9uOiAnY2FzaGFkZHInIHwgJ2Jhc2U1OCc7XG4gIHByaXZhdGUgYWRkcmVzc0Zvcm1hdDogQWRkcmVzc0Zvcm1hdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgICAvKiogVGhlIHdhbGxldCB1bnNwZW50IHJlcHJlc2VudGluZyB0aGUgb3V0cHV0IG9uIHRoZSB3cm9uZyBjaGFpbiAqL1xuICAgIHB1YmxpYyBkZXBvc2l0VW5zcGVudDogV2FsbGV0VW5zcGVudDxUTnVtYmVyPixcbiAgICAvKiogVGhlIGFkZHJlc3NlcyB0aGF0IHdlcmUgaW5wdXRzIHRvIHRoZSBvcmlnaW5hbCBkZXBvc2l0IHRyYW5zYWN0aW9uICovXG4gICAgcHVibGljIGlucHV0QWRkcmVzc2VzOiBzdHJpbmdbXVxuICApIHtcbiAgICB0aGlzLmFkZHJlc3NGb3JtYXQgPSB0aGlzLmNvaW4gaW5zdGFuY2VvZiBCY2ggJiYgISh0aGlzLmNvaW4gaW5zdGFuY2VvZiBCc3YpID8gJ2Nhc2hhZGRyJyA6ICdkZWZhdWx0JztcbiAgICB0aGlzLmFkZHJlc3NWZXJzaW9uID0gdGhpcy5jb2luIGluc3RhbmNlb2YgQmNoICYmICEodGhpcy5jb2luIGluc3RhbmNlb2YgQnN2KSA/ICdjYXNoYWRkcicgOiAnYmFzZTU4JztcbiAgfVxuXG4gIGFzeW5jIGdldFVuc3BlbnRzRm9yQWRkcmVzc2VzKGFkZHJlc3Nlczogc3RyaW5nW10pOiBQcm9taXNlPFVuc3BlbnRbXT4ge1xuICAgIC8vIEZvcm1hdCB0aGUgZGVwb3NpdCBhZGRyZXNzIGZvciBCQ0gtbGlrZSBjb2luc1xuICAgIGxldCBmb3JtYXR0ZWRBZGRyZXNzID0gdGhpcy5kZXBvc2l0VW5zcGVudC5hZGRyZXNzO1xuICAgIGlmICh0aGlzLmFkZHJlc3NGb3JtYXQgPT09ICdjYXNoYWRkcicpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4odGhpcy5kZXBvc2l0VW5zcGVudC5hZGRyZXNzLCB0aGlzLmNvaW4ud2FzbU5hbWUpO1xuICAgICAgZm9ybWF0dGVkQWRkcmVzcyA9IHdhc21BZGRyZXNzLmZyb21PdXRwdXRTY3JpcHRXaXRoQ29pbihzY3JpcHQsIHRoaXMuY29pbi53YXNtTmFtZSwgJ2Nhc2hhZGRyJyk7XG4gICAgICBpZiAoZm9ybWF0dGVkQWRkcmVzcy5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgIFssIGZvcm1hdHRlZEFkZHJlc3NdID0gZm9ybWF0dGVkQWRkcmVzcy5zcGxpdCgnOicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiB0aGlzLmRlcG9zaXRVbnNwZW50LmlkLFxuICAgICAgICBhZGRyZXNzOiBmb3JtYXR0ZWRBZGRyZXNzLFxuICAgICAgICB2YWx1ZTogTnVtYmVyKHRoaXMuZGVwb3NpdFVuc3BlbnQudmFsdWUpLFxuICAgICAgICAuLi4odGhpcy5jb2luLmFtb3VudFR5cGUgPT09ICdiaWdpbnQnID8geyB2YWx1ZVN0cmluZzogdGhpcy5kZXBvc2l0VW5zcGVudC52YWx1ZS50b1N0cmluZygpIH0gOiB7fSksXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBhc3luYyBnZXRUcmFuc2FjdGlvbklPKHR4aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JTz4ge1xuICAgIC8vIEZvcm1hdCBkZXBvc2l0IGFkZHJlc3MgZm9yIG91dHB1dFxuICAgIGxldCBvdXRwdXRBZGRyZXNzID0gdGhpcy5kZXBvc2l0VW5zcGVudC5hZGRyZXNzO1xuICAgIGlmICh0aGlzLmFkZHJlc3NGb3JtYXQgPT09ICdjYXNoYWRkcicpIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4odGhpcy5kZXBvc2l0VW5zcGVudC5hZGRyZXNzLCB0aGlzLmNvaW4ud2FzbU5hbWUpO1xuICAgICAgb3V0cHV0QWRkcmVzcyA9IHdhc21BZGRyZXNzLmZyb21PdXRwdXRTY3JpcHRXaXRoQ29pbihzY3JpcHQsIHRoaXMuY29pbi53YXNtTmFtZSwgJ2Nhc2hhZGRyJyk7XG4gICAgICBpZiAob3V0cHV0QWRkcmVzcy5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgIFssIG91dHB1dEFkZHJlc3NdID0gb3V0cHV0QWRkcmVzcy5zcGxpdCgnOicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbnB1dHM6IHRoaXMuaW5wdXRBZGRyZXNzZXMubWFwKChhZGRyKSA9PiB7XG4gICAgICAgIGxldCBhZGRyZXNzID0gdGhpcy5jb2luLmNhbm9uaWNhbEFkZHJlc3MoYWRkciwgdGhpcy5hZGRyZXNzVmVyc2lvbik7XG4gICAgICAgIGlmIChhZGRyZXNzLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgICAgICBbLCBhZGRyZXNzXSA9IGFkZHJlc3Muc3BsaXQoJzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBhZGRyZXNzIH07XG4gICAgICB9KSxcbiAgICAgIG91dHB1dHM6IFt7IGFkZHJlc3M6IG91dHB1dEFkZHJlc3MgfV0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldEFkZHJlc3NJbmZvKGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8QWRkcmVzc0luZm8+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VHJhbnNhY3Rpb25IZXgodHhpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0VHJhbnNhY3Rpb25JbnB1dHModHhpZDogc3RyaW5nKTogUHJvbWlzZTxVbnNwZW50PFROdW1iZXI+W10+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tbtcstx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tbtcstx.d.ts","sourceRoot":"","sources":["../../../../test/unit/tbtcstx.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const statics_1 = require("@bitgo/statics");
41
+ const utxolib = __importStar(require("@bitgo/utxo-lib"));
42
+ const src_1 = require("../../src");
43
+ const util_1 = require("./util");
44
+ describe('tbtcstx', function () {
45
+ const coin = src_1.Tbtcstx.createInstance(util_1.defaultBitGo);
46
+ it('uses the public coin name with the testnet utxolib network', function () {
47
+ assert_1.default.strictEqual(coin.getChain(), 'tbtcstx');
48
+ assert_1.default.strictEqual(coin.wasmName, 'tbtcreg');
49
+ assert_1.default.strictEqual(statics_1.Networks.test.bitcoinStx.utxolibName, 'testnet');
50
+ assert_1.default.strictEqual((0, util_1.getNetworkForCoinName)(coin.name), utxolib.networks.testnet);
51
+ });
52
+ it('encodes and decodes private-1 addresses through the tbtcreg codec', function () {
53
+ const script = Buffer.from(`0014${'11'.repeat(20)}`, 'hex');
54
+ const address = coin.addressCodec.encode(script);
55
+ assert_1.default.match(address, /^bcrt1q/);
56
+ assert_1.default.deepStrictEqual(Buffer.from(coin.addressCodec.decode(address)), script);
57
+ assert_1.default.strictEqual(coin.isValidAddress(address), true);
58
+ });
59
+ });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGJ0Y3N0eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90YnRjc3R4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDRDQUEwQztBQUMxQyx5REFBMkM7QUFFM0MsbUNBQW9DO0FBRXBDLGlDQUE2RDtBQUU3RCxRQUFRLENBQUMsU0FBUyxFQUFFO0lBQ2xCLE1BQU0sSUFBSSxHQUFHLGFBQU8sQ0FBQyxjQUFjLENBQUMsbUJBQVksQ0FBQyxDQUFDO0lBRWxELEVBQUUsQ0FBQyw0REFBNEQsRUFBRTtRQUMvRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDL0MsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsNEJBQXFCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakYsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsbUVBQW1FLEVBQUU7UUFDdEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakMsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgTmV0d29ya3MgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmltcG9ydCB7IFRidGNzdHggfSBmcm9tICcuLi8uLi9zcmMnO1xuXG5pbXBvcnQgeyBkZWZhdWx0Qml0R28sIGdldE5ldHdvcmtGb3JDb2luTmFtZSB9IGZyb20gJy4vdXRpbCc7XG5cbmRlc2NyaWJlKCd0YnRjc3R4JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luID0gVGJ0Y3N0eC5jcmVhdGVJbnN0YW5jZShkZWZhdWx0Qml0R28pO1xuXG4gIGl0KCd1c2VzIHRoZSBwdWJsaWMgY29pbiBuYW1lIHdpdGggdGhlIHRlc3RuZXQgdXR4b2xpYiBuZXR3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb2luLmdldENoYWluKCksICd0YnRjc3R4Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvaW4ud2FzbU5hbWUsICd0YnRjcmVnJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKE5ldHdvcmtzLnRlc3QuYml0Y29pblN0eC51dHhvbGliTmFtZSwgJ3Rlc3RuZXQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSksIHV0eG9saWIubmV0d29ya3MudGVzdG5ldCk7XG4gIH0pO1xuXG4gIGl0KCdlbmNvZGVzIGFuZCBkZWNvZGVzIHByaXZhdGUtMSBhZGRyZXNzZXMgdGhyb3VnaCB0aGUgdGJ0Y3JlZyBjb2RlYycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzY3JpcHQgPSBCdWZmZXIuZnJvbShgMDAxNCR7JzExJy5yZXBlYXQoMjApfWAsICdoZXgnKTtcbiAgICBjb25zdCBhZGRyZXNzID0gY29pbi5hZGRyZXNzQ29kZWMuZW5jb2RlKHNjcmlwdCk7XG5cbiAgICBhc3NlcnQubWF0Y2goYWRkcmVzcywgL15iY3J0MXEvKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKGNvaW4uYWRkcmVzc0NvZGVjLmRlY29kZShhZGRyZXNzKSksIHNjcmlwdCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyksIHRydWUpO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tbtcstxprivate1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tbtcstxprivate1.d.ts","sourceRoot":"","sources":["../../../../test/unit/tbtcstxprivate1.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const statics_1 = require("@bitgo/statics");
41
+ const utxolib = __importStar(require("@bitgo/utxo-lib"));
42
+ const src_1 = require("../../src");
43
+ const util_1 = require("./util");
44
+ describe('tbtcstxprivate1', function () {
45
+ const coin = src_1.Tbtcstxprivate1.createInstance(util_1.defaultBitGo);
46
+ it('uses the private-1 public coin name with the testnet utxolib network', function () {
47
+ assert_1.default.strictEqual(coin.getChain(), 'tbtcstxprivate1');
48
+ assert_1.default.strictEqual(coin.getFullName(), 'Stacks Bitcoin (Private-1 Regtest)');
49
+ assert_1.default.strictEqual(coin.wasmName, 'tbtcreg');
50
+ assert_1.default.strictEqual(statics_1.Networks.test.bitcoinStxPrivate1.utxolibName, 'testnet');
51
+ assert_1.default.strictEqual((0, util_1.getNetworkForCoinName)(coin.name), utxolib.networks.testnet);
52
+ });
53
+ it('encodes and decodes private-1 addresses through the tbtcreg codec', function () {
54
+ const script = Buffer.from(`0014${'11'.repeat(20)}`, 'hex');
55
+ const address = coin.addressCodec.encode(script);
56
+ assert_1.default.match(address, /^bcrt1q/);
57
+ assert_1.default.deepStrictEqual(Buffer.from(coin.addressCodec.decode(address)), script);
58
+ assert_1.default.strictEqual(coin.isValidAddress(address), true);
59
+ });
60
+ });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGJ0Y3N0eHByaXZhdGUxLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RidGNzdHhwcml2YXRlMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qiw0Q0FBMEM7QUFDMUMseURBQTJDO0FBRTNDLG1DQUE0QztBQUU1QyxpQ0FBNkQ7QUFFN0QsUUFBUSxDQUFDLGlCQUFpQixFQUFFO0lBQzFCLE1BQU0sSUFBSSxHQUFHLHFCQUFlLENBQUMsY0FBYyxDQUFDLG1CQUFZLENBQUMsQ0FBQztJQUUxRCxFQUFFLENBQUMsc0VBQXNFLEVBQUU7UUFDekUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkQsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLG9DQUFvQyxDQUFDLENBQUM7UUFDN0UsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSw0QkFBcUIsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxtRUFBbUUsRUFBRTtRQUN0RSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpELGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqQyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0UsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBOZXR3b3JrcyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHsgVGJ0Y3N0eHByaXZhdGUxIH0gZnJvbSAnLi4vLi4vc3JjJztcblxuaW1wb3J0IHsgZGVmYXVsdEJpdEdvLCBnZXROZXR3b3JrRm9yQ29pbk5hbWUgfSBmcm9tICcuL3V0aWwnO1xuXG5kZXNjcmliZSgndGJ0Y3N0eHByaXZhdGUxJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luID0gVGJ0Y3N0eHByaXZhdGUxLmNyZWF0ZUluc3RhbmNlKGRlZmF1bHRCaXRHbyk7XG5cbiAgaXQoJ3VzZXMgdGhlIHByaXZhdGUtMSBwdWJsaWMgY29pbiBuYW1lIHdpdGggdGhlIHRlc3RuZXQgdXR4b2xpYiBuZXR3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb2luLmdldENoYWluKCksICd0YnRjc3R4cHJpdmF0ZTEnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29pbi5nZXRGdWxsTmFtZSgpLCAnU3RhY2tzIEJpdGNvaW4gKFByaXZhdGUtMSBSZWd0ZXN0KScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb2luLndhc21OYW1lLCAndGJ0Y3JlZycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChOZXR3b3Jrcy50ZXN0LmJpdGNvaW5TdHhQcml2YXRlMS51dHhvbGliTmFtZSwgJ3Rlc3RuZXQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSksIHV0eG9saWIubmV0d29ya3MudGVzdG5ldCk7XG4gIH0pO1xuXG4gIGl0KCdlbmNvZGVzIGFuZCBkZWNvZGVzIHByaXZhdGUtMSBhZGRyZXNzZXMgdGhyb3VnaCB0aGUgdGJ0Y3JlZyBjb2RlYycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzY3JpcHQgPSBCdWZmZXIuZnJvbShgMDAxNCR7JzExJy5yZXBlYXQoMjApfWAsICdoZXgnKTtcbiAgICBjb25zdCBhZGRyZXNzID0gY29pbi5hZGRyZXNzQ29kZWMuZW5jb2RlKHNjcmlwdCk7XG5cbiAgICBhc3NlcnQubWF0Y2goYWRkcmVzcywgL15iY3J0MXEvKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKGNvaW4uYWRkcmVzc0NvZGVjLmRlY29kZShhZGRyZXNzKSksIHNjcmlwdCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyksIHRydWUpO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=addressCodec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressCodec.d.ts","sourceRoot":"","sources":["../../../../../test/unit/transaction/addressCodec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const recipient_1 = require("../../../src/transaction/recipient");
8
+ describe('AddressCodec', function () {
9
+ const witnessScript = Buffer.from(`0014${'11'.repeat(20)}`, 'hex');
10
+ it('round-trips standard testnet addresses and rejects malformed addresses', function () {
11
+ const codec = new recipient_1.AddressCodec('tbtc');
12
+ const address = codec.encode(witnessScript);
13
+ strict_1.default.match(address, /^tb1q/);
14
+ strict_1.default.deepStrictEqual(Buffer.from(codec.decode(address)), witnessScript);
15
+ strict_1.default.strictEqual(codec.isValidAddress(address), true);
16
+ strict_1.default.strictEqual(codec.isValidAddress(`${address.slice(0, -1)}0`), false);
17
+ });
18
+ it('supports a separate WASM codec name without changing the public coin name', function () {
19
+ const codec = new recipient_1.AddressCodec('tbtc', 'tbtcreg');
20
+ const address = codec.encode(witnessScript);
21
+ strict_1.default.match(address, /^bcrt1q/);
22
+ strict_1.default.deepStrictEqual(Buffer.from(codec.decode(address)), witnessScript);
23
+ strict_1.default.strictEqual(codec.isValidAddress(address), true);
24
+ });
25
+ it('does not treat cashaddr as a general address format', function () {
26
+ const codec = new recipient_1.AddressCodec('bch');
27
+ strict_1.default.strictEqual(codec.isValidAddress('bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a'), false);
28
+ });
29
+ });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0NvZGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uL2FkZHJlc3NDb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdFQUF3QztBQUV4QyxrRUFBa0U7QUFFbEUsUUFBUSxDQUFDLGNBQWMsRUFBRTtJQUN2QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRW5FLEVBQUUsQ0FBQyx3RUFBd0UsRUFBRTtRQUMzRSxNQUFNLEtBQUssR0FBRyxJQUFJLHdCQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU1QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0IsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDMUUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkVBQTJFLEVBQUU7UUFDOUUsTUFBTSxLQUFLLEdBQUcsSUFBSSx3QkFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTVDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqQyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFO1FBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLHdEQUF3RCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQvc3RyaWN0JztcblxuaW1wb3J0IHsgQWRkcmVzc0NvZGVjIH0gZnJvbSAnLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3JlY2lwaWVudCc7XG5cbmRlc2NyaWJlKCdBZGRyZXNzQ29kZWMnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHdpdG5lc3NTY3JpcHQgPSBCdWZmZXIuZnJvbShgMDAxNCR7JzExJy5yZXBlYXQoMjApfWAsICdoZXgnKTtcblxuICBpdCgncm91bmQtdHJpcHMgc3RhbmRhcmQgdGVzdG5ldCBhZGRyZXNzZXMgYW5kIHJlamVjdHMgbWFsZm9ybWVkIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBBZGRyZXNzQ29kZWMoJ3RidGMnKTtcbiAgICBjb25zdCBhZGRyZXNzID0gY29kZWMuZW5jb2RlKHdpdG5lc3NTY3JpcHQpO1xuXG4gICAgYXNzZXJ0Lm1hdGNoKGFkZHJlc3MsIC9edGIxcS8pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKGFkZHJlc3MpKSwgd2l0bmVzc1NjcmlwdCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvZGVjLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29kZWMuaXNWYWxpZEFkZHJlc3MoYCR7YWRkcmVzcy5zbGljZSgwLCAtMSl9MGApLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzdXBwb3J0cyBhIHNlcGFyYXRlIFdBU00gY29kZWMgbmFtZSB3aXRob3V0IGNoYW5naW5nIHRoZSBwdWJsaWMgY29pbiBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IEFkZHJlc3NDb2RlYygndGJ0YycsICd0YnRjcmVnJyk7XG4gICAgY29uc3QgYWRkcmVzcyA9IGNvZGVjLmVuY29kZSh3aXRuZXNzU2NyaXB0KTtcblxuICAgIGFzc2VydC5tYXRjaChhZGRyZXNzLCAvXmJjcnQxcS8pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20oY29kZWMuZGVjb2RlKGFkZHJlc3MpKSwgd2l0bmVzc1NjcmlwdCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvZGVjLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2RvZXMgbm90IHRyZWF0IGNhc2hhZGRyIGFzIGEgZ2VuZXJhbCBhZGRyZXNzIGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBBZGRyZXNzQ29kZWMoJ2JjaCcpO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvZGVjLmlzVmFsaWRBZGRyZXNzKCdiaXRjb2luY2FzaDpxcG0ycXN6bmhrczIzejc2MjltbXM2czRjd2VmNzR2Y3d2eTIyZ2R4NmEnKSwgZmFsc2UpO1xuICB9KTtcbn0pO1xuIl19
@@ -195,7 +195,7 @@ function run(coin, inputScripts, txFormat) {
195
195
  }
196
196
  const unspents = getUnspents();
197
197
  const prevOutputs = unspents.map((u) => ({
198
- script: Buffer.from(wasm_utxo_1.address.toOutputScriptWithCoin(u.address, coin.name)),
198
+ script: Buffer.from(coin.addressCodec.decode(u.address)),
199
199
  value: u.value,
200
200
  }));
201
201
  const transaction = utxolib.bitgo.createTransactionFromBuffer(Buffer.from(tx.txHex, 'hex'), (0, util_1.getNetworkForCoinName)(coin.name), { amountType });
@@ -298,4 +298,4 @@ describe('Transaction Suite', function () {
298
298
  });
299
299
  });
300
300
  });
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpQkFBZTtBQUNmLCtDQUFpQztBQUVqQywwQ0FBNEI7QUFDNUIseURBQTJDO0FBQzNDLDZCQUE4QjtBQUM5Qiw4Q0FBa0U7QUFDbEUsZ0RBQW9GO0FBQ3BGLDhDQU15QjtBQUV6QixtQ0FBMEY7QUFHMUYsaUNBZ0JnQjtBQUVoQixTQUFTLEdBQUcsQ0FDVixJQUFzQixFQUN0QixZQUF3QyxFQUN4QyxRQUEyQjtJQUUzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLFFBQVEsRUFBRSxFQUFFLGNBQWMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMzRixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxLQUFLLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsbUJBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUU3RCxNQUFNLDZCQUE2QixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzVGLE1BQU0saUNBQWlDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1B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USxFQUFFLEVBQUUsRUFBRTtZQUM3QixjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSwgYml0Z28sIHRlc3R1dGlsIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MsIGZpeGVkU2NyaXB0V2FsbGV0LCBCSVAzMiB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHtcbiAgY29tbW9uLFxuICBGdWxseVNpZ25lZFRyYW5zYWN0aW9uLFxuICBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLFxuICBUcmlwbGUsXG4gIFdhbGxldFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIGdlbmVyYXRlQWRkcmVzcywgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHR5cGUgeyBVbnNwZW50LCBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vLi4vc3JjL3Vuc3BlbnQnO1xuXG5pbXBvcnQge1xuICBhc3NlcnRFcXVhbEpTT04sXG4gIGdldEZpeHR1cmUsXG4gIGdldFV0eG9XYWxsZXQsXG4gIG1vY2tVbnNwZW50LFxuICBJbnB1dFNjcmlwdFR5cGUsXG4gIFRyYW5zYWN0aW9uT2JqLFxuICB0cmFuc2FjdGlvblRvT2JqLFxuICB0cmFuc2FjdGlvbkhleFRvT2JqLFxuICBjcmVhdGVQcmVidWlsZFRyYW5zYWN0aW9uLFxuICBnZXREZWZhdWx0V2FsbGV0S2V5cyxcbiAgZ2V0V2FsbGV0S2V5cyxcbiAgZGVmYXVsdEJpdEdvLFxuICBnZXRNaW5VdHhvQ29pbnMsXG4gIGdldE5ldHdvcmtGb3JDb2luTmFtZSxcbiAgZ2V0U2NyaXB0VHlwZXMsXG59IGZyb20gJy4vdXRpbCc7XG5cbmZ1bmN0aW9uIHJ1bjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgaW5wdXRTY3JpcHRzOiB0ZXN0dXRpbC5JbnB1dFNjcmlwdFR5cGVbXSxcbiAgdHhGb3JtYXQ6ICdsZWdhY3knIHwgJ3BzYnQnXG4pIHtcbiAgY29uc3QgYW1vdW50VHlwZSA9IGNvaW4uYW1vdW50VHlwZTtcbiAgY29uc3QgdGl0bGUgPSBbaW5wdXRTY3JpcHRzLmpvaW4oJywnKSwgYHR4Rm9ybWF0PSR7dHhGb3JtYXR9YCwgYGFtb3VudFR5cGU9JHthbW91bnRUeXBlfWBdO1xuICBkZXNjcmliZShgJHt0aXRsZS5qb2luKCcgJyl9YCwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcblxuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyk7XG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhSZXBsYXlQcm90ZWN0aW9uID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICdwMnNoUDJwaycpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUDJ0ciA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJ0cicpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUDJ0ck11c2lnMiA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJ0ck11c2lnMicpO1xuXG4gICAgY29uc3QgdmFsdWUgPSAoYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcgPyBCaWdJbnQoJzEwOTk5OTk5ODAwMDAwMDAxJykgOiAxZTgpIGFzIFROdW1iZXI7XG4gICAgY29uc3Qgd2FsbGV0ID0gZ2V0VXR4b1dhbGxldChjb2luLCB7IGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLCBjb2luOiBjb2luLmdldENoYWluKCkgfSk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG5cbiAgICBjb25zdCBmdWxsU2lnbiA9ICEoaXNUcmFuc2FjdGlvbldpdGhSZXBsYXlQcm90ZWN0aW9uIHx8IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kKTtcblxuICAgIGZ1bmN0aW9uIGdldFVuc3BlbnRzRm9yUHNidCgpOiBVbnNwZW50PGJpZ2ludD5bXSB7XG4gICAgICByZXR1cm4gaW5wdXRTY3JpcHRzLm1hcCgodCwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRlc3R1dGlsLnRvVW5zcGVudChcbiAgICAgICAgICB7IHNjcmlwdFR5cGU6IHQsIHZhbHVlOiB0ID09PSAncDJzaFAycGsnID8gQmlnSW50KDEwMDApIDogQmlnSW50KHZhbHVlKSB9LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLFxuICAgICAgICAgIHdhbGxldEtleXNcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvVHhuSW5wdXRTY3JpcHRUeXBlKHR5cGU6IHRlc3R1dGlsLklucHV0U2NyaXB0VHlwZSk6IElucHV0U2NyaXB0VHlwZSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3Ayc2hQMnBrJyA/ICdyZXBsYXlQcm90ZWN0aW9uJyA6IHR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyA/ICdwMnRyTXVzaWcyJyA6IHR5cGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0VW5zcGVudHMoKTogVW5zcGVudDxUTnVtYmVyPltdIHtcbiAgICAgIHJldHVybiBpbnB1dFNjcmlwdHMubWFwKCh0eXBlLCBpKSA9PlxuICAgICAgICBtb2NrVW5zcGVudDxUTnVtYmVyPihnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSwgd2FsbGV0S2V5cywgdG9UeG5JbnB1dFNjcmlwdFR5cGUodHlwZSksIGksIHZhbHVlKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRPdXRwdXRBZGRyZXNzKHJvb3RXYWxsZXRLZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUFkZHJlc3MoY29pbi5uYW1lLCB7XG4gICAgICAgIGtleWNoYWluczogcm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gKHsgcHViOiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9KSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTaWduUGFyYW1zKFxuICAgICAgcHJlYnVpbGRIZXg6IHN0cmluZyxcbiAgICAgIHNpZ25lcjogQklQMzJJbnRlcmZhY2UsXG4gICAgICBjb3NpZ25lcjogQklQMzJJbnRlcmZhY2VcbiAgICApOiBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgICAgIGNvbnN0IHR4SW5mbyA9IHtcbiAgICAgICAgdW5zcGVudHM6IHR4Rm9ybWF0ID09PSAncHNidCcgPyB1bmRlZmluZWQgOiBnZXRVbnNwZW50cygpLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB3YWxsZXRJZDogaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgPyB3YWxsZXQuaWQoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0eEhleDogcHJlYnVpbGRIZXgsXG4gICAgICAgICAgdHhJbmZvLFxuICAgICAgICB9LFxuICAgICAgICBwcnY6IHNpZ25lci50b0Jhc2U1OCgpLFxuICAgICAgICBwdWJzOiB3YWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSxcbiAgICAgICAgY29zaWduZXJQdWI6IGNvc2lnbmVyLm5ldXRlcmVkKCkudG9CYXNlNTgoKSxcbiAgICAgICAgZXh0cmFjdFRyYW5zYWN0aW9uOiBmYWxzZSxcbiAgICAgIH0gYXMgV2FsbGV0U2lnblRyYW5zYWN0aW9uT3B0aW9ucztcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24oXG4gICAgICBwcmVidWlsZDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICAgICAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZVxuICAgICk6IFByb21pc2U8SGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgICAgbGV0IHNjb3BlOiBub2NrLlNjb3BlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kKSB7XG4gICAgICAgIHNjb3BlID0gbm9jayhiZ1VybClcbiAgICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zaWducHNidGAsIChib2R5KSA9PiBib2R5LnBzYnQpXG4gICAgICAgICAgLnJlcGx5KDIwMCwgKF91cmk6IHN0cmluZywgcmVxdWVzdEJvZHk6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ldHdvcmtOYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShcbiAgICAgICAgICAgICAgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSlcbiAgICAgICAgICAgICkgYXMgZml4ZWRTY3JpcHRXYWxsZXQuTmV0d29ya05hbWU7XG4gICAgICAgICAgICBjb25zdCByZXFCeXRlcyA9IEJ1ZmZlci5mcm9tKChyZXF1ZXN0Qm9keSBhcyB7IHBzYnQ6IHN0cmluZyB9KS5wc2J0LCAnaGV4Jyk7XG4gICAgICAgICAgICBjb25zdCByZXFQc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhyZXFCeXRlcywgbmV0d29ya05hbWUpO1xuICAgICAgICAgICAgY29uc3QgY29zaWduZXJXYXNtID0gQklQMzIuZnJvbUJhc2U1OChjb3NpZ25lci50b0Jhc2U1OCgpKTtcbiAgICAgICAgICAgIHJlcVBzYnQuZ2VuZXJhdGVNdXNpZzJOb25jZXMoY29zaWduZXJXYXNtKTtcbiAgICAgICAgICAgIHJldHVybiB7IHBzYnQ6IEJ1ZmZlci5mcm9tKHJlcVBzYnQuc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBoYWxmLXNpZ24gd2l0aCB0aGUgdXNlciBrZXlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB3YWxsZXQuc2lnblRyYW5zYWN0aW9uKFxuICAgICAgICBnZXRTaWduUGFyYW1zKHByZWJ1aWxkLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLCBzaWduZXIsIGNvc2lnbmVyKVxuICAgICAgKSkgYXMgUHJvbWlzZTxIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPjtcblxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY29wZS5pc0RvbmUoKSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uKFxuICAgICAgaGFsZlNpZ25lZDogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgICAgIHNpZ25lcjogQklQMzJJbnRlcmZhY2UsXG4gICAgICBjb3NpZ25lcjogQklQMzJJbnRlcmZhY2VcbiAgICApOiBQcm9taXNlPEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICAgIHJldHVybiAoYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIC4uLmdldFNpZ25QYXJhbXMoaGFsZlNpZ25lZC50eEhleCwgc2lnbmVyLCBjb3NpZ25lciksXG4gICAgICAgIGlzTGFzdFNpZ25hdHVyZTogdHJ1ZSxcbiAgICAgIH0pKSBhcyBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIHR5cGUgVHJhbnNhY3Rpb25TdGFnZXMgPSB7XG4gICAgICBwcmVidWlsZDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgICAgaGFsZlNpZ25lZFVzZXJCYWNrdXA/OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uO1xuICAgICAgaGFsZlNpZ25lZFVzZXJCaXRHbzogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbjtcbiAgICAgIGZ1bGxTaWduZWRVc2VyQmFja3VwPzogRnVsbHlTaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIGZ1bGxTaWduZWRVc2VyQml0R28/OiBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH07XG5cbiAgICB0eXBlIFRyYW5zYWN0aW9uT2JqU3RhZ2VzID0gUmVjb3JkPGtleW9mIFRyYW5zYWN0aW9uU3RhZ2VzLCBUcmFuc2FjdGlvbk9iaj47XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQcmVidWlsZFBzYnQoKSB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBpbnB1dFNjcmlwdHMubWFwKFxuICAgICAgICAodCk6IHRlc3R1dGlsLklucHV0ID0+ICh7XG4gICAgICAgICAgc2NyaXB0VHlwZTogdCxcbiAgICAgICAgICB2YWx1ZTogdCA9PT0gJ3Ayc2hQMnBrJyA/IEJpZ0ludCgxMDAwKSA6IEJpZ0ludCh2YWx1ZSksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VycikgPT4gcHJldiArIGN1cnIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFtcbiAgICAgICAgeyBhZGRyZXNzOiBnZXRPdXRwdXRBZGRyZXNzKGdldFdhbGxldEtleXMoJ3Rlc3QnKSksIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSwgd2FsbGV0S2V5cywgJ3Vuc2lnbmVkJywge1xuICAgICAgICBwMnNoUDJwa0tleTogZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMoY29pbi5uYW1lKVswXSxcbiAgICAgIH0pO1xuICAgICAgdXR4b2xpYi5iaXRnby5hZGRYcHVic1RvUHNidChwc2J0LCB3YWxsZXRLZXlzKTtcbiAgICAgIHJldHVybiBwc2J0O1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uU3RhZ2VzKCk6IFByb21pc2U8VHJhbnNhY3Rpb25TdGFnZXM+IHtcbiAgICAgIGNvbnN0IHByZWJ1aWxkID1cbiAgICAgICAgdHhGb3JtYXQgPT09ICdwc2J0J1xuICAgICAgICAgID8gY3JlYXRlUHJlYnVpbGRQc2J0KClcbiAgICAgICAgICA6IGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb248VE51bWJlcj4oXG4gICAgICAgICAgICAgIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLFxuICAgICAgICAgICAgICBnZXRVbnNwZW50cygpLFxuICAgICAgICAgICAgICBnZXRPdXRwdXRBZGRyZXNzKHdhbGxldEtleXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICBjb25zdCBoYWxmU2lnbmVkVXNlckJpdEdvID0gYXdhaXQgY3JlYXRlSGFsZlNpZ25lZFRyYW5zYWN0aW9uKHByZWJ1aWxkLCB3YWxsZXRLZXlzLnVzZXIsIHdhbGxldEtleXMuYml0Z28pO1xuICAgICAgY29uc3QgZnVsbFNpZ25lZFVzZXJCaXRHbyA9XG4gICAgICAgIGZ1bGxTaWduICYmICFpc1RyYW5zYWN0aW9uV2l0aFAydHJNdXNpZzJcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbihoYWxmU2lnbmVkVXNlckJpdEdvLCB3YWxsZXRLZXlzLmJpdGdvLCB3YWxsZXRLZXlzLnVzZXIpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRVc2VyQmFja3VwID1cbiAgICAgICAgIWlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kICYmICEodHhGb3JtYXQgPT09ICdwc2J0JyAmJiBpc1RyYW5zYWN0aW9uV2l0aFAydHIpXG4gICAgICAgICAgPyBhd2FpdCBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24ocHJlYnVpbGQsIHdhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iYWNrdXApXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVXNlckJhY2t1cCA9XG4gICAgICAgIGZ1bGxTaWduICYmIGhhbGZTaWduZWRVc2VyQmFja3VwXG4gICAgICAgICAgPyBhd2FpdCBjcmVhdGVGdWxsU2lnbmVkVHJhbnNhY3Rpb24oaGFsZlNpZ25lZFVzZXJCYWNrdXAsIHdhbGxldEtleXMuYmFja3VwLCB3YWxsZXRLZXlzLnVzZXIpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWJ1aWxkLFxuICAgICAgICBoYWxmU2lnbmVkVXNlckJhY2t1cCxcbiAgICAgICAgaGFsZlNpZ25lZFVzZXJCaXRHbyxcbiAgICAgICAgZnVsbFNpZ25lZFVzZXJCYWNrdXAsXG4gICAgICAgIGZ1bGxTaWduZWRVc2VyQml0R28sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCB0cmFuc2FjdGlvblN0YWdlczogVHJhbnNhY3Rpb25TdGFnZXM7XG5cbiAgICBiZWZvcmUoJ3ByZXBhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0cmFuc2FjdGlvblN0YWdlcyA9IGF3YWl0IGdldFRyYW5zYWN0aW9uU3RhZ2VzKCk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2gobm9jay5jbGVhbkFsbCk7XG5cbiAgICBpdCgnbWF0Y2ggZml4dHVyZXMnLCBhc3luYyBmdW5jdGlvbiAodGhpczogTW9jaGEuQ29udGV4dCkge1xuICAgICAgaWYgKHR4Rm9ybWF0ID09PSAncHNidCcpIHtcbiAgICAgICAgLy8gVE9ETyAobWF5YmUpIC0gb25jZSBmdWxsIFBTQlQgc3VwcG9ydCBpcyBhZGRlZCB0byBhYnN0cmFjdC11dHhvIG1vZHVsZSwgY3VzdG9tIEpTT04gcmVwcmVzZW50YXRpb24gb2YgUFNCVCBjYW4gYmUgY3JlYXRlZCBhbmQgdGVzdGVkIGhlcmUuXG4gICAgICAgIC8vIHNpZ25hdHVyZXMgb2YgdGFwcm9vdEtleVBhdGhTcGVuZHMgYXJlIHJhbmRvbSBzaW5jZSByYW5kb20gbmF0dXJlIG9mIE11U2lnMiBub25jZSwgc28gcHNidCBoZXggY29tcGFyaXNvbiBhbHNvIHdvbnQgd29yay5cblxuICAgICAgICByZXR1cm4gdGhpcy5za2lwKCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRvVHJhbnNhY3Rpb25TdGFnZXNPYmooc3RhZ2VzOiBUcmFuc2FjdGlvblN0YWdlcyk6IFRyYW5zYWN0aW9uT2JqU3RhZ2VzIHtcbiAgICAgICAgcmV0dXJuIF8ubWFwVmFsdWVzKHN0YWdlcywgKHYpID0+XG4gICAgICAgICAgdiA9PT0gdW5kZWZpbmVkIHx8IHYgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHx8IHYgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHYgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvblxuICAgICAgICAgICAgPyB0cmFuc2FjdGlvblRvT2JqPFROdW1iZXI+KHYpXG4gICAgICAgICAgICA6IHRyYW5zYWN0aW9uSGV4VG9PYmoodi50eEhleCwgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSksIGFtb3VudFR5cGUpXG4gICAgICAgICkgYXMgVHJhbnNhY3Rpb25PYmpTdGFnZXM7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydEVxdWFsSlNPTihcbiAgICAgICAgdG9UcmFuc2FjdGlvblN0YWdlc09iaih0cmFuc2FjdGlvblN0YWdlcyksXG4gICAgICAgIGF3YWl0IGdldEZpeHR1cmUoXG4gICAgICAgICAgY29pbixcbiAgICAgICAgICBgdHJhbnNhY3Rpb25zLSR7aW5wdXRTY3JpcHRzLm1hcCgodCkgPT4gdG9UeG5JbnB1dFNjcmlwdFR5cGUodCkpLmpvaW4oJy0nKX1gLFxuICAgICAgICAgIHRvVHJhbnNhY3Rpb25TdGFnZXNPYmoodHJhbnNhY3Rpb25TdGFnZXMpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiB0ZXN0UHNidFZhbGlkU2lnbmF0dXJlcyh0eDogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbiwgc2lnbmVkQnk6IEJJUDMySW50ZXJmYWNlW10pIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4LnR4SGV4LCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSk7XG4gICAgICBjb25zdCB1bnNwZW50cyA9IGdldFVuc3BlbnRzRm9yUHNidCgpO1xuICAgICAgcHNidC5kYXRhLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2luZGV4XTtcbiAgICAgICAgaWYgKCF1dHhvbGliLmJpdGdvLmlzV2FsbGV0VW5zcGVudCh1bnNwZW50KSkge1xuICAgICAgICAgIGFzc2VydC5vayh1dHhvbGliLmJpdGdvLmdldFBzYnRJbnB1dFNjcmlwdFR5cGUoaW5wdXQpLCAncDJzaFAycGsnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2FsbGV0VW5zcGVudCA9IHVuc3BlbnQgYXMgV2FsbGV0VW5zcGVudDxiaWdpbnQ+O1xuICAgICAgICBjb25zdCBwdWJrZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHdhbGxldFVuc3BlbnQuY2hhaW4sIHdhbGxldFVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXM7XG4gICAgICAgIHB1YmtleXMuZm9yRWFjaCgocGssIHBrSW5kZXgpID0+IHtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgICAgICBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRDb21tb24oaW5kZXgsIHBrKSxcbiAgICAgICAgICAgIHNpZ25lZEJ5LmluY2x1ZGVzKHdhbGxldEtleXMudHJpcGxlW3BrSW5kZXhdKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGVzdFZhbGlkU2lnbmF0dXJlcyhcbiAgICAgIHR4OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uIHwgRnVsbHlTaWduZWRUcmFuc2FjdGlvbixcbiAgICAgIHNpZ25lZEJ5OiBCSVAzMkludGVyZmFjZVtdLFxuICAgICAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4gICAgKSB7XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICB0ZXN0UHNidFZhbGlkU2lnbmF0dXJlcyh0eCwgc2lnbmVkQnkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB1bnNwZW50cyA9IGdldFVuc3BlbnRzKCk7XG4gICAgICBjb25zdCBwcmV2T3V0cHV0cyA9IHVuc3BlbnRzLm1hcChcbiAgICAgICAgKHUpOiB1dHhvbGliLlR4T3V0cHV0PFROdW1iZXI+ID0+ICh7XG4gICAgICAgICAgc2NyaXB0OiBCdWZmZXIuZnJvbSh3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKHUuYWRkcmVzcywgY29pbi5uYW1lKSksXG4gICAgICAgICAgdmFsdWU6IHUudmFsdWUsXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyPFROdW1iZXI+KFxuICAgICAgICBCdWZmZXIuZnJvbSh0eC50eEhleCwgJ2hleCcpLFxuICAgICAgICBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSxcbiAgICAgICAgeyBhbW91bnRUeXBlIH1cbiAgICAgICk7XG4gICAgICB0cmFuc2FjdGlvbi5pbnMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbnB1dFNjcmlwdHNbaW5kZXhdID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgICAgYXNzZXJ0Lm9rKGNvaW4uaXNCaXRHb1RhaW50ZWRVbnNwZW50KHVuc3BlbnRzW2luZGV4XSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuc3BlbnQgPSB1bnNwZW50c1tpbmRleF0gYXMgV2FsbGV0VW5zcGVudDxUTnVtYmVyPjtcbiAgICAgICAgY29uc3QgcHVia2V5cyA9IHdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCh1bnNwZW50LmNoYWluLCB1bnNwZW50LmluZGV4KS5wdWJsaWNLZXlzO1xuXG4gICAgICAgIHB1YmtleXMuZm9yRWFjaCgocGssIHBrSW5kZXgpID0+IHtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgICAgICB1dHhvbGliLmJpdGdvLnZlcmlmeVNpZ25hdHVyZTxUTnVtYmVyPihcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICBwcmV2T3V0cHV0c1tpbmRleF0udmFsdWUsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHBrLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwcmV2T3V0cHV0c1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHNpZ25lZEJ5LmluY2x1ZGVzKHdhbGxldEtleXMudHJpcGxlW3BrSW5kZXhdKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gdGVzdEV4cGxhaW5UeChcbiAgICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgICAgdHhIZXg6IHN0cmluZyxcbiAgICAgIHVuc3BlbnRzOiBVbnNwZW50PFROdW1iZXI+W10sXG4gICAgICBwdWJzOiBUcmlwbGU8c3RyaW5nPiB8IHVuZGVmaW5lZFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSBhd2FpdCBjb2luLmV4cGxhaW5UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAgIHR4SGV4LFxuICAgICAgICB0eEluZm86IHtcbiAgICAgICAgICB1bnNwZW50cyxcbiAgICAgICAgfSxcbiAgICAgICAgcHVicyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFByb3BlcnRpZXMgPSBbJ2lkJywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0QW1vdW50J107XG5cbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBleHBlY3RlZFByb3BlcnRpZXMpIHtcbiAgICAgICAgYXNzZXJ0Lm9rKHByb3AgaW4gZXhwbGFuYXRpb24sIGBleHBlY3RlZCBleHBsYW5hdGlvbiB0byBoYXZlIHByb3BlcnR5ICcke3Byb3B9J2ApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZFNpZ25hdHVyZUNvdW50ID1cbiAgICAgICAgc3RhZ2VOYW1lID09PSAncHJlYnVpbGQnIHx8IHB1YnMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogc3RhZ2VOYW1lLnN0YXJ0c1dpdGgoJ2hhbGZTaWduZWQnKVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogc3RhZ2VOYW1lLnN0YXJ0c1dpdGgoJ2Z1bGxTaWduZWQnKVxuICAgICAgICAgID8gMlxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoJ2lucHV0U2lnbmF0dXJlcycgaW4gZXhwbGFuYXRpb24pIHtcbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgICAgICBleHBsYW5hdGlvbi5pbnB1dFNpZ25hdHVyZXMsXG4gICAgICAgICAgLy8gRklYTUUoQkctMzUxNTQpOiBpbXBsZW1lbnQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmb3IgcmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzXG4gICAgICAgICAgaW5wdXRTY3JpcHRzLm1hcCgodHlwZSkgPT4gKHR5cGUgPT09ICdwMnNoUDJwaycgPyAwIDogZXhwZWN0ZWRTaWduYXR1cmVDb3VudCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoJ3NpZ25hdHVyZXMnIGluIGV4cGxhbmF0aW9uKSB7XG4gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uc2lnbmF0dXJlcywgZXhwZWN0ZWRTaWduYXR1cmVDb3VudCk7XG4gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uY2hhbmdlQW1vdW50LCAnMCcpOyAvLyBubyBjaGFuZ2UgYWRkcmVzc2VzIGdpdmVuXG4gICAgICB9XG4gICAgICBsZXQgZXhwZWN0ZWRPdXRwdXRBbW91bnQgPVxuICAgICAgICBCaWdJbnQoKHR4Rm9ybWF0ID09PSAncHNidCcgPyBnZXRVbnNwZW50c0ZvclBzYnQoKSA6IGdldFVuc3BlbnRzKCkpLmxlbmd0aCkgKiBCaWdJbnQodmFsdWUpO1xuICAgICAgaW5wdXRTY3JpcHRzLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgICAgICAvLyByZXBsYXlQcm90ZWN0aW9uIHVuc3BlbnRzIGhhdmUgdmFsdWUgMTAwMFxuICAgICAgICAgIGV4cGVjdGVkT3V0cHV0QW1vdW50IC09IEJpZ0ludCh2YWx1ZSk7XG4gICAgICAgICAgZXhwZWN0ZWRPdXRwdXRBbW91bnQgKz0gQmlnSW50KDEwMDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGV4cGVjdGVkT3V0cHV0QW1vdW50IC09IEJpZ0ludCgxMDAwKTsgLy8gZmVlIG9mIDEwMDBcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0QW1vdW50LCBleHBlY3RlZE91dHB1dEFtb3VudC50b1N0cmluZygpKTtcbiAgICB9XG5cbiAgICBpdCgnaGF2ZSB2YWxpZCBzaWduYXR1cmUgZm9yIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhZ2VzLmhhbGZTaWduZWRVc2VyQmFja3VwKSB7XG4gICAgICAgIHRlc3RWYWxpZFNpZ25hdHVyZXModHJhbnNhY3Rpb25TdGFnZXMuaGFsZlNpZ25lZFVzZXJCYWNrdXAsIFt3YWxsZXRLZXlzLnVzZXJdLCAnaGFsZnNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5oYWxmU2lnbmVkVXNlckJpdEdvLCBbd2FsbGV0S2V5cy51c2VyXSwgJ2hhbGZzaWduZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXZlIHZhbGlkIHNpZ25hdHVyZXMgZm9yIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFmdWxsU2lnbikge1xuICAgICAgICByZXR1cm4gdGhpcy5za2lwKCk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuZnVsbFNpZ25lZFVzZXJCYWNrdXApIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJhY2t1cCwgW3dhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iYWNrdXBdLCAnZnVsbHNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQml0R28pIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJpdEdvLCBbd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJpdGdvXSwgJ2Z1bGxzaWduZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdoYXZlIGNvcnJlY3QgcmVzdWx0cyBmb3IgZXhwbGFpblRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBbc3RhZ2VOYW1lLCBzdGFnZVR4XSBvZiBPYmplY3QuZW50cmllcyh0cmFuc2FjdGlvblN0YWdlcykpIHtcbiAgICAgICAgaWYgKCFzdGFnZVR4KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eEhleCA9XG4gICAgICAgICAgc3RhZ2VUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfHwgc3RhZ2VUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4gICAgICAgICAgICA/IHN0YWdlVHgudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgIDogc3RhZ2VUeCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidFxuICAgICAgICAgICAgPyBCdWZmZXIuZnJvbShzdGFnZVR4LnNlcmlhbGl6ZSgpKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgIDogc3RhZ2VUeC50eEhleDtcblxuICAgICAgICBjb25zdCBwdWJzID0gd2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz47XG4gICAgICAgIGNvbnN0IHVuc3BlbnRzID1cbiAgICAgICAgICB0eEZvcm1hdCA9PT0gJ3BzYnQnXG4gICAgICAgICAgICA/IGdldFVuc3BlbnRzRm9yUHNidCgpLm1hcCgodSkgPT4gKHsgLi4udSwgdmFsdWU6IGJpdGdvLnRvVE51bWJlcih1LnZhbHVlLCBhbW91bnRUeXBlKSBhcyBUTnVtYmVyIH0pKVxuICAgICAgICAgICAgOiBnZXRVbnNwZW50cygpO1xuICAgICAgICBhd2FpdCB0ZXN0RXhwbGFpblR4KHN0YWdlTmFtZSwgdHhIZXgsIHVuc3BlbnRzLCBwdWJzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJ1blRlc3RGb3JDb2luKGNvaW46IEFic3RyYWN0VXR4b0NvaW4pIHtcbiAgcnVuKGNvaW4sIGdldFNjcmlwdFR5cGVzKGNvaW4sICdwc2J0JyksICdwc2J0Jyk7XG59XG5cbmRlc2NyaWJlKCdUcmFuc2FjdGlvbiBTdWl0ZScsIGZ1bmN0aW9uICgpIHtcbiAgZ2V0TWluVXR4b0NvaW5zKCkuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgIGRlc2NyaWJlKGAke2NvaW4uZ2V0Q2hhaW4oKX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICBydW5UZXN0Rm9yQ29pbihjb2luKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpQkFBZTtBQUNmLCtDQUFpQztBQUVqQywwQ0FBNEI7QUFDNUIseURBQTJDO0FBQzNDLDZCQUE4QjtBQUM5Qiw4Q0FBa0U7QUFDbEUsZ0RBQTREO0FBQzVELDhDQU15QjtBQUV6QixtQ0FBMEY7QUFHMUYsaUNBZ0JnQjtBQUVoQixTQUFTLEdBQUcsQ0FDVixJQUFzQixFQUN0QixZQUF3QyxFQUN4QyxRQUEyQjtJQUUzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLFFBQVEsRUFBRSxFQUFFLGNBQWMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMzRixRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxLQUFLLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsbUJBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUU3RCxNQUFNLDZCQUE2QixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzVGLE1BQU0saUNBQWlDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sMkJBQTJCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxDQUFDO1FBRWpGLE1BQU0sS0FBSyxHQUFHLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBWSxDQUFDO1FBQ3ZGLE1BQU0sTUFBTSxHQUFHLElBQUEsb0JBQWEsRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsa0NBQWtDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEcsTUFBTSxVQUFVLEdBQUcsSUFBQSwyQkFBb0IsR0FBRSxDQUFDO1FBRTFDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxpQ0FBaUMsSUFBSSw2QkFBNkIsQ0FBQyxDQUFDO1FBRXZGLFNBQVMsa0JBQWtCO1lBQ3pCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDbkMsT0FBTyxtQkFBUSxDQUFDLFNBQVMsQ0FDdkIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUN6RSxLQUFLLEVBQ0wsSUFBQSw0QkFBcUIsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ2hDLFVBQVUsQ0FDWCxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUE4QjtZQUMxRCxPQUFPLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pHLENBQUM7UUFFRCxTQUFTLFdBQVc7WUFDbEIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ2xDLElBQUEsa0JBQVcsRUFBVSxJQUFBLDRCQUFxQixFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUN6RyxDQUFDO1FBQ0osQ0FBQztRQUVELFNBQVMsZ0JBQWdCLENBQUMsY0FBNEM7WUFDcEUsT0FBTyxJQUFBLHFCQUFlLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDaEMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDaEYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELFNBQVMsYUFBYSxDQUNwQixXQUFtQixFQUNuQixNQUFzQixFQUN0QixRQUF3QjtZQUV4QixNQUFNLE1BQU0sR0FBRztnQkFDYixRQUFRLEVBQUUsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7YUFDMUQsQ0FBQztZQUNGLE9BQU87Z0JBQ0wsVUFBVSxFQUFFO29CQUNWLFFBQVEsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO29CQUNqRSxLQUFLLEVBQUUsV0FBVztvQkFDbEIsTUFBTTtpQkFDUDtnQkFDRCxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDdEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNELFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO2dCQUMzQyxrQkFBa0IsRUFBRSxLQUFLO2FBQ00sQ0FBQztRQUNwQyxDQUFDO1FBRUQsS0FBSyxVQUFVLDJCQUEyQixDQUN4QyxRQUF5RSxFQUN6RSxNQUFzQixFQUN0QixRQUF3QjtZQUV4QixJQUFJLEtBQTZCLENBQUM7WUFDbEMsSUFBSSw2QkFBNkIsRUFBRSxDQUFDO2dCQUNsQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztxQkFDaEIsSUFBSSxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3FCQUN2RixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBWSxFQUFFLFdBQW9CLEVBQUUsRUFBRTtvQkFDakQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FDeEMsSUFBQSw0QkFBcUIsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ0EsQ0FBQztvQkFDbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBRSxXQUFnQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDNUUsTUFBTSxPQUFPLEdBQUcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQzdFLE1BQU0sWUFBWSxHQUFHLGlCQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUMzRCxPQUFPLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBRUQsOEJBQThCO1lBQzlCLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsZUFBZSxDQUMxQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQ3JFLENBQXVDLENBQUM7WUFFekMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELEtBQUssVUFBVSwyQkFBMkIsQ0FDeEMsVUFBcUMsRUFDckMsTUFBc0IsRUFDdEIsUUFBd0I7WUFFeEIsT0FBTyxDQUFDLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDbkMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDO2dCQUNwRCxlQUFlLEVBQUUsSUFBSTthQUN0QixDQUFDLENBQTJCLENBQUM7UUFDaEMsQ0FBQztRQVlELFNBQVMsa0JBQWtCO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQzdCLENBQUMsQ0FBQyxFQUFrQixFQUFFLENBQUMsQ0FBQztnQkFDdEIsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxFQUFFLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUN2RCxDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RixNQUFNLE9BQU8sR0FBc0I7Z0JBQ2pDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLElBQUEsb0JBQWEsRUFBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO2FBQ3ZGLENBQUM7WUFDRixNQUFNLElBQUksR0FBRyxtQkFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUEsNEJBQXFCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7Z0JBQzdHLFdBQVcsRUFBRSxJQUFBLGdDQUEwQixFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELEtBQUssVUFBVSxvQkFBb0I7WUFDakMsTUFBTSxRQUFRLEdBQ1osUUFBUSxLQUFLLE1BQU07Z0JBQ2pCLENBQUMsQ0FBQyxrQkFBa0IsRUFBRTtnQkFDdEIsQ0FBQyxDQUFDLElBQUEsZ0NBQXlCLEVBQ3ZCLElBQUEsNEJBQXFCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNoQyxXQUFXLEVBQUUsRUFDYixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FDN0IsQ0FBQztZQUVSLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSwyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0csTUFBTSxtQkFBbUIsR0FDdkIsUUFBUSxJQUFJLENBQUMsMkJBQTJCO2dCQUN0QyxDQUFDLENBQUMsTUFBTSwyQkFBMkIsQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzNGLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFaEIsTUFBTSxvQkFBb0IsR0FDeEIsQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztnQkFDL0UsQ0FBQyxDQUFDLE1BQU0sMkJBQTJCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDakYsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNoQixNQUFNLG9CQUFvQixHQUN4QixRQUFRLElBQUksb0JBQW9CO2dCQUM5QixDQUFDLENBQUMsTUFBTSwyQkFBMkIsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzdGLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFaEIsT0FBTztnQkFDTCxRQUFRO2dCQUNSLG9CQUFvQjtnQkFDcEIsbUJBQW1CO2dCQUNuQixvQkFBb0I7Z0JBQ3BCLG1CQUFtQjthQUNwQixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksaUJBQW9DLENBQUM7UUFFekMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLO1lBQ3JCLGlCQUFpQixHQUFHLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekIsRUFBRSxDQUFDLGdCQUFnQixFQUFFLEtBQUs7WUFDeEIsSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLDZJQUE2STtnQkFDN0ksNEhBQTRIO2dCQUU1SCxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQixDQUFDO1lBRUQsU0FBUyxzQkFBc0IsQ0FBQyxNQUF5QjtnQkFDdkQsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQy9CLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsWUFBWSw2QkFBaUIsQ0FBQyxTQUFTO29CQUNoRyxDQUFDLENBQUMsU0FBUztvQkFDWCxDQUFDLENBQUMsQ0FBQyxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZTt3QkFDNUMsQ0FBQyxDQUFDLElBQUEsdUJBQWdCLEVBQVUsQ0FBQyxDQUFDO3dCQUM5QixDQUFDLENBQUMsSUFBQSwwQkFBbUIsRUFBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUEsNEJBQXFCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUN2RCxDQUFDO1lBQzVCLENBQUM7WUFFRCxJQUFBLHNCQUFlLEVBQ2Isc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsRUFDekMsTUFBTSxJQUFBLGlCQUFVLEVBQ2QsSUFBSSxFQUNKLGdCQUFnQixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUM1RSxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUMxQyxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsdUJBQXVCLENBQUMsRUFBNkIsRUFBRSxRQUEwQjtZQUN4RixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBQSw0QkFBcUIsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RixNQUFNLFFBQVEsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDeEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNuRSxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsTUFBTSxhQUFhLEdBQUcsT0FBZ0MsQ0FBQztnQkFDdkQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDdkcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRTtvQkFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FDaEIsSUFBSSxDQUFDLCtCQUErQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFDL0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQzlDLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxTQUFTLG1CQUFtQixDQUMxQixFQUFzRCxFQUN0RCxRQUEwQixFQUMxQixJQUFpQztZQUVqQyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsdUJBQXVCLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QyxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQy9CLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQzlCLENBQUMsQ0FBQyxFQUE2QixFQUFFLENBQUMsQ0FBQztnQkFDakMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4RCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7YUFDZixDQUFDLENBQ0gsQ0FBQztZQUVGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQzNELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFDNUIsSUFBQSw0QkFBcUIsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ2hDLEVBQUUsVUFBVSxFQUFFLENBQ2YsQ0FBQztZQUNGLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN2QyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDdkMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkQsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQTJCLENBQUM7Z0JBQzFELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBRTNGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQzlCLE1BQU0sQ0FBQyxXQUFXLENBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUMzQixXQUFXLEVBQ1gsS0FBSyxFQUNMLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQ3hCO3dCQUNFLFNBQVMsRUFBRSxFQUFFO3FCQUNkLEVBQ0QsV0FBVyxDQUNaLEVBQ0QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQzlDLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxLQUFLLFVBQVUsYUFBYSxDQUMxQixTQUFpQixFQUNqQixLQUFhLEVBQ2IsUUFBNEIsRUFDNUIsSUFBZ0M7WUFFaEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQVU7Z0JBQ3pELEtBQUs7Z0JBQ0wsTUFBTSxFQUFFO29CQUNOLFFBQVE7aUJBQ1Q7Z0JBQ0QsSUFBSTthQUNMLENBQUMsQ0FBQztZQUVILE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFFOUYsS0FBSyxNQUFNLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxXQUFXLEVBQUUsMENBQTBDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUVELE1BQU0sc0JBQXNCLEdBQzFCLFNBQVMsS0FBSyxVQUFVLElBQUksSUFBSSxLQUFLLFNBQVM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztvQkFDcEMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO3dCQUNwQyxDQUFDLENBQUMsQ0FBQzt3QkFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRWhCLElBQUksaUJBQWlCLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxlQUFlLENBQ3BCLFdBQVcsQ0FBQyxlQUFlO2dCQUMzQixpRkFBaUY7Z0JBQ2pGLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQy9FLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxZQUFZLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7WUFDckYsQ0FBQztZQUNELElBQUksb0JBQW9CLEdBQ3RCLE1BQU0sQ0FBQyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlGLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ3hCLDRDQUE0QztvQkFDNUMsb0JBQW9CLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0QyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWM7WUFDcEQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELEVBQUUsQ0FBQyxrREFBa0QsRUFBRTtZQUNyRCxJQUFJLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzNDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQy9GLENBQUM7WUFDRCxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRTtZQUN0RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUNELElBQUksaUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNsSCxDQUFDO1lBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMxQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ2hILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLO1lBQ3JELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztnQkFDckUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxNQUFNLEtBQUssR0FDVCxPQUFPLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZTtvQkFDM0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNwQyxDQUFDLENBQUMsT0FBTyxZQUFZLDZCQUFpQixDQUFDLFNBQVM7d0JBQ2hELENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7d0JBQ2xELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUVwQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFtQixDQUFDO2dCQUNyRixNQUFNLFFBQVEsR0FDWixRQUFRLEtBQUssTUFBTTtvQkFDakIsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLGdCQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFZLEVBQUUsQ0FBQyxDQUFDO29CQUNyRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLElBQXNCO0lBQzVDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBQSxxQkFBYyxFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsUUFBUSxDQUFDLG1CQUFtQixFQUFFO0lBQzVCLElBQUEsc0JBQWUsR0FBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2pDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQzdCLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ21vY2hhJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCB7IEJJUDMySW50ZXJmYWNlLCBiaXRnbywgdGVzdHV0aWwgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQsIEJJUDMyIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQge1xuICBjb21tb24sXG4gIEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24sXG4gIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sXG4gIFRyaXBsZSxcbiAgV2FsbGV0U2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgZ2VuZXJhdGVBZGRyZXNzLCBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQsIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi9zcmMvdW5zcGVudCc7XG5cbmltcG9ydCB7XG4gIGFzc2VydEVxdWFsSlNPTixcbiAgZ2V0Rml4dHVyZSxcbiAgZ2V0VXR4b1dhbGxldCxcbiAgbW9ja1Vuc3BlbnQsXG4gIElucHV0U2NyaXB0VHlwZSxcbiAgVHJhbnNhY3Rpb25PYmosXG4gIHRyYW5zYWN0aW9uVG9PYmosXG4gIHRyYW5zYWN0aW9uSGV4VG9PYmosXG4gIGNyZWF0ZVByZWJ1aWxkVHJhbnNhY3Rpb24sXG4gIGdldERlZmF1bHRXYWxsZXRLZXlzLFxuICBnZXRXYWxsZXRLZXlzLFxuICBkZWZhdWx0Qml0R28sXG4gIGdldE1pblV0eG9Db2lucyxcbiAgZ2V0TmV0d29ya0ZvckNvaW5OYW1lLFxuICBnZXRTY3JpcHRUeXBlcyxcbn0gZnJvbSAnLi91dGlsJztcblxuZnVuY3Rpb24gcnVuPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBpbnB1dFNjcmlwdHM6IHRlc3R1dGlsLklucHV0U2NyaXB0VHlwZVtdLFxuICB0eEZvcm1hdDogJ2xlZ2FjeScgfCAncHNidCdcbikge1xuICBjb25zdCBhbW91bnRUeXBlID0gY29pbi5hbW91bnRUeXBlO1xuICBjb25zdCB0aXRsZSA9IFtpbnB1dFNjcmlwdHMuam9pbignLCcpLCBgdHhGb3JtYXQ9JHt0eEZvcm1hdH1gLCBgYW1vdW50VHlwZT0ke2Ftb3VudFR5cGV9YF07XG4gIGRlc2NyaWJlKGAke3RpdGxlLmpvaW4oJyAnKX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2RlZmF1bHRCaXRHby5nZXRFbnYoKV0udXJpO1xuXG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgPSBpbnB1dFNjcmlwdHMuc29tZSgocykgPT4gcyA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKTtcbiAgICBjb25zdCBpc1RyYW5zYWN0aW9uV2l0aFJlcGxheVByb3RlY3Rpb24gPSBpbnB1dFNjcmlwdHMuc29tZSgocykgPT4gcyA9PT0gJ3Ayc2hQMnBrJyk7XG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhQMnRyID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICdwMnRyJyk7XG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhQMnRyTXVzaWcyID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICdwMnRyTXVzaWcyJyk7XG5cbiAgICBjb25zdCB2YWx1ZSA9IChhbW91bnRUeXBlID09PSAnYmlnaW50JyA/IEJpZ0ludCgnMTA5OTk5OTk4MDAwMDAwMDEnKSA6IDFlOCkgYXMgVE51bWJlcjtcbiAgICBjb25zdCB3YWxsZXQgPSBnZXRVdHhvV2FsbGV0KGNvaW4sIHsgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSB9KTtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcblxuICAgIGNvbnN0IGZ1bGxTaWduID0gIShpc1RyYW5zYWN0aW9uV2l0aFJlcGxheVByb3RlY3Rpb24gfHwgaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQpO1xuXG4gICAgZnVuY3Rpb24gZ2V0VW5zcGVudHNGb3JQc2J0KCk6IFVuc3BlbnQ8YmlnaW50PltdIHtcbiAgICAgIHJldHVybiBpbnB1dFNjcmlwdHMubWFwKCh0LCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gdGVzdHV0aWwudG9VbnNwZW50KFxuICAgICAgICAgIHsgc2NyaXB0VHlwZTogdCwgdmFsdWU6IHQgPT09ICdwMnNoUDJwaycgPyBCaWdJbnQoMTAwMCkgOiBCaWdJbnQodmFsdWUpIH0sXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSksXG4gICAgICAgICAgd2FsbGV0S2V5c1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9UeG5JbnB1dFNjcmlwdFR5cGUodHlwZTogdGVzdHV0aWwuSW5wdXRTY3JpcHRUeXBlKTogSW5wdXRTY3JpcHRUeXBlIHtcbiAgICAgIHJldHVybiB0eXBlID09PSAncDJzaFAycGsnID8gJ3JlcGxheVByb3RlY3Rpb24nIDogdHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogdHlwZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRVbnNwZW50cygpOiBVbnNwZW50PFROdW1iZXI+W10ge1xuICAgICAgcmV0dXJuIGlucHV0U2NyaXB0cy5tYXAoKHR5cGUsIGkpID0+XG4gICAgICAgIG1vY2tVbnNwZW50PFROdW1iZXI+KGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLCB3YWxsZXRLZXlzLCB0b1R4bklucHV0U2NyaXB0VHlwZSh0eXBlKSwgaSwgdmFsdWUpXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE91dHB1dEFkZHJlc3Mocm9vdFdhbGxldEtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQWRkcmVzcyhjb2luLm5hbWUsIHtcbiAgICAgICAga2V5Y2hhaW5zOiByb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiAoeyBwdWI6IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpIH0pKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNpZ25QYXJhbXMoXG4gICAgICBwcmVidWlsZEhleDogc3RyaW5nLFxuICAgICAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZVxuICAgICk6IFdhbGxldFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICAgICAgY29uc3QgdHhJbmZvID0ge1xuICAgICAgICB1bnNwZW50czogdHhGb3JtYXQgPT09ICdwc2J0JyA/IHVuZGVmaW5lZCA6IGdldFVuc3BlbnRzKCksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHdhbGxldElkOiBpc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZCA/IHdhbGxldC5pZCgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHR4SGV4OiBwcmVidWlsZEhleCxcbiAgICAgICAgICB0eEluZm8sXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogc2lnbmVyLnRvQmFzZTU4KCksXG4gICAgICAgIHB1YnM6IHdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpLFxuICAgICAgICBjb3NpZ25lclB1YjogY29zaWduZXIubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgICAgICBleHRyYWN0VHJhbnNhY3Rpb246IGZhbHNlLFxuICAgICAgfSBhcyBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbihcbiAgICAgIHByZWJ1aWxkOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gICAgICBzaWduZXI6IEJJUDMySW50ZXJmYWNlLFxuICAgICAgY29zaWduZXI6IEJJUDMySW50ZXJmYWNlXG4gICAgKTogUHJvbWlzZTxIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPiB7XG4gICAgICBsZXQgc2NvcGU6IG5vY2suU2NvcGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQpIHtcbiAgICAgICAgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NpZ25wc2J0YCwgKGJvZHkpID0+IGJvZHkucHNidClcbiAgICAgICAgICAucmVwbHkoMjAwLCAoX3VyaTogc3RyaW5nLCByZXF1ZXN0Qm9keTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKFxuICAgICAgICAgICAgICBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKVxuICAgICAgICAgICAgKSBhcyBmaXhlZFNjcmlwdFdhbGxldC5OZXR3b3JrTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHJlcUJ5dGVzID0gQnVmZmVyLmZyb20oKHJlcXVlc3RCb2R5IGFzIHsgcHNidDogc3RyaW5nIH0pLnBzYnQsICdoZXgnKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHJlcUJ5dGVzLCBuZXR3b3JrTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjb3NpZ25lcldhc20gPSBCSVAzMi5mcm9tQmFzZTU4KGNvc2lnbmVyLnRvQmFzZTU4KCkpO1xuICAgICAgICAgICAgcmVxUHNidC5nZW5lcmF0ZU11c2lnMk5vbmNlcyhjb3NpZ25lcldhc20pO1xuICAgICAgICAgICAgcmV0dXJuIHsgcHNidDogQnVmZmVyLmZyb20ocmVxUHNidC5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpIH07XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGhhbGYtc2lnbiB3aXRoIHRoZSB1c2VyIGtleVxuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHdhbGxldC5zaWduVHJhbnNhY3Rpb24oXG4gICAgICAgIGdldFNpZ25QYXJhbXMocHJlYnVpbGQudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JyksIHNpZ25lciwgY29zaWduZXIpXG4gICAgICApKSBhcyBQcm9taXNlPEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+O1xuXG4gICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjb3BlLmlzRG9uZSgpLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVGdWxsU2lnbmVkVHJhbnNhY3Rpb24oXG4gICAgICBoYWxmU2lnbmVkOiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLFxuICAgICAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZVxuICAgICk6IFByb21pc2U8RnVsbHlTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgICAgcmV0dXJuIChhd2FpdCB3YWxsZXQuc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgLi4uZ2V0U2lnblBhcmFtcyhoYWxmU2lnbmVkLnR4SGV4LCBzaWduZXIsIGNvc2lnbmVyKSxcbiAgICAgICAgaXNMYXN0U2lnbmF0dXJlOiB0cnVlLFxuICAgICAgfSkpIGFzIEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgdHlwZSBUcmFuc2FjdGlvblN0YWdlcyA9IHtcbiAgICAgIHByZWJ1aWxkOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG4gICAgICBoYWxmU2lnbmVkVXNlckJhY2t1cD86IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb247XG4gICAgICBoYWxmU2lnbmVkVXNlckJpdEdvOiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uO1xuICAgICAgZnVsbFNpZ25lZFVzZXJCYWNrdXA/OiBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgZnVsbFNpZ25lZFVzZXJCaXRHbz86IEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfTtcblxuICAgIHR5cGUgVHJhbnNhY3Rpb25PYmpTdGFnZXMgPSBSZWNvcmQ8a2V5b2YgVHJhbnNhY3Rpb25TdGFnZXMsIFRyYW5zYWN0aW9uT2JqPjtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVByZWJ1aWxkUHNidCgpIHtcbiAgICAgIGNvbnN0IGlucHV0cyA9IGlucHV0U2NyaXB0cy5tYXAoXG4gICAgICAgICh0KTogdGVzdHV0aWwuSW5wdXQgPT4gKHtcbiAgICAgICAgICBzY3JpcHRUeXBlOiB0LFxuICAgICAgICAgIHZhbHVlOiB0ID09PSAncDJzaFAycGsnID8gQmlnSW50KDEwMDApIDogQmlnSW50KHZhbHVlKSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLk91dHB1dFtdID0gW1xuICAgICAgICB7IGFkZHJlc3M6IGdldE91dHB1dEFkZHJlc3MoZ2V0V2FsbGV0S2V5cygndGVzdCcpKSwgdmFsdWU6IHVuc3BlbnRTdW0gLSBCaWdJbnQoMTAwMCkgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLCB3YWxsZXRLZXlzLCAndW5zaWduZWQnLCB7XG4gICAgICAgIHAyc2hQMnBrS2V5OiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyhjb2luLm5hbWUpWzBdLFxuICAgICAgfSk7XG4gICAgICB1dHhvbGliLmJpdGdvLmFkZFhwdWJzVG9Qc2J0KHBzYnQsIHdhbGxldEtleXMpO1xuICAgICAgcmV0dXJuIHBzYnQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25TdGFnZXMoKTogUHJvbWlzZTxUcmFuc2FjdGlvblN0YWdlcz4ge1xuICAgICAgY29uc3QgcHJlYnVpbGQgPVxuICAgICAgICB0eEZvcm1hdCA9PT0gJ3BzYnQnXG4gICAgICAgICAgPyBjcmVhdGVQcmVidWlsZFBzYnQoKVxuICAgICAgICAgIDogY3JlYXRlUHJlYnVpbGRUcmFuc2FjdGlvbjxUTnVtYmVyPihcbiAgICAgICAgICAgICAgZ2V0TmV0d29ya0ZvckNvaW5OYW1lKGNvaW4ubmFtZSksXG4gICAgICAgICAgICAgIGdldFVuc3BlbnRzKCksXG4gICAgICAgICAgICAgIGdldE91dHB1dEFkZHJlc3Mod2FsbGV0S2V5cylcbiAgICAgICAgICAgICk7XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRVc2VyQml0R28gPSBhd2FpdCBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24ocHJlYnVpbGQsIHdhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iaXRnbyk7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVXNlckJpdEdvID1cbiAgICAgICAgZnVsbFNpZ24gJiYgIWlzVHJhbnNhY3Rpb25XaXRoUDJ0ck11c2lnMlxuICAgICAgICAgID8gYXdhaXQgY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uKGhhbGZTaWduZWRVc2VyQml0R28sIHdhbGxldEtleXMuYml0Z28sIHdhbGxldEtleXMudXNlcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgaGFsZlNpZ25lZFVzZXJCYWNrdXAgPVxuICAgICAgICAhaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgJiYgISh0eEZvcm1hdCA9PT0gJ3BzYnQnICYmIGlzVHJhbnNhY3Rpb25XaXRoUDJ0cilcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbihwcmVidWlsZCwgd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJhY2t1cClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRVc2VyQmFja3VwID1cbiAgICAgICAgZnVsbFNpZ24gJiYgaGFsZlNpZ25lZFVzZXJCYWNrdXBcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbihoYWxmU2lnbmVkVXNlckJhY2t1cCwgd2FsbGV0S2V5cy5iYWNrdXAsIHdhbGxldEtleXMudXNlcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlYnVpbGQsXG4gICAgICAgIGhhbGZTaWduZWRVc2VyQmFja3VwLFxuICAgICAgICBoYWxmU2lnbmVkVXNlckJpdEdvLFxuICAgICAgICBmdWxsU2lnbmVkVXNlckJhY2t1cCxcbiAgICAgICAgZnVsbFNpZ25lZFVzZXJCaXRHbyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHRyYW5zYWN0aW9uU3RhZ2VzOiBUcmFuc2FjdGlvblN0YWdlcztcblxuICAgIGJlZm9yZSgncHJlcGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyYW5zYWN0aW9uU3RhZ2VzID0gYXdhaXQgZ2V0VHJhbnNhY3Rpb25TdGFnZXMoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChub2NrLmNsZWFuQWxsKTtcblxuICAgIGl0KCdtYXRjaCBmaXh0dXJlcycsIGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBNb2NoYS5Db250ZXh0KSB7XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICAvLyBUT0RPIChtYXliZSkgLSBvbmNlIGZ1bGwgUFNCVCBzdXBwb3J0IGlzIGFkZGVkIHRvIGFic3RyYWN0LXV0eG8gbW9kdWxlLCBjdXN0b20gSlNPTiByZXByZXNlbnRhdGlvbiBvZiBQU0JUIGNhbiBiZSBjcmVhdGVkIGFuZCB0ZXN0ZWQgaGVyZS5cbiAgICAgICAgLy8gc2lnbmF0dXJlcyBvZiB0YXByb290S2V5UGF0aFNwZW5kcyBhcmUgcmFuZG9tIHNpbmNlIHJhbmRvbSBuYXR1cmUgb2YgTXVTaWcyIG5vbmNlLCBzbyBwc2J0IGhleCBjb21wYXJpc29uIGFsc28gd29udCB3b3JrLlxuXG4gICAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdG9UcmFuc2FjdGlvblN0YWdlc09iaihzdGFnZXM6IFRyYW5zYWN0aW9uU3RhZ2VzKTogVHJhbnNhY3Rpb25PYmpTdGFnZXMge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMoc3RhZ2VzLCAodikgPT5cbiAgICAgICAgICB2ID09PSB1bmRlZmluZWQgfHwgdiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfHwgdiBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidFxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogdiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4gICAgICAgICAgICA/IHRyYW5zYWN0aW9uVG9PYmo8VE51bWJlcj4odilcbiAgICAgICAgICAgIDogdHJhbnNhY3Rpb25IZXhUb09iaih2LnR4SGV4LCBnZXROZXR3b3JrRm9yQ29pbk5hbWUoY29pbi5uYW1lKSwgYW1vdW50VHlwZSlcbiAgICAgICAgKSBhcyBUcmFuc2FjdGlvbk9ialN0YWdlcztcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0RXF1YWxKU09OKFxuICAgICAgICB0b1RyYW5zYWN0aW9uU3RhZ2VzT2JqKHRyYW5zYWN0aW9uU3RhZ2VzKSxcbiAgICAgICAgYXdhaXQgZ2V0Rml4dHVyZShcbiAgICAgICAgICBjb2luLFxuICAgICAgICAgIGB0cmFuc2FjdGlvbnMtJHtpbnB1dFNjcmlwdHMubWFwKCh0KSA9PiB0b1R4bklucHV0U2NyaXB0VHlwZSh0KSkuam9pbignLScpfWAsXG4gICAgICAgICAgdG9UcmFuc2FjdGlvblN0YWdlc09iaih0cmFuc2FjdGlvblN0YWdlcylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHRlc3RQc2J0VmFsaWRTaWduYXR1cmVzKHR4OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLCBzaWduZWRCeTogQklQMzJJbnRlcmZhY2VbXSkge1xuICAgICAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21IZXgodHgudHhIZXgsIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpKTtcbiAgICAgIGNvbnN0IHVuc3BlbnRzID0gZ2V0VW5zcGVudHNGb3JQc2J0KCk7XG4gICAgICBwc2J0LmRhdGEuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB1bnNwZW50ID0gdW5zcGVudHNbaW5kZXhdO1xuICAgICAgICBpZiAoIXV0eG9saWIuYml0Z28uaXNXYWxsZXRVbnNwZW50KHVuc3BlbnQpKSB7XG4gICAgICAgICAgYXNzZXJ0Lm9rKHV0eG9saWIuYml0Z28uZ2V0UHNidElucHV0U2NyaXB0VHlwZShpbnB1dCksICdwMnNoUDJwaycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3YWxsZXRVbnNwZW50ID0gdW5zcGVudCBhcyBXYWxsZXRVbnNwZW50PGJpZ2ludD47XG4gICAgICAgIGNvbnN0IHB1YmtleXMgPSB3YWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgod2FsbGV0VW5zcGVudC5jaGFpbiwgd2FsbGV0VW5zcGVudC5pbmRleCkucHVibGljS2V5cztcbiAgICAgICAgcHVia2V5cy5mb3JFYWNoKChwaywgcGtJbmRleCkgPT4ge1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgICAgIHBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dENvbW1vbihpbmRleCwgcGspLFxuICAgICAgICAgICAgc2lnbmVkQnkuaW5jbHVkZXMod2FsbGV0S2V5cy50cmlwbGVbcGtJbmRleF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0ZXN0VmFsaWRTaWduYXR1cmVzKFxuICAgICAgdHg6IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24gfCBGdWxseVNpZ25lZFRyYW5zYWN0aW9uLFxuICAgICAgc2lnbmVkQnk6IEJJUDMySW50ZXJmYWNlW10sXG4gICAgICBzaWduOiAnaGFsZnNpZ25lZCcgfCAnZnVsbHNpZ25lZCdcbiAgICApIHtcbiAgICAgIGlmICh0eEZvcm1hdCA9PT0gJ3BzYnQnKSB7XG4gICAgICAgIHRlc3RQc2J0VmFsaWRTaWduYXR1cmVzKHR4LCBzaWduZWRCeSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVuc3BlbnRzID0gZ2V0VW5zcGVudHMoKTtcbiAgICAgIGNvbnN0IHByZXZPdXRwdXRzID0gdW5zcGVudHMubWFwKFxuICAgICAgICAodSk6IHV0eG9saWIuVHhPdXRwdXQ8VE51bWJlcj4gPT4gKHtcbiAgICAgICAgICBzY3JpcHQ6IEJ1ZmZlci5mcm9tKGNvaW4uYWRkcmVzc0NvZGVjLmRlY29kZSh1LmFkZHJlc3MpKSxcbiAgICAgICAgICB2YWx1ZTogdS52YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXI8VE51bWJlcj4oXG4gICAgICAgIEJ1ZmZlci5mcm9tKHR4LnR4SGV4LCAnaGV4JyksXG4gICAgICAgIGdldE5ldHdvcmtGb3JDb2luTmFtZShjb2luLm5hbWUpLFxuICAgICAgICB7IGFtb3VudFR5cGUgfVxuICAgICAgKTtcbiAgICAgIHRyYW5zYWN0aW9uLmlucy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGlucHV0U2NyaXB0c1tpbmRleF0gPT09ICdwMnNoUDJwaycpIHtcbiAgICAgICAgICBhc3NlcnQub2soY29pbi5pc0JpdEdvVGFpbnRlZFVuc3BlbnQodW5zcGVudHNbaW5kZXhdKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2luZGV4XSBhcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+O1xuICAgICAgICBjb25zdCBwdWJrZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXM7XG5cbiAgICAgICAgcHVia2V5cy5mb3JFYWNoKChwaywgcGtJbmRleCkgPT4ge1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgICAgIHV0eG9saWIuYml0Z28udmVyaWZ5U2lnbmF0dXJlPFROdW1iZXI+KFxuICAgICAgICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHByZXZPdXRwdXRzW2luZGV4XS52YWx1ZSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmxpY0tleTogcGssXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHByZXZPdXRwdXRzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc2lnbmVkQnkuaW5jbHVkZXMod2FsbGV0S2V5cy50cmlwbGVbcGtJbmRleF0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiB0ZXN0RXhwbGFpblR4KFxuICAgICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgICB0eEhleDogc3RyaW5nLFxuICAgICAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgICAgIHB1YnM6IFRyaXBsZTxzdHJpbmc+IHwgdW5kZWZpbmVkXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICAgICAgdHhIZXgsXG4gICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgIHVuc3BlbnRzLFxuICAgICAgICB9LFxuICAgICAgICBwdWJzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUHJvcGVydGllcyA9IFsnaWQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRBbW91bnQnXTtcblxuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGV4cGVjdGVkUHJvcGVydGllcykge1xuICAgICAgICBhc3NlcnQub2socHJvcCBpbiBleHBsYW5hdGlvbiwgYGV4cGVjdGVkIGV4cGxhbmF0aW9uIHRvIGhhdmUgcHJvcGVydHkgJyR7cHJvcH0nYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkU2lnbmF0dXJlQ291bnQgPVxuICAgICAgICBzdGFnZU5hbWUgPT09ICdwcmVidWlsZCcgfHwgcHVicyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBzdGFnZU5hbWUuc3RhcnRzV2l0aCgnaGFsZlNpZ25lZCcpXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiBzdGFnZU5hbWUuc3RhcnRzV2l0aCgnZnVsbFNpZ25lZCcpXG4gICAgICAgICAgPyAyXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICgnaW5wdXRTaWduYXR1cmVzJyBpbiBleHBsYW5hdGlvbikge1xuICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgICAgIGV4cGxhbmF0aW9uLmlucHV0U2lnbmF0dXJlcyxcbiAgICAgICAgICAvLyBGSVhNRShCRy0zNTE1NCk6IGltcGxlbWVudCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZvciByZXBsYXkgcHJvdGVjdGlvbiBpbnB1dHNcbiAgICAgICAgICBpbnB1dFNjcmlwdHMubWFwKCh0eXBlKSA9PiAodHlwZSA9PT0gJ3Ayc2hQMnBrJyA/IDAgOiBleHBlY3RlZFNpZ25hdHVyZUNvdW50KSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICgnc2lnbmF0dXJlcycgaW4gZXhwbGFuYXRpb24pIHtcbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChleHBsYW5hdGlvbi5zaWduYXR1cmVzLCBleHBlY3RlZFNpZ25hdHVyZUNvdW50KTtcbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChleHBsYW5hdGlvbi5jaGFuZ2VBbW91bnQsICcwJyk7IC8vIG5vIGNoYW5nZSBhZGRyZXNzZXMgZ2l2ZW5cbiAgICAgIH1cbiAgICAgIGxldCBleHBlY3RlZE91dHB1dEFtb3VudCA9XG4gICAgICAgIEJpZ0ludCgodHhGb3JtYXQgPT09ICdwc2J0JyA/IGdldFVuc3BlbnRzRm9yUHNidCgpIDogZ2V0VW5zcGVudHMoKSkubGVuZ3RoKSAqIEJpZ0ludCh2YWx1ZSk7XG4gICAgICBpbnB1dFNjcmlwdHMuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICAgIC8vIHJlcGxheVByb3RlY3Rpb24gdW5zcGVudHMgaGF2ZSB2YWx1ZSAxMDAwXG4gICAgICAgICAgZXhwZWN0ZWRPdXRwdXRBbW91bnQgLT0gQmlnSW50KHZhbHVlKTtcbiAgICAgICAgICBleHBlY3RlZE91dHB1dEFtb3VudCArPSBCaWdJbnQoMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZXhwZWN0ZWRPdXRwdXRBbW91bnQgLT0gQmlnSW50KDEwMDApOyAvLyBmZWUgb2YgMTAwMFxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsIGV4cGVjdGVkT3V0cHV0QW1vdW50LnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGl0KCdoYXZlIHZhbGlkIHNpZ25hdHVyZSBmb3IgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuaGFsZlNpZ25lZFVzZXJCYWNrdXApIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5oYWxmU2lnbmVkVXNlckJhY2t1cCwgW3dhbGxldEtleXMudXNlcl0sICdoYWxmc2lnbmVkJyk7XG4gICAgICB9XG4gICAgICB0ZXN0VmFsaWRTaWduYXR1cmVzKHRyYW5zYWN0aW9uU3RhZ2VzLmhhbGZTaWduZWRVc2VyQml0R28sIFt3YWxsZXRLZXlzLnVzZXJdLCAnaGFsZnNpZ25lZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhdmUgdmFsaWQgc2lnbmF0dXJlcyBmb3IgZnVsbC1zaWduZWQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWZ1bGxTaWduKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJhY2t1cCkge1xuICAgICAgICB0ZXN0VmFsaWRTaWduYXR1cmVzKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQmFja3VwLCBbd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJhY2t1cF0sICdmdWxsc2lnbmVkJyk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuZnVsbFNpZ25lZFVzZXJCaXRHbykge1xuICAgICAgICB0ZXN0VmFsaWRTaWduYXR1cmVzKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQml0R28sIFt3YWxsZXRLZXlzLnVzZXIsIHdhbGxldEtleXMuYml0Z29dLCAnZnVsbHNpZ25lZCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ2hhdmUgY29ycmVjdCByZXN1bHRzIGZvciBleHBsYWluVHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtzdGFnZU5hbWUsIHN0YWdlVHhdIG9mIE9iamVjdC5lbnRyaWVzKHRyYW5zYWN0aW9uU3RhZ2VzKSkge1xuICAgICAgICBpZiAoIXN0YWdlVHgpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR4SGV4ID1cbiAgICAgICAgICBzdGFnZVR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8fCBzdGFnZVR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25cbiAgICAgICAgICAgID8gc3RhZ2VUeC50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgICAgOiBzdGFnZVR4IGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0XG4gICAgICAgICAgICA/IEJ1ZmZlci5mcm9tKHN0YWdlVHguc2VyaWFsaXplKCkpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgICAgOiBzdGFnZVR4LnR4SGV4O1xuXG4gICAgICAgIGNvbnN0IHB1YnMgPSB3YWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgICAgY29uc3QgdW5zcGVudHMgPVxuICAgICAgICAgIHR4Rm9ybWF0ID09PSAncHNidCdcbiAgICAgICAgICAgID8gZ2V0VW5zcGVudHNGb3JQc2J0KCkubWFwKCh1KSA9PiAoeyAuLi51LCB2YWx1ZTogYml0Z28udG9UTnVtYmVyKHUudmFsdWUsIGFtb3VudFR5cGUpIGFzIFROdW1iZXIgfSkpXG4gICAgICAgICAgICA6IGdldFVuc3BlbnRzKCk7XG4gICAgICAgIGF3YWl0IHRlc3RFeHBsYWluVHgoc3RhZ2VOYW1lLCB0eEhleCwgdW5zcGVudHMsIHB1YnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVuVGVzdEZvckNvaW4oY29pbjogQWJzdHJhY3RVdHhvQ29pbikge1xuICBydW4oY29pbiwgZ2V0U2NyaXB0VHlwZXMoY29pbiwgJ3BzYnQnKSwgJ3BzYnQnKTtcbn1cblxuZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIFN1aXRlJywgZnVuY3Rpb24gKCkge1xuICBnZXRNaW5VdHhvQ29pbnMoKS5mb3JFYWNoKChjb2luKSA9PiB7XG4gICAgZGVzY3JpYmUoYCR7Y29pbi5nZXRDaGFpbigpfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJ1blRlc3RGb3JDb2luKGNvaW4pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -1,5 +1,6 @@
1
1
  import * as utxolib from '@bitgo/utxo-lib';
2
2
  import { fixedScriptWallet, type CoinName } from '@bitgo/wasm-utxo';
3
+ import { type UtxoCoinName } from '../../../src/names';
3
4
  type UtxolibRootWalletKeys = utxolib.bitgo.RootWalletKeys;
4
5
  type WasmRootWalletKeys = fixedScriptWallet.RootWalletKeys;
5
6
  type RootWalletKeys = UtxolibRootWalletKeys | WasmRootWalletKeys;
@@ -8,6 +9,6 @@ type RootWalletKeys = UtxolibRootWalletKeys | WasmRootWalletKeys;
8
9
  * Supports both utxolib and wasm-utxo RootWalletKeys.
9
10
  * Utxolib keys are converted to wasm-utxo keys for address generation.
10
11
  */
11
- export declare function getWalletAddress(coinName: CoinName, walletKeys: RootWalletKeys, chain?: 0 | 1 | 10 | 11 | 20 | 21 | 30 | 31 | 40 | 41 | 360 | 361, index?: number): string;
12
+ export declare function getWalletAddress(coinName: CoinName | UtxoCoinName, walletKeys: RootWalletKeys, chain?: 0 | 1 | 10 | 11 | 20 | 21 | 30 | 31 | 40 | 41 | 360 | 361, index?: number): string;
12
13
  export {};
13
14
  //# sourceMappingURL=address.d.ts.map