@bitgo-beta/sdk-coin-sol 7.6.4-beta.31 → 7.6.4-beta.310

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 (395) hide show
  1. package/dist/cjs/src/bigint-buffer-guard.d.ts.map +1 -0
  2. package/dist/cjs/src/bigint-buffer-guard.js +29 -0
  3. package/dist/cjs/src/config/token2022StaticConfig.d.ts.map +1 -0
  4. package/dist/cjs/src/config/token2022StaticConfig.js +50 -0
  5. package/dist/cjs/src/index.d.ts.map +1 -0
  6. package/dist/{src → cjs/src}/index.js +1 -1
  7. package/dist/cjs/src/lib/ataInitializationBuilder.d.ts.map +1 -0
  8. package/dist/cjs/src/lib/ataInitializationBuilder.js +196 -0
  9. package/dist/cjs/src/lib/closeAtaBuilder.d.ts.map +1 -0
  10. package/dist/cjs/src/lib/closeAtaBuilder.js +69 -0
  11. package/dist/{src → cjs/src}/lib/constants.d.ts +24 -0
  12. package/dist/cjs/src/lib/constants.d.ts.map +1 -0
  13. package/dist/cjs/src/lib/constants.js +196 -0
  14. package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -0
  15. package/dist/cjs/src/lib/customInstructionBuilder.js +289 -0
  16. package/dist/cjs/src/lib/explainTransactionWasm.d.ts +21 -0
  17. package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
  18. package/dist/cjs/src/lib/explainTransactionWasm.js +264 -0
  19. package/dist/{src → cjs/src}/lib/iface.d.ts +20 -2
  20. package/dist/cjs/src/lib/iface.d.ts.map +1 -0
  21. package/dist/cjs/src/lib/iface.js +7 -0
  22. package/dist/{src → cjs/src}/lib/index.d.ts +1 -0
  23. package/dist/cjs/src/lib/index.d.ts.map +1 -0
  24. package/dist/{src → cjs/src}/lib/index.js +4 -2
  25. package/dist/{src → cjs/src}/lib/instructionParamsFactory.d.ts +1 -0
  26. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -0
  27. package/dist/cjs/src/lib/instructionParamsFactory.js +1059 -0
  28. package/dist/cjs/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
  29. package/dist/cjs/src/lib/jitoStakePoolOperations.js +200 -0
  30. package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
  31. package/dist/cjs/src/lib/keyPair.js +63 -0
  32. package/dist/cjs/src/lib/messages/index.d.ts.map +1 -0
  33. package/dist/{src → cjs/src}/lib/messages/index.js +1 -1
  34. package/dist/cjs/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  35. package/dist/cjs/src/lib/messages/messageBuilderFactory.js +19 -0
  36. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts +25 -0
  37. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  38. package/dist/cjs/src/lib/recoverNestedAtaBuilder.js +90 -0
  39. package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -0
  40. package/dist/cjs/src/lib/solInstructionFactory.js +595 -0
  41. package/dist/cjs/src/lib/stakingActivateBuilder.d.ts.map +1 -0
  42. package/dist/cjs/src/lib/stakingActivateBuilder.js +120 -0
  43. package/dist/cjs/src/lib/stakingAuthorizeBuilder.d.ts.map +1 -0
  44. package/dist/cjs/src/lib/stakingAuthorizeBuilder.js +89 -0
  45. package/dist/cjs/src/lib/stakingDeactivateBuilder.d.ts.map +1 -0
  46. package/dist/cjs/src/lib/stakingDeactivateBuilder.js +208 -0
  47. package/dist/cjs/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
  48. package/dist/cjs/src/lib/stakingDelegateBuilder.js +120 -0
  49. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  50. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.js +110 -0
  51. package/dist/cjs/src/lib/stakingWithdrawBuilder.d.ts.map +1 -0
  52. package/dist/cjs/src/lib/stakingWithdrawBuilder.js +78 -0
  53. package/dist/cjs/src/lib/token2022Config.d.ts.map +1 -0
  54. package/dist/cjs/src/lib/token2022Config.js +27 -0
  55. package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  56. package/dist/cjs/src/lib/tokenTransferBuilder.js +188 -0
  57. package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
  58. package/dist/cjs/src/lib/transaction.js +612 -0
  59. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
  60. package/dist/cjs/src/lib/transactionBuilder.js +380 -0
  61. package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +5 -0
  62. package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  63. package/dist/cjs/src/lib/transactionBuilderFactory.js +209 -0
  64. package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
  65. package/dist/cjs/src/lib/transferBuilder.js +70 -0
  66. package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -0
  67. package/dist/cjs/src/lib/transferBuilderV2.js +210 -0
  68. package/dist/cjs/src/lib/utils.d.ts.map +1 -0
  69. package/dist/cjs/src/lib/utils.js +595 -0
  70. package/dist/cjs/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  71. package/dist/cjs/src/lib/walletInitializationBuilder.js +71 -0
  72. package/dist/cjs/src/register.d.ts.map +1 -0
  73. package/dist/cjs/src/register.js +15 -0
  74. package/dist/{src → cjs/src}/sol.d.ts +40 -0
  75. package/dist/cjs/src/sol.d.ts.map +1 -0
  76. package/dist/cjs/src/sol.js +1402 -0
  77. package/dist/cjs/src/solToken.d.ts.map +1 -0
  78. package/dist/cjs/src/solToken.js +69 -0
  79. package/dist/cjs/src/tsol.d.ts.map +1 -0
  80. package/dist/cjs/src/tsol.js +24 -0
  81. package/dist/{test → cjs/test}/fixtures/sol.d.ts.map +1 -1
  82. package/dist/cjs/test/fixtures/sol.js +1433 -0
  83. package/dist/{test → cjs/test}/resources/sol.d.ts +27 -27
  84. package/dist/cjs/test/resources/sol.d.ts.map +1 -0
  85. package/dist/cjs/test/resources/sol.js +320 -0
  86. package/dist/cjs/test/unit/explainTransactionWasm.d.ts +5 -0
  87. package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
  88. package/dist/cjs/test/unit/explainTransactionWasm.js +26 -0
  89. package/dist/cjs/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
  90. package/dist/cjs/test/unit/fixtures/solBackupKey.js +8 -0
  91. package/dist/cjs/test/unit/getBuilderFactory.d.ts.map +1 -0
  92. package/dist/cjs/test/unit/getBuilderFactory.js +10 -0
  93. package/dist/cjs/test/unit/instructionParamsFactory.d.ts.map +1 -0
  94. package/dist/cjs/test/unit/instructionParamsFactory.js +412 -0
  95. package/dist/cjs/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
  96. package/dist/cjs/test/unit/instructionParamsFactory.staking.js +1059 -0
  97. package/dist/cjs/test/unit/jitoWasmVerification.d.ts +2 -0
  98. package/dist/cjs/test/unit/jitoWasmVerification.d.ts.map +1 -0
  99. package/dist/cjs/test/unit/jitoWasmVerification.js +78 -0
  100. package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
  101. package/dist/cjs/test/unit/keyPair.js +177 -0
  102. package/dist/cjs/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  103. package/dist/cjs/test/unit/messages/messageBuilderFactory.js +118 -0
  104. package/dist/cjs/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
  105. package/dist/cjs/test/unit/messages/simpleMessageBuilder.js +194 -0
  106. package/dist/{test → cjs/test}/unit/sol.d.ts.map +1 -1
  107. package/dist/cjs/test/unit/sol.js +3326 -0
  108. package/dist/cjs/test/unit/solInstructionFactory.d.ts.map +1 -0
  109. package/dist/cjs/test/unit/solInstructionFactory.js +454 -0
  110. package/dist/cjs/test/unit/solToken.d.ts.map +1 -0
  111. package/dist/cjs/test/unit/solToken.js +31 -0
  112. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  113. package/dist/cjs/test/unit/transaction.js +1108 -0
  114. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
  115. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
  116. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
  117. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.js +471 -0
  118. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
  119. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
  120. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
  121. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
  122. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
  123. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
  124. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
  125. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
  126. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
  127. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
  128. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  129. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
  130. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  131. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.js +787 -0
  132. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  133. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.js +495 -0
  134. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  135. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +286 -0
  136. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
  137. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.js +862 -0
  138. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
  139. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
  140. package/dist/{test → cjs/test}/unit/utils.d.ts.map +1 -1
  141. package/dist/cjs/test/unit/utils.js +517 -0
  142. package/dist/cjs/test/unit/versionedTransaction.d.ts.map +1 -0
  143. package/dist/cjs/test/unit/versionedTransaction.js +207 -0
  144. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  145. package/dist/esm/bigint-buffer-guard.d.ts +1 -0
  146. package/dist/esm/config/token2022StaticConfig.d.ts +3 -0
  147. package/dist/esm/config/token2022StaticConfig.js +47 -0
  148. package/dist/esm/index.d.ts +7 -0
  149. package/dist/esm/index.js +7 -0
  150. package/dist/esm/lib/ataInitializationBuilder.d.ts +47 -0
  151. package/dist/esm/lib/ataInitializationBuilder.js +156 -0
  152. package/dist/esm/lib/closeAtaBuilder.d.ts +19 -0
  153. package/dist/esm/lib/closeAtaBuilder.js +62 -0
  154. package/dist/esm/lib/constants.d.ts +164 -0
  155. package/dist/esm/lib/constants.d.ts.map +1 -0
  156. package/dist/esm/lib/constants.js +193 -0
  157. package/dist/esm/lib/customInstructionBuilder.d.ts +72 -0
  158. package/dist/esm/lib/customInstructionBuilder.js +282 -0
  159. package/dist/esm/lib/explainTransactionWasm.d.ts +21 -0
  160. package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
  161. package/dist/esm/lib/explainTransactionWasm.js +261 -0
  162. package/dist/esm/lib/iface.d.ts +262 -0
  163. package/dist/esm/lib/iface.d.ts.map +1 -0
  164. package/dist/esm/lib/iface.js +3 -0
  165. package/dist/esm/lib/index.d.ts +23 -0
  166. package/dist/{src → esm}/lib/index.d.ts.map +1 -1
  167. package/dist/esm/lib/index.js +23 -0
  168. package/dist/esm/lib/instructionParamsFactory.d.ts +13 -0
  169. package/dist/{src → esm}/lib/instructionParamsFactory.d.ts.map +1 -1
  170. package/dist/esm/lib/instructionParamsFactory.js +1052 -0
  171. package/dist/esm/lib/jitoStakePoolOperations.d.ts +113 -0
  172. package/dist/esm/lib/jitoStakePoolOperations.js +189 -0
  173. package/dist/esm/lib/keyPair.d.ts +26 -0
  174. package/dist/esm/lib/keyPair.js +59 -0
  175. package/dist/esm/lib/messages/index.d.ts +2 -0
  176. package/dist/esm/lib/messages/index.js +2 -0
  177. package/dist/esm/lib/messages/messageBuilderFactory.d.ts +7 -0
  178. package/dist/{src → esm}/lib/messages/messageBuilderFactory.js +5 -9
  179. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts +25 -0
  180. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  181. package/dist/esm/lib/recoverNestedAtaBuilder.js +83 -0
  182. package/dist/esm/lib/solInstructionFactory.d.ts +10 -0
  183. package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -0
  184. package/dist/esm/lib/solInstructionFactory.js +589 -0
  185. package/dist/esm/lib/stakingActivateBuilder.d.ts +59 -0
  186. package/dist/esm/lib/stakingActivateBuilder.js +113 -0
  187. package/dist/esm/lib/stakingAuthorizeBuilder.d.ts +43 -0
  188. package/dist/esm/lib/stakingAuthorizeBuilder.js +82 -0
  189. package/dist/esm/lib/stakingDeactivateBuilder.d.ts +81 -0
  190. package/dist/{src → esm}/lib/stakingDeactivateBuilder.js +31 -38
  191. package/dist/esm/lib/stakingDelegateBuilder.d.ts +42 -0
  192. package/dist/esm/lib/stakingDelegateBuilder.js +113 -0
  193. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.d.ts +33 -0
  194. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.js +103 -0
  195. package/dist/esm/lib/stakingWithdrawBuilder.d.ts +31 -0
  196. package/dist/esm/lib/stakingWithdrawBuilder.js +71 -0
  197. package/dist/esm/lib/token2022Config.d.ts +44 -0
  198. package/dist/esm/lib/token2022Config.js +23 -0
  199. package/dist/esm/lib/tokenTransferBuilder.d.ts +41 -0
  200. package/dist/esm/lib/tokenTransferBuilder.js +181 -0
  201. package/dist/esm/lib/transaction.d.ts +103 -0
  202. package/dist/esm/lib/transaction.d.ts.map +1 -0
  203. package/dist/esm/lib/transaction.js +605 -0
  204. package/dist/esm/lib/transactionBuilder.d.ts +128 -0
  205. package/dist/esm/lib/transactionBuilder.js +373 -0
  206. package/dist/esm/lib/transactionBuilderFactory.d.ts +120 -0
  207. package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
  208. package/dist/esm/lib/transactionBuilderFactory.js +205 -0
  209. package/dist/esm/lib/transferBuilder.d.ts +26 -0
  210. package/dist/esm/lib/transferBuilder.js +63 -0
  211. package/dist/esm/lib/transferBuilderV2.d.ts +43 -0
  212. package/dist/esm/lib/transferBuilderV2.js +203 -0
  213. package/dist/esm/lib/utils.d.ts +200 -0
  214. package/dist/{src → esm}/lib/utils.d.ts.map +1 -1
  215. package/dist/esm/lib/utils.js +558 -0
  216. package/dist/esm/lib/walletInitializationBuilder.d.ts +26 -0
  217. package/dist/esm/lib/walletInitializationBuilder.js +64 -0
  218. package/dist/esm/register.d.ts +3 -0
  219. package/dist/esm/register.js +11 -0
  220. package/dist/esm/sol.d.ts +267 -0
  221. package/dist/esm/sol.d.ts.map +1 -0
  222. package/dist/esm/sol.js +1361 -0
  223. package/dist/esm/solToken.d.ts +37 -0
  224. package/dist/esm/solToken.js +65 -0
  225. package/dist/esm/tsol.d.ts +11 -0
  226. package/dist/esm/tsol.js +20 -0
  227. package/package.json +34 -15
  228. package/dist/src/config/token2022StaticConfig.js +0 -50
  229. package/dist/src/lib/ataInitializationBuilder.js +0 -196
  230. package/dist/src/lib/closeAtaBuilder.js +0 -69
  231. package/dist/src/lib/constants.d.ts.map +0 -1
  232. package/dist/src/lib/constants.js +0 -171
  233. package/dist/src/lib/customInstructionBuilder.js +0 -289
  234. package/dist/src/lib/iface.d.ts.map +0 -1
  235. package/dist/src/lib/iface.js +0 -7
  236. package/dist/src/lib/instructionParamsFactory.js +0 -1036
  237. package/dist/src/lib/jitoStakePoolOperations.js +0 -200
  238. package/dist/src/lib/keyPair.js +0 -63
  239. package/dist/src/lib/solInstructionFactory.d.ts.map +0 -1
  240. package/dist/src/lib/solInstructionFactory.js +0 -572
  241. package/dist/src/lib/stakingActivateBuilder.js +0 -120
  242. package/dist/src/lib/stakingAuthorizeBuilder.js +0 -89
  243. package/dist/src/lib/stakingDelegateBuilder.js +0 -120
  244. package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +0 -110
  245. package/dist/src/lib/stakingWithdrawBuilder.js +0 -78
  246. package/dist/src/lib/token2022Config.js +0 -27
  247. package/dist/src/lib/tokenTransferBuilder.js +0 -188
  248. package/dist/src/lib/transaction.d.ts.map +0 -1
  249. package/dist/src/lib/transaction.js +0 -595
  250. package/dist/src/lib/transactionBuilder.js +0 -380
  251. package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
  252. package/dist/src/lib/transactionBuilderFactory.js +0 -202
  253. package/dist/src/lib/transferBuilder.js +0 -70
  254. package/dist/src/lib/transferBuilderV2.js +0 -210
  255. package/dist/src/lib/utils.js +0 -589
  256. package/dist/src/lib/walletInitializationBuilder.js +0 -71
  257. package/dist/src/register.js +0 -15
  258. package/dist/src/sol.d.ts.map +0 -1
  259. package/dist/src/sol.js +0 -1285
  260. package/dist/src/solToken.js +0 -69
  261. package/dist/src/tsol.js +0 -24
  262. package/dist/test/fixtures/sol.js +0 -1433
  263. package/dist/test/resources/sol.d.ts.map +0 -1
  264. package/dist/test/resources/sol.js +0 -320
  265. package/dist/test/unit/fixtures/solBackupKey.d.ts.map +0 -1
  266. package/dist/test/unit/fixtures/solBackupKey.js +0 -8
  267. package/dist/test/unit/getBuilderFactory.d.ts.map +0 -1
  268. package/dist/test/unit/getBuilderFactory.js +0 -10
  269. package/dist/test/unit/instructionParamsFactory.d.ts.map +0 -1
  270. package/dist/test/unit/instructionParamsFactory.js +0 -412
  271. package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +0 -1
  272. package/dist/test/unit/instructionParamsFactory.staking.js +0 -1059
  273. package/dist/test/unit/keyPair.js +0 -177
  274. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
  275. package/dist/test/unit/messages/messageBuilderFactory.js +0 -118
  276. package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +0 -1
  277. package/dist/test/unit/messages/simpleMessageBuilder.js +0 -194
  278. package/dist/test/unit/sol.js +0 -3108
  279. package/dist/test/unit/solInstructionFactory.d.ts.map +0 -1
  280. package/dist/test/unit/solInstructionFactory.js +0 -454
  281. package/dist/test/unit/solToken.d.ts.map +0 -1
  282. package/dist/test/unit/solToken.js +0 -31
  283. package/dist/test/unit/transaction.d.ts.map +0 -1
  284. package/dist/test/unit/transaction.js +0 -983
  285. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +0 -1
  286. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +0 -202
  287. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +0 -1
  288. package/dist/test/unit/transactionBuilder/ataInitBuilder.js +0 -471
  289. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +0 -1
  290. package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +0 -413
  291. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +0 -1
  292. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +0 -430
  293. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +0 -1
  294. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +0 -157
  295. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +0 -1
  296. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +0 -384
  297. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +0 -1
  298. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +0 -224
  299. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -1
  300. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +0 -259
  301. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +0 -1
  302. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +0 -787
  303. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +0 -1
  304. package/dist/test/unit/transactionBuilder/transactionBuilder.js +0 -495
  305. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
  306. package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -286
  307. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +0 -1
  308. package/dist/test/unit/transactionBuilder/transferBuilderV2.js +0 -862
  309. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +0 -1
  310. package/dist/test/unit/transactionBuilder/walletInitBuilder.js +0 -259
  311. package/dist/test/unit/utils.js +0 -517
  312. package/dist/test/unit/versionedTransaction.d.ts.map +0 -1
  313. package/dist/test/unit/versionedTransaction.js +0 -207
  314. package/dist/tsconfig.tsbuildinfo +0 -1
  315. /package/dist/{src → cjs/src}/bigint-buffer-guard.d.ts +0 -0
  316. /package/dist/{src → cjs/src}/config/token2022StaticConfig.d.ts +0 -0
  317. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  318. /package/dist/{src → cjs/src}/lib/ataInitializationBuilder.d.ts +0 -0
  319. /package/dist/{src → cjs/src}/lib/closeAtaBuilder.d.ts +0 -0
  320. /package/dist/{src → cjs/src}/lib/customInstructionBuilder.d.ts +0 -0
  321. /package/dist/{src → cjs/src}/lib/jitoStakePoolOperations.d.ts +0 -0
  322. /package/dist/{src → cjs/src}/lib/keyPair.d.ts +0 -0
  323. /package/dist/{src → cjs/src}/lib/messages/index.d.ts +0 -0
  324. /package/dist/{src → cjs/src}/lib/messages/messageBuilderFactory.d.ts +0 -0
  325. /package/dist/{src → cjs/src}/lib/solInstructionFactory.d.ts +0 -0
  326. /package/dist/{src → cjs/src}/lib/stakingActivateBuilder.d.ts +0 -0
  327. /package/dist/{src → cjs/src}/lib/stakingAuthorizeBuilder.d.ts +0 -0
  328. /package/dist/{src → cjs/src}/lib/stakingDeactivateBuilder.d.ts +0 -0
  329. /package/dist/{src → cjs/src}/lib/stakingDelegateBuilder.d.ts +0 -0
  330. /package/dist/{src → cjs/src}/lib/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  331. /package/dist/{src → cjs/src}/lib/stakingWithdrawBuilder.d.ts +0 -0
  332. /package/dist/{src → cjs/src}/lib/token2022Config.d.ts +0 -0
  333. /package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +0 -0
  334. /package/dist/{src → cjs/src}/lib/transaction.d.ts +0 -0
  335. /package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +0 -0
  336. /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
  337. /package/dist/{src → cjs/src}/lib/transferBuilderV2.d.ts +0 -0
  338. /package/dist/{src → cjs/src}/lib/utils.d.ts +0 -0
  339. /package/dist/{src → cjs/src}/lib/walletInitializationBuilder.d.ts +0 -0
  340. /package/dist/{src → cjs/src}/register.d.ts +0 -0
  341. /package/dist/{src → cjs/src}/solToken.d.ts +0 -0
  342. /package/dist/{src → cjs/src}/tsol.d.ts +0 -0
  343. /package/dist/{test → cjs/test}/fixtures/sol.d.ts +0 -0
  344. /package/dist/{test → cjs/test}/unit/fixtures/solBackupKey.d.ts +0 -0
  345. /package/dist/{test → cjs/test}/unit/getBuilderFactory.d.ts +0 -0
  346. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.d.ts +0 -0
  347. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.staking.d.ts +0 -0
  348. /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
  349. /package/dist/{test → cjs/test}/unit/messages/messageBuilderFactory.d.ts +0 -0
  350. /package/dist/{test → cjs/test}/unit/messages/simpleMessageBuilder.d.ts +0 -0
  351. /package/dist/{test → cjs/test}/unit/sol.d.ts +0 -0
  352. /package/dist/{test → cjs/test}/unit/solInstructionFactory.d.ts +0 -0
  353. /package/dist/{test → cjs/test}/unit/solToken.d.ts +0 -0
  354. /package/dist/{test → cjs/test}/unit/transaction.d.ts +0 -0
  355. /package/dist/{test → cjs/test}/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +0 -0
  356. /package/dist/{test → cjs/test}/unit/transactionBuilder/ataInitBuilder.d.ts +0 -0
  357. /package/dist/{test → cjs/test}/unit/transactionBuilder/customInstructionBuilder.d.ts +0 -0
  358. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingActivateBuilder.d.ts +0 -0
  359. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +0 -0
  360. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +0 -0
  361. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDelegateBuilder.d.ts +0 -0
  362. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  363. /package/dist/{test → cjs/test}/unit/transactionBuilder/tokenTransferBuilder.d.ts +0 -0
  364. /package/dist/{test → cjs/test}/unit/transactionBuilder/transactionBuilder.d.ts +0 -0
  365. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilder.d.ts +0 -0
  366. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilderV2.d.ts +0 -0
  367. /package/dist/{test → cjs/test}/unit/transactionBuilder/walletInitBuilder.d.ts +0 -0
  368. /package/dist/{test → cjs/test}/unit/utils.d.ts +0 -0
  369. /package/dist/{test → cjs/test}/unit/versionedTransaction.d.ts +0 -0
  370. /package/dist/{src → esm}/bigint-buffer-guard.d.ts.map +0 -0
  371. /package/dist/{src → esm}/bigint-buffer-guard.js +0 -0
  372. /package/dist/{src → esm}/config/token2022StaticConfig.d.ts.map +0 -0
  373. /package/dist/{src → esm}/index.d.ts.map +0 -0
  374. /package/dist/{src → esm}/lib/ataInitializationBuilder.d.ts.map +0 -0
  375. /package/dist/{src → esm}/lib/closeAtaBuilder.d.ts.map +0 -0
  376. /package/dist/{src → esm}/lib/customInstructionBuilder.d.ts.map +0 -0
  377. /package/dist/{src → esm}/lib/jitoStakePoolOperations.d.ts.map +0 -0
  378. /package/dist/{src → esm}/lib/keyPair.d.ts.map +0 -0
  379. /package/dist/{src → esm}/lib/messages/index.d.ts.map +0 -0
  380. /package/dist/{src → esm}/lib/messages/messageBuilderFactory.d.ts.map +0 -0
  381. /package/dist/{src → esm}/lib/stakingActivateBuilder.d.ts.map +0 -0
  382. /package/dist/{src → esm}/lib/stakingAuthorizeBuilder.d.ts.map +0 -0
  383. /package/dist/{src → esm}/lib/stakingDeactivateBuilder.d.ts.map +0 -0
  384. /package/dist/{src → esm}/lib/stakingDelegateBuilder.d.ts.map +0 -0
  385. /package/dist/{src → esm}/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -0
  386. /package/dist/{src → esm}/lib/stakingWithdrawBuilder.d.ts.map +0 -0
  387. /package/dist/{src → esm}/lib/token2022Config.d.ts.map +0 -0
  388. /package/dist/{src → esm}/lib/tokenTransferBuilder.d.ts.map +0 -0
  389. /package/dist/{src → esm}/lib/transactionBuilder.d.ts.map +0 -0
  390. /package/dist/{src → esm}/lib/transferBuilder.d.ts.map +0 -0
  391. /package/dist/{src → esm}/lib/transferBuilderV2.d.ts.map +0 -0
  392. /package/dist/{src → esm}/lib/walletInitializationBuilder.d.ts.map +0 -0
  393. /package/dist/{src → esm}/register.d.ts.map +0 -0
  394. /package/dist/{src → esm}/solToken.d.ts.map +0 -0
  395. /package/dist/{src → esm}/tsol.d.ts.map +0 -0
@@ -0,0 +1,193 @@
1
+ export const MEMO_PROGRAM_PK = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
2
+ export const SEED_LENGTH = 32;
3
+ export const MAX_MEMO_LENGTH = 130;
4
+ export const STAKE_ACCOUNT_RENT_EXEMPT_AMOUNT = 2282880;
5
+ export const UNAVAILABLE_TEXT = 'UNAVAILABLE';
6
+ /**
7
+ * Maximum over-the-wire size of a Solana transaction (in bytes)
8
+ *
9
+ * Source: https://github.com/anza-xyz/agave/blob/v2.1.13/sdk/packet/src/lib.rs#L27-L29
10
+ *
11
+ * Calculation:
12
+ * - IPv6 minimum MTU: 1280 bytes
13
+ * - IPv6 header: 40 bytes
14
+ * - Fragment/UDP header: 8 bytes
15
+ * - Result: 1280 - 40 - 8 = 1232 bytes
16
+ *
17
+ * This limit is designed to avoid packet fragmentation on typical internet infrastructure.
18
+ * Transactions exceeding this limit will fail to serialize with a RangeError during
19
+ * the encoding of the transaction message.
20
+ *
21
+ * Reference: https://solana.com/docs/core/transactions#transaction-size
22
+ */
23
+ export const SOLANA_TRANSACTION_MAX_SIZE = 1232;
24
+ export const JITO_STAKE_POOL_ADDRESS = 'Jito4APyf642JPZPx3hGc6WWJ8zPKtRbRs4P815Awbb';
25
+ export const JITOSOL_MINT_ADDRESS = 'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn';
26
+ export const JITO_STAKE_POOL_RESERVE_ACCOUNT = 'BgKUXdS29YcHCFrPm5M8oLHiTzZaMDjsebggjoaQ6KFL';
27
+ export const JITO_STAKE_POOL_RESERVE_ACCOUNT_TESTNET = 'rrWBQqRqBXYZw3CmPCCcjFxQ2Ds4JFJd7oRQJ997dhz';
28
+ export const JITO_MANAGER_FEE_ACCOUNT = 'feeeFLLsam6xZJFc6UQFrHqkvVt4jfmVvi2BRLkUZ4i';
29
+ export const JITO_MANAGER_FEE_ACCOUNT_TESTNET = 'DH7tmjoQ5zjqcgfYJU22JqmXhP5EY1tkbYpgVWUS2oNo';
30
+ // Sdk instructions, mainly to check decoded types.
31
+ export var ValidInstructionTypesEnum;
32
+ (function (ValidInstructionTypesEnum) {
33
+ ValidInstructionTypesEnum["AdvanceNonceAccount"] = "AdvanceNonceAccount";
34
+ ValidInstructionTypesEnum["Create"] = "Create";
35
+ ValidInstructionTypesEnum["InitializeNonceAccount"] = "InitializeNonceAccount";
36
+ ValidInstructionTypesEnum["StakingInitialize"] = "Initialize";
37
+ ValidInstructionTypesEnum["StakingDelegate"] = "Delegate";
38
+ ValidInstructionTypesEnum["StakingDeactivate"] = "Deactivate";
39
+ ValidInstructionTypesEnum["StakingWithdraw"] = "Withdraw";
40
+ ValidInstructionTypesEnum["Transfer"] = "Transfer";
41
+ ValidInstructionTypesEnum["TokenTransfer"] = "TokenTransfer";
42
+ ValidInstructionTypesEnum["Memo"] = "Memo";
43
+ ValidInstructionTypesEnum["InitializeAssociatedTokenAccount"] = "InitializeAssociatedTokenAccount";
44
+ ValidInstructionTypesEnum["CloseAssociatedTokenAccount"] = "CloseAssociatedTokenAccount";
45
+ ValidInstructionTypesEnum["RecoverNestedAssociatedTokenAccount"] = "RecoverNestedAssociatedTokenAccount";
46
+ ValidInstructionTypesEnum["Allocate"] = "Allocate";
47
+ ValidInstructionTypesEnum["Assign"] = "Assign";
48
+ ValidInstructionTypesEnum["Split"] = "Split";
49
+ ValidInstructionTypesEnum["Authorize"] = "Authorize";
50
+ ValidInstructionTypesEnum["SetComputeUnitLimit"] = "SetComputeUnitLimit";
51
+ ValidInstructionTypesEnum["SetPriorityFee"] = "SetPriorityFee";
52
+ ValidInstructionTypesEnum["MintTo"] = "MintTo";
53
+ ValidInstructionTypesEnum["Burn"] = "Burn";
54
+ ValidInstructionTypesEnum["DepositSol"] = "DepositSol";
55
+ ValidInstructionTypesEnum["WithdrawStake"] = "WithdrawStake";
56
+ ValidInstructionTypesEnum["Approve"] = "Approve";
57
+ ValidInstructionTypesEnum["CustomInstruction"] = "CustomInstruction";
58
+ })(ValidInstructionTypesEnum || (ValidInstructionTypesEnum = {}));
59
+ // Internal instructions types
60
+ export var InstructionBuilderTypes;
61
+ (function (InstructionBuilderTypes) {
62
+ InstructionBuilderTypes["CreateNonceAccount"] = "CreateNonceAccount";
63
+ InstructionBuilderTypes["StakingActivate"] = "Activate";
64
+ InstructionBuilderTypes["StakingDeactivate"] = "Deactivate";
65
+ InstructionBuilderTypes["StakingWithdraw"] = "Withdraw";
66
+ InstructionBuilderTypes["Transfer"] = "Transfer";
67
+ InstructionBuilderTypes["Memo"] = "Memo";
68
+ InstructionBuilderTypes["NonceAdvance"] = "NonceAdvance";
69
+ InstructionBuilderTypes["CreateAssociatedTokenAccount"] = "CreateAssociatedTokenAccount";
70
+ InstructionBuilderTypes["CloseAssociatedTokenAccount"] = "CloseAssociatedTokenAccount";
71
+ InstructionBuilderTypes["RecoverNestedAssociatedTokenAccount"] = "RecoverNestedAssociatedTokenAccount";
72
+ InstructionBuilderTypes["TokenTransfer"] = "TokenTransfer";
73
+ InstructionBuilderTypes["StakingAuthorize"] = "Authorize";
74
+ InstructionBuilderTypes["StakingDelegate"] = "Delegate";
75
+ InstructionBuilderTypes["SetComputeUnitLimit"] = "SetComputeUnitLimit";
76
+ InstructionBuilderTypes["SetPriorityFee"] = "SetPriorityFee";
77
+ InstructionBuilderTypes["MintTo"] = "MintTo";
78
+ InstructionBuilderTypes["Burn"] = "Burn";
79
+ InstructionBuilderTypes["CustomInstruction"] = "CustomInstruction";
80
+ InstructionBuilderTypes["VersionedCustomInstruction"] = "VersionedCustomInstruction";
81
+ InstructionBuilderTypes["Approve"] = "Approve";
82
+ InstructionBuilderTypes["WithdrawStake"] = "WithdrawStake";
83
+ })(InstructionBuilderTypes || (InstructionBuilderTypes = {}));
84
+ export const VALID_SYSTEM_INSTRUCTION_TYPES = [
85
+ ValidInstructionTypesEnum.AdvanceNonceAccount,
86
+ ValidInstructionTypesEnum.Create,
87
+ ValidInstructionTypesEnum.StakingInitialize,
88
+ ValidInstructionTypesEnum.StakingDelegate,
89
+ ValidInstructionTypesEnum.StakingDeactivate,
90
+ ValidInstructionTypesEnum.StakingWithdraw,
91
+ ValidInstructionTypesEnum.Transfer,
92
+ ValidInstructionTypesEnum.InitializeNonceAccount,
93
+ ValidInstructionTypesEnum.Memo,
94
+ ValidInstructionTypesEnum.InitializeAssociatedTokenAccount,
95
+ ValidInstructionTypesEnum.CloseAssociatedTokenAccount,
96
+ ValidInstructionTypesEnum.RecoverNestedAssociatedTokenAccount,
97
+ ValidInstructionTypesEnum.TokenTransfer,
98
+ ValidInstructionTypesEnum.Allocate,
99
+ ValidInstructionTypesEnum.Assign,
100
+ ValidInstructionTypesEnum.Split,
101
+ ValidInstructionTypesEnum.Authorize,
102
+ ValidInstructionTypesEnum.SetComputeUnitLimit,
103
+ ValidInstructionTypesEnum.SetPriorityFee,
104
+ ValidInstructionTypesEnum.MintTo,
105
+ ValidInstructionTypesEnum.Burn,
106
+ ValidInstructionTypesEnum.Approve,
107
+ ValidInstructionTypesEnum.DepositSol,
108
+ ValidInstructionTypesEnum.WithdrawStake,
109
+ ValidInstructionTypesEnum.CustomInstruction,
110
+ ];
111
+ /** Const to check the order of the Wallet Init instructions when decode */
112
+ export const walletInitInstructionIndexes = {
113
+ Create: 0,
114
+ InitializeNonceAccount: 1,
115
+ Memo: 2,
116
+ };
117
+ /** Const to check the order of the Staking Activate instructions when decode */
118
+ export const stakingActivateInstructionsIndexes = {
119
+ Create: 0,
120
+ Initialize: 1,
121
+ Delegate: 2,
122
+ Memo: 3,
123
+ };
124
+ /** Const to check the order of the Marinade Staking Activate instructions when decode */
125
+ export const marinadeStakingActivateInstructionsIndexes = {
126
+ Create: 0,
127
+ Initialize: 1,
128
+ Memo: 2,
129
+ };
130
+ /** Const to check the order of the Jito Staking Activate instructions when decode */
131
+ export const jitoStakingActivateInstructionsIndexes = {
132
+ DepositSol: 0,
133
+ };
134
+ /** Const to check the order of the Jito Staking Activate instructions when decode */
135
+ export const jitoStakingActivateWithATAInstructionsIndexes = {
136
+ InitializeAssociatedTokenAccount: 0,
137
+ DepositSol: 1,
138
+ };
139
+ /** Const to check the order of the Jito Staking Activate instructions when decode */
140
+ export const jitoStakingDeactivateInstructionsIndexes = {
141
+ Approve: 0,
142
+ Create: 1,
143
+ WithdrawStake: 2,
144
+ };
145
+ /** Const to check the order of the Staking Authorize instructions when decode */
146
+ export const stakingAuthorizeInstructionsIndexes = {
147
+ Authorize: 0,
148
+ };
149
+ /** Const to check the order of the Staking Delegate instructions when decode */
150
+ export const stakingDelegateInstructionsIndexes = {
151
+ Delegate: 0,
152
+ };
153
+ /** Const to check the order of the Staking Deactivate instructions when decode */
154
+ export const stakingDeactivateInstructionsIndexes = {
155
+ Deactivate: 0,
156
+ Memo: 1,
157
+ };
158
+ /** Const to check the order of the Marinade Staking Deactivate instructions when decode */
159
+ export const marinadeStakingDeactivateInstructionsIndexes = {
160
+ Transfer: 0,
161
+ Memo: 1,
162
+ };
163
+ /** Const to check the order of the Partial Staking Deactivate instructions when decoded */
164
+ export const stakingPartialDeactivateInstructionsIndexes = {
165
+ Transfer: 0,
166
+ Allocate: 1,
167
+ Assign: 2,
168
+ Split: 3,
169
+ Deactivate: 4,
170
+ Memo: 5,
171
+ };
172
+ /** Const to check the order of the Staking Withdraw instructions when decode */
173
+ export const stakingWithdrawInstructionsIndexes = {
174
+ Withdraw: 0,
175
+ Memo: 1,
176
+ };
177
+ /** Const to check the order of the ATA init instructions when decode */
178
+ export const ataInitInstructionIndexes = {
179
+ InitializeAssociatedTokenAccount: 0,
180
+ Memo: 1,
181
+ };
182
+ /** Const to check the order of the ATA init instructions when decode */
183
+ export const ataCloseInstructionIndexes = {
184
+ CloseAssociatedTokenAccount: 0,
185
+ };
186
+ /** Const to check the order of the recover nested ATA instructions when decode */
187
+ export const ataRecoverNestedInstructionIndexes = {
188
+ RecoverNestedAssociatedTokenAccount: 0,
189
+ };
190
+ export const nonceAdvanceInstruction = 'AdvanceNonceAccount';
191
+ export const validInstructionData = '0a00000001000000';
192
+ export const validInstructionData2 = '0a00000000000000';
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLDZDQUE2QyxDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxPQUFPLENBQUM7QUFFeEQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0FBRTlDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxDQUFDO0FBRWhELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLDZDQUE2QyxDQUFDO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLDhDQUE4QyxDQUFDO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLDhDQUE4QyxDQUFDO0FBQzlGLE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLDZDQUE2QyxDQUFDO0FBQ3JHLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLDZDQUE2QyxDQUFDO0FBQ3RGLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLDhDQUE4QyxDQUFDO0FBRS9GLG1EQUFtRDtBQUNuRCxNQUFNLENBQU4sSUFBWSx5QkEwQlg7QUExQkQsV0FBWSx5QkFBeUI7SUFDbkMsd0VBQTJDLENBQUE7SUFDM0MsOENBQWlCLENBQUE7SUFDakIsOEVBQWlELENBQUE7SUFDakQsNkRBQWdDLENBQUE7SUFDaEMseURBQTRCLENBQUE7SUFDNUIsNkRBQWdDLENBQUE7SUFDaEMseURBQTRCLENBQUE7SUFDNUIsa0RBQXFCLENBQUE7SUFDckIsNERBQStCLENBQUE7SUFDL0IsMENBQWEs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Q0FBQztBQUVYLHdFQUF3RTtBQUN4RSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxnQ0FBZ0MsRUFBRSxDQUFDO0lBQ25DLElBQUksRUFBRSxDQUFDO0NBQ0MsQ0FBQztBQUVYLHdFQUF3RTtBQUN4RSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRztJQUN4QywyQkFBMkIsRUFBRSxDQUFDO0NBQ3RCLENBQUM7QUFFWCxrRkFBa0Y7QUFDbEYsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUc7SUFDaEQsbUNBQW1DLEVBQUUsQ0FBQztDQUM5QixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcscUJBQXFCLENBQUM7QUFDN0QsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQUM7QUFDdkQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWYWxpZEluc3RydWN0aW9uVHlwZXMgfSBmcm9tICcuL2lmYWNlJztcblxuZXhwb3J0IGNvbnN0IE1FTU9fUFJPR1JBTV9QSyA9ICdNZW1vU3E0Z3FBQkFYS2I5NnFuSDhUeXNOY1d4TXlXQ3FYZ0RMR21mY0hyJztcblxuZXhwb3J0IGNvbnN0IFNFRURfTEVOR1RIID0gMzI7XG5cbmV4cG9ydCBjb25zdCBNQVhfTUVNT19MRU5HVEggPSAxMzA7XG5leHBvcnQgY29uc3QgU1RBS0VfQUNDT1VOVF9SRU5UX0VYRU1QVF9BTU9VTlQgPSAyMjgyODgwO1xuXG5leHBvcnQgY29uc3QgVU5BVkFJTEFCTEVfVEVYVCA9ICdVTkFWQUlMQUJMRSc7XG5cbi8qKlxuICogTWF4aW11bSBvdmVyLXRoZS13aXJlIHNpemUgb2YgYSBTb2xhbmEgdHJhbnNhY3Rpb24gKGluIGJ5dGVzKVxuICpcbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2FuemEteHl6L2FnYXZlL2Jsb2IvdjIuMS4xMy9zZGsvcGFja2V0L3NyYy9saWIucnMjTDI3LUwyOVxuICpcbiAqIENhbGN1bGF0aW9uOlxuICogLSBJUHY2IG1pbmltdW0gTVRVOiAxMjgwIGJ5dGVzXG4gKiAtIElQdjYgaGVhZGVyOiA0MCBieXRlc1xuICogLSBGcmFnbWVudC9VRFAgaGVhZGVyOiA4IGJ5dGVzXG4gKiAtIFJlc3VsdDogMTI4MCAtIDQwIC0gOCA9IDEyMzIgYnl0ZXNcbiAqXG4gKiBUaGlzIGxpbWl0IGlzIGRlc2lnbmVkIHRvIGF2b2lkIHBhY2tldCBmcmFnbWVudGF0aW9uIG9uIHR5cGljYWwgaW50ZXJuZXQgaW5mcmFzdHJ1Y3R1cmUuXG4gKiBUcmFuc2FjdGlvbnMgZXhjZWVkaW5nIHRoaXMgbGltaXQgd2lsbCBmYWlsIHRvIHNlcmlhbGl6ZSB3aXRoIGEgUmFuZ2VFcnJvciBkdXJpbmdcbiAqIHRoZSBlbmNvZGluZyBvZiB0aGUgdHJhbnNhY3Rpb24gbWVzc2FnZS5cbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHBzOi8vc29sYW5hLmNvbS9kb2NzL2NvcmUvdHJhbnNhY3Rpb25zI3RyYW5zYWN0aW9uLXNpemVcbiAqL1xuZXhwb3J0IGNvbnN0IFNPTEFOQV9UUkFOU0FDVElPTl9NQVhfU0laRSA9IDEyMzI7XG5cbmV4cG9ydCBjb25zdCBKSVRPX1NUQUtFX1BPT0xfQUREUkVTUyA9ICdKaXRvNEFQeWY2NDJKUFpQeDNoR2M2V1dKOHpQS3RSYlJzNFA4MTVBd2JiJztcbmV4cG9ydCBjb25zdCBKSVRPU09MX01JTlRfQUREUkVTUyA9ICdKMXRvc28xdUNrM1JMbWpvcmhUdHJWd1k5SEo3WDhWOXlZYWM2WTdrR0NQbic7XG5leHBvcnQgY29uc3QgSklUT19TVEFLRV9QT09MX1JFU0VSVkVfQUNDT1VOVCA9ICdCZ0tVWGRTMjlZY0hDRnJQbTVNOG9MSGlUelphTURqc2ViZ2dqb2FRNktGTCc7XG5leHBvcnQgY29uc3QgSklUT19TVEFLRV9QT09MX1JFU0VSVkVfQUNDT1VOVF9URVNUTkVUID0gJ3JyV0JRcVJxQlhZWnczQ21QQ0NjakZ4UTJEczRKRkpkN29SUUo5OTdkaHonO1xuZXhwb3J0IGNvbnN0IEpJVE9fTUFOQUdFUl9GRUVfQUNDT1VOVCA9ICdmZWVlRkxMc2FtNnhaSkZjNlVRRnJIcWt2VnQ0amZtVnZpMkJSTGtVWjRpJztcbmV4cG9ydCBjb25zdCBKSVRPX01BTkFHRVJfRkVFX0FDQ09VTlRfVEVTVE5FVCA9ICdESDd0bWpvUTV6anFjZ2ZZSlUyMkpxbVhoUDVFWTF0a2JZcGdWV1VTMm9Obyc7XG5cbi8vIFNkayBpbnN0cnVjdGlvbnMsIG1haW5seSB0byBjaGVjayBkZWNvZGVkIHR5cGVzLlxuZXhwb3J0IGVudW0gVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bSB7XG4gIEFkdmFuY2VOb25jZUFjY291bnQgPSAnQWR2YW5jZU5vbmNlQWNjb3VudCcsXG4gIENyZWF0ZSA9ICdDcmVhdGUnLFxuICBJbml0aWFsaXplTm9uY2VBY2NvdW50ID0gJ0luaXRpYWxpemVOb25jZUFjY291bnQnLFxuICBTdGFraW5nSW5pdGlhbGl6ZSA9ICdJbml0aWFsaXplJyxcbiAgU3Rha2luZ0RlbGVnYXRlID0gJ0RlbGVnYXRlJyxcbiAgU3Rha2luZ0RlYWN0aXZhdGUgPSAnRGVhY3RpdmF0ZScsXG4gIFN0YWtpbmdXaXRoZHJhdyA9ICdXaXRoZHJhdycsXG4gIFRyYW5zZmVyID0gJ1RyYW5zZmVyJyxcbiAgVG9rZW5UcmFuc2ZlciA9ICdUb2tlblRyYW5zZmVyJyxcbiAgTWVtbyA9ICdNZW1vJyxcbiAgSW5pdGlhbGl6ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQgPSAnSW5pdGlhbGl6ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLFxuICBDbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQgPSAnQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50JyxcbiAgUmVjb3Zlck5lc3RlZEFzc29jaWF0ZWRUb2tlbkFjY291bnQgPSAnUmVjb3Zlck5lc3RlZEFzc29jaWF0ZWRUb2tlbkFjY291bnQnLFxuICBBbGxvY2F0ZSA9ICdBbGxvY2F0ZScsXG4gIEFzc2lnbiA9ICdBc3NpZ24nLFxuICBTcGxpdCA9ICdTcGxpdCcsXG4gIEF1dGhvcml6ZSA9ICdBdXRob3JpemUnLFxuICBTZXRDb21wdXRlVW5pdExpbWl0ID0gJ1NldENvbXB1dGVVbml0TGltaXQnLFxuICBTZXRQcmlvcml0eUZlZSA9ICdTZXRQcmlvcml0eUZlZScsXG4gIE1pbnRUbyA9ICdNaW50VG8nLFxuICBCdXJuID0gJ0J1cm4nLFxuICBEZXBvc2l0U29sID0gJ0RlcG9zaXRTb2wnLFxuICBXaXRoZHJhd1N0YWtlID0gJ1dpdGhkcmF3U3Rha2UnLFxuICBBcHByb3ZlID0gJ0FwcHJvdmUnLFxuICBDdXN0b21JbnN0cnVjdGlvbiA9ICdDdXN0b21JbnN0cnVjdGlvbicsXG59XG5cbi8vIEludGVybmFsIGluc3RydWN0aW9ucyB0eXBlc1xuZXhwb3J0IGVudW0gSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMge1xuICBDcmVhdGVOb25jZUFjY291bnQgPSAnQ3JlYXRlTm9uY2VBY2NvdW50JyxcbiAgU3Rha2luZ0FjdGl2YXRlID0gJ0FjdGl2YXRlJyxcbiAgU3Rha2luZ0RlYWN0aXZhdGUgPSAnRGVhY3RpdmF0ZScsXG4gIFN0YWtpbmdXaXRoZHJhdyA9ICdXaXRoZHJhdycsXG4gIFRyYW5zZmVyID0gJ1RyYW5zZmVyJyxcbiAgTWVtbyA9ICdNZW1vJyxcbiAgTm9uY2VBZHZhbmNlID0gJ05vbmNlQWR2YW5jZScsXG4gIENyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQgPSAnQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsXG4gIENsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCA9ICdDbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLFxuICBSZWNvdmVyTmVzdGVkQXNzb2NpYXRlZFRva2VuQWNjb3VudCA9ICdSZWNvdmVyTmVzdGVkQXNzb2NpYXRlZFRva2VuQWNjb3VudCcsXG4gIFRva2VuVHJhbnNmZXIgPSAnVG9rZW5UcmFuc2ZlcicsXG4gIFN0YWtpbmdBdXRob3JpemUgPSAnQXV0aG9yaXplJyxcbiAgU3Rha2luZ0RlbGVnYXRlID0gJ0RlbGVnYXRlJyxcbiAgU2V0Q29tcHV0ZVVuaXRMaW1pdCA9ICdTZXRDb21wdXRlVW5pdExpbWl0JyxcbiAgU2V0UHJpb3JpdHlGZWUgPSAnU2V0UHJpb3JpdHlGZWUnLFxuICBNaW50VG8gPSAnTWludFRvJyxcbiAgQnVybiA9ICdCdXJuJyxcbiAgQ3VzdG9tSW5zdHJ1Y3Rpb24gPSAnQ3VzdG9tSW5zdHJ1Y3Rpb24nLFxuICBWZXJzaW9uZWRDdXN0b21JbnN0cnVjdGlvbiA9ICdWZXJzaW9uZWRDdXN0b21JbnN0cnVjdGlvbicsXG4gIEFwcHJvdmUgPSAnQXBwcm92ZScsXG4gIFdpdGhkcmF3U3Rha2UgPSAnV2l0aGRyYXdTdGFrZScsXG59XG5cbmV4cG9ydCBjb25zdCBWQUxJRF9TWVNURU1fSU5TVFJVQ1RJT05fVFlQRVM6IFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc1tdID0gW1xuICBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkFkdmFuY2VOb25jZUFjY291bnQsXG4gIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQ3JlYXRlLFxuICBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLlN0YWtpbmdJbml0aWFsaXplLFxuICBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLlN0YWtpbmdEZWxlZ2F0ZSxcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TdGFraW5nRGVhY3RpdmF0ZSxcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TdGFraW5nV2l0aGRyYXcsXG4gIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uVHJhbnNmZXIsXG4gIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uSW5pdGlhbGl6ZU5vbmNlQWNjb3VudCxcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5NZW1vLFxuICBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkluaXRpYWxpemVBc3NvY2lhdGVkVG9rZW5BY2NvdW50LFxuICBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCxcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5SZWNvdmVyTmVzdGVkQXNzb2NpYXRlZFRva2VuQWNjb3VudCxcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5Ub2tlblRyYW5zZmVyLFxuICBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkFsbG9jYXRlLFxuICBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkFzc2lnbixcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TcGxpdCxcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BdXRob3JpemUsXG4gIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uU2V0Q29tcHV0ZVVuaXRMaW1pdCxcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5TZXRQcmlvcml0eUZlZSxcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5NaW50VG8sXG4gIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uQnVybixcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BcHByb3ZlLFxuICBWYWxpZEluc3RydWN0aW9uVHlwZXNFbnVtLkRlcG9zaXRTb2wsXG4gIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uV2l0aGRyYXdTdGFrZSxcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5DdXN0b21JbnN0cnVjdGlvbixcbl07XG5cbi8qKiBDb25zdCB0byBjaGVjayB0aGUgb3JkZXIgb2YgdGhlIFdhbGxldCBJbml0IGluc3RydWN0aW9ucyB3aGVuIGRlY29kZSAqL1xuZXhwb3J0IGNvbnN0IHdhbGxldEluaXRJbnN0cnVjdGlvbkluZGV4ZXMgPSB7XG4gIENyZWF0ZTogMCxcbiAgSW5pdGlhbGl6ZU5vbmNlQWNjb3VudDogMSxcbiAgTWVtbzogMixcbn0gYXMgY29uc3Q7XG5cbi8qKiBDb25zdCB0byBjaGVjayB0aGUgb3JkZXIgb2YgdGhlIFN0YWtpbmcgQWN0aXZhdGUgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVjb2RlICovXG5leHBvcnQgY29uc3Qgc3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zSW5kZXhlcyA9IHtcbiAgQ3JlYXRlOiAwLFxuICBJbml0aWFsaXplOiAxLFxuICBEZWxlZ2F0ZTogMixcbiAgTWVtbzogMyxcbn0gYXMgY29uc3Q7XG5cbi8qKiBDb25zdCB0byBjaGVjayB0aGUgb3JkZXIgb2YgdGhlIE1hcmluYWRlIFN0YWtpbmcgQWN0aXZhdGUgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVjb2RlICovXG5leHBvcnQgY29uc3QgbWFyaW5hZGVTdGFraW5nQWN0aXZhdGVJbnN0cnVjdGlvbnNJbmRleGVzID0ge1xuICBDcmVhdGU6IDAsXG4gIEluaXRpYWxpemU6IDEsXG4gIE1lbW86IDIsXG59IGFzIGNvbnN0O1xuXG4vKiogQ29uc3QgdG8gY2hlY2sgdGhlIG9yZGVyIG9mIHRoZSBKaXRvIFN0YWtpbmcgQWN0aXZhdGUgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVjb2RlICovXG5leHBvcnQgY29uc3Qgaml0b1N0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXMgPSB7XG4gIERlcG9zaXRTb2w6IDAsXG59IGFzIGNvbnN0O1xuXG4vKiogQ29uc3QgdG8gY2hlY2sgdGhlIG9yZGVyIG9mIHRoZSBKaXRvIFN0YWtpbmcgQWN0aXZhdGUgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVjb2RlICovXG5leHBvcnQgY29uc3Qgaml0b1N0YWtpbmdBY3RpdmF0ZVdpdGhBVEFJbnN0cnVjdGlvbnNJbmRleGVzID0ge1xuICBJbml0aWFsaXplQXNzb2NpYXRlZFRva2VuQWNjb3VudDogMCxcbiAgRGVwb3NpdFNvbDogMSxcbn0gYXMgY29uc3Q7XG5cbi8qKiBDb25zdCB0byBjaGVjayB0aGUgb3JkZXIgb2YgdGhlIEppdG8gU3Rha2luZyBBY3RpdmF0ZSBpbnN0cnVjdGlvbnMgd2hlbiBkZWNvZGUgKi9cbmV4cG9ydCBjb25zdCBqaXRvU3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbnNJbmRleGVzID0ge1xuICBBcHByb3ZlOiAwLFxuICBDcmVhdGU6IDEsXG4gIFdpdGhkcmF3U3Rha2U6IDIsXG59IGFzIGNvbnN0O1xuXG4vKiogQ29uc3QgdG8gY2hlY2sgdGhlIG9yZGVyIG9mIHRoZSBTdGFraW5nIEF1dGhvcml6ZSBpbnN0cnVjdGlvbnMgd2hlbiBkZWNvZGUgKi9cbmV4cG9ydCBjb25zdCBzdGFraW5nQXV0aG9yaXplSW5zdHJ1Y3Rpb25zSW5kZXhlcyA9IHtcbiAgQXV0aG9yaXplOiAwLFxufSBhcyBjb25zdDtcblxuLyoqIENvbnN0IHRvIGNoZWNrIHRoZSBvcmRlciBvZiB0aGUgU3Rha2luZyBEZWxlZ2F0ZSBpbnN0cnVjdGlvbnMgd2hlbiBkZWNvZGUgKi9cbmV4cG9ydCBjb25zdCBzdGFraW5nRGVsZWdhdGVJbnN0cnVjdGlvbnNJbmRleGVzID0ge1xuICBEZWxlZ2F0ZTogMCxcbn0gYXMgY29uc3Q7XG5cbi8qKiBDb25zdCB0byBjaGVjayB0aGUgb3JkZXIgb2YgdGhlIFN0YWtpbmcgRGVhY3RpdmF0ZSBpbnN0cnVjdGlvbnMgd2hlbiBkZWNvZGUgKi9cbmV4cG9ydCBjb25zdCBzdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXMgPSB7XG4gIERlYWN0aXZhdGU6IDAsXG4gIE1lbW86IDEsXG59IGFzIGNvbnN0O1xuXG4vKiogQ29uc3QgdG8gY2hlY2sgdGhlIG9yZGVyIG9mIHRoZSBNYXJpbmFkZSBTdGFraW5nIERlYWN0aXZhdGUgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVjb2RlICovXG5leHBvcnQgY29uc3QgbWFyaW5hZGVTdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXMgPSB7XG4gIFRyYW5zZmVyOiAwLFxuICBNZW1vOiAxLFxufSBhcyBjb25zdDtcblxuLyoqIENvbnN0IHRvIGNoZWNrIHRoZSBvcmRlciBvZiB0aGUgUGFydGlhbCBTdGFraW5nIERlYWN0aXZhdGUgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVjb2RlZCAqL1xuZXhwb3J0IGNvbnN0IHN0YWtpbmdQYXJ0aWFsRGVhY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXMgPSB7XG4gIFRyYW5zZmVyOiAwLFxuICBBbGxvY2F0ZTogMSxcbiAgQXNzaWduOiAyLFxuICBTcGxpdDogMyxcbiAgRGVhY3RpdmF0ZTogNCxcbiAgTWVtbzogNSxcbn0gYXMgY29uc3Q7XG5cbi8qKiBDb25zdCB0byBjaGVjayB0aGUgb3JkZXIgb2YgdGhlIFN0YWtpbmcgV2l0aGRyYXcgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVjb2RlICovXG5leHBvcnQgY29uc3Qgc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb25zSW5kZXhlcyA9IHtcbiAgV2l0aGRyYXc6IDAsXG4gIE1lbW86IDEsXG59IGFzIGNvbnN0O1xuXG4vKiogQ29uc3QgdG8gY2hlY2sgdGhlIG9yZGVyIG9mIHRoZSBBVEEgaW5pdCBpbnN0cnVjdGlvbnMgd2hlbiBkZWNvZGUgKi9cbmV4cG9ydCBjb25zdCBhdGFJbml0SW5zdHJ1Y3Rpb25JbmRleGVzID0ge1xuICBJbml0aWFsaXplQXNzb2NpYXRlZFRva2VuQWNjb3VudDogMCxcbiAgTWVtbzogMSxcbn0gYXMgY29uc3Q7XG5cbi8qKiBDb25zdCB0byBjaGVjayB0aGUgb3JkZXIgb2YgdGhlIEFUQSBpbml0IGluc3RydWN0aW9ucyB3aGVuIGRlY29kZSAqL1xuZXhwb3J0IGNvbnN0IGF0YUNsb3NlSW5zdHJ1Y3Rpb25JbmRleGVzID0ge1xuICBDbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQ6IDAsXG59IGFzIGNvbnN0O1xuXG4vKiogQ29uc3QgdG8gY2hlY2sgdGhlIG9yZGVyIG9mIHRoZSByZWNvdmVyIG5lc3RlZCBBVEEgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVjb2RlICovXG5leHBvcnQgY29uc3QgYXRhUmVjb3Zlck5lc3RlZEluc3RydWN0aW9uSW5kZXhlcyA9IHtcbiAgUmVjb3Zlck5lc3RlZEFzc29jaWF0ZWRUb2tlbkFjY291bnQ6IDAsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3Qgbm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24gPSAnQWR2YW5jZU5vbmNlQWNjb3VudCc7XG5leHBvcnQgY29uc3QgdmFsaWRJbnN0cnVjdGlvbkRhdGEgPSAnMGEwMDAwMDAwMTAwMDAwMCc7XG5leHBvcnQgY29uc3QgdmFsaWRJbnN0cnVjdGlvbkRhdGEyID0gJzBhMDAwMDAwMDAwMDAwMDAnO1xuIl19
@@ -0,0 +1,72 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { SolInstruction, SolVersionedInstruction, TransactionType } from '@bitgo-beta/sdk-core';
3
+ import { Transaction } from './transaction';
4
+ import { TransactionBuilder } from './transactionBuilder';
5
+ import { CustomInstruction, VersionedCustomInstruction, VersionedTransactionData } from './iface';
6
+ /**
7
+ * Transaction builder for custom Solana instructions.
8
+ * Allows building transactions with any set of raw Solana instructions.
9
+ */
10
+ export declare class CustomInstructionBuilder extends TransactionBuilder {
11
+ private _customInstructions;
12
+ constructor(_coinConfig: Readonly<CoinConfig>);
13
+ protected get transactionType(): TransactionType;
14
+ /**
15
+ * Initialize the builder from an existing transaction
16
+ */
17
+ initBuilder(tx: Transaction): void;
18
+ /**
19
+ * Add a custom instruction to the transaction
20
+ * @param instruction - The custom instruction to add
21
+ * @returns This builder instance
22
+ */
23
+ addCustomInstruction(instruction: SolInstruction | SolVersionedInstruction): this;
24
+ /**
25
+ * Add multiple custom instructions to the transaction
26
+ * @param instructions - Array of custom instructions to add
27
+ * @returns This builder instance
28
+ */
29
+ addCustomInstructions(instructions: (SolInstruction | SolVersionedInstruction)[]): this;
30
+ /**
31
+ * Build transaction from deconstructed VersionedTransaction data
32
+ * @param data - VersionedTransactionData containing instructions, ALTs, and account keys
33
+ * @returns This builder instance
34
+ */
35
+ fromVersionedTransactionData(data: VersionedTransactionData): this;
36
+ /**
37
+ * Inject nonce advance instruction into versioned transaction data for durable nonce support.
38
+ * Reorders accounts so signers appear first (required by Solana MessageV0 format).
39
+ * @param data - Original versioned transaction data
40
+ * @returns Modified versioned transaction data with nonce advance instruction
41
+ * @private
42
+ */
43
+ private injectNonceAdvanceInstruction;
44
+ /**
45
+ * Clear all custom instructions and versioned transaction data
46
+ * @returns This builder instance
47
+ */
48
+ clearInstructions(): this;
49
+ /**
50
+ * Get the current custom instructions
51
+ * @returns Array of custom instructions
52
+ */
53
+ getInstructions(): (CustomInstruction | VersionedCustomInstruction)[];
54
+ /**
55
+ * Validate custom instruction format
56
+ * @param instruction - The instruction to validate
57
+ */
58
+ private validateInstruction;
59
+ /**
60
+ * Validate traditional SolInstruction format
61
+ * @param instruction - The traditional instruction to validate
62
+ */
63
+ private validateSolInstruction;
64
+ /**
65
+ * Validate versioned instruction format
66
+ * @param instruction - The versioned instruction to validate
67
+ */
68
+ private validateVersionedInstruction;
69
+ /** @inheritdoc */
70
+ protected buildImplementation(): Promise<Transaction>;
71
+ }
72
+ //# sourceMappingURL=customInstructionBuilder.d.ts.map
@@ -0,0 +1,282 @@
1
+ import { BuildTransactionError, TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { PublicKey, SystemProgram, SYSVAR_RECENT_BLOCKHASHES_PUBKEY } from '@solana/web3.js';
3
+ import { Transaction } from './transaction';
4
+ import { TransactionBuilder } from './transactionBuilder';
5
+ import { InstructionBuilderTypes } from './constants';
6
+ import { isSolLegacyInstruction } from './utils';
7
+ import assert from 'assert';
8
+ /**
9
+ * Transaction builder for custom Solana instructions.
10
+ * Allows building transactions with any set of raw Solana instructions.
11
+ */
12
+ export class CustomInstructionBuilder extends TransactionBuilder {
13
+ constructor(_coinConfig) {
14
+ super(_coinConfig);
15
+ this._customInstructions = [];
16
+ }
17
+ get transactionType() {
18
+ return TransactionType.CustomTx;
19
+ }
20
+ /**
21
+ * Initialize the builder from an existing transaction
22
+ */
23
+ initBuilder(tx) {
24
+ super.initBuilder(tx);
25
+ for (const instruction of this._instructionsData) {
26
+ if (instruction.type === InstructionBuilderTypes.CustomInstruction) {
27
+ const customInstruction = instruction;
28
+ this.addCustomInstruction(customInstruction.params);
29
+ }
30
+ else if (instruction.type === InstructionBuilderTypes.VersionedCustomInstruction) {
31
+ const versionedCustomInstruction = instruction;
32
+ this.addCustomInstruction(versionedCustomInstruction.params);
33
+ }
34
+ }
35
+ }
36
+ /**
37
+ * Add a custom instruction to the transaction
38
+ * @param instruction - The custom instruction to add
39
+ * @returns This builder instance
40
+ */
41
+ addCustomInstruction(instruction) {
42
+ this.validateInstruction(instruction);
43
+ if (isSolLegacyInstruction(instruction)) {
44
+ const customInstruction = {
45
+ type: InstructionBuilderTypes.CustomInstruction,
46
+ params: instruction,
47
+ };
48
+ this._customInstructions.push(customInstruction);
49
+ }
50
+ else {
51
+ const versionedCustomInstruction = {
52
+ type: InstructionBuilderTypes.VersionedCustomInstruction,
53
+ params: instruction,
54
+ };
55
+ this._customInstructions.push(versionedCustomInstruction);
56
+ }
57
+ return this;
58
+ }
59
+ /**
60
+ * Add multiple custom instructions to the transaction
61
+ * @param instructions - Array of custom instructions to add
62
+ * @returns This builder instance
63
+ */
64
+ addCustomInstructions(instructions) {
65
+ if (!Array.isArray(instructions)) {
66
+ throw new BuildTransactionError('Instructions must be an array');
67
+ }
68
+ for (const instruction of instructions) {
69
+ this.addCustomInstruction(instruction);
70
+ }
71
+ return this;
72
+ }
73
+ /**
74
+ * Build transaction from deconstructed VersionedTransaction data
75
+ * @param data - VersionedTransactionData containing instructions, ALTs, and account keys
76
+ * @returns This builder instance
77
+ */
78
+ fromVersionedTransactionData(data) {
79
+ try {
80
+ if (!data || typeof data !== 'object') {
81
+ throw new BuildTransactionError('VersionedTransactionData must be a valid object');
82
+ }
83
+ if (!Array.isArray(data.versionedInstructions) || data.versionedInstructions.length === 0) {
84
+ throw new BuildTransactionError('versionedInstructions must be a non-empty array');
85
+ }
86
+ if (!Array.isArray(data.addressLookupTables)) {
87
+ throw new BuildTransactionError('addressLookupTables must be an array');
88
+ }
89
+ if (!Array.isArray(data.staticAccountKeys) || data.staticAccountKeys.length === 0) {
90
+ throw new BuildTransactionError('staticAccountKeys must be a non-empty array');
91
+ }
92
+ if (!data.messageHeader || typeof data.messageHeader !== 'object') {
93
+ throw new BuildTransactionError('messageHeader must be a valid object');
94
+ }
95
+ if (typeof data.messageHeader.numRequiredSignatures !== 'number' ||
96
+ data.messageHeader.numRequiredSignatures < 0) {
97
+ throw new BuildTransactionError('messageHeader.numRequiredSignatures must be a non-negative number');
98
+ }
99
+ if (typeof data.messageHeader.numReadonlySignedAccounts !== 'number' ||
100
+ data.messageHeader.numReadonlySignedAccounts < 0) {
101
+ throw new BuildTransactionError('messageHeader.numReadonlySignedAccounts must be a non-negative number');
102
+ }
103
+ if (typeof data.messageHeader.numReadonlyUnsignedAccounts !== 'number' ||
104
+ data.messageHeader.numReadonlyUnsignedAccounts < 0) {
105
+ throw new BuildTransactionError('messageHeader.numReadonlyUnsignedAccounts must be a non-negative number');
106
+ }
107
+ let processedData = data;
108
+ if (this._nonceInfo && this._nonceInfo.params) {
109
+ processedData = this.injectNonceAdvanceInstruction(data);
110
+ }
111
+ this.addCustomInstructions(processedData.versionedInstructions);
112
+ if (!this._transaction) {
113
+ this._transaction = new Transaction(this._coinConfig);
114
+ }
115
+ this._transaction.setVersionedTransactionData(processedData);
116
+ this._transaction.setTransactionType(TransactionType.CustomTx);
117
+ if (!this._sender && processedData.staticAccountKeys.length > 0) {
118
+ this._sender = processedData.staticAccountKeys[0];
119
+ }
120
+ return this;
121
+ }
122
+ catch (error) {
123
+ if (error instanceof BuildTransactionError) {
124
+ throw error;
125
+ }
126
+ throw new BuildTransactionError(`Failed to process versioned transaction data: ${error.message}`);
127
+ }
128
+ }
129
+ /**
130
+ * Inject nonce advance instruction into versioned transaction data for durable nonce support.
131
+ * Reorders accounts so signers appear first (required by Solana MessageV0 format).
132
+ * @param data - Original versioned transaction data
133
+ * @returns Modified versioned transaction data with nonce advance instruction
134
+ * @private
135
+ */
136
+ injectNonceAdvanceInstruction(data) {
137
+ const { walletNonceAddress, authWalletAddress } = this._nonceInfo.params;
138
+ const SYSTEM_PROGRAM = SystemProgram.programId.toBase58();
139
+ const SYSVAR_RECENT_BLOCKHASHES = SYSVAR_RECENT_BLOCKHASHES_PUBKEY.toBase58();
140
+ const numSigners = data.messageHeader.numRequiredSignatures;
141
+ const originalSigners = data.staticAccountKeys.slice(0, numSigners);
142
+ const originalNonSigners = data.staticAccountKeys.slice(numSigners);
143
+ if (!originalSigners.includes(authWalletAddress)) {
144
+ originalSigners.push(authWalletAddress);
145
+ }
146
+ const nonSigners = [...originalNonSigners];
147
+ const allKeys = [...originalSigners, ...originalNonSigners];
148
+ if (!allKeys.includes(SYSTEM_PROGRAM))
149
+ nonSigners.push(SYSTEM_PROGRAM);
150
+ if (!allKeys.includes(walletNonceAddress))
151
+ nonSigners.push(walletNonceAddress);
152
+ if (!allKeys.includes(SYSVAR_RECENT_BLOCKHASHES))
153
+ nonSigners.push(SYSVAR_RECENT_BLOCKHASHES);
154
+ const newStaticAccountKeys = [...originalSigners, ...nonSigners];
155
+ const nonceAdvanceInstruction = {
156
+ programIdIndex: newStaticAccountKeys.indexOf(SYSTEM_PROGRAM),
157
+ accountKeyIndexes: [
158
+ newStaticAccountKeys.indexOf(walletNonceAddress),
159
+ newStaticAccountKeys.indexOf(SYSVAR_RECENT_BLOCKHASHES),
160
+ newStaticAccountKeys.indexOf(authWalletAddress),
161
+ ],
162
+ data: '6vx8P', // SystemProgram AdvanceNonceAccount (0x04000000) in base58
163
+ };
164
+ const indexMap = new Map(data.staticAccountKeys.map((key, oldIdx) => [oldIdx, newStaticAccountKeys.indexOf(key)]));
165
+ const remappedInstructions = data.versionedInstructions.map((inst) => ({
166
+ programIdIndex: indexMap.get(inst.programIdIndex) ?? inst.programIdIndex,
167
+ accountKeyIndexes: inst.accountKeyIndexes.map((idx) => indexMap.get(idx) ?? idx),
168
+ data: inst.data,
169
+ }));
170
+ return {
171
+ ...data,
172
+ versionedInstructions: [nonceAdvanceInstruction, ...remappedInstructions],
173
+ staticAccountKeys: newStaticAccountKeys,
174
+ messageHeader: {
175
+ ...data.messageHeader,
176
+ numRequiredSignatures: originalSigners.length,
177
+ },
178
+ };
179
+ }
180
+ /**
181
+ * Clear all custom instructions and versioned transaction data
182
+ * @returns This builder instance
183
+ */
184
+ clearInstructions() {
185
+ this._customInstructions = [];
186
+ if (this._transaction) {
187
+ this._transaction.setVersionedTransactionData(undefined);
188
+ }
189
+ return this;
190
+ }
191
+ /**
192
+ * Get the current custom instructions
193
+ * @returns Array of custom instructions
194
+ */
195
+ getInstructions() {
196
+ return [...this._customInstructions];
197
+ }
198
+ /**
199
+ * Validate custom instruction format
200
+ * @param instruction - The instruction to validate
201
+ */
202
+ validateInstruction(instruction) {
203
+ if (!instruction) {
204
+ throw new BuildTransactionError('Instruction cannot be null or undefined');
205
+ }
206
+ if (isSolLegacyInstruction(instruction)) {
207
+ this.validateSolInstruction(instruction);
208
+ }
209
+ else {
210
+ this.validateVersionedInstruction(instruction);
211
+ }
212
+ }
213
+ /**
214
+ * Validate traditional SolInstruction format
215
+ * @param instruction - The traditional instruction to validate
216
+ */
217
+ validateSolInstruction(instruction) {
218
+ if (!instruction.programId || typeof instruction.programId !== 'string') {
219
+ throw new BuildTransactionError('Instruction must have a valid programId string');
220
+ }
221
+ // Validate that programId is a valid Solana public key
222
+ try {
223
+ new PublicKey(instruction.programId);
224
+ }
225
+ catch (error) {
226
+ throw new BuildTransactionError('Invalid programId format');
227
+ }
228
+ if (!instruction.keys || !Array.isArray(instruction.keys)) {
229
+ throw new BuildTransactionError('Instruction must have valid keys array');
230
+ }
231
+ // Validate each key
232
+ for (const key of instruction.keys) {
233
+ if (!key.pubkey || typeof key.pubkey !== 'string') {
234
+ throw new BuildTransactionError('Each key must have a valid pubkey string');
235
+ }
236
+ try {
237
+ new PublicKey(key.pubkey);
238
+ }
239
+ catch (error) {
240
+ throw new BuildTransactionError('Invalid pubkey format in keys');
241
+ }
242
+ if (typeof key.isSigner !== 'boolean') {
243
+ throw new BuildTransactionError('Each key must have a boolean isSigner field');
244
+ }
245
+ if (typeof key.isWritable !== 'boolean') {
246
+ throw new BuildTransactionError('Each key must have a boolean isWritable field');
247
+ }
248
+ }
249
+ if (instruction.data === undefined || typeof instruction.data !== 'string') {
250
+ throw new BuildTransactionError('Instruction must have valid data string');
251
+ }
252
+ }
253
+ /**
254
+ * Validate versioned instruction format
255
+ * @param instruction - The versioned instruction to validate
256
+ */
257
+ validateVersionedInstruction(instruction) {
258
+ if (typeof instruction.programIdIndex !== 'number' || instruction.programIdIndex < 0) {
259
+ throw new BuildTransactionError('Versioned instruction must have a valid programIdIndex number');
260
+ }
261
+ if (!instruction.accountKeyIndexes || !Array.isArray(instruction.accountKeyIndexes)) {
262
+ throw new BuildTransactionError('Versioned instruction must have valid accountKeyIndexes array');
263
+ }
264
+ // Validate each account key index
265
+ for (const index of instruction.accountKeyIndexes) {
266
+ if (typeof index !== 'number' || index < 0) {
267
+ throw new BuildTransactionError('Each accountKeyIndex must be a non-negative number');
268
+ }
269
+ }
270
+ if (instruction.data === undefined || typeof instruction.data !== 'string') {
271
+ throw new BuildTransactionError('Versioned instruction must have valid data string');
272
+ }
273
+ }
274
+ /** @inheritdoc */
275
+ async buildImplementation() {
276
+ assert(this._customInstructions.length > 0, 'At least one custom instruction must be specified');
277
+ // Set the instructions data to our custom instructions
278
+ this._instructionsData = [...this._customInstructions];
279
+ return await super.buildImplementation();
280
+ }
281
+ }
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHFCQUFxQixFQUEyQyxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2SCxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXRELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUI7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGtCQUFrQjtJQUc5RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUhiLHdCQUFtQixHQUF1RCxFQUFFLENBQUM7SUFJckYsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLGVBQWUsQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLEVBQWU7UUFDekIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0QixLQUFLLE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyx1QkFBdUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNuRSxNQUFNLGlCQUFpQixHQUFHLFdBQWdDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxv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QUFxQixDQUFDLG9EQUFvRCxDQUFDLENBQUM7WUFDeEYsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLE9BQU8sV0FBVyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzRSxNQUFNLElBQUkscUJBQXFCLENBQUMsbURBQW1ELENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLG1EQUFtRCxDQUFDLENBQUM7UUFFakcsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFdkQsT0FBTyxNQUFNLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzNDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgU29sSW5zdHJ1Y3Rpb24sIFNvbFZlcnNpb25lZEluc3RydWN0aW9uLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBQdWJsaWNLZXksIFN5c3RlbVByb2dyYW0sIFNZU1ZBUl9SRUNFTlRfQkxPQ0tIQVNIRVNfUFVCS0VZIH0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEN1c3RvbUluc3RydWN0aW9uLCBWZXJzaW9uZWRDdXN0b21JbnN0cnVjdGlvbiwgVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBpc1NvbExlZ2FjeUluc3RydWN0aW9uIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbi8qKlxuICogVHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgY3VzdG9tIFNvbGFuYSBpbnN0cnVjdGlvbnMuXG4gKiBBbGxvd3MgYnVpbGRpbmcgdHJhbnNhY3Rpb25zIHdpdGggYW55IHNldCBvZiByYXcgU29sYW5hIGluc3RydWN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbUluc3RydWN0aW9uQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByaXZhdGUgX2N1c3RvbUluc3RydWN0aW9uczogKEN1c3RvbUluc3RydWN0aW9uIHwgVmVyc2lvbmVkQ3VzdG9tSW5zdHJ1Y3Rpb24pW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHg7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYnVpbGRlciBmcm9tIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG5cbiAgICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIHRoaXMuX2luc3RydWN0aW9uc0RhdGEpIHtcbiAgICAgIGlmIChpbnN0cnVjdGlvbi50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DdXN0b21JbnN0cnVjdGlvbikge1xuICAgICAgICBjb25zdCBjdXN0b21JbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uIGFzIEN1c3RvbUluc3RydWN0aW9uO1xuICAgICAgICB0aGlzLmFkZEN1c3RvbUluc3RydWN0aW9uKGN1c3RvbUluc3RydWN0aW9uLnBhcmFtcyk7XG4gICAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlZlcnNpb25lZEN1c3RvbUluc3RydWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb25lZEN1c3RvbUluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24gYXMgVmVyc2lvbmVkQ3VzdG9tSW5zdHJ1Y3Rpb247XG4gICAgICAgIHRoaXMuYWRkQ3VzdG9tSW5zdHJ1Y3Rpb24odmVyc2lvbmVkQ3VzdG9tSW5zdHJ1Y3Rpb24ucGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIGluc3RydWN0aW9uIHRvIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gaW5zdHJ1Y3Rpb24gLSBUaGUgY3VzdG9tIGluc3RydWN0aW9uIHRvIGFkZFxuICAgKiBAcmV0dXJucyBUaGlzIGJ1aWxkZXIgaW5zdGFuY2VcbiAgICovXG4gIGFkZEN1c3RvbUluc3RydWN0aW9uKGluc3RydWN0aW9uOiBTb2xJbnN0cnVjdGlvbiB8IFNvbFZlcnNpb25lZEluc3RydWN0aW9uKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUluc3RydWN0aW9uKGluc3RydWN0aW9uKTtcblxuICAgIGlmIChpc1NvbExlZ2FjeUluc3RydWN0aW9uKGluc3RydWN0aW9uKSkge1xuICAgICAgY29uc3QgY3VzdG9tSW5zdHJ1Y3Rpb246IEN1c3RvbUluc3RydWN0aW9uID0ge1xuICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DdXN0b21JbnN0cnVjdGlvbixcbiAgICAgICAgcGFyYW1zOiBpbnN0cnVjdGlvbixcbiAgICAgIH07XG4gICAgICB0aGlzLl9jdXN0b21JbnN0cnVjdGlvbnMucHVzaChjdXN0b21JbnN0cnVjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZlcnNpb25lZEN1c3RvbUluc3RydWN0aW9uOiBWZXJzaW9uZWRDdXN0b21JbnN0cnVjdGlvbiA9IHtcbiAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyc2lvbmVkQ3VzdG9tSW5zdHJ1Y3Rpb24sXG4gICAgICAgIHBhcmFtczogaW5zdHJ1Y3Rpb24sXG4gICAgICB9O1xuICAgICAgdGhpcy5fY3VzdG9tSW5zdHJ1Y3Rpb25zLnB1c2godmVyc2lvbmVkQ3VzdG9tSW5zdHJ1Y3Rpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBtdWx0aXBsZSBjdXN0b20gaW5zdHJ1Y3Rpb25zIHRvIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gaW5zdHJ1Y3Rpb25zIC0gQXJyYXkgb2YgY3VzdG9tIGluc3RydWN0aW9ucyB0byBhZGRcbiAgICogQHJldHVybnMgVGhpcyBidWlsZGVyIGluc3RhbmNlXG4gICAqL1xuICBhZGRDdXN0b21JbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zOiAoU29sSW5zdHJ1Y3Rpb24gfCBTb2xWZXJzaW9uZWRJbnN0cnVjdGlvbilbXSk6IHRoaXMge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpbnN0cnVjdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnN0cnVjdGlvbnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIGluc3RydWN0aW9ucykge1xuICAgICAgdGhpcy5hZGRDdXN0b21JbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRyYW5zYWN0aW9uIGZyb20gZGVjb25zdHJ1Y3RlZCBWZXJzaW9uZWRUcmFuc2FjdGlvbiBkYXRhXG4gICAqIEBwYXJhbSBkYXRhIC0gVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhIGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb25zLCBBTFRzLCBhbmQgYWNjb3VudCBrZXlzXG4gICAqIEByZXR1cm5zIFRoaXMgYnVpbGRlciBpbnN0YW5jZVxuICAgKi9cbiAgZnJvbVZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YShkYXRhOiBWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEpOiB0aGlzIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgbXVzdCBiZSBhIHZhbGlkIG9iamVjdCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS52ZXJzaW9uZWRJbnN0cnVjdGlvbnMpIHx8IGRhdGEudmVyc2lvbmVkSW5zdHJ1Y3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd2ZXJzaW9uZWRJbnN0cnVjdGlvbnMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5hZGRyZXNzTG9va3VwVGFibGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdhZGRyZXNzTG9va3VwVGFibGVzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEuc3RhdGljQWNjb3VudEtleXMpIHx8IGRhdGEuc3RhdGljQWNjb3VudEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3N0YXRpY0FjY291bnRLZXlzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkYXRhLm1lc3NhZ2VIZWFkZXIgfHwgdHlwZW9mIGRhdGEubWVzc2FnZUhlYWRlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignbWVzc2FnZUhlYWRlciBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBkYXRhLm1lc3NhZ2VIZWFkZXIubnVtUmVxdWlyZWRTaWduYXR1cmVzICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICBkYXRhLm1lc3NhZ2VIZWFkZXIubnVtUmVxdWlyZWRTaWduYXR1cmVzIDwgMFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ21lc3NhZ2VIZWFkZXIubnVtUmVxdWlyZWRTaWduYXR1cmVzIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBkYXRhLm1lc3NhZ2VIZWFkZXIubnVtUmVhZG9ubHlTaWduZWRBY2NvdW50cyAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgZGF0YS5tZXNzYWdlSGVhZGVyLm51bVJlYWRvbmx5U2lnbmVkQWNjb3VudHMgPCAwXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignbWVzc2FnZUhlYWRlci5udW1SZWFkb25seVNpZ25lZEFjY291bnRzIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBkYXRhLm1lc3NhZ2VIZWFkZXIubnVtUmVhZG9ubHlVbnNpZ25lZEFjY291bnRzICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICBkYXRhLm1lc3NhZ2VIZWFkZXIubnVtUmVhZG9ubHlVbnNpZ25lZEFjY291bnRzIDwgMFxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ21lc3NhZ2VIZWFkZXIubnVtUmVhZG9ubHlVbnNpZ25lZEFjY291bnRzIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBwcm9jZXNzZWREYXRhID0gZGF0YTtcbiAgICAgIGlmICh0aGlzLl9ub25jZUluZm8gJiYgdGhpcy5fbm9uY2VJbmZvLnBhcmFtcykge1xuICAgICAgICBwcm9jZXNzZWREYXRhID0gdGhpcy5pbmplY3ROb25jZUFkdmFuY2VJbnN0cnVjdGlvbihkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGRDdXN0b21JbnN0cnVjdGlvbnMocHJvY2Vzc2VkRGF0YS52ZXJzaW9uZWRJbnN0cnVjdGlvbnMpO1xuXG4gICAgICBpZiAoIXRoaXMuX3RyYW5zYWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgfVxuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24uc2V0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKHByb2Nlc3NlZERhdGEpO1xuXG4gICAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLkN1c3RvbVR4KTtcblxuICAgICAgaWYgKCF0aGlzLl9zZW5kZXIgJiYgcHJvY2Vzc2VkRGF0YS5zdGF0aWNBY2NvdW50S2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX3NlbmRlciA9IHByb2Nlc3NlZERhdGEuc3RhdGljQWNjb3VudEtleXNbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBGYWlsZWQgdG8gcHJvY2VzcyB2ZXJzaW9uZWQgdHJhbnNhY3Rpb24gZGF0YTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmplY3Qgbm9uY2UgYWR2YW5jZSBpbnN0cnVjdGlvbiBpbnRvIHZlcnNpb25lZCB0cmFuc2FjdGlvbiBkYXRhIGZvciBkdXJhYmxlIG5vbmNlIHN1cHBvcnQuXG4gICAqIFJlb3JkZXJzIGFjY291bnRzIHNvIHNpZ25lcnMgYXBwZWFyIGZpcnN0IChyZXF1aXJlZCBieSBTb2xhbmEgTWVzc2FnZVYwIGZvcm1hdCkuXG4gICAqIEBwYXJhbSBkYXRhIC0gT3JpZ2luYWwgdmVyc2lvbmVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMgTW9kaWZpZWQgdmVyc2lvbmVkIHRyYW5zYWN0aW9uIGRhdGEgd2l0aCBub25jZSBhZHZhbmNlIGluc3RydWN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGluamVjdE5vbmNlQWR2YW5jZUluc3RydWN0aW9uKGRhdGE6IFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSk6IFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgY29uc3QgeyB3YWxsZXROb25jZUFkZHJlc3MsIGF1dGhXYWxsZXRBZGRyZXNzIH0gPSB0aGlzLl9ub25jZUluZm8hLnBhcmFtcztcbiAgICBjb25zdCBTWVNURU1fUFJPR1JBTSA9IFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLnRvQmFzZTU4KCk7XG4gICAgY29uc3QgU1lTVkFSX1JFQ0VOVF9CTE9DS0hBU0hFUyA9IFNZU1ZBUl9SRUNFTlRfQkxPQ0tIQVNIRVNfUFVCS0VZLnRvQmFzZTU4KCk7XG5cbiAgICBjb25zdCBudW1TaWduZXJzID0gZGF0YS5tZXNzYWdlSGVhZGVyLm51bVJlcXVpcmVkU2lnbmF0dXJlcztcbiAgICBjb25zdCBvcmlnaW5hbFNpZ25lcnMgPSBkYXRhLnN0YXRpY0FjY291bnRLZXlzLnNsaWNlKDAsIG51bVNpZ25lcnMpO1xuICAgIGNvbnN0IG9yaWdpbmFsTm9uU2lnbmVycyA9IGRhdGEuc3RhdGljQWNjb3VudEtleXMuc2xpY2UobnVtU2lnbmVycyk7XG5cbiAgICBpZiAoIW9yaWdpbmFsU2lnbmVycy5pbmNsdWRlcyhhdXRoV2FsbGV0QWRkcmVzcykpIHtcbiAgICAgIG9yaWdpbmFsU2lnbmVycy5wdXNoKGF1dGhXYWxsZXRBZGRyZXNzKTtcbiAgICB9XG5cbiAgICBjb25zdCBub25TaWduZXJzID0gWy4uLm9yaWdpbmFsTm9uU2lnbmVyc107XG4gICAgY29uc3QgYWxsS2V5cyA9IFsuLi5vcmlnaW5hbFNpZ25lcnMsIC4uLm9yaWdpbmFsTm9uU2lnbmVyc107XG5cbiAgICBpZiAoIWFsbEtleXMuaW5jbHVkZXMoU1lTVEVNX1BST0dSQU0pKSBub25TaWduZXJzLnB1c2goU1lTVEVNX1BST0dSQU0pO1xuICAgIGlmICghYWxsS2V5cy5pbmNsdWRlcyh3YWxsZXROb25jZUFkZHJlc3MpKSBub25TaWduZXJzLnB1c2god2FsbGV0Tm9uY2VBZGRyZXNzKTtcbiAgICBpZiAoIWFsbEtleXMuaW5jbHVkZXMoU1lTVkFSX1JFQ0VOVF9CTE9DS0hBU0hFUykpIG5vblNpZ25lcnMucHVzaChTWVNWQVJfUkVDRU5UX0JMT0NLSEFTSEVTKTtcblxuICAgIGNvbnN0IG5ld1N0YXRpY0FjY291bnRLZXlzID0gWy4uLm9yaWdpbmFsU2lnbmVycywgLi4ubm9uU2lnbmVyc107XG5cbiAgICBjb25zdCBub25jZUFkdmFuY2VJbnN0cnVjdGlvbjogU29sVmVyc2lvbmVkSW5zdHJ1Y3Rpb24gPSB7XG4gICAgICBwcm9ncmFtSWRJbmRleDogbmV3U3RhdGljQWNjb3VudEtleXMuaW5kZXhPZihTWVNURU1fUFJPR1JBTSksXG4gICAgICBhY2NvdW50S2V5SW5kZXhlczogW1xuICAgICAgICBuZXdTdGF0aWNBY2NvdW50S2V5cy5pbmRleE9mKHdhbGxldE5vbmNlQWRkcmVzcyksXG4gICAgICAgIG5ld1N0YXRpY0FjY291bnRLZXlzLmluZGV4T2YoU1lTVkFSX1JFQ0VOVF9CTE9DS0hBU0hFUyksXG4gICAgICAgIG5ld1N0YXRpY0FjY291bnRLZXlzLmluZGV4T2YoYXV0aFdhbGxldEFkZHJlc3MpLFxuICAgICAgXSxcbiAgICAgIGRhdGE6ICc2dng4UCcsIC8vIFN5c3RlbVByb2dyYW0gQWR2YW5jZU5vbmNlQWNjb3VudCAoMHgwNDAwMDAwMCkgaW4gYmFzZTU4XG4gICAgfTtcblxuICAgIGNvbnN0IGluZGV4TWFwID0gbmV3IE1hcChkYXRhLnN0YXRpY0FjY291bnRLZXlzLm1hcCgoa2V5LCBvbGRJZHgpID0+IFtvbGRJZHgsIG5ld1N0YXRpY0FjY291bnRLZXlzLmluZGV4T2Yoa2V5KV0pKTtcbiAgICBjb25zdCByZW1hcHBlZEluc3RydWN0aW9ucyA9IGRhdGEudmVyc2lvbmVkSW5zdHJ1Y3Rpb25zLm1hcCgoaW5zdCkgPT4gKHtcbiAgICAgIHByb2dyYW1JZEluZGV4OiBpbmRleE1hcC5nZXQoaW5zdC5wcm9ncmFtSWRJbmRleCkgPz8gaW5zdC5wcm9ncmFtSWRJbmRleCxcbiAgICAgIGFjY291bnRLZXlJbmRleGVzOiBpbnN0LmFjY291bnRLZXlJbmRleGVzLm1hcCgoaWR4KSA9PiBpbmRleE1hcC5nZXQoaWR4KSA/PyBpZHgpLFxuICAgICAgZGF0YTogaW5zdC5kYXRhLFxuICAgIH0pKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgdmVyc2lvbmVkSW5zdHJ1Y3Rpb25zOiBbbm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24sIC4uLnJlbWFwcGVkSW5zdHJ1Y3Rpb25zXSxcbiAgICAgIHN0YXRpY0FjY291bnRLZXlzOiBuZXdTdGF0aWNBY2NvdW50S2V5cyxcbiAgICAgIG1lc3NhZ2VIZWFkZXI6IHtcbiAgICAgICAgLi4uZGF0YS5tZXNzYWdlSGVhZGVyLFxuICAgICAgICBudW1SZXF1aXJlZFNpZ25hdHVyZXM6IG9yaWdpbmFsU2lnbmVycy5sZW5ndGgsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGN1c3RvbSBpbnN0cnVjdGlvbnMgYW5kIHZlcnNpb25lZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIFRoaXMgYnVpbGRlciBpbnN0YW5jZVxuICAgKi9cbiAgY2xlYXJJbnN0cnVjdGlvbnMoKTogdGhpcyB7XG4gICAgdGhpcy5fY3VzdG9tSW5zdHJ1Y3Rpb25zID0gW107XG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uKSB7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXRWZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGN1c3RvbSBpbnN0cnVjdGlvbnNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgY3VzdG9tIGluc3RydWN0aW9uc1xuICAgKi9cbiAgZ2V0SW5zdHJ1Y3Rpb25zKCk6IChDdXN0b21JbnN0cnVjdGlvbiB8IFZlcnNpb25lZEN1c3RvbUluc3RydWN0aW9uKVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2N1c3RvbUluc3RydWN0aW9uc107XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgY3VzdG9tIGluc3RydWN0aW9uIGZvcm1hdFxuICAgKiBAcGFyYW0gaW5zdHJ1Y3Rpb24gLSBUaGUgaW5zdHJ1Y3Rpb24gdG8gdmFsaWRhdGVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbjogU29sSW5zdHJ1Y3Rpb24gfCBTb2xWZXJzaW9uZWRJbnN0cnVjdGlvbik6IHZvaWQge1xuICAgIGlmICghaW5zdHJ1Y3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0luc3RydWN0aW9uIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGlmIChpc1NvbExlZ2FjeUluc3RydWN0aW9uKGluc3RydWN0aW9uKSkge1xuICAgICAgdGhpcy52YWxpZGF0ZVNvbEluc3RydWN0aW9uKGluc3RydWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWxpZGF0ZVZlcnNpb25lZEluc3RydWN0aW9uKGluc3RydWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdHJhZGl0aW9uYWwgU29sSW5zdHJ1Y3Rpb24gZm9ybWF0XG4gICAqIEBwYXJhbSBpbnN0cnVjdGlvbiAtIFRoZSB0cmFkaXRpb25hbCBpbnN0cnVjdGlvbiB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNvbEluc3RydWN0aW9uKGluc3RydWN0aW9uOiBTb2xJbnN0cnVjdGlvbik6IHZvaWQge1xuICAgIGlmICghaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkIHx8IHR5cGVvZiBpbnN0cnVjdGlvbi5wcm9ncmFtSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnN0cnVjdGlvbiBtdXN0IGhhdmUgYSB2YWxpZCBwcm9ncmFtSWQgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBwcm9ncmFtSWQgaXMgYSB2YWxpZCBTb2xhbmEgcHVibGljIGtleVxuICAgIHRyeSB7XG4gICAgICBuZXcgUHVibGljS2V5KGluc3RydWN0aW9uLnByb2dyYW1JZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcHJvZ3JhbUlkIGZvcm1hdCcpO1xuICAgIH1cblxuICAgIGlmICghaW5zdHJ1Y3Rpb24ua2V5cyB8fCAhQXJyYXkuaXNBcnJheShpbnN0cnVjdGlvbi5rZXlzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW5zdHJ1Y3Rpb24gbXVzdCBoYXZlIHZhbGlkIGtleXMgYXJyYXknKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIGtleVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGluc3RydWN0aW9uLmtleXMpIHtcbiAgICAgIGlmICgha2V5LnB1YmtleSB8fCB0eXBlb2Yga2V5LnB1YmtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRWFjaCBrZXkgbXVzdCBoYXZlIGEgdmFsaWQgcHVia2V5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBuZXcgUHVibGljS2V5KGtleS5wdWJrZXkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBwdWJrZXkgZm9ybWF0IGluIGtleXMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBrZXkuaXNTaWduZXIgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFYWNoIGtleSBtdXN0IGhhdmUgYSBib29sZWFuIGlzU2lnbmVyIGZpZWxkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Yga2V5LmlzV3JpdGFibGUgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFYWNoIGtleSBtdXN0IGhhdmUgYSBib29sZWFuIGlzV3JpdGFibGUgZmllbGQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5zdHJ1Y3Rpb24uZGF0YSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpbnN0cnVjdGlvbi5kYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW5zdHJ1Y3Rpb24gbXVzdCBoYXZlIHZhbGlkIGRhdGEgc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHZlcnNpb25lZCBpbnN0cnVjdGlvbiBmb3JtYXRcbiAgICogQHBhcmFtIGluc3RydWN0aW9uIC0gVGhlIHZlcnNpb25lZCBpbnN0cnVjdGlvbiB0byB2YWxpZGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZlcnNpb25lZEluc3RydWN0aW9uKGluc3RydWN0aW9uOiBTb2xWZXJzaW9uZWRJbnN0cnVjdGlvbik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkSW5kZXggIT09ICdudW1iZXInIHx8IGluc3RydWN0aW9uLnByb2dyYW1JZEluZGV4IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmVyc2lvbmVkIGluc3RydWN0aW9uIG11c3QgaGF2ZSBhIHZhbGlkIHByb2dyYW1JZEluZGV4IG51bWJlcicpO1xuICAgIH1cblxuICAgIGlmICghaW5zdHJ1Y3Rpb24uYWNjb3VudEtleUluZGV4ZXMgfHwgIUFycmF5LmlzQXJyYXkoaW5zdHJ1Y3Rpb24uYWNjb3VudEtleUluZGV4ZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWZXJzaW9uZWQgaW5zdHJ1Y3Rpb24gbXVzdCBoYXZlIHZhbGlkIGFjY291bnRLZXlJbmRleGVzIGFycmF5Jyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWFjaCBhY2NvdW50IGtleSBpbmRleFxuICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5zdHJ1Y3Rpb24uYWNjb3VudEtleUluZGV4ZXMpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInIHx8IGluZGV4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFYWNoIGFjY291bnRLZXlJbmRleCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbnN0cnVjdGlvbi5kYXRhID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGluc3RydWN0aW9uLmRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWZXJzaW9uZWQgaW5zdHJ1Y3Rpb24gbXVzdCBoYXZlIHZhbGlkIGRhdGEgc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBhc3NlcnQodGhpcy5fY3VzdG9tSW5zdHJ1Y3Rpb25zLmxlbmd0aCA+IDAsICdBdCBsZWFzdCBvbmUgY3VzdG9tIGluc3RydWN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyk7XG5cbiAgICAvLyBTZXQgdGhlIGluc3RydWN0aW9ucyBkYXRhIHRvIG91ciBjdXN0b20gaW5zdHJ1Y3Rpb25zXG4gICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSA9IFsuLi50aGlzLl9jdXN0b21JbnN0cnVjdGlvbnNdO1xuXG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgfVxufVxuIl19