@vality/swag-payments 0.1.3-e658db3.0 → 0.1.3-fd6802c.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (761) hide show
  1. package/README.md +224 -12
  2. package/{lib/api → api}/api.d.ts +1 -3
  3. package/{lib/api → api}/categories.service.d.ts +16 -15
  4. package/{lib/api → api}/contracts.service.d.ts +52 -33
  5. package/{lib/api → api}/countries.service.d.ts +16 -15
  6. package/{lib/api → api}/customers.service.d.ts +58 -36
  7. package/{lib/api → api}/invoiceTemplates.service.d.ts +40 -27
  8. package/{lib/api → api}/invoices.service.d.ts +58 -36
  9. package/{lib/api → api}/parties.service.d.ts +40 -27
  10. package/api/paymentInstitutions.service.d.ts +132 -0
  11. package/{lib/api → api}/payments.service.d.ts +88 -51
  12. package/{lib/api → api}/search.service.d.ts +22 -57
  13. package/{lib/api → api}/shops.service.d.ts +52 -33
  14. package/{lib/api → api}/tokens.service.d.ts +10 -12
  15. package/{lib/api → api}/tradeBlocs.service.d.ts +16 -15
  16. package/{lib/api → api}/webhooks.service.d.ts +34 -24
  17. package/api.base.service.d.ts +12 -0
  18. package/{lib/configuration.d.ts → configuration.d.ts} +3 -1
  19. package/fesm2022/vality-swag-payments.mjs +1187 -4352
  20. package/fesm2022/vality-swag-payments.mjs.map +1 -1
  21. package/index.d.ts +6 -5
  22. package/model/accessToken.d.ts +15 -0
  23. package/model/allocationFee.d.ts +24 -0
  24. package/model/allocationFeeTarget.d.ts +21 -0
  25. package/model/allocationTarget.d.ts +21 -0
  26. package/model/allocationTargetShop.d.ts +21 -0
  27. package/model/allocationTransaction.d.ts +32 -0
  28. package/model/apiExtensionRequest.d.ts +16 -0
  29. package/model/applePay.d.ts +22 -0
  30. package/model/articlesOfAssociation.d.ts +17 -0
  31. package/model/bankAccount.d.ts +27 -0
  32. package/model/bankCard.d.ts +23 -0
  33. package/model/bankCardDetails.d.ts +42 -0
  34. package/{lib/model → model}/bankCardTokenProviderData.d.ts +0 -2
  35. package/model/bankCardTokenizationMethod.d.ts +17 -0
  36. package/model/browserGetRequest.d.ts +16 -0
  37. package/model/browserPostRequest.d.ts +21 -0
  38. package/model/browserRequest.d.ts +15 -0
  39. package/model/cancelPayment400Response.d.ts +30 -0
  40. package/model/captureParams.d.ts +33 -0
  41. package/model/capturePayment400Response.d.ts +35 -0
  42. package/model/cardData.d.ts +30 -0
  43. package/model/category.d.ts +14 -0
  44. package/model/chargeback.d.ts +58 -0
  45. package/model/clientInfo.d.ts +26 -0
  46. package/model/contactInfo.d.ts +58 -0
  47. package/model/contract.d.ts +52 -0
  48. package/model/contractAdjustment.d.ts +30 -0
  49. package/model/contractor.d.ts +26 -0
  50. package/model/costAmountRange.d.ts +19 -0
  51. package/model/country.d.ts +20 -0
  52. package/model/createBinding400Response.d.ts +32 -0
  53. package/model/createCustomer400Response.d.ts +32 -0
  54. package/model/createInvoice400Response.d.ts +36 -0
  55. package/model/createInvoiceTemplate400Response.d.ts +32 -0
  56. package/model/createInvoiceWithTemplate400Response.d.ts +29 -0
  57. package/model/createPayment400Response.d.ts +36 -0
  58. package/model/createRefund400Response.d.ts +39 -0
  59. package/model/createWebhook400Response.d.ts +29 -0
  60. package/model/createWebhook429Response.d.ts +15 -0
  61. package/model/cryptoCurrencyTransferRequest.d.ts +24 -0
  62. package/model/cryptoWallet.d.ts +18 -0
  63. package/model/cryptoWalletData.d.ts +18 -0
  64. package/model/cryptoWalletDetails.d.ts +15 -0
  65. package/model/customer.d.ts +44 -0
  66. package/model/customerAndToken.d.ts +15 -0
  67. package/model/customerBinding.d.ts +35 -0
  68. package/model/customerBindingError.d.ts +16 -0
  69. package/model/customerBindingInteractionCompleted.d.ts +20 -0
  70. package/model/customerBindingInteractionRequested.d.ts +20 -0
  71. package/model/customerBindingParams.d.ts +17 -0
  72. package/model/customerBindingStarted.d.ts +16 -0
  73. package/model/customerBindingStatus.d.ts +25 -0
  74. package/model/customerBindingStatusChanged.d.ts +27 -0
  75. package/model/customerChange.d.ts +21 -0
  76. package/model/customerEvent.d.ts +15 -0
  77. package/model/customerParams.d.ts +29 -0
  78. package/model/customerPayer.d.ts +21 -0
  79. package/model/customersTopic.d.ts +34 -0
  80. package/model/decimal.d.ts +22 -0
  81. package/model/defaultLogicError.d.ts +26 -0
  82. package/model/deleteCustomer400Response.d.ts +28 -0
  83. package/model/digitalWallet.d.ts +18 -0
  84. package/model/digitalWalletData.d.ts +26 -0
  85. package/model/digitalWalletDetails.d.ts +15 -0
  86. package/model/externalIDConflictError.d.ts +23 -0
  87. package/model/fulfillInvoice400Response.d.ts +29 -0
  88. package/model/generalError.d.ts +12 -0
  89. package/model/googlePay.d.ts +22 -0
  90. package/model/internationalBankAccount.d.ts +26 -0
  91. package/model/internationalBankDetails.d.ts +34 -0
  92. package/model/internationalCorrespondentBankAccount.d.ts +22 -0
  93. package/model/internationalLegalEntity.d.ts +41 -0
  94. package/{lib/model → model}/invoice.d.ts +2 -2
  95. package/model/invoiceAmountRandomized.d.ts +22 -0
  96. package/model/invoiceAndToken.d.ts +15 -0
  97. package/model/invoiceBankAccount.d.ts +24 -0
  98. package/model/invoiceChange.d.ts +25 -0
  99. package/model/invoiceClientInfo.d.ts +25 -0
  100. package/model/invoiceCreated.d.ts +16 -0
  101. package/model/invoiceEvent.d.ts +15 -0
  102. package/model/invoiceLine.d.ts +32 -0
  103. package/model/invoiceLineTaxMode.d.ts +24 -0
  104. package/model/invoiceLineTaxVAT.d.ts +28 -0
  105. package/{lib/model → model}/invoiceParams.d.ts +2 -2
  106. package/model/invoiceParamsWithTemplate.d.ts +27 -0
  107. package/model/invoiceRandomizeAmount.d.ts +46 -0
  108. package/model/invoiceRussianBankAccount.d.ts +22 -0
  109. package/model/invoiceStatus.d.ts +28 -0
  110. package/model/invoiceStatusChanged.d.ts +29 -0
  111. package/model/invoiceTemplate.d.ts +45 -0
  112. package/model/invoiceTemplateAndToken.d.ts +15 -0
  113. package/model/invoiceTemplateCreateParams.d.ts +41 -0
  114. package/model/invoiceTemplateDetails.d.ts +12 -0
  115. package/model/invoiceTemplateLineCost.d.ts +15 -0
  116. package/model/invoiceTemplateLineCostFixed.d.ts +20 -0
  117. package/model/invoiceTemplateLineCostRange.d.ts +18 -0
  118. package/model/invoiceTemplateLineCostUnlim.d.ts +12 -0
  119. package/model/invoiceTemplateMultiLine.d.ts +21 -0
  120. package/model/invoiceTemplateSingleLine.d.ts +20 -0
  121. package/model/invoiceTemplateUpdateParams.d.ts +29 -0
  122. package/{lib/model → model}/invoicesTopic.d.ts +0 -2
  123. package/model/legalAgreement.d.ts +26 -0
  124. package/model/legalEntity.d.ts +26 -0
  125. package/model/lifetimeInterval.d.ts +17 -0
  126. package/model/logicError.d.ts +16 -0
  127. package/model/mobileCommerce.d.ts +18 -0
  128. package/model/mobileCommerceData.d.ts +16 -0
  129. package/model/mobileCommerceDetails.d.ts +15 -0
  130. package/model/mobileCommercePhone.d.ts +22 -0
  131. package/{lib/model → model}/models.d.ts +2 -73
  132. package/model/party.d.ts +14 -0
  133. package/model/payer.d.ts +17 -0
  134. package/model/payerSessionInfo.d.ts +18 -0
  135. package/{lib/model → model}/payment.d.ts +0 -2
  136. package/model/paymentError.d.ts +20 -0
  137. package/model/paymentFlow.d.ts +22 -0
  138. package/model/paymentFlowHold.d.ts +27 -0
  139. package/model/paymentFlowInstant.d.ts +14 -0
  140. package/model/paymentInstitution.d.ts +29 -0
  141. package/model/paymentInteractionCompleted.d.ts +20 -0
  142. package/model/paymentInteractionRequested.d.ts +20 -0
  143. package/model/paymentMethod.d.ts +25 -0
  144. package/model/paymentParams.d.ts +31 -0
  145. package/model/paymentRecurrentParent.d.ts +22 -0
  146. package/model/paymentResource.d.ts +26 -0
  147. package/model/paymentResourceClientInfo.d.ts +23 -0
  148. package/model/paymentResourceParams.d.ts +15 -0
  149. package/model/paymentResourcePayer.d.ts +29 -0
  150. package/model/paymentResourceResult.d.ts +34 -0
  151. package/{lib/model → model}/paymentSearchResult.d.ts +0 -2
  152. package/model/paymentStarted.d.ts +16 -0
  153. package/model/paymentStatus.d.ts +28 -0
  154. package/model/paymentStatusChanged.d.ts +30 -0
  155. package/model/paymentTerminal.d.ts +18 -0
  156. package/model/paymentTerminalData.d.ts +22 -0
  157. package/model/paymentTerminalDetails.d.ts +15 -0
  158. package/model/paymentTerminalReceipt.d.ts +20 -0
  159. package/model/paymentTerms.d.ts +13 -0
  160. package/model/paymentTool.d.ts +26 -0
  161. package/model/paymentToolDetails.d.ts +18 -0
  162. package/model/paymentToolDetailsBankCard.d.ts +43 -0
  163. package/model/paymentToolDetailsCryptoWallet.d.ts +16 -0
  164. package/model/paymentToolDetailsDigitalWallet.d.ts +16 -0
  165. package/model/paymentToolDetailsMobileCommerce.d.ts +16 -0
  166. package/model/paymentToolDetailsPaymentTerminal.d.ts +16 -0
  167. package/model/powerOfAttorney.d.ts +26 -0
  168. package/model/privateEntity.d.ts +25 -0
  169. package/model/qrCodeDisplayRequest.d.ts +16 -0
  170. package/model/realmMode.d.ts +17 -0
  171. package/model/reason.d.ts +15 -0
  172. package/model/recurrentPayer.d.ts +21 -0
  173. package/model/redirect.d.ts +14 -0
  174. package/{lib/model → model}/refund.d.ts +0 -2
  175. package/model/refundError.d.ts +22 -0
  176. package/model/refundParams.d.ts +37 -0
  177. package/{lib/model → model}/refundSearchResult.d.ts +8 -10
  178. package/model/refundStarted.d.ts +17 -0
  179. package/model/refundStatus.d.ts +25 -0
  180. package/model/refundStatusChanged.d.ts +28 -0
  181. package/model/registeredUser.d.ts +21 -0
  182. package/model/reportLink.d.ts +15 -0
  183. package/model/reportParams.d.ts +29 -0
  184. package/model/reportingPreferences.d.ts +16 -0
  185. package/model/representative.d.ts +24 -0
  186. package/model/representativeDocument.d.ts +22 -0
  187. package/model/rescindInvoice400Response.d.ts +30 -0
  188. package/{lib/model → model}/russianLegalEntity.d.ts +0 -2
  189. package/model/russianPrivateEntity.d.ts +31 -0
  190. package/model/samsungPay.d.ts +22 -0
  191. package/model/schedule.d.ts +17 -0
  192. package/model/searchInvoices200Response.d.ts +17 -0
  193. package/model/searchPayments200Response.d.ts +17 -0
  194. package/model/searchRefunds200Response.d.ts +14 -0
  195. package/model/serviceAcceptanceActPreferences.d.ts +20 -0
  196. package/model/serviceProvider.d.ts +30 -0
  197. package/model/shop.d.ts +46 -0
  198. package/model/shopDetails.d.ts +19 -0
  199. package/model/shopLocation.d.ts +18 -0
  200. package/model/shopLocationUrl.d.ts +19 -0
  201. package/model/subError.d.ts +19 -0
  202. package/model/tokenizedCardData.d.ts +22 -0
  203. package/model/tradeBloc.d.ts +17 -0
  204. package/model/transactionInfo.d.ts +22 -0
  205. package/model/updateInvoiceTemplate400Response.d.ts +29 -0
  206. package/model/userInteraction.d.ts +15 -0
  207. package/model/userInteractionFormInner.d.ts +19 -0
  208. package/model/webhook.d.ts +33 -0
  209. package/model/webhookScope.d.ts +25 -0
  210. package/model/yandexPay.d.ts +22 -0
  211. package/package.json +14 -10
  212. package/esm2022/lib/api/api.mjs +0 -32
  213. package/esm2022/lib/api/categories.service.mjs +0 -212
  214. package/esm2022/lib/api/contracts.service.mjs +0 -592
  215. package/esm2022/lib/api/countries.service.mjs +0 -212
  216. package/esm2022/lib/api/customers.service.mjs +0 -675
  217. package/esm2022/lib/api/invoiceTemplates.service.mjs +0 -491
  218. package/esm2022/lib/api/invoices.service.mjs +0 -698
  219. package/esm2022/lib/api/parties.service.mjs +0 -444
  220. package/esm2022/lib/api/paymentInstitutions.service.mjs +0 -622
  221. package/esm2022/lib/api/payments.service.mjs +0 -1056
  222. package/esm2022/lib/api/payouts.service.mjs +0 -541
  223. package/esm2022/lib/api/search.service.mjs +0 -616
  224. package/esm2022/lib/api/shops.service.mjs +0 -584
  225. package/esm2022/lib/api/tokens.service.mjs +0 -165
  226. package/esm2022/lib/api/tradeBlocs.service.mjs +0 -212
  227. package/esm2022/lib/api/webhooks.service.mjs +0 -401
  228. package/esm2022/lib/api.module.mjs +0 -40
  229. package/esm2022/lib/configuration.mjs +0 -102
  230. package/esm2022/lib/encoder.mjs +0 -19
  231. package/esm2022/lib/index.mjs +0 -7
  232. package/esm2022/lib/model/accessToken.mjs +0 -13
  233. package/esm2022/lib/model/allocationBodyAmount.mjs +0 -2
  234. package/esm2022/lib/model/allocationBodyAmountAllOf.mjs +0 -13
  235. package/esm2022/lib/model/allocationBodyTotal.mjs +0 -2
  236. package/esm2022/lib/model/allocationBodyTotalAllOf.mjs +0 -2
  237. package/esm2022/lib/model/allocationFee.mjs +0 -8
  238. package/esm2022/lib/model/allocationFeeFixed.mjs +0 -2
  239. package/esm2022/lib/model/allocationFeeFixedAllOf.mjs +0 -13
  240. package/esm2022/lib/model/allocationFeeShare.mjs +0 -2
  241. package/esm2022/lib/model/allocationFeeShareAllOf.mjs +0 -2
  242. package/esm2022/lib/model/allocationFeeTarget.mjs +0 -18
  243. package/esm2022/lib/model/allocationTarget.mjs +0 -18
  244. package/esm2022/lib/model/allocationTargetShop.mjs +0 -2
  245. package/esm2022/lib/model/allocationTargetShopAllOf.mjs +0 -13
  246. package/esm2022/lib/model/allocationTransaction.mjs +0 -8
  247. package/esm2022/lib/model/apiExtensionRequest.mjs +0 -2
  248. package/esm2022/lib/model/apiExtensionRequestAllOf.mjs +0 -13
  249. package/esm2022/lib/model/applePay.mjs +0 -2
  250. package/esm2022/lib/model/applePayAllOf.mjs +0 -13
  251. package/esm2022/lib/model/articlesOfAssociation.mjs +0 -2
  252. package/esm2022/lib/model/bankAccount.mjs +0 -13
  253. package/esm2022/lib/model/bankCard.mjs +0 -2
  254. package/esm2022/lib/model/bankCardAllOf.mjs +0 -2
  255. package/esm2022/lib/model/bankCardAllOfTokenProviderData.mjs +0 -19
  256. package/esm2022/lib/model/bankCardDetails.mjs +0 -19
  257. package/esm2022/lib/model/bankCardTokenProviderData.mjs +0 -19
  258. package/esm2022/lib/model/bankCardTokenizationMethod.mjs +0 -16
  259. package/esm2022/lib/model/browserGetRequest.mjs +0 -2
  260. package/esm2022/lib/model/browserGetRequestAllOf.mjs +0 -13
  261. package/esm2022/lib/model/browserPostRequest.mjs +0 -2
  262. package/esm2022/lib/model/browserPostRequestAllOf.mjs +0 -2
  263. package/esm2022/lib/model/browserRequest.mjs +0 -13
  264. package/esm2022/lib/model/cancelPayment400Response.mjs +0 -23
  265. package/esm2022/lib/model/captureParams.mjs +0 -2
  266. package/esm2022/lib/model/captureParamsAllOf.mjs +0 -2
  267. package/esm2022/lib/model/capturePayment400Response.mjs +0 -28
  268. package/esm2022/lib/model/cardData.mjs +0 -2
  269. package/esm2022/lib/model/cardDataAllOf.mjs +0 -13
  270. package/esm2022/lib/model/category.mjs +0 -13
  271. package/esm2022/lib/model/chargeback.mjs +0 -26
  272. package/esm2022/lib/model/clientInfo.mjs +0 -13
  273. package/esm2022/lib/model/contactInfo.mjs +0 -13
  274. package/esm2022/lib/model/contract.mjs +0 -8
  275. package/esm2022/lib/model/contractAdjustment.mjs +0 -13
  276. package/esm2022/lib/model/contractor.mjs +0 -20
  277. package/esm2022/lib/model/costAmountRange.mjs +0 -13
  278. package/esm2022/lib/model/country.mjs +0 -13
  279. package/esm2022/lib/model/createBinding400Response.mjs +0 -25
  280. package/esm2022/lib/model/createCustomer400Response.mjs +0 -25
  281. package/esm2022/lib/model/createInvoice400Response.mjs +0 -29
  282. package/esm2022/lib/model/createInvoiceTemplate400Response.mjs +0 -25
  283. package/esm2022/lib/model/createInvoiceWithTemplate400Response.mjs +0 -22
  284. package/esm2022/lib/model/createPayment400Response.mjs +0 -29
  285. package/esm2022/lib/model/createPayout400Response.mjs +0 -23
  286. package/esm2022/lib/model/createRefund400Response.mjs +0 -32
  287. package/esm2022/lib/model/createWebhook400Response.mjs +0 -22
  288. package/esm2022/lib/model/createWebhook429Response.mjs +0 -13
  289. package/esm2022/lib/model/cryptoCurrencyTransferRequest.mjs +0 -2
  290. package/esm2022/lib/model/cryptoCurrencyTransferRequestAllOf.mjs +0 -13
  291. package/esm2022/lib/model/cryptoWallet.mjs +0 -2
  292. package/esm2022/lib/model/cryptoWalletAllOf.mjs +0 -13
  293. package/esm2022/lib/model/cryptoWalletData.mjs +0 -2
  294. package/esm2022/lib/model/cryptoWalletDetails.mjs +0 -13
  295. package/esm2022/lib/model/customer.mjs +0 -8
  296. package/esm2022/lib/model/customerAndToken.mjs +0 -2
  297. package/esm2022/lib/model/customerBinding.mjs +0 -9
  298. package/esm2022/lib/model/customerBindingError.mjs +0 -13
  299. package/esm2022/lib/model/customerBindingInteractionCompleted.mjs +0 -2
  300. package/esm2022/lib/model/customerBindingInteractionCompletedAllOf.mjs +0 -2
  301. package/esm2022/lib/model/customerBindingInteractionRequested.mjs +0 -2
  302. package/esm2022/lib/model/customerBindingInteractionRequestedAllOf.mjs +0 -2
  303. package/esm2022/lib/model/customerBindingParams.mjs +0 -2
  304. package/esm2022/lib/model/customerBindingStarted.mjs +0 -2
  305. package/esm2022/lib/model/customerBindingStartedAllOf.mjs +0 -2
  306. package/esm2022/lib/model/customerBindingStatus.mjs +0 -9
  307. package/esm2022/lib/model/customerBindingStatusChanged.mjs +0 -9
  308. package/esm2022/lib/model/customerBindingStatusChangedAllOf.mjs +0 -13
  309. package/esm2022/lib/model/customerChange.mjs +0 -21
  310. package/esm2022/lib/model/customerEvent.mjs +0 -2
  311. package/esm2022/lib/model/customerParams.mjs +0 -2
  312. package/esm2022/lib/model/customerPayer.mjs +0 -2
  313. package/esm2022/lib/model/customerPayerAllOf.mjs +0 -2
  314. package/esm2022/lib/model/customersTopic.mjs +0 -12
  315. package/esm2022/lib/model/customersTopicAllOf.mjs +0 -23
  316. package/esm2022/lib/model/decimal.mjs +0 -13
  317. package/esm2022/lib/model/defaultLogicError.mjs +0 -19
  318. package/esm2022/lib/model/deleteCustomer400Response.mjs +0 -21
  319. package/esm2022/lib/model/digitalWallet.mjs +0 -2
  320. package/esm2022/lib/model/digitalWalletAllOf.mjs +0 -13
  321. package/esm2022/lib/model/digitalWalletData.mjs +0 -2
  322. package/esm2022/lib/model/digitalWalletDataAllOf.mjs +0 -13
  323. package/esm2022/lib/model/digitalWalletDetails.mjs +0 -13
  324. package/esm2022/lib/model/externalIDConflictError.mjs +0 -13
  325. package/esm2022/lib/model/fulfillInvoice400Response.mjs +0 -22
  326. package/esm2022/lib/model/generalError.mjs +0 -13
  327. package/esm2022/lib/model/googlePay.mjs +0 -2
  328. package/esm2022/lib/model/googlePayAllOf.mjs +0 -13
  329. package/esm2022/lib/model/internationalBankAccount.mjs +0 -2
  330. package/esm2022/lib/model/internationalBankDetails.mjs +0 -13
  331. package/esm2022/lib/model/internationalCorrespondentBankAccount.mjs +0 -2
  332. package/esm2022/lib/model/internationalLegalEntity.mjs +0 -2
  333. package/esm2022/lib/model/internationalLegalEntityAllOf.mjs +0 -13
  334. package/esm2022/lib/model/invoice.mjs +0 -10
  335. package/esm2022/lib/model/invoiceAndToken.mjs +0 -2
  336. package/esm2022/lib/model/invoiceBankAccount.mjs +0 -18
  337. package/esm2022/lib/model/invoiceChange.mjs +0 -25
  338. package/esm2022/lib/model/invoiceClientInfo.mjs +0 -19
  339. package/esm2022/lib/model/invoiceCreated.mjs +0 -2
  340. package/esm2022/lib/model/invoiceCreatedAllOf.mjs +0 -2
  341. package/esm2022/lib/model/invoiceEvent.mjs +0 -2
  342. package/esm2022/lib/model/invoiceLine.mjs +0 -2
  343. package/esm2022/lib/model/invoiceLineTaxMode.mjs +0 -18
  344. package/esm2022/lib/model/invoiceLineTaxVAT.mjs +0 -13
  345. package/esm2022/lib/model/invoiceLineTaxVATAllOf.mjs +0 -24
  346. package/esm2022/lib/model/invoiceParams.mjs +0 -2
  347. package/esm2022/lib/model/invoiceParamsWithTemplate.mjs +0 -13
  348. package/esm2022/lib/model/invoiceRussianBankAccount.mjs +0 -2
  349. package/esm2022/lib/model/invoiceRussianBankAccountAllOf.mjs +0 -13
  350. package/esm2022/lib/model/invoiceStatus.mjs +0 -21
  351. package/esm2022/lib/model/invoiceStatusChanged.mjs +0 -10
  352. package/esm2022/lib/model/invoiceTemplate.mjs +0 -2
  353. package/esm2022/lib/model/invoiceTemplateAndToken.mjs +0 -2
  354. package/esm2022/lib/model/invoiceTemplateCreateParams.mjs +0 -2
  355. package/esm2022/lib/model/invoiceTemplateDetails.mjs +0 -13
  356. package/esm2022/lib/model/invoiceTemplateLineCost.mjs +0 -13
  357. package/esm2022/lib/model/invoiceTemplateLineCostFixed.mjs +0 -2
  358. package/esm2022/lib/model/invoiceTemplateLineCostFixedAllOf.mjs +0 -13
  359. package/esm2022/lib/model/invoiceTemplateLineCostRange.mjs +0 -2
  360. package/esm2022/lib/model/invoiceTemplateLineCostRangeAllOf.mjs +0 -2
  361. package/esm2022/lib/model/invoiceTemplateLineCostUnlim.mjs +0 -2
  362. package/esm2022/lib/model/invoiceTemplateMultiLine.mjs +0 -2
  363. package/esm2022/lib/model/invoiceTemplateMultiLineAllOf.mjs +0 -2
  364. package/esm2022/lib/model/invoiceTemplateSingleLine.mjs +0 -2
  365. package/esm2022/lib/model/invoiceTemplateSingleLineAllOf.mjs +0 -2
  366. package/esm2022/lib/model/invoiceTemplateUpdateParams.mjs +0 -2
  367. package/esm2022/lib/model/invoicesTopic.mjs +0 -21
  368. package/esm2022/lib/model/invoicesTopicAllOf.mjs +0 -32
  369. package/esm2022/lib/model/legalAgreement.mjs +0 -13
  370. package/esm2022/lib/model/legalEntity.mjs +0 -2
  371. package/esm2022/lib/model/legalEntityAllOf.mjs +0 -19
  372. package/esm2022/lib/model/lifetimeInterval.mjs +0 -13
  373. package/esm2022/lib/model/logicError.mjs +0 -13
  374. package/esm2022/lib/model/mobileCommerce.mjs +0 -2
  375. package/esm2022/lib/model/mobileCommerceAllOf.mjs +0 -13
  376. package/esm2022/lib/model/mobileCommerceData.mjs +0 -2
  377. package/esm2022/lib/model/mobileCommerceDataAllOf.mjs +0 -2
  378. package/esm2022/lib/model/mobileCommerceDetails.mjs +0 -13
  379. package/esm2022/lib/model/mobileCommercePhone.mjs +0 -13
  380. package/esm2022/lib/model/models.mjs +0 -264
  381. package/esm2022/lib/model/party.mjs +0 -13
  382. package/esm2022/lib/model/payer.mjs +0 -2
  383. package/esm2022/lib/model/payerSessionInfo.mjs +0 -13
  384. package/esm2022/lib/model/payment.mjs +0 -12
  385. package/esm2022/lib/model/paymentError.mjs +0 -2
  386. package/esm2022/lib/model/paymentFlow.mjs +0 -19
  387. package/esm2022/lib/model/paymentFlowHold.mjs +0 -8
  388. package/esm2022/lib/model/paymentFlowHoldAllOf.mjs +0 -19
  389. package/esm2022/lib/model/paymentFlowInstant.mjs +0 -2
  390. package/esm2022/lib/model/paymentInstitution.mjs +0 -19
  391. package/esm2022/lib/model/paymentInteractionCompleted.mjs +0 -2
  392. package/esm2022/lib/model/paymentInteractionCompletedAllOf.mjs +0 -2
  393. package/esm2022/lib/model/paymentInteractionRequested.mjs +0 -2
  394. package/esm2022/lib/model/paymentInteractionRequestedAllOf.mjs +0 -2
  395. package/esm2022/lib/model/paymentMethod.mjs +0 -22
  396. package/esm2022/lib/model/paymentParams.mjs +0 -2
  397. package/esm2022/lib/model/paymentRecurrentParent.mjs +0 -13
  398. package/esm2022/lib/model/paymentResource.mjs +0 -2
  399. package/esm2022/lib/model/paymentResourceClientInfo.mjs +0 -13
  400. package/esm2022/lib/model/paymentResourceParams.mjs +0 -2
  401. package/esm2022/lib/model/paymentResourcePayer.mjs +0 -2
  402. package/esm2022/lib/model/paymentResourcePayerAllOf.mjs +0 -2
  403. package/esm2022/lib/model/paymentResourceResult.mjs +0 -2
  404. package/esm2022/lib/model/paymentSearchResult.mjs +0 -12
  405. package/esm2022/lib/model/paymentSearchResultAllOf.mjs +0 -2
  406. package/esm2022/lib/model/paymentStarted.mjs +0 -2
  407. package/esm2022/lib/model/paymentStartedAllOf.mjs +0 -2
  408. package/esm2022/lib/model/paymentStatus.mjs +0 -12
  409. package/esm2022/lib/model/paymentStatusChanged.mjs +0 -12
  410. package/esm2022/lib/model/paymentStatusChangedAllOf.mjs +0 -13
  411. package/esm2022/lib/model/paymentTerminal.mjs +0 -2
  412. package/esm2022/lib/model/paymentTerminalAllOf.mjs +0 -13
  413. package/esm2022/lib/model/paymentTerminalData.mjs +0 -2
  414. package/esm2022/lib/model/paymentTerminalDataAllOf.mjs +0 -13
  415. package/esm2022/lib/model/paymentTerminalDetails.mjs +0 -13
  416. package/esm2022/lib/model/paymentTerminalReceipt.mjs +0 -2
  417. package/esm2022/lib/model/paymentTerminalReceiptAllOf.mjs +0 -13
  418. package/esm2022/lib/model/paymentTerms.mjs +0 -13
  419. package/esm2022/lib/model/paymentTool.mjs +0 -23
  420. package/esm2022/lib/model/paymentToolDetails.mjs +0 -13
  421. package/esm2022/lib/model/paymentToolDetailsBankCard.mjs +0 -8
  422. package/esm2022/lib/model/paymentToolDetailsCryptoWallet.mjs +0 -2
  423. package/esm2022/lib/model/paymentToolDetailsDigitalWallet.mjs +0 -2
  424. package/esm2022/lib/model/paymentToolDetailsMobileCommerce.mjs +0 -2
  425. package/esm2022/lib/model/paymentToolDetailsPaymentTerminal.mjs +0 -2
  426. package/esm2022/lib/model/payout.mjs +0 -2
  427. package/esm2022/lib/model/payoutParams.mjs +0 -13
  428. package/esm2022/lib/model/payoutTool.mjs +0 -2
  429. package/esm2022/lib/model/payoutToolAllOf.mjs +0 -13
  430. package/esm2022/lib/model/payoutToolDetails.mjs +0 -13
  431. package/esm2022/lib/model/payoutToolDetailsBankAccount.mjs +0 -2
  432. package/esm2022/lib/model/payoutToolDetailsInternationalBankAccount.mjs +0 -2
  433. package/esm2022/lib/model/payoutToolDetailsPaymentInstitutionAccount.mjs +0 -2
  434. package/esm2022/lib/model/payoutToolDetailsWalletInfo.mjs +0 -2
  435. package/esm2022/lib/model/payoutToolDetailsWalletInfoAllOf.mjs +0 -13
  436. package/esm2022/lib/model/payoutToolParams.mjs +0 -2
  437. package/esm2022/lib/model/powerOfAttorney.mjs +0 -2
  438. package/esm2022/lib/model/privateEntity.mjs +0 -2
  439. package/esm2022/lib/model/privateEntityAllOf.mjs +0 -18
  440. package/esm2022/lib/model/qrCodeDisplayRequest.mjs +0 -2
  441. package/esm2022/lib/model/qrCodeDisplayRequestAllOf.mjs +0 -13
  442. package/esm2022/lib/model/realmMode.mjs +0 -16
  443. package/esm2022/lib/model/reason.mjs +0 -13
  444. package/esm2022/lib/model/recurrentPayer.mjs +0 -2
  445. package/esm2022/lib/model/recurrentPayerAllOf.mjs +0 -2
  446. package/esm2022/lib/model/redirect.mjs +0 -2
  447. package/esm2022/lib/model/redirectAllOf.mjs +0 -2
  448. package/esm2022/lib/model/refund.mjs +0 -9
  449. package/esm2022/lib/model/refundError.mjs +0 -13
  450. package/esm2022/lib/model/refundParams.mjs +0 -2
  451. package/esm2022/lib/model/refundSearchResult.mjs +0 -9
  452. package/esm2022/lib/model/refundSearchResultAllOf.mjs +0 -13
  453. package/esm2022/lib/model/refundStarted.mjs +0 -2
  454. package/esm2022/lib/model/refundStartedAllOf.mjs +0 -2
  455. package/esm2022/lib/model/refundStatus.mjs +0 -9
  456. package/esm2022/lib/model/refundStatusChanged.mjs +0 -9
  457. package/esm2022/lib/model/refundStatusChangedAllOf.mjs +0 -13
  458. package/esm2022/lib/model/registeredUser.mjs +0 -2
  459. package/esm2022/lib/model/registeredUserAllOf.mjs +0 -13
  460. package/esm2022/lib/model/reportLink.mjs +0 -13
  461. package/esm2022/lib/model/reportParams.mjs +0 -18
  462. package/esm2022/lib/model/reportingPreferences.mjs +0 -2
  463. package/esm2022/lib/model/representative.mjs +0 -2
  464. package/esm2022/lib/model/representativeDocument.mjs +0 -19
  465. package/esm2022/lib/model/rescindInvoice400Response.mjs +0 -23
  466. package/esm2022/lib/model/russianLegalEntity.mjs +0 -2
  467. package/esm2022/lib/model/russianLegalEntityAllOf.mjs +0 -2
  468. package/esm2022/lib/model/russianPrivateEntity.mjs +0 -2
  469. package/esm2022/lib/model/russianPrivateEntityAllOf.mjs +0 -2
  470. package/esm2022/lib/model/samsungPay.mjs +0 -2
  471. package/esm2022/lib/model/samsungPayAllOf.mjs +0 -13
  472. package/esm2022/lib/model/schedule.mjs +0 -13
  473. package/esm2022/lib/model/searchInvoices200Response.mjs +0 -2
  474. package/esm2022/lib/model/searchPayments200Response.mjs +0 -2
  475. package/esm2022/lib/model/searchPayouts200Response.mjs +0 -2
  476. package/esm2022/lib/model/searchRefunds200Response.mjs +0 -2
  477. package/esm2022/lib/model/serviceAcceptanceActPreferences.mjs +0 -2
  478. package/esm2022/lib/model/serviceProvider.mjs +0 -13
  479. package/esm2022/lib/model/shop.mjs +0 -2
  480. package/esm2022/lib/model/shopDetails.mjs +0 -13
  481. package/esm2022/lib/model/shopLocation.mjs +0 -13
  482. package/esm2022/lib/model/shopLocationUrl.mjs +0 -2
  483. package/esm2022/lib/model/shopLocationUrlAllOf.mjs +0 -13
  484. package/esm2022/lib/model/subError.mjs +0 -13
  485. package/esm2022/lib/model/tokenizedCardData.mjs +0 -2
  486. package/esm2022/lib/model/tokenizedCardDataAllOf.mjs +0 -21
  487. package/esm2022/lib/model/tradeBloc.mjs +0 -13
  488. package/esm2022/lib/model/transactionInfo.mjs +0 -13
  489. package/esm2022/lib/model/updateInvoiceTemplate400Response.mjs +0 -22
  490. package/esm2022/lib/model/userInteraction.mjs +0 -13
  491. package/esm2022/lib/model/userInteractionFormInner.mjs +0 -13
  492. package/esm2022/lib/model/webhook.mjs +0 -2
  493. package/esm2022/lib/model/webhookScope.mjs +0 -19
  494. package/esm2022/lib/model/yandexPay.mjs +0 -2
  495. package/esm2022/lib/model/yandexPayAllOf.mjs +0 -13
  496. package/esm2022/lib/param.mjs +0 -2
  497. package/esm2022/lib/variables.mjs +0 -9
  498. package/esm2022/public-api.mjs +0 -2
  499. package/esm2022/vality-swag-payments.mjs +0 -5
  500. package/lib/api/paymentInstitutions.service.d.ts +0 -245
  501. package/lib/api/payouts.service.d.ts +0 -209
  502. package/lib/index.d.ts +0 -6
  503. package/lib/model/accessToken.d.ts +0 -17
  504. package/lib/model/allocationBodyAmountAllOf.d.ts +0 -21
  505. package/lib/model/allocationBodyTotalAllOf.d.ts +0 -27
  506. package/lib/model/allocationFee.d.ts +0 -26
  507. package/lib/model/allocationFeeFixedAllOf.d.ts +0 -17
  508. package/lib/model/allocationFeeShareAllOf.d.ts +0 -19
  509. package/lib/model/allocationFeeTarget.d.ts +0 -23
  510. package/lib/model/allocationTarget.d.ts +0 -23
  511. package/lib/model/allocationTargetShop.d.ts +0 -23
  512. package/lib/model/allocationTargetShopAllOf.d.ts +0 -17
  513. package/lib/model/allocationTransaction.d.ts +0 -34
  514. package/lib/model/apiExtensionRequest.d.ts +0 -18
  515. package/lib/model/apiExtensionRequestAllOf.d.ts +0 -17
  516. package/lib/model/applePay.d.ts +0 -24
  517. package/lib/model/applePayAllOf.d.ts +0 -24
  518. package/lib/model/articlesOfAssociation.d.ts +0 -19
  519. package/lib/model/bankAccount.d.ts +0 -29
  520. package/lib/model/bankCard.d.ts +0 -26
  521. package/lib/model/bankCardAllOf.d.ts +0 -23
  522. package/lib/model/bankCardAllOfTokenProviderData.d.ts +0 -36
  523. package/lib/model/bankCardDetails.d.ts +0 -44
  524. package/lib/model/bankCardTokenizationMethod.d.ts +0 -19
  525. package/lib/model/browserGetRequest.d.ts +0 -18
  526. package/lib/model/browserGetRequestAllOf.d.ts +0 -17
  527. package/lib/model/browserPostRequest.d.ts +0 -23
  528. package/lib/model/browserPostRequestAllOf.d.ts +0 -22
  529. package/lib/model/browserRequest.d.ts +0 -17
  530. package/lib/model/cancelPayment400Response.d.ts +0 -32
  531. package/lib/model/captureParams.d.ts +0 -35
  532. package/lib/model/captureParamsAllOf.d.ts +0 -34
  533. package/lib/model/capturePayment400Response.d.ts +0 -37
  534. package/lib/model/cardData.d.ts +0 -32
  535. package/lib/model/cardDataAllOf.d.ts +0 -32
  536. package/lib/model/category.d.ts +0 -16
  537. package/lib/model/chargeback.d.ts +0 -60
  538. package/lib/model/clientInfo.d.ts +0 -28
  539. package/lib/model/contactInfo.d.ts +0 -52
  540. package/lib/model/contract.d.ts +0 -54
  541. package/lib/model/contractAdjustment.d.ts +0 -32
  542. package/lib/model/contractor.d.ts +0 -28
  543. package/lib/model/costAmountRange.d.ts +0 -21
  544. package/lib/model/country.d.ts +0 -22
  545. package/lib/model/createBinding400Response.d.ts +0 -34
  546. package/lib/model/createCustomer400Response.d.ts +0 -34
  547. package/lib/model/createInvoice400Response.d.ts +0 -38
  548. package/lib/model/createInvoiceTemplate400Response.d.ts +0 -34
  549. package/lib/model/createInvoiceWithTemplate400Response.d.ts +0 -31
  550. package/lib/model/createPayment400Response.d.ts +0 -38
  551. package/lib/model/createPayout400Response.d.ts +0 -32
  552. package/lib/model/createRefund400Response.d.ts +0 -41
  553. package/lib/model/createWebhook400Response.d.ts +0 -31
  554. package/lib/model/createWebhook429Response.d.ts +0 -17
  555. package/lib/model/cryptoCurrencyTransferRequest.d.ts +0 -26
  556. package/lib/model/cryptoCurrencyTransferRequestAllOf.d.ts +0 -25
  557. package/lib/model/cryptoWallet.d.ts +0 -20
  558. package/lib/model/cryptoWalletAllOf.d.ts +0 -17
  559. package/lib/model/cryptoWalletData.d.ts +0 -20
  560. package/lib/model/cryptoWalletDetails.d.ts +0 -17
  561. package/lib/model/customer.d.ts +0 -46
  562. package/lib/model/customerAndToken.d.ts +0 -17
  563. package/lib/model/customerBinding.d.ts +0 -37
  564. package/lib/model/customerBindingError.d.ts +0 -18
  565. package/lib/model/customerBindingInteractionCompleted.d.ts +0 -22
  566. package/lib/model/customerBindingInteractionCompletedAllOf.d.ts +0 -22
  567. package/lib/model/customerBindingInteractionRequested.d.ts +0 -22
  568. package/lib/model/customerBindingInteractionRequestedAllOf.d.ts +0 -22
  569. package/lib/model/customerBindingParams.d.ts +0 -19
  570. package/lib/model/customerBindingStarted.d.ts +0 -18
  571. package/lib/model/customerBindingStartedAllOf.d.ts +0 -15
  572. package/lib/model/customerBindingStatus.d.ts +0 -27
  573. package/lib/model/customerBindingStatusChanged.d.ts +0 -29
  574. package/lib/model/customerBindingStatusChangedAllOf.d.ts +0 -14
  575. package/lib/model/customerChange.d.ts +0 -23
  576. package/lib/model/customerEvent.d.ts +0 -17
  577. package/lib/model/customerParams.d.ts +0 -31
  578. package/lib/model/customerPayer.d.ts +0 -23
  579. package/lib/model/customerPayerAllOf.d.ts +0 -19
  580. package/lib/model/customersTopic.d.ts +0 -36
  581. package/lib/model/customersTopicAllOf.d.ts +0 -32
  582. package/lib/model/decimal.d.ts +0 -24
  583. package/lib/model/defaultLogicError.d.ts +0 -28
  584. package/lib/model/deleteCustomer400Response.d.ts +0 -30
  585. package/lib/model/digitalWallet.d.ts +0 -20
  586. package/lib/model/digitalWalletAllOf.d.ts +0 -17
  587. package/lib/model/digitalWalletData.d.ts +0 -28
  588. package/lib/model/digitalWalletDataAllOf.d.ts +0 -28
  589. package/lib/model/digitalWalletDetails.d.ts +0 -17
  590. package/lib/model/externalIDConflictError.d.ts +0 -25
  591. package/lib/model/fulfillInvoice400Response.d.ts +0 -31
  592. package/lib/model/generalError.d.ts +0 -14
  593. package/lib/model/googlePay.d.ts +0 -24
  594. package/lib/model/googlePayAllOf.d.ts +0 -24
  595. package/lib/model/internationalBankAccount.d.ts +0 -28
  596. package/lib/model/internationalBankDetails.d.ts +0 -36
  597. package/lib/model/internationalCorrespondentBankAccount.d.ts +0 -24
  598. package/lib/model/internationalLegalEntity.d.ts +0 -43
  599. package/lib/model/internationalLegalEntityAllOf.d.ts +0 -37
  600. package/lib/model/invoiceAndToken.d.ts +0 -17
  601. package/lib/model/invoiceBankAccount.d.ts +0 -26
  602. package/lib/model/invoiceChange.d.ts +0 -27
  603. package/lib/model/invoiceClientInfo.d.ts +0 -27
  604. package/lib/model/invoiceCreated.d.ts +0 -18
  605. package/lib/model/invoiceCreatedAllOf.d.ts +0 -15
  606. package/lib/model/invoiceEvent.d.ts +0 -17
  607. package/lib/model/invoiceLine.d.ts +0 -34
  608. package/lib/model/invoiceLineTaxMode.d.ts +0 -26
  609. package/lib/model/invoiceLineTaxVAT.d.ts +0 -30
  610. package/lib/model/invoiceLineTaxVATAllOf.d.ts +0 -32
  611. package/lib/model/invoiceParamsWithTemplate.d.ts +0 -29
  612. package/lib/model/invoiceRussianBankAccount.d.ts +0 -24
  613. package/lib/model/invoiceRussianBankAccountAllOf.d.ts +0 -24
  614. package/lib/model/invoiceStatus.d.ts +0 -30
  615. package/lib/model/invoiceStatusChanged.d.ts +0 -31
  616. package/lib/model/invoiceTemplate.d.ts +0 -45
  617. package/lib/model/invoiceTemplateAndToken.d.ts +0 -17
  618. package/lib/model/invoiceTemplateCreateParams.d.ts +0 -41
  619. package/lib/model/invoiceTemplateDetails.d.ts +0 -14
  620. package/lib/model/invoiceTemplateLineCost.d.ts +0 -17
  621. package/lib/model/invoiceTemplateLineCostFixed.d.ts +0 -22
  622. package/lib/model/invoiceTemplateLineCostFixedAllOf.d.ts +0 -21
  623. package/lib/model/invoiceTemplateLineCostRange.d.ts +0 -20
  624. package/lib/model/invoiceTemplateLineCostRangeAllOf.d.ts +0 -19
  625. package/lib/model/invoiceTemplateLineCostUnlim.d.ts +0 -14
  626. package/lib/model/invoiceTemplateMultiLine.d.ts +0 -23
  627. package/lib/model/invoiceTemplateMultiLineAllOf.d.ts +0 -22
  628. package/lib/model/invoiceTemplateSingleLine.d.ts +0 -22
  629. package/lib/model/invoiceTemplateSingleLineAllOf.d.ts +0 -21
  630. package/lib/model/invoiceTemplateUpdateParams.d.ts +0 -29
  631. package/lib/model/invoicesTopicAllOf.d.ts +0 -41
  632. package/lib/model/legalAgreement.d.ts +0 -28
  633. package/lib/model/legalEntity.d.ts +0 -20
  634. package/lib/model/legalEntityAllOf.d.ts +0 -24
  635. package/lib/model/lifetimeInterval.d.ts +0 -19
  636. package/lib/model/logicError.d.ts +0 -18
  637. package/lib/model/mobileCommerce.d.ts +0 -20
  638. package/lib/model/mobileCommerceAllOf.d.ts +0 -17
  639. package/lib/model/mobileCommerceData.d.ts +0 -6
  640. package/lib/model/mobileCommerceDataAllOf.d.ts +0 -18
  641. package/lib/model/mobileCommerceDetails.d.ts +0 -17
  642. package/lib/model/mobileCommercePhone.d.ts +0 -24
  643. package/lib/model/party.d.ts +0 -16
  644. package/lib/model/payer.d.ts +0 -19
  645. package/lib/model/payerSessionInfo.d.ts +0 -20
  646. package/lib/model/paymentError.d.ts +0 -22
  647. package/lib/model/paymentFlow.d.ts +0 -24
  648. package/lib/model/paymentFlowHold.d.ts +0 -29
  649. package/lib/model/paymentFlowHoldAllOf.d.ts +0 -28
  650. package/lib/model/paymentFlowInstant.d.ts +0 -16
  651. package/lib/model/paymentInstitution.d.ts +0 -31
  652. package/lib/model/paymentInteractionCompleted.d.ts +0 -22
  653. package/lib/model/paymentInteractionCompletedAllOf.d.ts +0 -22
  654. package/lib/model/paymentInteractionRequested.d.ts +0 -22
  655. package/lib/model/paymentInteractionRequestedAllOf.d.ts +0 -22
  656. package/lib/model/paymentMethod.d.ts +0 -27
  657. package/lib/model/paymentParams.d.ts +0 -33
  658. package/lib/model/paymentRecurrentParent.d.ts +0 -24
  659. package/lib/model/paymentResource.d.ts +0 -28
  660. package/lib/model/paymentResourceClientInfo.d.ts +0 -25
  661. package/lib/model/paymentResourceParams.d.ts +0 -17
  662. package/lib/model/paymentResourcePayer.d.ts +0 -31
  663. package/lib/model/paymentResourcePayerAllOf.d.ts +0 -15
  664. package/lib/model/paymentResourceResult.d.ts +0 -36
  665. package/lib/model/paymentSearchResultAllOf.d.ts +0 -73
  666. package/lib/model/paymentStarted.d.ts +0 -18
  667. package/lib/model/paymentStartedAllOf.d.ts +0 -15
  668. package/lib/model/paymentStatus.d.ts +0 -30
  669. package/lib/model/paymentStatusChanged.d.ts +0 -32
  670. package/lib/model/paymentStatusChangedAllOf.d.ts +0 -14
  671. package/lib/model/paymentTerminal.d.ts +0 -20
  672. package/lib/model/paymentTerminalAllOf.d.ts +0 -17
  673. package/lib/model/paymentTerminalData.d.ts +0 -24
  674. package/lib/model/paymentTerminalDataAllOf.d.ts +0 -24
  675. package/lib/model/paymentTerminalDetails.d.ts +0 -17
  676. package/lib/model/paymentTerminalReceipt.d.ts +0 -22
  677. package/lib/model/paymentTerminalReceiptAllOf.d.ts +0 -21
  678. package/lib/model/paymentTerms.d.ts +0 -15
  679. package/lib/model/paymentTool.d.ts +0 -28
  680. package/lib/model/paymentToolDetails.d.ts +0 -20
  681. package/lib/model/paymentToolDetailsBankCard.d.ts +0 -45
  682. package/lib/model/paymentToolDetailsCryptoWallet.d.ts +0 -18
  683. package/lib/model/paymentToolDetailsDigitalWallet.d.ts +0 -18
  684. package/lib/model/paymentToolDetailsMobileCommerce.d.ts +0 -18
  685. package/lib/model/paymentToolDetailsPaymentTerminal.d.ts +0 -18
  686. package/lib/model/payout.d.ts +0 -47
  687. package/lib/model/payoutParams.d.ts +0 -37
  688. package/lib/model/payoutTool.d.ts +0 -26
  689. package/lib/model/payoutToolAllOf.d.ts +0 -17
  690. package/lib/model/payoutToolDetails.d.ts +0 -20
  691. package/lib/model/payoutToolDetailsBankAccount.d.ts +0 -27
  692. package/lib/model/payoutToolDetailsInternationalBankAccount.d.ts +0 -26
  693. package/lib/model/payoutToolDetailsPaymentInstitutionAccount.d.ts +0 -14
  694. package/lib/model/payoutToolDetailsWalletInfo.d.ts +0 -18
  695. package/lib/model/payoutToolDetailsWalletInfoAllOf.d.ts +0 -17
  696. package/lib/model/payoutToolParams.d.ts +0 -19
  697. package/lib/model/powerOfAttorney.d.ts +0 -28
  698. package/lib/model/privateEntity.d.ts +0 -20
  699. package/lib/model/privateEntityAllOf.d.ts +0 -23
  700. package/lib/model/qrCodeDisplayRequest.d.ts +0 -18
  701. package/lib/model/qrCodeDisplayRequestAllOf.d.ts +0 -17
  702. package/lib/model/realmMode.d.ts +0 -19
  703. package/lib/model/reason.d.ts +0 -17
  704. package/lib/model/recurrentPayer.d.ts +0 -23
  705. package/lib/model/recurrentPayerAllOf.d.ts +0 -19
  706. package/lib/model/redirect.d.ts +0 -16
  707. package/lib/model/redirectAllOf.d.ts +0 -15
  708. package/lib/model/refundError.d.ts +0 -24
  709. package/lib/model/refundParams.d.ts +0 -39
  710. package/lib/model/refundSearchResultAllOf.d.ts +0 -21
  711. package/lib/model/refundStarted.d.ts +0 -19
  712. package/lib/model/refundStartedAllOf.d.ts +0 -16
  713. package/lib/model/refundStatus.d.ts +0 -27
  714. package/lib/model/refundStatusChanged.d.ts +0 -30
  715. package/lib/model/refundStatusChangedAllOf.d.ts +0 -15
  716. package/lib/model/registeredUser.d.ts +0 -23
  717. package/lib/model/registeredUserAllOf.d.ts +0 -17
  718. package/lib/model/reportLink.d.ts +0 -17
  719. package/lib/model/reportParams.d.ts +0 -31
  720. package/lib/model/reportingPreferences.d.ts +0 -18
  721. package/lib/model/representative.d.ts +0 -26
  722. package/lib/model/representativeDocument.d.ts +0 -24
  723. package/lib/model/rescindInvoice400Response.d.ts +0 -32
  724. package/lib/model/russianLegalEntityAllOf.d.ts +0 -47
  725. package/lib/model/russianPrivateEntity.d.ts +0 -33
  726. package/lib/model/russianPrivateEntityAllOf.d.ts +0 -27
  727. package/lib/model/samsungPay.d.ts +0 -24
  728. package/lib/model/samsungPayAllOf.d.ts +0 -24
  729. package/lib/model/schedule.d.ts +0 -19
  730. package/lib/model/searchInvoices200Response.d.ts +0 -19
  731. package/lib/model/searchPayments200Response.d.ts +0 -19
  732. package/lib/model/searchPayouts200Response.d.ts +0 -16
  733. package/lib/model/searchRefunds200Response.d.ts +0 -16
  734. package/lib/model/serviceAcceptanceActPreferences.d.ts +0 -22
  735. package/lib/model/serviceProvider.d.ts +0 -32
  736. package/lib/model/shop.d.ts +0 -56
  737. package/lib/model/shopDetails.d.ts +0 -21
  738. package/lib/model/shopLocation.d.ts +0 -20
  739. package/lib/model/shopLocationUrl.d.ts +0 -21
  740. package/lib/model/shopLocationUrlAllOf.d.ts +0 -17
  741. package/lib/model/subError.d.ts +0 -21
  742. package/lib/model/tokenizedCardData.d.ts +0 -17
  743. package/lib/model/tokenizedCardDataAllOf.d.ts +0 -26
  744. package/lib/model/tradeBloc.d.ts +0 -19
  745. package/lib/model/transactionInfo.d.ts +0 -24
  746. package/lib/model/updateInvoiceTemplate400Response.d.ts +0 -31
  747. package/lib/model/userInteraction.d.ts +0 -17
  748. package/lib/model/userInteractionFormInner.d.ts +0 -21
  749. package/lib/model/webhook.d.ts +0 -35
  750. package/lib/model/webhookScope.d.ts +0 -27
  751. package/lib/model/yandexPay.d.ts +0 -24
  752. package/lib/model/yandexPayAllOf.d.ts +0 -24
  753. package/public-api.d.ts +0 -1
  754. /package/{lib/api.module.d.ts → api.module.d.ts} +0 -0
  755. /package/{lib/encoder.d.ts → encoder.d.ts} +0 -0
  756. /package/{lib/model → model}/allocationBodyAmount.d.ts +0 -0
  757. /package/{lib/model → model}/allocationBodyTotal.d.ts +0 -0
  758. /package/{lib/model → model}/allocationFeeFixed.d.ts +0 -0
  759. /package/{lib/model → model}/allocationFeeShare.d.ts +0 -0
  760. /package/{lib/param.d.ts → param.d.ts} +0 -0
  761. /package/{lib/variables.d.ts → variables.d.ts} +0 -0
@@ -1,698 +0,0 @@
1
- /**
2
- * Vality Payments API
3
- * ## Description API is designed for the merchants who accept payments via user interface such as a website or a mobile app and it is the only interaction point with the system for goods and services payment transactions. ## Interaction details Whenever an API is accessed, its unique ID must be passed in the header X-Request-ID of the corresponding request: ``` X-Request-ID: 37d735d4-0f42-4f05-89fa-eaa478fb5aa9 ``` ### Content type and coding The system accepts and returns data in JSON format and UTF-8 coding: ``` Content-Type: application/json; charset=utf-8 ``` ### Date formats The system accepts and returns timestamp values in the format date-time, described in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339): ``` 2017-01-01T00:00:00Z 2017-01-01T00:00:01+00:00 ``` ### Maximum request processing time Whenever an API is accessed, the time cutoff parameters, that define maximum request processing time of the transaction completion, can be passed in the header `X-Request-Deadline` of the corresponding request: ``` X-Request-Deadline: 10s ``` The system stops processing the request upon the specified time. It is recommended to specify a value that is not more than one minute and not less than three seconds. `X-Request-Deadline` can be: * specified in the format `date-time` according to [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339); * specified in relative values: in milliseconds (`150000ms`), in seconds (`540s`) or in minutes (`3.5m`).
4
- *
5
- * The version of the OpenAPI document: 2.0.1
6
- *
7
- *
8
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
- * https://openapi-generator.tech
10
- * Do not edit the class manually.
11
- */
12
- /* tslint:disable:no-unused-variable member-ordering */
13
- import { Inject, Injectable, Optional } from '@angular/core';
14
- import { HttpHeaders, HttpParams, HttpContext } from '@angular/common/http';
15
- import { CustomHttpParameterCodec } from '../encoder';
16
- // @ts-ignore
17
- import { BASE_PATH } from '../variables';
18
- import { Configuration } from '../configuration';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@angular/common/http";
21
- import * as i2 from "../configuration";
22
- export class InvoicesService {
23
- constructor(httpClient, basePath, configuration) {
24
- this.httpClient = httpClient;
25
- this.basePath = '/v2';
26
- this.defaultHeaders = new HttpHeaders();
27
- this.configuration = new Configuration();
28
- if (configuration) {
29
- this.configuration = configuration;
30
- }
31
- if (typeof this.configuration.basePath !== 'string') {
32
- if (Array.isArray(basePath) && basePath.length > 0) {
33
- basePath = basePath[0];
34
- }
35
- if (typeof basePath !== 'string') {
36
- basePath = this.basePath;
37
- }
38
- this.configuration.basePath = basePath;
39
- }
40
- this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
41
- }
42
- // @ts-ignore
43
- addToHttpParams(httpParams, value, key) {
44
- if (typeof value === "object" && value instanceof Date === false) {
45
- httpParams = this.addToHttpParamsRecursive(httpParams, value);
46
- }
47
- else {
48
- httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
49
- }
50
- return httpParams;
51
- }
52
- addToHttpParamsRecursive(httpParams, value, key) {
53
- if (value == null) {
54
- return httpParams;
55
- }
56
- if (typeof value === "object") {
57
- if (Array.isArray(value)) {
58
- value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
59
- }
60
- else if (value instanceof Date) {
61
- if (key != null) {
62
- httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
63
- }
64
- else {
65
- throw Error("key may not be null if value is Date");
66
- }
67
- }
68
- else {
69
- Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
70
- }
71
- }
72
- else if (key != null) {
73
- httpParams = httpParams.append(key, value);
74
- }
75
- else {
76
- throw Error("key may not be null if value is not object or array");
77
- }
78
- return httpParams;
79
- }
80
- createInvoice(requestParameters, observe = 'body', reportProgress = false, options) {
81
- const xRequestID = requestParameters.xRequestID;
82
- if (xRequestID === null || xRequestID === undefined) {
83
- throw new Error('Required parameter xRequestID was null or undefined when calling createInvoice.');
84
- }
85
- const invoiceParams = requestParameters.invoiceParams;
86
- if (invoiceParams === null || invoiceParams === undefined) {
87
- throw new Error('Required parameter invoiceParams was null or undefined when calling createInvoice.');
88
- }
89
- const xRequestDeadline = requestParameters.xRequestDeadline;
90
- let localVarHeaders = this.defaultHeaders;
91
- if (xRequestID !== undefined && xRequestID !== null) {
92
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
93
- }
94
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
95
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
96
- }
97
- let localVarCredential;
98
- // authentication (bearer) required
99
- localVarCredential = this.configuration.lookupCredential('bearer');
100
- if (localVarCredential) {
101
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
102
- }
103
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
104
- if (localVarHttpHeaderAcceptSelected === undefined) {
105
- // to determine the Accept header
106
- const httpHeaderAccepts = [
107
- 'application/json; charset=utf-8'
108
- ];
109
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
110
- }
111
- if (localVarHttpHeaderAcceptSelected !== undefined) {
112
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
113
- }
114
- let localVarHttpContext = options && options.context;
115
- if (localVarHttpContext === undefined) {
116
- localVarHttpContext = new HttpContext();
117
- }
118
- // to determine the Content-Type header
119
- const consumes = [
120
- 'application/json; charset=utf-8'
121
- ];
122
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
123
- if (httpContentTypeSelected !== undefined) {
124
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
125
- }
126
- let responseType_ = 'json';
127
- if (localVarHttpHeaderAcceptSelected) {
128
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
129
- responseType_ = 'text';
130
- }
131
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
132
- responseType_ = 'json';
133
- }
134
- else {
135
- responseType_ = 'blob';
136
- }
137
- }
138
- let localVarPath = `/processing/invoices`;
139
- return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
140
- context: localVarHttpContext,
141
- body: invoiceParams,
142
- responseType: responseType_,
143
- withCredentials: this.configuration.withCredentials,
144
- headers: localVarHeaders,
145
- observe: observe,
146
- reportProgress: reportProgress
147
- });
148
- }
149
- createInvoiceAccessToken(requestParameters, observe = 'body', reportProgress = false, options) {
150
- const xRequestID = requestParameters.xRequestID;
151
- if (xRequestID === null || xRequestID === undefined) {
152
- throw new Error('Required parameter xRequestID was null or undefined when calling createInvoiceAccessToken.');
153
- }
154
- const invoiceID = requestParameters.invoiceID;
155
- if (invoiceID === null || invoiceID === undefined) {
156
- throw new Error('Required parameter invoiceID was null or undefined when calling createInvoiceAccessToken.');
157
- }
158
- const xRequestDeadline = requestParameters.xRequestDeadline;
159
- let localVarHeaders = this.defaultHeaders;
160
- if (xRequestID !== undefined && xRequestID !== null) {
161
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
162
- }
163
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
164
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
165
- }
166
- let localVarCredential;
167
- // authentication (bearer) required
168
- localVarCredential = this.configuration.lookupCredential('bearer');
169
- if (localVarCredential) {
170
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
171
- }
172
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
173
- if (localVarHttpHeaderAcceptSelected === undefined) {
174
- // to determine the Accept header
175
- const httpHeaderAccepts = [
176
- 'application/json; charset=utf-8'
177
- ];
178
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
179
- }
180
- if (localVarHttpHeaderAcceptSelected !== undefined) {
181
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
182
- }
183
- let localVarHttpContext = options && options.context;
184
- if (localVarHttpContext === undefined) {
185
- localVarHttpContext = new HttpContext();
186
- }
187
- let responseType_ = 'json';
188
- if (localVarHttpHeaderAcceptSelected) {
189
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
190
- responseType_ = 'text';
191
- }
192
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
193
- responseType_ = 'json';
194
- }
195
- else {
196
- responseType_ = 'blob';
197
- }
198
- }
199
- let localVarPath = `/processing/invoices/${this.configuration.encodeParam({ name: "invoiceID", value: invoiceID, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/access-tokens`;
200
- return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
201
- context: localVarHttpContext,
202
- responseType: responseType_,
203
- withCredentials: this.configuration.withCredentials,
204
- headers: localVarHeaders,
205
- observe: observe,
206
- reportProgress: reportProgress
207
- });
208
- }
209
- fulfillInvoice(requestParameters, observe = 'body', reportProgress = false, options) {
210
- const xRequestID = requestParameters.xRequestID;
211
- if (xRequestID === null || xRequestID === undefined) {
212
- throw new Error('Required parameter xRequestID was null or undefined when calling fulfillInvoice.');
213
- }
214
- const invoiceID = requestParameters.invoiceID;
215
- if (invoiceID === null || invoiceID === undefined) {
216
- throw new Error('Required parameter invoiceID was null or undefined when calling fulfillInvoice.');
217
- }
218
- const fulfillInvoice = requestParameters.fulfillInvoice;
219
- if (fulfillInvoice === null || fulfillInvoice === undefined) {
220
- throw new Error('Required parameter fulfillInvoice was null or undefined when calling fulfillInvoice.');
221
- }
222
- const xRequestDeadline = requestParameters.xRequestDeadline;
223
- let localVarHeaders = this.defaultHeaders;
224
- if (xRequestID !== undefined && xRequestID !== null) {
225
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
226
- }
227
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
228
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
229
- }
230
- let localVarCredential;
231
- // authentication (bearer) required
232
- localVarCredential = this.configuration.lookupCredential('bearer');
233
- if (localVarCredential) {
234
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
235
- }
236
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
237
- if (localVarHttpHeaderAcceptSelected === undefined) {
238
- // to determine the Accept header
239
- const httpHeaderAccepts = [
240
- 'application/json; charset=utf-8'
241
- ];
242
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
243
- }
244
- if (localVarHttpHeaderAcceptSelected !== undefined) {
245
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
246
- }
247
- let localVarHttpContext = options && options.context;
248
- if (localVarHttpContext === undefined) {
249
- localVarHttpContext = new HttpContext();
250
- }
251
- // to determine the Content-Type header
252
- const consumes = [
253
- 'application/json; charset=utf-8'
254
- ];
255
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
256
- if (httpContentTypeSelected !== undefined) {
257
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
258
- }
259
- let responseType_ = 'json';
260
- if (localVarHttpHeaderAcceptSelected) {
261
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
262
- responseType_ = 'text';
263
- }
264
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
265
- responseType_ = 'json';
266
- }
267
- else {
268
- responseType_ = 'blob';
269
- }
270
- }
271
- let localVarPath = `/processing/invoices/${this.configuration.encodeParam({ name: "invoiceID", value: invoiceID, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/fulfill`;
272
- return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
273
- context: localVarHttpContext,
274
- body: fulfillInvoice,
275
- responseType: responseType_,
276
- withCredentials: this.configuration.withCredentials,
277
- headers: localVarHeaders,
278
- observe: observe,
279
- reportProgress: reportProgress
280
- });
281
- }
282
- getInvoiceByExternalID(requestParameters, observe = 'body', reportProgress = false, options) {
283
- const xRequestID = requestParameters.xRequestID;
284
- if (xRequestID === null || xRequestID === undefined) {
285
- throw new Error('Required parameter xRequestID was null or undefined when calling getInvoiceByExternalID.');
286
- }
287
- const externalID = requestParameters.externalID;
288
- if (externalID === null || externalID === undefined) {
289
- throw new Error('Required parameter externalID was null or undefined when calling getInvoiceByExternalID.');
290
- }
291
- const xRequestDeadline = requestParameters.xRequestDeadline;
292
- let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
293
- if (externalID !== undefined && externalID !== null) {
294
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, externalID, 'externalID');
295
- }
296
- let localVarHeaders = this.defaultHeaders;
297
- if (xRequestID !== undefined && xRequestID !== null) {
298
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
299
- }
300
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
301
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
302
- }
303
- let localVarCredential;
304
- // authentication (bearer) required
305
- localVarCredential = this.configuration.lookupCredential('bearer');
306
- if (localVarCredential) {
307
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
308
- }
309
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
310
- if (localVarHttpHeaderAcceptSelected === undefined) {
311
- // to determine the Accept header
312
- const httpHeaderAccepts = [
313
- 'application/json; charset=utf-8'
314
- ];
315
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
316
- }
317
- if (localVarHttpHeaderAcceptSelected !== undefined) {
318
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
319
- }
320
- let localVarHttpContext = options && options.context;
321
- if (localVarHttpContext === undefined) {
322
- localVarHttpContext = new HttpContext();
323
- }
324
- let responseType_ = 'json';
325
- if (localVarHttpHeaderAcceptSelected) {
326
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
327
- responseType_ = 'text';
328
- }
329
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
330
- responseType_ = 'json';
331
- }
332
- else {
333
- responseType_ = 'blob';
334
- }
335
- }
336
- let localVarPath = `/processing/invoices`;
337
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
338
- context: localVarHttpContext,
339
- params: localVarQueryParameters,
340
- responseType: responseType_,
341
- withCredentials: this.configuration.withCredentials,
342
- headers: localVarHeaders,
343
- observe: observe,
344
- reportProgress: reportProgress
345
- });
346
- }
347
- getInvoiceByExternalIDForParty(requestParameters, observe = 'body', reportProgress = false, options) {
348
- const xRequestID = requestParameters.xRequestID;
349
- if (xRequestID === null || xRequestID === undefined) {
350
- throw new Error('Required parameter xRequestID was null or undefined when calling getInvoiceByExternalIDForParty.');
351
- }
352
- const partyID = requestParameters.partyID;
353
- if (partyID === null || partyID === undefined) {
354
- throw new Error('Required parameter partyID was null or undefined when calling getInvoiceByExternalIDForParty.');
355
- }
356
- const externalID = requestParameters.externalID;
357
- if (externalID === null || externalID === undefined) {
358
- throw new Error('Required parameter externalID was null or undefined when calling getInvoiceByExternalIDForParty.');
359
- }
360
- const xRequestDeadline = requestParameters.xRequestDeadline;
361
- let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
362
- if (externalID !== undefined && externalID !== null) {
363
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, externalID, 'externalID');
364
- }
365
- let localVarHeaders = this.defaultHeaders;
366
- if (xRequestID !== undefined && xRequestID !== null) {
367
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
368
- }
369
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
370
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
371
- }
372
- let localVarCredential;
373
- // authentication (bearer) required
374
- localVarCredential = this.configuration.lookupCredential('bearer');
375
- if (localVarCredential) {
376
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
377
- }
378
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
379
- if (localVarHttpHeaderAcceptSelected === undefined) {
380
- // to determine the Accept header
381
- const httpHeaderAccepts = [
382
- 'application/json; charset=utf-8'
383
- ];
384
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
385
- }
386
- if (localVarHttpHeaderAcceptSelected !== undefined) {
387
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
388
- }
389
- let localVarHttpContext = options && options.context;
390
- if (localVarHttpContext === undefined) {
391
- localVarHttpContext = new HttpContext();
392
- }
393
- let responseType_ = 'json';
394
- if (localVarHttpHeaderAcceptSelected) {
395
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
396
- responseType_ = 'text';
397
- }
398
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
399
- responseType_ = 'json';
400
- }
401
- else {
402
- responseType_ = 'blob';
403
- }
404
- }
405
- let localVarPath = `/processing/parties/${this.configuration.encodeParam({ name: "partyID", value: partyID, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/invoices`;
406
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
407
- context: localVarHttpContext,
408
- params: localVarQueryParameters,
409
- responseType: responseType_,
410
- withCredentials: this.configuration.withCredentials,
411
- headers: localVarHeaders,
412
- observe: observe,
413
- reportProgress: reportProgress
414
- });
415
- }
416
- getInvoiceByID(requestParameters, observe = 'body', reportProgress = false, options) {
417
- const xRequestID = requestParameters.xRequestID;
418
- if (xRequestID === null || xRequestID === undefined) {
419
- throw new Error('Required parameter xRequestID was null or undefined when calling getInvoiceByID.');
420
- }
421
- const invoiceID = requestParameters.invoiceID;
422
- if (invoiceID === null || invoiceID === undefined) {
423
- throw new Error('Required parameter invoiceID was null or undefined when calling getInvoiceByID.');
424
- }
425
- const xRequestDeadline = requestParameters.xRequestDeadline;
426
- let localVarHeaders = this.defaultHeaders;
427
- if (xRequestID !== undefined && xRequestID !== null) {
428
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
429
- }
430
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
431
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
432
- }
433
- let localVarCredential;
434
- // authentication (bearer) required
435
- localVarCredential = this.configuration.lookupCredential('bearer');
436
- if (localVarCredential) {
437
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
438
- }
439
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
440
- if (localVarHttpHeaderAcceptSelected === undefined) {
441
- // to determine the Accept header
442
- const httpHeaderAccepts = [
443
- 'application/json; charset=utf-8'
444
- ];
445
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
446
- }
447
- if (localVarHttpHeaderAcceptSelected !== undefined) {
448
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
449
- }
450
- let localVarHttpContext = options && options.context;
451
- if (localVarHttpContext === undefined) {
452
- localVarHttpContext = new HttpContext();
453
- }
454
- let responseType_ = 'json';
455
- if (localVarHttpHeaderAcceptSelected) {
456
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
457
- responseType_ = 'text';
458
- }
459
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
460
- responseType_ = 'json';
461
- }
462
- else {
463
- responseType_ = 'blob';
464
- }
465
- }
466
- let localVarPath = `/processing/invoices/${this.configuration.encodeParam({ name: "invoiceID", value: invoiceID, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
467
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
468
- context: localVarHttpContext,
469
- responseType: responseType_,
470
- withCredentials: this.configuration.withCredentials,
471
- headers: localVarHeaders,
472
- observe: observe,
473
- reportProgress: reportProgress
474
- });
475
- }
476
- getInvoiceEvents(requestParameters, observe = 'body', reportProgress = false, options) {
477
- const xRequestID = requestParameters.xRequestID;
478
- if (xRequestID === null || xRequestID === undefined) {
479
- throw new Error('Required parameter xRequestID was null or undefined when calling getInvoiceEvents.');
480
- }
481
- const invoiceID = requestParameters.invoiceID;
482
- if (invoiceID === null || invoiceID === undefined) {
483
- throw new Error('Required parameter invoiceID was null or undefined when calling getInvoiceEvents.');
484
- }
485
- const limit = requestParameters.limit;
486
- if (limit === null || limit === undefined) {
487
- throw new Error('Required parameter limit was null or undefined when calling getInvoiceEvents.');
488
- }
489
- const xRequestDeadline = requestParameters.xRequestDeadline;
490
- const eventID = requestParameters.eventID;
491
- let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
492
- if (limit !== undefined && limit !== null) {
493
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, 'limit');
494
- }
495
- if (eventID !== undefined && eventID !== null) {
496
- localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, eventID, 'eventID');
497
- }
498
- let localVarHeaders = this.defaultHeaders;
499
- if (xRequestID !== undefined && xRequestID !== null) {
500
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
501
- }
502
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
503
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
504
- }
505
- let localVarCredential;
506
- // authentication (bearer) required
507
- localVarCredential = this.configuration.lookupCredential('bearer');
508
- if (localVarCredential) {
509
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
510
- }
511
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
512
- if (localVarHttpHeaderAcceptSelected === undefined) {
513
- // to determine the Accept header
514
- const httpHeaderAccepts = [
515
- 'application/json; charset=utf-8'
516
- ];
517
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
518
- }
519
- if (localVarHttpHeaderAcceptSelected !== undefined) {
520
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
521
- }
522
- let localVarHttpContext = options && options.context;
523
- if (localVarHttpContext === undefined) {
524
- localVarHttpContext = new HttpContext();
525
- }
526
- let responseType_ = 'json';
527
- if (localVarHttpHeaderAcceptSelected) {
528
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
529
- responseType_ = 'text';
530
- }
531
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
532
- responseType_ = 'json';
533
- }
534
- else {
535
- responseType_ = 'blob';
536
- }
537
- }
538
- let localVarPath = `/processing/invoices/${this.configuration.encodeParam({ name: "invoiceID", value: invoiceID, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/events`;
539
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
540
- context: localVarHttpContext,
541
- params: localVarQueryParameters,
542
- responseType: responseType_,
543
- withCredentials: this.configuration.withCredentials,
544
- headers: localVarHeaders,
545
- observe: observe,
546
- reportProgress: reportProgress
547
- });
548
- }
549
- getInvoicePaymentMethods(requestParameters, observe = 'body', reportProgress = false, options) {
550
- const xRequestID = requestParameters.xRequestID;
551
- if (xRequestID === null || xRequestID === undefined) {
552
- throw new Error('Required parameter xRequestID was null or undefined when calling getInvoicePaymentMethods.');
553
- }
554
- const invoiceID = requestParameters.invoiceID;
555
- if (invoiceID === null || invoiceID === undefined) {
556
- throw new Error('Required parameter invoiceID was null or undefined when calling getInvoicePaymentMethods.');
557
- }
558
- const xRequestDeadline = requestParameters.xRequestDeadline;
559
- let localVarHeaders = this.defaultHeaders;
560
- if (xRequestID !== undefined && xRequestID !== null) {
561
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
562
- }
563
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
564
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
565
- }
566
- let localVarCredential;
567
- // authentication (bearer) required
568
- localVarCredential = this.configuration.lookupCredential('bearer');
569
- if (localVarCredential) {
570
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
571
- }
572
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
573
- if (localVarHttpHeaderAcceptSelected === undefined) {
574
- // to determine the Accept header
575
- const httpHeaderAccepts = [
576
- 'application/json; charset=utf-8'
577
- ];
578
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
579
- }
580
- if (localVarHttpHeaderAcceptSelected !== undefined) {
581
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
582
- }
583
- let localVarHttpContext = options && options.context;
584
- if (localVarHttpContext === undefined) {
585
- localVarHttpContext = new HttpContext();
586
- }
587
- let responseType_ = 'json';
588
- if (localVarHttpHeaderAcceptSelected) {
589
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
590
- responseType_ = 'text';
591
- }
592
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
593
- responseType_ = 'json';
594
- }
595
- else {
596
- responseType_ = 'blob';
597
- }
598
- }
599
- let localVarPath = `/processing/invoices/${this.configuration.encodeParam({ name: "invoiceID", value: invoiceID, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/payment-methods`;
600
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
601
- context: localVarHttpContext,
602
- responseType: responseType_,
603
- withCredentials: this.configuration.withCredentials,
604
- headers: localVarHeaders,
605
- observe: observe,
606
- reportProgress: reportProgress
607
- });
608
- }
609
- rescindInvoice(requestParameters, observe = 'body', reportProgress = false, options) {
610
- const xRequestID = requestParameters.xRequestID;
611
- if (xRequestID === null || xRequestID === undefined) {
612
- throw new Error('Required parameter xRequestID was null or undefined when calling rescindInvoice.');
613
- }
614
- const invoiceID = requestParameters.invoiceID;
615
- if (invoiceID === null || invoiceID === undefined) {
616
- throw new Error('Required parameter invoiceID was null or undefined when calling rescindInvoice.');
617
- }
618
- const rescindInvoice = requestParameters.rescindInvoice;
619
- if (rescindInvoice === null || rescindInvoice === undefined) {
620
- throw new Error('Required parameter rescindInvoice was null or undefined when calling rescindInvoice.');
621
- }
622
- const xRequestDeadline = requestParameters.xRequestDeadline;
623
- let localVarHeaders = this.defaultHeaders;
624
- if (xRequestID !== undefined && xRequestID !== null) {
625
- localVarHeaders = localVarHeaders.set('X-Request-ID', String(xRequestID));
626
- }
627
- if (xRequestDeadline !== undefined && xRequestDeadline !== null) {
628
- localVarHeaders = localVarHeaders.set('X-Request-Deadline', String(xRequestDeadline));
629
- }
630
- let localVarCredential;
631
- // authentication (bearer) required
632
- localVarCredential = this.configuration.lookupCredential('bearer');
633
- if (localVarCredential) {
634
- localVarHeaders = localVarHeaders.set('Authorization', localVarCredential);
635
- }
636
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
637
- if (localVarHttpHeaderAcceptSelected === undefined) {
638
- // to determine the Accept header
639
- const httpHeaderAccepts = [
640
- 'application/json; charset=utf-8'
641
- ];
642
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
643
- }
644
- if (localVarHttpHeaderAcceptSelected !== undefined) {
645
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
646
- }
647
- let localVarHttpContext = options && options.context;
648
- if (localVarHttpContext === undefined) {
649
- localVarHttpContext = new HttpContext();
650
- }
651
- // to determine the Content-Type header
652
- const consumes = [
653
- 'application/json; charset=utf-8'
654
- ];
655
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
656
- if (httpContentTypeSelected !== undefined) {
657
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
658
- }
659
- let responseType_ = 'json';
660
- if (localVarHttpHeaderAcceptSelected) {
661
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
662
- responseType_ = 'text';
663
- }
664
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
665
- responseType_ = 'json';
666
- }
667
- else {
668
- responseType_ = 'blob';
669
- }
670
- }
671
- let localVarPath = `/processing/invoices/${this.configuration.encodeParam({ name: "invoiceID", value: invoiceID, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/rescind`;
672
- return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
673
- context: localVarHttpContext,
674
- body: rescindInvoice,
675
- responseType: responseType_,
676
- withCredentials: this.configuration.withCredentials,
677
- headers: localVarHeaders,
678
- observe: observe,
679
- reportProgress: reportProgress
680
- });
681
- }
682
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: InvoicesService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
683
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: InvoicesService, providedIn: 'root' }); }
684
- }
685
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: InvoicesService, decorators: [{
686
- type: Injectable,
687
- args: [{
688
- providedIn: 'root'
689
- }]
690
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
691
- type: Optional
692
- }, {
693
- type: Inject,
694
- args: [BASE_PATH]
695
- }] }, { type: i2.Configuration, decorators: [{
696
- type: Optional
697
- }] }] });
698
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbGl0eS9zd2FnLXBheW1lbnRzL3NyYy9saWIvYXBpL2ludm9pY2VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUNILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBMkIsZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBYyxXQUFXLEVBQUUsVUFBVSxFQUNVLFdBQVcsRUFDeEQsTUFBWSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBK0IsWUFBWSxDQUFDO0FBOEIvRSxhQUFhO0FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBMEIsY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBMEMsa0JBQWtCLENBQUM7Ozs7QUFrR3JGLE1BQU0sT0FBTyxlQUFlO0lBT3hCLFlBQXNCLFVBQXNCLEVBQWdDLFFBQXlCLEVBQWMsYUFBNEI7UUFBekgsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUxsQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLG1CQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNuQyxrQkFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFJdkMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxRQUFRLEdBQUcsUUFB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QUFTLEVBQUMsQ0FBQyxVQUFVLENBQUM7UUFDbk4sT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDdkY7WUFDSSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLElBQUksRUFBRSxjQUFjO1lBQ3BCLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsY0FBYyxFQUFFLGNBQWM7U0FDakMsQ0FDSixDQUFDO0lBQ04sQ0FBQzs4R0F4ekJRLGVBQWUsNENBT3lDLFNBQVM7a0hBUGpFLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUWtELFFBQVE7OzBCQUFHLE1BQU07MkJBQUMsU0FBUzs7MEJBQThCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZhbGl0eSBQYXltZW50cyBBUElcbiAqICMjIERlc2NyaXB0aW9uIEFQSSBpcyBkZXNpZ25lZCBmb3IgdGhlIG1lcmNoYW50cyB3aG8gYWNjZXB0IHBheW1lbnRzIHZpYSB1c2VyIGludGVyZmFjZSBzdWNoIGFzIGEgd2Vic2l0ZSBvciBhIG1vYmlsZSBhcHAgYW5kIGl0IGlzIHRoZSBvbmx5IGludGVyYWN0aW9uIHBvaW50IHdpdGggdGhlIHN5c3RlbSBmb3IgZ29vZHMgYW5kIHNlcnZpY2VzIHBheW1lbnQgdHJhbnNhY3Rpb25zLiAjIyBJbnRlcmFjdGlvbiBkZXRhaWxzIFdoZW5ldmVyIGFuIEFQSSBpcyBhY2Nlc3NlZCwgaXRzIHVuaXF1ZSBJRCBtdXN0IGJlIHBhc3NlZCBpbiB0aGUgaGVhZGVyIFgtUmVxdWVzdC1JRCBvZiB0aGUgY29ycmVzcG9uZGluZyByZXF1ZXN0OiBgYGAgIFgtUmVxdWVzdC1JRDogMzdkNzM1ZDQtMGY0Mi00ZjA1LTg5ZmEtZWFhNDc4ZmI1YWE5IGBgYCAjIyMgQ29udGVudCB0eXBlIGFuZCBjb2RpbmcgVGhlIHN5c3RlbSBhY2NlcHRzIGFuZCByZXR1cm5zIGRhdGEgaW4gSlNPTiBmb3JtYXQgYW5kIFVURi04IGNvZGluZzogYGBgICAgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04IGBgYCAjIyMgRGF0ZSBmb3JtYXRzIFRoZSBzeXN0ZW0gYWNjZXB0cyBhbmQgcmV0dXJucyB0aW1lc3RhbXAgdmFsdWVzIGluIHRoZSBmb3JtYXQgZGF0ZS10aW1lLCBkZXNjcmliZWQgaW4gW1JGQyAzMzM5XShodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMzMzkpOiBgYGAgICAyMDE3LTAxLTAxVDAwOjAwOjAwWiAgIDIwMTctMDEtMDFUMDA6MDA6MDErMDA6MDAgYGBgICMjIyBNYXhpbXVtIHJlcXVlc3QgcHJvY2Vzc2luZyB0aW1lIFdoZW5ldmVyIGFuIEFQSSBpcyBhY2Nlc3NlZCwgdGhlIHRpbWUgY3V0b2ZmIHBhcmFtZXRlcnMsIHRoYXQgZGVmaW5lIG1heGltdW0gcmVxdWVzdCBwcm9jZXNzaW5nIHRpbWUgb2YgdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24sIGNhbiBiZSBwYXNzZWQgaW4gdGhlIGhlYWRlciBgWC1SZXF1ZXN0LURlYWRsaW5lYCBvZiB0aGUgY29ycmVzcG9uZGluZyByZXF1ZXN0OiBgYGAgIFgtUmVxdWVzdC1EZWFkbGluZTogMTBzIGBgYCBUaGUgc3lzdGVtIHN0b3BzIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QgdXBvbiB0aGUgc3BlY2lmaWVkIHRpbWUuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNwZWNpZnkgYSB2YWx1ZSB0aGF0IGlzIG5vdCBtb3JlIHRoYW4gb25lIG1pbnV0ZSBhbmQgbm90IGxlc3MgdGhhbiB0aHJlZSBzZWNvbmRzLiBgWC1SZXF1ZXN0LURlYWRsaW5lYCBjYW4gYmU6ICAqIHNwZWNpZmllZCBpbiB0aGUgZm9ybWF0IGBkYXRlLXRpbWVgIGFjY29yZGluZyB0byBbUkZDIDMzMzldKGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzMzOSk7ICogc3BlY2lmaWVkIGluIHJlbGF0aXZlIHZhbHVlczogaW4gbWlsbGlzZWNvbmRzIChgMTUwMDAwbXNgKSwgaW4gc2Vjb25kcyAoYDU0MHNgKSBvciBpbiBtaW51dGVzIChgMy41bWApLiBcbiAqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMi4wLjFcbiAqIFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyxcbiAgICAgICAgIEh0dHBSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwUGFyYW1ldGVyQ29kZWMsIEh0dHBDb250ZXh0IFxuICAgICAgICB9ICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyB9ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQWNjZXNzVG9rZW4gfSBmcm9tICcuLi9tb2RlbC9hY2Nlc3NUb2tlbic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBDcmVhdGVJbnZvaWNlNDAwUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9jcmVhdGVJbnZvaWNlNDAwUmVzcG9uc2UnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRGVmYXVsdExvZ2ljRXJyb3IgfSBmcm9tICcuLi9tb2RlbC9kZWZhdWx0TG9naWNFcnJvcic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHRlcm5hbElEQ29uZmxpY3RFcnJvciB9IGZyb20gJy4uL21vZGVsL2V4dGVybmFsSURDb25mbGljdEVycm9yJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEZ1bGZpbGxJbnZvaWNlNDAwUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9mdWxmaWxsSW52b2ljZTQwMFJlc3BvbnNlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uL21vZGVsL2dlbmVyYWxFcnJvcic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBJbnZvaWNlIH0gZnJvbSAnLi4vbW9kZWwvaW52b2ljZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBJbnZvaWNlQW5kVG9rZW4gfSBmcm9tICcuLi9tb2RlbC9pbnZvaWNlQW5kVG9rZW4nO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgSW52b2ljZUV2ZW50IH0gZnJvbSAnLi4vbW9kZWwvaW52b2ljZUV2ZW50Jztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEludm9pY2VQYXJhbXMgfSBmcm9tICcuLi9tb2RlbC9pbnZvaWNlUGFyYW1zJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFBheW1lbnRNZXRob2QgfSBmcm9tICcuLi9tb2RlbC9wYXltZW50TWV0aG9kJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFJlYXNvbiB9IGZyb20gJy4uL21vZGVsL3JlYXNvbic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBSZXNjaW5kSW52b2ljZTQwMFJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvcmVzY2luZEludm9pY2U0MDBSZXNwb25zZSc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSW52b2ljZVJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVxdWVzdCB0byB0aGUgc3lzdGVtICovXG4gICAgeFJlcXVlc3RJRDogc3RyaW5nO1xuICAgIC8qKiBJbnZvaWNlIHBhcmFtZXRlcnMgKi9cbiAgICBpbnZvaWNlUGFyYW1zOiBJbnZvaWNlUGFyYW1zO1xuICAgIC8qKiBNYXhpbXVtIHJlcXVlc3QgcHJvY2Vzc2luZyB0aW1lICovXG4gICAgeFJlcXVlc3REZWFkbGluZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVJbnZvaWNlQWNjZXNzVG9rZW5SZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlcXVlc3QgdG8gdGhlIHN5c3RlbSAqL1xuICAgIHhSZXF1ZXN0SUQ6IHN0cmluZztcbiAgICAvKiogSW52b2ljZSBJRCAqL1xuICAgIGludm9pY2VJRDogc3RyaW5nO1xuICAgIC8qKiBNYXhpbXVtIHJlcXVlc3QgcHJvY2Vzc2luZyB0aW1lICovXG4gICAgeFJlcXVlc3REZWFkbGluZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGdWxmaWxsSW52b2ljZVJlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVxdWVzdCB0byB0aGUgc3lzdGVtICovXG4gICAgeFJlcXVlc3RJRDogc3RyaW5nO1xuICAgIC8qKiBJbnZvaWNlIElEICovXG4gICAgaW52b2ljZUlEOiBzdHJpbmc7XG4gICAgLyoqIFJlYXNvbiBmb3IgdGhlIG9wZXJhdGlvbiAqL1xuICAgIGZ1bGZpbGxJbnZvaWNlOiBSZWFzb247XG4gICAgLyoqIE1heGltdW0gcmVxdWVzdCBwcm9jZXNzaW5nIHRpbWUgKi9cbiAgICB4UmVxdWVzdERlYWRsaW5lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEludm9pY2VCeUV4dGVybmFsSURSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlcXVlc3QgdG8gdGhlIHN5c3RlbSAqL1xuICAgIHhSZXF1ZXN0SUQ6IHN0cmluZztcbiAgICAvKiogRXh0ZXJuYWwgaW52b2ljZSBpZGVudGlmaWVyICovXG4gICAgZXh0ZXJuYWxJRDogc3RyaW5nO1xuICAgIC8qKiBNYXhpbXVtIHJlcXVlc3QgcHJvY2Vzc2luZyB0aW1lICovXG4gICAgeFJlcXVlc3REZWFkbGluZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRJbnZvaWNlQnlFeHRlcm5hbElERm9yUGFydHlSZXF1ZXN0UGFyYW1zIHtcbiAgICAvKiogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlcXVlc3QgdG8gdGhlIHN5c3RlbSAqL1xuICAgIHhSZXF1ZXN0SUQ6IHN0cmluZztcbiAgICAvKiogVGhlIHBhcnRpY2lwYW50XFwmIzM5O3MgdW5pcXVlIGlkZW50aWZpZXIgd2l0aGluIHRoZSBzeXN0ZW0uICovXG4gICAgcGFydHlJRDogc3RyaW5nO1xuICAgIC8qKiBFeHRlcm5hbCBpbnZvaWNlIGlkZW50aWZpZXIgKi9cbiAgICBleHRlcm5hbElEOiBzdHJpbmc7XG4gICAgLyoqIE1heGltdW0gcmVxdWVzdCBwcm9jZXNzaW5nIHRpbWUgKi9cbiAgICB4UmVxdWVzdERlYWRsaW5lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEludm9pY2VCeUlEUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZXF1ZXN0IHRvIHRoZSBzeXN0ZW0gKi9cbiAgICB4UmVxdWVzdElEOiBzdHJpbmc7XG4gICAgLyoqIEludm9pY2UgSUQgKi9cbiAgICBpbnZvaWNlSUQ6IHN0cmluZztcbiAgICAvKiogTWF4aW11bSByZXF1ZXN0IHByb2Nlc3NpbmcgdGltZSAqL1xuICAgIHhSZXF1ZXN0RGVhZGxpbmU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0SW52b2ljZUV2ZW50c1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVxdWVzdCB0byB0aGUgc3lzdGVtICovXG4gICAgeFJlcXVlc3RJRDogc3RyaW5nO1xuICAgIC8qKiBJbnZvaWNlIElEICovXG4gICAgaW52b2ljZUlEOiBzdHJpbmc7XG4gICAgLyoqIFNlbGVjdGlvbiBsaW1pdCAqL1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgLyoqIE1heGltdW0gcmVxdWVzdCBwcm9jZXNzaW5nIHRpbWUgKi9cbiAgICB4UmVxdWVzdERlYWRsaW5lPzogc3RyaW5nO1xuICAgIC8qKiBFdmVudCBpZGVudGlmaWVyLiBBbGwgZXZlbnRzIHRoYXQgb2NjdXJyZWQgaW4gdGhlIHN5c3RlbSBfYWZ0ZXJfIHRoZSBzcGVjaWZpZWQgZXZlbnQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2VsZWN0aW9uLiAgKi9cbiAgICBldmVudElEPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEludm9pY2VQYXltZW50TWV0aG9kc1JlcXVlc3RQYXJhbXMge1xuICAgIC8qKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVxdWVzdCB0byB0aGUgc3lzdGVtICovXG4gICAgeFJlcXVlc3RJRDogc3RyaW5nO1xuICAgIC8qKiBJbnZvaWNlIElEICovXG4gICAgaW52b2ljZUlEOiBzdHJpbmc7XG4gICAgLyoqIE1heGltdW0gcmVxdWVzdCBwcm9jZXNzaW5nIHRpbWUgKi9cbiAgICB4UmVxdWVzdERlYWRsaW5lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc2NpbmRJbnZvaWNlUmVxdWVzdFBhcmFtcyB7XG4gICAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZXF1ZXN0IHRvIHRoZSBzeXN0ZW0gKi9cbiAgICB4UmVxdWVzdElEOiBzdHJpbmc7XG4gICAgLyoqIEludm9pY2UgSUQgKi9cbiAgICBpbnZvaWNlSUQ6IHN0cmluZztcbiAgICAvKiogUmVhc29uIGZvciB0aGUgb3BlcmF0aW9uICovXG4gICAgcmVzY2luZEludm9pY2U6IFJlYXNvbjtcbiAgICAvKiogTWF4aW11bSByZXF1ZXN0IHByb2Nlc3NpbmcgdGltZSAqL1xuICAgIHhSZXF1ZXN0RGVhZGxpbmU/OiBzdHJpbmc7XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSW52b2ljZXNTZXJ2aWNlIHtcblxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICcvdjInO1xuICAgIHB1YmxpYyBkZWZhdWx0SGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgICBwdWJsaWMgZW5jb2RlcjogSHR0cFBhcmFtZXRlckNvZGVjO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpQEluamVjdChCQVNFX1BBVEgpIGJhc2VQYXRoOiBzdHJpbmd8c3RyaW5nW10sIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShiYXNlUGF0aCkgJiYgYmFzZVBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gYmFzZVBhdGhbMF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSB0aGlzLmJhc2VQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmNvZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmVuY29kZXIgfHwgbmV3IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYygpO1xuICAgIH1cblxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlOiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU/OiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55W10pLmZvckVhY2goIGVsZW0gPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIGVsZW0sIGtleSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgKHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDEwKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgRGF0ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKCBrID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcywgdmFsdWVba10sIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIG5vdCBvYmplY3Qgb3IgYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGludm9pY2UuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUludm9pY2UocmVxdWVzdFBhcmFtZXRlcnM6IENyZWF0ZUludm9pY2VSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxJbnZvaWNlQW5kVG9rZW4+O1xuICAgIHB1YmxpYyBjcmVhdGVJbnZvaWNlKHJlcXVlc3RQYXJhbWV0ZXJzOiBDcmVhdGVJbnZvaWNlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJbnZvaWNlQW5kVG9rZW4+PjtcbiAgICBwdWJsaWMgY3JlYXRlSW52b2ljZShyZXF1ZXN0UGFyYW1ldGVyczogQ3JlYXRlSW52b2ljZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEludm9pY2VBbmRUb2tlbj4+O1xuICAgIHB1YmxpYyBjcmVhdGVJbnZvaWNlKHJlcXVlc3RQYXJhbWV0ZXJzOiBDcmVhdGVJbnZvaWNlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVJbnZvaWNlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGludm9pY2VQYXJhbXMgPSByZXF1ZXN0UGFyYW1ldGVycy5pbnZvaWNlUGFyYW1zO1xuICAgICAgICBpZiAoaW52b2ljZVBhcmFtcyA9PT0gbnVsbCB8fCBpbnZvaWNlUGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGludm9pY2VQYXJhbXMgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVJbnZvaWNlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0RGVhZGxpbmUgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdERlYWRsaW5lO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1JRCcsIFN0cmluZyh4UmVxdWVzdElEKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHhSZXF1ZXN0RGVhZGxpbmUgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdERlYWRsaW5lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtRGVhZGxpbmUnLCBTdHJpbmcoeFJlcXVlc3REZWFkbGluZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoYmVhcmVyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnYmVhcmVyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04J1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCdcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvcHJvY2Vzc2luZy9pbnZvaWNlc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxJbnZvaWNlQW5kVG9rZW4+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBpbnZvaWNlUGFyYW1zLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgdG9rZW4gdG8gYWNjZXNzIHRoZSBzcGVjaWZpZWQgaW52b2ljZS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlSW52b2ljZUFjY2Vzc1Rva2VuKHJlcXVlc3RQYXJhbWV0ZXJzOiBDcmVhdGVJbnZvaWNlQWNjZXNzVG9rZW5SZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxBY2Nlc3NUb2tlbj47XG4gICAgcHVibGljIGNyZWF0ZUludm9pY2VBY2Nlc3NUb2tlbihyZXF1ZXN0UGFyYW1ldGVyczogQ3JlYXRlSW52b2ljZUFjY2Vzc1Rva2VuUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBY2Nlc3NUb2tlbj4+O1xuICAgIHB1YmxpYyBjcmVhdGVJbnZvaWNlQWNjZXNzVG9rZW4ocmVxdWVzdFBhcmFtZXRlcnM6IENyZWF0ZUludm9pY2VBY2Nlc3NUb2tlblJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFjY2Vzc1Rva2VuPj47XG4gICAgcHVibGljIGNyZWF0ZUludm9pY2VBY2Nlc3NUb2tlbihyZXF1ZXN0UGFyYW1ldGVyczogQ3JlYXRlSW52b2ljZUFjY2Vzc1Rva2VuUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVJbnZvaWNlQWNjZXNzVG9rZW4uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52b2ljZUlEID0gcmVxdWVzdFBhcmFtZXRlcnMuaW52b2ljZUlEO1xuICAgICAgICBpZiAoaW52b2ljZUlEID09PSBudWxsIHx8IGludm9pY2VJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbnZvaWNlSUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBjcmVhdGVJbnZvaWNlQWNjZXNzVG9rZW4uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFJlcXVlc3REZWFkbGluZSA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0RGVhZGxpbmU7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmICh4UmVxdWVzdElEICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3RJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LUlEJywgU3RyaW5nKHhSZXF1ZXN0SUQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeFJlcXVlc3REZWFkbGluZSAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0RGVhZGxpbmUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1EZWFkbGluZScsIFN0cmluZyh4UmVxdWVzdERlYWRsaW5lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChiZWFyZXIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdiZWFyZXInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3Byb2Nlc3NpbmcvaW52b2ljZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW52b2ljZUlEXCIsIHZhbHVlOiBpbnZvaWNlSUQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9L2FjY2Vzcy10b2tlbnNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QWNjZXNzVG9rZW4+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gZnVsZmlsbCB0aGUgc3BlY2lmaWVkIGludm9pY2UuXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGZ1bGZpbGxJbnZvaWNlKHJlcXVlc3RQYXJhbWV0ZXJzOiBGdWxmaWxsSW52b2ljZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHVibGljIGZ1bGZpbGxJbnZvaWNlKHJlcXVlc3RQYXJhbWV0ZXJzOiBGdWxmaWxsSW52b2ljZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj47XG4gICAgcHVibGljIGZ1bGZpbGxJbnZvaWNlKHJlcXVlc3RQYXJhbWV0ZXJzOiBGdWxmaWxsSW52b2ljZVJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+O1xuICAgIHB1YmxpYyBmdWxmaWxsSW52b2ljZShyZXF1ZXN0UGFyYW1ldGVyczogRnVsZmlsbEludm9pY2VSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeFJlcXVlc3RJRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0SUQ7XG4gICAgICAgIGlmICh4UmVxdWVzdElEID09PSBudWxsIHx8IHhSZXF1ZXN0SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgeFJlcXVlc3RJRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGZ1bGZpbGxJbnZvaWNlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGludm9pY2VJRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLmludm9pY2VJRDtcbiAgICAgICAgaWYgKGludm9pY2VJRCA9PT0gbnVsbCB8fCBpbnZvaWNlSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgaW52b2ljZUlEIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZnVsZmlsbEludm9pY2UuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnVsZmlsbEludm9pY2UgPSByZXF1ZXN0UGFyYW1ldGVycy5mdWxmaWxsSW52b2ljZTtcbiAgICAgICAgaWYgKGZ1bGZpbGxJbnZvaWNlID09PSBudWxsIHx8IGZ1bGZpbGxJbnZvaWNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGZ1bGZpbGxJbnZvaWNlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZnVsZmlsbEludm9pY2UuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFJlcXVlc3REZWFkbGluZSA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0RGVhZGxpbmU7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmICh4UmVxdWVzdElEICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3RJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LUlEJywgU3RyaW5nKHhSZXF1ZXN0SUQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeFJlcXVlc3REZWFkbGluZSAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0RGVhZGxpbmUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1EZWFkbGluZScsIFN0cmluZyh4UmVxdWVzdERlYWRsaW5lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChiZWFyZXIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdiZWFyZXInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04J1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9wcm9jZXNzaW5nL2ludm9pY2VzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImludm9pY2VJRFwiLCB2YWx1ZTogaW52b2ljZUlELCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS9mdWxmaWxsYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PGFueT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGZ1bGZpbGxJbnZvaWNlLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgaW52b2ljZSBieSBzcGVjaWZpZWQgZXh0ZXJuYWwgaWRlbnRpZmllci5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW52b2ljZUJ5RXh0ZXJuYWxJRChyZXF1ZXN0UGFyYW1ldGVyczogR2V0SW52b2ljZUJ5RXh0ZXJuYWxJRFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEludm9pY2U+O1xuICAgIHB1YmxpYyBnZXRJbnZvaWNlQnlFeHRlcm5hbElEKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRJbnZvaWNlQnlFeHRlcm5hbElEUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJbnZvaWNlPj47XG4gICAgcHVibGljIGdldEludm9pY2VCeUV4dGVybmFsSUQocmVxdWVzdFBhcmFtZXRlcnM6IEdldEludm9pY2VCeUV4dGVybmFsSURSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxJbnZvaWNlPj47XG4gICAgcHVibGljIGdldEludm9pY2VCeUV4dGVybmFsSUQocmVxdWVzdFBhcmFtZXRlcnM6IEdldEludm9pY2VCeUV4dGVybmFsSURSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeFJlcXVlc3RJRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0SUQ7XG4gICAgICAgIGlmICh4UmVxdWVzdElEID09PSBudWxsIHx8IHhSZXF1ZXN0SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgeFJlcXVlc3RJRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEludm9pY2VCeUV4dGVybmFsSUQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXh0ZXJuYWxJRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLmV4dGVybmFsSUQ7XG4gICAgICAgIGlmIChleHRlcm5hbElEID09PSBudWxsIHx8IGV4dGVybmFsSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgZXh0ZXJuYWxJRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEludm9pY2VCeUV4dGVybmFsSUQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFJlcXVlc3REZWFkbGluZSA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0RGVhZGxpbmU7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICBpZiAoZXh0ZXJuYWxJRCAhPT0gdW5kZWZpbmVkICYmIGV4dGVybmFsSUQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5leHRlcm5hbElELCAnZXh0ZXJuYWxJRCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmICh4UmVxdWVzdElEICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3RJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LUlEJywgU3RyaW5nKHhSZXF1ZXN0SUQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeFJlcXVlc3REZWFkbGluZSAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0RGVhZGxpbmUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1EZWFkbGluZScsIFN0cmluZyh4UmVxdWVzdERlYWRsaW5lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChiZWFyZXIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdiZWFyZXInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3Byb2Nlc3NpbmcvaW52b2ljZXNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8SW52b2ljZT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFuIGludm9pY2UgYnkgZXh0ZXJuYWwgaWRlbnRpZmllci5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW52b2ljZUJ5RXh0ZXJuYWxJREZvclBhcnR5KHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRJbnZvaWNlQnlFeHRlcm5hbElERm9yUGFydHlSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxJbnZvaWNlPjtcbiAgICBwdWJsaWMgZ2V0SW52b2ljZUJ5RXh0ZXJuYWxJREZvclBhcnR5KHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRJbnZvaWNlQnlFeHRlcm5hbElERm9yUGFydHlSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEludm9pY2U+PjtcbiAgICBwdWJsaWMgZ2V0SW52b2ljZUJ5RXh0ZXJuYWxJREZvclBhcnR5KHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRJbnZvaWNlQnlFeHRlcm5hbElERm9yUGFydHlSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxJbnZvaWNlPj47XG4gICAgcHVibGljIGdldEludm9pY2VCeUV4dGVybmFsSURGb3JQYXJ0eShyZXF1ZXN0UGFyYW1ldGVyczogR2V0SW52b2ljZUJ5RXh0ZXJuYWxJREZvclBhcnR5UmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRJbnZvaWNlQnlFeHRlcm5hbElERm9yUGFydHkuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFydHlJRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnBhcnR5SUQ7XG4gICAgICAgIGlmIChwYXJ0eUlEID09PSBudWxsIHx8IHBhcnR5SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgcGFydHlJRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEludm9pY2VCeUV4dGVybmFsSURGb3JQYXJ0eS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHRlcm5hbElEID0gcmVxdWVzdFBhcmFtZXRlcnMuZXh0ZXJuYWxJRDtcbiAgICAgICAgaWYgKGV4dGVybmFsSUQgPT09IG51bGwgfHwgZXh0ZXJuYWxJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBleHRlcm5hbElEIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0SW52b2ljZUJ5RXh0ZXJuYWxJREZvclBhcnR5LicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0RGVhZGxpbmUgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdERlYWRsaW5lO1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKGV4dGVybmFsSUQgIT09IHVuZGVmaW5lZCAmJiBleHRlcm5hbElEICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZXh0ZXJuYWxJRCwgJ2V4dGVybmFsSUQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1JRCcsIFN0cmluZyh4UmVxdWVzdElEKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHhSZXF1ZXN0RGVhZGxpbmUgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdERlYWRsaW5lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtRGVhZGxpbmUnLCBTdHJpbmcoeFJlcXVlc3REZWFkbGluZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoYmVhcmVyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnYmVhcmVyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04J1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9wcm9jZXNzaW5nL3BhcnRpZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwicGFydHlJRFwiLCB2YWx1ZTogcGFydHlJRCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vaW52b2ljZXNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8SW52b2ljZT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGFuIGludm9pY2UgYnkgaWRlbnRpZmllci5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW52b2ljZUJ5SUQocmVxdWVzdFBhcmFtZXRlcnM6IEdldEludm9pY2VCeUlEUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SW52b2ljZT47XG4gICAgcHVibGljIGdldEludm9pY2VCeUlEKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRJbnZvaWNlQnlJRFJlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8SW52b2ljZT4+O1xuICAgIHB1YmxpYyBnZXRJbnZvaWNlQnlJRChyZXF1ZXN0UGFyYW1ldGVyczogR2V0SW52b2ljZUJ5SURSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxJbnZvaWNlPj47XG4gICAgcHVibGljIGdldEludm9pY2VCeUlEKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRJbnZvaWNlQnlJRFJlcXVlc3RQYXJhbXMsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB4UmVxdWVzdElEID0gcmVxdWVzdFBhcmFtZXRlcnMueFJlcXVlc3RJRDtcbiAgICAgICAgaWYgKHhSZXF1ZXN0SUQgPT09IG51bGwgfHwgeFJlcXVlc3RJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB4UmVxdWVzdElEIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0SW52b2ljZUJ5SUQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52b2ljZUlEID0gcmVxdWVzdFBhcmFtZXRlcnMuaW52b2ljZUlEO1xuICAgICAgICBpZiAoaW52b2ljZUlEID09PSBudWxsIHx8IGludm9pY2VJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbnZvaWNlSUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRJbnZvaWNlQnlJRC4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4UmVxdWVzdERlYWRsaW5lID0gcmVxdWVzdFBhcmFtZXRlcnMueFJlcXVlc3REZWFkbGluZTtcblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgaWYgKHhSZXF1ZXN0SUQgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdElEICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtSUQnLCBTdHJpbmcoeFJlcXVlc3RJRCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4UmVxdWVzdERlYWRsaW5lICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3REZWFkbGluZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LURlYWRsaW5lJywgU3RyaW5nKHhSZXF1ZXN0RGVhZGxpbmUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gYXV0aGVudGljYXRpb24gKGJlYXJlcikgcmVxdWlyZWRcbiAgICAgICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoJ2JlYXJlcicpO1xuICAgICAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgbG9jYWxWYXJDcmVkZW50aWFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCdcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvcHJvY2Vzc2luZy9pbnZvaWNlcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJpbnZvaWNlSURcIiwgdmFsdWU6IGludm9pY2VJRCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8SW52b2ljZT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgaGlzdG9yeSBvZiB0aGUgc3BlY2lmaWVkIGludm9pY2UgYXMgYSBsaXN0IG9mIGV2ZW50cy5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW52b2ljZUV2ZW50cyhyZXF1ZXN0UGFyYW1ldGVyczogR2V0SW52b2ljZUV2ZW50c1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEFycmF5PEludm9pY2VFdmVudD4+O1xuICAgIHB1YmxpYyBnZXRJbnZvaWNlRXZlbnRzKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRJbnZvaWNlRXZlbnRzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxJbnZvaWNlRXZlbnQ+Pj47XG4gICAgcHVibGljIGdldEludm9pY2VFdmVudHMocmVxdWVzdFBhcmFtZXRlcnM6IEdldEludm9pY2VFdmVudHNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcnJheTxJbnZvaWNlRXZlbnQ+Pj47XG4gICAgcHVibGljIGdldEludm9pY2VFdmVudHMocmVxdWVzdFBhcmFtZXRlcnM6IEdldEludm9pY2VFdmVudHNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeFJlcXVlc3RJRCA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0SUQ7XG4gICAgICAgIGlmICh4UmVxdWVzdElEID09PSBudWxsIHx8IHhSZXF1ZXN0SUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgeFJlcXVlc3RJRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEludm9pY2VFdmVudHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52b2ljZUlEID0gcmVxdWVzdFBhcmFtZXRlcnMuaW52b2ljZUlEO1xuICAgICAgICBpZiAoaW52b2ljZUlEID09PSBudWxsIHx8IGludm9pY2VJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbnZvaWNlSUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRJbnZvaWNlRXZlbnRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnMubGltaXQ7XG4gICAgICAgIGlmIChsaW1pdCA9PT0gbnVsbCB8fCBsaW1pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBsaW1pdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEludm9pY2VFdmVudHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFJlcXVlc3REZWFkbGluZSA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0RGVhZGxpbmU7XG4gICAgICAgIGNvbnN0IGV2ZW50SUQgPSByZXF1ZXN0UGFyYW1ldGVycy5ldmVudElEO1xuXG4gICAgICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbGltaXQgIT09IG51bGwpIHtcbiAgICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgPGFueT5saW1pdCwgJ2xpbWl0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50SUQgIT09IHVuZGVmaW5lZCAmJiBldmVudElEICE9PSBudWxsKSB7XG4gICAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgIDxhbnk+ZXZlbnRJRCwgJ2V2ZW50SUQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1JRCcsIFN0cmluZyh4UmVxdWVzdElEKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHhSZXF1ZXN0RGVhZGxpbmUgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdERlYWRsaW5lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtRGVhZGxpbmUnLCBTdHJpbmcoeFJlcXVlc3REZWFkbGluZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoYmVhcmVyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnYmVhcmVyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04J1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9wcm9jZXNzaW5nL2ludm9pY2VzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcImludm9pY2VJRFwiLCB2YWx1ZTogaW52b2ljZUlELCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS9ldmVudHNgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8QXJyYXk8SW52b2ljZUV2ZW50Pj4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwYXltZW50IG1ldGhvZHMgYXZhaWxhYmxlIGZvciB0aGUgaW52b2ljZS5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW52b2ljZVBheW1lbnRNZXRob2RzKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRJbnZvaWNlUGF5bWVudE1ldGhvZHNSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxBcnJheTxQYXltZW50TWV0aG9kPj47XG4gICAgcHVibGljIGdldEludm9pY2VQYXltZW50TWV0aG9kcyhyZXF1ZXN0UGFyYW1ldGVyczogR2V0SW52b2ljZVBheW1lbnRNZXRob2RzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheTxQYXltZW50TWV0aG9kPj4+O1xuICAgIHB1YmxpYyBnZXRJbnZvaWNlUGF5bWVudE1ldGhvZHMocmVxdWVzdFBhcmFtZXRlcnM6IEdldEludm9pY2VQYXltZW50TWV0aG9kc1JlcXVlc3RQYXJhbXMsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFycmF5PFBheW1lbnRNZXRob2Q+Pj47XG4gICAgcHVibGljIGdldEludm9pY2VQYXltZW50TWV0aG9kcyhyZXF1ZXN0UGFyYW1ldGVyczogR2V0SW52b2ljZVBheW1lbnRNZXRob2RzUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRJbnZvaWNlUGF5bWVudE1ldGhvZHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW52b2ljZUlEID0gcmVxdWVzdFBhcmFtZXRlcnMuaW52b2ljZUlEO1xuICAgICAgICBpZiAoaW52b2ljZUlEID09PSBudWxsIHx8IGludm9pY2VJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBpbnZvaWNlSUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRJbnZvaWNlUGF5bWVudE1ldGhvZHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFJlcXVlc3REZWFkbGluZSA9IHJlcXVlc3RQYXJhbWV0ZXJzLnhSZXF1ZXN0RGVhZGxpbmU7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmICh4UmVxdWVzdElEICE9PSB1bmRlZmluZWQgJiYgeFJlcXVlc3RJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnWC1SZXF1ZXN0LUlEJywgU3RyaW5nKHhSZXF1ZXN0SUQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeFJlcXVlc3REZWFkbGluZSAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0RGVhZGxpbmUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1EZWFkbGluZScsIFN0cmluZyh4UmVxdWVzdERlYWRsaW5lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIChiZWFyZXIpIHJlcXVpcmVkXG4gICAgICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKCdiZWFyZXInKTtcbiAgICAgICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGxvY2FsVmFyQ3JlZGVudGlhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3Byb2Nlc3NpbmcvaW52b2ljZXMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaW52b2ljZUlEXCIsIHZhbHVlOiBpbnZvaWNlSUQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkfSl9L3BheW1lbnQtbWV0aG9kc2A7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxBcnJheTxQYXltZW50TWV0aG9kPj4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgaW52b2ljZSB0byBcXCZxdW90O1Jlc2NpbmRcXCZxdW90O1xuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyByZXNjaW5kSW52b2ljZShyZXF1ZXN0UGFyYW1ldGVyczogUmVzY2luZEludm9pY2VSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0JiN4M0Q7dXRmLTgnLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHB1YmxpYyByZXNjaW5kSW52b2ljZShyZXF1ZXN0UGFyYW1ldGVyczogUmVzY2luZEludm9pY2VSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+O1xuICAgIHB1YmxpYyByZXNjaW5kSW52b2ljZShyZXF1ZXN0UGFyYW1ldGVyczogUmVzY2luZEludm9pY2VSZXF1ZXN0UGFyYW1zLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQmI3gzRDt1dGYtOCcsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PjtcbiAgICBwdWJsaWMgcmVzY2luZEludm9pY2UocmVxdWVzdFBhcmFtZXRlcnM6IFJlc2NpbmRJbnZvaWNlUmVxdWVzdFBhcmFtcywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldCYjeDNEO3V0Zi04JywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0SUQgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdElEO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCA9PT0gbnVsbCB8fCB4UmVxdWVzdElEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHhSZXF1ZXN0SUQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyByZXNjaW5kSW52b2ljZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnZvaWNlSUQgPSByZXF1ZXN0UGFyYW1ldGVycy5pbnZvaWNlSUQ7XG4gICAgICAgIGlmIChpbnZvaWNlSUQgPT09IG51bGwgfHwgaW52b2ljZUlEID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGludm9pY2VJRCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHJlc2NpbmRJbnZvaWNlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc2NpbmRJbnZvaWNlID0gcmVxdWVzdFBhcmFtZXRlcnMucmVzY2luZEludm9pY2U7XG4gICAgICAgIGlmIChyZXNjaW5kSW52b2ljZSA9PT0gbnVsbCB8fCByZXNjaW5kSW52b2ljZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciByZXNjaW5kSW52b2ljZSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHJlc2NpbmRJbnZvaWNlLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHhSZXF1ZXN0RGVhZGxpbmUgPSByZXF1ZXN0UGFyYW1ldGVycy54UmVxdWVzdERlYWRsaW5lO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAoeFJlcXVlc3RJRCAhPT0gdW5kZWZpbmVkICYmIHhSZXF1ZXN0SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ1gtUmVxdWVzdC1JRCcsIFN0cmluZyh4UmVxdWVzdElEKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHhSZXF1ZXN0RGVhZGxpbmUgIT09IHVuZGVmaW5lZCAmJiB4UmVxdWVzdERlYWRsaW5lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdYLVJlcXVlc3QtRGVhZGxpbmUnLCBTdHJpbmcoeFJlcXVlc3REZWFkbGluZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyBhdXRoZW50aWNhdGlvbiAoYmVhcmVyKSByZXF1aXJlZFxuICAgICAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbCgnYmVhcmVyJyk7XG4gICAgICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBsb2NhbFZhckNyZWRlbnRpYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04J1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCdcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvcHJvY2Vzc2luZy9pbnZvaWNlcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJpbnZvaWNlSURcIiwgdmFsdWU6IGludm9pY2VJRCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vcmVzY2luZGA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxhbnk+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiByZXNjaW5kSW52b2ljZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=