@pmcretail/mapper-library 0.0.43 → 0.0.44
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.
- package/bundles/pmcretail-mapper-library.umd.js +4162 -0
- package/bundles/pmcretail-mapper-library.umd.js.map +1 -0
- package/esm2015/lib/RJ-mapper.class.js +875 -0
- package/esm2015/lib/TransactionDocumentBuilder.js +1240 -0
- package/esm2015/lib/WebReturn-mapper.class.js +324 -0
- package/esm2015/lib/WebReturnSalesforceMapper.class.js +410 -0
- package/esm2015/lib/basket.service.js +516 -0
- package/esm2015/lib/mapper-library.component.js +26 -0
- package/esm2015/lib/mapper-library.module.js +21 -0
- package/esm2015/lib/number-util.service.js +40 -0
- package/{fesm2022/pmcretail-mapper-library.mjs → fesm2015/pmcretail-mapper-library.js} +37 -33
- package/fesm2015/pmcretail-mapper-library.js.map +1 -0
- package/lib/mapper-library.component.d.ts +1 -1
- package/package.json +9 -16
- package/esm2022/lib/RJ-mapper.class.mjs +0 -875
- package/esm2022/lib/TransactionDocumentBuilder.mjs +0 -1240
- package/esm2022/lib/WebReturn-mapper.class.mjs +0 -324
- package/esm2022/lib/WebReturnSalesforceMapper.class.mjs +0 -410
- package/esm2022/lib/basket.service.mjs +0 -516
- package/esm2022/lib/mapper-library.component.mjs +0 -22
- package/esm2022/lib/mapper-library.module.mjs +0 -21
- package/esm2022/lib/number-util.service.mjs +0 -40
- package/fesm2022/pmcretail-mapper-library.mjs.map +0 -1
- /package/{esm2022/lib/mapper-library.model.mjs → esm2015/lib/mapper-library.model.js} +0 -0
- /package/{esm2022/pmcretail-mapper-library.mjs → esm2015/pmcretail-mapper-library.js} +0 -0
- /package/{esm2022/public-api.mjs → esm2015/public-api.js} +0 -0
- /package/{index.d.ts → pmcretail-mapper-library.d.ts} +0 -0
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { PROMOTION_LEVEL, PROMOTION_TYPE } from "./mapper-library.model";
|
|
2
|
+
import { NumberUtilService } from "./number-util.service";
|
|
3
|
+
export class WebReturnMapperBuilderClass {
|
|
4
|
+
constructor(document, currencyPipe) {
|
|
5
|
+
this.currencyPipe = currencyPipe;
|
|
6
|
+
this.webReturnObject = {
|
|
7
|
+
id: '',
|
|
8
|
+
orgCode: "",
|
|
9
|
+
storeId: "",
|
|
10
|
+
storeNodeId: "",
|
|
11
|
+
storeNodeStructure: "",
|
|
12
|
+
deviceId: "",
|
|
13
|
+
terminalId: "",
|
|
14
|
+
initiatingModule: "",
|
|
15
|
+
export: false,
|
|
16
|
+
isInStoreOrder: false,
|
|
17
|
+
basket: {},
|
|
18
|
+
basketSummary: {},
|
|
19
|
+
baseCurrency: "",
|
|
20
|
+
customer: {
|
|
21
|
+
firstName: '',
|
|
22
|
+
lastName: '',
|
|
23
|
+
email: '',
|
|
24
|
+
postCode: '',
|
|
25
|
+
id: '',
|
|
26
|
+
billingAddress: {},
|
|
27
|
+
shippingAddress: {},
|
|
28
|
+
},
|
|
29
|
+
currentTransactionDetails: {}
|
|
30
|
+
};
|
|
31
|
+
if (document) {
|
|
32
|
+
this.document = document;
|
|
33
|
+
}
|
|
34
|
+
this.numberUtilService = new NumberUtilService(currencyPipe);
|
|
35
|
+
}
|
|
36
|
+
WebReturnMapper() {
|
|
37
|
+
this.webReturnObject['type'] = 'WEB_RETURNS';
|
|
38
|
+
this.webReturnObject['datetime'] = this.getUTCDateTime(this.getText(this.document.updated_at));
|
|
39
|
+
this.webReturnObject.baseCurrency = this.getText(this.document.base_currency_code);
|
|
40
|
+
this.webReturnObject.storeId = this.getText(this.document.store_id);
|
|
41
|
+
this.webReturnObject.subsidiaryId = '1';
|
|
42
|
+
this.webReturnObject.initiatingModule = 'MAGENTO';
|
|
43
|
+
this.webReturnObject.createdAt = this.getUTCDateTime(this.getText(this.document.created_at));
|
|
44
|
+
this.webReturnObject.updatedAt = this.getUTCDateTime(this.getText(this.document.updated_at));
|
|
45
|
+
this.webReturnObject.export = true;
|
|
46
|
+
this.webReturnObject.transCompletedAt = this.getUTCDateTime(this.getText(this.document.updated_at));
|
|
47
|
+
this.webReturnObject['externalTransactionId'] = this.getText(this.document.order_id);
|
|
48
|
+
// customer
|
|
49
|
+
this.webReturnObject['customer']['firstName'] = this.getText(this.document.customer_firstname) || '';
|
|
50
|
+
this.webReturnObject['customer']['lastName'] = this.getText(this.document.customer_lastname) || '';
|
|
51
|
+
this.webReturnObject['customer']['email'] = this.getText(this.document.customer_email) || '';
|
|
52
|
+
this.webReturnObject['customer']['postCode'] = '';
|
|
53
|
+
// Billing address
|
|
54
|
+
this.webReturnObject['customer']['billingAddress']['address1'] = (this.document.billing_address && this.document.billing_address.street) ? this.getText(this.document.billing_address.street) : '';
|
|
55
|
+
this.webReturnObject['customer']['billingAddress']['city'] = (this.document.billing_address && this.document.billing_address.city) ? this.getText(this.document.billing_address.city) : '';
|
|
56
|
+
this.webReturnObject['customer']['billingAddress']['county'] = (this.document.billing_address && this.document.billing_address.region) ? this.getText(this.document.billing_address.region) : '';
|
|
57
|
+
this.webReturnObject['customer']['billingAddress']['postCode'] = (this.document.billing_address && this.document.billing_address.postcode) ? this.getText(this.document.billing_address.postcode) : '';
|
|
58
|
+
this.webReturnObject['customer']['billingAddress']['country'] = (this.document.billing_address && this.document.billing_address.country) ? this.getText(this.document.billing_address.country) : '';
|
|
59
|
+
// Shipping address
|
|
60
|
+
this.webReturnObject['customer']['shippingAddress']['address1'] = (this.document.shipping_address && this.document.shipping_address.street) ? this.getText(this.document.shipping_address.street) : '';
|
|
61
|
+
this.webReturnObject['customer']['shippingAddress']['city'] = (this.document.shipping_address && this.document.shipping_address.city) ? this.getText(this.document.shipping_address.city) : '';
|
|
62
|
+
this.webReturnObject['customer']['shippingAddress']['county'] = (this.document.shipping_address && this.document.shipping_address.region) ? this.getText(this.document.shipping_address.region) : '';
|
|
63
|
+
this.webReturnObject['customer']['shippingAddress']['postCode'] = (this.document.shipping_address && this.document.shipping_address.postcode) ? this.getText(this.document.shipping_address.postcode) : '';
|
|
64
|
+
this.webReturnObject['customer']['shippingAddress']['country'] = (this.document.shipping_address && this.document.shipping_address.country) ? this.getText(this.document.shipping_address.country) : '';
|
|
65
|
+
// basketSummary
|
|
66
|
+
this.webReturnObject.basketSummary['discountTotal'] = Math.abs(Number(this.document.discount_amount ? this.getText(this.document.discount_amount) : 0));
|
|
67
|
+
this.webReturnObject.basketSummary['VATTotal'] = Number(this.document.base_total_paid ? this.getText(this.document.base_total_paid) : 0);
|
|
68
|
+
this.webReturnObject.basketSummary['saleTotal'] = Number(this.document.base_total_invoiced ? this.getText(this.document.base_total_invoiced) : 0);
|
|
69
|
+
this.webReturnObject.basketSummary['basketTotal'] = Number(this.document.base_total_paid ? this.getText(this.document.base_total_paid) : 0);
|
|
70
|
+
this.webReturnObject.basketSummary['totalItems'] = Number(this.document.total_qty_ordered ? this.getText(this.document.total_qty_ordered) : 0);
|
|
71
|
+
this.webReturnObject.basketSummary['refundTotal'] = Number(this.document.base_total_refunded ? this.getText(this.document.base_total_refunded) : 0);
|
|
72
|
+
// // basket line discount
|
|
73
|
+
// this.webReturnObject.basket['lineDiscount'] = [];
|
|
74
|
+
// let lineDiscount = {
|
|
75
|
+
// itemLineId: (this.document.items && this.document.items.item && this.document.items.item.item_id) ? this.getText(this.document.items.item.item_id) : 0,
|
|
76
|
+
// discountAmount: (this.document.items && this.document.items.item && this.document.items.item.discount_amount) ? Number(this.getText(this.document.items.item.discount_amount)) : 0
|
|
77
|
+
// }
|
|
78
|
+
// this.webReturnObject.basket['lineDiscount'].push(lineDiscount);
|
|
79
|
+
// basket transaction discount
|
|
80
|
+
// basket products
|
|
81
|
+
this.webReturnObject.basket['products'] = [];
|
|
82
|
+
this.webReturnObject.basket['linePromotion'] = [];
|
|
83
|
+
this.webReturnObject.basket['transactionDiscount'] = [];
|
|
84
|
+
this.webReturnObject.basket['transactionPromotion'] = [];
|
|
85
|
+
// let transactionDiscount = {
|
|
86
|
+
// discountAmount: (this.document && this.document.discount_amount) ? Number(this.getText(this.document.discount_amount)) : 0
|
|
87
|
+
// }
|
|
88
|
+
// this.webReturnObject.basket['transactionDiscount'].push(transactionDiscount);
|
|
89
|
+
let product = {};
|
|
90
|
+
if (this.document.items && this.document.items.item) {
|
|
91
|
+
if (this.document.items.item instanceof Array) {
|
|
92
|
+
this.document.items.item.forEach((element, index) => {
|
|
93
|
+
let qty = this.getText(element.qty_ordered) ? Number(this.getText(element.qty_ordered)) : 0;
|
|
94
|
+
let refundQty = this.getText(element.qty_refunded) ? Number(this.getText(element.qty_refunded)) : 0;
|
|
95
|
+
let price = this.getText(element.price_incl_tax) ? Number(this.getText(element.price_incl_tax)) : 0;
|
|
96
|
+
product = {
|
|
97
|
+
description: (element.name) ? this.getText(element.name) : '',
|
|
98
|
+
SKU: (element.sku) ? this.getText(element.sku) : '',
|
|
99
|
+
quantity: (element.qty_ordered) ? Number(this.getText(element.qty_ordered)) : 0,
|
|
100
|
+
refundedQuantity: (element.qty_refunded) ? Number(this.getText(element.qty_refunded)) : 0,
|
|
101
|
+
//price: (element.original_price) ? Number(this.getText(element.original_price)) : 0,
|
|
102
|
+
price: price,
|
|
103
|
+
itemLineId: (index + 1).toString(),
|
|
104
|
+
// totalLinePrice: (element.row_invoiced) ? Number(this.getText(element.row_invoiced)) : 0,
|
|
105
|
+
totalLinePrice: ((qty - refundQty) * price),
|
|
106
|
+
};
|
|
107
|
+
let promotionAmount = this.getText(element.discount_amount) ? Number(this.getText(element.discount_amount)) : 0;
|
|
108
|
+
let appliedIDs = this.getText(element.applied_rule_ids) ? this.getText(element.applied_rule_ids) : '';
|
|
109
|
+
if (product && product.price != 0) {
|
|
110
|
+
if (promotionAmount) {
|
|
111
|
+
let trigger = {};
|
|
112
|
+
trigger.itemLineId = product.itemLineId;
|
|
113
|
+
trigger.quantity = product.quantity ? product.quantity : 0;
|
|
114
|
+
let promotion = {
|
|
115
|
+
promotionAmount: promotionAmount,
|
|
116
|
+
promotionId: appliedIDs,
|
|
117
|
+
itemLineId: product.itemLineId,
|
|
118
|
+
promotionLinePrice: product.totalLinePrice - promotionAmount,
|
|
119
|
+
trigger: trigger
|
|
120
|
+
};
|
|
121
|
+
this.webReturnObject.basket['linePromotion'].push(promotion);
|
|
122
|
+
}
|
|
123
|
+
this.webReturnObject.basket['products'].push(product);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
let qty = (this.document.items && this.document.items.item && this.document.items.item.qty_ordered) ? Number(this.getText(this.document.items.item.qty_ordered)) : 0;
|
|
129
|
+
let refundQty = (this.document.items && this.document.items.item && this.document.items.item.qty_refunded) ? Number(this.getText(this.document.items.item.qty_refunded)) : 0;
|
|
130
|
+
let price = (this.document.items && this.document.items.item && this.document.items.item.price_incl_tax) ? Number(this.getText(this.document.items.item.price_incl_tax)) : 0;
|
|
131
|
+
product = {
|
|
132
|
+
description: (this.document.items && this.document.items.item && this.document.items.item.name) ? this.getText(this.document.items.item.name) : '',
|
|
133
|
+
SKU: (this.document.items && this.document.items.item && this.document.items.item.sku) ? this.getText(this.document.items.item.sku) : '',
|
|
134
|
+
quantity: (this.document.items && this.document.items.item && this.document.items.item.qty_ordered) ? Number(this.getText(this.document.items.item.qty_ordered)) : 0,
|
|
135
|
+
refundedQuantity: (this.document.items && this.document.items.item && this.document.items.item.qty_refunded) ? Number(this.getText(this.document.items.item.qty_refunded)) : 0,
|
|
136
|
+
// price: (this.document.items && this.document.items.item && this.document.items.item.original_price) ? Number(this.getText(this.document.items.item.original_price)) : 0,
|
|
137
|
+
price: price,
|
|
138
|
+
itemLineId: "1",
|
|
139
|
+
// totalLinePrice: (this.document.items && this.document.items.item && this.document.items.item.row_invoiced) ? Number(this.getText(this.document.items.item.row_invoiced)) : 0,
|
|
140
|
+
totalLinePrice: ((qty - refundQty) * price),
|
|
141
|
+
};
|
|
142
|
+
let promotionAmount = this.getText(this.document.items.item.discount_amount) ? Number(this.getText(this.document.items.item.discount_amount)) : 0;
|
|
143
|
+
let appliedIDs = this.getText(this.document.items.item.applied_rule_ids) ? this.getText(this.document.items.item.applied_rule_ids) : '';
|
|
144
|
+
if (product && product.price != 0) {
|
|
145
|
+
if (promotionAmount) {
|
|
146
|
+
let trigger = {};
|
|
147
|
+
trigger.itemLineId = product.itemLineId;
|
|
148
|
+
trigger.quantity = product.quantity ? product.quantity : 0;
|
|
149
|
+
let promotion = {
|
|
150
|
+
promotionAmount: promotionAmount,
|
|
151
|
+
promotionId: appliedIDs,
|
|
152
|
+
itemLineId: product.itemLineId,
|
|
153
|
+
promotionLinePrice: product.totalLinePrice - promotionAmount,
|
|
154
|
+
trigger: trigger
|
|
155
|
+
};
|
|
156
|
+
this.webReturnObject.basket['linePromotion'].push(promotion);
|
|
157
|
+
}
|
|
158
|
+
this.webReturnObject.basket['products'].push(product);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
let couponCode = this.getText(this.document.coupon_code) ? this.getText(this.document.coupon_code) : 0;
|
|
162
|
+
let appliedIDs = this.getText(this.document.applied_rule_ids) ? this.getText(this.document.applied_rule_ids) : '';
|
|
163
|
+
let discountDescription = this.getText(this.document.discount_description) ? this.getText(this.document.discount_description) : '';
|
|
164
|
+
let couponTriggerPromotions = [];
|
|
165
|
+
if (couponCode && appliedIDs) {
|
|
166
|
+
let transactionPromotion = {};
|
|
167
|
+
if (this.webReturnObject.basket['linePromotion'] && this.webReturnObject.basket['linePromotion'].length > 0) {
|
|
168
|
+
this.webReturnObject.basket['linePromotion'].forEach((promotion) => {
|
|
169
|
+
if (promotion.promotionId === appliedIDs) {
|
|
170
|
+
let trigger = {};
|
|
171
|
+
trigger.itemLineId = promotion.itemLineId;
|
|
172
|
+
trigger.quantity = promotion.trigger.quantity;
|
|
173
|
+
trigger.totalQuantity = promotion.trigger.quantity;
|
|
174
|
+
trigger.promotionAmount = promotion.promotionAmount;
|
|
175
|
+
trigger.refundedReason = couponCode;
|
|
176
|
+
trigger.refundedReasonDescription = discountDescription;
|
|
177
|
+
trigger.promotionId = promotion.promotionId;
|
|
178
|
+
couponTriggerPromotions.push(trigger);
|
|
179
|
+
this.webReturnObject.basket['linePromotion'] = this.webReturnObject.basket['linePromotion'].filter((x) => x.itemLineId !== promotion.itemLineId);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
if (couponTriggerPromotions.length > 0) {
|
|
184
|
+
transactionPromotion.displayText = couponTriggerPromotions[0].refundedReasonDescription;
|
|
185
|
+
transactionPromotion.name = couponTriggerPromotions[0].refundedReason;
|
|
186
|
+
transactionPromotion.promotionAmount = -(couponTriggerPromotions.reduce((n, { promotionAmount }) => n + promotionAmount, 0));
|
|
187
|
+
transactionPromotion.promotionId = couponTriggerPromotions[0].promotionId;
|
|
188
|
+
transactionPromotion.promotionInfo = couponTriggerPromotions[0].refundedReasonDescription;
|
|
189
|
+
transactionPromotion.couponCode = couponCode;
|
|
190
|
+
transactionPromotion.itemLineIds = [];
|
|
191
|
+
transactionPromotion.type = PROMOTION_TYPE.COUPON;
|
|
192
|
+
transactionPromotion.subLevelType = PROMOTION_LEVEL.LINE;
|
|
193
|
+
transactionPromotion.trigger = couponTriggerPromotions;
|
|
194
|
+
}
|
|
195
|
+
console.log("e-basket: update LinePromotion With Coupon", JSON.stringify(transactionPromotion));
|
|
196
|
+
if (!this.webReturnObject.basket.transactionPromotion) {
|
|
197
|
+
this.webReturnObject.basket.transactionPromotion = [];
|
|
198
|
+
}
|
|
199
|
+
if (transactionPromotion && transactionPromotion.promotionId) {
|
|
200
|
+
this.webReturnObject.basket.transactionPromotion.push(transactionPromotion);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
this.updateTransactionPromotionPrtionCalc();
|
|
204
|
+
}
|
|
205
|
+
return this;
|
|
206
|
+
}
|
|
207
|
+
validateProductItemDiscount(product) {
|
|
208
|
+
if (!product.itemDiscounts) {
|
|
209
|
+
product.itemDiscounts = {
|
|
210
|
+
trnDiscountsPortion: 0,
|
|
211
|
+
trnPromotionsPortion: 0,
|
|
212
|
+
refundPortion: 0,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
return product;
|
|
216
|
+
}
|
|
217
|
+
transactionPromotionProductPortionCalc(txDoc, promotion) {
|
|
218
|
+
console.log(`ebasket: transactionPromotionProductPortionCalc: trnsactionPromotion: ${JSON.stringify(promotion)}`);
|
|
219
|
+
if (promotion.type === PROMOTION_TYPE.COUPON && promotion.subLevelType === PROMOTION_LEVEL.LINE) {
|
|
220
|
+
txDoc.basket.products.forEach((product) => {
|
|
221
|
+
product = this.validateProductItemDiscount(product);
|
|
222
|
+
if (promotion.trigger && promotion.trigger.length > 0) {
|
|
223
|
+
promotion.trigger.forEach((t) => {
|
|
224
|
+
if (t.itemLineId === product.itemLineId.toString()) {
|
|
225
|
+
product.itemDiscounts.trnPromotionsPortion += t.promotionAmount;
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
txDoc.basket.products.forEach((product) => {
|
|
233
|
+
product = this.validateProductItemDiscount(product);
|
|
234
|
+
if (promotion.itemLineIds.includes(+product.itemLineId)) {
|
|
235
|
+
let discountAmount = 0;
|
|
236
|
+
if (this.document.items.item instanceof Array) {
|
|
237
|
+
const productItem = this.document.items.item.find(productItem => productItem.sku === product.SKU);
|
|
238
|
+
discountAmount = productItem.discount_amount ? +productItem.discount_amount : 0;
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
discountAmount = this.document.items.item.sku === product.SKU && this.document.items.item.discount_amount ?
|
|
242
|
+
+this.document.items.item.discount_amount : 0;
|
|
243
|
+
}
|
|
244
|
+
const transactionPromotionPortion = discountAmount;
|
|
245
|
+
product.itemDiscounts.trnPromotionsPortion += this.numberUtilService.trimTo2Decimal2(transactionPromotionPortion);
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
return txDoc;
|
|
250
|
+
}
|
|
251
|
+
updateTransactionPromotionPrtionCalc() {
|
|
252
|
+
try {
|
|
253
|
+
if (this.webReturnObject.basket.transactionPromotion && this.webReturnObject.basket.transactionPromotion.length > 0) {
|
|
254
|
+
this.webReturnObject.basket.transactionPromotion.forEach(tr => {
|
|
255
|
+
this.transactionPromotionProductPortionCalc(this.webReturnObject, tr);
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
console.log("updateTransactionPromotionPrtionCalc => failed:", JSON.stringify(error));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
deviceId(deviceId) {
|
|
264
|
+
this.webReturnObject.deviceId = deviceId;
|
|
265
|
+
return this;
|
|
266
|
+
}
|
|
267
|
+
terminalId(terminalId) {
|
|
268
|
+
this.webReturnObject.terminalId = terminalId;
|
|
269
|
+
return this;
|
|
270
|
+
}
|
|
271
|
+
orgCode(orgCode) {
|
|
272
|
+
this.webReturnObject.orgCode = orgCode;
|
|
273
|
+
return this;
|
|
274
|
+
}
|
|
275
|
+
storeId(storeId) {
|
|
276
|
+
this.webReturnObject.storeId = storeId;
|
|
277
|
+
return this;
|
|
278
|
+
}
|
|
279
|
+
storeNodeId(storeNodeId) {
|
|
280
|
+
this.webReturnObject.storeNodeId = storeNodeId;
|
|
281
|
+
return this;
|
|
282
|
+
}
|
|
283
|
+
storeNodeStructure(storeNodeStructure) {
|
|
284
|
+
this.webReturnObject.storeNodeStructure = storeNodeStructure;
|
|
285
|
+
return this;
|
|
286
|
+
}
|
|
287
|
+
docId(docId) {
|
|
288
|
+
this.webReturnObject.id = docId;
|
|
289
|
+
return this;
|
|
290
|
+
}
|
|
291
|
+
updateUserID(userID) {
|
|
292
|
+
this.webReturnObject.userId = userID;
|
|
293
|
+
return this;
|
|
294
|
+
}
|
|
295
|
+
updateUserName(name) {
|
|
296
|
+
this.webReturnObject.userName = name;
|
|
297
|
+
return this;
|
|
298
|
+
}
|
|
299
|
+
build() {
|
|
300
|
+
return this.webReturnObject;
|
|
301
|
+
}
|
|
302
|
+
getText(obj) {
|
|
303
|
+
if (obj && obj.text) {
|
|
304
|
+
return obj.text;
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
return obj;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
getUTCDateTime(date) {
|
|
311
|
+
if (date) {
|
|
312
|
+
return new Date(date).toISOString();
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
isInStoreOrder() {
|
|
316
|
+
console.log("Mapper library: WebReturnMapperBuilderClass: isInStoreOrder mapping started...");
|
|
317
|
+
if (this.document.payment && this.document.payment.method && this.document.payment.method === 'pos_order') {
|
|
318
|
+
this.webReturnObject.isInStoreOrder = true;
|
|
319
|
+
}
|
|
320
|
+
console.log("Mapper library: WebReturnMapperBuilderClass: isInStoreOrder mapping ended...");
|
|
321
|
+
return this;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViUmV0dXJuLW1hcHBlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hcHBlci1saWJyYXJ5L3NyYy9saWIvV2ViUmV0dXJuLW1hcHBlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTJELGVBQWUsRUFBRSxjQUFjLEVBQWtDLE1BQU0sd0JBQXdCLENBQUM7QUFDbEssT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsTUFBTSxPQUFPLDJCQUEyQjtJQStCcEMsWUFBWSxRQUFRLEVBQVUsWUFBMkI7UUFBM0IsaUJBQVksR0FBWixZQUFZLENBQWU7UUE1QmpELG9CQUFlLEdBQXdCO1lBQzNDLEVBQUUsRUFBRSxFQUFFO1lBQ04sT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsRUFBRTtZQUNYLFdBQVcsRUFBRSxFQUFFO1lBQ2Ysa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxFQUFFO1lBQ2QsZ0JBQWdCLEVBQUUsRUFBRTtZQUNwQixNQUFNLEVBQUUsS0FBSztZQUNiLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsYUFBYSxFQUFFLEVBQUU7WUFDakIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsUUFBUSxFQUFFO2dCQUNOLFNBQVMsRUFBRSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxFQUFFO2dCQUNaLEtBQUssRUFBRSxFQUFFO2dCQUNULFFBQVEsRUFBRSxFQUFFO2dCQUNaLEVBQUUsRUFBRSxFQUFFO2dCQUNOLGNBQWMsRUFBRSxFQUFFO2dCQUNsQixlQUFlLEVBQUUsRUFBRTthQUV0QjtZQUNELHlCQUF5QixFQUFFLEVBQStCO1NBQzdELENBQUE7UUFJRyxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQzVC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QUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNySyxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdLLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0ssT0FBTyxHQUFHO29CQUNOLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNsSixHQUFHLEVBQUUsQ0FB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QyxHQUFHLENBQUMsOEVBQThFLENBQUMsQ0FBQztRQUM1RixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLCBUcmFuc2FjdGlvbkRvY3VtZW50LCBUcmlnZ2VyLCBQUk9NT1RJT05fTEVWRUwsIFBST01PVElPTl9UWVBFLCBUUHJvZHVjdCwgVHJhbnNhY3Rpb25Qcm9tb3Rpb24gfSBmcm9tIFwiLi9tYXBwZXItbGlicmFyeS5tb2RlbFwiO1xuaW1wb3J0IHsgTnVtYmVyVXRpbFNlcnZpY2UgfSBmcm9tIFwiLi9udW1iZXItdXRpbC5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJSZXR1cm5NYXBwZXJCdWlsZGVyQ2xhc3Mge1xuXG4gICAgcHJpdmF0ZSBkb2N1bWVudDogYW55O1xuICAgIHByaXZhdGUgd2ViUmV0dXJuT2JqZWN0OiBUcmFuc2FjdGlvbkRvY3VtZW50ID0ge1xuICAgICAgICBpZDogJycsXG4gICAgICAgIG9yZ0NvZGU6IFwiXCIsXG4gICAgICAgIHN0b3JlSWQ6IFwiXCIsXG4gICAgICAgIHN0b3JlTm9kZUlkOiBcIlwiLFxuICAgICAgICBzdG9yZU5vZGVTdHJ1Y3R1cmU6IFwiXCIsXG4gICAgICAgIGRldmljZUlkOiBcIlwiLFxuICAgICAgICB0ZXJtaW5hbElkOiBcIlwiLFxuICAgICAgICBpbml0aWF0aW5nTW9kdWxlOiBcIlwiLFxuICAgICAgICBleHBvcnQ6IGZhbHNlLFxuICAgICAgICBpc0luU3RvcmVPcmRlcjogZmFsc2UsXG4gICAgICAgIGJhc2tldDoge30sXG4gICAgICAgIGJhc2tldFN1bW1hcnk6IHt9LFxuICAgICAgICBiYXNlQ3VycmVuY3k6IFwiXCIsXG4gICAgICAgIGN1c3RvbWVyOiB7XG4gICAgICAgICAgICBmaXJzdE5hbWU6ICcnLFxuICAgICAgICAgICAgbGFzdE5hbWU6ICcnLFxuICAgICAgICAgICAgZW1haWw6ICcnLFxuICAgICAgICAgICAgcG9zdENvZGU6ICcnLFxuICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgYmlsbGluZ0FkZHJlc3M6IHt9LFxuICAgICAgICAgICAgc2hpcHBpbmdBZGRyZXNzOiB7fSxcblxuICAgICAgICB9LFxuICAgICAgICBjdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzOiB7fSBhcyBDdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzXG4gICAgfVxuICAgIG51bWJlclV0aWxTZXJ2aWNlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgcHJpdmF0ZSBjdXJyZW5jeVBpcGU/OiBDdXJyZW5jeVBpcGUpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5udW1iZXJVdGlsU2VydmljZSA9IG5ldyBOdW1iZXJVdGlsU2VydmljZShjdXJyZW5jeVBpcGUpO1xuICAgIH1cblxuICAgIFdlYlJldHVybk1hcHBlcigpIHtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3RbJ3R5cGUnXSA9ICdXRUJfUkVUVVJOUyc7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydkYXRldGltZSddID0gdGhpcy5nZXRVVENEYXRlVGltZSh0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC51cGRhdGVkX2F0KSk7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2VDdXJyZW5jeSA9IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LmJhc2VfY3VycmVuY3lfY29kZSk7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN0b3JlSWQgPSB0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5zdG9yZV9pZCk7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN1YnNpZGlhcnlJZCA9ICcxJztcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuaW5pdGlhdGluZ01vZHVsZSA9ICdNQUdFTlRPJztcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuY3JlYXRlZEF0ID0gdGhpcy5nZXRVVENEYXRlVGltZSh0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5jcmVhdGVkX2F0KSk7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnVwZGF0ZWRBdCA9IHRoaXMuZ2V0VVRDRGF0ZVRpbWUodGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQudXBkYXRlZF9hdCkpO1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5leHBvcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC50cmFuc0NvbXBsZXRlZEF0ID0gdGhpcy5nZXRVVENEYXRlVGltZSh0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC51cGRhdGVkX2F0KSk7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydleHRlcm5hbFRyYW5zYWN0aW9uSWQnXSA9IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50Lm9yZGVyX2lkKTtcblxuICAgICAgICAvLyBjdXN0b21lclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsnY3VzdG9tZXInXVsnZmlyc3ROYW1lJ10gPSB0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5jdXN0b21lcl9maXJzdG5hbWUpIHx8ICcnO1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsnY3VzdG9tZXInXVsnbGFzdE5hbWUnXSA9IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LmN1c3RvbWVyX2xhc3RuYW1lKSB8fCAnJztcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3RbJ2N1c3RvbWVyJ11bJ2VtYWlsJ10gPSB0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5jdXN0b21lcl9lbWFpbCkgfHwgJyc7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydjdXN0b21lciddWydwb3N0Q29kZSddID0gJyc7XG5cbiAgICAgICAgLy8gQmlsbGluZyBhZGRyZXNzXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydjdXN0b21lciddWydiaWxsaW5nQWRkcmVzcyddWydhZGRyZXNzMSddID0gKHRoaXMuZG9jdW1lbnQuYmlsbGluZ19hZGRyZXNzICYmIHRoaXMuZG9jdW1lbnQuYmlsbGluZ19hZGRyZXNzLnN0cmVldCkgPyB0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5iaWxsaW5nX2FkZHJlc3Muc3RyZWV0KSA6ICcnO1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsnY3VzdG9tZXInXVsnYmlsbGluZ0FkZHJlc3MnXVsnY2l0eSddID0gKHRoaXMuZG9jdW1lbnQuYmlsbGluZ19hZGRyZXNzICYmIHRoaXMuZG9jdW1lbnQuYmlsbGluZ19hZGRyZXNzLmNpdHkpID8gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuYmlsbGluZ19hZGRyZXNzLmNpdHkpIDogJyc7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydjdXN0b21lciddWydiaWxsaW5nQWRkcmVzcyddWydjb3VudHknXSA9ICh0aGlzLmRvY3VtZW50LmJpbGxpbmdfYWRkcmVzcyAmJiB0aGlzLmRvY3VtZW50LmJpbGxpbmdfYWRkcmVzcy5yZWdpb24pID8gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuYmlsbGluZ19hZGRyZXNzLnJlZ2lvbikgOiAnJztcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3RbJ2N1c3RvbWVyJ11bJ2JpbGxpbmdBZGRyZXNzJ11bJ3Bvc3RDb2RlJ10gPSAodGhpcy5kb2N1bWVudC5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5kb2N1bWVudC5iaWxsaW5nX2FkZHJlc3MucG9zdGNvZGUpID8gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuYmlsbGluZ19hZGRyZXNzLnBvc3Rjb2RlKSA6ICcnO1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsnY3VzdG9tZXInXVsnYmlsbGluZ0FkZHJlc3MnXVsnY291bnRyeSddID0gKHRoaXMuZG9jdW1lbnQuYmlsbGluZ19hZGRyZXNzICYmIHRoaXMuZG9jdW1lbnQuYmlsbGluZ19hZGRyZXNzLmNvdW50cnkpID8gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuYmlsbGluZ19hZGRyZXNzLmNvdW50cnkpIDogJyc7XG5cbiAgICAgICAgLy8gU2hpcHBpbmcgYWRkcmVzc1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsnY3VzdG9tZXInXVsnc2hpcHBpbmdBZGRyZXNzJ11bJ2FkZHJlc3MxJ10gPSAodGhpcy5kb2N1bWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHRoaXMuZG9jdW1lbnQuc2hpcHBpbmdfYWRkcmVzcy5zdHJlZXQpID8gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuc2hpcHBpbmdfYWRkcmVzcy5zdHJlZXQpIDogJyc7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydjdXN0b21lciddWydzaGlwcGluZ0FkZHJlc3MnXVsnY2l0eSddID0gKHRoaXMuZG9jdW1lbnQuc2hpcHBpbmdfYWRkcmVzcyAmJiB0aGlzLmRvY3VtZW50LnNoaXBwaW5nX2FkZHJlc3MuY2l0eSkgPyB0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5zaGlwcGluZ19hZGRyZXNzLmNpdHkpIDogJyc7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydjdXN0b21lciddWydzaGlwcGluZ0FkZHJlc3MnXVsnY291bnR5J10gPSAodGhpcy5kb2N1bWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHRoaXMuZG9jdW1lbnQuc2hpcHBpbmdfYWRkcmVzcy5yZWdpb24pID8gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuc2hpcHBpbmdfYWRkcmVzcy5yZWdpb24pIDogJyc7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydjdXN0b21lciddWydzaGlwcGluZ0FkZHJlc3MnXVsncG9zdENvZGUnXSA9ICh0aGlzLmRvY3VtZW50LnNoaXBwaW5nX2FkZHJlc3MgJiYgdGhpcy5kb2N1bWVudC5zaGlwcGluZ19hZGRyZXNzLnBvc3Rjb2RlKSA/IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LnNoaXBwaW5nX2FkZHJlc3MucG9zdGNvZGUpIDogJyc7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydjdXN0b21lciddWydzaGlwcGluZ0FkZHJlc3MnXVsnY291bnRyeSddID0gKHRoaXMuZG9jdW1lbnQuc2hpcHBpbmdfYWRkcmVzcyAmJiB0aGlzLmRvY3VtZW50LnNoaXBwaW5nX2FkZHJlc3MuY291bnRyeSkgPyB0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5zaGlwcGluZ19hZGRyZXNzLmNvdW50cnkpIDogJyc7XG5cbiAgICAgICAgLy8gYmFza2V0U3VtbWFyeSBcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0U3VtbWFyeVsnZGlzY291bnRUb3RhbCddID0gTWF0aC5hYnMoTnVtYmVyKHRoaXMuZG9jdW1lbnQuZGlzY291bnRfYW1vdW50ID8gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuZGlzY291bnRfYW1vdW50KSA6IDApKTtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0U3VtbWFyeVsnVkFUVG90YWwnXSA9IE51bWJlcih0aGlzLmRvY3VtZW50LmJhc2VfdG90YWxfcGFpZCA/IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LmJhc2VfdG90YWxfcGFpZCkgOiAwKTtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0U3VtbWFyeVsnc2FsZVRvdGFsJ10gPSBOdW1iZXIodGhpcy5kb2N1bWVudC5iYXNlX3RvdGFsX2ludm9pY2VkID8gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuYmFzZV90b3RhbF9pbnZvaWNlZCkgOiAwKTtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0U3VtbWFyeVsnYmFza2V0VG90YWwnXSA9IE51bWJlcih0aGlzLmRvY3VtZW50LmJhc2VfdG90YWxfcGFpZCA/IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LmJhc2VfdG90YWxfcGFpZCkgOiAwKTtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0U3VtbWFyeVsndG90YWxJdGVtcyddID0gTnVtYmVyKHRoaXMuZG9jdW1lbnQudG90YWxfcXR5X29yZGVyZWQgPyB0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC50b3RhbF9xdHlfb3JkZXJlZCkgOiAwKTtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0U3VtbWFyeVsncmVmdW5kVG90YWwnXSA9IE51bWJlcih0aGlzLmRvY3VtZW50LmJhc2VfdG90YWxfcmVmdW5kZWQgPyB0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5iYXNlX3RvdGFsX3JlZnVuZGVkKSA6IDApO1xuXG4gICAgICAgIC8vIC8vIGJhc2tldCBsaW5lIGRpc2NvdW50XG4gICAgICAgIC8vIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldFsnbGluZURpc2NvdW50J10gPSBbXTtcblxuICAgICAgICAvLyBsZXQgbGluZURpc2NvdW50ID0ge1xuICAgICAgICAvLyAgICAgaXRlbUxpbmVJZDogKHRoaXMuZG9jdW1lbnQuaXRlbXMgJiYgdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtICYmIHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbS5pdGVtX2lkKSA/IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0uaXRlbV9pZCkgOiAwLFxuICAgICAgICAvLyAgICAgZGlzY291bnRBbW91bnQ6ICh0aGlzLmRvY3VtZW50Lml0ZW1zICYmIHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbSAmJiB0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0uZGlzY291bnRfYW1vdW50KSA/IE51bWJlcih0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLmRpc2NvdW50X2Ftb3VudCkpIDogMFxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldFsnbGluZURpc2NvdW50J10ucHVzaChsaW5lRGlzY291bnQpO1xuXG4gICAgICAgIC8vIGJhc2tldCB0cmFuc2FjdGlvbiBkaXNjb3VudFxuICAgICAgICBcblxuICAgICAgICAvLyBiYXNrZXQgcHJvZHVjdHMgXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldFsncHJvZHVjdHMnXSA9IFtdO1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXRbJ2xpbmVQcm9tb3Rpb24nXT1bXTtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0Wyd0cmFuc2FjdGlvbkRpc2NvdW50J10gPSBbXTtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0Wyd0cmFuc2FjdGlvblByb21vdGlvbiddID0gW107XG5cbiAgICAgICAgLy8gbGV0IHRyYW5zYWN0aW9uRGlzY291bnQgPSB7XG4gICAgICAgIC8vICAgICBkaXNjb3VudEFtb3VudDogKHRoaXMuZG9jdW1lbnQgJiYgdGhpcy5kb2N1bWVudC5kaXNjb3VudF9hbW91bnQpID8gTnVtYmVyKHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LmRpc2NvdW50X2Ftb3VudCkpIDogMFxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldFsndHJhbnNhY3Rpb25EaXNjb3VudCddLnB1c2godHJhbnNhY3Rpb25EaXNjb3VudCk7XG5cblxuICAgICAgICBsZXQgcHJvZHVjdCA6IGFueT0ge307XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50Lml0ZW1zICYmIHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBxdHkgPSB0aGlzLmdldFRleHQoZWxlbWVudC5xdHlfb3JkZXJlZCkgPyBOdW1iZXIodGhpcy5nZXRUZXh0KGVsZW1lbnQucXR5X29yZGVyZWQpKSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZWZ1bmRRdHkgPSB0aGlzLmdldFRleHQoZWxlbWVudC5xdHlfcmVmdW5kZWQpID8gTnVtYmVyKHRoaXMuZ2V0VGV4dChlbGVtZW50LnF0eV9yZWZ1bmRlZCkpIDogMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByaWNlID0gdGhpcy5nZXRUZXh0KGVsZW1lbnQucHJpY2VfaW5jbF90YXgpID8gTnVtYmVyKHRoaXMuZ2V0VGV4dChlbGVtZW50LnByaWNlX2luY2xfdGF4KSkgOiAwO1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IChlbGVtZW50Lm5hbWUpID8gdGhpcy5nZXRUZXh0KGVsZW1lbnQubmFtZSkgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFNLVTogKGVsZW1lbnQuc2t1KSA/IHRoaXMuZ2V0VGV4dChlbGVtZW50LnNrdSkgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiAoZWxlbWVudC5xdHlfb3JkZXJlZCkgPyBOdW1iZXIodGhpcy5nZXRUZXh0KGVsZW1lbnQucXR5X29yZGVyZWQpKSA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZ1bmRlZFF1YW50aXR5OiAoZWxlbWVudC5xdHlfcmVmdW5kZWQpID8gTnVtYmVyKHRoaXMuZ2V0VGV4dChlbGVtZW50LnF0eV9yZWZ1bmRlZCkpIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpY2U6IChlbGVtZW50Lm9yaWdpbmFsX3ByaWNlKSA/IE51bWJlcih0aGlzLmdldFRleHQoZWxlbWVudC5vcmlnaW5hbF9wcmljZSkpIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBwcmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUxpbmVJZDogKGluZGV4ICsgMSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvdGFsTGluZVByaWNlOiAoZWxlbWVudC5yb3dfaW52b2ljZWQpID8gTnVtYmVyKHRoaXMuZ2V0VGV4dChlbGVtZW50LnJvd19pbnZvaWNlZCkpIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsTGluZVByaWNlOiAoKHF0eSAtIHJlZnVuZFF0eSkgKiBwcmljZSksXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbW90aW9uQW1vdW50ID0gdGhpcy5nZXRUZXh0KGVsZW1lbnQuZGlzY291bnRfYW1vdW50KSA/IE51bWJlcih0aGlzLmdldFRleHQoZWxlbWVudC5kaXNjb3VudF9hbW91bnQpKSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhcHBsaWVkSURzID0gdGhpcy5nZXRUZXh0KGVsZW1lbnQuYXBwbGllZF9ydWxlX2lkcykgPyB0aGlzLmdldFRleHQoZWxlbWVudC5hcHBsaWVkX3J1bGVfaWRzKTonJztcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvZHVjdCAmJiBwcm9kdWN0LnByaWNlICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb21vdGlvbkFtb3VudClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHJpZ2dlciA9IHt9IGFzIFRyaWdnZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLml0ZW1MaW5lSWQgPSBwcm9kdWN0Lml0ZW1MaW5lSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLnF1YW50aXR5ID0gcHJvZHVjdC5xdWFudGl0eSA/IHByb2R1Y3QucXVhbnRpdHkgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21vdGlvbiAgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbkFtb3VudDpwcm9tb3Rpb25BbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbklkOmFwcGxpZWRJRHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1MaW5lSWQ6cHJvZHVjdC5pdGVtTGluZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25MaW5lUHJpY2U6IHByb2R1Y3QudG90YWxMaW5lUHJpY2UgLSBwcm9tb3Rpb25BbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6dHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldFsnbGluZVByb21vdGlvbiddLnB1c2gocHJvbW90aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0Wydwcm9kdWN0cyddLnB1c2gocHJvZHVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgcXR5ID0gKHRoaXMuZG9jdW1lbnQuaXRlbXMgJiYgdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtICYmIHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbS5xdHlfb3JkZXJlZCkgPyBOdW1iZXIodGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbS5xdHlfb3JkZXJlZCkpIDogMDtcbiAgICAgICAgICAgICAgICBsZXQgcmVmdW5kUXR5ID0gKHRoaXMuZG9jdW1lbnQuaXRlbXMgJiYgdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtICYmIHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbS5xdHlfcmVmdW5kZWQpID8gTnVtYmVyKHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0ucXR5X3JlZnVuZGVkKSkgOiAwO1xuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9ICh0aGlzLmRvY3VtZW50Lml0ZW1zICYmIHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbSAmJiB0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0ucHJpY2VfaW5jbF90YXgpID8gTnVtYmVyKHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0ucHJpY2VfaW5jbF90YXgpKSA6IDA7XG4gICAgICAgICAgICAgICAgcHJvZHVjdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICh0aGlzLmRvY3VtZW50Lml0ZW1zICYmIHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbSAmJiB0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0ubmFtZSkgPyB0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLm5hbWUpIDogJycsXG4gICAgICAgICAgICAgICAgICAgIFNLVTogKHRoaXMuZG9jdW1lbnQuaXRlbXMgJiYgdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtICYmIHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbS5za3UpID8gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbS5za3UpIDogJycsXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiAodGhpcy5kb2N1bWVudC5pdGVtcyAmJiB0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0gJiYgdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLnF0eV9vcmRlcmVkKSA/IE51bWJlcih0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLnF0eV9vcmRlcmVkKSkgOiAwLFxuICAgICAgICAgICAgICAgICAgICByZWZ1bmRlZFF1YW50aXR5OiAodGhpcy5kb2N1bWVudC5pdGVtcyAmJiB0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0gJiYgdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLnF0eV9yZWZ1bmRlZCkgPyBOdW1iZXIodGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbS5xdHlfcmVmdW5kZWQpKSA6IDAsXG4gICAgICAgICAgICAgICAgICAgIC8vIHByaWNlOiAodGhpcy5kb2N1bWVudC5pdGVtcyAmJiB0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0gJiYgdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLm9yaWdpbmFsX3ByaWNlKSA/IE51bWJlcih0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLm9yaWdpbmFsX3ByaWNlKSkgOiAwLFxuICAgICAgICAgICAgICAgICAgICBwcmljZTogcHJpY2UsXG5cbiAgICAgICAgICAgICAgICAgICAgaXRlbUxpbmVJZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvdGFsTGluZVByaWNlOiAodGhpcy5kb2N1bWVudC5pdGVtcyAmJiB0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0gJiYgdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLnJvd19pbnZvaWNlZCkgPyBOdW1iZXIodGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbS5yb3dfaW52b2ljZWQpKSA6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsTGluZVByaWNlOiAoKHF0eSAtIHJlZnVuZFF0eSkgKiBwcmljZSksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbW90aW9uQW1vdW50ID0gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuaXRlbXMuaXRlbS5kaXNjb3VudF9hbW91bnQpID8gTnVtYmVyKHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0uZGlzY291bnRfYW1vdW50KSkgOiAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXBwbGllZElEcyA9IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0uYXBwbGllZF9ydWxlX2lkcykgPyB0aGlzLmdldFRleHQodGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLmFwcGxpZWRfcnVsZV9pZHMpOicnO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0ICYmIHByb2R1Y3QucHJpY2UgIT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvbW90aW9uQW1vdW50KVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0cmlnZ2VyID0ge30gYXMgVHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIuaXRlbUxpbmVJZCA9IHByb2R1Y3QuaXRlbUxpbmVJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIucXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5ID8gcHJvZHVjdC5xdWFudGl0eSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbW90aW9uICA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uQW1vdW50OnByb21vdGlvbkFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uSWQ6YXBwbGllZElEcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUxpbmVJZDpwcm9kdWN0Lml0ZW1MaW5lSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbkxpbmVQcmljZTogcHJvZHVjdC50b3RhbExpbmVQcmljZSAtIHByb21vdGlvbkFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjp0cmlnZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0WydsaW5lUHJvbW90aW9uJ10ucHVzaChwcm9tb3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXRbJ3Byb2R1Y3RzJ10ucHVzaChwcm9kdWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY291cG9uQ29kZSA9IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LmNvdXBvbl9jb2RlKSA/IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LmNvdXBvbl9jb2RlKSA6IDA7XG4gICAgICAgICAgICBsZXQgYXBwbGllZElEcyA9IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LmFwcGxpZWRfcnVsZV9pZHMpID8gdGhpcy5nZXRUZXh0KHRoaXMuZG9jdW1lbnQuYXBwbGllZF9ydWxlX2lkcyk6Jyc7XG4gICAgICAgICAgICBsZXQgZGlzY291bnREZXNjcmlwdGlvbiA9IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LmRpc2NvdW50X2Rlc2NyaXB0aW9uKSA/IHRoaXMuZ2V0VGV4dCh0aGlzLmRvY3VtZW50LmRpc2NvdW50X2Rlc2NyaXB0aW9uKTonJztcblxuICAgICAgICAgICAgbGV0IGNvdXBvblRyaWdnZXJQcm9tb3Rpb25zID0gW10gYXMgVHJpZ2dlcltdO1xuICAgICAgICAgICAgaWYoY291cG9uQ29kZSAmJiBhcHBsaWVkSURzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvblByb21vdGlvbiA9IHt9IGFzIFRyYW5zYWN0aW9uUHJvbW90aW9uO1xuXG4gICAgICAgICAgICAgICAgaWYodGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0WydsaW5lUHJvbW90aW9uJ10gJiYgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0WydsaW5lUHJvbW90aW9uJ10ubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldFsnbGluZVByb21vdGlvbiddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgICAgICAocHJvbW90aW9uKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb21vdGlvbi5wcm9tb3Rpb25JZCA9PT0gYXBwbGllZElEcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0cmlnZ2VyID0ge30gYXMgVHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5pdGVtTGluZUlkID0gcHJvbW90aW9uLml0ZW1MaW5lSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIucXVhbnRpdHkgPSBwcm9tb3Rpb24udHJpZ2dlci5xdWFudGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci50b3RhbFF1YW50aXR5ID0gcHJvbW90aW9uLnRyaWdnZXIucXVhbnRpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIucHJvbW90aW9uQW1vdW50ID0gcHJvbW90aW9uLnByb21vdGlvbkFtb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5yZWZ1bmRlZFJlYXNvbiA9IGNvdXBvbkNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbiA9IGRpc2NvdW50RGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIucHJvbW90aW9uSWQgPSBwcm9tb3Rpb24ucHJvbW90aW9uSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXBvblRyaWdnZXJQcm9tb3Rpb25zLnB1c2godHJpZ2dlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldFsnbGluZVByb21vdGlvbiddID0gdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0WydsaW5lUHJvbW90aW9uJ10uZmlsdGVyKCh4KT0+eC5pdGVtTGluZUlkICE9PSBwcm9tb3Rpb24uaXRlbUxpbmVJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb3Vwb25UcmlnZ2VyUHJvbW90aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uLmRpc3BsYXlUZXh0ID0gY291cG9uVHJpZ2dlclByb21vdGlvbnNbMF0ucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb24ubmFtZSA9IGNvdXBvblRyaWdnZXJQcm9tb3Rpb25zWzBdLnJlZnVuZGVkUmVhc29uO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbi5wcm9tb3Rpb25BbW91bnQgPSAtKGNvdXBvblRyaWdnZXJQcm9tb3Rpb25zLnJlZHVjZSgobiwgeyBwcm9tb3Rpb25BbW91bnQgfSkgPT4gbiArIHByb21vdGlvbkFtb3VudCwgMCkpO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbi5wcm9tb3Rpb25JZCA9IGNvdXBvblRyaWdnZXJQcm9tb3Rpb25zWzBdLnByb21vdGlvbklkO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbi5wcm9tb3Rpb25JbmZvID0gY291cG9uVHJpZ2dlclByb21vdGlvbnNbMF0ucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb24uY291cG9uQ29kZSA9IGNvdXBvbkNvZGU7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uLml0ZW1MaW5lSWRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uLnR5cGUgPSBQUk9NT1RJT05fVFlQRS5DT1VQT047XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uLnN1YkxldmVsVHlwZSA9IFBST01PVElPTl9MRVZFTC5MSU5FO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbi50cmlnZ2VyID0gY291cG9uVHJpZ2dlclByb21vdGlvbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZS1iYXNrZXQ6IHVwZGF0ZSBMaW5lUHJvbW90aW9uIFdpdGggQ291cG9uXCIsIEpTT04uc3RyaW5naWZ5KHRyYW5zYWN0aW9uUHJvbW90aW9uKSk7XG4gICAgXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24gKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNhY3Rpb25Qcm9tb3Rpb24gJiYgdHJhbnNhY3Rpb25Qcm9tb3Rpb24ucHJvbW90aW9uSWQgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uLnB1c2godHJhbnNhY3Rpb25Qcm9tb3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFuc2FjdGlvblByb21vdGlvblBydGlvbkNhbGMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGVQcm9kdWN0SXRlbURpc2NvdW50KHByb2R1Y3Q6IFRQcm9kdWN0KSB7XG4gICAgICAgIGlmICghcHJvZHVjdC5pdGVtRGlzY291bnRzKSB7XG4gICAgICAgICAgICBwcm9kdWN0Lml0ZW1EaXNjb3VudHMgPSB7XG4gICAgICAgICAgICAgICAgdHJuRGlzY291bnRzUG9ydGlvbjogMCxcbiAgICAgICAgICAgICAgICB0cm5Qcm9tb3Rpb25zUG9ydGlvbjogMCxcbiAgICAgICAgICAgICAgICByZWZ1bmRQb3J0aW9uOiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvZHVjdDtcbiAgICB9XG5cbiAgICB0cmFuc2FjdGlvblByb21vdGlvblByb2R1Y3RQb3J0aW9uQ2FsYyhcbiAgICAgICAgdHhEb2M6IFRyYW5zYWN0aW9uRG9jdW1lbnQsXG4gICAgICAgIHByb21vdGlvbjogVHJhbnNhY3Rpb25Qcm9tb3Rpb25cbiAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgZWJhc2tldDogdHJhbnNhY3Rpb25Qcm9tb3Rpb25Qcm9kdWN0UG9ydGlvbkNhbGM6IHRybnNhY3Rpb25Qcm9tb3Rpb246ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgcHJvbW90aW9uXG4gICAgICAgICAgICApfWBcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHByb21vdGlvbi50eXBlID09PSBQUk9NT1RJT05fVFlQRS5DT1VQT04gJiYgcHJvbW90aW9uLnN1YkxldmVsVHlwZSA9PT0gUFJPTU9USU9OX0xFVkVMLkxJTkUpIHtcbiAgICAgICAgICAgIHR4RG9jLmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcHJvZHVjdCA9IHRoaXMudmFsaWRhdGVQcm9kdWN0SXRlbURpc2NvdW50KHByb2R1Y3QpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHByb21vdGlvbi50cmlnZ2VyICYmIHByb21vdGlvbi50cmlnZ2VyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uLnRyaWdnZXIuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuaXRlbUxpbmVJZCA9PT0gcHJvZHVjdC5pdGVtTGluZUlkLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Lml0ZW1EaXNjb3VudHMudHJuUHJvbW90aW9uc1BvcnRpb24gKz0gdC5wcm9tb3Rpb25BbW91bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdHhEb2MuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3QpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9kdWN0ID0gdGhpcy52YWxpZGF0ZVByb2R1Y3RJdGVtRGlzY291bnQocHJvZHVjdCk7XG4gICAgICAgICAgICAgICAgaWYgKHByb21vdGlvbi5pdGVtTGluZUlkcy5pbmNsdWRlcygrcHJvZHVjdC5pdGVtTGluZUlkKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGlzY291bnRBbW91bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RJdGVtID0gdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLmZpbmQocHJvZHVjdEl0ZW0gPT4gcHJvZHVjdEl0ZW0uc2t1ID09PSBwcm9kdWN0LlNLVSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNjb3VudEFtb3VudCA9IHByb2R1Y3RJdGVtLmRpc2NvdW50X2Ftb3VudCA/ICtwcm9kdWN0SXRlbS5kaXNjb3VudF9hbW91bnQgOiAwO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY291bnRBbW91bnQgPSB0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0uc2t1ID09PSBwcm9kdWN0LlNLVSAmJiB0aGlzLmRvY3VtZW50Lml0ZW1zLml0ZW0uZGlzY291bnRfYW1vdW50ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArdGhpcy5kb2N1bWVudC5pdGVtcy5pdGVtLmRpc2NvdW50X2Ftb3VudCA6IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25Qcm9tb3Rpb25Qb3J0aW9uID0gZGlzY291bnRBbW91bnQ7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3QuaXRlbURpc2NvdW50cy50cm5Qcm9tb3Rpb25zUG9ydGlvbiArPSB0aGlzLm51bWJlclV0aWxTZXJ2aWNlLnRyaW1UbzJEZWNpbWFsMih0cmFuc2FjdGlvblByb21vdGlvblBvcnRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eERvYztcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2FjdGlvblByb21vdGlvblBydGlvbkNhbGMoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uICYmIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uLmZvckVhY2godHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uUHJvbW90aW9uUHJvZHVjdFBvcnRpb25DYWxjKHRoaXMud2ViUmV0dXJuT2JqZWN0LCB0cilcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInVwZGF0ZVRyYW5zYWN0aW9uUHJvbW90aW9uUHJ0aW9uQ2FsYyA9PiBmYWlsZWQ6XCIsIEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXZpY2VJZChkZXZpY2VJZCkge1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5kZXZpY2VJZCA9IGRldmljZUlkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0ZXJtaW5hbElkKHRlcm1pbmFsSWQpIHtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QudGVybWluYWxJZCA9IHRlcm1pbmFsSWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG9yZ0NvZGUob3JnQ29kZSkge1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5vcmdDb2RlID0gb3JnQ29kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc3RvcmVJZChzdG9yZUlkKSB7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN0b3JlSWQgPSBzdG9yZUlkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzdG9yZU5vZGVJZChzdG9yZU5vZGVJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN0b3JlTm9kZUlkID0gc3RvcmVOb2RlSWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHN0b3JlTm9kZVN0cnVjdHVyZShzdG9yZU5vZGVTdHJ1Y3R1cmU6IHN0cmluZykge1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5zdG9yZU5vZGVTdHJ1Y3R1cmUgPSBzdG9yZU5vZGVTdHJ1Y3R1cmU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGRvY0lkKGRvY0lkKSB7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmlkID0gZG9jSWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHVwZGF0ZVVzZXJJRCh1c2VySUQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC51c2VySWQgPSB1c2VySUQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHVwZGF0ZVVzZXJOYW1lKG5hbWUpIHtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QudXNlck5hbWUgPSBuYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBidWlsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2ViUmV0dXJuT2JqZWN0O1xuICAgIH1cblxuICAgIGdldFRleHQob2JqKSB7XG4gICAgICAgIGlmIChvYmogJiYgb2JqLnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoudGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRVVENEYXRlVGltZShkYXRlKSB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzSW5TdG9yZU9yZGVyKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5NYXBwZXJCdWlsZGVyQ2xhc3M6IGlzSW5TdG9yZU9yZGVyIG1hcHBpbmcgc3RhcnRlZC4uLlwiKTsgXG4gICAgICAgIGlmKHRoaXMuZG9jdW1lbnQucGF5bWVudCAmJiB0aGlzLmRvY3VtZW50LnBheW1lbnQubWV0aG9kICYmIHRoaXMuZG9jdW1lbnQucGF5bWVudC5tZXRob2QgPT09ICdwb3Nfb3JkZXInKXtcbiAgICAgICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmlzSW5TdG9yZU9yZGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5NYXBwZXJCdWlsZGVyQ2xhc3M6IGlzSW5TdG9yZU9yZGVyIG1hcHBpbmcgZW5kZWQuLi5cIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiJdfQ==
|