@bitgo/account-lib 2.20.0-rc.3 → 2.20.0-rc.32

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 (592) hide show
  1. package/.mocharc.js +1 -1
  2. package/CHANGELOG.md +311 -0
  3. package/dist/resources/README.md +8 -2
  4. package/dist/resources/trx/protobuf/tron.js +5 -1
  5. package/dist/src/coin/dot/addressInitializationBuilder.d.ts +1 -2
  6. package/dist/src/coin/dot/addressInitializationBuilder.d.ts.map +1 -1
  7. package/dist/src/coin/dot/addressInitializationBuilder.js +60 -83
  8. package/dist/src/coin/dot/batchTransactionBuilder.d.ts +1 -1
  9. package/dist/src/coin/dot/batchTransactionBuilder.d.ts.map +1 -1
  10. package/dist/src/coin/dot/batchTransactionBuilder.js +55 -78
  11. package/dist/src/coin/dot/claimBuilder.d.ts +1 -2
  12. package/dist/src/coin/dot/claimBuilder.d.ts.map +1 -1
  13. package/dist/src/coin/dot/claimBuilder.js +49 -69
  14. package/dist/src/coin/dot/errors.d.ts +1 -1
  15. package/dist/src/coin/dot/errors.d.ts.map +1 -1
  16. package/dist/src/coin/dot/errors.js +12 -33
  17. package/dist/src/coin/dot/iface.d.ts +1 -2
  18. package/dist/src/coin/dot/iface.d.ts.map +1 -1
  19. package/dist/src/coin/dot/iface.js +1 -1
  20. package/dist/src/coin/dot/index.js +3 -3
  21. package/dist/src/coin/dot/keyPair.d.ts +2 -3
  22. package/dist/src/coin/dot/keyPair.d.ts.map +1 -1
  23. package/dist/src/coin/dot/keyPair.js +34 -56
  24. package/dist/src/coin/dot/singletonRegistry.js +6 -9
  25. package/dist/src/coin/dot/stakingBuilder.d.ts +1 -2
  26. package/dist/src/coin/dot/stakingBuilder.d.ts.map +1 -1
  27. package/dist/src/coin/dot/stakingBuilder.js +55 -73
  28. package/dist/src/coin/dot/transaction.d.ts +1 -2
  29. package/dist/src/coin/dot/transaction.d.ts.map +1 -1
  30. package/dist/src/coin/dot/transaction.js +154 -170
  31. package/dist/src/coin/dot/transactionBuilder.d.ts +2 -3
  32. package/dist/src/coin/dot/transactionBuilder.d.ts.map +1 -1
  33. package/dist/src/coin/dot/transactionBuilder.js +133 -205
  34. package/dist/src/coin/dot/transactionBuilderFactory.d.ts +1 -1
  35. package/dist/src/coin/dot/transactionBuilderFactory.d.ts.map +1 -1
  36. package/dist/src/coin/dot/transactionBuilderFactory.js +46 -65
  37. package/dist/src/coin/dot/transferBuilder.d.ts +1 -2
  38. package/dist/src/coin/dot/transferBuilder.d.ts.map +1 -1
  39. package/dist/src/coin/dot/transferBuilder.js +71 -88
  40. package/dist/src/coin/dot/txnSchema.js +17 -15
  41. package/dist/src/coin/dot/unnominateBuilder.d.ts +1 -1
  42. package/dist/src/coin/dot/unnominateBuilder.d.ts.map +1 -1
  43. package/dist/src/coin/dot/unnominateBuilder.js +24 -46
  44. package/dist/src/coin/dot/unstakeBuilder.d.ts +1 -1
  45. package/dist/src/coin/dot/unstakeBuilder.d.ts.map +1 -1
  46. package/dist/src/coin/dot/unstakeBuilder.js +38 -60
  47. package/dist/src/coin/dot/utils.d.ts +9 -3
  48. package/dist/src/coin/dot/utils.d.ts.map +1 -1
  49. package/dist/src/coin/dot/utils.js +112 -102
  50. package/dist/src/coin/dot/withdrawUnstakedBuilder.d.ts +1 -1
  51. package/dist/src/coin/dot/withdrawUnstakedBuilder.d.ts.map +1 -1
  52. package/dist/src/coin/dot/withdrawUnstakedBuilder.js +38 -60
  53. package/dist/src/coin/etc/index.d.ts +2 -4
  54. package/dist/src/coin/etc/index.d.ts.map +1 -1
  55. package/dist/src/coin/etc/index.js +7 -9
  56. package/dist/src/coin/etc/resources.js +3 -3
  57. package/dist/src/coin/etc/transactionBuilder.d.ts.map +1 -1
  58. package/dist/src/coin/etc/transactionBuilder.js +22 -41
  59. package/dist/src/coin/etc/transferBuilder.d.ts +1 -1
  60. package/dist/src/coin/etc/transferBuilder.d.ts.map +1 -1
  61. package/dist/src/coin/etc/transferBuilder.js +8 -28
  62. package/dist/src/coin/etc/utils.d.ts +1 -2
  63. package/dist/src/coin/etc/utils.d.ts.map +1 -1
  64. package/dist/src/coin/etc/utils.js +10 -50
  65. package/dist/src/coin/eth2/keyPair.d.ts +1 -2
  66. package/dist/src/coin/eth2/keyPair.d.ts.map +1 -1
  67. package/dist/src/coin/eth2/keyPair.js +19 -37
  68. package/dist/src/coin/hbar/coinTransferBuilder.d.ts +46 -0
  69. package/dist/src/coin/hbar/coinTransferBuilder.d.ts.map +1 -0
  70. package/dist/src/coin/hbar/coinTransferBuilder.js +143 -0
  71. package/dist/src/coin/hbar/constants.d.ts +8 -0
  72. package/dist/src/coin/hbar/constants.d.ts.map +1 -0
  73. package/dist/src/coin/hbar/constants.js +12 -0
  74. package/dist/src/coin/hbar/iface.d.ts +49 -0
  75. package/dist/src/coin/hbar/iface.d.ts.map +1 -0
  76. package/dist/src/coin/hbar/iface.js +3 -0
  77. package/dist/src/coin/hbar/index.d.ts +3 -0
  78. package/dist/src/coin/hbar/index.d.ts.map +1 -1
  79. package/dist/src/coin/hbar/index.js +9 -3
  80. package/dist/src/coin/hbar/keyPair.d.ts +2 -3
  81. package/dist/src/coin/hbar/keyPair.d.ts.map +1 -1
  82. package/dist/src/coin/hbar/keyPair.js +31 -50
  83. package/dist/src/coin/hbar/tokenAssociateBuilder.d.ts +38 -0
  84. package/dist/src/coin/hbar/tokenAssociateBuilder.d.ts.map +1 -0
  85. package/dist/src/coin/hbar/tokenAssociateBuilder.js +126 -0
  86. package/dist/src/coin/hbar/tokenTransferBuilder.d.ts +25 -0
  87. package/dist/src/coin/hbar/tokenTransferBuilder.d.ts.map +1 -0
  88. package/dist/src/coin/hbar/tokenTransferBuilder.js +115 -0
  89. package/dist/src/coin/hbar/transaction.d.ts +30 -23
  90. package/dist/src/coin/hbar/transaction.d.ts.map +1 -1
  91. package/dist/src/coin/hbar/transaction.js +197 -193
  92. package/dist/src/coin/hbar/transactionBuilder.d.ts +23 -25
  93. package/dist/src/coin/hbar/transactionBuilder.d.ts.map +1 -1
  94. package/dist/src/coin/hbar/transactionBuilder.js +146 -223
  95. package/dist/src/coin/hbar/transactionBuilderFactory.d.ts +14 -4
  96. package/dist/src/coin/hbar/transactionBuilderFactory.d.ts.map +1 -1
  97. package/dist/src/coin/hbar/transactionBuilderFactory.js +50 -57
  98. package/dist/src/coin/hbar/transferBuilder.d.ts +9 -29
  99. package/dist/src/coin/hbar/transferBuilder.d.ts.map +1 -1
  100. package/dist/src/coin/hbar/transferBuilder.js +37 -157
  101. package/dist/src/coin/hbar/utils.d.ts +99 -58
  102. package/dist/src/coin/hbar/utils.d.ts.map +1 -1
  103. package/dist/src/coin/hbar/utils.js +183 -105
  104. package/dist/src/coin/hbar/walletInitializationBuilder.d.ts +5 -5
  105. package/dist/src/coin/hbar/walletInitializationBuilder.d.ts.map +1 -1
  106. package/dist/src/coin/hbar/walletInitializationBuilder.js +68 -113
  107. package/dist/src/coin/near/contractCallWrapper.js +46 -65
  108. package/dist/src/coin/near/errors.d.ts +1 -1
  109. package/dist/src/coin/near/errors.d.ts.map +1 -1
  110. package/dist/src/coin/near/errors.js +7 -25
  111. package/dist/src/coin/near/iface.d.ts +1 -2
  112. package/dist/src/coin/near/iface.d.ts.map +1 -1
  113. package/dist/src/coin/near/iface.js +1 -1
  114. package/dist/src/coin/near/index.js +2 -2
  115. package/dist/src/coin/near/keyPair.d.ts +1 -2
  116. package/dist/src/coin/near/keyPair.d.ts.map +1 -1
  117. package/dist/src/coin/near/keyPair.js +23 -40
  118. package/dist/src/coin/near/stakingActivateBuilder.d.ts +1 -1
  119. package/dist/src/coin/near/stakingActivateBuilder.d.ts.map +1 -1
  120. package/dist/src/coin/near/stakingActivateBuilder.js +36 -105
  121. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts +1 -1
  122. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts.map +1 -1
  123. package/dist/src/coin/near/stakingDeactivateBuilder.js +36 -105
  124. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts +1 -1
  125. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts.map +1 -1
  126. package/dist/src/coin/near/stakingWithdrawBuilder.js +36 -105
  127. package/dist/src/coin/near/transaction.d.ts +1 -2
  128. package/dist/src/coin/near/transaction.d.ts.map +1 -1
  129. package/dist/src/coin/near/transaction.js +125 -154
  130. package/dist/src/coin/near/transactionBuilder.d.ts +1 -2
  131. package/dist/src/coin/near/transactionBuilder.d.ts.map +1 -1
  132. package/dist/src/coin/near/transactionBuilder.js +81 -144
  133. package/dist/src/coin/near/transactionBuilderFactory.d.ts +1 -1
  134. package/dist/src/coin/near/transactionBuilderFactory.d.ts.map +1 -1
  135. package/dist/src/coin/near/transactionBuilderFactory.js +33 -51
  136. package/dist/src/coin/near/transferBuilder.d.ts +1 -1
  137. package/dist/src/coin/near/transferBuilder.d.ts.map +1 -1
  138. package/dist/src/coin/near/transferBuilder.js +27 -91
  139. package/dist/src/coin/near/utils.d.ts +1 -1
  140. package/dist/src/coin/near/utils.d.ts.map +1 -1
  141. package/dist/src/coin/near/utils.js +35 -45
  142. package/dist/src/coin/near/walletInitializationBuilder.d.ts +1 -1
  143. package/dist/src/coin/near/walletInitializationBuilder.d.ts.map +1 -1
  144. package/dist/src/coin/near/walletInitializationBuilder.js +13 -70
  145. package/dist/src/coin/polygon/index.d.ts +6 -0
  146. package/dist/src/coin/polygon/index.d.ts.map +1 -0
  147. package/dist/src/coin/{celo → polygon}/index.js +7 -9
  148. package/dist/src/coin/polygon/resources.d.ts +10 -0
  149. package/dist/src/coin/polygon/resources.d.ts.map +1 -0
  150. package/dist/src/coin/polygon/resources.js +25 -0
  151. package/dist/src/coin/{avaxc → polygon}/transactionBuilder.d.ts +1 -1
  152. package/dist/src/coin/polygon/transactionBuilder.d.ts.map +1 -0
  153. package/dist/src/coin/polygon/transactionBuilder.js +44 -0
  154. package/dist/src/coin/{avaxc → polygon}/transferBuilder.d.ts +4 -2
  155. package/dist/src/coin/polygon/transferBuilder.d.ts.map +1 -0
  156. package/dist/src/coin/polygon/transferBuilder.js +27 -0
  157. package/dist/src/coin/polygon/utils.d.ts +17 -0
  158. package/dist/src/coin/polygon/utils.d.ts.map +1 -0
  159. package/dist/src/coin/polygon/utils.js +42 -0
  160. package/dist/src/coin/polygon/walletUtil.d.ts +48 -0
  161. package/dist/src/coin/polygon/walletUtil.d.ts.map +1 -0
  162. package/dist/src/coin/polygon/walletUtil.js +632 -0
  163. package/dist/src/coin/rbtc/index.d.ts +2 -4
  164. package/dist/src/coin/rbtc/index.d.ts.map +1 -1
  165. package/dist/src/coin/rbtc/index.js +7 -9
  166. package/dist/src/coin/rbtc/resources.js +3 -3
  167. package/dist/src/coin/rbtc/transactionBuilder.d.ts.map +1 -1
  168. package/dist/src/coin/rbtc/transactionBuilder.js +21 -40
  169. package/dist/src/coin/rbtc/transferBuilder.d.ts +1 -1
  170. package/dist/src/coin/rbtc/transferBuilder.d.ts.map +1 -1
  171. package/dist/src/coin/rbtc/transferBuilder.js +8 -28
  172. package/dist/src/coin/rbtc/utils.d.ts +1 -2
  173. package/dist/src/coin/rbtc/utils.d.ts.map +1 -1
  174. package/dist/src/coin/rbtc/utils.js +10 -50
  175. package/dist/src/coin/sol/ataInitializationBuilder.d.ts +12 -3
  176. package/dist/src/coin/sol/ataInitializationBuilder.d.ts.map +1 -1
  177. package/dist/src/coin/sol/ataInitializationBuilder.js +74 -126
  178. package/dist/src/coin/sol/ataInitializationTransaction.d.ts.map +1 -1
  179. package/dist/src/coin/sol/ataInitializationTransaction.js +36 -59
  180. package/dist/src/coin/sol/iface.d.ts +2 -1
  181. package/dist/src/coin/sol/iface.d.ts.map +1 -1
  182. package/dist/src/coin/sol/iface.js +1 -1
  183. package/dist/src/coin/sol/index.js +3 -3
  184. package/dist/src/coin/sol/instructionParamsFactory.d.ts +1 -1
  185. package/dist/src/coin/sol/instructionParamsFactory.d.ts.map +1 -1
  186. package/dist/src/coin/sol/instructionParamsFactory.js +72 -70
  187. package/dist/src/coin/sol/keyPair.d.ts +1 -2
  188. package/dist/src/coin/sol/keyPair.d.ts.map +1 -1
  189. package/dist/src/coin/sol/keyPair.js +24 -42
  190. package/dist/src/coin/sol/solInstructionFactory.js +33 -33
  191. package/dist/src/coin/sol/stakingActivateBuilder.d.ts +1 -1
  192. package/dist/src/coin/sol/stakingActivateBuilder.d.ts.map +1 -1
  193. package/dist/src/coin/sol/stakingActivateBuilder.js +45 -113
  194. package/dist/src/coin/sol/stakingDeactivateBuilder.d.ts +1 -1
  195. package/dist/src/coin/sol/stakingDeactivateBuilder.d.ts.map +1 -1
  196. package/dist/src/coin/sol/stakingDeactivateBuilder.js +36 -104
  197. package/dist/src/coin/sol/stakingWithdrawBuilder.d.ts +1 -1
  198. package/dist/src/coin/sol/stakingWithdrawBuilder.d.ts.map +1 -1
  199. package/dist/src/coin/sol/stakingWithdrawBuilder.js +41 -109
  200. package/dist/src/coin/sol/tokenEncodeDecode.js +46 -75
  201. package/dist/src/coin/sol/tokenTransferBuilder.d.ts +1 -1
  202. package/dist/src/coin/sol/tokenTransferBuilder.d.ts.map +1 -1
  203. package/dist/src/coin/sol/tokenTransferBuilder.js +42 -115
  204. package/dist/src/coin/sol/transaction.d.ts +1 -2
  205. package/dist/src/coin/sol/transaction.d.ts.map +1 -1
  206. package/dist/src/coin/sol/transaction.js +130 -221
  207. package/dist/src/coin/sol/transactionBuilder.d.ts +1 -2
  208. package/dist/src/coin/sol/transactionBuilder.d.ts.map +1 -1
  209. package/dist/src/coin/sol/transactionBuilder.js +104 -171
  210. package/dist/src/coin/sol/transactionBuilderFactory.d.ts +1 -1
  211. package/dist/src/coin/sol/transactionBuilderFactory.d.ts.map +1 -1
  212. package/dist/src/coin/sol/transactionBuilderFactory.js +46 -64
  213. package/dist/src/coin/sol/transferBuilder.d.ts +1 -1
  214. package/dist/src/coin/sol/transferBuilder.d.ts.map +1 -1
  215. package/dist/src/coin/sol/transferBuilder.js +37 -108
  216. package/dist/src/coin/sol/utils.d.ts +1 -1
  217. package/dist/src/coin/sol/utils.d.ts.map +1 -1
  218. package/dist/src/coin/sol/utils.js +49 -117
  219. package/dist/src/coin/sol/walletInitializationBuilder.d.ts +1 -1
  220. package/dist/src/coin/sol/walletInitializationBuilder.d.ts.map +1 -1
  221. package/dist/src/coin/sol/walletInitializationBuilder.js +39 -107
  222. package/dist/src/coin/trx/address.d.ts +1 -1
  223. package/dist/src/coin/trx/address.d.ts.map +1 -1
  224. package/dist/src/coin/trx/address.js +3 -6
  225. package/dist/src/coin/trx/contractCallBuilder.d.ts +1 -1
  226. package/dist/src/coin/trx/contractCallBuilder.d.ts.map +1 -1
  227. package/dist/src/coin/trx/contractCallBuilder.js +100 -160
  228. package/dist/src/coin/trx/iface.d.ts +1 -1
  229. package/dist/src/coin/trx/iface.d.ts.map +1 -1
  230. package/dist/src/coin/trx/iface.js +1 -1
  231. package/dist/src/coin/trx/index.js +4 -4
  232. package/dist/src/coin/trx/keyPair.d.ts +1 -3
  233. package/dist/src/coin/trx/keyPair.d.ts.map +1 -1
  234. package/dist/src/coin/trx/keyPair.js +37 -57
  235. package/dist/src/coin/trx/transaction.d.ts +1 -3
  236. package/dist/src/coin/trx/transaction.d.ts.map +1 -1
  237. package/dist/src/coin/trx/transaction.js +84 -124
  238. package/dist/src/coin/trx/transactionBuilder.d.ts +1 -2
  239. package/dist/src/coin/trx/transactionBuilder.d.ts.map +1 -1
  240. package/dist/src/coin/trx/transactionBuilder.js +72 -134
  241. package/dist/src/coin/trx/utils.js +57 -59
  242. package/dist/src/coin/trx/wrappedBuilder.d.ts +1 -2
  243. package/dist/src/coin/trx/wrappedBuilder.d.ts.map +1 -1
  244. package/dist/src/coin/trx/wrappedBuilder.js +43 -101
  245. package/dist/src/coin/xrp/index.js +2 -2
  246. package/dist/src/coin/xrp/keyPair.d.ts +1 -2
  247. package/dist/src/coin/xrp/keyPair.d.ts.map +1 -1
  248. package/dist/src/coin/xrp/keyPair.js +6 -23
  249. package/dist/src/coin/xrp/transaction.d.ts +1 -2
  250. package/dist/src/coin/xrp/transaction.d.ts.map +1 -1
  251. package/dist/src/coin/xrp/transaction.js +13 -34
  252. package/dist/src/coin/xrp/transactionBuilder.d.ts +1 -2
  253. package/dist/src/coin/xrp/transactionBuilder.d.ts.map +1 -1
  254. package/dist/src/coin/xrp/transactionBuilder.js +29 -51
  255. package/dist/src/coin/xrp/transactionBuilderFactory.d.ts +1 -1
  256. package/dist/src/coin/xrp/transactionBuilderFactory.d.ts.map +1 -1
  257. package/dist/src/coin/xrp/transactionBuilderFactory.js +17 -35
  258. package/dist/src/coin/xrp/transferBuilder.d.ts +1 -1
  259. package/dist/src/coin/xrp/transferBuilder.d.ts.map +1 -1
  260. package/dist/src/coin/xrp/transferBuilder.js +16 -73
  261. package/dist/src/coin/xrp/utils.d.ts +1 -1
  262. package/dist/src/coin/xrp/utils.d.ts.map +1 -1
  263. package/dist/src/coin/xrp/utils.js +22 -25
  264. package/dist/src/coin/xrp/walletInitializationBuilder.d.ts +1 -1
  265. package/dist/src/coin/xrp/walletInitializationBuilder.d.ts.map +1 -1
  266. package/dist/src/coin/xrp/walletInitializationBuilder.js +16 -73
  267. package/dist/src/index.d.ts +24 -16
  268. package/dist/src/index.d.ts.map +1 -1
  269. package/dist/src/index.js +58 -50
  270. package/dist/src/keyPair/index.d.ts +1 -2
  271. package/dist/src/keyPair/index.d.ts.map +1 -1
  272. package/dist/src/keyPair/index.js +9 -9
  273. package/dist/src/utils/index.d.ts +1 -1
  274. package/dist/src/utils/index.d.ts.map +1 -1
  275. package/dist/src/utils/index.js +9 -9
  276. package/dist/tsconfig.tsbuildinfo +29398 -22560
  277. package/package.json +25 -58
  278. package/resources/README.md +8 -2
  279. package/resources/trx/protobuf/tron.js +5 -1
  280. package/dist/browser/bitgo-account-lib.js +0 -2
  281. package/dist/browser/bitgo-account-lib.js.LICENSE.txt +0 -335
  282. package/dist/resources/hbar/protobuf/BasicTypes.proto +0 -424
  283. package/dist/resources/hbar/protobuf/CryptoCreate.proto +0 -47
  284. package/dist/resources/hbar/protobuf/CryptoTransfer.proto +0 -33
  285. package/dist/resources/hbar/protobuf/Duration.proto +0 -28
  286. package/dist/resources/hbar/protobuf/Timestamp.proto +0 -34
  287. package/dist/resources/hbar/protobuf/Transaction.proto +0 -35
  288. package/dist/resources/hbar/protobuf/TransactionBody.proto +0 -24
  289. package/dist/resources/hbar/protobuf/TransactionContents.proto +0 -33
  290. package/dist/resources/hbar/protobuf/hedera.d.ts +0 -4612
  291. package/dist/resources/hbar/protobuf/hedera.js +0 -12192
  292. package/dist/src/coin/algo/assetTransferBuilder.d.ts +0 -43
  293. package/dist/src/coin/algo/assetTransferBuilder.d.ts.map +0 -1
  294. package/dist/src/coin/algo/assetTransferBuilder.js +0 -127
  295. package/dist/src/coin/algo/errors.d.ts +0 -11
  296. package/dist/src/coin/algo/errors.d.ts.map +0 -1
  297. package/dist/src/coin/algo/errors.js +0 -51
  298. package/dist/src/coin/algo/ifaces.d.ts +0 -46
  299. package/dist/src/coin/algo/ifaces.d.ts.map +0 -1
  300. package/dist/src/coin/algo/ifaces.js +0 -3
  301. package/dist/src/coin/algo/index.d.ts +0 -13
  302. package/dist/src/coin/algo/index.d.ts.map +0 -1
  303. package/dist/src/coin/algo/index.js +0 -47
  304. package/dist/src/coin/algo/keyPair.d.ts +0 -26
  305. package/dist/src/coin/algo/keyPair.d.ts.map +0 -1
  306. package/dist/src/coin/algo/keyPair.js +0 -95
  307. package/dist/src/coin/algo/keyRegistrationBuilder.d.ts +0 -104
  308. package/dist/src/coin/algo/keyRegistrationBuilder.d.ts.map +0 -1
  309. package/dist/src/coin/algo/keyRegistrationBuilder.js +0 -262
  310. package/dist/src/coin/algo/seedEncoding.d.ts +0 -25
  311. package/dist/src/coin/algo/seedEncoding.d.ts.map +0 -1
  312. package/dist/src/coin/algo/seedEncoding.js +0 -100
  313. package/dist/src/coin/algo/transaction.d.ts +0 -76
  314. package/dist/src/coin/algo/transaction.d.ts.map +0 -1
  315. package/dist/src/coin/algo/transaction.js +0 -287
  316. package/dist/src/coin/algo/transactionBuilder.d.ts +0 -205
  317. package/dist/src/coin/algo/transactionBuilder.d.ts.map +0 -1
  318. package/dist/src/coin/algo/transactionBuilder.js +0 -445
  319. package/dist/src/coin/algo/transactionBuilderFactory.d.ts +0 -16
  320. package/dist/src/coin/algo/transactionBuilderFactory.d.ts.map +0 -1
  321. package/dist/src/coin/algo/transactionBuilderFactory.js +0 -70
  322. package/dist/src/coin/algo/transferBuilder.d.ts +0 -41
  323. package/dist/src/coin/algo/transferBuilder.d.ts.map +0 -1
  324. package/dist/src/coin/algo/transferBuilder.js +0 -111
  325. package/dist/src/coin/algo/txnSchema.d.ts +0 -7
  326. package/dist/src/coin/algo/txnSchema.d.ts.map +0 -1
  327. package/dist/src/coin/algo/txnSchema.js +0 -68
  328. package/dist/src/coin/algo/utils.d.ts +0 -249
  329. package/dist/src/coin/algo/utils.d.ts.map +0 -1
  330. package/dist/src/coin/algo/utils.js +0 -544
  331. package/dist/src/coin/avaxc/index.d.ts +0 -8
  332. package/dist/src/coin/avaxc/index.d.ts.map +0 -1
  333. package/dist/src/coin/avaxc/index.js +0 -35
  334. package/dist/src/coin/avaxc/keyPair.d.ts +0 -27
  335. package/dist/src/coin/avaxc/keyPair.d.ts.map +0 -1
  336. package/dist/src/coin/avaxc/keyPair.js +0 -102
  337. package/dist/src/coin/avaxc/resources.d.ts +0 -12
  338. package/dist/src/coin/avaxc/resources.d.ts.map +0 -1
  339. package/dist/src/coin/avaxc/resources.js +0 -27
  340. package/dist/src/coin/avaxc/transactionBuilder.d.ts.map +0 -1
  341. package/dist/src/coin/avaxc/transactionBuilder.js +0 -64
  342. package/dist/src/coin/avaxc/transferBuilder.d.ts.map +0 -1
  343. package/dist/src/coin/avaxc/transferBuilder.js +0 -45
  344. package/dist/src/coin/avaxc/utils.d.ts +0 -39
  345. package/dist/src/coin/avaxc/utils.d.ts.map +0 -1
  346. package/dist/src/coin/avaxc/utils.js +0 -110
  347. package/dist/src/coin/avaxc/walletUtil.d.ts +0 -22
  348. package/dist/src/coin/avaxc/walletUtil.d.ts.map +0 -1
  349. package/dist/src/coin/avaxc/walletUtil.js +0 -62
  350. package/dist/src/coin/baseCoin/baseKeyPair.d.ts +0 -27
  351. package/dist/src/coin/baseCoin/baseKeyPair.d.ts.map +0 -1
  352. package/dist/src/coin/baseCoin/baseKeyPair.js +0 -3
  353. package/dist/src/coin/baseCoin/baseTransaction.d.ts +0 -71
  354. package/dist/src/coin/baseCoin/baseTransaction.d.ts.map +0 -1
  355. package/dist/src/coin/baseCoin/baseTransaction.js +0 -94
  356. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts +0 -128
  357. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts.map +0 -1
  358. package/dist/src/coin/baseCoin/baseTransactionBuilder.js +0 -179
  359. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.d.ts +0 -30
  360. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.d.ts.map +0 -1
  361. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.js +0 -20
  362. package/dist/src/coin/baseCoin/baseUtils.d.ts +0 -45
  363. package/dist/src/coin/baseCoin/baseUtils.d.ts.map +0 -1
  364. package/dist/src/coin/baseCoin/baseUtils.js +0 -3
  365. package/dist/src/coin/baseCoin/blsKeyPair.d.ts +0 -75
  366. package/dist/src/coin/baseCoin/blsKeyPair.d.ts.map +0 -1
  367. package/dist/src/coin/baseCoin/blsKeyPair.js +0 -232
  368. package/dist/src/coin/baseCoin/ed25519KeyPair.d.ts +0 -50
  369. package/dist/src/coin/baseCoin/ed25519KeyPair.d.ts.map +0 -1
  370. package/dist/src/coin/baseCoin/ed25519KeyPair.js +0 -141
  371. package/dist/src/coin/baseCoin/enum.d.ts +0 -43
  372. package/dist/src/coin/baseCoin/enum.d.ts.map +0 -1
  373. package/dist/src/coin/baseCoin/enum.js +0 -70
  374. package/dist/src/coin/baseCoin/errors.d.ts +0 -65
  375. package/dist/src/coin/baseCoin/errors.d.ts.map +0 -1
  376. package/dist/src/coin/baseCoin/errors.js +0 -156
  377. package/dist/src/coin/baseCoin/iface.d.ts +0 -162
  378. package/dist/src/coin/baseCoin/iface.d.ts.map +0 -1
  379. package/dist/src/coin/baseCoin/iface.js +0 -38
  380. package/dist/src/coin/baseCoin/index.d.ts +0 -12
  381. package/dist/src/coin/baseCoin/index.d.ts.map +0 -1
  382. package/dist/src/coin/baseCoin/index.js +0 -41
  383. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.d.ts +0 -55
  384. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +0 -1
  385. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.js +0 -124
  386. package/dist/src/coin/celo/index.d.ts +0 -8
  387. package/dist/src/coin/celo/index.d.ts.map +0 -1
  388. package/dist/src/coin/celo/resources.d.ts +0 -10
  389. package/dist/src/coin/celo/resources.d.ts.map +0 -1
  390. package/dist/src/coin/celo/resources.js +0 -26
  391. package/dist/src/coin/celo/stakingBuilder.d.ts +0 -91
  392. package/dist/src/coin/celo/stakingBuilder.d.ts.map +0 -1
  393. package/dist/src/coin/celo/stakingBuilder.js +0 -279
  394. package/dist/src/coin/celo/stakingCall.d.ts +0 -7
  395. package/dist/src/coin/celo/stakingCall.d.ts.map +0 -1
  396. package/dist/src/coin/celo/stakingCall.js +0 -31
  397. package/dist/src/coin/celo/stakingUtils.d.ts +0 -15
  398. package/dist/src/coin/celo/stakingUtils.d.ts.map +0 -1
  399. package/dist/src/coin/celo/stakingUtils.js +0 -99
  400. package/dist/src/coin/celo/transaction.d.ts +0 -10
  401. package/dist/src/coin/celo/transaction.d.ts.map +0 -1
  402. package/dist/src/coin/celo/transaction.js +0 -57
  403. package/dist/src/coin/celo/transactionBuilder.d.ts +0 -86
  404. package/dist/src/coin/celo/transactionBuilder.d.ts.map +0 -1
  405. package/dist/src/coin/celo/transactionBuilder.js +0 -247
  406. package/dist/src/coin/celo/transferBuilder.d.ts +0 -19
  407. package/dist/src/coin/celo/transferBuilder.d.ts.map +0 -1
  408. package/dist/src/coin/celo/transferBuilder.js +0 -47
  409. package/dist/src/coin/celo/types.d.ts +0 -52
  410. package/dist/src/coin/celo/types.d.ts.map +0 -1
  411. package/dist/src/coin/celo/types.js +0 -276
  412. package/dist/src/coin/celo/utils.d.ts +0 -18
  413. package/dist/src/coin/celo/utils.d.ts.map +0 -1
  414. package/dist/src/coin/celo/utils.js +0 -99
  415. package/dist/src/coin/cspr/constants.d.ts +0 -19
  416. package/dist/src/coin/cspr/constants.d.ts.map +0 -1
  417. package/dist/src/coin/cspr/constants.js +0 -28
  418. package/dist/src/coin/cspr/delegateBuilder.d.ts +0 -49
  419. package/dist/src/coin/cspr/delegateBuilder.d.ts.map +0 -1
  420. package/dist/src/coin/cspr/delegateBuilder.js +0 -175
  421. package/dist/src/coin/cspr/ifaces.d.ts +0 -69
  422. package/dist/src/coin/cspr/ifaces.d.ts.map +0 -1
  423. package/dist/src/coin/cspr/ifaces.js +0 -3
  424. package/dist/src/coin/cspr/index.d.ts +0 -5
  425. package/dist/src/coin/cspr/index.d.ts.map +0 -1
  426. package/dist/src/coin/cspr/index.js +0 -29
  427. package/dist/src/coin/cspr/keyPair.d.ts +0 -19
  428. package/dist/src/coin/cspr/keyPair.d.ts.map +0 -1
  429. package/dist/src/coin/cspr/keyPair.js +0 -94
  430. package/dist/src/coin/cspr/transaction.d.ts +0 -56
  431. package/dist/src/coin/cspr/transaction.d.ts.map +0 -1
  432. package/dist/src/coin/cspr/transaction.js +0 -251
  433. package/dist/src/coin/cspr/transactionBuilder.d.ts +0 -125
  434. package/dist/src/coin/cspr/transactionBuilder.d.ts.map +0 -1
  435. package/dist/src/coin/cspr/transactionBuilder.js +0 -383
  436. package/dist/src/coin/cspr/transactionBuilderFactory.d.ts +0 -46
  437. package/dist/src/coin/cspr/transactionBuilderFactory.d.ts.map +0 -1
  438. package/dist/src/coin/cspr/transactionBuilderFactory.js +0 -116
  439. package/dist/src/coin/cspr/transferBuilder.d.ts +0 -39
  440. package/dist/src/coin/cspr/transferBuilder.d.ts.map +0 -1
  441. package/dist/src/coin/cspr/transferBuilder.js +0 -169
  442. package/dist/src/coin/cspr/undelegateBuilder.d.ts +0 -49
  443. package/dist/src/coin/cspr/undelegateBuilder.d.ts.map +0 -1
  444. package/dist/src/coin/cspr/undelegateBuilder.js +0 -175
  445. package/dist/src/coin/cspr/utils.d.ts +0 -189
  446. package/dist/src/coin/cspr/utils.d.ts.map +0 -1
  447. package/dist/src/coin/cspr/utils.js +0 -483
  448. package/dist/src/coin/cspr/walletInitializationBuilder.d.ts +0 -27
  449. package/dist/src/coin/cspr/walletInitializationBuilder.d.ts.map +0 -1
  450. package/dist/src/coin/cspr/walletInitializationBuilder.js +0 -160
  451. package/dist/src/coin/eth/contractCall.d.ts +0 -8
  452. package/dist/src/coin/eth/contractCall.d.ts.map +0 -1
  453. package/dist/src/coin/eth/contractCall.js +0 -18
  454. package/dist/src/coin/eth/iface.d.ts +0 -122
  455. package/dist/src/coin/eth/iface.d.ts.map +0 -1
  456. package/dist/src/coin/eth/iface.js +0 -8
  457. package/dist/src/coin/eth/index.d.ts +0 -10
  458. package/dist/src/coin/eth/index.d.ts.map +0 -1
  459. package/dist/src/coin/eth/index.js +0 -39
  460. package/dist/src/coin/eth/keyPair.d.ts +0 -27
  461. package/dist/src/coin/eth/keyPair.d.ts.map +0 -1
  462. package/dist/src/coin/eth/keyPair.js +0 -104
  463. package/dist/src/coin/eth/transaction.d.ts +0 -65
  464. package/dist/src/coin/eth/transaction.d.ts.map +0 -1
  465. package/dist/src/coin/eth/transaction.js +0 -203
  466. package/dist/src/coin/eth/transactionBuilder.d.ts +0 -195
  467. package/dist/src/coin/eth/transactionBuilder.d.ts.map +0 -1
  468. package/dist/src/coin/eth/transactionBuilder.js +0 -695
  469. package/dist/src/coin/eth/transferBuilder/baseNFTTransferBuilder.d.ts +0 -47
  470. package/dist/src/coin/eth/transferBuilder/baseNFTTransferBuilder.d.ts.map +0 -1
  471. package/dist/src/coin/eth/transferBuilder/baseNFTTransferBuilder.js +0 -114
  472. package/dist/src/coin/eth/transferBuilder/transferBuilderERC1155.d.ts +0 -14
  473. package/dist/src/coin/eth/transferBuilder/transferBuilderERC1155.d.ts.map +0 -1
  474. package/dist/src/coin/eth/transferBuilder/transferBuilderERC1155.js +0 -100
  475. package/dist/src/coin/eth/transferBuilder/transferBuilderERC721.d.ts +0 -13
  476. package/dist/src/coin/eth/transferBuilder/transferBuilderERC721.d.ts.map +0 -1
  477. package/dist/src/coin/eth/transferBuilder/transferBuilderERC721.js +0 -85
  478. package/dist/src/coin/eth/transferBuilder.d.ts +0 -65
  479. package/dist/src/coin/eth/transferBuilder.d.ts.map +0 -1
  480. package/dist/src/coin/eth/transferBuilder.js +0 -198
  481. package/dist/src/coin/eth/types.d.ts +0 -39
  482. package/dist/src/coin/eth/types.d.ts.map +0 -1
  483. package/dist/src/coin/eth/types.js +0 -139
  484. package/dist/src/coin/eth/utils.d.ts +0 -201
  485. package/dist/src/coin/eth/utils.d.ts.map +0 -1
  486. package/dist/src/coin/eth/utils.js +0 -533
  487. package/dist/src/coin/eth/walletUtil.d.ts +0 -19
  488. package/dist/src/coin/eth/walletUtil.d.ts.map +0 -1
  489. package/dist/src/coin/eth/walletUtil.js +0 -29
  490. package/dist/src/coin/hbar/ifaces.d.ts +0 -26
  491. package/dist/src/coin/hbar/ifaces.d.ts.map +0 -1
  492. package/dist/src/coin/hbar/ifaces.js +0 -3
  493. package/dist/src/coin/stx/abstractContractBuilder.d.ts +0 -19
  494. package/dist/src/coin/stx/abstractContractBuilder.d.ts.map +0 -1
  495. package/dist/src/coin/stx/abstractContractBuilder.js +0 -140
  496. package/dist/src/coin/stx/constants.d.ts +0 -8
  497. package/dist/src/coin/stx/constants.d.ts.map +0 -1
  498. package/dist/src/coin/stx/constants.js +0 -19
  499. package/dist/src/coin/stx/contractBuilder.d.ts +0 -33
  500. package/dist/src/coin/stx/contractBuilder.d.ts.map +0 -1
  501. package/dist/src/coin/stx/contractBuilder.js +0 -135
  502. package/dist/src/coin/stx/iface.d.ts +0 -48
  503. package/dist/src/coin/stx/iface.d.ts.map +0 -1
  504. package/dist/src/coin/stx/iface.js +0 -3
  505. package/dist/src/coin/stx/index.d.ts +0 -6
  506. package/dist/src/coin/stx/index.d.ts.map +0 -1
  507. package/dist/src/coin/stx/index.js +0 -32
  508. package/dist/src/coin/stx/keyPair.d.ts +0 -56
  509. package/dist/src/coin/stx/keyPair.d.ts.map +0 -1
  510. package/dist/src/coin/stx/keyPair.js +0 -163
  511. package/dist/src/coin/stx/sendmanyBuilder.d.ts +0 -23
  512. package/dist/src/coin/stx/sendmanyBuilder.d.ts.map +0 -1
  513. package/dist/src/coin/stx/sendmanyBuilder.js +0 -140
  514. package/dist/src/coin/stx/transaction.d.ts +0 -50
  515. package/dist/src/coin/stx/transaction.d.ts.map +0 -1
  516. package/dist/src/coin/stx/transaction.js +0 -306
  517. package/dist/src/coin/stx/transactionBuilder.d.ts +0 -87
  518. package/dist/src/coin/stx/transactionBuilder.d.ts.map +0 -1
  519. package/dist/src/coin/stx/transactionBuilder.js +0 -360
  520. package/dist/src/coin/stx/transactionBuilderFactory.d.ts +0 -30
  521. package/dist/src/coin/stx/transactionBuilderFactory.d.ts.map +0 -1
  522. package/dist/src/coin/stx/transactionBuilderFactory.js +0 -99
  523. package/dist/src/coin/stx/transferBuilder.d.ts +0 -30
  524. package/dist/src/coin/stx/transferBuilder.d.ts.map +0 -1
  525. package/dist/src/coin/stx/transferBuilder.js +0 -169
  526. package/dist/src/coin/stx/utils.d.ts +0 -207
  527. package/dist/src/coin/stx/utils.d.ts.map +0 -1
  528. package/dist/src/coin/stx/utils.js +0 -510
  529. package/dist/src/coin/xtz/address.d.ts +0 -8
  530. package/dist/src/coin/xtz/address.d.ts.map +0 -1
  531. package/dist/src/coin/xtz/address.js +0 -13
  532. package/dist/src/coin/xtz/iface.d.ts +0 -81
  533. package/dist/src/coin/xtz/iface.d.ts.map +0 -1
  534. package/dist/src/coin/xtz/iface.js +0 -3
  535. package/dist/src/coin/xtz/index.d.ts +0 -8
  536. package/dist/src/coin/xtz/index.d.ts.map +0 -1
  537. package/dist/src/coin/xtz/index.js +0 -37
  538. package/dist/src/coin/xtz/keyPair.d.ts +0 -41
  539. package/dist/src/coin/xtz/keyPair.d.ts.map +0 -1
  540. package/dist/src/coin/xtz/keyPair.js +0 -156
  541. package/dist/src/coin/xtz/multisigUtils.d.ts +0 -134
  542. package/dist/src/coin/xtz/multisigUtils.d.ts.map +0 -1
  543. package/dist/src/coin/xtz/multisigUtils.js +0 -1193
  544. package/dist/src/coin/xtz/transaction.d.ts +0 -120
  545. package/dist/src/coin/xtz/transaction.d.ts.map +0 -1
  546. package/dist/src/coin/xtz/transaction.js +0 -485
  547. package/dist/src/coin/xtz/transactionBuilder.d.ts +0 -172
  548. package/dist/src/coin/xtz/transactionBuilder.d.ts.map +0 -1
  549. package/dist/src/coin/xtz/transactionBuilder.js +0 -588
  550. package/dist/src/coin/xtz/transferBuilder.d.ts +0 -24
  551. package/dist/src/coin/xtz/transferBuilder.d.ts.map +0 -1
  552. package/dist/src/coin/xtz/transferBuilder.js +0 -67
  553. package/dist/src/coin/xtz/utils.d.ts +0 -265
  554. package/dist/src/coin/xtz/utils.d.ts.map +0 -1
  555. package/dist/src/coin/xtz/utils.js +0 -531
  556. package/dist/src/mpc/curves/baseCurve.d.ts +0 -18
  557. package/dist/src/mpc/curves/baseCurve.d.ts.map +0 -1
  558. package/dist/src/mpc/curves/baseCurve.js +0 -6
  559. package/dist/src/mpc/curves/ed25519.d.ts +0 -17
  560. package/dist/src/mpc/curves/ed25519.d.ts.map +0 -1
  561. package/dist/src/mpc/curves/ed25519.js +0 -96
  562. package/dist/src/mpc/curves/index.d.ts +0 -5
  563. package/dist/src/mpc/curves/index.d.ts.map +0 -1
  564. package/dist/src/mpc/curves/index.js +0 -6
  565. package/dist/src/mpc/hdTree.d.ts +0 -24
  566. package/dist/src/mpc/hdTree.d.ts.map +0 -1
  567. package/dist/src/mpc/hdTree.js +0 -143
  568. package/dist/src/mpc/shamir.d.ts +0 -26
  569. package/dist/src/mpc/shamir.d.ts.map +0 -1
  570. package/dist/src/mpc/shamir.js +0 -87
  571. package/dist/src/mpc/tss.d.ts +0 -98
  572. package/dist/src/mpc/tss.d.ts.map +0 -1
  573. package/dist/src/mpc/tss.js +0 -346
  574. package/dist/src/mpc/util.d.ts +0 -7
  575. package/dist/src/mpc/util.d.ts.map +0 -1
  576. package/dist/src/mpc/util.js +0 -38
  577. package/dist/src/utils/crypto.d.ts +0 -99
  578. package/dist/src/utils/crypto.d.ts.map +0 -1
  579. package/dist/src/utils/crypto.js +0 -260
  580. package/dist/src/utils/ed25519KeyDeriver.d.ts +0 -49
  581. package/dist/src/utils/ed25519KeyDeriver.d.ts.map +0 -1
  582. package/dist/src/utils/ed25519KeyDeriver.js +0 -92
  583. package/resources/hbar/protobuf/BasicTypes.proto +0 -424
  584. package/resources/hbar/protobuf/CryptoCreate.proto +0 -47
  585. package/resources/hbar/protobuf/CryptoTransfer.proto +0 -33
  586. package/resources/hbar/protobuf/Duration.proto +0 -28
  587. package/resources/hbar/protobuf/Timestamp.proto +0 -34
  588. package/resources/hbar/protobuf/Transaction.proto +0 -35
  589. package/resources/hbar/protobuf/TransactionBody.proto +0 -24
  590. package/resources/hbar/protobuf/TransactionContents.proto +0 -33
  591. package/resources/hbar/protobuf/hedera.d.ts +0 -4612
  592. package/resources/hbar/protobuf/hedera.js +0 -12192
@@ -1,19 +1,4 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
3
  if (k2 === undefined) k2 = k;
19
4
  Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
@@ -33,105 +18,83 @@ var __importStar = (this && this.__importStar) || function (mod) {
33
18
  __setModuleDefault(result, mod);
34
19
  return result;
35
20
  };
36
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
- return new (P || (P = Promise))(function (resolve, reject) {
39
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
- step((generator = generator.apply(thisArg, _arguments || [])).next());
43
- });
44
- };
45
- var __generator = (this && this.__generator) || function (thisArg, body) {
46
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
- function verb(n) { return function (v) { return step([n, v]); }; }
49
- function step(op) {
50
- if (f) throw new TypeError("Generator is already executing.");
51
- while (_) try {
52
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
- if (y = 0, t) op = [op[0] & 2, t.value];
54
- switch (op[0]) {
55
- case 0: case 1: t = op; break;
56
- case 4: _.label++; return { value: op[1], done: false };
57
- case 5: _.label++; y = op[1]; op = [0]; continue;
58
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
- default:
60
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
- if (t[2]) _.ops.pop();
65
- _.trys.pop(); continue;
66
- }
67
- op = body.call(thisArg, _);
68
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
- }
71
- };
72
21
  var __importDefault = (this && this.__importDefault) || function (mod) {
73
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
74
23
  };
75
24
  Object.defineProperty(exports, "__esModule", { value: true });
76
25
  exports.Transaction = void 0;
77
- var sha384_1 = require("@stablelib/sha384");
78
- var bignumber_js_1 = __importDefault(require("bignumber.js"));
79
- var nacl = __importStar(require("tweetnacl"));
80
- var Long = __importStar(require("long"));
81
- var hedera_1 = require("../../../resources/hbar/protobuf/hedera");
82
- var baseCoin_1 = require("../baseCoin");
83
- var errors_1 = require("../baseCoin/errors");
84
- var utils_1 = require("./utils");
85
- var Transaction = /** @class */ (function (_super) {
86
- __extends(Transaction, _super);
87
- function Transaction(_coinConfig) {
88
- return _super.call(this, _coinConfig) || this;
26
+ const sdk_core_1 = require("@bitgo/sdk-core");
27
+ const sha384_1 = require("@stablelib/sha384");
28
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
29
+ const nacl = __importStar(require("tweetnacl"));
30
+ const Long = __importStar(require("long"));
31
+ const proto = __importStar(require("@hashgraph/proto"));
32
+ const utils_1 = require("./utils");
33
+ const constants_1 = require("./constants");
34
+ class Transaction extends sdk_core_1.BaseTransaction {
35
+ constructor(_coinConfig) {
36
+ super(_coinConfig);
89
37
  }
90
38
  /** @inheritdoc */
91
- Transaction.prototype.canSign = function (key) {
39
+ canSign(key) {
92
40
  return true;
93
- };
94
- Transaction.prototype.sign = function (keyPair) {
95
- return __awaiter(this, void 0, void 0, function () {
96
- var keys, secretKey, signature;
97
- return __generator(this, function (_a) {
98
- keys = keyPair.getKeys(true);
99
- if (!keys.prv) {
100
- throw new errors_1.SigningError('Missing private key');
101
- }
102
- secretKey = utils_1.toUint8Array(keys.prv + keys.pub);
103
- signature = nacl.sign.detached(this._hederaTx.bodyBytes, secretKey);
104
- this.addSignature(utils_1.toHex(signature), keyPair);
105
- return [2 /*return*/];
106
- });
107
- });
108
- };
41
+ }
42
+ async sign(keyPair) {
43
+ const keys = keyPair.getKeys(true);
44
+ if (!keys.prv) {
45
+ throw new sdk_core_1.SigningError('Missing private key');
46
+ }
47
+ const secretKey = sdk_core_1.toUint8Array(keys.prv + keys.pub);
48
+ const signature = nacl.sign.detached(this._hederaTx.bodyBytes, secretKey);
49
+ this.addSignature(sdk_core_1.toHex(signature), keyPair);
50
+ }
109
51
  /**
110
52
  * Add a signature to this transaction
111
53
  *
112
- * @param {string} signature The signature to add, in string hex format
113
- * @param {KeyPair} key The key of the key that created the signature
54
+ * @param {string} signature - The signature to add, in string hex format
55
+ * @param {KeyPair} key - The key of the key that created the signature
114
56
  */
115
- Transaction.prototype.addSignature = function (signature, key) {
116
- var sigPair = new hedera_1.proto.SignaturePair();
117
- sigPair.pubKeyPrefix = utils_1.toUint8Array(key.getKeys(true).pub);
118
- sigPair.ed25519 = utils_1.toUint8Array(signature);
119
- var sigMap = this._hederaTx.sigMap || new hedera_1.proto.SignatureMap();
57
+ addSignature(signature, key) {
58
+ const sigPair = new proto.SignaturePair();
59
+ sigPair.pubKeyPrefix = sdk_core_1.toUint8Array(key.getKeys(true).pub);
60
+ sigPair.ed25519 = sdk_core_1.toUint8Array(signature);
61
+ const sigMap = this._hederaTx.sigMap || new proto.SignatureMap();
120
62
  sigMap.sigPair.push(sigPair);
121
63
  this._hederaTx.sigMap = sigMap;
122
64
  this._signatures.push(signature);
123
- };
65
+ }
124
66
  /** @inheritdoc */
125
- Transaction.prototype.toBroadcastFormat = function () {
126
- return utils_1.toHex(this.encode(this._hederaTx));
127
- };
67
+ toBroadcastFormat() {
68
+ const encoder = proto.Transaction;
69
+ return sdk_core_1.toHex(this.encode(this._hederaTx, encoder));
70
+ }
71
+ /**
72
+ * Sets this transaction payload
73
+ *
74
+ * @param rawTransaction
75
+ */
76
+ fromRawTransaction(rawTransaction) {
77
+ const buffer = typeof rawTransaction === 'string' ? sdk_core_1.toUint8Array(rawTransaction) : rawTransaction;
78
+ this.bodyBytes(buffer);
79
+ switch (this.txBody.data) {
80
+ case constants_1.HederaTransactionTypes.Transfer:
81
+ this.setTransactionType(sdk_core_1.TransactionType.Send);
82
+ break;
83
+ case constants_1.HederaTransactionTypes.CreateAccount:
84
+ this.setTransactionType(sdk_core_1.TransactionType.WalletInitialization);
85
+ break;
86
+ case constants_1.HederaTransactionTypes.TokenAssociateToAccount:
87
+ this.setTransactionType(sdk_core_1.TransactionType.AssociatedTokenAccountInitialization);
88
+ break;
89
+ }
90
+ }
128
91
  /** @inheritdoc */
129
- Transaction.prototype.toJson = function () {
130
- var _a = this.getTxIdParts(), acc = _a[0], time = _a[1];
131
- var result = {
92
+ toJson() {
93
+ const [acc, time] = this.getTxIdParts();
94
+ const result = {
132
95
  id: acc + '@' + time,
133
96
  hash: this.getTxHash(),
134
- data: utils_1.toHex(this._hederaTx.bodyBytes),
97
+ data: sdk_core_1.toHex(this._hederaTx.bodyBytes),
135
98
  fee: new bignumber_js_1.default(this._txBody.transactionFee.toString()).toNumber(),
136
99
  from: acc,
137
100
  startTime: time,
@@ -139,119 +102,172 @@ var Transaction = /** @class */ (function (_super) {
139
102
  node: utils_1.stringifyAccountId(this._txBody.nodeAccountID),
140
103
  memo: this._txBody.memo,
141
104
  };
142
- if (this._txBody.data === 'cryptoTransfer') {
143
- var _b = this.getTransferData(), recipient = _b[0], amount = _b[1];
144
- result.amount = amount;
145
- result.to = recipient;
105
+ switch (this._txBody.data) {
106
+ case constants_1.HederaTransactionTypes.Transfer:
107
+ const transferData = this.getTransferData();
108
+ result.instructionsData = {
109
+ type: constants_1.HederaTransactionTypes.Transfer,
110
+ params: transferData,
111
+ };
112
+ result.to = result.instructionsData.params.recipients[0].address;
113
+ result.amount = result.instructionsData.params.recipients[0].amount;
114
+ break;
115
+ case constants_1.HederaTransactionTypes.TokenAssociateToAccount:
116
+ result.instructionsData = {
117
+ type: constants_1.HederaTransactionTypes.TokenAssociateToAccount,
118
+ params: this.getAccountAssociateData(),
119
+ };
120
+ break;
146
121
  }
147
122
  return result;
148
- };
123
+ }
149
124
  /**
150
125
  * Get the recipient account and the amount
151
126
  * transferred on this transaction
152
127
  *
153
- * @returns {[string, string]} first element is the recipient, second element is the amount
128
+ * @returns { tokenName, Recipient[]} is object consisting of tokenName if it's a token transfer and recipients consisting
129
+ * the recipient address, the transfer amount, and the token name for token transfer
154
130
  */
155
- Transaction.prototype.getTransferData = function () {
156
- var transferData;
157
- this._txBody.cryptoTransfer.transfers.accountAmounts.forEach(function (transfer) {
158
- var amount = Long.fromValue(transfer.amount);
159
- if (amount.isPositive()) {
160
- transferData = [utils_1.stringifyAccountId(transfer.accountID), amount.toString()];
131
+ getTransferData() {
132
+ var _a, _b, _c, _d, _e;
133
+ const [acc] = this.getTxIdParts();
134
+ const transferData = [];
135
+ const tokenTransfers = ((_a = this._txBody.cryptoTransfer) === null || _a === void 0 ? void 0 : _a.tokenTransfers) || [];
136
+ const transfers = ((_b = tokenTransfers[0]) === null || _b === void 0 ? void 0 : _b.transfers) || ((_d = (_c = this._txBody.cryptoTransfer) === null || _c === void 0 ? void 0 : _c.transfers) === null || _d === void 0 ? void 0 : _d.accountAmounts) || [];
137
+ const tokenName = tokenTransfers.length
138
+ ? (_e = utils_1.getHederaTokenNameFromId(utils_1.stringifyTokenId(tokenTransfers[0].token))) === null || _e === void 0 ? void 0 : _e.name
139
+ : undefined;
140
+ transfers.forEach((transfer) => {
141
+ const amount = Long.fromValue(transfer.amount);
142
+ if (amount.isPositive() && utils_1.stringifyAccountId(transfer.accountID) !== acc) {
143
+ transferData.push({
144
+ address: utils_1.stringifyAccountId(transfer.accountID),
145
+ amount: amount.toString(),
146
+ ...(tokenTransfers.length && {
147
+ tokenName: tokenName,
148
+ }),
149
+ });
161
150
  }
162
151
  });
163
- return transferData;
164
- };
165
- Object.defineProperty(Transaction.prototype, "txBody", {
166
- // region getters & setters
167
- get: function () {
168
- return this._txBody;
169
- },
170
- enumerable: false,
171
- configurable: true
172
- });
173
- Object.defineProperty(Transaction.prototype, "hederaTx", {
174
- get: function () {
175
- return this._hederaTx;
176
- },
177
- enumerable: false,
178
- configurable: true
179
- });
152
+ return {
153
+ ...(tokenTransfers.length && {
154
+ tokenName: tokenName,
155
+ }),
156
+ recipients: transferData,
157
+ };
158
+ }
159
+ /**
160
+ * Get the recipient account and the amount
161
+ * transferred on this transaction
162
+ *
163
+ * @returns { accountId: string; tokenNames[]} is an object consisting of accountId for the token owner
164
+ * and list of tokenNames that will be enabled
165
+ */
166
+ getAccountAssociateData() {
167
+ const tokens = this._txBody.tokenAssociate.tokens || [];
168
+ return {
169
+ accountId: utils_1.stringifyAccountId(this._txBody.tokenAssociate.account),
170
+ tokenNames: tokens.map((token) => utils_1.getHederaTokenNameFromId(utils_1.stringifyTokenId(token)).name),
171
+ };
172
+ }
173
+ // region getters & setters
174
+ get txBody() {
175
+ return this._txBody;
176
+ }
177
+ get hederaTx() {
178
+ return this._hederaTx;
179
+ }
180
180
  /**
181
181
  * Sets this transaction body components
182
182
  *
183
- * @param {proto.Transaction} tx body transaction
183
+ * @param {proto.Transaction} tx - Body Transaction
184
184
  */
185
- Transaction.prototype.body = function (tx) {
186
- this._txBody = hedera_1.proto.TransactionBody.decode(tx.bodyBytes);
185
+ body(tx) {
186
+ this._txBody = proto.TransactionBody.decode(tx.bodyBytes);
187
187
  this._hederaTx = tx;
188
- // this.loadPreviousSignatures();
189
188
  this.loadInputsAndOutputs();
190
- };
189
+ }
191
190
  /**
192
191
  * Set the transaction type
193
192
  *
194
- * @param {TransactionType} transactionType The transaction type to be set
193
+ * @param {TransactionType} transactionType - The transaction type to be set
195
194
  */
196
- Transaction.prototype.setTransactionType = function (transactionType) {
195
+ setTransactionType(transactionType) {
197
196
  this._type = transactionType;
198
- };
197
+ }
199
198
  /**
200
199
  * Decode previous signatures from the inner hedera transaction
201
200
  * and save them into the base transaction signature list.
202
201
  */
203
- Transaction.prototype.loadPreviousSignatures = function () {
204
- var _this = this;
202
+ loadPreviousSignatures() {
205
203
  if (this._hederaTx.sigMap && this._hederaTx.sigMap.sigPair) {
206
- var sigPairs = this._hederaTx.sigMap.sigPair;
207
- sigPairs.forEach(function (sigPair) {
208
- var signature = sigPair.ed25519;
204
+ const sigPairs = this._hederaTx.sigMap.sigPair;
205
+ sigPairs.forEach((sigPair) => {
206
+ const signature = sigPair.ed25519;
209
207
  if (signature) {
210
- _this._signatures.push(utils_1.toHex(signature));
208
+ this._signatures.push(sdk_core_1.toHex(signature));
211
209
  }
212
210
  });
213
211
  }
214
- };
212
+ }
215
213
  /**
216
214
  * Load the input and output data on this transaction using the transaction json
217
215
  * if there are outputs. For transactions without outputs (e.g. wallet initializations),
218
216
  * this function will not do anything
219
217
  */
220
- Transaction.prototype.loadInputsAndOutputs = function () {
221
- var txJson = this.toJson();
222
- if (txJson.to && txJson.amount) {
223
- this._outputs = [
224
- {
225
- address: txJson.to,
226
- value: txJson.amount,
227
- coin: this._coinConfig.name,
228
- },
229
- ];
230
- this._inputs = [
231
- {
218
+ loadInputsAndOutputs() {
219
+ const txJson = this.toJson();
220
+ const instruction = txJson.instructionsData;
221
+ const outputs = [];
222
+ const inputs = [];
223
+ switch (instruction === null || instruction === void 0 ? void 0 : instruction.type) {
224
+ case constants_1.HederaTransactionTypes.Transfer:
225
+ let totalAmount = new bignumber_js_1.default(0);
226
+ instruction.params.recipients.forEach((recipient) => {
227
+ totalAmount = totalAmount.plus(recipient.amount);
228
+ outputs.push({
229
+ address: recipient.address,
230
+ value: recipient.amount,
231
+ coin: recipient.tokenName || this._coinConfig.name,
232
+ });
233
+ });
234
+ inputs.push({
232
235
  address: txJson.from,
233
- value: txJson.amount,
234
- coin: this._coinConfig.name,
235
- },
236
- ];
236
+ value: totalAmount.toString(),
237
+ coin: instruction.params.tokenName || this._coinConfig.name,
238
+ });
239
+ break;
240
+ case constants_1.HederaTransactionTypes.TokenAssociateToAccount:
241
+ instruction.params.tokenNames.forEach((tokenName) => {
242
+ const tokenEntry = {
243
+ address: instruction.params.accountId,
244
+ value: '0',
245
+ coin: tokenName,
246
+ };
247
+ inputs.push(tokenEntry);
248
+ outputs.push(tokenEntry);
249
+ });
250
+ break;
237
251
  }
238
- };
252
+ this._inputs = inputs;
253
+ this._outputs = outputs;
254
+ }
239
255
  /**
240
256
  * Sets this transaction body components
241
257
  *
242
- * @param {Uint8Array} bytes encoded body transaction
258
+ * @param {Uint8Array} bytes - Encoded body transaction
243
259
  */
244
- Transaction.prototype.bodyBytes = function (bytes) {
245
- this.body(hedera_1.proto.Transaction.decode(bytes));
246
- };
260
+ bodyBytes(bytes) {
261
+ this.body(proto.Transaction.decode(bytes));
262
+ }
247
263
  // endregion
248
264
  // region helpers
249
265
  /**
250
266
  * Returns this hedera transaction id components in a readable format
251
267
  *
252
- * @returns {[string, string]} - transaction id parts [<account id>, <startTime in seconds>]
268
+ * @returns {[string, string]} - Transaction id parts [<account id>, <startTime in seconds>]
253
269
  */
254
- Transaction.prototype.getTxIdParts = function () {
270
+ getTxIdParts() {
255
271
  if (this._txBody &&
256
272
  this._txBody.transactionID &&
257
273
  this._txBody.transactionID.accountID &&
@@ -262,53 +278,41 @@ var Transaction = /** @class */ (function (_super) {
262
278
  ];
263
279
  }
264
280
  throw new Error('Missing transaction id information');
265
- };
281
+ }
266
282
  /**
267
283
  * Returns this transaction hash
268
284
  *
269
285
  * @returns {string} - The transaction hash
270
286
  */
271
- Transaction.prototype.getTxHash = function () {
287
+ getTxHash() {
272
288
  if (!this._txBody.nodeAccountID) {
273
289
  throw new Error('Missing transaction node id');
274
290
  }
275
- var _signedTx = new hedera_1.proto.SignedTransaction();
291
+ const _signedTx = new proto.SignedTransaction();
276
292
  _signedTx.sigMap = this._hederaTx.sigMap;
277
293
  _signedTx.bodyBytes = this._hederaTx.bodyBytes;
278
- return this.getHashOf(_signedTx);
279
- };
294
+ const encoder = proto.SignedTransaction;
295
+ return this.sha(this.encode(_signedTx, encoder));
296
+ }
280
297
  /**
281
298
  * Encode an object using the given encoder class
282
299
  *
283
- * @param {proto} obj - the object to be encoded, it must be an proto namespace object
300
+ * @param {proto} obj - The object to be encoded, must be in proto namespace
284
301
  * @param encoder - Object encoder
285
- * @returns {Uint8Array} - encoded object byte array
302
+ * @returns {Uint8Array} - Encoded object byte array
286
303
  */
287
- Transaction.prototype.encode = function (obj, encoder) {
288
- if (encoder) {
289
- return encoder.encode(obj).finish();
290
- }
291
- return this.encode(obj, hedera_1.proto[obj.constructor.name]);
292
- };
293
- /**
294
- * Returns an sha-384 hash
295
- *
296
- * @param {Uint8Array} bytes - bytes to be hashed
297
- * @returns {string} - the resulting hash string
298
- */
299
- Transaction.prototype.sha = function (bytes) {
300
- return utils_1.toHex(sha384_1.hash(bytes));
301
- };
304
+ encode(obj, encoder) {
305
+ return encoder.encode(obj).finish();
306
+ }
302
307
  /**
303
- * Returns a hash of the given proto object.
308
+ * Returns a sha-384 hash
304
309
  *
305
- * @param {proto} obj - The object to be hashed, it must be an proto namespace object
306
- * @returns {string} - the resulting hash string
310
+ * @param {Uint8Array} bytes - Bytes to be hashed
311
+ * @returns {string} - The resulting hash string
307
312
  */
308
- Transaction.prototype.getHashOf = function (obj) {
309
- return this.sha(this.encode(obj));
310
- };
311
- return Transaction;
312
- }(baseCoin_1.BaseTransaction));
313
+ sha(bytes) {
314
+ return sdk_core_1.toHex(sha384_1.hash(bytes));
315
+ }
316
+ }
313
317
  exports.Transaction = Transaction;
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29pbi9oYmFyL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSw0Q0FBeUM7QUFDekMsOERBQXFDO0FBRXJDLDhDQUFrQztBQUNsQyx5Q0FBNkI7QUFDN0Isa0VBQWdFO0FBQ2hFLHdDQUErRDtBQUUvRCw2Q0FBa0Q7QUFFbEQsaUNBQW1GO0FBR25GO0lBQWlDLCtCQUFlO0lBSzlDLHFCQUFZLFdBQWlDO2VBQzNDLGtCQUFNLFdBQVcsQ0FBQztJQUNwQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDZCQUFPLEdBQVAsVUFBUSxHQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVLLDBCQUFJLEdBQVYsVUFBVyxPQUFnQjs7OztnQkFDbkIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUNiLE1BQU0sSUFBSSxxQkFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7aUJBQy9DO2dCQUNLLFNBQVMsR0FBRyxvQkFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7O0tBQzlDO0lBRUQ7Ozs7O09BS0c7SUFDSCxrQ0FBWSxHQUFaLFVBQWEsU0FBaUIs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QU8sQ0FBQyxhQUFhLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNoRCxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyw0QkFBTSxHQUFkLFVBQ0UsR0FBTSxFQUNOLE9BQW9DO1FBRXBDLElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxjQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlCQUFHLEdBQUgsVUFBSSxLQUFpQjtRQUNuQixPQUFPLGFBQUssQ0FBQyxhQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSywrQkFBUyxHQUFqQixVQUFxQixHQUFNO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVILGtCQUFDO0FBQUQsQ0FBQyxBQWxQRCxDQUFpQywwQkFBZSxHQWtQL0M7QUFsUFksa0NBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgaGFzaCB9IGZyb20gJ0BzdGFibGVsaWIvc2hhMzg0JztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IFdyaXRlciB9IGZyb20gJ3Byb3RvYnVmanMnO1xuaW1wb3J0ICogYXMgbmFjbCBmcm9tICd0d2VldG5hY2wnO1xuaW1wb3J0ICogYXMgTG9uZyBmcm9tICdsb25nJztcbmltcG9ydCB7IHByb3RvIH0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2hiYXIvcHJvdG9idWYvaGVkZXJhJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQmFzZUtleSB9IGZyb20gJy4uL2Jhc2VDb2luL2lmYWNlJztcbmltcG9ydCB7IFNpZ25pbmdFcnJvciB9IGZyb20gJy4uL2Jhc2VDb2luL2Vycm9ycyc7XG5pbXBvcnQgeyBUeERhdGEgfSBmcm9tICcuL2lmYWNlcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnlBY2NvdW50SWQsIHN0cmluZ2lmeVR4VGltZSwgdG9IZXgsIHRvVWludDhBcnJheSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4vJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfaGVkZXJhVHg6IHByb3RvLlRyYW5zYWN0aW9uO1xuICBwcml2YXRlIF90eEJvZHk6IHByb3RvLlRyYW5zYWN0aW9uQm9keTtcbiAgcHJvdGVjdGVkIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBzaWduKGtleVBhaXI6IEtleVBhaXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKHRydWUpO1xuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjcmV0S2V5ID0gdG9VaW50OEFycmF5KGtleXMucHJ2ICsga2V5cy5wdWIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IG5hY2wuc2lnbi5kZXRhY2hlZCh0aGlzLl9oZWRlcmFUeC5ib2R5Qnl0ZXMsIHNlY3JldEtleSk7XG4gICAgdGhpcy5hZGRTaWduYXR1cmUodG9IZXgoc2lnbmF0dXJlKSwga2V5UGFpcik7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2lnbmF0dXJlIHRvIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSBUaGUgc2lnbmF0dXJlIHRvIGFkZCwgaW4gc3RyaW5nIGhleCBmb3JtYXRcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXkgVGhlIGtleSBvZiB0aGUga2V5IHRoYXQgY3JlYXRlZCB0aGUgc2lnbmF0dXJlXG4gICAqL1xuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcsIGtleTogS2V5UGFpcik6IHZvaWQge1xuICAgIGNvbnN0IHNpZ1BhaXIgPSBuZXcgcHJvdG8uU2lnbmF0dXJlUGFpcigpO1xuICAgIHNpZ1BhaXIucHViS2V5UHJlZml4ID0gdG9VaW50OEFycmF5KGtleS5nZXRLZXlzKHRydWUpLnB1Yik7XG4gICAgc2lnUGFpci5lZDI1NTE5ID0gdG9VaW50OEFycmF5KHNpZ25hdHVyZSk7XG5cbiAgICBjb25zdCBzaWdNYXAgPSB0aGlzLl9oZWRlcmFUeC5zaWdNYXAgfHwgbmV3IHByb3RvLlNpZ25hdHVyZU1hcCgpO1xuICAgIHNpZ01hcC5zaWdQYWlyIS5wdXNoKHNpZ1BhaXIpO1xuICAgIHRoaXMuX2hlZGVyYVR4LnNpZ01hcCA9IHNpZ01hcDtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b0hleCh0aGlzLmVuY29kZSh0aGlzLl9oZWRlcmFUeCkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGNvbnN0IFthY2MsIHRpbWVdID0gdGhpcy5nZXRUeElkUGFydHMoKTtcbiAgICBjb25zdCByZXN1bHQ6IFR4RGF0YSA9IHtcbiAgICAgIGlkOiBhY2MgKyAnQCcgKyB0aW1lLFxuICAgICAgaGFzaDogdGhpcy5nZXRUeEhhc2goKSwgLy8gVE9ETzogVXBkYXRlIG9uY2UgaGVkZXJhLXNkayByZWxlYXNlIHRoaXMgZnVuY3Rpb25hbGl0eSBCR0EtMjg0XG4gICAgICBkYXRhOiB0b0hleCh0aGlzLl9oZWRlcmFUeC5ib2R5Qnl0ZXMpLFxuICAgICAgZmVlOiBuZXcgQmlnTnVtYmVyKHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbkZlZSEudG9TdHJpbmcoKSkudG9OdW1iZXIoKSxcbiAgICAgIGZyb206IGFjYyxcbiAgICAgIHN0YXJ0VGltZTogdGltZSxcbiAgICAgIHZhbGlkRHVyYXRpb246IHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvblZhbGlkRHVyYXRpb24hLnNlY29uZHMhLnRvU3RyaW5nKCksXG4gICAgICBub2RlOiBzdHJpbmdpZnlBY2NvdW50SWQodGhpcy5fdHhCb2R5Lm5vZGVBY2NvdW50SUQhKSxcbiAgICAgIG1lbW86IHRoaXMuX3R4Qm9keS5tZW1vLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fdHhCb2R5LmRhdGEgPT09ICdjcnlwdG9UcmFuc2ZlcicpIHtcbiAgICAgIGNvbnN0IFtyZWNpcGllbnQsIGFtb3VudF0gPSB0aGlzLmdldFRyYW5zZmVyRGF0YSgpO1xuICAgICAgcmVzdWx0LmFtb3VudCA9IGFtb3VudDtcbiAgICAgIHJlc3VsdC50byA9IHJlY2lwaWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlY2lwaWVudCBhY2NvdW50IGFuZCB0aGUgYW1vdW50XG4gICAqIHRyYW5zZmVycmVkIG9uIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHJldHVybnMge1tzdHJpbmcsIHN0cmluZ119IGZpcnN0IGVsZW1lbnQgaXMgdGhlIHJlY2lwaWVudCwgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIGFtb3VudFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUcmFuc2ZlckRhdGEoKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgbGV0IHRyYW5zZmVyRGF0YTtcbiAgICB0aGlzLl90eEJvZHkuY3J5cHRvVHJhbnNmZXIhLnRyYW5zZmVycyEuYWNjb3VudEFtb3VudHMhLmZvckVhY2goKHRyYW5zZmVyKSA9PiB7XG4gICAgICBjb25zdCBhbW91bnQgPSBMb25nLmZyb21WYWx1ZSh0cmFuc2Zlci5hbW91bnQhKTtcbiAgICAgIGlmIChhbW91bnQuaXNQb3NpdGl2ZSgpKSB7XG4gICAgICAgIHRyYW5zZmVyRGF0YSA9IFtzdHJpbmdpZnlBY2NvdW50SWQodHJhbnNmZXIuYWNjb3VudElEISksIGFtb3VudC50b1N0cmluZygpXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0cmFuc2ZlckRhdGE7XG4gIH1cblxuICAvLyByZWdpb24gZ2V0dGVycyAmIHNldHRlcnNcbiAgZ2V0IHR4Qm9keSgpOiBwcm90by5UcmFuc2FjdGlvbkJvZHkge1xuICAgIHJldHVybiB0aGlzLl90eEJvZHk7XG4gIH1cblxuICBnZXQgaGVkZXJhVHgoKTogcHJvdG8uVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9oZWRlcmFUeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gYm9keSBjb21wb25lbnRzXG4gICAqXG4gICAqIEBwYXJhbSB7cHJvdG8uVHJhbnNhY3Rpb259IHR4IGJvZHkgdHJhbnNhY3Rpb25cbiAgICovXG4gIGJvZHkodHg6IHByb3RvLlRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHhCb2R5ID0gcHJvdG8uVHJhbnNhY3Rpb25Cb2R5LmRlY29kZSh0eC5ib2R5Qnl0ZXMpO1xuICAgIHRoaXMuX2hlZGVyYVR4ID0gdHg7XG4gICAgLy8gdGhpcy5sb2FkUHJldmlvdXNTaWduYXR1cmVzKCk7XG4gICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldFxuICAgKi9cbiAgc2V0VHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGUgcHJldmlvdXMgc2lnbmF0dXJlcyBmcm9tIHRoZSBpbm5lciBoZWRlcmEgdHJhbnNhY3Rpb25cbiAgICogYW5kIHNhdmUgdGhlbSBpbnRvIHRoZSBiYXNlIHRyYW5zYWN0aW9uIHNpZ25hdHVyZSBsaXN0LlxuICAgKi9cbiAgbG9hZFByZXZpb3VzU2lnbmF0dXJlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faGVkZXJhVHguc2lnTWFwICYmIHRoaXMuX2hlZGVyYVR4LnNpZ01hcC5zaWdQYWlyKSB7XG4gICAgICBjb25zdCBzaWdQYWlycyA9IHRoaXMuX2hlZGVyYVR4LnNpZ01hcC5zaWdQYWlyO1xuICAgICAgc2lnUGFpcnMuZm9yRWFjaCgoc2lnUGFpcikgPT4ge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBzaWdQYWlyLmVkMjU1MTk7XG4gICAgICAgIGlmIChzaWduYXR1cmUpIHtcbiAgICAgICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2godG9IZXgoc2lnbmF0dXJlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgb24gdGhpcyB0cmFuc2FjdGlvbiB1c2luZyB0aGUgdHJhbnNhY3Rpb24ganNvblxuICAgKiBpZiB0aGVyZSBhcmUgb3V0cHV0cy4gRm9yIHRyYW5zYWN0aW9ucyB3aXRob3V0IG91dHB1dHMgKGUuZy4gd2FsbGV0IGluaXRpYWxpemF0aW9ucyksXG4gICAqIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZG8gYW55dGhpbmdcbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHR4SnNvbiA9IHRoaXMudG9Kc29uKCk7XG4gICAgaWYgKHR4SnNvbi50byAmJiB0eEpzb24uYW1vdW50KSB7XG4gICAgICB0aGlzLl9vdXRwdXRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogdHhKc29uLnRvLFxuICAgICAgICAgIHZhbHVlOiB0eEpzb24uYW1vdW50LFxuICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIHRoaXMuX2lucHV0cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHR4SnNvbi5mcm9tLFxuICAgICAgICAgIHZhbHVlOiB0eEpzb24uYW1vdW50LFxuICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBib2R5IGNvbXBvbmVudHNcbiAgICpcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyBlbmNvZGVkIGJvZHkgdHJhbnNhY3Rpb25cbiAgICovXG4gIGJvZHlCeXRlcyhieXRlczogVWludDhBcnJheSkge1xuICAgIHRoaXMuYm9keShwcm90by5UcmFuc2FjdGlvbi5kZWNvZGUoYnl0ZXMpKTtcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gaGVscGVyc1xuICAvKipcbiAgICogUmV0dXJucyB0aGlzIGhlZGVyYSB0cmFuc2FjdGlvbiBpZCBjb21wb25lbnRzIGluIGEgcmVhZGFibGUgZm9ybWF0XG4gICAqXG4gICAqIEByZXR1cm5zIHtbc3RyaW5nLCBzdHJpbmddfSAtIHRyYW5zYWN0aW9uIGlkIHBhcnRzIFs8YWNjb3VudCBpZD4sIDxzdGFydFRpbWUgaW4gc2Vjb25kcz5dXG4gICAqL1xuICBnZXRUeElkUGFydHMoKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fdHhCb2R5ICYmXG4gICAgICB0aGlzLl90eEJvZHkudHJhbnNhY3Rpb25JRCAmJlxuICAgICAgdGhpcy5fdHhCb2R5LnRyYW5zYWN0aW9uSUQuYWNjb3VudElEICYmXG4gICAgICB0aGlzLl90eEJvZHkudHJhbnNhY3Rpb25JRC50cmFuc2FjdGlvblZhbGlkU3RhcnRcbiAgICApIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHN0cmluZ2lmeUFjY291bnRJZCh0aGlzLl90eEJvZHkudHJhbnNhY3Rpb25JRC5hY2NvdW50SUQpLFxuICAgICAgICBzdHJpbmdpZnlUeFRpbWUodGhpcy5fdHhCb2R5LnRyYW5zYWN0aW9uSUQudHJhbnNhY3Rpb25WYWxpZFN0YXJ0KSxcbiAgICAgIF07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0cmFuc2FjdGlvbiBpZCBpbmZvcm1hdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhpcyB0cmFuc2FjdGlvbiBoYXNoXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHRyYW5zYWN0aW9uIGhhc2hcbiAgICovXG4gIGdldFR4SGFzaCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fdHhCb2R5Lm5vZGVBY2NvdW50SUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0cmFuc2FjdGlvbiBub2RlIGlkJyk7XG4gICAgfVxuICAgIGNvbnN0IF9zaWduZWRUeCA9IG5ldyBwcm90by5TaWduZWRUcmFuc2FjdGlvbigpO1xuICAgIF9zaWduZWRUeC5zaWdNYXAgPSB0aGlzLl9oZWRlcmFUeC5zaWdNYXA7XG4gICAgX3NpZ25lZFR4LmJvZHlCeXRlcyA9IHRoaXMuX2hlZGVyYVR4LmJvZHlCeXRlcztcbiAgICByZXR1cm4gdGhpcy5nZXRIYXNoT2YoX3NpZ25lZFR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgYW4gb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiBlbmNvZGVyIGNsYXNzXG4gICAqXG4gICAqIEBwYXJhbSB7cHJvdG99IG9iaiAtIHRoZSBvYmplY3QgdG8gYmUgZW5jb2RlZCwgaXQgbXVzdCBiZSBhbiBwcm90byBuYW1lc3BhY2Ugb2JqZWN0XG4gICAqIEBwYXJhbSBlbmNvZGVyIC0gT2JqZWN0IGVuY29kZXJcbiAgICogQHJldHVybnMge1VpbnQ4QXJyYXl9IC0gZW5jb2RlZCBvYmplY3QgYnl0ZSBhcnJheVxuICAgKi9cbiAgcHJpdmF0ZSBlbmNvZGU8Q3RvckZuIGV4dGVuZHMgeyBuZXcgKCk6IFQgfSwgVCBleHRlbmRzIHsgY29uc3RydWN0b3I6IEN0b3JGbiB9PihcbiAgICBvYmo6IFQsXG4gICAgZW5jb2Rlcj86IHsgZW5jb2RlKGFyZzogVCk6IFdyaXRlciB9LFxuICApOiBVaW50OEFycmF5IHtcbiAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgcmV0dXJuIGVuY29kZXIuZW5jb2RlKG9iaikuZmluaXNoKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVuY29kZShvYmosIHByb3RvW29iai5jb25zdHJ1Y3Rvci5uYW1lXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBzaGEtMzg0IGhhc2hcbiAgICpcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyAtIGJ5dGVzIHRvIGJlIGhhc2hlZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSByZXN1bHRpbmcgaGFzaCBzdHJpbmdcbiAgICovXG4gIHNoYShieXRlczogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRvSGV4KGhhc2goYnl0ZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gcHJvdG8gb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3Byb3RvfSBvYmogLSBUaGUgb2JqZWN0IHRvIGJlIGhhc2hlZCwgaXQgbXVzdCBiZSBhbiBwcm90byBuYW1lc3BhY2Ugb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIHJlc3VsdGluZyBoYXNoIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRIYXNoT2Y8VD4ob2JqOiBUKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zaGEodGhpcy5lbmNvZGUob2JqKSk7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG59XG4iXX0=
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29pbi9oYmFyL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSw4Q0FBc0g7QUFDdEgsOENBQXlDO0FBQ3pDLGdFQUFxQztBQUVyQyxnREFBa0M7QUFDbEMsMkNBQTZCO0FBQzdCLHdEQUEwQztBQUUxQyxtQ0FBMEc7QUFFMUcsMkNBQXFEO0FBRXJELE1BQWEsV0FBWSxTQUFRLDBCQUFlO0lBSzlDLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUFDLEdBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFnQjtRQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2IsTUFBTSxJQUFJLHVCQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUMvQztRQUNELE1BQU0sU0FBUyxHQUFHLHVCQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVksQ0FBQyxTQUFpQixFQUFFLEdBQVk7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFB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O1FBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDekMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUUvQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FDWixHQUFNLEVBQ04sT0FBbUM7UUFFbkMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEdBQUcsQ0FBQyxLQUFpQjtRQUNuQixPQUFPLGdCQUFLLENBQUMsYUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBOVRELGtDQThUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlS2V5LCBCYXNlVHJhbnNhY3Rpb24sIEVudHJ5LCBTaWduaW5nRXJyb3IsIHRvSGV4LCB0b1VpbnQ4QXJyYXksIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBoYXNoIH0gZnJvbSAnQHN0YWJsZWxpYi9zaGEzODQnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgV3JpdGVyIH0gZnJvbSAncHJvdG9idWZqcyc7XG5pbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgKiBhcyBMb25nIGZyb20gJ2xvbmcnO1xuaW1wb3J0ICogYXMgcHJvdG8gZnJvbSAnQGhhc2hncmFwaC9wcm90byc7XG5pbXBvcnQgeyBUeERhdGEsIFJlY2lwaWVudCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgc3RyaW5naWZ5QWNjb3VudElkLCBzdHJpbmdpZnlUeFRpbWUsIHN0cmluZ2lmeVRva2VuSWQsIGdldEhlZGVyYVRva2VuTmFtZUZyb21JZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4vJztcbmltcG9ydCB7IEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgX2hlZGVyYVR4OiBwcm90by5UcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfdHhCb2R5OiBwcm90by5UcmFuc2FjdGlvbkJvZHk7XG4gIHByb3RlY3RlZCBfdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2lnbihrZXlQYWlyOiBLZXlQYWlyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cyh0cnVlKTtcbiAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3JldEtleSA9IHRvVWludDhBcnJheShrZXlzLnBydiArIGtleXMucHViKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBuYWNsLnNpZ24uZGV0YWNoZWQodGhpcy5faGVkZXJhVHguYm9keUJ5dGVzLCBzZWNyZXRLZXkpO1xuICAgIHRoaXMuYWRkU2lnbmF0dXJlKHRvSGV4KHNpZ25hdHVyZSksIGtleVBhaXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpZ25hdHVyZSB0byB0aGlzIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlIHRvIGFkZCwgaW4gc3RyaW5nIGhleCBmb3JtYXRcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBrZXkgdGhhdCBjcmVhdGVkIHRoZSBzaWduYXR1cmVcbiAgICovXG4gIGFkZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZywga2V5OiBLZXlQYWlyKTogdm9pZCB7XG4gICAgY29uc3Qgc2lnUGFpciA9IG5ldyBwcm90by5TaWduYXR1cmVQYWlyKCk7XG4gICAgc2lnUGFpci5wdWJLZXlQcmVmaXggPSB0b1VpbnQ4QXJyYXkoa2V5LmdldEtleXModHJ1ZSkucHViKTtcbiAgICBzaWdQYWlyLmVkMjU1MTkgPSB0b1VpbnQ4QXJyYXkoc2lnbmF0dXJlKTtcblxuICAgIGNvbnN0IHNpZ01hcCA9IHRoaXMuX2hlZGVyYVR4LnNpZ01hcCB8fCBuZXcgcHJvdG8uU2lnbmF0dXJlTWFwKCk7XG4gICAgc2lnTWFwLnNpZ1BhaXIhLnB1c2goc2lnUGFpcik7XG4gICAgdGhpcy5faGVkZXJhVHguc2lnTWFwID0gc2lnTWFwO1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChzaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgZW5jb2RlciA9IHByb3RvLlRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB0b0hleCh0aGlzLmVuY29kZSh0aGlzLl9oZWRlcmFUeCwgZW5jb2RlcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBVaW50OEFycmF5IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYnVmZmVyID0gdHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJyA/IHRvVWludDhBcnJheShyYXdUcmFuc2FjdGlvbikgOiByYXdUcmFuc2FjdGlvbjtcbiAgICB0aGlzLmJvZHlCeXRlcyhidWZmZXIpO1xuICAgIHN3aXRjaCAodGhpcy50eEJvZHkuZGF0YSkge1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRyYW5zZmVyOlxuICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLkNyZWF0ZUFjY291bnQ6XG4gICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRva2VuQXNzb2NpYXRlVG9BY2NvdW50OlxuICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuQXNzb2NpYXRlZFRva2VuQWNjb3VudEluaXRpYWxpemF0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGNvbnN0IFthY2MsIHRpbWVdID0gdGhpcy5nZXRUeElkUGFydHMoKTtcbiAgICBjb25zdCByZXN1bHQ6IFR4RGF0YSA9IHtcbiAgICAgIGlkOiBhY2MgKyAnQCcgKyB0aW1lLFxuICAgICAgaGFzaDogdGhpcy5nZXRUeEhhc2goKSwgLy8gVE9ETzogVXBkYXRlIG9uY2UgaGVkZXJhLXNkayByZWxlYXNlIHRoaXMgZnVuY3Rpb25hbGl0eSBCR0EtMjg0XG4gICAgICBkYXRhOiB0b0hleCh0aGlzLl9oZWRlcmFUeC5ib2R5Qnl0ZXMpLFxuICAgICAgZmVlOiBuZXcgQmlnTnVtYmVyKHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbkZlZSEudG9TdHJpbmcoKSkudG9OdW1iZXIoKSxcbiAgICAgIGZyb206IGFjYyxcbiAgICAgIHN0YXJ0VGltZTogdGltZSxcbiAgICAgIHZhbGlkRHVyYXRpb246IHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvblZhbGlkRHVyYXRpb24hLnNlY29uZHMhLnRvU3RyaW5nKCksXG4gICAgICBub2RlOiBzdHJpbmdpZnlBY2NvdW50SWQodGhpcy5fdHhCb2R5Lm5vZGVBY2NvdW50SUQhKSxcbiAgICAgIG1lbW86IHRoaXMuX3R4Qm9keS5tZW1vLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3R4Qm9keS5kYXRhKSB7XG4gICAgICBjYXNlIEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVHJhbnNmZXI6XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyRGF0YSA9IHRoaXMuZ2V0VHJhbnNmZXJEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbnN0cnVjdGlvbnNEYXRhID0ge1xuICAgICAgICAgIHR5cGU6IEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVHJhbnNmZXIsXG4gICAgICAgICAgcGFyYW1zOiB0cmFuc2ZlckRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdC50byA9IHJlc3VsdC5pbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy5yZWNpcGllbnRzWzBdLmFkZHJlc3M7XG4gICAgICAgIHJlc3VsdC5hbW91bnQgPSByZXN1bHQuaW5zdHJ1Y3Rpb25zRGF0YS5wYXJhbXMucmVjaXBpZW50c1swXS5hbW91bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRva2VuQXNzb2NpYXRlVG9BY2NvdW50OlxuICAgICAgICByZXN1bHQuaW5zdHJ1Y3Rpb25zRGF0YSA9IHtcbiAgICAgICAgICB0eXBlOiBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRva2VuQXNzb2NpYXRlVG9BY2NvdW50LFxuICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRBY2NvdW50QXNzb2NpYXRlRGF0YSgpLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVjaXBpZW50IGFjY291bnQgYW5kIHRoZSBhbW91bnRcbiAgICogdHJhbnNmZXJyZWQgb24gdGhpcyB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyB7IHRva2VuTmFtZSwgUmVjaXBpZW50W119IGlzIG9iamVjdCBjb25zaXN0aW5nIG9mIHRva2VuTmFtZSBpZiBpdCdzIGEgdG9rZW4gdHJhbnNmZXIgYW5kIHJlY2lwaWVudHMgY29uc2lzdGluZ1xuICAgKiAgdGhlIHJlY2lwaWVudCBhZGRyZXNzLCB0aGUgdHJhbnNmZXIgYW1vdW50LCBhbmQgdGhlIHRva2VuIG5hbWUgZm9yIHRva2VuIHRyYW5zZmVyXG4gICAqL1xuICBwcml2YXRlIGdldFRyYW5zZmVyRGF0YSgpOiB7IHRva2VuTmFtZT86IHN0cmluZzsgcmVjaXBpZW50czogUmVjaXBpZW50W10gfSB7XG4gICAgY29uc3QgW2FjY10gPSB0aGlzLmdldFR4SWRQYXJ0cygpO1xuICAgIGNvbnN0IHRyYW5zZmVyRGF0YTogUmVjaXBpZW50W10gPSBbXTtcbiAgICBjb25zdCB0b2tlblRyYW5zZmVyczogcHJvdG8uSVRva2VuVHJhbnNmZXJMaXN0W10gPSB0aGlzLl90eEJvZHkuY3J5cHRvVHJhbnNmZXI/LnRva2VuVHJhbnNmZXJzIHx8IFtdO1xuICAgIGNvbnN0IHRyYW5zZmVyczogcHJvdG8uSUFjY291bnRBbW91bnRbXSA9XG4gICAgICB0b2tlblRyYW5zZmVyc1swXT8udHJhbnNmZXJzIHx8IHRoaXMuX3R4Qm9keS5jcnlwdG9UcmFuc2Zlcj8udHJhbnNmZXJzPy5hY2NvdW50QW1vdW50cyB8fCBbXTtcbiAgICBjb25zdCB0b2tlbk5hbWUgPSB0b2tlblRyYW5zZmVycy5sZW5ndGhcbiAgICAgID8gZ2V0SGVkZXJhVG9rZW5OYW1lRnJvbUlkKHN0cmluZ2lmeVRva2VuSWQodG9rZW5UcmFuc2ZlcnNbMF0udG9rZW4hKSk/Lm5hbWVcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgdHJhbnNmZXJzLmZvckVhY2goKHRyYW5zZmVyKSA9PiB7XG4gICAgICBjb25zdCBhbW91bnQgPSBMb25nLmZyb21WYWx1ZSh0cmFuc2Zlci5hbW91bnQhKTtcbiAgICAgIGlmIChhbW91bnQuaXNQb3NpdGl2ZSgpICYmIHN0cmluZ2lmeUFjY291bnRJZCh0cmFuc2Zlci5hY2NvdW50SUQhKSAhPT0gYWNjKSB7XG4gICAgICAgIHRyYW5zZmVyRGF0YS5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiBzdHJpbmdpZnlBY2NvdW50SWQodHJhbnNmZXIuYWNjb3VudElEISksXG4gICAgICAgICAgYW1vdW50OiBhbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAuLi4odG9rZW5UcmFuc2ZlcnMubGVuZ3RoICYmIHtcbiAgICAgICAgICAgIHRva2VuTmFtZTogdG9rZW5OYW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi4odG9rZW5UcmFuc2ZlcnMubGVuZ3RoICYmIHtcbiAgICAgICAgdG9rZW5OYW1lOiB0b2tlbk5hbWUsXG4gICAgICB9KSxcbiAgICAgIHJlY2lwaWVudHM6IHRyYW5zZmVyRGF0YSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVjaXBpZW50IGFjY291bnQgYW5kIHRoZSBhbW91bnRcbiAgICogdHJhbnNmZXJyZWQgb24gdGhpcyB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyB7IGFjY291bnRJZDogc3RyaW5nOyB0b2tlbk5hbWVzW119IGlzIGFuIG9iamVjdCBjb25zaXN0aW5nIG9mIGFjY291bnRJZCBmb3IgdGhlIHRva2VuIG93bmVyXG4gICAqICBhbmQgbGlzdCBvZiB0b2tlbk5hbWVzIHRoYXQgd2lsbCBiZSBlbmFibGVkXG4gICAqL1xuICBwcml2YXRlIGdldEFjY291bnRBc3NvY2lhdGVEYXRhKCk6IHsgYWNjb3VudElkOiBzdHJpbmc7IHRva2VuTmFtZXM6IHN0cmluZ1tdIH0ge1xuICAgIGNvbnN0IHRva2VuczogcHJvdG8uSVRva2VuSURbXSA9IHRoaXMuX3R4Qm9keS50b2tlbkFzc29jaWF0ZSEudG9rZW5zIHx8IFtdO1xuICAgIHJldHVybiB7XG4gICAgICBhY2NvdW50SWQ6IHN0cmluZ2lmeUFjY291bnRJZCh0aGlzLl90eEJvZHkudG9rZW5Bc3NvY2lhdGUhLmFjY291bnQhKSxcbiAgICAgIHRva2VuTmFtZXM6IHRva2Vucy5tYXAoKHRva2VuOiBwcm90by5JVG9rZW5JRCkgPT4gZ2V0SGVkZXJhVG9rZW5OYW1lRnJvbUlkKHN0cmluZ2lmeVRva2VuSWQodG9rZW4pKSEubmFtZSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBnZXR0ZXJzICYgc2V0dGVyc1xuICBnZXQgdHhCb2R5KCk6IHByb3RvLlRyYW5zYWN0aW9uQm9keSB7XG4gICAgcmV0dXJuIHRoaXMuX3R4Qm9keTtcbiAgfVxuXG4gIGdldCBoZWRlcmFUeCgpOiBwcm90by5UcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hlZGVyYVR4O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBib2R5IGNvbXBvbmVudHNcbiAgICpcbiAgICogQHBhcmFtIHtwcm90by5UcmFuc2FjdGlvbn0gdHggLSBCb2R5IFRyYW5zYWN0aW9uXG4gICAqL1xuICBib2R5KHR4OiBwcm90by5UcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3R4Qm9keSA9IHByb3RvLlRyYW5zYWN0aW9uQm9keS5kZWNvZGUodHguYm9keUJ5dGVzKTtcbiAgICB0aGlzLl9oZWRlcmFUeCA9IHR4O1xuICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSAtIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldFxuICAgKi9cbiAgc2V0VHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGUgcHJldmlvdXMgc2lnbmF0dXJlcyBmcm9tIHRoZSBpbm5lciBoZWRlcmEgdHJhbnNhY3Rpb25cbiAgICogYW5kIHNhdmUgdGhlbSBpbnRvIHRoZSBiYXNlIHRyYW5zYWN0aW9uIHNpZ25hdHVyZSBsaXN0LlxuICAgKi9cbiAgbG9hZFByZXZpb3VzU2lnbmF0dXJlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faGVkZXJhVHguc2lnTWFwICYmIHRoaXMuX2hlZGVyYVR4LnNpZ01hcC5zaWdQYWlyKSB7XG4gICAgICBjb25zdCBzaWdQYWlycyA9IHRoaXMuX2hlZGVyYVR4LnNpZ01hcC5zaWdQYWlyO1xuICAgICAgc2lnUGFpcnMuZm9yRWFjaCgoc2lnUGFpcikgPT4ge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBzaWdQYWlyLmVkMjU1MTk7XG4gICAgICAgIGlmIChzaWduYXR1cmUpIHtcbiAgICAgICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2godG9IZXgoc2lnbmF0dXJlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgb24gdGhpcyB0cmFuc2FjdGlvbiB1c2luZyB0aGUgdHJhbnNhY3Rpb24ganNvblxuICAgKiBpZiB0aGVyZSBhcmUgb3V0cHV0cy4gRm9yIHRyYW5zYWN0aW9ucyB3aXRob3V0IG91dHB1dHMgKGUuZy4gd2FsbGV0IGluaXRpYWxpemF0aW9ucyksXG4gICAqIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZG8gYW55dGhpbmdcbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHR4SnNvbiA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YTtcbiAgICBjb25zdCBvdXRwdXRzOiBFbnRyeVtdID0gW107XG4gICAgY29uc3QgaW5wdXRzOiBFbnRyeVtdID0gW107XG5cbiAgICBzd2l0Y2ggKGluc3RydWN0aW9uPy50eXBlKSB7XG4gICAgICBjYXNlIEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVHJhbnNmZXI6XG4gICAgICAgIGxldCB0b3RhbEFtb3VudCA9IG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgICAgIGluc3RydWN0aW9uLnBhcmFtcy5yZWNpcGllbnRzLmZvckVhY2goKHJlY2lwaWVudCkgPT4ge1xuICAgICAgICAgIHRvdGFsQW1vdW50ID0gdG90YWxBbW91bnQucGx1cyhyZWNpcGllbnQuYW1vdW50KTtcbiAgICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogcmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgICB2YWx1ZTogcmVjaXBpZW50LmFtb3VudCxcbiAgICAgICAgICAgIGNvaW46IHJlY2lwaWVudC50b2tlbk5hbWUgfHwgdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaW5wdXRzLnB1c2goe1xuICAgICAgICAgIGFkZHJlc3M6IHR4SnNvbi5mcm9tLFxuICAgICAgICAgIHZhbHVlOiB0b3RhbEFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgIGNvaW46IGluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWUgfHwgdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSGVkZXJhVHJhbnNhY3Rpb25UeXBlcy5Ub2tlbkFzc29jaWF0ZVRvQWNjb3VudDpcbiAgICAgICAgaW5zdHJ1Y3Rpb24ucGFyYW1zLnRva2VuTmFtZXMuZm9yRWFjaCgodG9rZW5OYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgdG9rZW5FbnRyeTogRW50cnkgPSB7XG4gICAgICAgICAgICBhZGRyZXNzOiBpbnN0cnVjdGlvbi5wYXJhbXMuYWNjb3VudElkLFxuICAgICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgICAgIGNvaW46IHRva2VuTmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlucHV0cy5wdXNoKHRva2VuRW50cnkpO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh0b2tlbkVudHJ5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl9pbnB1dHMgPSBpbnB1dHM7XG4gICAgdGhpcy5fb3V0cHV0cyA9IG91dHB1dHM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIHRyYW5zYWN0aW9uIGJvZHkgY29tcG9uZW50c1xuICAgKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzIC0gRW5jb2RlZCBib2R5IHRyYW5zYWN0aW9uXG4gICAqL1xuICBib2R5Qnl0ZXMoYnl0ZXM6IFVpbnQ4QXJyYXkpOiB2b2lkIHtcbiAgICB0aGlzLmJvZHkocHJvdG8uVHJhbnNhY3Rpb24uZGVjb2RlKGJ5dGVzKSk7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIGhlbHBlcnNcbiAgLyoqXG4gICAqIFJldHVybnMgdGhpcyBoZWRlcmEgdHJhbnNhY3Rpb24gaWQgY29tcG9uZW50cyBpbiBhIHJlYWRhYmxlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJucyB7W3N0cmluZywgc3RyaW5nXX0gLSBUcmFuc2FjdGlvbiBpZCBwYXJ0cyBbPGFjY291bnQgaWQ+LCA8c3RhcnRUaW1lIGluIHNlY29uZHM+XVxuICAgKi9cbiAgZ2V0VHhJZFBhcnRzKCk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX3R4Qm9keSAmJlxuICAgICAgdGhpcy5fdHhCb2R5LnRyYW5zYWN0aW9uSUQgJiZcbiAgICAgIHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbklELmFjY291bnRJRCAmJlxuICAgICAgdGhpcy5fdHhCb2R5LnRyYW5zYWN0aW9uSUQudHJhbnNhY3Rpb25WYWxpZFN0YXJ0XG4gICAgKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdHJpbmdpZnlBY2NvdW50SWQodGhpcy5fdHhCb2R5LnRyYW5zYWN0aW9uSUQuYWNjb3VudElEKSxcbiAgICAgICAgc3RyaW5naWZ5VHhUaW1lKHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbklELnRyYW5zYWN0aW9uVmFsaWRTdGFydCksXG4gICAgICBdO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdHJhbnNhY3Rpb24gaWQgaW5mb3JtYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoaXMgdHJhbnNhY3Rpb24gaGFzaFxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSB0cmFuc2FjdGlvbiBoYXNoXG4gICAqL1xuICBnZXRUeEhhc2goKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3R4Qm9keS5ub2RlQWNjb3VudElEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdHJhbnNhY3Rpb24gbm9kZSBpZCcpO1xuICAgIH1cbiAgICBjb25zdCBfc2lnbmVkVHggPSBuZXcgcHJvdG8uU2lnbmVkVHJhbnNhY3Rpb24oKTtcbiAgICBfc2lnbmVkVHguc2lnTWFwID0gdGhpcy5faGVkZXJhVHguc2lnTWFwO1xuICAgIF9zaWduZWRUeC5ib2R5Qnl0ZXMgPSB0aGlzLl9oZWRlcmFUeC5ib2R5Qnl0ZXM7XG5cbiAgICBjb25zdCBlbmNvZGVyID0gcHJvdG8uU2lnbmVkVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHRoaXMuc2hhKHRoaXMuZW5jb2RlKF9zaWduZWRUeCwgZW5jb2RlcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSBhbiBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIGVuY29kZXIgY2xhc3NcbiAgICpcbiAgICogQHBhcmFtIHtwcm90b30gb2JqIC0gVGhlIG9iamVjdCB0byBiZSBlbmNvZGVkLCBtdXN0IGJlIGluIHByb3RvIG5hbWVzcGFjZVxuICAgKiBAcGFyYW0gZW5jb2RlciAtIE9iamVjdCBlbmNvZGVyXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fSAtIEVuY29kZWQgb2JqZWN0IGJ5dGUgYXJyYXlcbiAgICovXG4gIHByaXZhdGUgZW5jb2RlPEN0b3JGbiBleHRlbmRzIHsgbmV3ICgpOiBUIH0sIFQgZXh0ZW5kcyB7IGNvbnN0cnVjdG9yOiBDdG9yRm4gfT4oXG4gICAgb2JqOiBULFxuICAgIGVuY29kZXI6IHsgZW5jb2RlKGFyZzogVCk6IFdyaXRlciB9LFxuICApOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gZW5jb2Rlci5lbmNvZGUob2JqKS5maW5pc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2hhLTM4NCBoYXNoXG4gICAqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXMgLSBCeXRlcyB0byBiZSBoYXNoZWRcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgcmVzdWx0aW5nIGhhc2ggc3RyaW5nXG4gICAqL1xuICBzaGEoYnl0ZXM6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b0hleChoYXNoKGJ5dGVzKSk7XG4gIH1cbn1cbiJdfQ==