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