@vendasta/billing 8.2.0 → 9.0.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 (583) hide show
  1. package/esm2020/lib/_generated/host.service.mjs +25 -0
  2. package/esm2020/lib/_generated/index.mjs +2 -0
  3. package/esm2020/lib/_internal/bank-reconciliation.api.service.mjs +46 -0
  4. package/esm2020/lib/_internal/billing.api.service.mjs +216 -0
  5. package/esm2020/lib/_internal/bundle.api.service.mjs +50 -0
  6. package/esm2020/lib/_internal/contract-document.api.service.mjs +45 -0
  7. package/esm2020/lib/_internal/contract.api.service.mjs +55 -0
  8. package/esm2020/lib/_internal/credit.api.service.mjs +45 -0
  9. package/esm2020/lib/_internal/discount.api.service.mjs +53 -0
  10. package/esm2020/lib/_internal/enums/applied-discount.enum.mjs +14 -0
  11. package/esm2020/lib/_internal/enums/card.enum.mjs +17 -0
  12. package/esm2020/lib/_internal/enums/contract.enum.mjs +14 -0
  13. package/esm2020/lib/_internal/enums/currency.enum.mjs +35 -0
  14. package/esm2020/lib/_internal/enums/frequency.enum.mjs +14 -0
  15. package/esm2020/lib/_internal/enums/index.mjs +31 -0
  16. package/esm2020/lib/_internal/enums/invoice.enum.mjs +18 -0
  17. package/esm2020/lib/_internal/enums/merchant-report.enum.mjs +13 -0
  18. package/{esm2015/lib/_internal/enums/merchant.enum.js → esm2020/lib/_internal/enums/merchant.enum.mjs} +1 -1
  19. package/esm2020/lib/_internal/enums/month.enum.mjs +23 -0
  20. package/esm2020/lib/_internal/enums/payment-card.enum.mjs +24 -0
  21. package/esm2020/lib/_internal/enums/payment-processor.enum.mjs +13 -0
  22. package/{esm2015/lib/_internal/enums/payment.enum.js → esm2020/lib/_internal/enums/payment.enum.mjs} +1 -1
  23. package/esm2020/lib/_internal/enums/payout.enum.mjs +22 -0
  24. package/esm2020/lib/_internal/enums/pricing-plan.enum.mjs +22 -0
  25. package/{esm2015/lib/_internal/enums/product-summary.enum.js → esm2020/lib/_internal/enums/product-summary.enum.mjs} +1 -1
  26. package/esm2020/lib/_internal/enums/product.enum.mjs +17 -0
  27. package/esm2020/lib/_internal/enums/purchase.enum.mjs +27 -0
  28. package/esm2020/lib/_internal/enums/recurring-invoice.enum.mjs +29 -0
  29. package/esm2020/lib/_internal/enums/refund.enum.mjs +25 -0
  30. package/esm2020/lib/_internal/enums/sales-credit-note.enum.mjs +14 -0
  31. package/{esm2015/lib/_internal/enums/sales-invoice.enum.js → esm2020/lib/_internal/enums/sales-invoice.enum.mjs} +1 -1
  32. package/esm2020/lib/_internal/enums/sort-direction.enum.mjs +12 -0
  33. package/{esm2015/lib/_internal/enums/subscribe-validation.enum.js → esm2020/lib/_internal/enums/subscribe-validation.enum.mjs} +1 -1
  34. package/esm2020/lib/_internal/enums/subscription.enum.mjs +12 -0
  35. package/esm2020/lib/_internal/index.mjs +33 -0
  36. package/esm2020/lib/_internal/interfaces/api.interface.mjs +2 -0
  37. package/esm2020/lib/_internal/interfaces/applied-bundle.interface.mjs +8 -0
  38. package/esm2020/lib/_internal/interfaces/applied-discount.interface.mjs +8 -0
  39. package/esm2020/lib/_internal/interfaces/applied-tax-rate.interface.mjs +8 -0
  40. package/esm2020/lib/_internal/interfaces/balance.interface.mjs +8 -0
  41. package/esm2020/lib/_internal/interfaces/billable-item.interface.mjs +2 -0
  42. package/esm2020/lib/_internal/interfaces/bundle.interface.mjs +2 -0
  43. package/esm2020/lib/_internal/interfaces/card.interface.mjs +8 -0
  44. package/esm2020/lib/_internal/interfaces/commitment.interface.mjs +8 -0
  45. package/esm2020/lib/_internal/interfaces/common.interface.mjs +8 -0
  46. package/esm2020/lib/_internal/interfaces/contract-document.interface.mjs +2 -0
  47. package/esm2020/lib/_internal/interfaces/contract.interface.mjs +2 -0
  48. package/esm2020/lib/_internal/interfaces/credit.interface.mjs +8 -0
  49. package/esm2020/lib/_internal/interfaces/currency.interface.mjs +8 -0
  50. package/esm2020/lib/_internal/interfaces/customer-summary.interface.mjs +8 -0
  51. package/esm2020/lib/_internal/interfaces/date-range.interface.mjs +8 -0
  52. package/esm2020/lib/_internal/interfaces/discount.interface.mjs +2 -0
  53. package/esm2020/lib/_internal/interfaces/external-account.interface.mjs +8 -0
  54. package/esm2020/lib/_internal/interfaces/field-mask.interface.mjs +8 -0
  55. package/esm2020/lib/_internal/interfaces/frequency.interface.mjs +8 -0
  56. package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
  57. package/esm2020/lib/_internal/interfaces/invoice-template.interface.mjs +2 -0
  58. package/esm2020/lib/_internal/interfaces/invoice.interface.mjs +2 -0
  59. package/esm2020/lib/_internal/interfaces/merchant-report.interface.mjs +2 -0
  60. package/esm2020/lib/_internal/interfaces/merchant.interface.mjs +2 -0
  61. package/esm2020/lib/_internal/interfaces/metered-component.interface.mjs +8 -0
  62. package/esm2020/lib/_internal/interfaces/month.interface.mjs +8 -0
  63. package/esm2020/lib/_internal/interfaces/payment-card.interface.mjs +8 -0
  64. package/esm2020/lib/_internal/interfaces/payment-processor.interface.mjs +8 -0
  65. package/esm2020/lib/_internal/interfaces/payment.interface.mjs +2 -0
  66. package/esm2020/lib/_internal/interfaces/payout.interface.mjs +2 -0
  67. package/esm2020/lib/_internal/interfaces/pricing-plan-product.interface.mjs +2 -0
  68. package/esm2020/lib/_internal/interfaces/pricing-plan.interface.mjs +2 -0
  69. package/esm2020/lib/_internal/interfaces/product-pricing.interface.mjs +2 -0
  70. package/esm2020/lib/_internal/interfaces/product-summary.interface.mjs +2 -0
  71. package/esm2020/lib/_internal/interfaces/product.interface.mjs +2 -0
  72. package/esm2020/lib/_internal/interfaces/purchase.interface.mjs +2 -0
  73. package/esm2020/lib/_internal/interfaces/recurring-invoice.interface.mjs +2 -0
  74. package/esm2020/lib/_internal/interfaces/refund.interface.mjs +8 -0
  75. package/esm2020/lib/_internal/interfaces/retail-customer-configuration.interface.mjs +8 -0
  76. package/esm2020/lib/_internal/interfaces/sales-credit-note.interface.mjs +2 -0
  77. package/esm2020/lib/_internal/interfaces/sales-invoice.interface.mjs +2 -0
  78. package/esm2020/lib/_internal/interfaces/sort-direction.interface.mjs +8 -0
  79. package/esm2020/lib/_internal/interfaces/subscribe-validation.interface.mjs +8 -0
  80. package/esm2020/lib/_internal/interfaces/subscription.interface.mjs +2 -0
  81. package/esm2020/lib/_internal/interfaces/tax-rate.interface.mjs +2 -0
  82. package/esm2020/lib/_internal/invoice-template.api.service.mjs +85 -0
  83. package/esm2020/lib/_internal/invoice.api.service.mjs +116 -0
  84. package/esm2020/lib/_internal/merchant.api.service.mjs +159 -0
  85. package/esm2020/lib/_internal/objects/api.mjs +841 -0
  86. package/esm2020/lib/_internal/objects/applied-bundle.mjs +77 -0
  87. package/esm2020/lib/_internal/objects/applied-discount.mjs +46 -0
  88. package/esm2020/lib/_internal/objects/applied-tax-rate.mjs +39 -0
  89. package/esm2020/lib/_internal/objects/balance.mjs +45 -0
  90. package/esm2020/lib/_internal/objects/billable-item.mjs +562 -0
  91. package/esm2020/lib/_internal/objects/bundle.mjs +390 -0
  92. package/esm2020/lib/_internal/objects/card.mjs +7 -0
  93. package/esm2020/lib/_internal/objects/commitment.mjs +36 -0
  94. package/esm2020/lib/_internal/objects/common.mjs +56 -0
  95. package/esm2020/lib/_internal/objects/contract-document.mjs +141 -0
  96. package/esm2020/lib/_internal/objects/contract.mjs +474 -0
  97. package/esm2020/lib/_internal/objects/credit.mjs +114 -0
  98. package/esm2020/lib/_internal/objects/currency.mjs +7 -0
  99. package/esm2020/lib/_internal/objects/customer-summary.mjs +104 -0
  100. package/esm2020/lib/_internal/objects/date-range.mjs +36 -0
  101. package/esm2020/lib/_internal/objects/discount.mjs +299 -0
  102. package/esm2020/lib/_internal/objects/external-account.mjs +160 -0
  103. package/esm2020/lib/_internal/objects/field-mask.mjs +27 -0
  104. package/esm2020/lib/_internal/objects/frequency.mjs +7 -0
  105. package/esm2020/lib/_internal/objects/index.mjs +46 -0
  106. package/esm2020/lib/_internal/objects/invoice-template.mjs +707 -0
  107. package/esm2020/lib/_internal/objects/invoice.mjs +1117 -0
  108. package/esm2020/lib/_internal/objects/merchant-report.mjs +108 -0
  109. package/esm2020/lib/_internal/objects/merchant.mjs +991 -0
  110. package/esm2020/lib/_internal/objects/metered-component.mjs +97 -0
  111. package/esm2020/lib/_internal/objects/month.mjs +7 -0
  112. package/esm2020/lib/_internal/objects/payment-card.mjs +211 -0
  113. package/esm2020/lib/_internal/objects/payment-processor.mjs +7 -0
  114. package/esm2020/lib/_internal/objects/payment.mjs +1219 -0
  115. package/esm2020/lib/_internal/objects/payout.mjs +258 -0
  116. package/esm2020/lib/_internal/objects/pricing-plan-product.mjs +565 -0
  117. package/esm2020/lib/_internal/objects/pricing-plan.mjs +290 -0
  118. package/esm2020/lib/_internal/objects/product-pricing.mjs +107 -0
  119. package/esm2020/lib/_internal/objects/product-summary.mjs +538 -0
  120. package/esm2020/lib/_internal/objects/product.mjs +302 -0
  121. package/esm2020/lib/_internal/objects/purchase.mjs +524 -0
  122. package/esm2020/lib/_internal/objects/recurring-invoice.mjs +324 -0
  123. package/esm2020/lib/_internal/objects/refund.mjs +181 -0
  124. package/esm2020/lib/_internal/objects/retail-customer-configuration.mjs +159 -0
  125. package/esm2020/lib/_internal/objects/sales-credit-note.mjs +211 -0
  126. package/esm2020/lib/_internal/objects/sales-invoice.mjs +300 -0
  127. package/esm2020/lib/_internal/objects/sort-direction.mjs +7 -0
  128. package/esm2020/lib/_internal/objects/subscribe-validation.mjs +31 -0
  129. package/esm2020/lib/_internal/objects/subscription.mjs +555 -0
  130. package/esm2020/lib/_internal/objects/tax-rate.mjs +342 -0
  131. package/esm2020/lib/_internal/payment-method.api.service.mjs +49 -0
  132. package/esm2020/lib/_internal/payment.api.service.mjs +102 -0
  133. package/esm2020/lib/_internal/pricing.api.service.mjs +76 -0
  134. package/esm2020/lib/_internal/product-summary.api.service.mjs +46 -0
  135. package/esm2020/lib/_internal/product.api.service.mjs +47 -0
  136. package/esm2020/lib/_internal/purchase.api.service.mjs +59 -0
  137. package/esm2020/lib/_internal/recurring-invoice.api.service.mjs +60 -0
  138. package/esm2020/lib/_internal/refund.api.service.mjs +45 -0
  139. package/esm2020/lib/_internal/retail-customer-configuration.api.service.mjs +45 -0
  140. package/esm2020/lib/_internal/sales-credit-note.api.service.mjs +45 -0
  141. package/esm2020/lib/_internal/sales-invoice.api.service.mjs +50 -0
  142. package/esm2020/lib/_internal/tax.api.service.mjs +63 -0
  143. package/esm2020/lib/_internal/vendor.api.service.mjs +46 -0
  144. package/esm2020/lib/index.mjs +3 -0
  145. package/esm2020/public_api.mjs +2 -0
  146. package/esm2020/vendasta-billing.mjs +5 -0
  147. package/fesm2015/{vendasta-billing.js → vendasta-billing.mjs} +622 -5227
  148. package/fesm2015/vendasta-billing.mjs.map +1 -0
  149. package/fesm2020/vendasta-billing.mjs +14368 -0
  150. package/fesm2020/vendasta-billing.mjs.map +1 -0
  151. package/lib/_generated/host.service.d.ts +5 -9
  152. package/lib/_internal/bank-reconciliation.api.service.d.ts +4 -0
  153. package/lib/_internal/billing.api.service.d.ts +4 -0
  154. package/lib/_internal/bundle.api.service.d.ts +4 -0
  155. package/lib/_internal/contract-document.api.service.d.ts +4 -0
  156. package/lib/_internal/contract.api.service.d.ts +4 -0
  157. package/lib/_internal/credit.api.service.d.ts +4 -0
  158. package/lib/_internal/discount.api.service.d.ts +4 -0
  159. package/lib/_internal/invoice-template.api.service.d.ts +4 -0
  160. package/lib/_internal/invoice.api.service.d.ts +4 -0
  161. package/lib/_internal/merchant.api.service.d.ts +4 -0
  162. package/lib/_internal/payment-method.api.service.d.ts +4 -0
  163. package/lib/_internal/payment.api.service.d.ts +4 -0
  164. package/lib/_internal/pricing.api.service.d.ts +4 -0
  165. package/lib/_internal/product-summary.api.service.d.ts +4 -0
  166. package/lib/_internal/product.api.service.d.ts +4 -0
  167. package/lib/_internal/purchase.api.service.d.ts +4 -0
  168. package/lib/_internal/recurring-invoice.api.service.d.ts +4 -0
  169. package/lib/_internal/refund.api.service.d.ts +4 -0
  170. package/lib/_internal/retail-customer-configuration.api.service.d.ts +4 -0
  171. package/lib/_internal/sales-credit-note.api.service.d.ts +4 -0
  172. package/lib/_internal/sales-invoice.api.service.d.ts +4 -0
  173. package/lib/_internal/tax.api.service.d.ts +4 -0
  174. package/lib/_internal/vendor.api.service.d.ts +4 -0
  175. package/lib/index.d.ts +2 -37
  176. package/package.json +26 -15
  177. package/src/README.md +1 -0
  178. package/vendasta-billing.d.ts +1 -0
  179. package/bundles/vendasta-billing.umd.js +0 -19912
  180. package/bundles/vendasta-billing.umd.js.map +0 -1
  181. package/bundles/vendasta-billing.umd.min.js +0 -16
  182. package/bundles/vendasta-billing.umd.min.js.map +0 -1
  183. package/esm2015/lib/_generated/host.service.js +0 -65
  184. package/esm2015/lib/_generated/index.js +0 -2
  185. package/esm2015/lib/_internal/bank-reconciliation.api.service.js +0 -47
  186. package/esm2015/lib/_internal/billing.api.service.js +0 -217
  187. package/esm2015/lib/_internal/bundle.api.service.js +0 -51
  188. package/esm2015/lib/_internal/contract-document.api.service.js +0 -46
  189. package/esm2015/lib/_internal/contract.api.service.js +0 -56
  190. package/esm2015/lib/_internal/credit.api.service.js +0 -46
  191. package/esm2015/lib/_internal/discount.api.service.js +0 -54
  192. package/esm2015/lib/_internal/enums/applied-discount.enum.js +0 -14
  193. package/esm2015/lib/_internal/enums/card.enum.js +0 -17
  194. package/esm2015/lib/_internal/enums/contract.enum.js +0 -14
  195. package/esm2015/lib/_internal/enums/currency.enum.js +0 -35
  196. package/esm2015/lib/_internal/enums/frequency.enum.js +0 -14
  197. package/esm2015/lib/_internal/enums/index.js +0 -31
  198. package/esm2015/lib/_internal/enums/invoice.enum.js +0 -18
  199. package/esm2015/lib/_internal/enums/merchant-report.enum.js +0 -13
  200. package/esm2015/lib/_internal/enums/month.enum.js +0 -23
  201. package/esm2015/lib/_internal/enums/payment-card.enum.js +0 -24
  202. package/esm2015/lib/_internal/enums/payment-processor.enum.js +0 -13
  203. package/esm2015/lib/_internal/enums/payout.enum.js +0 -22
  204. package/esm2015/lib/_internal/enums/pricing-plan.enum.js +0 -22
  205. package/esm2015/lib/_internal/enums/product.enum.js +0 -17
  206. package/esm2015/lib/_internal/enums/purchase.enum.js +0 -27
  207. package/esm2015/lib/_internal/enums/recurring-invoice.enum.js +0 -29
  208. package/esm2015/lib/_internal/enums/refund.enum.js +0 -25
  209. package/esm2015/lib/_internal/enums/sales-credit-note.enum.js +0 -14
  210. package/esm2015/lib/_internal/enums/sort-direction.enum.js +0 -12
  211. package/esm2015/lib/_internal/enums/subscription.enum.js +0 -12
  212. package/esm2015/lib/_internal/index.js +0 -33
  213. package/esm2015/lib/_internal/interfaces/api.interface.js +0 -2
  214. package/esm2015/lib/_internal/interfaces/applied-bundle.interface.js +0 -8
  215. package/esm2015/lib/_internal/interfaces/applied-discount.interface.js +0 -8
  216. package/esm2015/lib/_internal/interfaces/applied-tax-rate.interface.js +0 -8
  217. package/esm2015/lib/_internal/interfaces/balance.interface.js +0 -8
  218. package/esm2015/lib/_internal/interfaces/billable-item.interface.js +0 -2
  219. package/esm2015/lib/_internal/interfaces/bundle.interface.js +0 -2
  220. package/esm2015/lib/_internal/interfaces/card.interface.js +0 -8
  221. package/esm2015/lib/_internal/interfaces/commitment.interface.js +0 -8
  222. package/esm2015/lib/_internal/interfaces/common.interface.js +0 -8
  223. package/esm2015/lib/_internal/interfaces/contract-document.interface.js +0 -2
  224. package/esm2015/lib/_internal/interfaces/contract.interface.js +0 -2
  225. package/esm2015/lib/_internal/interfaces/credit.interface.js +0 -8
  226. package/esm2015/lib/_internal/interfaces/currency.interface.js +0 -8
  227. package/esm2015/lib/_internal/interfaces/customer-summary.interface.js +0 -8
  228. package/esm2015/lib/_internal/interfaces/date-range.interface.js +0 -8
  229. package/esm2015/lib/_internal/interfaces/discount.interface.js +0 -2
  230. package/esm2015/lib/_internal/interfaces/external-account.interface.js +0 -8
  231. package/esm2015/lib/_internal/interfaces/field-mask.interface.js +0 -8
  232. package/esm2015/lib/_internal/interfaces/frequency.interface.js +0 -8
  233. package/esm2015/lib/_internal/interfaces/index.js +0 -2
  234. package/esm2015/lib/_internal/interfaces/invoice-template.interface.js +0 -2
  235. package/esm2015/lib/_internal/interfaces/invoice.interface.js +0 -2
  236. package/esm2015/lib/_internal/interfaces/merchant-report.interface.js +0 -2
  237. package/esm2015/lib/_internal/interfaces/merchant.interface.js +0 -2
  238. package/esm2015/lib/_internal/interfaces/metered-component.interface.js +0 -8
  239. package/esm2015/lib/_internal/interfaces/month.interface.js +0 -8
  240. package/esm2015/lib/_internal/interfaces/payment-card.interface.js +0 -8
  241. package/esm2015/lib/_internal/interfaces/payment-processor.interface.js +0 -8
  242. package/esm2015/lib/_internal/interfaces/payment.interface.js +0 -2
  243. package/esm2015/lib/_internal/interfaces/payout.interface.js +0 -2
  244. package/esm2015/lib/_internal/interfaces/pricing-plan-product.interface.js +0 -2
  245. package/esm2015/lib/_internal/interfaces/pricing-plan.interface.js +0 -2
  246. package/esm2015/lib/_internal/interfaces/product-pricing.interface.js +0 -2
  247. package/esm2015/lib/_internal/interfaces/product-summary.interface.js +0 -2
  248. package/esm2015/lib/_internal/interfaces/product.interface.js +0 -2
  249. package/esm2015/lib/_internal/interfaces/purchase.interface.js +0 -2
  250. package/esm2015/lib/_internal/interfaces/recurring-invoice.interface.js +0 -2
  251. package/esm2015/lib/_internal/interfaces/refund.interface.js +0 -8
  252. package/esm2015/lib/_internal/interfaces/retail-customer-configuration.interface.js +0 -8
  253. package/esm2015/lib/_internal/interfaces/sales-credit-note.interface.js +0 -2
  254. package/esm2015/lib/_internal/interfaces/sales-invoice.interface.js +0 -2
  255. package/esm2015/lib/_internal/interfaces/sort-direction.interface.js +0 -8
  256. package/esm2015/lib/_internal/interfaces/subscribe-validation.interface.js +0 -8
  257. package/esm2015/lib/_internal/interfaces/subscription.interface.js +0 -2
  258. package/esm2015/lib/_internal/interfaces/tax-rate.interface.js +0 -2
  259. package/esm2015/lib/_internal/invoice-template.api.service.js +0 -86
  260. package/esm2015/lib/_internal/invoice.api.service.js +0 -117
  261. package/esm2015/lib/_internal/merchant.api.service.js +0 -160
  262. package/esm2015/lib/_internal/objects/api.js +0 -841
  263. package/esm2015/lib/_internal/objects/applied-bundle.js +0 -77
  264. package/esm2015/lib/_internal/objects/applied-discount.js +0 -46
  265. package/esm2015/lib/_internal/objects/applied-tax-rate.js +0 -39
  266. package/esm2015/lib/_internal/objects/balance.js +0 -45
  267. package/esm2015/lib/_internal/objects/billable-item.js +0 -562
  268. package/esm2015/lib/_internal/objects/bundle.js +0 -390
  269. package/esm2015/lib/_internal/objects/card.js +0 -7
  270. package/esm2015/lib/_internal/objects/commitment.js +0 -36
  271. package/esm2015/lib/_internal/objects/common.js +0 -56
  272. package/esm2015/lib/_internal/objects/contract-document.js +0 -141
  273. package/esm2015/lib/_internal/objects/contract.js +0 -474
  274. package/esm2015/lib/_internal/objects/credit.js +0 -114
  275. package/esm2015/lib/_internal/objects/currency.js +0 -7
  276. package/esm2015/lib/_internal/objects/customer-summary.js +0 -104
  277. package/esm2015/lib/_internal/objects/date-range.js +0 -36
  278. package/esm2015/lib/_internal/objects/discount.js +0 -299
  279. package/esm2015/lib/_internal/objects/external-account.js +0 -160
  280. package/esm2015/lib/_internal/objects/field-mask.js +0 -27
  281. package/esm2015/lib/_internal/objects/frequency.js +0 -7
  282. package/esm2015/lib/_internal/objects/index.js +0 -46
  283. package/esm2015/lib/_internal/objects/invoice-template.js +0 -707
  284. package/esm2015/lib/_internal/objects/invoice.js +0 -1117
  285. package/esm2015/lib/_internal/objects/merchant-report.js +0 -108
  286. package/esm2015/lib/_internal/objects/merchant.js +0 -991
  287. package/esm2015/lib/_internal/objects/metered-component.js +0 -97
  288. package/esm2015/lib/_internal/objects/month.js +0 -7
  289. package/esm2015/lib/_internal/objects/payment-card.js +0 -211
  290. package/esm2015/lib/_internal/objects/payment-processor.js +0 -7
  291. package/esm2015/lib/_internal/objects/payment.js +0 -1219
  292. package/esm2015/lib/_internal/objects/payout.js +0 -258
  293. package/esm2015/lib/_internal/objects/pricing-plan-product.js +0 -565
  294. package/esm2015/lib/_internal/objects/pricing-plan.js +0 -290
  295. package/esm2015/lib/_internal/objects/product-pricing.js +0 -107
  296. package/esm2015/lib/_internal/objects/product-summary.js +0 -538
  297. package/esm2015/lib/_internal/objects/product.js +0 -302
  298. package/esm2015/lib/_internal/objects/purchase.js +0 -524
  299. package/esm2015/lib/_internal/objects/recurring-invoice.js +0 -324
  300. package/esm2015/lib/_internal/objects/refund.js +0 -181
  301. package/esm2015/lib/_internal/objects/retail-customer-configuration.js +0 -159
  302. package/esm2015/lib/_internal/objects/sales-credit-note.js +0 -211
  303. package/esm2015/lib/_internal/objects/sales-invoice.js +0 -300
  304. package/esm2015/lib/_internal/objects/sort-direction.js +0 -7
  305. package/esm2015/lib/_internal/objects/subscribe-validation.js +0 -31
  306. package/esm2015/lib/_internal/objects/subscription.js +0 -555
  307. package/esm2015/lib/_internal/objects/tax-rate.js +0 -342
  308. package/esm2015/lib/_internal/payment-method.api.service.js +0 -50
  309. package/esm2015/lib/_internal/payment.api.service.js +0 -103
  310. package/esm2015/lib/_internal/pricing.api.service.js +0 -77
  311. package/esm2015/lib/_internal/product-summary.api.service.js +0 -47
  312. package/esm2015/lib/_internal/product.api.service.js +0 -48
  313. package/esm2015/lib/_internal/purchase.api.service.js +0 -60
  314. package/esm2015/lib/_internal/recurring-invoice.api.service.js +0 -61
  315. package/esm2015/lib/_internal/refund.api.service.js +0 -46
  316. package/esm2015/lib/_internal/retail-customer-configuration.api.service.js +0 -46
  317. package/esm2015/lib/_internal/sales-credit-note.api.service.js +0 -46
  318. package/esm2015/lib/_internal/sales-invoice.api.service.js +0 -51
  319. package/esm2015/lib/_internal/tax.api.service.js +0 -64
  320. package/esm2015/lib/_internal/vendor.api.service.js +0 -47
  321. package/esm2015/lib/applied_bundle/applied_bundle.js +0 -12
  322. package/esm2015/lib/applied_bundle/index.js +0 -2
  323. package/esm2015/lib/applied_discount/applied_discount.js +0 -48
  324. package/esm2015/lib/applied_discount/index.js +0 -2
  325. package/esm2015/lib/bank_account/bank-account.service.js +0 -38
  326. package/esm2015/lib/bank_account/bank_account.js +0 -13
  327. package/esm2015/lib/bank_account/index.js +0 -3
  328. package/esm2015/lib/bank_reconciliation/bank-reconciliation.service.js +0 -54
  329. package/esm2015/lib/bank_reconciliation/index.js +0 -3
  330. package/esm2015/lib/bank_reconciliation/payout.js +0 -53
  331. package/esm2015/lib/billable-item/billable-item.js +0 -40
  332. package/esm2015/lib/billable-item/billable-item.service.js +0 -31
  333. package/esm2015/lib/billable-item/index.js +0 -2
  334. package/esm2015/lib/billing-host.service.js +0 -41
  335. package/esm2015/lib/billing.service.js +0 -376
  336. package/esm2015/lib/bundle/bundle.js +0 -37
  337. package/esm2015/lib/bundle/bundle.service.js +0 -56
  338. package/esm2015/lib/bundle/index.js +0 -2
  339. package/esm2015/lib/contract/contract.js +0 -21
  340. package/esm2015/lib/contract/contract.service.js +0 -39
  341. package/esm2015/lib/contract/dimension.js +0 -21
  342. package/esm2015/lib/contract/index.js +0 -5
  343. package/esm2015/lib/contract/mutations.js +0 -11
  344. package/esm2015/lib/contract-document/contract-document.js +0 -9
  345. package/esm2015/lib/contract-document/contract-document.service.js +0 -68
  346. package/esm2015/lib/contract-document/index.js +0 -2
  347. package/esm2015/lib/contract-document/list-contract-document.js +0 -2
  348. package/esm2015/lib/core/index.js +0 -3
  349. package/esm2015/lib/core/paged-response.js +0 -8
  350. package/esm2015/lib/core/sort-direction.js +0 -6
  351. package/esm2015/lib/credit/credit.js +0 -8
  352. package/esm2015/lib/credit/credit.service.js +0 -33
  353. package/esm2015/lib/credit/index.js +0 -2
  354. package/esm2015/lib/customer_summary/customer-summary.js +0 -15
  355. package/esm2015/lib/discount/discount.js +0 -18
  356. package/esm2015/lib/discount/discount.service.js +0 -73
  357. package/esm2015/lib/discount/discount_type.js +0 -32
  358. package/esm2015/lib/discount/index.js +0 -3
  359. package/esm2015/lib/discount/list-discount.js +0 -2
  360. package/esm2015/lib/http-shared/error-handlers.js +0 -20
  361. package/esm2015/lib/index.js +0 -38
  362. package/esm2015/lib/invoice/index.js +0 -3
  363. package/esm2015/lib/invoice/invoice.js +0 -198
  364. package/esm2015/lib/invoice/invoice.service.js +0 -254
  365. package/esm2015/lib/invoice/list-invoice.js +0 -2
  366. package/esm2015/lib/invoice-template/index.js +0 -2
  367. package/esm2015/lib/invoice-template/invoice-template.js +0 -38
  368. package/esm2015/lib/invoice-template/invoice-template.service.js +0 -78
  369. package/esm2015/lib/merchant/balance.js +0 -2
  370. package/esm2015/lib/merchant/index.js +0 -5
  371. package/esm2015/lib/merchant/merchant.interface.js +0 -2
  372. package/esm2015/lib/merchant/merchant.js +0 -20
  373. package/esm2015/lib/merchant/merchant.service.js +0 -212
  374. package/esm2015/lib/merchant/payout-summary.js +0 -32
  375. package/esm2015/lib/merchant/retail-configuration.js +0 -57
  376. package/esm2015/lib/merchant-report/index.js +0 -2
  377. package/esm2015/lib/merchant-report/merchant-report-status.js +0 -2
  378. package/esm2015/lib/merchant-report/merchant-report.interfaces.js +0 -2
  379. package/esm2015/lib/merchant-report/merchant-report.js +0 -2
  380. package/esm2015/lib/merchant-report/merchant-report.service.js +0 -38
  381. package/esm2015/lib/payment/dispute.js +0 -92
  382. package/esm2015/lib/payment/index.js +0 -10
  383. package/esm2015/lib/payment/payment-allocation-type.js +0 -18
  384. package/esm2015/lib/payment/payment-source.js +0 -18
  385. package/esm2015/lib/payment/payment-status.js +0 -17
  386. package/esm2015/lib/payment/payment.js +0 -292
  387. package/esm2015/lib/payment/payment.service.js +0 -138
  388. package/esm2015/lib/payment/retail-payment.js +0 -70
  389. package/esm2015/lib/payment/retail-status.js +0 -50
  390. package/esm2015/lib/payment-card/index.js +0 -3
  391. package/esm2015/lib/payment-card/payment-card.js +0 -60
  392. package/esm2015/lib/payment-card/payment-card.service.js +0 -45
  393. package/esm2015/lib/payment-method/index.js +0 -2
  394. package/esm2015/lib/payment-method/payment-method.service.js +0 -43
  395. package/esm2015/lib/pricing/billing-strategy.js +0 -39
  396. package/esm2015/lib/pricing/commitment.js +0 -7
  397. package/esm2015/lib/pricing/currency.js +0 -86
  398. package/esm2015/lib/pricing/frequency.js +0 -42
  399. package/esm2015/lib/pricing/index.js +0 -12
  400. package/esm2015/lib/pricing/list-pricing-plan-product-filter.js +0 -2
  401. package/esm2015/lib/pricing/pricing-plan-product.js +0 -53
  402. package/esm2015/lib/pricing/pricing-plan.js +0 -14
  403. package/esm2015/lib/pricing/pricing-plan.service.js +0 -287
  404. package/esm2015/lib/pricing/product-pricing-rules.js +0 -10
  405. package/esm2015/lib/pricing/product-pricing-type.js +0 -31
  406. package/esm2015/lib/pricing/product-pricing.js +0 -44
  407. package/esm2015/lib/pricing/wholesale-pricing.service.js +0 -61
  408. package/esm2015/lib/product/index.js +0 -3
  409. package/esm2015/lib/product/list-products.js +0 -30
  410. package/esm2015/lib/product/product.js +0 -10
  411. package/esm2015/lib/product-summary/index.js +0 -3
  412. package/esm2015/lib/product-summary/product-summary.service.js +0 -42
  413. package/esm2015/lib/product-summary/subscription-retention.js +0 -19
  414. package/esm2015/lib/purchase/index.js +0 -4
  415. package/esm2015/lib/purchase/list-purchases.js +0 -17
  416. package/esm2015/lib/purchase/purchase.js +0 -79
  417. package/esm2015/lib/purchase/purchase.service.js +0 -31
  418. package/esm2015/lib/purchase/purchase_status.js +0 -26
  419. package/esm2015/lib/recurring_invoice/collection-method.js +0 -31
  420. package/esm2015/lib/recurring_invoice/index.js +0 -6
  421. package/esm2015/lib/recurring_invoice/interval.js +0 -42
  422. package/esm2015/lib/recurring_invoice/payment-processor.js +0 -32
  423. package/esm2015/lib/recurring_invoice/recurring-invoice.js +0 -123
  424. package/esm2015/lib/recurring_invoice/recurring-invoice.service.js +0 -64
  425. package/esm2015/lib/recurring_invoice/status.js +0 -37
  426. package/esm2015/lib/refund/index.js +0 -3
  427. package/esm2015/lib/refund/refund.js +0 -81
  428. package/esm2015/lib/refund/refund.service.js +0 -53
  429. package/esm2015/lib/retail-customer-configuration/index.js +0 -3
  430. package/esm2015/lib/retail-customer-configuration/retail-customer-configuration.js +0 -44
  431. package/esm2015/lib/retail-customer-configuration/retail-customer-configuration.service.js +0 -39
  432. package/esm2015/lib/revenue/index.js +0 -2
  433. package/esm2015/lib/revenue/revenue.interfaces.js +0 -2
  434. package/esm2015/lib/revenue/revenue.service.js +0 -34
  435. package/esm2015/lib/sales-credit-note/index.js +0 -3
  436. package/esm2015/lib/sales-credit-note/sales-credit-note.js +0 -53
  437. package/esm2015/lib/sales-credit-note/sales-credit-note.service.js +0 -72
  438. package/esm2015/lib/sales-invoice/index.js +0 -3
  439. package/esm2015/lib/sales-invoice/sales-invoice.js +0 -87
  440. package/esm2015/lib/sales-invoice/sales-invoice.service.js +0 -77
  441. package/esm2015/lib/sku.js +0 -4
  442. package/esm2015/lib/stripe-file/file.js +0 -2
  443. package/esm2015/lib/stripe-file/index.js +0 -3
  444. package/esm2015/lib/stripe-file/purpose.js +0 -13
  445. package/esm2015/lib/stripe-file/stripe-file.service.js +0 -35
  446. package/esm2015/lib/subscription/can-create-subscriptions-item.js +0 -2
  447. package/esm2015/lib/subscription/index.js +0 -2
  448. package/esm2015/lib/tax-rate/index.js +0 -2
  449. package/esm2015/lib/tax-rate/tax-rate.js +0 -13
  450. package/esm2015/lib/tax-rate/tax-rate.service.js +0 -86
  451. package/esm2015/public_api.js +0 -2
  452. package/esm2015/vendasta-billing.js +0 -5
  453. package/fesm2015/vendasta-billing.js.map +0 -1
  454. package/lib/applied_bundle/applied_bundle.d.ts +0 -15
  455. package/lib/applied_bundle/index.d.ts +0 -1
  456. package/lib/applied_discount/applied_discount.d.ts +0 -26
  457. package/lib/applied_discount/index.d.ts +0 -1
  458. package/lib/bank_account/bank-account.service.d.ts +0 -11
  459. package/lib/bank_account/bank_account.d.ts +0 -12
  460. package/lib/bank_account/index.d.ts +0 -3
  461. package/lib/bank_reconciliation/bank-reconciliation.service.d.ts +0 -10
  462. package/lib/bank_reconciliation/index.d.ts +0 -2
  463. package/lib/bank_reconciliation/payout.d.ts +0 -37
  464. package/lib/billable-item/billable-item.d.ts +0 -40
  465. package/lib/billable-item/billable-item.service.d.ts +0 -10
  466. package/lib/billable-item/index.d.ts +0 -2
  467. package/lib/billing-host.service.d.ts +0 -11
  468. package/lib/billing.service.d.ts +0 -88
  469. package/lib/bundle/bundle.d.ts +0 -26
  470. package/lib/bundle/bundle.service.d.ts +0 -14
  471. package/lib/bundle/index.d.ts +0 -2
  472. package/lib/contract/contract.d.ts +0 -20
  473. package/lib/contract/contract.service.d.ts +0 -23
  474. package/lib/contract/dimension.d.ts +0 -11
  475. package/lib/contract/index.d.ts +0 -5
  476. package/lib/contract/mutations.d.ts +0 -11
  477. package/lib/contract-document/contract-document.d.ts +0 -8
  478. package/lib/contract-document/contract-document.service.d.ts +0 -17
  479. package/lib/contract-document/index.d.ts +0 -3
  480. package/lib/contract-document/list-contract-document.d.ts +0 -3
  481. package/lib/core/index.d.ts +0 -2
  482. package/lib/core/paged-response.d.ts +0 -6
  483. package/lib/core/sort-direction.d.ts +0 -4
  484. package/lib/credit/credit.d.ts +0 -7
  485. package/lib/credit/credit.service.d.ts +0 -9
  486. package/lib/credit/index.d.ts +0 -2
  487. package/lib/customer_summary/customer-summary.d.ts +0 -9
  488. package/lib/discount/discount.d.ts +0 -17
  489. package/lib/discount/discount.service.d.ts +0 -15
  490. package/lib/discount/discount_type.d.ts +0 -9
  491. package/lib/discount/index.d.ts +0 -4
  492. package/lib/discount/list-discount.d.ts +0 -5
  493. package/lib/http-shared/error-handlers.d.ts +0 -4
  494. package/lib/invoice/index.d.ts +0 -3
  495. package/lib/invoice/invoice.d.ts +0 -86
  496. package/lib/invoice/invoice.service.d.ts +0 -40
  497. package/lib/invoice/list-invoice.d.ts +0 -15
  498. package/lib/invoice-template/index.d.ts +0 -2
  499. package/lib/invoice-template/invoice-template.d.ts +0 -35
  500. package/lib/invoice-template/invoice-template.service.d.ts +0 -14
  501. package/lib/merchant/balance.d.ts +0 -5
  502. package/lib/merchant/index.d.ts +0 -7
  503. package/lib/merchant/merchant.d.ts +0 -19
  504. package/lib/merchant/merchant.interface.d.ts +0 -3
  505. package/lib/merchant/merchant.service.d.ts +0 -59
  506. package/lib/merchant/payout-summary.d.ts +0 -19
  507. package/lib/merchant/retail-configuration.d.ts +0 -24
  508. package/lib/merchant-report/index.d.ts +0 -4
  509. package/lib/merchant-report/merchant-report-status.d.ts +0 -1
  510. package/lib/merchant-report/merchant-report.d.ts +0 -8
  511. package/lib/merchant-report/merchant-report.interfaces.d.ts +0 -5
  512. package/lib/merchant-report/merchant-report.service.d.ts +0 -12
  513. package/lib/payment/dispute.d.ts +0 -61
  514. package/lib/payment/index.d.ts +0 -9
  515. package/lib/payment/payment-allocation-type.d.ts +0 -7
  516. package/lib/payment/payment-source.d.ts +0 -7
  517. package/lib/payment/payment-status.d.ts +0 -7
  518. package/lib/payment/payment.d.ts +0 -42
  519. package/lib/payment/payment.service.d.ts +0 -24
  520. package/lib/payment/retail-payment.d.ts +0 -33
  521. package/lib/payment/retail-status.d.ts +0 -24
  522. package/lib/payment-card/index.d.ts +0 -2
  523. package/lib/payment-card/payment-card.d.ts +0 -41
  524. package/lib/payment-card/payment-card.service.d.ts +0 -13
  525. package/lib/payment-method/index.d.ts +0 -1
  526. package/lib/payment-method/payment-method.service.d.ts +0 -10
  527. package/lib/pricing/billing-strategy.d.ts +0 -11
  528. package/lib/pricing/commitment.d.ts +0 -6
  529. package/lib/pricing/currency.d.ts +0 -29
  530. package/lib/pricing/frequency.d.ts +0 -10
  531. package/lib/pricing/index.d.ts +0 -11
  532. package/lib/pricing/list-pricing-plan-product-filter.d.ts +0 -4
  533. package/lib/pricing/pricing-plan-product.d.ts +0 -34
  534. package/lib/pricing/pricing-plan.d.ts +0 -13
  535. package/lib/pricing/pricing-plan.service.d.ts +0 -17
  536. package/lib/pricing/product-pricing-rules.d.ts +0 -7
  537. package/lib/pricing/product-pricing-type.d.ts +0 -9
  538. package/lib/pricing/product-pricing.d.ts +0 -37
  539. package/lib/pricing/wholesale-pricing.service.d.ts +0 -19
  540. package/lib/product/index.d.ts +0 -2
  541. package/lib/product/list-products.d.ts +0 -16
  542. package/lib/product/product.d.ts +0 -9
  543. package/lib/product-summary/index.d.ts +0 -2
  544. package/lib/product-summary/product-summary.service.d.ts +0 -10
  545. package/lib/product-summary/subscription-retention.d.ts +0 -20
  546. package/lib/purchase/index.d.ts +0 -4
  547. package/lib/purchase/list-purchases.d.ts +0 -27
  548. package/lib/purchase/purchase.d.ts +0 -56
  549. package/lib/purchase/purchase.service.d.ts +0 -10
  550. package/lib/purchase/purchase_status.d.ts +0 -10
  551. package/lib/recurring_invoice/collection-method.d.ts +0 -4
  552. package/lib/recurring_invoice/index.d.ts +0 -5
  553. package/lib/recurring_invoice/interval.d.ts +0 -10
  554. package/lib/recurring_invoice/payment-processor.d.ts +0 -8
  555. package/lib/recurring_invoice/recurring-invoice.d.ts +0 -62
  556. package/lib/recurring_invoice/recurring-invoice.service.d.ts +0 -14
  557. package/lib/recurring_invoice/status.d.ts +0 -9
  558. package/lib/refund/index.d.ts +0 -2
  559. package/lib/refund/refund.d.ts +0 -36
  560. package/lib/refund/refund.service.d.ts +0 -11
  561. package/lib/retail-customer-configuration/index.d.ts +0 -2
  562. package/lib/retail-customer-configuration/retail-customer-configuration.d.ts +0 -20
  563. package/lib/retail-customer-configuration/retail-customer-configuration.service.d.ts +0 -9
  564. package/lib/revenue/index.d.ts +0 -2
  565. package/lib/revenue/revenue.interfaces.d.ts +0 -3
  566. package/lib/revenue/revenue.service.d.ts +0 -11
  567. package/lib/sales-credit-note/index.d.ts +0 -2
  568. package/lib/sales-credit-note/sales-credit-note.d.ts +0 -30
  569. package/lib/sales-credit-note/sales-credit-note.service.d.ts +0 -16
  570. package/lib/sales-invoice/index.d.ts +0 -2
  571. package/lib/sales-invoice/sales-invoice.d.ts +0 -42
  572. package/lib/sales-invoice/sales-invoice.service.d.ts +0 -16
  573. package/lib/sku.d.ts +0 -3
  574. package/lib/stripe-file/file.d.ts +0 -6
  575. package/lib/stripe-file/index.d.ts +0 -3
  576. package/lib/stripe-file/purpose.d.ts +0 -11
  577. package/lib/stripe-file/stripe-file.service.d.ts +0 -12
  578. package/lib/subscription/can-create-subscriptions-item.d.ts +0 -6
  579. package/lib/subscription/index.d.ts +0 -1
  580. package/lib/tax-rate/index.d.ts +0 -2
  581. package/lib/tax-rate/tax-rate.d.ts +0 -20
  582. package/lib/tax-rate/tax-rate.service.d.ts +0 -15
  583. package/vendasta-billing.metadata.json +0 -1
@@ -0,0 +1,841 @@
1
+ import { BundlePricing } from './bundle';
2
+ import { Commitment } from './commitment';
3
+ import { PricingPlanProductPricing } from './pricing-plan';
4
+ import { ProductPrices, ProductPricing } from './product-pricing';
5
+ import * as e from '../enums';
6
+ export function enumStringToValue(enumRef, value) {
7
+ if (typeof value === 'number') {
8
+ return value;
9
+ }
10
+ return enumRef[value];
11
+ }
12
+ export class DeleteRetailPricingRequest {
13
+ constructor(kwargs) {
14
+ if (!kwargs) {
15
+ return;
16
+ }
17
+ Object.assign(this, kwargs);
18
+ }
19
+ static fromProto(proto) {
20
+ let m = new DeleteRetailPricingRequest();
21
+ m = Object.assign(m, proto);
22
+ return m;
23
+ }
24
+ toApiJson() {
25
+ const toReturn = {};
26
+ if (typeof this.merchantId !== 'undefined') {
27
+ toReturn['merchantId'] = this.merchantId;
28
+ }
29
+ if (typeof this.groupId !== 'undefined') {
30
+ toReturn['groupId'] = this.groupId;
31
+ }
32
+ if (typeof this.sku !== 'undefined') {
33
+ toReturn['sku'] = this.sku;
34
+ }
35
+ return toReturn;
36
+ }
37
+ }
38
+ export class GenerateBillableItemsCSVRequest {
39
+ constructor(kwargs) {
40
+ if (!kwargs) {
41
+ return;
42
+ }
43
+ Object.assign(this, kwargs);
44
+ }
45
+ static fromProto(proto) {
46
+ let m = new GenerateBillableItemsCSVRequest();
47
+ m = Object.assign(m, proto);
48
+ if (proto.periodStart) {
49
+ m.periodStart = new Date(proto.periodStart);
50
+ }
51
+ if (proto.periodEnd) {
52
+ m.periodEnd = new Date(proto.periodEnd);
53
+ }
54
+ return m;
55
+ }
56
+ toApiJson() {
57
+ const toReturn = {};
58
+ if (typeof this.merchantId !== 'undefined') {
59
+ toReturn['merchantId'] = this.merchantId;
60
+ }
61
+ if (typeof this.periodStart !== 'undefined' && this.periodStart !== null) {
62
+ toReturn['periodStart'] = 'toApiJson' in this.periodStart ? this.periodStart.toApiJson() : this.periodStart;
63
+ }
64
+ if (typeof this.periodEnd !== 'undefined' && this.periodEnd !== null) {
65
+ toReturn['periodEnd'] = 'toApiJson' in this.periodEnd ? this.periodEnd.toApiJson() : this.periodEnd;
66
+ }
67
+ return toReturn;
68
+ }
69
+ }
70
+ export class GenerateBillableItemsCSVResponse {
71
+ constructor(kwargs) {
72
+ if (!kwargs) {
73
+ return;
74
+ }
75
+ Object.assign(this, kwargs);
76
+ }
77
+ static fromProto(proto) {
78
+ let m = new GenerateBillableItemsCSVResponse();
79
+ m = Object.assign(m, proto);
80
+ return m;
81
+ }
82
+ toApiJson() {
83
+ const toReturn = {};
84
+ if (typeof this.url !== 'undefined') {
85
+ toReturn['url'] = this.url;
86
+ }
87
+ return toReturn;
88
+ }
89
+ }
90
+ export class GenerateVendorReportRequest {
91
+ constructor(kwargs) {
92
+ if (!kwargs) {
93
+ return;
94
+ }
95
+ Object.assign(this, kwargs);
96
+ }
97
+ static fromProto(proto) {
98
+ let m = new GenerateVendorReportRequest();
99
+ m = Object.assign(m, proto);
100
+ if (proto.periodStart) {
101
+ m.periodStart = new Date(proto.periodStart);
102
+ }
103
+ if (proto.periodEnd) {
104
+ m.periodEnd = new Date(proto.periodEnd);
105
+ }
106
+ return m;
107
+ }
108
+ toApiJson() {
109
+ const toReturn = {};
110
+ if (typeof this.skus !== 'undefined') {
111
+ toReturn['skus'] = this.skus;
112
+ }
113
+ if (typeof this.periodStart !== 'undefined' && this.periodStart !== null) {
114
+ toReturn['periodStart'] = 'toApiJson' in this.periodStart ? this.periodStart.toApiJson() : this.periodStart;
115
+ }
116
+ if (typeof this.periodEnd !== 'undefined' && this.periodEnd !== null) {
117
+ toReturn['periodEnd'] = 'toApiJson' in this.periodEnd ? this.periodEnd.toApiJson() : this.periodEnd;
118
+ }
119
+ if (typeof this.vendorName !== 'undefined') {
120
+ toReturn['vendorName'] = this.vendorName;
121
+ }
122
+ if (typeof this.markAsApproved !== 'undefined') {
123
+ toReturn['markAsApproved'] = this.markAsApproved;
124
+ }
125
+ return toReturn;
126
+ }
127
+ }
128
+ export class GenerateVendorReportResponse {
129
+ constructor(kwargs) {
130
+ if (!kwargs) {
131
+ return;
132
+ }
133
+ Object.assign(this, kwargs);
134
+ }
135
+ static fromProto(proto) {
136
+ let m = new GenerateVendorReportResponse();
137
+ m = Object.assign(m, proto);
138
+ return m;
139
+ }
140
+ toApiJson() {
141
+ const toReturn = {};
142
+ if (typeof this.url !== 'undefined') {
143
+ toReturn['url'] = this.url;
144
+ }
145
+ if (typeof this.bucket !== 'undefined') {
146
+ toReturn['bucket'] = this.bucket;
147
+ }
148
+ if (typeof this.filename !== 'undefined') {
149
+ toReturn['filename'] = this.filename;
150
+ }
151
+ return toReturn;
152
+ }
153
+ }
154
+ export class GetMultiBundleRetailPricingRequest {
155
+ constructor(kwargs) {
156
+ if (!kwargs) {
157
+ return;
158
+ }
159
+ Object.assign(this, kwargs);
160
+ }
161
+ static fromProto(proto) {
162
+ let m = new GetMultiBundleRetailPricingRequest();
163
+ m = Object.assign(m, proto);
164
+ return m;
165
+ }
166
+ toApiJson() {
167
+ const toReturn = {};
168
+ if (typeof this.merchantId !== 'undefined') {
169
+ toReturn['merchantId'] = this.merchantId;
170
+ }
171
+ if (typeof this.storeId !== 'undefined') {
172
+ toReturn['storeId'] = this.storeId;
173
+ }
174
+ if (typeof this.bundleIds !== 'undefined') {
175
+ toReturn['bundleIds'] = this.bundleIds;
176
+ }
177
+ return toReturn;
178
+ }
179
+ }
180
+ export class GetMultiBundleRetailPricingResponse {
181
+ constructor(kwargs) {
182
+ if (!kwargs) {
183
+ return;
184
+ }
185
+ Object.assign(this, kwargs);
186
+ }
187
+ static fromProto(proto) {
188
+ let m = new GetMultiBundleRetailPricingResponse();
189
+ m = Object.assign(m, proto);
190
+ if (proto.prices) {
191
+ m.prices = Object.keys(proto.prices).reduce((obj, k) => { obj[k] = BundlePricing.fromProto(proto.prices[k]); return obj; }, {});
192
+ }
193
+ return m;
194
+ }
195
+ toApiJson() {
196
+ const toReturn = {};
197
+ if (typeof this.prices !== 'undefined' && this.prices !== null) {
198
+ toReturn['prices'] = 'toApiJson' in this.prices ? this.prices.toApiJson() : this.prices;
199
+ }
200
+ return toReturn;
201
+ }
202
+ }
203
+ export class GetMultiProductPricingRequest {
204
+ constructor(kwargs) {
205
+ if (!kwargs) {
206
+ return;
207
+ }
208
+ Object.assign(this, kwargs);
209
+ }
210
+ static fromProto(proto) {
211
+ let m = new GetMultiProductPricingRequest();
212
+ m = Object.assign(m, proto);
213
+ return m;
214
+ }
215
+ toApiJson() {
216
+ const toReturn = {};
217
+ if (typeof this.merchantId !== 'undefined') {
218
+ toReturn['merchantId'] = this.merchantId;
219
+ }
220
+ if (typeof this.skus !== 'undefined') {
221
+ toReturn['skus'] = this.skus;
222
+ }
223
+ if (typeof this.pricingPlanId !== 'undefined') {
224
+ toReturn['pricingPlanId'] = this.pricingPlanId;
225
+ }
226
+ return toReturn;
227
+ }
228
+ }
229
+ export class GetMultiProductPricingResponse {
230
+ constructor(kwargs) {
231
+ if (!kwargs) {
232
+ return;
233
+ }
234
+ Object.assign(this, kwargs);
235
+ }
236
+ static fromProto(proto) {
237
+ let m = new GetMultiProductPricingResponse();
238
+ m = Object.assign(m, proto);
239
+ if (proto.productPrices) {
240
+ m.productPrices = Object.keys(proto.productPrices).reduce((obj, k) => { obj[k] = ProductPricing.fromProto(proto.productPrices[k]); return obj; }, {});
241
+ }
242
+ if (proto.prices) {
243
+ m.prices = proto.prices.map(ProductPrices.fromProto);
244
+ }
245
+ return m;
246
+ }
247
+ toApiJson() {
248
+ const toReturn = {};
249
+ if (typeof this.productPrices !== 'undefined' && this.productPrices !== null) {
250
+ toReturn['productPrices'] = 'toApiJson' in this.productPrices ? this.productPrices.toApiJson() : this.productPrices;
251
+ }
252
+ if (typeof this.prices !== 'undefined' && this.prices !== null) {
253
+ toReturn['prices'] = 'toApiJson' in this.prices ? this.prices.toApiJson() : this.prices;
254
+ }
255
+ return toReturn;
256
+ }
257
+ }
258
+ export class GetMultiRetailPricingRequest {
259
+ constructor(kwargs) {
260
+ if (!kwargs) {
261
+ return;
262
+ }
263
+ Object.assign(this, kwargs);
264
+ }
265
+ static fromProto(proto) {
266
+ let m = new GetMultiRetailPricingRequest();
267
+ m = Object.assign(m, proto);
268
+ if (proto.currency) {
269
+ m.currency = enumStringToValue(e.Currency, proto.currency);
270
+ }
271
+ return m;
272
+ }
273
+ toApiJson() {
274
+ const toReturn = {};
275
+ if (typeof this.merchantId !== 'undefined') {
276
+ toReturn['merchantId'] = this.merchantId;
277
+ }
278
+ if (typeof this.currency !== 'undefined') {
279
+ toReturn['currency'] = this.currency;
280
+ }
281
+ if (typeof this.skus !== 'undefined') {
282
+ toReturn['skus'] = this.skus;
283
+ }
284
+ if (typeof this.groupId !== 'undefined') {
285
+ toReturn['groupId'] = this.groupId;
286
+ }
287
+ return toReturn;
288
+ }
289
+ }
290
+ export class GetMultiRetailPricingResponse {
291
+ constructor(kwargs) {
292
+ if (!kwargs) {
293
+ return;
294
+ }
295
+ Object.assign(this, kwargs);
296
+ }
297
+ static fromProto(proto) {
298
+ let m = new GetMultiRetailPricingResponse();
299
+ m = Object.assign(m, proto);
300
+ if (proto.productPrices) {
301
+ m.productPrices = Object.keys(proto.productPrices).reduce((obj, k) => { obj[k] = ProductPricing.fromProto(proto.productPrices[k]); return obj; }, {});
302
+ }
303
+ if (proto.prices) {
304
+ m.prices = proto.prices.map(ProductPrices.fromProto);
305
+ }
306
+ return m;
307
+ }
308
+ toApiJson() {
309
+ const toReturn = {};
310
+ if (typeof this.productPrices !== 'undefined' && this.productPrices !== null) {
311
+ toReturn['productPrices'] = 'toApiJson' in this.productPrices ? this.productPrices.toApiJson() : this.productPrices;
312
+ }
313
+ if (typeof this.prices !== 'undefined' && this.prices !== null) {
314
+ toReturn['prices'] = 'toApiJson' in this.prices ? this.prices.toApiJson() : this.prices;
315
+ }
316
+ return toReturn;
317
+ }
318
+ }
319
+ export class GetPurchaseCostRequest {
320
+ constructor(kwargs) {
321
+ if (!kwargs) {
322
+ return;
323
+ }
324
+ Object.assign(this, kwargs);
325
+ }
326
+ static fromProto(proto) {
327
+ let m = new GetPurchaseCostRequest();
328
+ m = Object.assign(m, proto);
329
+ if (proto.quantity) {
330
+ m.quantity = parseInt(proto.quantity, 10);
331
+ }
332
+ if (proto.frequency) {
333
+ m.frequency = enumStringToValue(e.Frequency, proto.frequency);
334
+ }
335
+ return m;
336
+ }
337
+ toApiJson() {
338
+ const toReturn = {};
339
+ if (typeof this.merchantId !== 'undefined') {
340
+ toReturn['merchantId'] = this.merchantId;
341
+ }
342
+ if (typeof this.sku !== 'undefined') {
343
+ toReturn['sku'] = this.sku;
344
+ }
345
+ if (typeof this.quantity !== 'undefined') {
346
+ toReturn['quantity'] = this.quantity;
347
+ }
348
+ if (typeof this.frequency !== 'undefined') {
349
+ toReturn['frequency'] = this.frequency;
350
+ }
351
+ return toReturn;
352
+ }
353
+ }
354
+ export class GetPurchaseCostResponse {
355
+ constructor(kwargs) {
356
+ if (!kwargs) {
357
+ return;
358
+ }
359
+ Object.assign(this, kwargs);
360
+ }
361
+ static fromProto(proto) {
362
+ let m = new GetPurchaseCostResponse();
363
+ m = Object.assign(m, proto);
364
+ if (proto.totalCost) {
365
+ m.totalCost = parseInt(proto.totalCost, 10);
366
+ }
367
+ if (proto.currency) {
368
+ m.currency = enumStringToValue(e.Currency, proto.currency);
369
+ }
370
+ if (proto.strategy) {
371
+ m.strategy = enumStringToValue(e.BillingStrategy, proto.strategy);
372
+ }
373
+ if (proto.commitment) {
374
+ m.commitment = Commitment.fromProto(proto.commitment);
375
+ }
376
+ if (proto.discountAmount) {
377
+ m.discountAmount = parseInt(proto.discountAmount, 10);
378
+ }
379
+ if (proto.subtotalCost) {
380
+ m.subtotalCost = parseInt(proto.subtotalCost, 10);
381
+ }
382
+ if (proto.setupFee) {
383
+ m.setupFee = parseInt(proto.setupFee, 10);
384
+ }
385
+ return m;
386
+ }
387
+ toApiJson() {
388
+ const toReturn = {};
389
+ if (typeof this.billingFrequency !== 'undefined') {
390
+ toReturn['billingFrequency'] = this.billingFrequency;
391
+ }
392
+ if (typeof this.totalCost !== 'undefined') {
393
+ toReturn['totalCost'] = this.totalCost;
394
+ }
395
+ if (typeof this.currency !== 'undefined') {
396
+ toReturn['currency'] = this.currency;
397
+ }
398
+ if (typeof this.strategy !== 'undefined') {
399
+ toReturn['strategy'] = this.strategy;
400
+ }
401
+ if (typeof this.commitment !== 'undefined' && this.commitment !== null) {
402
+ toReturn['commitment'] = 'toApiJson' in this.commitment ? this.commitment.toApiJson() : this.commitment;
403
+ }
404
+ if (typeof this.isStartingPrice !== 'undefined') {
405
+ toReturn['isStartingPrice'] = this.isStartingPrice;
406
+ }
407
+ if (typeof this.discountAmount !== 'undefined') {
408
+ toReturn['discountAmount'] = this.discountAmount;
409
+ }
410
+ if (typeof this.subtotalCost !== 'undefined') {
411
+ toReturn['subtotalCost'] = this.subtotalCost;
412
+ }
413
+ if (typeof this.setupFee !== 'undefined') {
414
+ toReturn['setupFee'] = this.setupFee;
415
+ }
416
+ return toReturn;
417
+ }
418
+ }
419
+ export class GetRevenueStatsRequest {
420
+ constructor(kwargs) {
421
+ if (!kwargs) {
422
+ return;
423
+ }
424
+ Object.assign(this, kwargs);
425
+ }
426
+ static fromProto(proto) {
427
+ let m = new GetRevenueStatsRequest();
428
+ m = Object.assign(m, proto);
429
+ if (proto.periodStart) {
430
+ m.periodStart = new Date(proto.periodStart);
431
+ }
432
+ if (proto.periodEnd) {
433
+ m.periodEnd = new Date(proto.periodEnd);
434
+ }
435
+ return m;
436
+ }
437
+ toApiJson() {
438
+ const toReturn = {};
439
+ if (typeof this.skus !== 'undefined') {
440
+ toReturn['skus'] = this.skus;
441
+ }
442
+ if (typeof this.periodStart !== 'undefined' && this.periodStart !== null) {
443
+ toReturn['periodStart'] = 'toApiJson' in this.periodStart ? this.periodStart.toApiJson() : this.periodStart;
444
+ }
445
+ if (typeof this.periodEnd !== 'undefined' && this.periodEnd !== null) {
446
+ toReturn['periodEnd'] = 'toApiJson' in this.periodEnd ? this.periodEnd.toApiJson() : this.periodEnd;
447
+ }
448
+ return toReturn;
449
+ }
450
+ }
451
+ export class GetRevenueStatsResponse {
452
+ constructor(kwargs) {
453
+ if (!kwargs) {
454
+ return;
455
+ }
456
+ Object.assign(this, kwargs);
457
+ }
458
+ static fromProto(proto) {
459
+ let m = new GetRevenueStatsResponse();
460
+ m = Object.assign(m, proto);
461
+ if (proto.totalRevenue) {
462
+ m.totalRevenue = parseInt(proto.totalRevenue, 10);
463
+ }
464
+ return m;
465
+ }
466
+ toApiJson() {
467
+ const toReturn = {};
468
+ if (typeof this.totalRevenue !== 'undefined') {
469
+ toReturn['totalRevenue'] = this.totalRevenue;
470
+ }
471
+ return toReturn;
472
+ }
473
+ }
474
+ export class GetStatisticsRequest {
475
+ constructor(kwargs) {
476
+ if (!kwargs) {
477
+ return;
478
+ }
479
+ Object.assign(this, kwargs);
480
+ }
481
+ static fromProto(proto) {
482
+ let m = new GetStatisticsRequest();
483
+ m = Object.assign(m, proto);
484
+ return m;
485
+ }
486
+ toApiJson() {
487
+ const toReturn = {};
488
+ if (typeof this.merchantId !== 'undefined') {
489
+ toReturn['merchantId'] = this.merchantId;
490
+ }
491
+ return toReturn;
492
+ }
493
+ }
494
+ export class GetStatisticsResponse {
495
+ constructor(kwargs) {
496
+ if (!kwargs) {
497
+ return;
498
+ }
499
+ Object.assign(this, kwargs);
500
+ }
501
+ static fromProto(proto) {
502
+ let m = new GetStatisticsResponse();
503
+ m = Object.assign(m, proto);
504
+ if (proto.totalBillableCustomers) {
505
+ m.totalBillableCustomers = parseInt(proto.totalBillableCustomers, 10);
506
+ }
507
+ return m;
508
+ }
509
+ toApiJson() {
510
+ const toReturn = {};
511
+ if (typeof this.totalBillableCustomers !== 'undefined') {
512
+ toReturn['totalBillableCustomers'] = this.totalBillableCustomers;
513
+ }
514
+ if (typeof this.currentBasketSize !== 'undefined') {
515
+ toReturn['currentBasketSize'] = this.currentBasketSize;
516
+ }
517
+ if (typeof this.changeInBasketSize30Days !== 'undefined') {
518
+ toReturn['changeInBasketSize30Days'] = this.changeInBasketSize30Days;
519
+ }
520
+ return toReturn;
521
+ }
522
+ }
523
+ export class GetWholesaleComparisonRequestGetWholesaleComparisonFilters {
524
+ constructor(kwargs) {
525
+ if (!kwargs) {
526
+ return;
527
+ }
528
+ Object.assign(this, kwargs);
529
+ }
530
+ static fromProto(proto) {
531
+ let m = new GetWholesaleComparisonRequestGetWholesaleComparisonFilters();
532
+ m = Object.assign(m, proto);
533
+ return m;
534
+ }
535
+ toApiJson() {
536
+ const toReturn = {};
537
+ if (typeof this.sku !== 'undefined') {
538
+ toReturn['sku'] = this.sku;
539
+ }
540
+ if (typeof this.currencyCode !== 'undefined') {
541
+ toReturn['currencyCode'] = this.currencyCode;
542
+ }
543
+ return toReturn;
544
+ }
545
+ }
546
+ export class GetWholesaleComparisonRequest {
547
+ constructor(kwargs) {
548
+ if (!kwargs) {
549
+ return;
550
+ }
551
+ Object.assign(this, kwargs);
552
+ }
553
+ static fromProto(proto) {
554
+ let m = new GetWholesaleComparisonRequest();
555
+ m = Object.assign(m, proto);
556
+ if (proto.filter) {
557
+ m.filter = GetWholesaleComparisonRequestGetWholesaleComparisonFilters.fromProto(proto.filter);
558
+ }
559
+ return m;
560
+ }
561
+ toApiJson() {
562
+ const toReturn = {};
563
+ if (typeof this.pricingPlanId !== 'undefined') {
564
+ toReturn['pricingPlanId'] = this.pricingPlanId;
565
+ }
566
+ if (typeof this.filter !== 'undefined' && this.filter !== null) {
567
+ toReturn['filter'] = 'toApiJson' in this.filter ? this.filter.toApiJson() : this.filter;
568
+ }
569
+ return toReturn;
570
+ }
571
+ }
572
+ export class GetWholesaleComparisonResponse {
573
+ constructor(kwargs) {
574
+ if (!kwargs) {
575
+ return;
576
+ }
577
+ Object.assign(this, kwargs);
578
+ }
579
+ static fromProto(proto) {
580
+ let m = new GetWholesaleComparisonResponse();
581
+ m = Object.assign(m, proto);
582
+ if (proto.results) {
583
+ m.results = proto.results.map(GetWholesaleComparisonResponseGetWholesaleComparisonResult.fromProto);
584
+ }
585
+ return m;
586
+ }
587
+ toApiJson() {
588
+ const toReturn = {};
589
+ if (typeof this.results !== 'undefined' && this.results !== null) {
590
+ toReturn['results'] = 'toApiJson' in this.results ? this.results.toApiJson() : this.results;
591
+ }
592
+ return toReturn;
593
+ }
594
+ }
595
+ export class GetWholesaleComparisonResponseGetWholesaleComparisonResult {
596
+ constructor(kwargs) {
597
+ if (!kwargs) {
598
+ return;
599
+ }
600
+ Object.assign(this, kwargs);
601
+ }
602
+ static fromProto(proto) {
603
+ let m = new GetWholesaleComparisonResponseGetWholesaleComparisonResult();
604
+ m = Object.assign(m, proto);
605
+ if (proto.productPricing) {
606
+ m.productPricing = ProductPricing.fromProto(proto.productPricing);
607
+ }
608
+ return m;
609
+ }
610
+ toApiJson() {
611
+ const toReturn = {};
612
+ if (typeof this.pricingPlanId !== 'undefined') {
613
+ toReturn['pricingPlanId'] = this.pricingPlanId;
614
+ }
615
+ if (typeof this.sku !== 'undefined') {
616
+ toReturn['sku'] = this.sku;
617
+ }
618
+ if (typeof this.productPricing !== 'undefined' && this.productPricing !== null) {
619
+ toReturn['productPricing'] = 'toApiJson' in this.productPricing ? this.productPricing.toApiJson() : this.productPricing;
620
+ }
621
+ return toReturn;
622
+ }
623
+ }
624
+ export class GetMultiBundleRetailPricingResponsePricesEntry {
625
+ constructor(kwargs) {
626
+ if (!kwargs) {
627
+ return;
628
+ }
629
+ Object.assign(this, kwargs);
630
+ }
631
+ static fromProto(proto) {
632
+ let m = new GetMultiBundleRetailPricingResponsePricesEntry();
633
+ m = Object.assign(m, proto);
634
+ if (proto.value) {
635
+ m.value = BundlePricing.fromProto(proto.value);
636
+ }
637
+ return m;
638
+ }
639
+ toApiJson() {
640
+ const toReturn = {};
641
+ if (typeof this.key !== 'undefined') {
642
+ toReturn['key'] = this.key;
643
+ }
644
+ if (typeof this.value !== 'undefined' && this.value !== null) {
645
+ toReturn['value'] = 'toApiJson' in this.value ? this.value.toApiJson() : this.value;
646
+ }
647
+ return toReturn;
648
+ }
649
+ }
650
+ export class UpsertRetailPricingRequestPricingEntry {
651
+ constructor(kwargs) {
652
+ if (!kwargs) {
653
+ return;
654
+ }
655
+ Object.assign(this, kwargs);
656
+ }
657
+ static fromProto(proto) {
658
+ let m = new UpsertRetailPricingRequestPricingEntry();
659
+ m = Object.assign(m, proto);
660
+ if (proto.value) {
661
+ m.value = PricingPlanProductPricing.fromProto(proto.value);
662
+ }
663
+ return m;
664
+ }
665
+ toApiJson() {
666
+ const toReturn = {};
667
+ if (typeof this.key !== 'undefined') {
668
+ toReturn['key'] = this.key;
669
+ }
670
+ if (typeof this.value !== 'undefined' && this.value !== null) {
671
+ toReturn['value'] = 'toApiJson' in this.value ? this.value.toApiJson() : this.value;
672
+ }
673
+ return toReturn;
674
+ }
675
+ }
676
+ export class GetMultiRetailPricingResponseProductPricesEntry {
677
+ constructor(kwargs) {
678
+ if (!kwargs) {
679
+ return;
680
+ }
681
+ Object.assign(this, kwargs);
682
+ }
683
+ static fromProto(proto) {
684
+ let m = new GetMultiRetailPricingResponseProductPricesEntry();
685
+ m = Object.assign(m, proto);
686
+ if (proto.value) {
687
+ m.value = ProductPricing.fromProto(proto.value);
688
+ }
689
+ return m;
690
+ }
691
+ toApiJson() {
692
+ const toReturn = {};
693
+ if (typeof this.key !== 'undefined') {
694
+ toReturn['key'] = this.key;
695
+ }
696
+ if (typeof this.value !== 'undefined' && this.value !== null) {
697
+ toReturn['value'] = 'toApiJson' in this.value ? this.value.toApiJson() : this.value;
698
+ }
699
+ return toReturn;
700
+ }
701
+ }
702
+ export class GetMultiProductPricingResponseProductPricesEntry {
703
+ constructor(kwargs) {
704
+ if (!kwargs) {
705
+ return;
706
+ }
707
+ Object.assign(this, kwargs);
708
+ }
709
+ static fromProto(proto) {
710
+ let m = new GetMultiProductPricingResponseProductPricesEntry();
711
+ m = Object.assign(m, proto);
712
+ if (proto.value) {
713
+ m.value = ProductPricing.fromProto(proto.value);
714
+ }
715
+ return m;
716
+ }
717
+ toApiJson() {
718
+ const toReturn = {};
719
+ if (typeof this.key !== 'undefined') {
720
+ toReturn['key'] = this.key;
721
+ }
722
+ if (typeof this.value !== 'undefined' && this.value !== null) {
723
+ toReturn['value'] = 'toApiJson' in this.value ? this.value.toApiJson() : this.value;
724
+ }
725
+ return toReturn;
726
+ }
727
+ }
728
+ export class SetWholesaleProductStrategyRequest {
729
+ constructor(kwargs) {
730
+ if (!kwargs) {
731
+ return;
732
+ }
733
+ Object.assign(this, kwargs);
734
+ }
735
+ static fromProto(proto) {
736
+ let m = new SetWholesaleProductStrategyRequest();
737
+ m = Object.assign(m, proto);
738
+ if (proto.strategy) {
739
+ m.strategy = enumStringToValue(e.BillingStrategy, proto.strategy);
740
+ }
741
+ return m;
742
+ }
743
+ toApiJson() {
744
+ const toReturn = {};
745
+ if (typeof this.merchantId !== 'undefined') {
746
+ toReturn['merchantId'] = this.merchantId;
747
+ }
748
+ if (typeof this.sku !== 'undefined') {
749
+ toReturn['sku'] = this.sku;
750
+ }
751
+ if (typeof this.strategy !== 'undefined') {
752
+ toReturn['strategy'] = this.strategy;
753
+ }
754
+ return toReturn;
755
+ }
756
+ }
757
+ export class SetWholesaleProductVolumeCommitmentRequest {
758
+ constructor(kwargs) {
759
+ if (!kwargs) {
760
+ return;
761
+ }
762
+ Object.assign(this, kwargs);
763
+ }
764
+ static fromProto(proto) {
765
+ let m = new SetWholesaleProductVolumeCommitmentRequest();
766
+ m = Object.assign(m, proto);
767
+ if (proto.volumeCommitment) {
768
+ m.volumeCommitment = parseInt(proto.volumeCommitment, 10);
769
+ }
770
+ return m;
771
+ }
772
+ toApiJson() {
773
+ const toReturn = {};
774
+ if (typeof this.merchantId !== 'undefined') {
775
+ toReturn['merchantId'] = this.merchantId;
776
+ }
777
+ if (typeof this.sku !== 'undefined') {
778
+ toReturn['sku'] = this.sku;
779
+ }
780
+ if (typeof this.volumeCommitment !== 'undefined') {
781
+ toReturn['volumeCommitment'] = this.volumeCommitment;
782
+ }
783
+ return toReturn;
784
+ }
785
+ }
786
+ export class StartRevRecTemplateBackfillRequest {
787
+ static fromProto(proto) {
788
+ let m = new StartRevRecTemplateBackfillRequest();
789
+ m = Object.assign(m, proto);
790
+ return m;
791
+ }
792
+ constructor(kwargs) {
793
+ if (!kwargs) {
794
+ return;
795
+ }
796
+ Object.assign(this, kwargs);
797
+ }
798
+ toApiJson() {
799
+ const toReturn = {};
800
+ return toReturn;
801
+ }
802
+ }
803
+ export class UpsertRetailPricingRequest {
804
+ constructor(kwargs) {
805
+ if (!kwargs) {
806
+ return;
807
+ }
808
+ Object.assign(this, kwargs);
809
+ }
810
+ static fromProto(proto) {
811
+ let m = new UpsertRetailPricingRequest();
812
+ m = Object.assign(m, proto);
813
+ if (proto.frequency) {
814
+ m.frequency = enumStringToValue(e.Frequency, proto.frequency);
815
+ }
816
+ if (proto.pricing) {
817
+ m.pricing = Object.keys(proto.pricing).reduce((obj, k) => { obj[k] = PricingPlanProductPricing.fromProto(proto.pricing[k]); return obj; }, {});
818
+ }
819
+ return m;
820
+ }
821
+ toApiJson() {
822
+ const toReturn = {};
823
+ if (typeof this.merchantId !== 'undefined') {
824
+ toReturn['merchantId'] = this.merchantId;
825
+ }
826
+ if (typeof this.sku !== 'undefined') {
827
+ toReturn['sku'] = this.sku;
828
+ }
829
+ if (typeof this.frequency !== 'undefined') {
830
+ toReturn['frequency'] = this.frequency;
831
+ }
832
+ if (typeof this.pricing !== 'undefined' && this.pricing !== null) {
833
+ toReturn['pricing'] = 'toApiJson' in this.pricing ? this.pricing.toApiJson() : this.pricing;
834
+ }
835
+ if (typeof this.groupId !== 'undefined') {
836
+ toReturn['groupId'] = this.groupId;
837
+ }
838
+ return toReturn;
839
+ }
840
+ }
841
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYmlsbGluZ19zZGsvc3JjL2xpYi9faW50ZXJuYWwvb2JqZWN0cy9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEUsT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFOUIsTUFBTSxVQUFVLGlCQUFpQixDQUFJLE9BQVksRUFBRSxLQUFhO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxPQUFPLDBCQUEwQjtJQVduQyxZQUFZLE1BQThDO1FBQ3RELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztRQUN6QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFB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ekssSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCdW5kbGVQcmljaW5nIH0gZnJvbSAnLi9idW5kbGUnO1xuaW1wb3J0IHsgQ29tbWl0bWVudCB9IGZyb20gJy4vY29tbWl0bWVudCc7XG5pbXBvcnQgeyBQcmljaW5nUGxhblByb2R1Y3RQcmljaW5nIH0gZnJvbSAnLi9wcmljaW5nLXBsYW4nO1xuaW1wb3J0IHsgUHJvZHVjdFByaWNlcywgUHJvZHVjdFByaWNpbmcgfSBmcm9tICcuL3Byb2R1Y3QtcHJpY2luZyc7XG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVSZXRhaWxQcmljaW5nUmVxdWVzdCBpbXBsZW1lbnRzIGkuRGVsZXRlUmV0YWlsUHJpY2luZ1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBncm91cElkOiBzdHJpbmc7XG4gICAgc2t1OiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVSZXRhaWxQcmljaW5nUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZVJldGFpbFByaWNpbmdSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVSZXRhaWxQcmljaW5nUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ncm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydncm91cElkJ10gPSB0aGlzLmdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlbmVyYXRlQmlsbGFibGVJdGVtc0NTVlJlcXVlc3QgaW1wbGVtZW50cyBpLkdlbmVyYXRlQmlsbGFibGVJdGVtc0NTVlJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBwZXJpb2RTdGFydDogRGF0ZTtcbiAgICBwZXJpb2RFbmQ6IERhdGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZW5lcmF0ZUJpbGxhYmxlSXRlbXNDU1ZSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2VuZXJhdGVCaWxsYWJsZUl0ZW1zQ1NWUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wZXJpb2RTdGFydCkge20ucGVyaW9kU3RhcnQgPSBuZXcgRGF0ZShwcm90by5wZXJpb2RTdGFydCk7fVxuICAgICAgICBpZiAocHJvdG8ucGVyaW9kRW5kKSB7bS5wZXJpb2RFbmQgPSBuZXcgRGF0ZShwcm90by5wZXJpb2RFbmQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZW5lcmF0ZUJpbGxhYmxlSXRlbXNDU1ZSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBlcmlvZFN0YXJ0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBlcmlvZFN0YXJ0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BlcmlvZFN0YXJ0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBlcmlvZFN0YXJ0ID8gKHRoaXMucGVyaW9kU3RhcnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGVyaW9kU3RhcnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGVyaW9kRW5kICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBlcmlvZEVuZCAhPT0gbnVsbCkge3RvUmV0dXJuWydwZXJpb2RFbmQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGVyaW9kRW5kID8gKHRoaXMucGVyaW9kRW5kIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBlcmlvZEVuZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZW5lcmF0ZUJpbGxhYmxlSXRlbXNDU1ZSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2VuZXJhdGVCaWxsYWJsZUl0ZW1zQ1NWUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHVybDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2VuZXJhdGVCaWxsYWJsZUl0ZW1zQ1NWUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZW5lcmF0ZUJpbGxhYmxlSXRlbXNDU1ZSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2VuZXJhdGVCaWxsYWJsZUl0ZW1zQ1NWUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51cmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VybCddID0gdGhpcy51cmw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2VuZXJhdGVWZW5kb3JSZXBvcnRSZXF1ZXN0IGltcGxlbWVudHMgaS5HZW5lcmF0ZVZlbmRvclJlcG9ydFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHNrdXM6IHN0cmluZ1tdO1xuICAgIHBlcmlvZFN0YXJ0OiBEYXRlO1xuICAgIHBlcmlvZEVuZDogRGF0ZTtcbiAgICB2ZW5kb3JOYW1lOiBzdHJpbmc7XG4gICAgbWFya0FzQXBwcm92ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZW5lcmF0ZVZlbmRvclJlcG9ydFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZW5lcmF0ZVZlbmRvclJlcG9ydFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGVyaW9kU3RhcnQpIHttLnBlcmlvZFN0YXJ0ID0gbmV3IERhdGUocHJvdG8ucGVyaW9kU3RhcnQpO31cbiAgICAgICAgaWYgKHByb3RvLnBlcmlvZEVuZCkge20ucGVyaW9kRW5kID0gbmV3IERhdGUocHJvdG8ucGVyaW9kRW5kKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2VuZXJhdGVWZW5kb3JSZXBvcnRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1cyddID0gdGhpcy5za3VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBlcmlvZFN0YXJ0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBlcmlvZFN0YXJ0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BlcmlvZFN0YXJ0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBlcmlvZFN0YXJ0ID8gKHRoaXMucGVyaW9kU3RhcnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGVyaW9kU3RhcnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGVyaW9kRW5kICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBlcmlvZEVuZCAhPT0gbnVsbCkge3RvUmV0dXJuWydwZXJpb2RFbmQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGVyaW9kRW5kID8gKHRoaXMucGVyaW9kRW5kIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBlcmlvZEVuZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52ZW5kb3JOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2ZW5kb3JOYW1lJ10gPSB0aGlzLnZlbmRvck5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWFya0FzQXBwcm92ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21hcmtBc0FwcHJvdmVkJ10gPSB0aGlzLm1hcmtBc0FwcHJvdmVkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlbmVyYXRlVmVuZG9yUmVwb3J0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdlbmVyYXRlVmVuZG9yUmVwb3J0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGJ1Y2tldDogc3RyaW5nO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZW5lcmF0ZVZlbmRvclJlcG9ydFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2VuZXJhdGVWZW5kb3JSZXBvcnRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2VuZXJhdGVWZW5kb3JSZXBvcnRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXJsJ10gPSB0aGlzLnVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idWNrZXQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1Y2tldCddID0gdGhpcy5idWNrZXQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmlsZW5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ZpbGVuYW1lJ10gPSB0aGlzLmZpbGVuYW1lO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpQnVuZGxlUmV0YWlsUHJpY2luZ1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpQnVuZGxlUmV0YWlsUHJpY2luZ1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBzdG9yZUlkOiBzdHJpbmc7XG4gICAgYnVuZGxlSWRzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQnVuZGxlUmV0YWlsUHJpY2luZ1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aUJ1bmRsZVJldGFpbFByaWNpbmdSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUJ1bmRsZVJldGFpbFByaWNpbmdSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0b3JlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0b3JlSWQnXSA9IHRoaXMuc3RvcmVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idW5kbGVJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1bmRsZUlkcyddID0gdGhpcy5idW5kbGVJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlCdW5kbGVSZXRhaWxQcmljaW5nUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpQnVuZGxlUmV0YWlsUHJpY2luZ1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwcmljZXM6IHtba2V5OiBzdHJpbmddOiBCdW5kbGVQcmljaW5nfTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpQnVuZGxlUmV0YWlsUHJpY2luZ1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TXVsdGlCdW5kbGVSZXRhaWxQcmljaW5nUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucHJpY2VzKSB7bS5wcmljZXMgPSBPYmplY3Qua2V5cyhwcm90by5wcmljZXMpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gQnVuZGxlUHJpY2luZy5mcm9tUHJvdG8ocHJvdG8ucHJpY2VzW2tdKTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUJ1bmRsZVJldGFpbFByaWNpbmdSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmljZXMgIT09IG51bGwpIHt0b1JldHVyblsncHJpY2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByaWNlcyA/ICh0aGlzLnByaWNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcmljZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlQcm9kdWN0UHJpY2luZ1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldE11bHRpUHJvZHVjdFByaWNpbmdSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgc2t1czogc3RyaW5nW107XG4gICAgcHJpY2luZ1BsYW5JZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlQcm9kdWN0UHJpY2luZ1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVByb2R1Y3RQcmljaW5nUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlQcm9kdWN0UHJpY2luZ1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1cyddID0gdGhpcy5za3VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNpbmdQbGFuSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByaWNpbmdQbGFuSWQnXSA9IHRoaXMucHJpY2luZ1BsYW5JZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVByb2R1Y3RQcmljaW5nUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE11bHRpUHJvZHVjdFByaWNpbmdSZXNwb25zZUludGVyZmFjZSB7XG4gICAgcHJvZHVjdFByaWNlczoge1trZXk6IHN0cmluZ106IFByb2R1Y3RQcmljaW5nfTtcbiAgICBwcmljZXM6IFByb2R1Y3RQcmljZXNbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpUHJvZHVjdFByaWNpbmdSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpUHJvZHVjdFByaWNpbmdSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wcm9kdWN0UHJpY2VzKSB7bS5wcm9kdWN0UHJpY2VzID0gT2JqZWN0LmtleXMocHJvdG8ucHJvZHVjdFByaWNlcykucmVkdWNlPGFueT4oKG9iaiwgaykgPT4geyBvYmpba10gPSBQcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8ucHJvZHVjdFByaWNlc1trXSk7IHJldHVybiBvYmo7IH0sIHt9KTt9XG4gICAgICAgIGlmIChwcm90by5wcmljZXMpIHttLnByaWNlcyA9IHByb3RvLnByaWNlcy5tYXAoUHJvZHVjdFByaWNlcy5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVByb2R1Y3RQcmljaW5nUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9kdWN0UHJpY2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByb2R1Y3RQcmljZXMgIT09IG51bGwpIHt0b1JldHVyblsncHJvZHVjdFByaWNlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcm9kdWN0UHJpY2VzID8gKHRoaXMucHJvZHVjdFByaWNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcm9kdWN0UHJpY2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByaWNlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcmljZXMgIT09IG51bGwpIHt0b1JldHVyblsncHJpY2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnByaWNlcyA/ICh0aGlzLnByaWNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcmljZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlSZXRhaWxQcmljaW5nUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlSZXRhaWxQcmljaW5nUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGN1cnJlbmN5OiBlLkN1cnJlbmN5O1xuICAgIHNrdXM6IHN0cmluZ1tdO1xuICAgIGdyb3VwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE11bHRpUmV0YWlsUHJpY2luZ1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVJldGFpbFByaWNpbmdSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmN1cnJlbmN5KSB7bS5jdXJyZW5jeSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQ3VycmVuY3k+KGUuQ3VycmVuY3ksIHByb3RvLmN1cnJlbmN5KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlSZXRhaWxQcmljaW5nUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJyZW5jeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VycmVuY3knXSA9IHRoaXMuY3VycmVuY3k7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1cyddID0gdGhpcy5za3VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dyb3VwSWQnXSA9IHRoaXMuZ3JvdXBJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVJldGFpbFByaWNpbmdSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlSZXRhaWxQcmljaW5nUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHByb2R1Y3RQcmljZXM6IHtba2V5OiBzdHJpbmddOiBQcm9kdWN0UHJpY2luZ307XG4gICAgcHJpY2VzOiBQcm9kdWN0UHJpY2VzW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVJldGFpbFByaWNpbmdSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpUmV0YWlsUHJpY2luZ1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnByb2R1Y3RQcmljZXMpIHttLnByb2R1Y3RQcmljZXMgPSBPYmplY3Qua2V5cyhwcm90by5wcm9kdWN0UHJpY2VzKS5yZWR1Y2U8YW55Pigob2JqLCBrKSA9PiB7IG9ialtrXSA9IFByb2R1Y3RQcmljaW5nLmZyb21Qcm90byhwcm90by5wcm9kdWN0UHJpY2VzW2tdKTsgcmV0dXJuIG9iajsgfSwge30pO31cbiAgICAgICAgaWYgKHByb3RvLnByaWNlcykge20ucHJpY2VzID0gcHJvdG8ucHJpY2VzLm1hcChQcm9kdWN0UHJpY2VzLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpUmV0YWlsUHJpY2luZ1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvZHVjdFByaWNlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcm9kdWN0UHJpY2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Byb2R1Y3RQcmljZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucHJvZHVjdFByaWNlcyA/ICh0aGlzLnByb2R1Y3RQcmljZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJvZHVjdFByaWNlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucHJpY2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ByaWNlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcmljZXMgPyAodGhpcy5wcmljZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucHJpY2VzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFB1cmNoYXNlQ29zdFJlcXVlc3QgaW1wbGVtZW50cyBpLkdldFB1cmNoYXNlQ29zdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICBxdWFudGl0eTogbnVtYmVyO1xuICAgIGZyZXF1ZW5jeTogZS5GcmVxdWVuY3k7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQdXJjaGFzZUNvc3RSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UHVyY2hhc2VDb3N0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5xdWFudGl0eSkge20ucXVhbnRpdHkgPSBwYXJzZUludChwcm90by5xdWFudGl0eSwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmZyZXF1ZW5jeSkge20uZnJlcXVlbmN5ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5GcmVxdWVuY3k+KGUuRnJlcXVlbmN5LCBwcm90by5mcmVxdWVuY3kpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRQdXJjaGFzZUNvc3RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWFudGl0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbnRpdHknXSA9IHRoaXMucXVhbnRpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnJlcXVlbmN5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydmcmVxdWVuY3knXSA9IHRoaXMuZnJlcXVlbmN5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFB1cmNoYXNlQ29zdFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRQdXJjaGFzZUNvc3RSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYmlsbGluZ0ZyZXF1ZW5jeTogc3RyaW5nO1xuICAgIHRvdGFsQ29zdDogbnVtYmVyO1xuICAgIGN1cnJlbmN5OiBlLkN1cnJlbmN5O1xuICAgIHN0cmF0ZWd5OiBlLkJpbGxpbmdTdHJhdGVneTtcbiAgICBjb21taXRtZW50OiBDb21taXRtZW50O1xuICAgIGlzU3RhcnRpbmdQcmljZTogYm9vbGVhbjtcbiAgICBkaXNjb3VudEFtb3VudDogbnVtYmVyO1xuICAgIHN1YnRvdGFsQ29zdDogbnVtYmVyO1xuICAgIHNldHVwRmVlOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRQdXJjaGFzZUNvc3RSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFB1cmNoYXNlQ29zdFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRvdGFsQ29zdCkge20udG90YWxDb3N0ID0gcGFyc2VJbnQocHJvdG8udG90YWxDb3N0LCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uY3VycmVuY3kpIHttLmN1cnJlbmN5ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5DdXJyZW5jeT4oZS5DdXJyZW5jeSwgcHJvdG8uY3VycmVuY3kpO31cbiAgICAgICAgaWYgKHByb3RvLnN0cmF0ZWd5KSB7bS5zdHJhdGVneSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQmlsbGluZ1N0cmF0ZWd5PihlLkJpbGxpbmdTdHJhdGVneSwgcHJvdG8uc3RyYXRlZ3kpO31cbiAgICAgICAgaWYgKHByb3RvLmNvbW1pdG1lbnQpIHttLmNvbW1pdG1lbnQgPSBDb21taXRtZW50LmZyb21Qcm90byhwcm90by5jb21taXRtZW50KTt9XG4gICAgICAgIGlmIChwcm90by5kaXNjb3VudEFtb3VudCkge20uZGlzY291bnRBbW91bnQgPSBwYXJzZUludChwcm90by5kaXNjb3VudEFtb3VudCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnN1YnRvdGFsQ29zdCkge20uc3VidG90YWxDb3N0ID0gcGFyc2VJbnQocHJvdG8uc3VidG90YWxDb3N0LCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uc2V0dXBGZWUpIHttLnNldHVwRmVlID0gcGFyc2VJbnQocHJvdG8uc2V0dXBGZWUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UHVyY2hhc2VDb3N0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5iaWxsaW5nRnJlcXVlbmN5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydiaWxsaW5nRnJlcXVlbmN5J10gPSB0aGlzLmJpbGxpbmdGcmVxdWVuY3k7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG90YWxDb3N0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0b3RhbENvc3QnXSA9IHRoaXMudG90YWxDb3N0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbmN5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW5jeSddID0gdGhpcy5jdXJyZW5jeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdHJhdGVneSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RyYXRlZ3knXSA9IHRoaXMuc3RyYXRlZ3k7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tbWl0bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb21taXRtZW50ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NvbW1pdG1lbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29tbWl0bWVudCA/ICh0aGlzLmNvbW1pdG1lbnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY29tbWl0bWVudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc1N0YXJ0aW5nUHJpY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzU3RhcnRpbmdQcmljZSddID0gdGhpcy5pc1N0YXJ0aW5nUHJpY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzY291bnRBbW91bnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rpc2NvdW50QW1vdW50J10gPSB0aGlzLmRpc2NvdW50QW1vdW50O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1YnRvdGFsQ29zdCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VidG90YWxDb3N0J10gPSB0aGlzLnN1YnRvdGFsQ29zdDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR1cEZlZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2V0dXBGZWUnXSA9IHRoaXMuc2V0dXBGZWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UmV2ZW51ZVN0YXRzUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0UmV2ZW51ZVN0YXRzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgc2t1czogc3RyaW5nW107XG4gICAgcGVyaW9kU3RhcnQ6IERhdGU7XG4gICAgcGVyaW9kRW5kOiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0UmV2ZW51ZVN0YXRzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFJldmVudWVTdGF0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGVyaW9kU3RhcnQpIHttLnBlcmlvZFN0YXJ0ID0gbmV3IERhdGUocHJvdG8ucGVyaW9kU3RhcnQpO31cbiAgICAgICAgaWYgKHByb3RvLnBlcmlvZEVuZCkge20ucGVyaW9kRW5kID0gbmV3IERhdGUocHJvdG8ucGVyaW9kRW5kKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UmV2ZW51ZVN0YXRzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NrdXMnXSA9IHRoaXMuc2t1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wZXJpb2RTdGFydCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wZXJpb2RTdGFydCAhPT0gbnVsbCkge3RvUmV0dXJuWydwZXJpb2RTdGFydCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wZXJpb2RTdGFydCA/ICh0aGlzLnBlcmlvZFN0YXJ0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBlcmlvZFN0YXJ0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBlcmlvZEVuZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wZXJpb2RFbmQgIT09IG51bGwpIHt0b1JldHVyblsncGVyaW9kRW5kJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBlcmlvZEVuZCA/ICh0aGlzLnBlcmlvZEVuZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wZXJpb2RFbmQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UmV2ZW51ZVN0YXRzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFJldmVudWVTdGF0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0b3RhbFJldmVudWU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFJldmVudWVTdGF0c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UmV2ZW51ZVN0YXRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG90YWxSZXZlbnVlKSB7bS50b3RhbFJldmVudWUgPSBwYXJzZUludChwcm90by50b3RhbFJldmVudWUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UmV2ZW51ZVN0YXRzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b3RhbFJldmVudWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RvdGFsUmV2ZW51ZSddID0gdGhpcy50b3RhbFJldmVudWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0U3RhdGlzdGljc1JlcXVlc3QgaW1wbGVtZW50cyBpLkdldFN0YXRpc3RpY3NSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRTdGF0aXN0aWNzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFN0YXRpc3RpY3NSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRTdGF0aXN0aWNzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRTdGF0aXN0aWNzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFN0YXRpc3RpY3NSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdG90YWxCaWxsYWJsZUN1c3RvbWVyczogbnVtYmVyO1xuICAgIGN1cnJlbnRCYXNrZXRTaXplOiBudW1iZXI7XG4gICAgY2hhbmdlSW5CYXNrZXRTaXplMzBEYXlzOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRTdGF0aXN0aWNzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRTdGF0aXN0aWNzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG90YWxCaWxsYWJsZUN1c3RvbWVycykge20udG90YWxCaWxsYWJsZUN1c3RvbWVycyA9IHBhcnNlSW50KHByb3RvLnRvdGFsQmlsbGFibGVDdXN0b21lcnMsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0U3RhdGlzdGljc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG90YWxCaWxsYWJsZUN1c3RvbWVycyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndG90YWxCaWxsYWJsZUN1c3RvbWVycyddID0gdGhpcy50b3RhbEJpbGxhYmxlQ3VzdG9tZXJzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbnRCYXNrZXRTaXplICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW50QmFza2V0U2l6ZSddID0gdGhpcy5jdXJyZW50QmFza2V0U2l6ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaGFuZ2VJbkJhc2tldFNpemUzMERheXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NoYW5nZUluQmFza2V0U2l6ZTMwRGF5cyddID0gdGhpcy5jaGFuZ2VJbkJhc2tldFNpemUzMERheXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0V2hvbGVzYWxlQ29tcGFyaXNvblJlcXVlc3RHZXRXaG9sZXNhbGVDb21wYXJpc29uRmlsdGVycyBpbXBsZW1lbnRzIGkuR2V0V2hvbGVzYWxlQ29tcGFyaXNvblJlcXVlc3RHZXRXaG9sZXNhbGVDb21wYXJpc29uRmlsdGVyc0ludGVyZmFjZSB7XG4gICAgc2t1OiBzdHJpbmdbXTtcbiAgICBjdXJyZW5jeUNvZGU6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0V2hvbGVzYWxlQ29tcGFyaXNvblJlcXVlc3RHZXRXaG9sZXNhbGVDb21wYXJpc29uRmlsdGVycyB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFdob2xlc2FsZUNvbXBhcmlzb25SZXF1ZXN0R2V0V2hvbGVzYWxlQ29tcGFyaXNvbkZpbHRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFdob2xlc2FsZUNvbXBhcmlzb25SZXF1ZXN0R2V0V2hvbGVzYWxlQ29tcGFyaXNvbkZpbHRlcnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5za3UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NrdSddID0gdGhpcy5za3U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVuY3lDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW5jeUNvZGUnXSA9IHRoaXMuY3VycmVuY3lDb2RlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFdob2xlc2FsZUNvbXBhcmlzb25SZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRXaG9sZXNhbGVDb21wYXJpc29uUmVxdWVzdEludGVyZmFjZSB7XG4gICAgcHJpY2luZ1BsYW5JZDogc3RyaW5nW107XG4gICAgZmlsdGVyOiBHZXRXaG9sZXNhbGVDb21wYXJpc29uUmVxdWVzdEdldFdob2xlc2FsZUNvbXBhcmlzb25GaWx0ZXJzO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0V2hvbGVzYWxlQ29tcGFyaXNvblJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRXaG9sZXNhbGVDb21wYXJpc29uUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5maWx0ZXIpIHttLmZpbHRlciA9IEdldFdob2xlc2FsZUNvbXBhcmlzb25SZXF1ZXN0R2V0V2hvbGVzYWxlQ29tcGFyaXNvbkZpbHRlcnMuZnJvbVByb3RvKHByb3RvLmZpbHRlcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFdob2xlc2FsZUNvbXBhcmlzb25SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1BsYW5JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2luZ1BsYW5JZCddID0gdGhpcy5wcmljaW5nUGxhbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpbHRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5maWx0ZXIgIT09IG51bGwpIHt0b1JldHVyblsnZmlsdGVyJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmZpbHRlciA/ICh0aGlzLmZpbHRlciBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWx0ZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0V2hvbGVzYWxlQ29tcGFyaXNvblJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRXaG9sZXNhbGVDb21wYXJpc29uUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHJlc3VsdHM6IEdldFdob2xlc2FsZUNvbXBhcmlzb25SZXNwb25zZUdldFdob2xlc2FsZUNvbXBhcmlzb25SZXN1bHRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFdob2xlc2FsZUNvbXBhcmlzb25SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFdob2xlc2FsZUNvbXBhcmlzb25SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5yZXN1bHRzKSB7bS5yZXN1bHRzID0gcHJvdG8ucmVzdWx0cy5tYXAoR2V0V2hvbGVzYWxlQ29tcGFyaXNvblJlc3BvbnNlR2V0V2hvbGVzYWxlQ29tcGFyaXNvblJlc3VsdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRXaG9sZXNhbGVDb21wYXJpc29uUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXN1bHRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJlc3VsdHMgIT09IG51bGwpIHt0b1JldHVyblsncmVzdWx0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5yZXN1bHRzID8gKHRoaXMucmVzdWx0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5yZXN1bHRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFdob2xlc2FsZUNvbXBhcmlzb25SZXNwb25zZUdldFdob2xlc2FsZUNvbXBhcmlzb25SZXN1bHQgaW1wbGVtZW50cyBpLkdldFdob2xlc2FsZUNvbXBhcmlzb25SZXNwb25zZUdldFdob2xlc2FsZUNvbXBhcmlzb25SZXN1bHRJbnRlcmZhY2Uge1xuICAgIHByaWNpbmdQbGFuSWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICBwcm9kdWN0UHJpY2luZzogUHJvZHVjdFByaWNpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRXaG9sZXNhbGVDb21wYXJpc29uUmVzcG9uc2VHZXRXaG9sZXNhbGVDb21wYXJpc29uUmVzdWx0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0V2hvbGVzYWxlQ29tcGFyaXNvblJlc3BvbnNlR2V0V2hvbGVzYWxlQ29tcGFyaXNvblJlc3VsdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wcm9kdWN0UHJpY2luZykge20ucHJvZHVjdFByaWNpbmcgPSBQcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8ucHJvZHVjdFByaWNpbmcpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRXaG9sZXNhbGVDb21wYXJpc29uUmVzcG9uc2VHZXRXaG9sZXNhbGVDb21wYXJpc29uUmVzdWx0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJpY2luZ1BsYW5JZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJpY2luZ1BsYW5JZCddID0gdGhpcy5wcmljaW5nUGxhbklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9kdWN0UHJpY2luZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wcm9kdWN0UHJpY2luZyAhPT0gbnVsbCkge3RvUmV0dXJuWydwcm9kdWN0UHJpY2luZyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcm9kdWN0UHJpY2luZyA/ICh0aGlzLnByb2R1Y3RQcmljaW5nIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnByb2R1Y3RQcmljaW5nO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpQnVuZGxlUmV0YWlsUHJpY2luZ1Jlc3BvbnNlUHJpY2VzRW50cnkgaW1wbGVtZW50cyBpLkdldE11bHRpQnVuZGxlUmV0YWlsUHJpY2luZ1Jlc3BvbnNlUHJpY2VzRW50cnlJbnRlcmZhY2Uge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBCdW5kbGVQcmljaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlCdW5kbGVSZXRhaWxQcmljaW5nUmVzcG9uc2VQcmljZXNFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpQnVuZGxlUmV0YWlsUHJpY2luZ1Jlc3BvbnNlUHJpY2VzRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmFsdWUpIHttLnZhbHVlID0gQnVuZGxlUHJpY2luZy5mcm9tUHJvdG8ocHJvdG8udmFsdWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aUJ1bmRsZVJldGFpbFByaWNpbmdSZXNwb25zZVByaWNlc0VudHJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydrZXknXSA9IHRoaXMua2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZhbHVlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZhbHVlID8gKHRoaXMudmFsdWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmFsdWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBzZXJ0UmV0YWlsUHJpY2luZ1JlcXVlc3RQcmljaW5nRW50cnkgaW1wbGVtZW50cyBpLlVwc2VydFJldGFpbFByaWNpbmdSZXF1ZXN0UHJpY2luZ0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwc2VydFJldGFpbFByaWNpbmdSZXF1ZXN0UHJpY2luZ0VudHJ5IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBzZXJ0UmV0YWlsUHJpY2luZ1JlcXVlc3RQcmljaW5nRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmFsdWUpIHttLnZhbHVlID0gUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8udmFsdWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcHNlcnRSZXRhaWxQcmljaW5nUmVxdWVzdFByaWNpbmdFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd2YWx1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52YWx1ZSA/ICh0aGlzLnZhbHVlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpUmV0YWlsUHJpY2luZ1Jlc3BvbnNlUHJvZHVjdFByaWNlc0VudHJ5IGltcGxlbWVudHMgaS5HZXRNdWx0aVJldGFpbFByaWNpbmdSZXNwb25zZVByb2R1Y3RQcmljZXNFbnRyeUludGVyZmFjZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IFByb2R1Y3RQcmljaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlSZXRhaWxQcmljaW5nUmVzcG9uc2VQcm9kdWN0UHJpY2VzRW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVJldGFpbFByaWNpbmdSZXNwb25zZVByb2R1Y3RQcmljZXNFbnRyeSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by52YWx1ZSkge20udmFsdWUgPSBQcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8udmFsdWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVJldGFpbFByaWNpbmdSZXNwb25zZVByb2R1Y3RQcmljZXNFbnRyeUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmtleSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsna2V5J10gPSB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCkge3RvUmV0dXJuWyd2YWx1ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52YWx1ZSA/ICh0aGlzLnZhbHVlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnZhbHVlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpUHJvZHVjdFByaWNpbmdSZXNwb25zZVByb2R1Y3RQcmljZXNFbnRyeSBpbXBsZW1lbnRzIGkuR2V0TXVsdGlQcm9kdWN0UHJpY2luZ1Jlc3BvbnNlUHJvZHVjdFByaWNlc0VudHJ5SW50ZXJmYWNlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogUHJvZHVjdFByaWNpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVByb2R1Y3RQcmljaW5nUmVzcG9uc2VQcm9kdWN0UHJpY2VzRW50cnkge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVByb2R1Y3RQcmljaW5nUmVzcG9uc2VQcm9kdWN0UHJpY2VzRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmFsdWUpIHttLnZhbHVlID0gUHJvZHVjdFByaWNpbmcuZnJvbVByb3RvKHByb3RvLnZhbHVlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0TXVsdGlQcm9kdWN0UHJpY2luZ1Jlc3BvbnNlUHJvZHVjdFByaWNlc0VudHJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydrZXknXSA9IHRoaXMua2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZhbHVlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZhbHVlID8gKHRoaXMudmFsdWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmFsdWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0V2hvbGVzYWxlUHJvZHVjdFN0cmF0ZWd5UmVxdWVzdCBpbXBsZW1lbnRzIGkuU2V0V2hvbGVzYWxlUHJvZHVjdFN0cmF0ZWd5UmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIHNrdTogc3RyaW5nO1xuICAgIHN0cmF0ZWd5OiBlLkJpbGxpbmdTdHJhdGVneTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNldFdob2xlc2FsZVByb2R1Y3RTdHJhdGVneVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZXRXaG9sZXNhbGVQcm9kdWN0U3RyYXRlZ3lSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN0cmF0ZWd5KSB7bS5zdHJhdGVneSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQmlsbGluZ1N0cmF0ZWd5PihlLkJpbGxpbmdTdHJhdGVneSwgcHJvdG8uc3RyYXRlZ3kpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZXRXaG9sZXNhbGVQcm9kdWN0U3RyYXRlZ3lSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdHJhdGVneSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RyYXRlZ3knXSA9IHRoaXMuc3RyYXRlZ3k7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0V2hvbGVzYWxlUHJvZHVjdFZvbHVtZUNvbW1pdG1lbnRSZXF1ZXN0IGltcGxlbWVudHMgaS5TZXRXaG9sZXNhbGVQcm9kdWN0Vm9sdW1lQ29tbWl0bWVudFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBza3U6IHN0cmluZztcbiAgICB2b2x1bWVDb21taXRtZW50OiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZXRXaG9sZXNhbGVQcm9kdWN0Vm9sdW1lQ29tbWl0bWVudFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZXRXaG9sZXNhbGVQcm9kdWN0Vm9sdW1lQ29tbWl0bWVudFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udm9sdW1lQ29tbWl0bWVudCkge20udm9sdW1lQ29tbWl0bWVudCA9IHBhcnNlSW50KHByb3RvLnZvbHVtZUNvbW1pdG1lbnQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2V0V2hvbGVzYWxlUHJvZHVjdFZvbHVtZUNvbW1pdG1lbnRSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2x1bWVDb21taXRtZW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2b2x1bWVDb21taXRtZW50J10gPSB0aGlzLnZvbHVtZUNvbW1pdG1lbnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RhcnRSZXZSZWNUZW1wbGF0ZUJhY2tmaWxsUmVxdWVzdCBpbXBsZW1lbnRzIGkuU3RhcnRSZXZSZWNUZW1wbGF0ZUJhY2tmaWxsUmVxdWVzdEludGVyZmFjZSB7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTdGFydFJldlJlY1RlbXBsYXRlQmFja2ZpbGxSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU3RhcnRSZXZSZWNUZW1wbGF0ZUJhY2tmaWxsUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU3RhcnRSZXZSZWNUZW1wbGF0ZUJhY2tmaWxsUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwc2VydFJldGFpbFByaWNpbmdSZXF1ZXN0IGltcGxlbWVudHMgaS5VcHNlcnRSZXRhaWxQcmljaW5nUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIHNrdTogc3RyaW5nO1xuICAgIGZyZXF1ZW5jeTogZS5GcmVxdWVuY3k7XG4gICAgcHJpY2luZzoge1trZXk6IHN0cmluZ106IFByaWNpbmdQbGFuUHJvZHVjdFByaWNpbmd9O1xuICAgIGdyb3VwSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwc2VydFJldGFpbFByaWNpbmdSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBzZXJ0UmV0YWlsUHJpY2luZ1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZnJlcXVlbmN5KSB7bS5mcmVxdWVuY3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkZyZXF1ZW5jeT4oZS5GcmVxdWVuY3ksIHByb3RvLmZyZXF1ZW5jeSk7fVxuICAgICAgICBpZiAocHJvdG8ucHJpY2luZykge20ucHJpY2luZyA9IE9iamVjdC5rZXlzKHByb3RvLnByaWNpbmcpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gUHJpY2luZ1BsYW5Qcm9kdWN0UHJpY2luZy5mcm9tUHJvdG8ocHJvdG8ucHJpY2luZ1trXSk7IHJldHVybiBvYmo7IH0sIHt9KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBzZXJ0UmV0YWlsUHJpY2luZ1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZyZXF1ZW5jeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZnJlcXVlbmN5J10gPSB0aGlzLmZyZXF1ZW5jeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmljaW5nICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByaWNpbmcgIT09IG51bGwpIHt0b1JldHVyblsncHJpY2luZyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wcmljaW5nID8gKHRoaXMucHJpY2luZyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wcmljaW5nO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2dyb3VwSWQnXSA9IHRoaXMuZ3JvdXBJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbiJdfQ==