@bitgo-beta/abstract-utxo 1.6.1-alpha.43 → 1.6.1-alpha.431

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 (788) hide show
  1. package/README.md +76 -0
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts +435 -0
  3. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -0
  4. package/dist/cjs/src/abstractUtxoCoin.js +657 -0
  5. package/dist/cjs/src/address/fixedScript.d.ts +49 -0
  6. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -0
  7. package/dist/cjs/src/address/fixedScript.js +155 -0
  8. package/dist/cjs/src/address/index.d.ts +2 -0
  9. package/dist/cjs/src/address/index.d.ts.map +1 -0
  10. package/dist/cjs/src/address/index.js +8 -0
  11. package/dist/cjs/src/config.d.ts.map +1 -0
  12. package/dist/cjs/src/config.js +14 -0
  13. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts +20 -0
  14. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -0
  15. package/dist/cjs/src/descriptor/NamedDescriptor.js +79 -0
  16. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
  17. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
  18. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +66 -0
  19. package/dist/cjs/src/descriptor/builder/builder.d.ts +13 -0
  20. package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -0
  21. package/dist/cjs/src/descriptor/builder/builder.js +37 -0
  22. package/dist/cjs/src/descriptor/builder/index.d.ts +3 -0
  23. package/dist/cjs/src/descriptor/builder/index.d.ts.map +1 -0
  24. package/dist/cjs/src/descriptor/builder/index.js +8 -0
  25. package/dist/cjs/src/descriptor/builder/parse.d.ts +5 -0
  26. package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -0
  27. package/dist/cjs/src/descriptor/builder/parse.js +116 -0
  28. package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
  29. package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
  30. package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.js +41 -0
  31. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts +12 -0
  32. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  33. package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +33 -0
  34. package/dist/cjs/src/descriptor/createWallet/index.d.ts +3 -0
  35. package/dist/cjs/src/descriptor/createWallet/index.d.ts.map +1 -0
  36. package/dist/cjs/src/descriptor/createWallet/index.js +19 -0
  37. package/dist/cjs/src/descriptor/descriptorWallet.d.ts +19 -0
  38. package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -0
  39. package/dist/cjs/src/descriptor/descriptorWallet.js +54 -0
  40. package/dist/cjs/src/descriptor/index.d.ts +8 -0
  41. package/dist/cjs/src/descriptor/index.d.ts.map +1 -0
  42. package/dist/cjs/src/descriptor/index.js +53 -0
  43. package/dist/cjs/src/descriptor/validatePolicy.d.ts +22 -0
  44. package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -0
  45. package/dist/cjs/src/descriptor/validatePolicy.js +92 -0
  46. package/dist/cjs/src/impl/bch/bch.d.ts +20 -0
  47. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -0
  48. package/dist/cjs/src/impl/bch/bch.js +74 -0
  49. package/dist/cjs/src/impl/bch/index.d.ts +3 -0
  50. package/dist/cjs/src/impl/bch/index.d.ts.map +1 -0
  51. package/dist/cjs/src/impl/bch/index.js +19 -0
  52. package/dist/cjs/src/impl/bch/tbch.d.ts +10 -0
  53. package/dist/cjs/src/impl/bch/tbch.d.ts.map +1 -0
  54. package/dist/cjs/src/impl/bch/tbch.js +48 -0
  55. package/dist/cjs/src/impl/bcha/bcha.d.ts +8 -0
  56. package/dist/cjs/src/impl/bcha/bcha.d.ts.map +1 -0
  57. package/dist/cjs/src/impl/bcha/bcha.js +48 -0
  58. package/dist/cjs/src/impl/bcha/index.d.ts +3 -0
  59. package/dist/cjs/src/impl/bcha/index.d.ts.map +1 -0
  60. package/dist/cjs/src/impl/bcha/index.js +19 -0
  61. package/dist/cjs/src/impl/bcha/tbcha.d.ts +10 -0
  62. package/dist/cjs/src/impl/bcha/tbcha.d.ts.map +1 -0
  63. package/dist/cjs/src/impl/bcha/tbcha.js +48 -0
  64. package/dist/cjs/src/impl/bsv/bsv.d.ts +8 -0
  65. package/dist/cjs/src/impl/bsv/bsv.d.ts.map +1 -0
  66. package/dist/cjs/src/impl/bsv/bsv.js +48 -0
  67. package/dist/cjs/src/impl/bsv/index.d.ts +3 -0
  68. package/dist/cjs/src/impl/bsv/index.d.ts.map +1 -0
  69. package/dist/cjs/src/impl/bsv/index.js +19 -0
  70. package/dist/cjs/src/impl/bsv/tbsv.d.ts +10 -0
  71. package/dist/cjs/src/impl/bsv/tbsv.d.ts.map +1 -0
  72. package/dist/cjs/src/impl/bsv/tbsv.js +48 -0
  73. package/dist/cjs/src/impl/btc/btc.d.ts +13 -0
  74. package/dist/cjs/src/impl/btc/btc.d.ts.map +1 -0
  75. package/dist/cjs/src/impl/btc/btc.js +55 -0
  76. package/dist/cjs/src/impl/btc/index.d.ts +7 -0
  77. package/dist/cjs/src/impl/btc/index.d.ts.map +1 -0
  78. package/dist/cjs/src/impl/btc/index.js +23 -0
  79. package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts +51 -0
  80. package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -0
  81. package/dist/cjs/src/impl/btc/inscriptionBuilder.js +183 -0
  82. package/dist/cjs/src/impl/btc/tbtc.d.ts +10 -0
  83. package/dist/cjs/src/impl/btc/tbtc.d.ts.map +1 -0
  84. package/dist/cjs/src/impl/btc/tbtc.js +48 -0
  85. package/dist/cjs/src/impl/btc/tbtc4.d.ts +10 -0
  86. package/dist/cjs/src/impl/btc/tbtc4.d.ts.map +1 -0
  87. package/dist/cjs/src/impl/btc/tbtc4.js +48 -0
  88. package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts +10 -0
  89. package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts.map +1 -0
  90. package/dist/cjs/src/impl/btc/tbtcbgsig.js +48 -0
  91. package/dist/cjs/src/impl/btc/tbtcsig.d.ts +10 -0
  92. package/dist/cjs/src/impl/btc/tbtcsig.d.ts.map +1 -0
  93. package/dist/cjs/src/impl/btc/tbtcsig.js +48 -0
  94. package/dist/cjs/src/impl/btg/btg.d.ts +7 -0
  95. package/dist/cjs/src/impl/btg/btg.d.ts.map +1 -0
  96. package/dist/cjs/src/impl/btg/btg.js +48 -0
  97. package/dist/cjs/src/impl/btg/index.d.ts +2 -0
  98. package/dist/cjs/src/impl/btg/index.d.ts.map +1 -0
  99. package/dist/cjs/src/impl/btg/index.js +18 -0
  100. package/dist/cjs/src/impl/dash/dash.d.ts +7 -0
  101. package/dist/cjs/src/impl/dash/dash.d.ts.map +1 -0
  102. package/dist/cjs/src/impl/dash/dash.js +48 -0
  103. package/dist/cjs/src/impl/dash/index.d.ts +3 -0
  104. package/dist/cjs/src/impl/dash/index.d.ts.map +1 -0
  105. package/dist/cjs/src/impl/dash/index.js +19 -0
  106. package/dist/cjs/src/impl/dash/tdash.d.ts +10 -0
  107. package/dist/cjs/src/impl/dash/tdash.d.ts.map +1 -0
  108. package/dist/cjs/src/impl/dash/tdash.js +48 -0
  109. package/dist/cjs/src/impl/doge/doge.d.ts +32 -0
  110. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -0
  111. package/dist/cjs/src/impl/doge/doge.js +79 -0
  112. package/dist/cjs/src/impl/doge/index.d.ts +3 -0
  113. package/dist/cjs/src/impl/doge/index.d.ts.map +1 -0
  114. package/dist/cjs/src/impl/doge/index.js +19 -0
  115. package/dist/cjs/src/impl/doge/tdoge.d.ts +10 -0
  116. package/dist/cjs/src/impl/doge/tdoge.d.ts.map +1 -0
  117. package/dist/cjs/src/impl/doge/tdoge.js +48 -0
  118. package/dist/cjs/src/impl/index.d.ts +10 -0
  119. package/dist/cjs/src/impl/index.d.ts.map +1 -0
  120. package/dist/cjs/src/impl/index.js +46 -0
  121. package/dist/cjs/src/impl/ltc/index.d.ts +3 -0
  122. package/dist/cjs/src/impl/ltc/index.d.ts.map +1 -0
  123. package/dist/cjs/src/impl/ltc/index.js +19 -0
  124. package/dist/cjs/src/impl/ltc/ltc.d.ts +7 -0
  125. package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -0
  126. package/dist/cjs/src/impl/ltc/ltc.js +52 -0
  127. package/dist/cjs/src/impl/ltc/tltc.d.ts +7 -0
  128. package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -0
  129. package/dist/cjs/src/impl/ltc/tltc.js +51 -0
  130. package/dist/cjs/src/impl/zec/index.d.ts +3 -0
  131. package/dist/cjs/src/impl/zec/index.d.ts.map +1 -0
  132. package/dist/cjs/src/impl/zec/index.js +19 -0
  133. package/dist/cjs/src/impl/zec/tzec.d.ts +7 -0
  134. package/dist/cjs/src/impl/zec/tzec.d.ts.map +1 -0
  135. package/dist/cjs/src/impl/zec/tzec.js +48 -0
  136. package/dist/cjs/src/impl/zec/zec.d.ts +10 -0
  137. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -0
  138. package/dist/cjs/src/impl/zec/zec.js +48 -0
  139. package/dist/cjs/src/index.d.ts +21 -0
  140. package/dist/cjs/src/index.d.ts.map +1 -0
  141. package/dist/cjs/src/index.js +60 -0
  142. package/dist/cjs/src/keychains.d.ts +52 -0
  143. package/dist/cjs/src/keychains.d.ts.map +1 -0
  144. package/dist/cjs/src/keychains.js +136 -0
  145. package/dist/cjs/src/names.d.ts +26 -0
  146. package/dist/cjs/src/names.d.ts.map +1 -0
  147. package/dist/cjs/src/names.js +214 -0
  148. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts +8 -0
  149. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
  150. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +26 -0
  151. package/dist/cjs/src/offlineVault/OfflineVaultSignable.d.ts +46 -0
  152. package/dist/cjs/src/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
  153. package/dist/cjs/src/offlineVault/OfflineVaultSignable.js +55 -0
  154. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts +15 -0
  155. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -0
  156. package/dist/cjs/src/offlineVault/TransactionExplanation.js +16 -0
  157. package/dist/cjs/src/offlineVault/descriptor/index.d.ts +2 -0
  158. package/dist/cjs/src/offlineVault/descriptor/index.d.ts.map +1 -0
  159. package/dist/cjs/src/offlineVault/descriptor/index.js +18 -0
  160. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +38 -0
  161. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -0
  162. package/dist/cjs/src/offlineVault/descriptor/transaction.js +80 -0
  163. package/dist/cjs/src/offlineVault/index.d.ts +6 -0
  164. package/dist/cjs/src/offlineVault/index.d.ts.map +1 -0
  165. package/dist/cjs/src/offlineVault/index.js +44 -0
  166. package/dist/{src → cjs/src}/recovery/RecoveryProvider.d.ts +1 -1
  167. package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -0
  168. package/dist/cjs/src/recovery/RecoveryProvider.js +22 -0
  169. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +88 -0
  170. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -0
  171. package/dist/cjs/src/recovery/backupKeyRecovery.js +377 -0
  172. package/dist/{src → cjs/src}/recovery/baseApi.d.ts +3 -6
  173. package/dist/cjs/src/recovery/baseApi.d.ts.map +1 -0
  174. package/dist/cjs/src/recovery/baseApi.js +73 -0
  175. package/dist/{src → cjs/src}/recovery/coingeckoApi.d.ts +0 -3
  176. package/dist/cjs/src/recovery/coingeckoApi.d.ts.map +1 -0
  177. package/dist/cjs/src/recovery/coingeckoApi.js +44 -0
  178. package/dist/{src → cjs/src}/recovery/crossChainRecovery.d.ts +15 -4
  179. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -0
  180. package/dist/cjs/src/recovery/crossChainRecovery.js +408 -0
  181. package/dist/{src → cjs/src}/recovery/index.d.ts +0 -1
  182. package/dist/cjs/src/recovery/index.d.ts.map +1 -0
  183. package/dist/{src → cjs/src}/recovery/index.js +6 -3
  184. package/dist/cjs/src/recovery/mempoolApi.d.ts.map +1 -0
  185. package/dist/cjs/src/recovery/mempoolApi.js +36 -0
  186. package/dist/cjs/src/transaction/bip322.d.ts +27 -0
  187. package/dist/cjs/src/transaction/bip322.d.ts.map +1 -0
  188. package/dist/cjs/src/transaction/bip322.js +125 -0
  189. package/dist/cjs/src/transaction/common/verifyPayGoAmount.d.ts +2 -0
  190. package/dist/cjs/src/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
  191. package/dist/cjs/src/transaction/common/verifyPayGoAmount.js +3 -0
  192. package/dist/cjs/src/transaction/decode.d.ts +11 -0
  193. package/dist/cjs/src/transaction/decode.d.ts.map +1 -0
  194. package/dist/cjs/src/transaction/decode.js +81 -0
  195. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +5 -0
  196. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  197. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +80 -0
  198. package/dist/cjs/src/transaction/descriptor/index.d.ts +7 -0
  199. package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -0
  200. package/dist/cjs/src/transaction/descriptor/index.js +14 -0
  201. package/dist/cjs/src/transaction/descriptor/parse.d.ts +16 -0
  202. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -0
  203. package/dist/cjs/src/transaction/descriptor/parse.js +116 -0
  204. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts +14 -0
  205. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
  206. package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +60 -0
  207. package/dist/cjs/src/transaction/descriptor/recipient.d.ts +5 -0
  208. package/dist/cjs/src/transaction/descriptor/recipient.d.ts.map +1 -0
  209. package/dist/cjs/src/transaction/descriptor/recipient.js +3 -0
  210. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +25 -0
  211. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -0
  212. package/dist/cjs/src/transaction/descriptor/signPsbt.js +43 -0
  213. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +36 -0
  214. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
  215. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +109 -0
  216. package/dist/cjs/src/transaction/explainTransaction.d.ts +18 -0
  217. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -0
  218. package/dist/cjs/src/transaction/explainTransaction.js +88 -0
  219. package/dist/cjs/src/transaction/fetchInputs.d.ts +26 -0
  220. package/dist/cjs/src/transaction/fetchInputs.d.ts.map +1 -0
  221. package/dist/cjs/src/transaction/fetchInputs.js +109 -0
  222. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +24 -0
  223. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -0
  224. package/dist/cjs/src/transaction/fixedScript/SigningError.js +26 -0
  225. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +11 -0
  226. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
  227. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +67 -0
  228. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +73 -0
  229. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
  230. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +344 -0
  231. package/dist/cjs/src/transaction/fixedScript/index.d.ts +10 -0
  232. package/dist/cjs/src/transaction/fixedScript/index.d.ts.map +1 -0
  233. package/dist/cjs/src/transaction/fixedScript/index.js +32 -0
  234. package/dist/cjs/src/transaction/fixedScript/musig2.d.ts +4 -0
  235. package/dist/cjs/src/transaction/fixedScript/musig2.d.ts.map +1 -0
  236. package/dist/cjs/src/transaction/fixedScript/musig2.js +3 -0
  237. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts +28 -0
  238. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
  239. package/dist/cjs/src/transaction/fixedScript/parseOutput.js +220 -0
  240. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +8 -0
  241. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
  242. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +215 -0
  243. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +7 -0
  244. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  245. package/dist/cjs/src/transaction/fixedScript/replayProtection.js +78 -0
  246. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +30 -0
  247. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -0
  248. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +152 -0
  249. package/dist/cjs/src/transaction/fixedScript/signPsbt.d.ts +30 -0
  250. package/dist/cjs/src/transaction/fixedScript/signPsbt.d.ts.map +1 -0
  251. package/dist/cjs/src/transaction/fixedScript/signPsbt.js +174 -0
  252. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +22 -0
  253. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
  254. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +129 -0
  255. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +17 -0
  256. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
  257. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +50 -0
  258. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts +21 -0
  259. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
  260. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +199 -0
  261. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts +9 -0
  262. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
  263. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.js +53 -0
  264. package/dist/cjs/src/transaction/index.d.ts +8 -0
  265. package/dist/cjs/src/transaction/index.d.ts.map +1 -0
  266. package/dist/cjs/src/transaction/index.js +50 -0
  267. package/dist/cjs/src/transaction/outputDifference.d.ts +40 -0
  268. package/dist/cjs/src/transaction/outputDifference.d.ts.map +1 -0
  269. package/dist/cjs/src/transaction/outputDifference.js +47 -0
  270. package/dist/cjs/src/transaction/parseTransaction.d.ts +4 -0
  271. package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -0
  272. package/dist/cjs/src/transaction/parseTransaction.js +48 -0
  273. package/dist/cjs/src/transaction/recipient.d.ts +29 -0
  274. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -0
  275. package/dist/cjs/src/transaction/recipient.js +88 -0
  276. package/dist/cjs/src/transaction/signTransaction.d.ts +6 -0
  277. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -0
  278. package/dist/cjs/src/transaction/signTransaction.js +105 -0
  279. package/dist/cjs/src/transaction/types.d.ts +49 -0
  280. package/dist/cjs/src/transaction/types.d.ts.map +1 -0
  281. package/dist/cjs/src/transaction/types.js +7 -0
  282. package/dist/cjs/src/transaction/verifyTransaction.d.ts +4 -0
  283. package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -0
  284. package/dist/cjs/src/transaction/verifyTransaction.js +50 -0
  285. package/dist/cjs/src/verifyKey.d.ts +29 -0
  286. package/dist/cjs/src/verifyKey.d.ts.map +1 -0
  287. package/dist/cjs/src/verifyKey.js +164 -0
  288. package/dist/cjs/src/wallet.d.ts +15 -0
  289. package/dist/cjs/src/wallet.d.ts.map +1 -0
  290. package/dist/cjs/src/wallet.js +8 -0
  291. package/dist/cjs/test/integration/impl/bch/bch.d.ts +2 -0
  292. package/dist/cjs/test/integration/impl/bch/bch.d.ts.map +1 -0
  293. package/dist/cjs/test/integration/impl/bch/bch.js +74 -0
  294. package/dist/cjs/test/unit/address.d.ts +2 -0
  295. package/dist/cjs/test/unit/address.d.ts.map +1 -0
  296. package/dist/cjs/test/unit/address.js +182 -0
  297. package/dist/cjs/test/unit/bip322.d.ts +2 -0
  298. package/dist/cjs/test/unit/bip322.d.ts.map +1 -0
  299. package/dist/cjs/test/unit/bip322.js +45 -0
  300. package/dist/cjs/test/unit/coins.d.ts +2 -0
  301. package/dist/cjs/test/unit/coins.d.ts.map +1 -0
  302. package/dist/cjs/test/unit/coins.js +97 -0
  303. package/dist/cjs/test/unit/customChangeWallet.d.ts +2 -0
  304. package/dist/cjs/test/unit/customChangeWallet.d.ts.map +1 -0
  305. package/dist/cjs/test/unit/customChangeWallet.js +154 -0
  306. package/dist/cjs/test/unit/customSigner.d.ts +3 -0
  307. package/dist/cjs/test/unit/customSigner.d.ts.map +1 -0
  308. package/dist/cjs/test/unit/customSigner.js +108 -0
  309. package/dist/cjs/test/unit/descriptor/NamedDescriptor.d.ts +2 -0
  310. package/dist/cjs/test/unit/descriptor/NamedDescriptor.d.ts.map +1 -0
  311. package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +18 -0
  312. package/dist/cjs/test/unit/descriptor/builder.d.ts +2 -0
  313. package/dist/cjs/test/unit/descriptor/builder.d.ts.map +1 -0
  314. package/dist/cjs/test/unit/descriptor/builder.js +72 -0
  315. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.d.ts +2 -0
  316. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  317. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +20 -0
  318. package/dist/cjs/test/unit/descriptor/descriptorWallet.d.ts +2 -0
  319. package/dist/cjs/test/unit/descriptor/descriptorWallet.d.ts.map +1 -0
  320. package/dist/cjs/test/unit/descriptor/descriptorWallet.js +28 -0
  321. package/dist/cjs/test/unit/descriptorAddress.d.ts +3 -0
  322. package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -0
  323. package/dist/cjs/test/unit/descriptorAddress.js +102 -0
  324. package/dist/cjs/test/unit/explainTransaction.d.ts +2 -0
  325. package/dist/cjs/test/unit/explainTransaction.d.ts.map +1 -0
  326. package/dist/cjs/test/unit/explainTransaction.js +74 -0
  327. package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts +15 -0
  328. package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts.map +1 -0
  329. package/dist/cjs/test/unit/fixtures/bip322/fixtures.js +51 -0
  330. package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts +4 -0
  331. package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts.map +1 -0
  332. package/dist/cjs/test/unit/fixtures/psbtHexProof.js +9 -0
  333. package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts +2 -0
  334. package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts.map +1 -0
  335. package/dist/cjs/test/unit/impl/bch/unit/bch.js +138 -0
  336. package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts +2 -0
  337. package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts.map +1 -0
  338. package/dist/cjs/test/unit/impl/bcha/unit/index.js +47 -0
  339. package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts +2 -0
  340. package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts.map +1 -0
  341. package/dist/cjs/test/unit/impl/bsv/unit/index.js +32 -0
  342. package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts +2 -0
  343. package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts.map +1 -0
  344. package/dist/cjs/test/unit/impl/btc/unit/btc.js +220 -0
  345. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts +4 -0
  346. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts.map +1 -0
  347. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.js +10 -0
  348. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts +2 -0
  349. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts.map +1 -0
  350. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.js +18 -0
  351. package/dist/cjs/test/unit/impl/btg/unit/index.d.ts +2 -0
  352. package/dist/cjs/test/unit/impl/btg/unit/index.d.ts.map +1 -0
  353. package/dist/cjs/test/unit/impl/btg/unit/index.js +29 -0
  354. package/dist/cjs/test/unit/impl/dash/unit/index.d.ts +2 -0
  355. package/dist/cjs/test/unit/impl/dash/unit/index.d.ts.map +1 -0
  356. package/dist/cjs/test/unit/impl/dash/unit/index.js +32 -0
  357. package/dist/cjs/test/unit/impl/doge/unit/index.d.ts +2 -0
  358. package/dist/cjs/test/unit/impl/doge/unit/index.d.ts.map +1 -0
  359. package/dist/cjs/test/unit/impl/doge/unit/index.js +32 -0
  360. package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts +2 -0
  361. package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts.map +1 -0
  362. package/dist/cjs/test/unit/impl/ltc/unit/index.js +39 -0
  363. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts +2 -0
  364. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts.map +1 -0
  365. package/dist/cjs/test/unit/impl/zec/unit/index.js +29 -0
  366. package/dist/cjs/test/unit/keySignatures.d.ts +2 -0
  367. package/dist/cjs/test/unit/keySignatures.d.ts.map +1 -0
  368. package/dist/cjs/test/unit/keySignatures.js +54 -0
  369. package/dist/cjs/test/unit/keychains.d.ts +2 -0
  370. package/dist/cjs/test/unit/keychains.d.ts.map +1 -0
  371. package/dist/cjs/test/unit/keychains.js +49 -0
  372. package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts +2 -0
  373. package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts.map +1 -0
  374. package/dist/cjs/test/unit/offlineVault/halfSigned.js +124 -0
  375. package/dist/cjs/test/unit/parseTransaction.d.ts +2 -0
  376. package/dist/cjs/test/unit/parseTransaction.d.ts.map +1 -0
  377. package/dist/cjs/test/unit/parseTransaction.js +125 -0
  378. package/dist/cjs/test/unit/prebuildAndSign.d.ts +6 -0
  379. package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -0
  380. package/dist/cjs/test/unit/prebuildAndSign.js +270 -0
  381. package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts +2 -0
  382. package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts.map +1 -0
  383. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +286 -0
  384. package/dist/cjs/test/unit/recovery/crossChainRecovery.d.ts +2 -0
  385. package/dist/cjs/test/unit/recovery/crossChainRecovery.d.ts.map +1 -0
  386. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +306 -0
  387. package/dist/cjs/test/unit/recovery/mock.d.ts +30 -0
  388. package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -0
  389. package/dist/cjs/test/unit/recovery/mock.js +138 -0
  390. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.d.ts +2 -0
  391. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  392. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +30 -0
  393. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts +6 -0
  394. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -0
  395. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +17 -0
  396. package/dist/cjs/test/unit/transaction/descriptor/outputDifference.d.ts +2 -0
  397. package/dist/cjs/test/unit/transaction/descriptor/outputDifference.d.ts.map +1 -0
  398. package/dist/cjs/test/unit/transaction/descriptor/outputDifference.js +76 -0
  399. package/dist/cjs/test/unit/transaction/descriptor/parse.d.ts +2 -0
  400. package/dist/cjs/test/unit/transaction/descriptor/parse.d.ts.map +1 -0
  401. package/dist/cjs/test/unit/transaction/descriptor/parse.js +135 -0
  402. package/dist/cjs/test/unit/transaction/descriptor/sign.d.ts +2 -0
  403. package/dist/cjs/test/unit/transaction/descriptor/sign.d.ts.map +1 -0
  404. package/dist/cjs/test/unit/transaction/descriptor/sign.js +32 -0
  405. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts +2 -0
  406. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts.map +1 -0
  407. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +48 -0
  408. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts +2 -0
  409. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts.map +1 -0
  410. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +132 -0
  411. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts +2 -0
  412. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts.map +1 -0
  413. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +288 -0
  414. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts +2 -0
  415. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  416. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +59 -0
  417. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts +2 -0
  418. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts.map +1 -0
  419. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +157 -0
  420. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts +3 -0
  421. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts.map +1 -0
  422. package/dist/cjs/test/unit/transaction/fixedScript/util.js +47 -0
  423. package/dist/cjs/test/unit/transaction.d.ts +2 -0
  424. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  425. package/dist/cjs/test/unit/transaction.js +524 -0
  426. package/dist/cjs/test/unit/txFormat.d.ts +30 -0
  427. package/dist/cjs/test/unit/txFormat.d.ts.map +1 -0
  428. package/dist/cjs/test/unit/txFormat.js +174 -0
  429. package/dist/cjs/test/unit/util/fixtures.d.ts +14 -0
  430. package/dist/cjs/test/unit/util/fixtures.d.ts.map +1 -0
  431. package/dist/cjs/test/unit/util/fixtures.js +102 -0
  432. package/dist/cjs/test/unit/util/index.d.ts +7 -0
  433. package/dist/cjs/test/unit/util/index.d.ts.map +1 -0
  434. package/dist/cjs/test/unit/util/index.js +23 -0
  435. package/dist/cjs/test/unit/util/keychains.d.ts +26 -0
  436. package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -0
  437. package/dist/cjs/test/unit/util/keychains.js +72 -0
  438. package/dist/cjs/test/unit/util/nockBitGo.d.ts +3 -0
  439. package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -0
  440. package/dist/cjs/test/unit/util/nockBitGo.js +11 -0
  441. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts +8 -0
  442. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -0
  443. package/dist/cjs/test/unit/util/nockIndexerAPI.js +56 -0
  444. package/dist/cjs/test/unit/util/transaction.d.ts +24 -0
  445. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -0
  446. package/dist/cjs/test/unit/util/transaction.js +107 -0
  447. package/dist/cjs/test/unit/util/unspents.d.ts +13 -0
  448. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -0
  449. package/dist/cjs/test/unit/util/unspents.js +106 -0
  450. package/dist/cjs/test/unit/util/utxoCoins.d.ts +8 -0
  451. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -0
  452. package/dist/cjs/test/unit/util/utxoCoins.js +95 -0
  453. package/dist/cjs/test/unit/util/wallet.d.ts +4 -0
  454. package/dist/cjs/test/unit/util/wallet.d.ts.map +1 -0
  455. package/dist/cjs/test/unit/util/wallet.js +9 -0
  456. package/dist/cjs/test/unit/verifyTransaction.d.ts +2 -0
  457. package/dist/cjs/test/unit/verifyTransaction.d.ts.map +1 -0
  458. package/dist/cjs/test/unit/verifyTransaction.js +327 -0
  459. package/dist/cjs/test/unit/wallet.d.ts +2 -0
  460. package/dist/cjs/test/unit/wallet.d.ts.map +1 -0
  461. package/dist/cjs/test/unit/wallet.js +248 -0
  462. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  463. package/dist/esm/abstractUtxoCoin.d.ts +435 -0
  464. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -0
  465. package/dist/esm/abstractUtxoCoin.js +616 -0
  466. package/dist/esm/address/fixedScript.d.ts +49 -0
  467. package/dist/esm/address/fixedScript.d.ts.map +1 -0
  468. package/dist/esm/address/fixedScript.js +114 -0
  469. package/dist/esm/address/index.d.ts +2 -0
  470. package/dist/esm/address/index.d.ts.map +1 -0
  471. package/dist/esm/address/index.js +2 -0
  472. package/dist/esm/config.d.ts +9 -0
  473. package/dist/esm/config.js +11 -0
  474. package/dist/esm/descriptor/NamedDescriptor.d.ts +20 -0
  475. package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -0
  476. package/dist/esm/descriptor/NamedDescriptor.js +39 -0
  477. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
  478. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
  479. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +27 -0
  480. package/dist/esm/descriptor/builder/builder.d.ts +13 -0
  481. package/dist/esm/descriptor/builder/builder.d.ts.map +1 -0
  482. package/dist/esm/descriptor/builder/builder.js +34 -0
  483. package/dist/esm/descriptor/builder/index.d.ts +3 -0
  484. package/dist/esm/descriptor/builder/index.d.ts.map +1 -0
  485. package/dist/esm/descriptor/builder/index.js +3 -0
  486. package/dist/esm/descriptor/builder/parse.d.ts +5 -0
  487. package/dist/esm/descriptor/builder/parse.d.ts.map +1 -0
  488. package/dist/esm/descriptor/builder/parse.js +112 -0
  489. package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
  490. package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
  491. package/dist/esm/descriptor/createWallet/createDescriptorWallet.js +37 -0
  492. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +12 -0
  493. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  494. package/dist/esm/descriptor/createWallet/createDescriptors.js +29 -0
  495. package/dist/esm/descriptor/createWallet/index.d.ts +3 -0
  496. package/dist/esm/descriptor/createWallet/index.d.ts.map +1 -0
  497. package/dist/esm/descriptor/createWallet/index.js +3 -0
  498. package/dist/esm/descriptor/descriptorWallet.d.ts +19 -0
  499. package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -0
  500. package/dist/esm/descriptor/descriptorWallet.js +16 -0
  501. package/dist/esm/descriptor/index.d.ts +8 -0
  502. package/dist/esm/descriptor/index.d.ts.map +1 -0
  503. package/dist/esm/descriptor/index.js +7 -0
  504. package/dist/esm/descriptor/validatePolicy.d.ts +22 -0
  505. package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -0
  506. package/dist/esm/descriptor/validatePolicy.js +80 -0
  507. package/dist/esm/impl/bch/bch.d.ts +20 -0
  508. package/dist/esm/impl/bch/bch.d.ts.map +1 -0
  509. package/dist/esm/impl/bch/bch.js +37 -0
  510. package/dist/esm/impl/bch/index.d.ts +3 -0
  511. package/dist/esm/impl/bch/index.d.ts.map +1 -0
  512. package/dist/esm/impl/bch/index.js +3 -0
  513. package/dist/esm/impl/bch/tbch.d.ts +10 -0
  514. package/dist/esm/impl/bch/tbch.d.ts.map +1 -0
  515. package/dist/esm/impl/bch/tbch.js +11 -0
  516. package/dist/esm/impl/bcha/bcha.d.ts +8 -0
  517. package/dist/esm/impl/bcha/bcha.d.ts.map +1 -0
  518. package/dist/esm/impl/bcha/bcha.js +11 -0
  519. package/dist/esm/impl/bcha/index.d.ts +3 -0
  520. package/dist/esm/impl/bcha/index.d.ts.map +1 -0
  521. package/dist/esm/impl/bcha/index.js +3 -0
  522. package/dist/esm/impl/bcha/tbcha.d.ts +10 -0
  523. package/dist/esm/impl/bcha/tbcha.d.ts.map +1 -0
  524. package/dist/esm/impl/bcha/tbcha.js +11 -0
  525. package/dist/esm/impl/bsv/bsv.d.ts +8 -0
  526. package/dist/esm/impl/bsv/bsv.d.ts.map +1 -0
  527. package/dist/esm/impl/bsv/bsv.js +11 -0
  528. package/dist/esm/impl/bsv/index.d.ts +3 -0
  529. package/dist/esm/impl/bsv/index.d.ts.map +1 -0
  530. package/dist/esm/impl/bsv/index.js +3 -0
  531. package/dist/esm/impl/bsv/tbsv.d.ts +10 -0
  532. package/dist/esm/impl/bsv/tbsv.d.ts.map +1 -0
  533. package/dist/esm/impl/bsv/tbsv.js +11 -0
  534. package/dist/esm/impl/btc/btc.d.ts +13 -0
  535. package/dist/esm/impl/btc/btc.d.ts.map +1 -0
  536. package/dist/esm/impl/btc/btc.js +18 -0
  537. package/dist/esm/impl/btc/index.d.ts +7 -0
  538. package/dist/esm/impl/btc/index.d.ts.map +1 -0
  539. package/dist/esm/impl/btc/index.js +7 -0
  540. package/dist/esm/impl/btc/inscriptionBuilder.d.ts +51 -0
  541. package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -0
  542. package/dist/esm/impl/btc/inscriptionBuilder.js +143 -0
  543. package/dist/esm/impl/btc/tbtc.d.ts +10 -0
  544. package/dist/esm/impl/btc/tbtc.d.ts.map +1 -0
  545. package/dist/esm/impl/btc/tbtc.js +11 -0
  546. package/dist/esm/impl/btc/tbtc4.d.ts +10 -0
  547. package/dist/esm/impl/btc/tbtc4.d.ts.map +1 -0
  548. package/dist/esm/impl/btc/tbtc4.js +11 -0
  549. package/dist/esm/impl/btc/tbtcbgsig.d.ts +10 -0
  550. package/dist/esm/impl/btc/tbtcbgsig.d.ts.map +1 -0
  551. package/dist/esm/impl/btc/tbtcbgsig.js +11 -0
  552. package/dist/esm/impl/btc/tbtcsig.d.ts +10 -0
  553. package/dist/esm/impl/btc/tbtcsig.d.ts.map +1 -0
  554. package/dist/esm/impl/btc/tbtcsig.js +11 -0
  555. package/dist/esm/impl/btg/btg.d.ts +7 -0
  556. package/dist/esm/impl/btg/btg.d.ts.map +1 -0
  557. package/dist/esm/impl/btg/btg.js +11 -0
  558. package/dist/esm/impl/btg/index.d.ts +2 -0
  559. package/dist/esm/impl/btg/index.d.ts.map +1 -0
  560. package/dist/esm/impl/btg/index.js +2 -0
  561. package/dist/esm/impl/dash/dash.d.ts +7 -0
  562. package/dist/esm/impl/dash/dash.d.ts.map +1 -0
  563. package/dist/esm/impl/dash/dash.js +11 -0
  564. package/dist/esm/impl/dash/index.d.ts +3 -0
  565. package/dist/esm/impl/dash/index.d.ts.map +1 -0
  566. package/dist/esm/impl/dash/index.js +3 -0
  567. package/dist/esm/impl/dash/tdash.d.ts +10 -0
  568. package/dist/esm/impl/dash/tdash.d.ts.map +1 -0
  569. package/dist/esm/impl/dash/tdash.js +11 -0
  570. package/dist/esm/impl/doge/doge.d.ts +32 -0
  571. package/dist/esm/impl/doge/doge.d.ts.map +1 -0
  572. package/dist/esm/impl/doge/doge.js +75 -0
  573. package/dist/esm/impl/doge/index.d.ts +3 -0
  574. package/dist/esm/impl/doge/index.d.ts.map +1 -0
  575. package/dist/esm/impl/doge/index.js +3 -0
  576. package/dist/esm/impl/doge/tdoge.d.ts +10 -0
  577. package/dist/esm/impl/doge/tdoge.d.ts.map +1 -0
  578. package/dist/esm/impl/doge/tdoge.js +11 -0
  579. package/dist/esm/impl/index.d.ts +10 -0
  580. package/dist/esm/impl/index.d.ts.map +1 -0
  581. package/dist/esm/impl/index.js +10 -0
  582. package/dist/esm/impl/ltc/index.d.ts +3 -0
  583. package/dist/esm/impl/ltc/index.d.ts.map +1 -0
  584. package/dist/esm/impl/ltc/index.js +3 -0
  585. package/dist/esm/impl/ltc/ltc.d.ts +7 -0
  586. package/dist/esm/impl/ltc/ltc.d.ts.map +1 -0
  587. package/dist/esm/impl/ltc/ltc.js +15 -0
  588. package/dist/esm/impl/ltc/tltc.d.ts +7 -0
  589. package/dist/esm/impl/ltc/tltc.d.ts.map +1 -0
  590. package/dist/esm/impl/ltc/tltc.js +14 -0
  591. package/dist/esm/impl/zec/index.d.ts +3 -0
  592. package/dist/esm/impl/zec/index.d.ts.map +1 -0
  593. package/dist/esm/impl/zec/index.js +3 -0
  594. package/dist/esm/impl/zec/tzec.d.ts +7 -0
  595. package/dist/esm/impl/zec/tzec.d.ts.map +1 -0
  596. package/dist/esm/impl/zec/tzec.js +11 -0
  597. package/dist/esm/impl/zec/zec.d.ts +10 -0
  598. package/dist/esm/impl/zec/zec.d.ts.map +1 -0
  599. package/dist/esm/impl/zec/zec.js +11 -0
  600. package/dist/esm/index.d.ts +21 -0
  601. package/dist/esm/index.d.ts.map +1 -0
  602. package/dist/esm/index.js +21 -0
  603. package/dist/esm/keychains.d.ts +52 -0
  604. package/dist/esm/keychains.d.ts.map +1 -0
  605. package/dist/esm/keychains.js +92 -0
  606. package/dist/esm/names.d.ts +26 -0
  607. package/dist/esm/names.d.ts.map +1 -0
  608. package/dist/esm/names.js +171 -0
  609. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +8 -0
  610. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
  611. package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +23 -0
  612. package/dist/esm/offlineVault/OfflineVaultSignable.d.ts +46 -0
  613. package/dist/esm/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
  614. package/dist/esm/offlineVault/OfflineVaultSignable.js +18 -0
  615. package/dist/esm/offlineVault/TransactionExplanation.d.ts +15 -0
  616. package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -0
  617. package/dist/esm/offlineVault/TransactionExplanation.js +13 -0
  618. package/dist/esm/offlineVault/descriptor/index.d.ts +2 -0
  619. package/dist/esm/offlineVault/descriptor/index.d.ts.map +1 -0
  620. package/dist/esm/offlineVault/descriptor/index.js +2 -0
  621. package/dist/esm/offlineVault/descriptor/transaction.d.ts +38 -0
  622. package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -0
  623. package/dist/esm/offlineVault/descriptor/transaction.js +41 -0
  624. package/dist/esm/offlineVault/index.d.ts +6 -0
  625. package/dist/esm/offlineVault/index.d.ts.map +1 -0
  626. package/dist/esm/offlineVault/index.js +4 -0
  627. package/dist/esm/recovery/RecoveryProvider.d.ts +22 -0
  628. package/dist/{src → esm}/recovery/RecoveryProvider.d.ts.map +1 -1
  629. package/dist/esm/recovery/RecoveryProvider.js +19 -0
  630. package/dist/esm/recovery/backupKeyRecovery.d.ts +88 -0
  631. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -0
  632. package/dist/esm/recovery/backupKeyRecovery.js +336 -0
  633. package/dist/esm/recovery/baseApi.d.ts +24 -0
  634. package/dist/esm/recovery/baseApi.d.ts.map +1 -0
  635. package/dist/esm/recovery/baseApi.js +64 -0
  636. package/dist/esm/recovery/coingeckoApi.d.ts +6 -0
  637. package/dist/esm/recovery/coingeckoApi.d.ts.map +1 -0
  638. package/dist/esm/recovery/coingeckoApi.js +40 -0
  639. package/dist/esm/recovery/crossChainRecovery.d.ts +96 -0
  640. package/dist/{src → esm}/recovery/crossChainRecovery.d.ts.map +1 -1
  641. package/dist/esm/recovery/crossChainRecovery.js +368 -0
  642. package/dist/esm/recovery/index.d.ts +7 -0
  643. package/dist/{src → esm}/recovery/index.d.ts.map +1 -1
  644. package/dist/esm/recovery/index.js +7 -0
  645. package/dist/esm/recovery/mempoolApi.d.ts +7 -0
  646. package/dist/{src → esm}/recovery/mempoolApi.d.ts.map +1 -1
  647. package/dist/esm/recovery/mempoolApi.js +29 -0
  648. package/dist/esm/transaction/bip322.d.ts +27 -0
  649. package/dist/esm/transaction/bip322.d.ts.map +1 -0
  650. package/dist/esm/transaction/bip322.js +86 -0
  651. package/dist/esm/transaction/common/verifyPayGoAmount.d.ts +1 -0
  652. package/dist/esm/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
  653. package/dist/esm/transaction/common/verifyPayGoAmount.js +1 -0
  654. package/dist/esm/transaction/decode.d.ts +11 -0
  655. package/dist/esm/transaction/decode.d.ts.map +1 -0
  656. package/dist/esm/transaction/decode.js +43 -0
  657. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +5 -0
  658. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  659. package/dist/esm/transaction/descriptor/explainPsbt.js +44 -0
  660. package/dist/esm/transaction/descriptor/index.d.ts +7 -0
  661. package/dist/esm/transaction/descriptor/index.d.ts.map +1 -0
  662. package/dist/esm/transaction/descriptor/index.js +6 -0
  663. package/dist/esm/transaction/descriptor/parse.d.ts +16 -0
  664. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -0
  665. package/dist/esm/transaction/descriptor/parse.js +79 -0
  666. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +14 -0
  667. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
  668. package/dist/esm/transaction/descriptor/parseToAmountType.js +55 -0
  669. package/dist/esm/transaction/descriptor/recipient.d.ts +5 -0
  670. package/dist/esm/transaction/descriptor/recipient.d.ts.map +1 -0
  671. package/dist/esm/transaction/descriptor/recipient.js +2 -0
  672. package/dist/esm/transaction/descriptor/signPsbt.d.ts +25 -0
  673. package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -0
  674. package/dist/esm/transaction/descriptor/signPsbt.js +38 -0
  675. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +36 -0
  676. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
  677. package/dist/esm/transaction/descriptor/verifyTransaction.js +66 -0
  678. package/dist/esm/transaction/explainTransaction.d.ts +18 -0
  679. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -0
  680. package/dist/esm/transaction/explainTransaction.js +52 -0
  681. package/dist/esm/transaction/fetchInputs.d.ts +26 -0
  682. package/dist/esm/transaction/fetchInputs.d.ts.map +1 -0
  683. package/dist/esm/transaction/fetchInputs.js +72 -0
  684. package/dist/esm/transaction/fixedScript/SigningError.d.ts +24 -0
  685. package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -0
  686. package/dist/esm/transaction/fixedScript/SigningError.js +21 -0
  687. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +11 -0
  688. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
  689. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +64 -0
  690. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +73 -0
  691. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
  692. package/dist/esm/transaction/fixedScript/explainTransaction.js +307 -0
  693. package/dist/esm/transaction/fixedScript/index.d.ts +10 -0
  694. package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -0
  695. package/dist/esm/transaction/fixedScript/index.js +9 -0
  696. package/dist/esm/transaction/fixedScript/musig2.d.ts +4 -0
  697. package/dist/esm/transaction/fixedScript/musig2.d.ts.map +1 -0
  698. package/dist/esm/transaction/fixedScript/musig2.js +2 -0
  699. package/dist/esm/transaction/fixedScript/parseOutput.d.ts +28 -0
  700. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -0
  701. package/dist/esm/transaction/fixedScript/parseOutput.js +213 -0
  702. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +8 -0
  703. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
  704. package/dist/esm/transaction/fixedScript/parseTransaction.js +176 -0
  705. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +7 -0
  706. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  707. package/dist/esm/transaction/fixedScript/replayProtection.js +39 -0
  708. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +30 -0
  709. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -0
  710. package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +112 -0
  711. package/dist/esm/transaction/fixedScript/signPsbt.d.ts +30 -0
  712. package/dist/esm/transaction/fixedScript/signPsbt.d.ts.map +1 -0
  713. package/dist/esm/transaction/fixedScript/signPsbt.js +134 -0
  714. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +22 -0
  715. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
  716. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +122 -0
  717. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +17 -0
  718. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -0
  719. package/dist/esm/transaction/fixedScript/signTransaction.js +44 -0
  720. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts +21 -0
  721. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
  722. package/dist/esm/transaction/fixedScript/verifyTransaction.js +160 -0
  723. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +9 -0
  724. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
  725. package/dist/esm/transaction/getPayGoVerificationPubkey.js +17 -0
  726. package/dist/esm/transaction/index.d.ts +8 -0
  727. package/dist/esm/transaction/index.d.ts.map +1 -0
  728. package/dist/esm/transaction/index.js +8 -0
  729. package/dist/esm/transaction/outputDifference.d.ts +40 -0
  730. package/dist/esm/transaction/outputDifference.d.ts.map +1 -0
  731. package/dist/esm/transaction/outputDifference.js +42 -0
  732. package/dist/esm/transaction/parseTransaction.d.ts +4 -0
  733. package/dist/esm/transaction/parseTransaction.d.ts.map +1 -0
  734. package/dist/esm/transaction/parseTransaction.js +12 -0
  735. package/dist/esm/transaction/recipient.d.ts +29 -0
  736. package/dist/esm/transaction/recipient.d.ts.map +1 -0
  737. package/dist/esm/transaction/recipient.js +48 -0
  738. package/dist/esm/transaction/signTransaction.d.ts +6 -0
  739. package/dist/esm/transaction/signTransaction.d.ts.map +1 -0
  740. package/dist/esm/transaction/signTransaction.js +66 -0
  741. package/dist/esm/transaction/types.d.ts +49 -0
  742. package/dist/esm/transaction/types.d.ts.map +1 -0
  743. package/dist/esm/transaction/types.js +4 -0
  744. package/dist/esm/transaction/verifyTransaction.d.ts +4 -0
  745. package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -0
  746. package/dist/esm/transaction/verifyTransaction.js +14 -0
  747. package/dist/esm/verifyKey.d.ts +29 -0
  748. package/dist/esm/verifyKey.d.ts.map +1 -0
  749. package/dist/esm/verifyKey.js +123 -0
  750. package/dist/esm/wallet.d.ts +15 -0
  751. package/dist/esm/wallet.d.ts.map +1 -0
  752. package/dist/esm/wallet.js +5 -0
  753. package/package.json +48 -18
  754. package/.eslintignore +0 -5
  755. package/CHANGELOG.md +0 -253
  756. package/dist/src/abstractUtxoCoin.d.ts +0 -392
  757. package/dist/src/abstractUtxoCoin.d.ts.map +0 -1
  758. package/dist/src/abstractUtxoCoin.js +0 -931
  759. package/dist/src/config.js +0 -14
  760. package/dist/src/index.d.ts +0 -6
  761. package/dist/src/index.d.ts.map +0 -1
  762. package/dist/src/index.js +0 -18
  763. package/dist/src/parseOutput.d.ts +0 -22
  764. package/dist/src/parseOutput.d.ts.map +0 -1
  765. package/dist/src/parseOutput.js +0 -181
  766. package/dist/src/recovery/RecoveryProvider.js +0 -24
  767. package/dist/src/recovery/backupKeyRecovery.d.ts +0 -62
  768. package/dist/src/recovery/backupKeyRecovery.d.ts.map +0 -1
  769. package/dist/src/recovery/backupKeyRecovery.js +0 -293
  770. package/dist/src/recovery/baseApi.d.ts.map +0 -1
  771. package/dist/src/recovery/baseApi.js +0 -73
  772. package/dist/src/recovery/coingeckoApi.d.ts.map +0 -1
  773. package/dist/src/recovery/coingeckoApi.js +0 -47
  774. package/dist/src/recovery/crossChainRecovery.js +0 -294
  775. package/dist/src/recovery/mempoolApi.js +0 -33
  776. package/dist/src/recovery/smartbitApi.d.ts +0 -11
  777. package/dist/src/recovery/smartbitApi.d.ts.map +0 -1
  778. package/dist/src/recovery/smartbitApi.js +0 -36
  779. package/dist/src/replayProtection.d.ts +0 -4
  780. package/dist/src/replayProtection.d.ts.map +0 -1
  781. package/dist/src/replayProtection.js +0 -21
  782. package/dist/src/sign.d.ts +0 -31
  783. package/dist/src/sign.d.ts.map +0 -1
  784. package/dist/src/sign.js +0 -104
  785. package/dist/tsconfig.tsbuildinfo +0 -8179
  786. /package/dist/{src → cjs/src}/config.d.ts +0 -0
  787. /package/dist/{src → cjs/src}/recovery/mempoolApi.d.ts +0 -0
  788. /package/dist/{src → esm}/config.d.ts.map +0 -0
@@ -0,0 +1,44 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
36
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getTransactionExplanation = exports.descriptor = void 0;
40
+ exports.descriptor = __importStar(require("./descriptor"));
41
+ __exportStar(require("./OfflineVaultHalfSigned"), exports);
42
+ var TransactionExplanation_1 = require("./TransactionExplanation");
43
+ Object.defineProperty(exports, "getTransactionExplanation", { enumerable: true, get: function () { return TransactionExplanation_1.getTransactionExplanation; } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvb2ZmbGluZVZhdWx0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJEQUEyQztBQUMzQywyREFBeUM7QUFDekMsbUVBQXFFO0FBQTVELG1JQUFBLHlCQUF5QixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgZGVzY3JpcHRvciBmcm9tICcuL2Rlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9PZmZsaW5lVmF1bHRIYWxmU2lnbmVkJztcbmV4cG9ydCB7IGdldFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL1RyYW5zYWN0aW9uRXhwbGFuYXRpb24nO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vVHJhbnNhY3Rpb25FeHBsYW5hdGlvbic7XG5leHBvcnQgeyBFeHBsYW5hdGlvbk91dHB1dCB9IGZyb20gJy4vVHJhbnNhY3Rpb25FeHBsYW5hdGlvbic7XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { AddressInfo, TransactionIO } from '@bitgo-beta/blockapis';
2
2
  import { bitgo } from '@bitgo-beta/utxo-lib';
3
- declare type Unspent<TNumber extends number | bigint = number> = bitgo.Unspent<TNumber>;
3
+ type Unspent<TNumber extends number | bigint = number> = bitgo.Unspent<TNumber>;
4
4
  /**
5
5
  * An account with bear minimum information required for recoveries.
6
6
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecoveryProvider.d.ts","sourceRoot":"","sources":["../../../../src/recovery/RecoveryProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAI7C,KAAK,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IACxE,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1E,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACxD;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAgBrF"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.forCoin = forCoin;
4
+ const blockapis_1 = require("@bitgo-beta/blockapis");
5
+ const baseApi_1 = require("./baseApi");
6
+ function forCoin(coinName, apiToken) {
7
+ switch (coinName) {
8
+ case 'btc':
9
+ case 'tbtc':
10
+ case 'bch':
11
+ case 'bcha':
12
+ case 'bsv':
13
+ case 'btg':
14
+ case 'dash':
15
+ case 'doge':
16
+ case 'ltc':
17
+ case 'zec':
18
+ return blockapis_1.BlockchairApi.forCoin(coinName, { apiToken });
19
+ }
20
+ throw new baseApi_1.ApiNotImplementedError(coinName);
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3ZlcnlQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9yZWNvdmVyeS9SZWNvdmVyeVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeUJBLDBCQWdCQztBQXpDRCxxREFBa0Y7QUFHbEYsdUNBQW1EO0FBc0JuRCxTQUFnQixPQUFPLENBQUMsUUFBZ0IsRUFBRSxRQUFpQjtJQUN6RCxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssS0FBSztZQUNSLE9BQU8seUJBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsTUFBTSxJQUFJLGdDQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCbG9ja2NoYWlyQXBpLCBBZGRyZXNzSW5mbywgVHJhbnNhY3Rpb25JTyB9IGZyb20gJ0BiaXRnby1iZXRhL2Jsb2NrYXBpcyc7XG5pbXBvcnQgeyBiaXRnbyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgQXBpTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gJy4vYmFzZUFwaSc7XG5cbnR5cGUgVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IGJpdGdvLlVuc3BlbnQ8VE51bWJlcj47XG5cbi8qKlxuICogQW4gYWNjb3VudCB3aXRoIGJlYXIgbWluaW11bSBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgcmVjb3Zlcmllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyeUFjY291bnREYXRhIHtcbiAgdHhDb3VudDogbnVtYmVyO1xuICB0b3RhbEJhbGFuY2U6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGYWN0b3J5IGZvciBBZGRyZXNzQXBpICYgVXR4b0FwaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJ5UHJvdmlkZXI8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICBnZXRVbnNwZW50c0ZvckFkZHJlc3NlcyhhZGRyZXNzZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxVbnNwZW50PFROdW1iZXI+W10+O1xuICBnZXRBZGRyZXNzSW5mbyhhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPEFkZHJlc3NJbmZvPjtcbiAgZ2V0VHJhbnNhY3Rpb25IZXgodHhpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuICBnZXRUcmFuc2FjdGlvbklPKHR4aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JTz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JDb2luKGNvaW5OYW1lOiBzdHJpbmcsIGFwaVRva2VuPzogc3RyaW5nKTogUmVjb3ZlcnlQcm92aWRlcjxudW1iZXI+IHtcbiAgc3dpdGNoIChjb2luTmFtZSkge1xuICAgIGNhc2UgJ2J0Yyc6XG4gICAgY2FzZSAndGJ0Yyc6XG4gICAgY2FzZSAnYmNoJzpcbiAgICBjYXNlICdiY2hhJzpcbiAgICBjYXNlICdic3YnOlxuICAgIGNhc2UgJ2J0Zyc6XG4gICAgY2FzZSAnZGFzaCc6XG4gICAgY2FzZSAnZG9nZSc6XG4gICAgY2FzZSAnbHRjJzpcbiAgICBjYXNlICd6ZWMnOlxuICAgICAgcmV0dXJuIEJsb2NrY2hhaXJBcGkuZm9yQ29pbihjb2luTmFtZSwgeyBhcGlUb2tlbiB9KTtcbiAgfVxuXG4gIHRocm93IG5ldyBBcGlOb3RJbXBsZW1lbnRlZEVycm9yKGNvaW5OYW1lKTtcbn1cbiJdfQ==
@@ -0,0 +1,88 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { BitGoBase } from '@bitgo-beta/sdk-core';
3
+ import { AbstractUtxoCoin } from '../abstractUtxoCoin';
4
+ import { RecoveryProvider } from './RecoveryProvider';
5
+ type ScriptType2Of3 = utxolib.bitgo.outputScripts.ScriptType2Of3;
6
+ type WalletUnspentJSON = utxolib.bitgo.WalletUnspent & {
7
+ valueString: string;
8
+ };
9
+ export interface OfflineVaultTxInfo {
10
+ inputs: WalletUnspentJSON[];
11
+ }
12
+ export interface FormattedOfflineVaultTxInfo {
13
+ txInfo: {
14
+ unspents: WalletUnspentJSON[];
15
+ };
16
+ txHex: string;
17
+ feeInfo: Record<string, never>;
18
+ coin: string;
19
+ }
20
+ export interface RecoverParams {
21
+ scan?: number;
22
+ userKey: string;
23
+ backupKey: string;
24
+ bitgoKey: string;
25
+ recoveryDestination: string;
26
+ krsProvider?: string;
27
+ ignoreAddressTypes: ScriptType2Of3[];
28
+ walletPassphrase?: string;
29
+ apiKey?: string;
30
+ userKeyPath?: string;
31
+ recoveryProvider?: RecoveryProvider;
32
+ feeRate?: number;
33
+ }
34
+ export type BackupKeyRecoveryTransansaction = {
35
+ inputs?: WalletUnspentJSON[];
36
+ transactionHex: string;
37
+ coin: string;
38
+ backupKey: string;
39
+ recoveryAmount: number;
40
+ recoveryAmountString: string;
41
+ };
42
+ /**
43
+ * Builds a funds recovery transaction without BitGo.
44
+ *
45
+ * Returns transaction hex in legacy format for unsigned sweep transaction, half signed backup recovery transaction with KRS provider (only keyternal),
46
+ * fully signed backup recovery transaction without a KRS provider.
47
+ *
48
+ * Returns PSBT hex for half signed backup recovery transaction with KRS provider (excluding keyternal)
49
+ * For PSBT hex cases, Unspents are not required in response.
50
+ *
51
+ * @param coin
52
+ * @param bitgo
53
+ * @param params
54
+ * - userKey: [encrypted] xprv, or xpub
55
+ * - backupKey: [encrypted] xprv, or xpub if the xprv is held by a KRS provider
56
+ * - walletPassphrase: necessary if one of the xprvs is encrypted
57
+ * - bitgoKey: xpub
58
+ * - krsProvider: necessary if backup key is held by KRS
59
+ * - recoveryDestination: target address to send recovered funds to
60
+ * - scan: the amount of consecutive addresses without unspents to scan through before stopping
61
+ * - ignoreAddressTypes: (optional) scripts to ignore
62
+ * for example: ['p2shP2wsh', 'p2wsh'] will prevent code from checking for wrapped-segwit and native-segwit chains on the public block explorers
63
+ */
64
+ export declare function backupKeyRecovery(coin: AbstractUtxoCoin, bitgo: BitGoBase, params: RecoverParams): Promise<BackupKeyRecoveryTransansaction | FormattedOfflineVaultTxInfo>;
65
+ export interface BitGoV1Unspent {
66
+ tx_hash: string;
67
+ tx_output_n: number;
68
+ value: number;
69
+ }
70
+ export interface V1SweepParams {
71
+ walletId: string;
72
+ walletPassphrase: string;
73
+ unspents: BitGoV1Unspent[];
74
+ recoveryDestination: string;
75
+ userKey: string;
76
+ otp: string;
77
+ }
78
+ export interface V1RecoverParams extends Omit<V1SweepParams, 'otp'> {
79
+ backupKey: string;
80
+ }
81
+ export declare function v1BackupKeyRecovery(coin: AbstractUtxoCoin, bitgo: BitGoBase, params: V1RecoverParams): Promise<string>;
82
+ export declare function v1Sweep(coin: AbstractUtxoCoin, bitgo: BitGoBase, params: V1SweepParams): Promise<{
83
+ tx: string;
84
+ hash: string;
85
+ status: string;
86
+ }>;
87
+ export {};
88
+ //# sourceMappingURL=backupKeyRecovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backupKeyRecovery.d.ts","sourceRoot":"","sources":["../../../../src/recovery/backupKeyRecovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,377 @@
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
+ exports.backupKeyRecovery = backupKeyRecovery;
40
+ exports.v1BackupKeyRecovery = v1BackupKeyRecovery;
41
+ exports.v1Sweep = v1Sweep;
42
+ const assert_1 = __importDefault(require("assert"));
43
+ const lodash_1 = __importDefault(require("lodash"));
44
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
45
+ const unspents_1 = require("@bitgo-beta/unspents");
46
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
47
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
48
+ const signPsbt_1 = require("../transaction/fixedScript/signPsbt");
49
+ const address_1 = require("../address");
50
+ const RecoveryProvider_1 = require("./RecoveryProvider");
51
+ const mempoolApi_1 = require("./mempoolApi");
52
+ const coingeckoApi_1 = require("./coingeckoApi");
53
+ const { getInternalChainCode, scriptTypeForChain, outputScripts, getExternalChainCode } = utxolib.bitgo;
54
+ /**
55
+ * This transforms the txInfo from recover into the format that offline-signing-tool expects
56
+ * @param coinName
57
+ * @param txInfo
58
+ * @param txHex
59
+ * @returns {{txHex: *, txInfo: {unspents: *}, feeInfo: {}, coin: void}}
60
+ */
61
+ function formatForOfflineVault(coinName, txInfo, txHex) {
62
+ return {
63
+ txHex,
64
+ txInfo: {
65
+ unspents: txInfo.inputs.map((input) => {
66
+ (0, assert_1.default)(input.valueString);
67
+ return { ...input, valueString: input.valueString };
68
+ }),
69
+ },
70
+ feeInfo: {},
71
+ coin: coinName,
72
+ };
73
+ }
74
+ /**
75
+ * Get the current market price from a third party to be used for recovery
76
+ * This function is only intended for non-bitgo recovery transactions, when it is necessary
77
+ * to calculate the rough fee needed to pay to Keyternal. We are okay with approximating,
78
+ * because the resulting price of this function only has less than 1 dollar influence on the
79
+ * fee that needs to be paid to Keyternal.
80
+ *
81
+ * See calculateFeeAmount function: return Math.round(feeAmountUsd / currentPrice * self.getBaseFactor());
82
+ *
83
+ * This end function should not be used as an accurate endpoint, since some coins' prices are missing from the provider
84
+ */
85
+ async function getRecoveryMarketPrice(coin) {
86
+ return await new coingeckoApi_1.CoingeckoApi().getUSDPrice(coin.getFamily());
87
+ }
88
+ /**
89
+ * Calculates the amount (in base units) to pay a KRS provider when building a recovery transaction
90
+ * @param coin
91
+ * @param params
92
+ * @param params.provider {String} the KRS provider that holds the backup key
93
+ * @returns {*}
94
+ */
95
+ async function calculateFeeAmount(coin, params) {
96
+ const krsProvider = sdk_core_1.krsProviders[params.provider];
97
+ if (krsProvider === undefined) {
98
+ throw new Error(`no fee structure specified for provider ${params.provider}`);
99
+ }
100
+ if (krsProvider.feeType === 'flatUsd') {
101
+ const feeAmountUsd = krsProvider.feeAmount;
102
+ const currentPrice = await getRecoveryMarketPrice(coin);
103
+ return Math.round((feeAmountUsd / currentPrice) * coin.getBaseFactor());
104
+ }
105
+ else {
106
+ // we can add more fee structures here as needed for different providers, such as percentage of recovery amount
107
+ throw new Error('Fee structure not implemented');
108
+ }
109
+ }
110
+ /**
111
+ * Generate an address and format it for API queries
112
+ * @param coin - The coin instance
113
+ * @param network - The network to use
114
+ * @param walletKeys - The wallet keys
115
+ * @param chain - The chain code
116
+ * @param addrIndex - The address index
117
+ * @returns The formatted address (with cashaddr prefix stripped for BCH/BCHA)
118
+ */
119
+ function getFormattedAddress(coin, network, walletKeys, chain, addrIndex) {
120
+ const format = coin.getChain() === 'bch' || coin.getChain() === 'bcha' ? 'cashaddr' : undefined;
121
+ const address = (0, address_1.generateAddressWithChainAndIndex)(network, walletKeys, chain, addrIndex, format);
122
+ // Blockchair uses cashaddr format when querying the API for address information. Strip the prefix for BCH/BCHA.
123
+ return format === 'cashaddr' ? address.split(':')[1] : address;
124
+ }
125
+ async function queryBlockchainUnspentsPath(coin, params, walletKeys, chain) {
126
+ const scriptType = scriptTypeForChain(chain);
127
+ const fetchPrevTx = !utxolib.bitgo.outputScripts.hasWitnessData(scriptType) && (0, utxo_lib_1.getMainnet)(coin.network) !== utxo_lib_1.networks.zcash;
128
+ const recoveryProvider = params.recoveryProvider ?? (0, RecoveryProvider_1.forCoin)(coin.getChain(), params.apiKey);
129
+ const MAX_SEQUENTIAL_ADDRESSES_WITHOUT_TXS = params.scan || 20;
130
+ let numSequentialAddressesWithoutTxs = 0;
131
+ const prevTxCache = new Map();
132
+ async function getPrevTx(txid) {
133
+ let prevTxHex = prevTxCache.get(txid);
134
+ if (!prevTxHex) {
135
+ prevTxHex = await recoveryProvider.getTransactionHex(txid);
136
+ prevTxCache.set(txid, prevTxHex);
137
+ }
138
+ return prevTxHex;
139
+ }
140
+ async function gatherUnspents(addrIndex) {
141
+ const formattedAddress = getFormattedAddress(coin, coin.network, walletKeys, chain, addrIndex);
142
+ const addrInfo = await recoveryProvider.getAddressInfo(formattedAddress);
143
+ // we use txCount here because it implies usage - having tx'es means the addr was generated and used
144
+ if (addrInfo.txCount === 0) {
145
+ numSequentialAddressesWithoutTxs++;
146
+ }
147
+ else {
148
+ numSequentialAddressesWithoutTxs = 0;
149
+ if (addrInfo.balance > 0) {
150
+ console.log(`Found an address with balance: ${formattedAddress} with balance ${addrInfo.balance}`);
151
+ const addressUnspents = await recoveryProvider.getUnspentsForAddresses([formattedAddress]);
152
+ const processedUnspents = await Promise.all(addressUnspents.map(async (u) => {
153
+ const { txid, vout } = utxolib.bitgo.parseOutputId(u.id);
154
+ let val = BigInt(u.value);
155
+ if (coin.amountType === 'bigint') {
156
+ // blockchair returns the number with the correct precision, but in number format
157
+ // json parse won't parse it correctly, so we requery the txid for the tx hex to decode here
158
+ if (!Number.isSafeInteger(u.value)) {
159
+ const txHex = await getPrevTx(txid);
160
+ const tx = coin.createTransactionFromHex(txHex);
161
+ val = tx.outs[vout].value;
162
+ }
163
+ }
164
+ // the api may return cashaddr's instead of legacy for BCH and BCHA
165
+ // downstream processes's only expect legacy addresses
166
+ u = { ...u, address: coin.canonicalAddress(u.address) };
167
+ return {
168
+ ...u,
169
+ value: val,
170
+ chain: chain,
171
+ index: addrIndex,
172
+ prevTx: fetchPrevTx ? Buffer.from(await getPrevTx(txid), 'hex') : undefined,
173
+ };
174
+ }));
175
+ walletUnspents.push(...processedUnspents);
176
+ }
177
+ }
178
+ if (numSequentialAddressesWithoutTxs >= MAX_SEQUENTIAL_ADDRESSES_WITHOUT_TXS) {
179
+ // stop searching for addresses with unspents in them, we've found ${MAX_SEQUENTIAL_ADDRESSES_WITHOUT_TXS} in a row with none
180
+ // we are done
181
+ return;
182
+ }
183
+ return gatherUnspents(addrIndex + 1);
184
+ }
185
+ // get unspents for these addresses
186
+ const walletUnspents = [];
187
+ // This will populate walletAddresses
188
+ await gatherUnspents(0);
189
+ if (walletUnspents.length === 0) {
190
+ // Couldn't find any addresses with funds
191
+ return [];
192
+ }
193
+ return walletUnspents;
194
+ }
195
+ async function getRecoveryFeePerBytes(coin, { defaultValue }) {
196
+ if (coin.getFamily() === 'doge') {
197
+ // https://github.com/dogecoin/dogecoin/blob/master/doc/fee-recommendation.md
198
+ // 0.01 DOGE per KB
199
+ return 1000;
200
+ }
201
+ try {
202
+ return await mempoolApi_1.MempoolApi.forCoin(coin.getChain()).getRecoveryFeePerBytes();
203
+ }
204
+ catch (e) {
205
+ console.dir(e);
206
+ return defaultValue;
207
+ }
208
+ }
209
+ /**
210
+ * Builds a funds recovery transaction without BitGo.
211
+ *
212
+ * Returns transaction hex in legacy format for unsigned sweep transaction, half signed backup recovery transaction with KRS provider (only keyternal),
213
+ * fully signed backup recovery transaction without a KRS provider.
214
+ *
215
+ * Returns PSBT hex for half signed backup recovery transaction with KRS provider (excluding keyternal)
216
+ * For PSBT hex cases, Unspents are not required in response.
217
+ *
218
+ * @param coin
219
+ * @param bitgo
220
+ * @param params
221
+ * - userKey: [encrypted] xprv, or xpub
222
+ * - backupKey: [encrypted] xprv, or xpub if the xprv is held by a KRS provider
223
+ * - walletPassphrase: necessary if one of the xprvs is encrypted
224
+ * - bitgoKey: xpub
225
+ * - krsProvider: necessary if backup key is held by KRS
226
+ * - recoveryDestination: target address to send recovered funds to
227
+ * - scan: the amount of consecutive addresses without unspents to scan through before stopping
228
+ * - ignoreAddressTypes: (optional) scripts to ignore
229
+ * for example: ['p2shP2wsh', 'p2wsh'] will prevent code from checking for wrapped-segwit and native-segwit chains on the public block explorers
230
+ */
231
+ async function backupKeyRecovery(coin, bitgo, params) {
232
+ if (lodash_1.default.isUndefined(params.userKey)) {
233
+ throw new Error('missing userKey');
234
+ }
235
+ if (lodash_1.default.isUndefined(params.backupKey)) {
236
+ throw new Error('missing backupKey');
237
+ }
238
+ if (lodash_1.default.isUndefined(params.recoveryDestination) ||
239
+ !coin.isValidAddress(params.recoveryDestination, { anyFormat: true })) {
240
+ throw new Error('invalid recoveryDestination');
241
+ }
242
+ if (!lodash_1.default.isUndefined(params.scan) && (!lodash_1.default.isInteger(params.scan) || params.scan < 0)) {
243
+ throw new Error('scan must be a positive integer');
244
+ }
245
+ if (params.feeRate !== undefined && (!Number.isFinite(params.feeRate) || params.feeRate <= 0)) {
246
+ throw new Error('feeRate must be a positive number');
247
+ }
248
+ const isKrsRecovery = (0, sdk_core_1.getIsKrsRecovery)(params);
249
+ const isUnsignedSweep = (0, sdk_core_1.getIsUnsignedSweep)(params);
250
+ const responseTxFormat = isUnsignedSweep || !isKrsRecovery || params.krsProvider === 'keyternal' ? 'legacy' : 'psbt';
251
+ const krsProvider = isKrsRecovery ? (0, sdk_core_1.getKrsProvider)(coin, params.krsProvider) : undefined;
252
+ // check whether key material and password authenticate the users and return parent keys of all three keys of the wallet
253
+ const keys = (0, sdk_core_1.getBip32Keys)(bitgo, params, { requireBitGoXpub: true });
254
+ if (!(0, sdk_core_1.isTriple)(keys)) {
255
+ throw new Error(`expected key triple`);
256
+ }
257
+ const walletKeys = new utxolib.bitgo.RootWalletKeys(keys, [
258
+ params.userKeyPath || utxolib.bitgo.RootWalletKeys.defaultPrefix,
259
+ utxolib.bitgo.RootWalletKeys.defaultPrefix,
260
+ utxolib.bitgo.RootWalletKeys.defaultPrefix,
261
+ ]);
262
+ const unspents = (await Promise.all(outputScripts.scriptTypes2Of3
263
+ .filter((addressType) => coin.supportsAddressType(addressType) && !params.ignoreAddressTypes?.includes(addressType))
264
+ .reduce((queries, addressType) => [
265
+ ...queries,
266
+ queryBlockchainUnspentsPath(coin, params, walletKeys, getExternalChainCode(addressType)),
267
+ queryBlockchainUnspentsPath(coin, params, walletKeys, getInternalChainCode(addressType)),
268
+ ], []))).flat();
269
+ // Execute the queries and gather the unspents
270
+ const totalInputAmount = utxolib.bitgo.unspentSum(unspents, 'bigint');
271
+ if (totalInputAmount <= BigInt(0)) {
272
+ throw new sdk_core_1.ErrorNoInputToRecover();
273
+ }
274
+ // Build the psbt
275
+ const psbt = utxolib.bitgo.createPsbtForNetwork({ network: coin.network });
276
+ // xpubs can become handy for many things.
277
+ utxolib.bitgo.addXpubsToPsbt(psbt, walletKeys);
278
+ const txInfo = {};
279
+ const feePerByte = params.feeRate !== undefined ? params.feeRate : await getRecoveryFeePerBytes(coin, { defaultValue: 50 });
280
+ // KRS recovery transactions have a 2nd output to pay the recovery fee, like paygo fees.
281
+ const dimensions = unspents_1.Dimensions.fromPsbt(psbt).plus(isKrsRecovery ? unspents_1.Dimensions.SingleOutput.p2wsh : unspents_1.Dimensions.ZERO);
282
+ const approximateFee = BigInt(dimensions.getVSize() * feePerByte);
283
+ txInfo.inputs =
284
+ responseTxFormat === 'legacy'
285
+ ? unspents.map((u) => ({ ...u, value: Number(u.value), valueString: u.value.toString(), prevTx: undefined }))
286
+ : undefined;
287
+ unspents.forEach((unspent) => {
288
+ utxolib.bitgo.addWalletUnspentToPsbt(psbt, unspent, walletKeys, 'user', 'backup');
289
+ });
290
+ let krsFee = BigInt(0);
291
+ if (isKrsRecovery && params.krsProvider) {
292
+ try {
293
+ krsFee = BigInt(await calculateFeeAmount(coin, { provider: params.krsProvider }));
294
+ }
295
+ catch (err) {
296
+ // Don't let this error block the recovery -
297
+ console.dir(err);
298
+ }
299
+ }
300
+ const recoveryAmount = totalInputAmount - approximateFee - krsFee;
301
+ if (recoveryAmount < BigInt(0)) {
302
+ throw new Error(`this wallet\'s balance is too low to pay the fees specified by the KRS provider.
303
+ Existing balance on wallet: ${totalInputAmount.toString()}. Estimated network fee for the recovery transaction
304
+ : ${approximateFee.toString()}, KRS fee to pay: ${krsFee.toString()}. After deducting fees, your total
305
+ recoverable balance is ${recoveryAmount.toString()}`);
306
+ }
307
+ const recoveryOutputScript = utxolib.address.toOutputScript(params.recoveryDestination, coin.network);
308
+ psbt.addOutput({ script: recoveryOutputScript, value: recoveryAmount });
309
+ if (krsProvider && krsFee > BigInt(0)) {
310
+ if (!krsProvider.feeAddresses) {
311
+ throw new Error(`keyProvider must define feeAddresses`);
312
+ }
313
+ const krsFeeAddress = krsProvider.feeAddresses[coin.getChain()];
314
+ if (!krsFeeAddress) {
315
+ throw new Error('this KRS provider has not configured their fee structure yet - recovery cannot be completed');
316
+ }
317
+ const krsFeeOutputScript = utxolib.address.toOutputScript(krsFeeAddress, coin.network);
318
+ psbt.addOutput({ script: krsFeeOutputScript, value: krsFee });
319
+ }
320
+ if (isUnsignedSweep) {
321
+ // TODO BTC-317 - When ready to PSBTify OVC, send psbt hex and skip unspents in response.
322
+ const txHex = psbt.getUnsignedTx().toBuffer().toString('hex');
323
+ return formatForOfflineVault(coin.getChain(), txInfo, txHex);
324
+ }
325
+ else {
326
+ (0, signPsbt_1.signAndVerifyPsbt)(psbt, walletKeys.user, { isLastSignature: false });
327
+ if (isKrsRecovery) {
328
+ // The KRS provider keyternal solely supports P2SH, P2WSH, and P2SH-P2WSH input script types.
329
+ // It currently uses an outdated BitGoJS SDK, which relies on a legacy transaction builder for cosigning.
330
+ // Unfortunately, upgrading the keyternal code presents challenges,
331
+ // which hinders the integration of the latest BitGoJS SDK with PSBT signing support.
332
+ txInfo.transactionHex =
333
+ params.krsProvider === 'keyternal'
334
+ ? utxolib.bitgo.extractP2msOnlyHalfSignedTx(psbt).toBuffer().toString('hex')
335
+ : psbt.toHex();
336
+ }
337
+ else {
338
+ const tx = (0, signPsbt_1.signAndVerifyPsbt)(psbt, walletKeys.backup, { isLastSignature: true });
339
+ txInfo.transactionHex = tx.toBuffer().toString('hex');
340
+ }
341
+ }
342
+ if (isKrsRecovery) {
343
+ txInfo.coin = coin.getChain();
344
+ txInfo.backupKey = params.backupKey;
345
+ txInfo.recoveryAmount = Number(recoveryAmount);
346
+ txInfo.recoveryAmountString = recoveryAmount.toString();
347
+ }
348
+ return txInfo;
349
+ }
350
+ async function v1BackupKeyRecovery(coin, bitgo, params) {
351
+ if (lodash_1.default.isUndefined(params.recoveryDestination) ||
352
+ !coin.isValidAddress(params.recoveryDestination, { anyFormat: true })) {
353
+ throw new Error('invalid recoveryDestination');
354
+ }
355
+ const recoveryFeePerByte = await getRecoveryFeePerBytes(coin, { defaultValue: 50 });
356
+ const v1wallet = await bitgo.wallets().get({ id: params.walletId });
357
+ return await v1wallet.recover({
358
+ ...params,
359
+ feeRate: recoveryFeePerByte,
360
+ });
361
+ }
362
+ async function v1Sweep(coin, bitgo, params) {
363
+ if (lodash_1.default.isUndefined(params.recoveryDestination) ||
364
+ !coin.isValidAddress(params.recoveryDestination, { anyFormat: true })) {
365
+ throw new Error('invalid recoveryDestination');
366
+ }
367
+ let recoveryFeePerByte = 100;
368
+ if (bitgo.env === 'prod') {
369
+ recoveryFeePerByte = await getRecoveryFeePerBytes(coin, { defaultValue: 100 });
370
+ }
371
+ const v1wallet = await bitgo.wallets().get({ id: params.walletId });
372
+ return await v1wallet.sweep({
373
+ ...params,
374
+ feeRate: recoveryFeePerByte,
375
+ });
376
+ }
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnU0EsOENBMkpDO0FBcUJELGtEQWtCQztBQUVELDBCQTBCQztBQTlmRCxvREFBNEI7QUFFNUIsb0RBQXVCO0FBQ3ZCLDhEQUFnRDtBQUNoRCxtREFBa0Q7QUFDbEQsbURBUzhCO0FBQzlCLG1EQUE0RDtBQUc1RCxrRUFBd0U7QUFDeEUsd0NBQThEO0FBRTlELHlEQUErRDtBQUMvRCw2Q0FBMEM7QUFDMUMsaURBQThDO0FBVTlDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBZXhHOzs7Ozs7R0FNRztBQUNILFNBQVMscUJBQXFCLENBQzVCLFFBQWdCLEVBQ2hCLE1BQTBCLEVBQzFCLEtBQWE7SUFFYixPQUFPO1FBQ0wsS0FBSztRQUNMLE1BQU0sRUFBRTtZQUNOLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNwQyxJQUFBLGdCQUFNLEVBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMxQixPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0RCxDQUFDLENBQUM7U0FDSDtRQUNELE9BQU8sRUFBRSxFQUFFO1FBQ1gsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxLQUFLLFVBQVUsc0JBQXNCLENBQUMsSUFBc0I7SUFDMUQsT0FBTyxNQUFNLElBQUksMkJBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsS0FBSyxVQUFVLGtCQUFrQixDQUFDLElBQXNCLEVBQUUsTUFBNEI7SUFDcEYsTUFBTSxXQUFXLEdBQUcsdUJBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQzNDLE1BQU0sWUFBWSxHQUFXLE1BQU0sc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7U0FBTSxDQUFDO1FBQ04sK0dBQStHO1FBQy9HLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0FBQ0gsQ0FBQztBQWlCRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsbUJBQW1CLENBQzFCLElBQXNCLEVBQ3RCLE9BQXdCLEVBQ3hCLFVBQTBCLEVBQzFCLEtBQWdCLEVBQ2hCLFNBQWlCO0lBRWpCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEcsTUFBTSxPQUFPLEdBQUcsSUFBQSwwQ0FBZ0MsRUFBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFaEcsZ0hBQWdIO0lBQ2hILE9BQU8sTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxLQUFLLFVBQVUsMkJBQTJCLENBQ3hDLElBQXNCLEVBQ3RCLE1BQXFCLEVBQ3JCLFVBQTBCLEVBQzFCLEtBQWdCO0lBRWhCLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE1BQU0sV0FBVyxHQUNmLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUEscUJBQVUsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssbUJBQVEsQ0FBQyxLQUFLLENBQUM7SUFDekcsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksSUFBQSwwQkFBTyxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUYsTUFBTSxvQ0FBb0MsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUMvRCxJQUFJLGdDQUFnQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUU5QyxLQUFLLFVBQVUsU0FBUyxDQUFDLElBQVk7UUFDbkMsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixTQUFTLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRCxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssVUFBVSxjQUFjLENBQUMsU0FBaUI7UUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9GLE1BQU0sUUFBUSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekUsb0dBQW9HO1FBQ3BHLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixnQ0FBZ0MsRUFBRSxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ04sZ0NBQWdDLEdBQUcsQ0FBQyxDQUFDO1lBRXJDLElBQUksUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsZ0JBQWdCLGlCQUFpQixRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbkcsTUFBTSxlQUFlLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDM0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3pDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBa0MsRUFBRTtvQkFDOUQsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3pELElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzFCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDakMsaUZBQWlGO3dCQUNqRiw0RkFBNEY7d0JBQzVGLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDOzRCQUNuQyxNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDcEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFTLEtBQUssQ0FBQyxDQUFDOzRCQUN4RCxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7d0JBQzVCLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxtRUFBbUU7b0JBQ25FLHNEQUFzRDtvQkFDdEQsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDeEQsT0FBTzt3QkFDTCxHQUFHLENBQUM7d0JBQ0osS0FBSyxFQUFFLEdBQUc7d0JBQ1YsS0FBSyxFQUFFLEtBQUs7d0JBQ1osS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7cUJBQ25ELENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBRUYsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLGdDQUFnQyxJQUFJLG9DQUFvQyxFQUFFLENBQUM7WUFDN0UsNkhBQTZIO1lBQzdILGNBQWM7WUFDZCxPQUFPO1FBQ1QsQ0FBQztRQUVELE9BQU8sY0FBYyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsbUNBQW1DO0lBRW5DLE1BQU0sY0FBYyxHQUE0QixFQUFFLENBQUM7SUFDbkQscUNBQXFDO0lBQ3JDLE1BQU0sY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXhCLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoQyx5Q0FBeUM7UUFDekMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELEtBQUssVUFBVSxzQkFBc0IsQ0FDbkMsSUFBc0IsRUFDdEIsRUFBRSxZQUFZLEVBQTRCO0lBRTFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLDZFQUE2RTtRQUM3RSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLHVCQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztBQUNILENBQUM7QUFXRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0ksS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxJQUFzQixFQUN0QixLQUFnQixFQUNoQixNQUFxQjtJQUVyQixJQUFJLGdCQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxnQkFBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQ0UsZ0JBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO1FBQ3pDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFDckUsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxDQUFDLGdCQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLElBQUEsMkJBQWdCLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsTUFBTSxlQUFlLEdBQUcsSUFBQSw2QkFBa0IsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUNuRCxNQUFNLGdCQUFnQixHQUFHLGVBQWUsSUFBSSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFckgsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFBLHlCQUFjLEVBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRXpGLHdIQUF3SDtJQUN4SCxNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFZLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckUsSUFBSSxDQUFDLElBQUEsbUJBQVEsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUU7UUFDeEQsTUFBTSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhO1FBQ2hFLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGFBQWE7UUFDMUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsYUFBYTtLQUMzQyxDQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsR0FBNEIsQ0FDeEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLGFBQWEsQ0FBQyxlQUFlO1NBQzFCLE1BQU0sQ0FDTCxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDNUc7U0FDQSxNQUFNLENBQ0wsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUN4QixHQUFHLE9BQU87UUFDViwyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RiwyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUN6RixFQUNELEVBQXdDLENBQ3pDLENBQ0osQ0FDRixDQUFDLElBQUksRUFBRSxDQUFDO0lBRVQsOENBQThDO0lBQzlDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RFLElBQUksZ0JBQWdCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLGdDQUFxQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLDBDQUEwQztJQUMxQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsTUFBTSxNQUFNLEdBQUcsRUFBcUMsQ0FBQztJQUNyRCxNQUFNLFVBQVUsR0FDZCxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUUzRyx3RkFBd0Y7SUFDeEYsTUFBTSxVQUFVLEdBQUcscUJBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMscUJBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ILE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFFbEUsTUFBTSxDQUFDLE1BQU07UUFDWCxnQkFBZ0IsS0FBSyxRQUFRO1lBQzNCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDN0csQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVoQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsSUFBSSxhQUFhLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLDRDQUE0QztZQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLEdBQUcsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUVsRSxJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDO3dDQUNvQixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7Y0FDckQsY0FBYyxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsTUFBTSxDQUFDLFFBQVEsRUFBRTttQ0FDMUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFFeEUsSUFBSSxXQUFXLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDZGQUE2RixDQUFDLENBQUM7UUFDakgsQ0FBQztRQUVELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLHlGQUF5RjtRQUN6RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckYsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFBLDRCQUFpQixFQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckUsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQiw2RkFBNkY7WUFDN0YseUdBQXlHO1lBQ3pHLG1FQUFtRTtZQUNuRSxxRkFBcUY7WUFDckYsTUFBTSxDQUFDLGNBQWM7Z0JBQ25CLE1BQU0sQ0FBQyxXQUFXLEtBQUssV0FBVztvQkFDaEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sRUFBRSxHQUFHLElBQUEsNEJBQWlCLEVBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqRixNQUFNLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNwQyxNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsb0JBQW9CLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBcUJNLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsSUFBc0IsRUFDdEIsS0FBZ0IsRUFDaEIsTUFBdUI7SUFFdkIsSUFDRSxnQkFBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUM7UUFDekMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUNyRSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sc0JBQXNCLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEYsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzVCLEdBQUcsTUFBTTtRQUNULE9BQU8sRUFBRSxrQkFBa0I7S0FDNUIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVNLEtBQUssVUFBVSxPQUFPLENBQzNCLElBQXNCLEVBQ3RCLEtBQWdCLEVBQ2hCLE1BQXFCO0lBTXJCLElBQ0UsZ0JBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO1FBQ3pDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFDckUsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7SUFDN0IsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLGtCQUFrQixHQUFHLE1BQU0sc0JBQXNCLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRSxPQUFPLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQztRQUMxQixHQUFHLE1BQU07UUFDVCxPQUFPLEVBQUUsa0JBQWtCO0tBQzVCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IERpbWVuc2lvbnMgfSBmcm9tICdAYml0Z28tYmV0YS91bnNwZW50cyc7XG5pbXBvcnQge1xuICBCaXRHb0Jhc2UsXG4gIEVycm9yTm9JbnB1dFRvUmVjb3ZlcixcbiAgZ2V0S3JzUHJvdmlkZXIsXG4gIGdldEJpcDMyS2V5cyxcbiAgZ2V0SXNLcnNSZWNvdmVyeSxcbiAgZ2V0SXNVbnNpZ25lZFN3ZWVwLFxuICBpc1RyaXBsZSxcbiAga3JzUHJvdmlkZXJzLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXRNYWlubmV0LCBuZXR3b3JrcyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgc2lnbkFuZFZlcmlmeVBzYnQgfSBmcm9tICcuLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9zaWduUHNidCc7XG5pbXBvcnQgeyBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleCB9IGZyb20gJy4uL2FkZHJlc3MnO1xuXG5pbXBvcnQgeyBmb3JDb2luLCBSZWNvdmVyeVByb3ZpZGVyIH0gZnJvbSAnLi9SZWNvdmVyeVByb3ZpZGVyJztcbmltcG9ydCB7IE1lbXBvb2xBcGkgfSBmcm9tICcuL21lbXBvb2xBcGknO1xuaW1wb3J0IHsgQ29pbmdlY2tvQXBpIH0gZnJvbSAnLi9jb2luZ2Vja29BcGknO1xuXG50eXBlIFNjcmlwdFR5cGUyT2YzID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzO1xudHlwZSBDaGFpbkNvZGUgPSB1dHhvbGliLmJpdGdvLkNoYWluQ29kZTtcbnR5cGUgUm9vdFdhbGxldEtleXMgPSB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzO1xudHlwZSBXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+ID0gdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50PFROdW1iZXI+O1xudHlwZSBXYWxsZXRVbnNwZW50SlNPTiA9IHV0eG9saWIuYml0Z28uV2FsbGV0VW5zcGVudCAmIHtcbiAgdmFsdWVTdHJpbmc6IHN0cmluZztcbn07XG5cbmNvbnN0IHsgZ2V0SW50ZXJuYWxDaGFpbkNvZGUsIHNjcmlwdFR5cGVGb3JDaGFpbiwgb3V0cHV0U2NyaXB0cywgZ2V0RXh0ZXJuYWxDaGFpbkNvZGUgfSA9IHV0eG9saWIuYml0Z287XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2ZmbGluZVZhdWx0VHhJbmZvIHtcbiAgaW5wdXRzOiBXYWxsZXRVbnNwZW50SlNPTltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB7XG4gIHR4SW5mbzoge1xuICAgIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50SlNPTltdO1xuICB9O1xuICB0eEhleDogc3RyaW5nO1xuICBmZWVJbmZvOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG4gIGNvaW46IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGlzIHRyYW5zZm9ybXMgdGhlIHR4SW5mbyBmcm9tIHJlY292ZXIgaW50byB0aGUgZm9ybWF0IHRoYXQgb2ZmbGluZS1zaWduaW5nLXRvb2wgZXhwZWN0c1xuICogQHBhcmFtIGNvaW5OYW1lXG4gKiBAcGFyYW0gdHhJbmZvXG4gKiBAcGFyYW0gdHhIZXhcbiAqIEByZXR1cm5zIHt7dHhIZXg6ICosIHR4SW5mbzoge3Vuc3BlbnRzOiAqfSwgZmVlSW5mbzoge30sIGNvaW46IHZvaWR9fVxuICovXG5mdW5jdGlvbiBmb3JtYXRGb3JPZmZsaW5lVmF1bHQoXG4gIGNvaW5OYW1lOiBzdHJpbmcsXG4gIHR4SW5mbzogT2ZmbGluZVZhdWx0VHhJbmZvLFxuICB0eEhleDogc3RyaW5nXG4pOiBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8ge1xuICByZXR1cm4ge1xuICAgIHR4SGV4LFxuICAgIHR4SW5mbzoge1xuICAgICAgdW5zcGVudHM6IHR4SW5mby5pbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgICBhc3NlcnQoaW5wdXQudmFsdWVTdHJpbmcpO1xuICAgICAgICByZXR1cm4geyAuLi5pbnB1dCwgdmFsdWVTdHJpbmc6IGlucHV0LnZhbHVlU3RyaW5nIH07XG4gICAgICB9KSxcbiAgICB9LFxuICAgIGZlZUluZm86IHt9LFxuICAgIGNvaW46IGNvaW5OYW1lLFxuICB9O1xufVxuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBtYXJrZXQgcHJpY2UgZnJvbSBhIHRoaXJkIHBhcnR5IHRvIGJlIHVzZWQgZm9yIHJlY292ZXJ5XG4gKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgaW50ZW5kZWQgZm9yIG5vbi1iaXRnbyByZWNvdmVyeSB0cmFuc2FjdGlvbnMsIHdoZW4gaXQgaXMgbmVjZXNzYXJ5XG4gKiB0byBjYWxjdWxhdGUgdGhlIHJvdWdoIGZlZSBuZWVkZWQgdG8gcGF5IHRvIEtleXRlcm5hbC4gV2UgYXJlIG9rYXkgd2l0aCBhcHByb3hpbWF0aW5nLFxuICogYmVjYXVzZSB0aGUgcmVzdWx0aW5nIHByaWNlIG9mIHRoaXMgZnVuY3Rpb24gb25seSBoYXMgbGVzcyB0aGFuIDEgZG9sbGFyIGluZmx1ZW5jZSBvbiB0aGVcbiAqIGZlZSB0aGF0IG5lZWRzIHRvIGJlIHBhaWQgdG8gS2V5dGVybmFsLlxuICpcbiAqIFNlZSBjYWxjdWxhdGVGZWVBbW91bnQgZnVuY3Rpb246ICByZXR1cm4gTWF0aC5yb3VuZChmZWVBbW91bnRVc2QgLyBjdXJyZW50UHJpY2UgKiBzZWxmLmdldEJhc2VGYWN0b3IoKSk7XG4gKlxuICogVGhpcyBlbmQgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGFzIGFuIGFjY3VyYXRlIGVuZHBvaW50LCBzaW5jZSBzb21lIGNvaW5zJyBwcmljZXMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgcHJvdmlkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb3ZlcnlNYXJrZXRQcmljZShjb2luOiBBYnN0cmFjdFV0eG9Db2luKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBDb2luZ2Vja29BcGkoKS5nZXRVU0RQcmljZShjb2luLmdldEZhbWlseSgpKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhbW91bnQgKGluIGJhc2UgdW5pdHMpIHRvIHBheSBhIEtSUyBwcm92aWRlciB3aGVuIGJ1aWxkaW5nIGEgcmVjb3ZlcnkgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBjb2luXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcGFyYW0gcGFyYW1zLnByb3ZpZGVyIHtTdHJpbmd9IHRoZSBLUlMgcHJvdmlkZXIgdGhhdCBob2xkcyB0aGUgYmFja3VwIGtleVxuICogQHJldHVybnMgeyp9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUZlZUFtb3VudChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCBwYXJhbXM6IHsgcHJvdmlkZXI6IHN0cmluZyB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3Qga3JzUHJvdmlkZXIgPSBrcnNQcm92aWRlcnNbcGFyYW1zLnByb3ZpZGVyXTtcblxuICBpZiAoa3JzUHJvdmlkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gZmVlIHN0cnVjdHVyZSBzcGVjaWZpZWQgZm9yIHByb3ZpZGVyICR7cGFyYW1zLnByb3ZpZGVyfWApO1xuICB9XG5cbiAgaWYgKGtyc1Byb3ZpZGVyLmZlZVR5cGUgPT09ICdmbGF0VXNkJykge1xuICAgIGNvbnN0IGZlZUFtb3VudFVzZCA9IGtyc1Byb3ZpZGVyLmZlZUFtb3VudDtcbiAgICBjb25zdCBjdXJyZW50UHJpY2U6IG51bWJlciA9IGF3YWl0IGdldFJlY292ZXJ5TWFya2V0UHJpY2UoY29pbik7XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCgoZmVlQW1vdW50VXNkIC8gY3VycmVudFByaWNlKSAqIGNvaW4uZ2V0QmFzZUZhY3RvcigpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB3ZSBjYW4gYWRkIG1vcmUgZmVlIHN0cnVjdHVyZXMgaGVyZSBhcyBuZWVkZWQgZm9yIGRpZmZlcmVudCBwcm92aWRlcnMsIHN1Y2ggYXMgcGVyY2VudGFnZSBvZiByZWNvdmVyeSBhbW91bnRcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZlZSBzdHJ1Y3R1cmUgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyUGFyYW1zIHtcbiAgc2Nhbj86IG51bWJlcjtcbiAgdXNlcktleTogc3RyaW5nO1xuICBiYWNrdXBLZXk6IHN0cmluZztcbiAgYml0Z29LZXk6IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgaWdub3JlQWRkcmVzc1R5cGVzOiBTY3JpcHRUeXBlMk9mM1tdO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIHVzZXJLZXlQYXRoPzogc3RyaW5nO1xuICByZWNvdmVyeVByb3ZpZGVyPzogUmVjb3ZlcnlQcm92aWRlcjtcbiAgZmVlUmF0ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBhZGRyZXNzIGFuZCBmb3JtYXQgaXQgZm9yIEFQSSBxdWVyaWVzXG4gKiBAcGFyYW0gY29pbiAtIFRoZSBjb2luIGluc3RhbmNlXG4gKiBAcGFyYW0gbmV0d29yayAtIFRoZSBuZXR3b3JrIHRvIHVzZVxuICogQHBhcmFtIHdhbGxldEtleXMgLSBUaGUgd2FsbGV0IGtleXNcbiAqIEBwYXJhbSBjaGFpbiAtIFRoZSBjaGFpbiBjb2RlXG4gKiBAcGFyYW0gYWRkckluZGV4IC0gVGhlIGFkZHJlc3MgaW5kZXhcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgYWRkcmVzcyAod2l0aCBjYXNoYWRkciBwcmVmaXggc3RyaXBwZWQgZm9yIEJDSC9CQ0hBKVxuICovXG5mdW5jdGlvbiBnZXRGb3JtYXR0ZWRBZGRyZXNzKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlLFxuICBhZGRySW5kZXg6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgZm9ybWF0ID0gY29pbi5nZXRDaGFpbigpID09PSAnYmNoJyB8fCBjb2luLmdldENoYWluKCkgPT09ICdiY2hhJyA/ICdjYXNoYWRkcicgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3NXaXRoQ2hhaW5BbmRJbmRleChuZXR3b3JrLCB3YWxsZXRLZXlzLCBjaGFpbiwgYWRkckluZGV4LCBmb3JtYXQpO1xuXG4gIC8vIEJsb2NrY2hhaXIgdXNlcyBjYXNoYWRkciBmb3JtYXQgd2hlbiBxdWVyeWluZyB0aGUgQVBJIGZvciBhZGRyZXNzIGluZm9ybWF0aW9uLiBTdHJpcCB0aGUgcHJlZml4IGZvciBCQ0gvQkNIQS5cbiAgcmV0dXJuIGZvcm1hdCA9PT0gJ2Nhc2hhZGRyJyA/IGFkZHJlc3Muc3BsaXQoJzonKVsxXSA6IGFkZHJlc3M7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QmxvY2tjaGFpblVuc3BlbnRzUGF0aChcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgcGFyYW1zOiBSZWNvdmVyUGFyYW1zLFxuICB3YWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgY2hhaW46IENoYWluQ29kZVxuKTogUHJvbWlzZTxXYWxsZXRVbnNwZW50PGJpZ2ludD5bXT4ge1xuICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKTtcbiAgY29uc3QgZmV0Y2hQcmV2VHggPVxuICAgICF1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuaGFzV2l0bmVzc0RhdGEoc2NyaXB0VHlwZSkgJiYgZ2V0TWFpbm5ldChjb2luLm5ldHdvcmspICE9PSBuZXR3b3Jrcy56Y2FzaDtcbiAgY29uc3QgcmVjb3ZlcnlQcm92aWRlciA9IHBhcmFtcy5yZWNvdmVyeVByb3ZpZGVyID8/IGZvckNvaW4oY29pbi5nZXRDaGFpbigpLCBwYXJhbXMuYXBpS2V5KTtcbiAgY29uc3QgTUFYX1NFUVVFTlRJQUxfQUREUkVTU0VTX1dJVEhPVVRfVFhTID0gcGFyYW1zLnNjYW4gfHwgMjA7XG4gIGxldCBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cyA9IDA7XG4gIGNvbnN0IHByZXZUeENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBhc3luYyBmdW5jdGlvbiBnZXRQcmV2VHgodHhpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgcHJldlR4SGV4ID0gcHJldlR4Q2FjaGUuZ2V0KHR4aWQpO1xuICAgIGlmICghcHJldlR4SGV4KSB7XG4gICAgICBwcmV2VHhIZXggPSBhd2FpdCByZWNvdmVyeVByb3ZpZGVyLmdldFRyYW5zYWN0aW9uSGV4KHR4aWQpO1xuICAgICAgcHJldlR4Q2FjaGUuc2V0KHR4aWQsIHByZXZUeEhleCk7XG4gICAgfVxuICAgIHJldHVybiBwcmV2VHhIZXg7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnYXRoZXJVbnNwZW50cyhhZGRySW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGZvcm1hdHRlZEFkZHJlc3MgPSBnZXRGb3JtYXR0ZWRBZGRyZXNzKGNvaW4sIGNvaW4ubmV0d29yaywgd2FsbGV0S2V5cywgY2hhaW4sIGFkZHJJbmRleCk7XG4gICAgY29uc3QgYWRkckluZm8gPSBhd2FpdCByZWNvdmVyeVByb3ZpZGVyLmdldEFkZHJlc3NJbmZvKGZvcm1hdHRlZEFkZHJlc3MpO1xuICAgIC8vIHdlIHVzZSB0eENvdW50IGhlcmUgYmVjYXVzZSBpdCBpbXBsaWVzIHVzYWdlIC0gaGF2aW5nIHR4J2VzIG1lYW5zIHRoZSBhZGRyIHdhcyBnZW5lcmF0ZWQgYW5kIHVzZWRcbiAgICBpZiAoYWRkckluZm8udHhDb3VudCA9PT0gMCkge1xuICAgICAgbnVtU2VxdWVudGlhbEFkZHJlc3Nlc1dpdGhvdXRUeHMrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbnVtU2VxdWVudGlhbEFkZHJlc3Nlc1dpdGhvdXRUeHMgPSAwO1xuXG4gICAgICBpZiAoYWRkckluZm8uYmFsYW5jZSA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coYEZvdW5kIGFuIGFkZHJlc3Mgd2l0aCBiYWxhbmNlOiAke2Zvcm1hdHRlZEFkZHJlc3N9IHdpdGggYmFsYW5jZSAke2FkZHJJbmZvLmJhbGFuY2V9YCk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NVbnNwZW50cyA9IGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0VW5zcGVudHNGb3JBZGRyZXNzZXMoW2Zvcm1hdHRlZEFkZHJlc3NdKTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkVW5zcGVudHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBhZGRyZXNzVW5zcGVudHMubWFwKGFzeW5jICh1KTogUHJvbWlzZTxXYWxsZXRVbnNwZW50PGJpZ2ludD4+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHhpZCwgdm91dCB9ID0gdXR4b2xpYi5iaXRnby5wYXJzZU91dHB1dElkKHUuaWQpO1xuICAgICAgICAgICAgbGV0IHZhbCA9IEJpZ0ludCh1LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjb2luLmFtb3VudFR5cGUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgIC8vIGJsb2NrY2hhaXIgcmV0dXJucyB0aGUgbnVtYmVyIHdpdGggdGhlIGNvcnJlY3QgcHJlY2lzaW9uLCBidXQgaW4gbnVtYmVyIGZvcm1hdFxuICAgICAgICAgICAgICAvLyBqc29uIHBhcnNlIHdvbid0IHBhcnNlIGl0IGNvcnJlY3RseSwgc28gd2UgcmVxdWVyeSB0aGUgdHhpZCBmb3IgdGhlIHR4IGhleCB0byBkZWNvZGUgaGVyZVxuICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBnZXRQcmV2VHgodHhpZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHggPSBjb2luLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxiaWdpbnQ+KHR4SGV4KTtcbiAgICAgICAgICAgICAgICB2YWwgPSB0eC5vdXRzW3ZvdXRdLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGUgYXBpIG1heSByZXR1cm4gY2FzaGFkZHIncyBpbnN0ZWFkIG9mIGxlZ2FjeSBmb3IgQkNIIGFuZCBCQ0hBXG4gICAgICAgICAgICAvLyBkb3duc3RyZWFtIHByb2Nlc3NlcydzIG9ubHkgZXhwZWN0IGxlZ2FjeSBhZGRyZXNzZXNcbiAgICAgICAgICAgIHUgPSB7IC4uLnUsIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyh1LmFkZHJlc3MpIH07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi51LFxuICAgICAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgICAgICBjaGFpbjogY2hhaW4sXG4gICAgICAgICAgICAgIGluZGV4OiBhZGRySW5kZXgsXG4gICAgICAgICAgICAgIHByZXZUeDogZmV0Y2hQcmV2VHggPyBCdWZmZXIuZnJvbShhd2FpdCBnZXRQcmV2VHgodHhpZCksICdoZXgnKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0gYXMgV2FsbGV0VW5zcGVudDxiaWdpbnQ+O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgd2FsbGV0VW5zcGVudHMucHVzaCguLi5wcm9jZXNzZWRVbnNwZW50cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzID49IE1BWF9TRVFVRU5USUFMX0FERFJFU1NFU19XSVRIT1VUX1RYUykge1xuICAgICAgLy8gc3RvcCBzZWFyY2hpbmcgZm9yIGFkZHJlc3NlcyB3aXRoIHVuc3BlbnRzIGluIHRoZW0sIHdlJ3ZlIGZvdW5kICR7TUFYX1NFUVVFTlRJQUxfQUREUkVTU0VTX1dJVEhPVVRfVFhTfSBpbiBhIHJvdyB3aXRoIG5vbmVcbiAgICAgIC8vIHdlIGFyZSBkb25lXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGdhdGhlclVuc3BlbnRzKGFkZHJJbmRleCArIDEpO1xuICB9XG5cbiAgLy8gZ2V0IHVuc3BlbnRzIGZvciB0aGVzZSBhZGRyZXNzZXNcblxuICBjb25zdCB3YWxsZXRVbnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W10gPSBbXTtcbiAgLy8gVGhpcyB3aWxsIHBvcHVsYXRlIHdhbGxldEFkZHJlc3Nlc1xuICBhd2FpdCBnYXRoZXJVbnNwZW50cygwKTtcblxuICBpZiAod2FsbGV0VW5zcGVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gQ291bGRuJ3QgZmluZCBhbnkgYWRkcmVzc2VzIHdpdGggZnVuZHNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gd2FsbGV0VW5zcGVudHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIHsgZGVmYXVsdFZhbHVlIH06IHsgZGVmYXVsdFZhbHVlOiBudW1iZXIgfVxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgPT09ICdkb2dlJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kb2dlY29pbi9kb2dlY29pbi9ibG9iL21hc3Rlci9kb2MvZmVlLXJlY29tbWVuZGF0aW9uLm1kXG4gICAgLy8gMC4wMSBET0dFIHBlciBLQlxuICAgIHJldHVybiAxMDAwO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgTWVtcG9vbEFwaS5mb3JDb2luKGNvaW4uZ2V0Q2hhaW4oKSkuZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5kaXIoZSk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uID0ge1xuICBpbnB1dHM/OiBXYWxsZXRVbnNwZW50SlNPTltdO1xuICB0cmFuc2FjdGlvbkhleDogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICByZWNvdmVyeUFtb3VudDogbnVtYmVyO1xuICByZWNvdmVyeUFtb3VudFN0cmluZzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvLlxuICpcbiAqIFJldHVybnMgdHJhbnNhY3Rpb24gaGV4IGluIGxlZ2FjeSBmb3JtYXQgZm9yIHVuc2lnbmVkIHN3ZWVwIHRyYW5zYWN0aW9uLCBoYWxmIHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aCBLUlMgcHJvdmlkZXIgKG9ubHkga2V5dGVybmFsKSxcbiAqIGZ1bGx5IHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBhIEtSUyBwcm92aWRlci5cbiAqXG4gKiBSZXR1cm5zIFBTQlQgaGV4IGZvciBoYWxmIHNpZ25lZCBiYWNrdXAgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aCBLUlMgcHJvdmlkZXIgKGV4Y2x1ZGluZyBrZXl0ZXJuYWwpXG4gKiBGb3IgUFNCVCBoZXggY2FzZXMsIFVuc3BlbnRzIGFyZSBub3QgcmVxdWlyZWQgaW4gcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSBiaXRnb1xuICogQHBhcmFtIHBhcmFtc1xuICogLSB1c2VyS2V5OiBbZW5jcnlwdGVkXSB4cHJ2LCBvciB4cHViXG4gKiAtIGJhY2t1cEtleTogW2VuY3J5cHRlZF0geHBydiwgb3IgeHB1YiBpZiB0aGUgeHBydiBpcyBoZWxkIGJ5IGEgS1JTIHByb3ZpZGVyXG4gKiAtIHdhbGxldFBhc3NwaHJhc2U6IG5lY2Vzc2FyeSBpZiBvbmUgb2YgdGhlIHhwcnZzIGlzIGVuY3J5cHRlZFxuICogLSBiaXRnb0tleTogeHB1YlxuICogLSBrcnNQcm92aWRlcjogbmVjZXNzYXJ5IGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlNcbiAqIC0gcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGFyZ2V0IGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAqIC0gc2NhbjogdGhlIGFtb3VudCBvZiBjb25zZWN1dGl2ZSBhZGRyZXNzZXMgd2l0aG91dCB1bnNwZW50cyB0byBzY2FuIHRocm91Z2ggYmVmb3JlIHN0b3BwaW5nXG4gKiAtIGlnbm9yZUFkZHJlc3NUeXBlczogKG9wdGlvbmFsKSBzY3JpcHRzIHRvIGlnbm9yZVxuICogICAgICAgIGZvciBleGFtcGxlOiBbJ3Ayc2hQMndzaCcsICdwMndzaCddIHdpbGwgcHJldmVudCBjb2RlIGZyb20gY2hlY2tpbmcgZm9yIHdyYXBwZWQtc2Vnd2l0IGFuZCBuYXRpdmUtc2Vnd2l0IGNoYWlucyBvbiB0aGUgcHVibGljIGJsb2NrIGV4cGxvcmVyc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmFja3VwS2V5UmVjb3ZlcnkoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogUmVjb3ZlclBhcmFtc1xuKTogUHJvbWlzZTxCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHwgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvPiB7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy51c2VyS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB1c2VyS2V5Jyk7XG4gIH1cblxuICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMuYmFja3VwS2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBiYWNrdXBLZXknKTtcbiAgfVxuXG4gIGlmIChcbiAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSB8fFxuICAgICFjb2luLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCB7IGFueUZvcm1hdDogdHJ1ZSB9KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICB9XG5cbiAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5zY2FuKSAmJiAoIV8uaXNJbnRlZ2VyKHBhcmFtcy5zY2FuKSB8fCBwYXJhbXMuc2NhbiA8IDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzY2FuIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gIH1cblxuICBpZiAocGFyYW1zLmZlZVJhdGUgIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc0Zpbml0ZShwYXJhbXMuZmVlUmF0ZSkgfHwgcGFyYW1zLmZlZVJhdGUgPD0gMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZlZVJhdGUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB9XG5cbiAgY29uc3QgaXNLcnNSZWNvdmVyeSA9IGdldElzS3JzUmVjb3ZlcnkocGFyYW1zKTtcbiAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gZ2V0SXNVbnNpZ25lZFN3ZWVwKHBhcmFtcyk7XG4gIGNvbnN0IHJlc3BvbnNlVHhGb3JtYXQgPSBpc1Vuc2lnbmVkU3dlZXAgfHwgIWlzS3JzUmVjb3ZlcnkgfHwgcGFyYW1zLmtyc1Byb3ZpZGVyID09PSAna2V5dGVybmFsJyA/ICdsZWdhY3knIDogJ3BzYnQnO1xuXG4gIGNvbnN0IGtyc1Byb3ZpZGVyID0gaXNLcnNSZWNvdmVyeSA/IGdldEtyc1Byb3ZpZGVyKGNvaW4sIHBhcmFtcy5rcnNQcm92aWRlcikgOiB1bmRlZmluZWQ7XG5cbiAgLy8gY2hlY2sgd2hldGhlciBrZXkgbWF0ZXJpYWwgYW5kIHBhc3N3b3JkIGF1dGhlbnRpY2F0ZSB0aGUgdXNlcnMgYW5kIHJldHVybiBwYXJlbnQga2V5cyBvZiBhbGwgdGhyZWUga2V5cyBvZiB0aGUgd2FsbGV0XG4gIGNvbnN0IGtleXMgPSBnZXRCaXAzMktleXMoYml0Z28sIHBhcmFtcywgeyByZXF1aXJlQml0R29YcHViOiB0cnVlIH0pO1xuICBpZiAoIWlzVHJpcGxlKGtleXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBrZXkgdHJpcGxlYCk7XG4gIH1cbiAgY29uc3Qgd2FsbGV0S2V5cyA9IG5ldyB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKGtleXMsIFtcbiAgICBwYXJhbXMudXNlcktleVBhdGggfHwgdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cy5kZWZhdWx0UHJlZml4LFxuICAgIHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMuZGVmYXVsdFByZWZpeCxcbiAgICB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLmRlZmF1bHRQcmVmaXgsXG4gIF0pO1xuXG4gIGNvbnN0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGFkZHJlc3NUeXBlKSA9PiBjb2luLnN1cHBvcnRzQWRkcmVzc1R5cGUoYWRkcmVzc1R5cGUpICYmICFwYXJhbXMuaWdub3JlQWRkcmVzc1R5cGVzPy5pbmNsdWRlcyhhZGRyZXNzVHlwZSlcbiAgICAgICAgKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChxdWVyaWVzLCBhZGRyZXNzVHlwZSkgPT4gW1xuICAgICAgICAgICAgLi4ucXVlcmllcyxcbiAgICAgICAgICAgIHF1ZXJ5QmxvY2tjaGFpblVuc3BlbnRzUGF0aChjb2luLCBwYXJhbXMsIHdhbGxldEtleXMsIGdldEV4dGVybmFsQ2hhaW5Db2RlKGFkZHJlc3NUeXBlKSksXG4gICAgICAgICAgICBxdWVyeUJsb2NrY2hhaW5VbnNwZW50c1BhdGgoY29pbiwgcGFyYW1zLCB3YWxsZXRLZXlzLCBnZXRJbnRlcm5hbENoYWluQ29kZShhZGRyZXNzVHlwZSkpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgW10gYXMgUHJvbWlzZTxXYWxsZXRVbnNwZW50PGJpZ2ludD5bXT5bXVxuICAgICAgICApXG4gICAgKVxuICApLmZsYXQoKTtcblxuICAvLyBFeGVjdXRlIHRoZSBxdWVyaWVzIGFuZCBnYXRoZXIgdGhlIHVuc3BlbnRzXG4gIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSB1dHhvbGliLmJpdGdvLnVuc3BlbnRTdW0odW5zcGVudHMsICdiaWdpbnQnKTtcbiAgaWYgKHRvdGFsSW5wdXRBbW91bnQgPD0gQmlnSW50KDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yTm9JbnB1dFRvUmVjb3ZlcigpO1xuICB9XG5cbiAgLy8gQnVpbGQgdGhlIHBzYnRcbiAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZvck5ldHdvcmsoeyBuZXR3b3JrOiBjb2luLm5ldHdvcmsgfSk7XG4gIC8vIHhwdWJzIGNhbiBiZWNvbWUgaGFuZHkgZm9yIG1hbnkgdGhpbmdzLlxuICB1dHhvbGliLmJpdGdvLmFkZFhwdWJzVG9Qc2J0KHBzYnQsIHdhbGxldEtleXMpO1xuICBjb25zdCB0eEluZm8gPSB7fSBhcyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uO1xuICBjb25zdCBmZWVQZXJCeXRlOiBudW1iZXIgPVxuICAgIHBhcmFtcy5mZWVSYXRlICE9PSB1bmRlZmluZWQgPyBwYXJhbXMuZmVlUmF0ZSA6IGF3YWl0IGdldFJlY292ZXJ5RmVlUGVyQnl0ZXMoY29pbiwgeyBkZWZhdWx0VmFsdWU6IDUwIH0pO1xuXG4gIC8vIEtSUyByZWNvdmVyeSB0cmFuc2FjdGlvbnMgaGF2ZSBhIDJuZCBvdXRwdXQgdG8gcGF5IHRoZSByZWNvdmVyeSBmZWUsIGxpa2UgcGF5Z28gZmVlcy5cbiAgY29uc3QgZGltZW5zaW9ucyA9IERpbWVuc2lvbnMuZnJvbVBzYnQocHNidCkucGx1cyhpc0tyc1JlY292ZXJ5ID8gRGltZW5zaW9ucy5TaW5nbGVPdXRwdXQucDJ3c2ggOiBEaW1lbnNpb25zLlpFUk8pO1xuICBjb25zdCBhcHByb3hpbWF0ZUZlZSA9IEJpZ0ludChkaW1lbnNpb25zLmdldFZTaXplKCkgKiBmZWVQZXJCeXRlKTtcblxuICB0eEluZm8uaW5wdXRzID1cbiAgICByZXNwb25zZVR4Rm9ybWF0ID09PSAnbGVnYWN5J1xuICAgICAgPyB1bnNwZW50cy5tYXAoKHUpID0+ICh7IC4uLnUsIHZhbHVlOiBOdW1iZXIodS52YWx1ZSksIHZhbHVlU3RyaW5nOiB1LnZhbHVlLnRvU3RyaW5nKCksIHByZXZUeDogdW5kZWZpbmVkIH0pKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgdW5zcGVudHMuZm9yRWFjaCgodW5zcGVudCkgPT4ge1xuICAgIHV0eG9saWIuYml0Z28uYWRkV2FsbGV0VW5zcGVudFRvUHNidChwc2J0LCB1bnNwZW50LCB3YWxsZXRLZXlzLCAndXNlcicsICdiYWNrdXAnKTtcbiAgfSk7XG5cbiAgbGV0IGtyc0ZlZSA9IEJpZ0ludCgwKTtcbiAgaWYgKGlzS3JzUmVjb3ZlcnkgJiYgcGFyYW1zLmtyc1Byb3ZpZGVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGtyc0ZlZSA9IEJpZ0ludChhd2FpdCBjYWxjdWxhdGVGZWVBbW91bnQoY29pbiwgeyBwcm92aWRlcjogcGFyYW1zLmtyc1Byb3ZpZGVyIH0pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIERvbid0IGxldCB0aGlzIGVycm9yIGJsb2NrIHRoZSByZWNvdmVyeSAtXG4gICAgICBjb25zb2xlLmRpcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlY292ZXJ5QW1vdW50ID0gdG90YWxJbnB1dEFtb3VudCAtIGFwcHJveGltYXRlRmVlIC0ga3JzRmVlO1xuXG4gIGlmIChyZWNvdmVyeUFtb3VudCA8IEJpZ0ludCgwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdGhpcyB3YWxsZXRcXCdzIGJhbGFuY2UgaXMgdG9vIGxvdyB0byBwYXkgdGhlIGZlZXMgc3BlY2lmaWVkIGJ5IHRoZSBLUlMgcHJvdmlkZXIuXG4gICAgICAgICAgRXhpc3RpbmcgYmFsYW5jZSBvbiB3YWxsZXQ6ICR7dG90YWxJbnB1dEFtb3VudC50b1N0cmluZygpfS4gRXN0aW1hdGVkIG5ldHdvcmsgZmVlIGZvciB0aGUgcmVjb3ZlcnkgdHJhbnNhY3Rpb25cbiAgICAgICAgICA6ICR7YXBwcm94aW1hdGVGZWUudG9TdHJpbmcoKX0sIEtSUyBmZWUgdG8gcGF5OiAke2tyc0ZlZS50b1N0cmluZygpfS4gQWZ0ZXIgZGVkdWN0aW5nIGZlZXMsIHlvdXIgdG90YWxcbiAgICAgICAgICByZWNvdmVyYWJsZSBiYWxhbmNlIGlzICR7cmVjb3ZlcnlBbW91bnQudG9TdHJpbmcoKX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlY292ZXJ5T3V0cHV0U2NyaXB0ID0gdXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCBjb2luLm5ldHdvcmspO1xuICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDogcmVjb3ZlcnlPdXRwdXRTY3JpcHQsIHZhbHVlOiByZWNvdmVyeUFtb3VudCB9KTtcblxuICBpZiAoa3JzUHJvdmlkZXIgJiYga3JzRmVlID4gQmlnSW50KDApKSB7XG4gICAgaWYgKCFrcnNQcm92aWRlci5mZWVBZGRyZXNzZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihga2V5UHJvdmlkZXIgbXVzdCBkZWZpbmUgZmVlQWRkcmVzc2VzYCk7XG4gICAgfVxuXG4gICAgY29uc3Qga3JzRmVlQWRkcmVzcyA9IGtyc1Byb3ZpZGVyLmZlZUFkZHJlc3Nlc1tjb2luLmdldENoYWluKCldO1xuXG4gICAgaWYgKCFrcnNGZWVBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgS1JTIHByb3ZpZGVyIGhhcyBub3QgY29uZmlndXJlZCB0aGVpciBmZWUgc3RydWN0dXJlIHlldCAtIHJlY292ZXJ5IGNhbm5vdCBiZSBjb21wbGV0ZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBrcnNGZWVPdXRwdXRTY3JpcHQgPSB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoa3JzRmVlQWRkcmVzcywgY29pbi5uZXR3b3JrKTtcbiAgICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDoga3JzRmVlT3V0cHV0U2NyaXB0LCB2YWx1ZToga3JzRmVlIH0pO1xuICB9XG5cbiAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgIC8vIFRPRE8gQlRDLTMxNyAtIFdoZW4gcmVhZHkgdG8gUFNCVGlmeSBPVkMsIHNlbmQgcHNidCBoZXggYW5kIHNraXAgdW5zcGVudHMgaW4gcmVzcG9uc2UuXG4gICAgY29uc3QgdHhIZXggPSBwc2J0LmdldFVuc2lnbmVkVHgoKS50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICByZXR1cm4gZm9ybWF0Rm9yT2ZmbGluZVZhdWx0KGNvaW4uZ2V0Q2hhaW4oKSwgdHhJbmZvIGFzIE9mZmxpbmVWYXVsdFR4SW5mbywgdHhIZXgpO1xuICB9IGVsc2Uge1xuICAgIHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIHdhbGxldEtleXMudXNlciwgeyBpc0xhc3RTaWduYXR1cmU6IGZhbHNlIH0pO1xuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICAvLyBUaGUgS1JTIHByb3ZpZGVyIGtleXRlcm5hbCBzb2xlbHkgc3VwcG9ydHMgUDJTSCwgUDJXU0gsIGFuZCBQMlNILVAyV1NIIGlucHV0IHNjcmlwdCB0eXBlcy5cbiAgICAgIC8vIEl0IGN1cnJlbnRseSB1c2VzIGFuIG91dGRhdGVkIEJpdEdvSlMgU0RLLCB3aGljaCByZWxpZXMgb24gYSBsZWdhY3kgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgY29zaWduaW5nLlxuICAgICAgLy8gVW5mb3J0dW5hdGVseSwgdXBncmFkaW5nIHRoZSBrZXl0ZXJuYWwgY29kZSBwcmVzZW50cyBjaGFsbGVuZ2VzLFxuICAgICAgLy8gd2hpY2ggaGluZGVycyB0aGUgaW50ZWdyYXRpb24gb2YgdGhlIGxhdGVzdCBCaXRHb0pTIFNESyB3aXRoIFBTQlQgc2lnbmluZyBzdXBwb3J0LlxuICAgICAgdHhJbmZvLnRyYW5zYWN0aW9uSGV4ID1cbiAgICAgICAgcGFyYW1zLmtyc1Byb3ZpZGVyID09PSAna2V5dGVybmFsJ1xuICAgICAgICAgID8gdXR4b2xpYi5iaXRnby5leHRyYWN0UDJtc09ubHlIYWxmU2lnbmVkVHgocHNidCkudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICA6IHBzYnQudG9IZXgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHggPSBzaWduQW5kVmVyaWZ5UHNidChwc2J0LCB3YWxsZXRLZXlzLmJhY2t1cCwgeyBpc0xhc3RTaWduYXR1cmU6IHRydWUgfSk7XG4gICAgICB0eEluZm8udHJhbnNhY3Rpb25IZXggPSB0eC50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNLcnNSZWNvdmVyeSkge1xuICAgIHR4SW5mby5jb2luID0gY29pbi5nZXRDaGFpbigpO1xuICAgIHR4SW5mby5iYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5O1xuICAgIHR4SW5mby5yZWNvdmVyeUFtb3VudCA9IE51bWJlcihyZWNvdmVyeUFtb3VudCk7XG4gICAgdHhJbmZvLnJlY292ZXJ5QW1vdW50U3RyaW5nID0gcmVjb3ZlcnlBbW91bnQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiB0eEluZm87XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQml0R29WMVVuc3BlbnQge1xuICB0eF9oYXNoOiBzdHJpbmc7XG4gIHR4X291dHB1dF9uOiBudW1iZXI7XG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVjFTd2VlcFBhcmFtcyB7XG4gIHdhbGxldElkOiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZztcbiAgdW5zcGVudHM6IEJpdEdvVjFVbnNwZW50W107XG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAgdXNlcktleTogc3RyaW5nO1xuICBvdHA6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWMVJlY292ZXJQYXJhbXMgZXh0ZW5kcyBPbWl0PFYxU3dlZXBQYXJhbXMsICdvdHAnPiB7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdjFCYWNrdXBLZXlSZWNvdmVyeShcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBWMVJlY292ZXJQYXJhbXNcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChcbiAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSB8fFxuICAgICFjb2luLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCB7IGFueUZvcm1hdDogdHJ1ZSB9KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICB9XG5cbiAgY29uc3QgcmVjb3ZlcnlGZWVQZXJCeXRlID0gYXdhaXQgZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhjb2luLCB7IGRlZmF1bHRWYWx1ZTogNTAgfSk7XG4gIGNvbnN0IHYxd2FsbGV0ID0gYXdhaXQgYml0Z28ud2FsbGV0cygpLmdldCh7IGlkOiBwYXJhbXMud2FsbGV0SWQgfSk7XG4gIHJldHVybiBhd2FpdCB2MXdhbGxldC5yZWNvdmVyKHtcbiAgICAuLi5wYXJhbXMsXG4gICAgZmVlUmF0ZTogcmVjb3ZlcnlGZWVQZXJCeXRlLFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHYxU3dlZXAoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogVjFTd2VlcFBhcmFtc1xuKTogUHJvbWlzZTx7XG4gIHR4OiBzdHJpbmc7XG4gIGhhc2g6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG59PiB7XG4gIGlmIChcbiAgICBfLmlzVW5kZWZpbmVkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSB8fFxuICAgICFjb2luLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCB7IGFueUZvcm1hdDogdHJ1ZSB9KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbicpO1xuICB9XG5cbiAgbGV0IHJlY292ZXJ5RmVlUGVyQnl0ZSA9IDEwMDtcbiAgaWYgKGJpdGdvLmVudiA9PT0gJ3Byb2QnKSB7XG4gICAgcmVjb3ZlcnlGZWVQZXJCeXRlID0gYXdhaXQgZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhjb2luLCB7IGRlZmF1bHRWYWx1ZTogMTAwIH0pO1xuICB9XG5cbiAgY29uc3QgdjF3YWxsZXQgPSBhd2FpdCBiaXRnby53YWxsZXRzKCkuZ2V0KHsgaWQ6IHBhcmFtcy53YWxsZXRJZCB9KTtcbiAgcmV0dXJuIGF3YWl0IHYxd2FsbGV0LnN3ZWVwKHtcbiAgICAuLi5wYXJhbXMsXG4gICAgZmVlUmF0ZTogcmVjb3ZlcnlGZWVQZXJCeXRlLFxuICB9KTtcbn1cbiJdfQ==