@pmcretail/mapper-library 0.0.39 → 0.0.43
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/README.md +24 -24
- package/esm2022/lib/RJ-mapper.class.mjs +875 -0
- package/esm2022/lib/TransactionDocumentBuilder.mjs +1240 -0
- package/esm2022/lib/WebReturn-mapper.class.mjs +324 -0
- package/esm2022/lib/WebReturnSalesforceMapper.class.mjs +410 -0
- package/esm2022/lib/basket.service.mjs +516 -0
- package/esm2022/lib/mapper-library.component.mjs +22 -0
- package/esm2022/lib/mapper-library.model.mjs +39 -0
- package/esm2022/lib/mapper-library.module.mjs +21 -0
- package/esm2022/lib/number-util.service.mjs +40 -0
- package/esm2022/pmcretail-mapper-library.mjs +5 -0
- package/esm2022/public-api.mjs +9 -0
- package/fesm2022/pmcretail-mapper-library.mjs +3482 -0
- package/fesm2022/pmcretail-mapper-library.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/RJ-mapper.class.d.ts +80 -79
- package/lib/RJ-mapper.class.d.ts.map +1 -0
- package/lib/TransactionDocumentBuilder.d.ts +271 -270
- package/lib/TransactionDocumentBuilder.d.ts.map +1 -0
- package/lib/WebReturn-mapper.class.d.ts +27 -26
- package/lib/WebReturn-mapper.class.d.ts.map +1 -0
- package/lib/WebReturnSalesforceMapper.class.d.ts +35 -34
- package/lib/WebReturnSalesforceMapper.class.d.ts.map +1 -0
- package/lib/basket.service.d.ts +105 -103
- package/lib/basket.service.d.ts.map +1 -0
- package/lib/mapper-library.component.d.ts +9 -5
- package/lib/mapper-library.component.d.ts.map +1 -0
- package/lib/mapper-library.model.d.ts +694 -693
- package/lib/mapper-library.model.d.ts.map +1 -0
- package/lib/mapper-library.module.d.ts +8 -2
- package/lib/mapper-library.module.d.ts.map +1 -0
- package/lib/number-util.service.d.ts +13 -9
- package/lib/number-util.service.d.ts.map +1 -0
- package/package.json +21 -17
- package/pmcretail-mapper-library.d.ts.map +1 -0
- package/public-api.d.ts +6 -5
- package/public-api.d.ts.map +1 -0
- package/bundles/pmcretail-mapper-library.umd.js +0 -8542
- package/bundles/pmcretail-mapper-library.umd.js.map +0 -1
- package/bundles/pmcretail-mapper-library.umd.min.js +0 -16
- package/bundles/pmcretail-mapper-library.umd.min.js.map +0 -1
- package/esm2015/lib/RJ-mapper.class.js +0 -1464
- package/esm2015/lib/TransactionDocumentBuilder.js +0 -1535
- package/esm2015/lib/WebReturn-mapper.class.js +0 -501
- package/esm2015/lib/WebReturnSalesforceMapper.class.js +0 -683
- package/esm2015/lib/basket.service.js +0 -851
- package/esm2015/lib/mapper-library.component.js +0 -27
- package/esm2015/lib/mapper-library.model.js +0 -1442
- package/esm2015/lib/mapper-library.module.js +0 -21
- package/esm2015/lib/number-util.service.js +0 -78
- package/esm2015/pmcretail-mapper-library.js +0 -10
- package/esm2015/public-api.js +0 -14
- package/esm5/lib/RJ-mapper.class.js +0 -1762
- package/esm5/lib/TransactionDocumentBuilder.js +0 -2469
- package/esm5/lib/WebReturn-mapper.class.js +0 -592
- package/esm5/lib/WebReturnSalesforceMapper.class.js +0 -857
- package/esm5/lib/basket.service.js +0 -1076
- package/esm5/lib/mapper-library.component.js +0 -29
- package/esm5/lib/mapper-library.model.js +0 -1442
- package/esm5/lib/mapper-library.module.js +0 -25
- package/esm5/lib/number-util.service.js +0 -95
- package/esm5/pmcretail-mapper-library.js +0 -10
- package/esm5/public-api.js +0 -14
- package/fesm2015/pmcretail-mapper-library.js +0 -6594
- package/fesm2015/pmcretail-mapper-library.js.map +0 -1
- package/fesm5/pmcretail-mapper-library.js +0 -8326
- package/fesm5/pmcretail-mapper-library.js.map +0 -1
- package/pmcretail-mapper-library.d.ts +0 -5
- package/pmcretail-mapper-library.metadata.json +0 -1
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
import { DELIVERY_METHODS, PROMOTION_LEVEL, PROMOTION_TYPE, INITIATING_MODULE, PROVIDERS, TRANSACTION_TYPE } from "./mapper-library.model";
|
|
2
|
+
import { NumberUtilService } from "./number-util.service";
|
|
3
|
+
export class WebReturnSalesforceMapperBuilderClass {
|
|
4
|
+
constructor(orderDetails, 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
|
+
id: '',
|
|
22
|
+
email: '',
|
|
23
|
+
firstName: '',
|
|
24
|
+
lastName: '',
|
|
25
|
+
billingAddress: [],
|
|
26
|
+
shippingAddress: [],
|
|
27
|
+
shipmentDetails: [],
|
|
28
|
+
telephone: '',
|
|
29
|
+
postCode: '',
|
|
30
|
+
noCustomerSelected: false
|
|
31
|
+
},
|
|
32
|
+
currentTransactionDetails: {}
|
|
33
|
+
};
|
|
34
|
+
if (orderDetails) {
|
|
35
|
+
this.orderDetails = orderDetails;
|
|
36
|
+
}
|
|
37
|
+
this.numberUtilService = new NumberUtilService(currencyPipe);
|
|
38
|
+
}
|
|
39
|
+
webReturnCommonMapper() {
|
|
40
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: webReturnCommonMapper started...");
|
|
41
|
+
this.webReturnObject['type'] = TRANSACTION_TYPE.WEB_RETURNS;
|
|
42
|
+
this.webReturnObject['datetime'] = this.getUTCDateTime(this.orderDetails.last_modified);
|
|
43
|
+
this.webReturnObject.baseCurrency = this.orderDetails.currency;
|
|
44
|
+
this.webReturnObject.subsidiaryId = '1';
|
|
45
|
+
this.webReturnObject.export = true;
|
|
46
|
+
this.webReturnObject.initiatingModule = INITIATING_MODULE.EBASKET;
|
|
47
|
+
this.webReturnObject.createdAt = this.getUTCDateTime(this.orderDetails.creation_date);
|
|
48
|
+
this.webReturnObject.updatedAt = this.getUTCDateTime(this.orderDetails.last_modified);
|
|
49
|
+
this.webReturnObject.transCompletedAt = this.getUTCDateTime(this.orderDetails.last_modified);
|
|
50
|
+
this.webReturnObject['externalTransactionId'] = this.orderDetails.order_no;
|
|
51
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: webReturnCommonMapper ended...");
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
// export(status, details) {
|
|
55
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping started...");
|
|
56
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: status:", status);
|
|
57
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: details:", JSON.stringify(details));
|
|
58
|
+
// if (status && details && details.providers && details.providers.length > 0) {
|
|
59
|
+
// details.providers.forEach(
|
|
60
|
+
// providerObj => {
|
|
61
|
+
// if (providerObj.provider && providerObj.provider === PROVIDERS.SALESFORCE) {
|
|
62
|
+
// this.webReturnObject.export = true;
|
|
63
|
+
// } else {
|
|
64
|
+
// this.webReturnObject.export = false;
|
|
65
|
+
// }
|
|
66
|
+
// }
|
|
67
|
+
// );
|
|
68
|
+
// } else {
|
|
69
|
+
// this.webReturnObject.export = false;
|
|
70
|
+
// }
|
|
71
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping end...")
|
|
72
|
+
// return this;
|
|
73
|
+
// }
|
|
74
|
+
getDeliveryMethod() {
|
|
75
|
+
if (this.orderDetails.shipments && this.orderDetails.shipments.length > 0) {
|
|
76
|
+
const shipToStoreShipment = this.orderDetails.shipments.find(shipment => shipment.c_fromStoreId);
|
|
77
|
+
if (shipToStoreShipment)
|
|
78
|
+
return DELIVERY_METHODS.SHIP_TO_STORE;
|
|
79
|
+
else
|
|
80
|
+
return DELIVERY_METHODS.DELIVERY;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
return '';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
product() {
|
|
87
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: product mapping started...");
|
|
88
|
+
this.webReturnObject.basket['products'] = [];
|
|
89
|
+
if (this.orderDetails.product_items && this.orderDetails.product_items.length > 0) {
|
|
90
|
+
this.orderDetails.product_items.forEach((product, index) => {
|
|
91
|
+
const productObj = {
|
|
92
|
+
description: product.item_text ? product.item_text : '',
|
|
93
|
+
SKU: product.product_id ? product.product_id : '',
|
|
94
|
+
quantity: product.quantity ? product.quantity : 0,
|
|
95
|
+
refundedQuantity: 0,
|
|
96
|
+
price: product.base_price ? product.base_price : 0,
|
|
97
|
+
itemLineId: (index + 1).toString(),
|
|
98
|
+
deliveryMethod: this.getDeliveryMethod().toString(),
|
|
99
|
+
totalLinePrice: product.price ? product.price : 0
|
|
100
|
+
};
|
|
101
|
+
if (product && product.price != 0) {
|
|
102
|
+
this.webReturnObject.basket['products'].push(productObj);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: product mapping ended...");
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
linePromotion() {
|
|
110
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: linePromotion mapping started...");
|
|
111
|
+
this.webReturnObject.basket.linePromotion = [];
|
|
112
|
+
let linePromotionArray = [];
|
|
113
|
+
if (this.orderDetails.product_items && this.orderDetails.product_items.length > 0) {
|
|
114
|
+
this.orderDetails.product_items.forEach((product, index) => {
|
|
115
|
+
product.item_id = (index + 1).toString();
|
|
116
|
+
if (product.price_adjustments && product.price_adjustments.length > 0) {
|
|
117
|
+
product.price_adjustments.forEach((promotion) => {
|
|
118
|
+
if (!promotion.coupon_code) {
|
|
119
|
+
let linePromotionObj = {};
|
|
120
|
+
let trigger = {};
|
|
121
|
+
trigger.itemLineId = product.item_id;
|
|
122
|
+
trigger.quantity = product.quantity ? product.quantity : 0;
|
|
123
|
+
linePromotionObj.trigger = [];
|
|
124
|
+
linePromotionObj.trigger.push(trigger);
|
|
125
|
+
linePromotionObj.itemLineId = index + 1;
|
|
126
|
+
linePromotionObj.promotionId = promotion.promotion_id ? promotion.promotion_id : '';
|
|
127
|
+
linePromotionObj.displayText = promotion.item_text ? promotion.item_text : '';
|
|
128
|
+
linePromotionObj.promotionType = promotion.applied_discount && promotion.applied_discount.type ? promotion.applied_discount.type : '';
|
|
129
|
+
linePromotionObj.promotionAmount = promotion.price ? Math.abs(promotion.price) : 0;
|
|
130
|
+
linePromotionObj.name = promotion.coupon_code ? promotion.coupon_code : (promotion.item_text ? promotion.item_text : '');
|
|
131
|
+
linePromotionObj.promotionInfo = promotion.item_text ? promotion.item_text : '';
|
|
132
|
+
linePromotionObj.promotionLinePrice = product.price - Math.abs(promotion.price);
|
|
133
|
+
linePromotionArray.push(linePromotionObj);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
this.webReturnObject.basket.linePromotion = linePromotionArray;
|
|
140
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: linePromotion mapping ended...");
|
|
141
|
+
return this;
|
|
142
|
+
}
|
|
143
|
+
transactionPromotion() {
|
|
144
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: transactionPromotion mapping started...");
|
|
145
|
+
let transactionPromotionArray = this.getTransactionPromotions(this.orderDetails);
|
|
146
|
+
this.webReturnObject.basket.transactionPromotion = transactionPromotionArray;
|
|
147
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: transactionPromotion mapping ended...");
|
|
148
|
+
return this;
|
|
149
|
+
}
|
|
150
|
+
getTransactionPromotions(basket) {
|
|
151
|
+
try {
|
|
152
|
+
let transactionPromotionArray = [];
|
|
153
|
+
if (basket.order_price_adjustments && basket.order_price_adjustments.length > 0) {
|
|
154
|
+
basket.order_price_adjustments.forEach((transactionPromotion) => {
|
|
155
|
+
let transactionPromotionObj = {};
|
|
156
|
+
transactionPromotionObj.displayText = transactionPromotion.item_text ? transactionPromotion.item_text : '';
|
|
157
|
+
transactionPromotionObj.name = transactionPromotion.coupon_code ? transactionPromotion.coupon_code : (transactionPromotion.item_text ? transactionPromotion.item_text : '');
|
|
158
|
+
transactionPromotionObj.promotionAmount = transactionPromotion.price ? Math.abs(transactionPromotion.price) : 0;
|
|
159
|
+
transactionPromotionObj.promotionId = transactionPromotion.promotion_id ? transactionPromotion.promotion_id : '';
|
|
160
|
+
transactionPromotionObj.promotionInfo = transactionPromotion.item_text ? transactionPromotion.item_text : '';
|
|
161
|
+
transactionPromotionObj.promotionType = transactionPromotion.applied_discount && transactionPromotion.applied_discount.type ? transactionPromotion.applied_discount.type : '';
|
|
162
|
+
transactionPromotionObj.itemLineIds = this.orderDetails.product_items.map((product, index) => index + 1);
|
|
163
|
+
if (transactionPromotion.coupon_code) {
|
|
164
|
+
transactionPromotionObj.type = PROMOTION_TYPE.COUPON;
|
|
165
|
+
transactionPromotionObj.couponCode = transactionPromotion.coupon_code;
|
|
166
|
+
transactionPromotionObj.subLevelType = PROMOTION_LEVEL.TRANSACTION;
|
|
167
|
+
}
|
|
168
|
+
transactionPromotionArray.push(transactionPromotionObj);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: getTransactionPromotions : ", JSON.stringify(transactionPromotionArray));
|
|
172
|
+
return transactionPromotionArray;
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: failed:", error);
|
|
176
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: failed:", JSON.stringify(error));
|
|
177
|
+
throw new Error(error);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
updateLinePromotionWithCoupon() {
|
|
181
|
+
try {
|
|
182
|
+
let transactionPromotion = {};
|
|
183
|
+
let triggerPromotion = [];
|
|
184
|
+
if (this.orderDetails.product_items && this.orderDetails.product_items.length > 0) {
|
|
185
|
+
this.orderDetails.product_items.forEach((product, index) => {
|
|
186
|
+
product.item_id = (index + 1).toString();
|
|
187
|
+
if (product.price_adjustments && product.price_adjustments.length > 0) {
|
|
188
|
+
product.price_adjustments.forEach((promotion) => {
|
|
189
|
+
if (promotion.coupon_code) {
|
|
190
|
+
let trigger = {};
|
|
191
|
+
trigger.itemLineId = product.item_id;
|
|
192
|
+
trigger.quantity = product.quantity ? product.quantity : 0;
|
|
193
|
+
trigger.totalQuantity = product.quantity ? product.quantity : 0;
|
|
194
|
+
trigger.promotionAmount = promotion.price ? Math.abs(promotion.price) : 0;
|
|
195
|
+
trigger.refundedReason = promotion.coupon_code ? promotion.coupon_code : '';
|
|
196
|
+
trigger.refundedReasonDescription = promotion.item_text ? promotion.item_text : '';
|
|
197
|
+
trigger.promotionId = promotion.promotion_id;
|
|
198
|
+
triggerPromotion.push(trigger);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
if (triggerPromotion.length > 0) {
|
|
205
|
+
transactionPromotion.displayText = triggerPromotion[0].refundedReasonDescription;
|
|
206
|
+
transactionPromotion.name = triggerPromotion[0].refundedReason;
|
|
207
|
+
transactionPromotion.promotionAmount = -(triggerPromotion.reduce((n, { promotionAmount }) => n + promotionAmount, 0));
|
|
208
|
+
transactionPromotion.promotionId = triggerPromotion[0].promotionId;
|
|
209
|
+
transactionPromotion.promotionInfo = triggerPromotion[0].refundedReasonDescription;
|
|
210
|
+
transactionPromotion.couponCode = triggerPromotion[0].refundedReason;
|
|
211
|
+
transactionPromotion.itemLineIds = [];
|
|
212
|
+
transactionPromotion.type = PROMOTION_TYPE.COUPON;
|
|
213
|
+
transactionPromotion.subLevelType = PROMOTION_LEVEL.LINE;
|
|
214
|
+
transactionPromotion.trigger = triggerPromotion;
|
|
215
|
+
}
|
|
216
|
+
console.log("linePromotion mapping ended...");
|
|
217
|
+
console.log("e-basket: updateLinePromotionWithCoupon", JSON.stringify(transactionPromotion));
|
|
218
|
+
if (!this.webReturnObject.basket.transactionPromotion) {
|
|
219
|
+
this.webReturnObject.basket.transactionPromotion = [];
|
|
220
|
+
}
|
|
221
|
+
if (transactionPromotion && transactionPromotion.promotionId) {
|
|
222
|
+
this.webReturnObject.basket.transactionPromotion.push(transactionPromotion);
|
|
223
|
+
}
|
|
224
|
+
return this;
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
console.log("Ebasket: Salesforce: linePromotion mapping=> failed:", error);
|
|
228
|
+
console.log("Ebasket: Salesforce: linePromotion mapping=> failed:", JSON.stringify(error));
|
|
229
|
+
throw new Error(error);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
updateTransactionPromotionPrtionCalc() {
|
|
233
|
+
if (this.webReturnObject.basket.transactionPromotion && this.webReturnObject.basket.transactionPromotion.length > 0) {
|
|
234
|
+
this.webReturnObject.basket.transactionPromotion.forEach(tr => {
|
|
235
|
+
this.transactionPromotionProductPortionCalc(this.webReturnObject, tr);
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
return this;
|
|
239
|
+
}
|
|
240
|
+
transactionPromotionProductPortionCalc(txDoc, promotion) {
|
|
241
|
+
console.log(`ebasket: transactionPromotionProductPortionCalc: trnsactionPromotion: ${JSON.stringify(promotion)}`);
|
|
242
|
+
if (promotion.type === PROMOTION_TYPE.COUPON && promotion.subLevelType === PROMOTION_LEVEL.LINE) {
|
|
243
|
+
txDoc.basket.products.forEach((product) => {
|
|
244
|
+
product = this.validateProductItemDiscount(product);
|
|
245
|
+
if (promotion.trigger && promotion.trigger.length > 0) {
|
|
246
|
+
promotion.trigger.forEach((t) => {
|
|
247
|
+
if (t.itemLineId === product.itemLineId.toString()) {
|
|
248
|
+
product.itemDiscounts.trnPromotionsPortion += t.promotionAmount;
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
txDoc.basket.products.forEach((product) => {
|
|
256
|
+
product = this.validateProductItemDiscount(product);
|
|
257
|
+
if (promotion.itemLineIds.includes(+product.itemLineId)) {
|
|
258
|
+
const productItem = this.orderDetails.product_items.find(productItem => productItem.product_id === product.SKU);
|
|
259
|
+
const transactionPromotionPortion = (productItem && productItem.price_after_item_discount && productItem.price_after_order_discount) ?
|
|
260
|
+
(productItem.price_after_item_discount - productItem.price_after_order_discount) : 0;
|
|
261
|
+
product.itemDiscounts.trnPromotionsPortion += this.numberUtilService.trimTo2Decimal2(transactionPromotionPortion);
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
return txDoc;
|
|
266
|
+
}
|
|
267
|
+
validateProductItemDiscount(product) {
|
|
268
|
+
if (!product.itemDiscounts) {
|
|
269
|
+
product.itemDiscounts = {
|
|
270
|
+
trnDiscountsPortion: 0,
|
|
271
|
+
trnPromotionsPortion: 0,
|
|
272
|
+
refundPortion: 0,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
return product;
|
|
276
|
+
}
|
|
277
|
+
customer() {
|
|
278
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: customer mapping started...");
|
|
279
|
+
let customerObj = {};
|
|
280
|
+
customerObj.email = this.orderDetails.customer_info && this.orderDetails.customer_info.email ? this.orderDetails.customer_info.email : '';
|
|
281
|
+
customerObj.firstName = this.orderDetails.billing_address && this.orderDetails.billing_address.first_name ? this.orderDetails.billing_address.first_name : '';
|
|
282
|
+
customerObj.lastName = this.orderDetails.billing_address && this.orderDetails.billing_address.last_name ? this.orderDetails.billing_address.last_name : '';
|
|
283
|
+
let shippingAddress = [];
|
|
284
|
+
this.orderDetails.shipments.forEach(shipment => {
|
|
285
|
+
let shippingAddressObj = {};
|
|
286
|
+
shippingAddressObj.id = shipment.shipping_address && shipment.shipping_address.id ? shipment.shipping_address.id : '';
|
|
287
|
+
shippingAddressObj.countryCode = shipment.shipping_address && shipment.shipping_address.country_code ? shipment.shipping_address.country_code : '';
|
|
288
|
+
shippingAddressObj.address1 = shipment.shipping_address && shipment.shipping_address.address1 ? shipment.shipping_address.address1 : '';
|
|
289
|
+
shippingAddressObj.city = shipment.shipping_address && shipment.shipping_address.city ? shipment.shipping_address.city : '';
|
|
290
|
+
shippingAddressObj.country = '';
|
|
291
|
+
shippingAddressObj.postCode = shipment.shipping_address && shipment.shipping_address.postal_code ? shipment.shipping_address.postal_code : '';
|
|
292
|
+
shippingAddress.push(shippingAddressObj);
|
|
293
|
+
});
|
|
294
|
+
customerObj.shippingAddress = shippingAddress;
|
|
295
|
+
let billingAddress = [];
|
|
296
|
+
let billingAddressObj = {};
|
|
297
|
+
billingAddressObj.id = this.orderDetails.billing_address && this.orderDetails.billing_address.id ? this.orderDetails.billing_address.id : '';
|
|
298
|
+
billingAddressObj.countryCode = this.orderDetails.billing_address && this.orderDetails.billing_address.country_code ? this.orderDetails.billing_address.country_code : '';
|
|
299
|
+
billingAddressObj.address1 = this.orderDetails.billing_address && this.orderDetails.billing_address.address1 ? this.orderDetails.billing_address.address1 : '';
|
|
300
|
+
billingAddressObj.city = this.orderDetails.billing_address && this.orderDetails.billing_address.city ? this.orderDetails.billing_address.city : '';
|
|
301
|
+
billingAddressObj.country = '';
|
|
302
|
+
billingAddressObj.postCode = '';
|
|
303
|
+
billingAddress.push(billingAddressObj);
|
|
304
|
+
customerObj.billingAddress = billingAddress;
|
|
305
|
+
let shipmentDetails = [];
|
|
306
|
+
this.orderDetails.shipments.forEach(shipment => {
|
|
307
|
+
let shipmentDetailsObj = {};
|
|
308
|
+
shipmentDetailsObj.id = shipment.shipment_id ? shipment.shipment_id : '';
|
|
309
|
+
shipmentDetailsObj.deliveryGroup = shipment.shipment_id ? shipment.shipment_id : '';
|
|
310
|
+
shipmentDetails.push(shipmentDetailsObj);
|
|
311
|
+
});
|
|
312
|
+
customerObj.shipmentDetails = shipmentDetails;
|
|
313
|
+
this.webReturnObject.customer = customerObj;
|
|
314
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: customer mapping ended...");
|
|
315
|
+
return this;
|
|
316
|
+
}
|
|
317
|
+
isInStoreOrder() {
|
|
318
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: isInStoreOrder mapping started...");
|
|
319
|
+
if (this.orderDetails.c_isInStoreOrder) {
|
|
320
|
+
this.webReturnObject.isInStoreOrder = true;
|
|
321
|
+
}
|
|
322
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: isInStoreOrder mapping ended...");
|
|
323
|
+
return this;
|
|
324
|
+
}
|
|
325
|
+
externalTransactionDetails() {
|
|
326
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: externalTransactionDetails mapping started...");
|
|
327
|
+
let externalTransactionDetails = [];
|
|
328
|
+
if (this.orderDetails.shipments && this.orderDetails.shipments.length > 0) {
|
|
329
|
+
this.orderDetails.shipments.forEach(shipment => {
|
|
330
|
+
let externalTransactionDetailsObj = {};
|
|
331
|
+
let transactionInfo = {};
|
|
332
|
+
externalTransactionDetailsObj.uniqueId = this.orderDetails.order_no ? this.orderDetails.order_no : '';
|
|
333
|
+
externalTransactionDetailsObj.providerType = PROVIDERS.SALESFORCE;
|
|
334
|
+
transactionInfo.shippingId = shipment.shipping_method && shipment.shipping_method.id ? shipment.shipping_method.id : '';
|
|
335
|
+
transactionInfo.externalShippingId = shipment.shipment_id ? shipment.shipment_id : '';
|
|
336
|
+
externalTransactionDetailsObj.details = transactionInfo;
|
|
337
|
+
externalTransactionDetails.push(externalTransactionDetailsObj);
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
this.webReturnObject.externalTransactionDetails = externalTransactionDetails;
|
|
341
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: externalTransactionDetails mapping ended...");
|
|
342
|
+
return this;
|
|
343
|
+
}
|
|
344
|
+
basketSummary() {
|
|
345
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: basketSummary mapping started...");
|
|
346
|
+
let basketSummary = {};
|
|
347
|
+
let basketSummaryWebOrder = {};
|
|
348
|
+
const linePromotionTotal = this.webReturnObject.basket.linePromotion.map(linePromotion => linePromotion.promotionAmount).reduce((accumulator, currentValue) => accumulator + currentValue, 0);
|
|
349
|
+
const transactionPromotionTotal = this.webReturnObject.basket.transactionPromotion.map(transactionPromotion => transactionPromotion.promotionAmount).reduce((accumulator, currentValue) => accumulator + currentValue, 0);
|
|
350
|
+
basketSummary.discountTotal = linePromotionTotal + transactionPromotionTotal;
|
|
351
|
+
basketSummary.VATTotal = this.orderDetails.tax_total ? this.orderDetails.tax_total : 0;
|
|
352
|
+
basketSummary.saleTotal = this.orderDetails.order_total ? this.orderDetails.order_total : 0;
|
|
353
|
+
basketSummary.basketTotal = this.orderDetails.order_total ? this.orderDetails.order_total : 0;
|
|
354
|
+
basketSummary.totalItems = this.orderDetails.product_items && this.orderDetails.product_items.length > 0 ? this.orderDetails.product_items.length : 0;
|
|
355
|
+
basketSummary.shippingTotal = this.orderDetails.shipping_total ? this.orderDetails.shipping_total : 0;
|
|
356
|
+
basketSummary.basketTotalWithShippingTotal = this.orderDetails.order_total ? this.orderDetails.order_total : 0;
|
|
357
|
+
basketSummaryWebOrder.shippingTotal = this.orderDetails.shipping_total ? this.orderDetails.shipping_total : 0;
|
|
358
|
+
basketSummaryWebOrder.basketTotalWithShippingTotal = this.orderDetails.order_total ? this.orderDetails.order_total : 0;
|
|
359
|
+
basketSummary.webOrder = basketSummaryWebOrder;
|
|
360
|
+
this.webReturnObject.basketSummary = basketSummary;
|
|
361
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: basketSummary mapping ended...");
|
|
362
|
+
return this;
|
|
363
|
+
}
|
|
364
|
+
deviceId(deviceId) {
|
|
365
|
+
this.webReturnObject.deviceId = deviceId;
|
|
366
|
+
return this;
|
|
367
|
+
}
|
|
368
|
+
terminalId(terminalId) {
|
|
369
|
+
this.webReturnObject.terminalId = terminalId;
|
|
370
|
+
return this;
|
|
371
|
+
}
|
|
372
|
+
orgCode(orgCode) {
|
|
373
|
+
this.webReturnObject.orgCode = orgCode;
|
|
374
|
+
return this;
|
|
375
|
+
}
|
|
376
|
+
storeId(storeId) {
|
|
377
|
+
this.webReturnObject.storeId = storeId;
|
|
378
|
+
return this;
|
|
379
|
+
}
|
|
380
|
+
storeNodeId(storeNodeId) {
|
|
381
|
+
this.webReturnObject.storeNodeId = storeNodeId;
|
|
382
|
+
return this;
|
|
383
|
+
}
|
|
384
|
+
storeNodeStructure(storeNodeStructure) {
|
|
385
|
+
this.webReturnObject.storeNodeStructure = storeNodeStructure;
|
|
386
|
+
return this;
|
|
387
|
+
}
|
|
388
|
+
docId(docId) {
|
|
389
|
+
this.webReturnObject.id = docId;
|
|
390
|
+
return this;
|
|
391
|
+
}
|
|
392
|
+
updateUserID(userID) {
|
|
393
|
+
this.webReturnObject.userId = userID;
|
|
394
|
+
return this;
|
|
395
|
+
}
|
|
396
|
+
updateUserName(name) {
|
|
397
|
+
this.webReturnObject.userName = name;
|
|
398
|
+
return this;
|
|
399
|
+
}
|
|
400
|
+
build() {
|
|
401
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: mapping done...");
|
|
402
|
+
return this.webReturnObject;
|
|
403
|
+
}
|
|
404
|
+
getUTCDateTime(date) {
|
|
405
|
+
if (date) {
|
|
406
|
+
return new Date(date).toISOString();
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hcHBlci1saWJyYXJ5L3NyYy9saWIvV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFGLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQWdDLFNBQVMsRUFBbUIsZ0JBQWdCLEVBQWtJLE1BQU0sd0JBQXdCLENBQUM7QUFDN1ksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsTUFBTSxPQUFPLHFDQUFxQztJQWlDOUMsWUFBWSxZQUEwQixFQUMxQixZQUEyQjtRQUEzQixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQS9CL0Isb0JBQWUsR0FBd0I7WUFDM0MsRUFBRSxFQUFFLEVBQUU7WUFDTixPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsV0FBVyxFQUFFLEVBQUU7WUFDZixrQkFBa0IsRUFBRSxFQUFFO1lBQ3RCLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLEVBQUU7WUFDZCxnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsY0FBYyxFQUFFLEtBQUs7WUFDckIsTUFBTSxFQUFFLEVBQUU7WUFDVixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsRUFBRTtZQUNoQixRQUFRLEVBQUU7Z0JBQ04sRUFBRSxFQUFFLEVBQUU7Z0JBQ04sS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLGVBQWUsRUFBRSxFQUFFO2dCQUNuQixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsUUFB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QUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsd0VBQXdFLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFJO1FBQ2YsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEMsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnJlbmN5UGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEFkZHJlc3MsIEJhc2tldFN1bW1hcnksIEJhc2tldFN1bW1hcnlEZXRhaWxzLCBDdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLCBDdXN0b21lciwgREVMSVZFUllfTUVUSE9EUywgUFJPTU9USU9OX0xFVkVMLCBQUk9NT1RJT05fVFlQRSwgSU5JVElBVElOR19NT0RVTEUsIExpbmVQcm9tb3Rpb25zLCBPcmRlckRldGFpbHMsIFBST1ZJREVSUywgU2hpcG1lbnREZXRhaWxzLCBUUkFOU0FDVElPTl9UWVBFLCBUcmFuc2FjdGlvbkRvY3VtZW50LCBUcmFuc2FjdGlvbkluZm8sIFRyYW5zYWN0aW9uUHJvbW90aW9uLCBUcmlnZ2VyLCBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlscywgVFByb2R1Y3QsIFJlZnVuZFByb2R1Y3RDaGFuZ2UgfSBmcm9tIFwiLi9tYXBwZXItbGlicmFyeS5tb2RlbFwiO1xuaW1wb3J0IHsgTnVtYmVyVXRpbFNlcnZpY2UgfSBmcm9tIFwiLi9udW1iZXItdXRpbC5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzIHtcblxuICAgIHByaXZhdGUgb3JkZXJEZXRhaWxzOiBPcmRlckRldGFpbHM7XG4gICAgcHJpdmF0ZSB3ZWJSZXR1cm5PYmplY3Q6IFRyYW5zYWN0aW9uRG9jdW1lbnQgPSB7XG4gICAgICAgIGlkOiAnJyxcbiAgICAgICAgb3JnQ29kZTogXCJcIixcbiAgICAgICAgc3RvcmVJZDogXCJcIixcbiAgICAgICAgc3RvcmVOb2RlSWQ6IFwiXCIsXG4gICAgICAgIHN0b3JlTm9kZVN0cnVjdHVyZTogXCJcIixcbiAgICAgICAgZGV2aWNlSWQ6IFwiXCIsXG4gICAgICAgIHRlcm1pbmFsSWQ6IFwiXCIsXG4gICAgICAgIGluaXRpYXRpbmdNb2R1bGU6IFwiXCIsXG4gICAgICAgIGV4cG9ydDogZmFsc2UsXG4gICAgICAgIGlzSW5TdG9yZU9yZGVyOiBmYWxzZSxcbiAgICAgICAgYmFza2V0OiB7fSxcbiAgICAgICAgYmFza2V0U3VtbWFyeToge30sXG4gICAgICAgIGJhc2VDdXJyZW5jeTogXCJcIixcbiAgICAgICAgY3VzdG9tZXI6IHtcbiAgICAgICAgICAgIGlkOiAnJyxcbiAgICAgICAgICAgIGVtYWlsOiAnJyxcbiAgICAgICAgICAgIGZpcnN0TmFtZTogJycsXG4gICAgICAgICAgICBsYXN0TmFtZTogJycsXG4gICAgICAgICAgICBiaWxsaW5nQWRkcmVzczogW10sXG4gICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3M6IFtdLFxuICAgICAgICAgICAgc2hpcG1lbnREZXRhaWxzOiBbXSxcbiAgICAgICAgICAgIHRlbGVwaG9uZTogJycsXG4gICAgICAgICAgICBwb3N0Q29kZTogJycsXG4gICAgICAgICAgICBub0N1c3RvbWVyU2VsZWN0ZWQ6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHM6IHt9IGFzIEN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHNcbiAgICB9XG4gICAgbnVtYmVyVXRpbFNlcnZpY2U6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKG9yZGVyRGV0YWlsczogT3JkZXJEZXRhaWxzLFxuICAgICAgICBwcml2YXRlIGN1cnJlbmN5UGlwZT86IEN1cnJlbmN5UGlwZVxuICAgICAgICApIHtcbiAgICAgICAgaWYgKG9yZGVyRGV0YWlscykge1xuICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMgPSBvcmRlckRldGFpbHM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5udW1iZXJVdGlsU2VydmljZSA9IG5ldyBOdW1iZXJVdGlsU2VydmljZShjdXJyZW5jeVBpcGUpO1xuICAgIH1cblxuICAgIHdlYlJldHVybkNvbW1vbk1hcHBlcigpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogd2ViUmV0dXJuQ29tbW9uTWFwcGVyIHN0YXJ0ZWQuLi5cIik7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0Wyd0eXBlJ10gPSBUUkFOU0FDVElPTl9UWVBFLldFQl9SRVRVUk5TO1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsnZGF0ZXRpbWUnXSA9IHRoaXMuZ2V0VVRDRGF0ZVRpbWUodGhpcy5vcmRlckRldGFpbHMubGFzdF9tb2RpZmllZCk7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2VDdXJyZW5jeSA9IHRoaXMub3JkZXJEZXRhaWxzLmN1cnJlbmN5O1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5zdWJzaWRpYXJ5SWQgPSAnMSc7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmV4cG9ydCA9IHRydWU7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmluaXRpYXRpbmdNb2R1bGUgPSBJTklUSUFUSU5HX01PRFVMRS5FQkFTS0VUO1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5jcmVhdGVkQXQgPSB0aGlzLmdldFVUQ0RhdGVUaW1lKHRoaXMub3JkZXJEZXRhaWxzLmNyZWF0aW9uX2RhdGUpO1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC51cGRhdGVkQXQgPSB0aGlzLmdldFVUQ0RhdGVUaW1lKHRoaXMub3JkZXJEZXRhaWxzLmxhc3RfbW9kaWZpZWQpO1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC50cmFuc0NvbXBsZXRlZEF0ID0gdGhpcy5nZXRVVENEYXRlVGltZSh0aGlzLm9yZGVyRGV0YWlscy5sYXN0X21vZGlmaWVkKTtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3RbJ2V4dGVybmFsVHJhbnNhY3Rpb25JZCddID0gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfbm87XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IHdlYlJldHVybkNvbW1vbk1hcHBlciBlbmRlZC4uLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gZXhwb3J0KHN0YXR1cywgZGV0YWlscykge1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBleHBvcnQgbWFwcGluZyBzdGFydGVkLi4uXCIpO1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBzdGF0dXM6XCIsIHN0YXR1cyk7XG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGRldGFpbHM6XCIsIEpTT04uc3RyaW5naWZ5KGRldGFpbHMpKTtcbiAgICAvLyAgICAgaWYgKHN0YXR1cyAmJiBkZXRhaWxzICYmIGRldGFpbHMucHJvdmlkZXJzICYmIGRldGFpbHMucHJvdmlkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgICAgICAgIGRldGFpbHMucHJvdmlkZXJzLmZvckVhY2goXG4gICAgLy8gICAgICAgICAgICAgcHJvdmlkZXJPYmogPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXJPYmoucHJvdmlkZXIgJiYgcHJvdmlkZXJPYmoucHJvdmlkZXIgPT09IFBST1ZJREVSUy5TQUxFU0ZPUkNFKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5leHBvcnQgPSB0cnVlO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuZXhwb3J0ID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICApO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuZXhwb3J0ID0gZmFsc2U7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogZXhwb3J0IG1hcHBpbmcgZW5kLi4uXCIpXG4gICAgLy8gICAgIHJldHVybiB0aGlzO1xuICAgIC8vIH1cblxuICAgIGdldERlbGl2ZXJ5TWV0aG9kKCkge1xuICAgICAgICBpZih0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMgJiYgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNoaXBUb1N0b3JlU2hpcG1lbnQgPSB0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMuZmluZChzaGlwbWVudCA9PiBzaGlwbWVudC5jX2Zyb21TdG9yZUlkKTtcbiAgICAgICAgICAgIGlmKHNoaXBUb1N0b3JlU2hpcG1lbnQpIHJldHVybiBERUxJVkVSWV9NRVRIT0RTLlNISVBfVE9fU1RPUkU7XG4gICAgICAgICAgICBlbHNlIHJldHVybiBERUxJVkVSWV9NRVRIT0RTLkRFTElWRVJZO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvZHVjdCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogcHJvZHVjdCBtYXBwaW5nIHN0YXJ0ZWQuLi5cIik7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldFsncHJvZHVjdHMnXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcyAmJiB0aGlzLm9yZGVyRGV0YWlscy5wcm9kdWN0X2l0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAocHJvZHVjdCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdE9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9kdWN0Lml0ZW1fdGV4dCA/IHByb2R1Y3QuaXRlbV90ZXh0IDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBTS1U6IHByb2R1Y3QucHJvZHVjdF9pZCA/IHByb2R1Y3QucHJvZHVjdF9pZCA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IHByb2R1Y3QucXVhbnRpdHkgPyBwcm9kdWN0LnF1YW50aXR5IDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnVuZGVkUXVhbnRpdHk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogcHJvZHVjdC5iYXNlX3ByaWNlID8gcHJvZHVjdC5iYXNlX3ByaWNlIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1MaW5lSWQ6IChpbmRleCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeU1ldGhvZDogdGhpcy5nZXREZWxpdmVyeU1ldGhvZCgpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbExpbmVQcmljZTogcHJvZHVjdC5wcmljZSA/IHByb2R1Y3QucHJpY2UgOiAwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y3QgJiYgcHJvZHVjdC5wcmljZSAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXRbJ3Byb2R1Y3RzJ10ucHVzaChwcm9kdWN0T2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogcHJvZHVjdCBtYXBwaW5nIGVuZGVkLi4uXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBsaW5lUHJvbW90aW9uKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBsaW5lUHJvbW90aW9uIG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0LmxpbmVQcm9tb3Rpb24gPSBbXSBhcyBMaW5lUHJvbW90aW9uc1tdO1xuICAgICAgICBsZXQgbGluZVByb21vdGlvbkFycmF5ID0gW10gYXMgTGluZVByb21vdGlvbnNbXTtcbiAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMgJiYgdGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm9yZGVyRGV0YWlscy5wcm9kdWN0X2l0ZW1zLmZvckVhY2goXG4gICAgICAgICAgICAgICAgKHByb2R1Y3QsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3QuaXRlbV9pZCA9IChpbmRleCArIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0LnByaWNlX2FkanVzdG1lbnRzICYmIHByb2R1Y3QucHJpY2VfYWRqdXN0bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdC5wcmljZV9hZGp1c3RtZW50cy5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9tb3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9tb3Rpb24uY291cG9uX2NvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lUHJvbW90aW9uT2JqID0ge30gYXMgTGluZVByb21vdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHJpZ2dlciA9IHt9IGFzIFRyaWdnZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLml0ZW1MaW5lSWQgPSBwcm9kdWN0Lml0ZW1faWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLnF1YW50aXR5ID0gcHJvZHVjdC5xdWFudGl0eSA/IHByb2R1Y3QucXVhbnRpdHkgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbk9iai50cmlnZ2VyID0gW10gYXMgVHJpZ2dlcltdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbk9iai50cmlnZ2VyLnB1c2godHJpZ2dlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmouaXRlbUxpbmVJZCA9IGluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmoucHJvbW90aW9uSWQgPSBwcm9tb3Rpb24ucHJvbW90aW9uX2lkID8gcHJvbW90aW9uLnByb21vdGlvbl9pZCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbk9iai5kaXNwbGF5VGV4dCA9IHByb21vdGlvbi5pdGVtX3RleHQgPyBwcm9tb3Rpb24uaXRlbV90ZXh0IDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvblR5cGUgPSBwcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudCAmJiBwcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudC50eXBlID8gcHJvbW90aW9uLmFwcGxpZWRfZGlzY291bnQudHlwZSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbk9iai5wcm9tb3Rpb25BbW91bnQgPSBwcm9tb3Rpb24ucHJpY2UgPyBNYXRoLmFicyhwcm9tb3Rpb24ucHJpY2UpIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmoubmFtZSA9IHByb21vdGlvbi5jb3Vwb25fY29kZSAgPyBwcm9tb3Rpb24uY291cG9uX2NvZGUgOiAocHJvbW90aW9uLml0ZW1fdGV4dCA/IHByb21vdGlvbi5pdGVtX3RleHQgOicnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmoucHJvbW90aW9uSW5mbyA9IHByb21vdGlvbi5pdGVtX3RleHQgPyBwcm9tb3Rpb24uaXRlbV90ZXh0IDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvbkxpbmVQcmljZSA9IHByb2R1Y3QucHJpY2UgLSBNYXRoLmFicyhwcm9tb3Rpb24ucHJpY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbkFycmF5LnB1c2gobGluZVByb21vdGlvbk9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQubGluZVByb21vdGlvbiA9IGxpbmVQcm9tb3Rpb25BcnJheTtcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogbGluZVByb21vdGlvbiBtYXBwaW5nIGVuZGVkLi4uXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0cmFuc2FjdGlvblByb21vdGlvbigpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogdHJhbnNhY3Rpb25Qcm9tb3Rpb24gbWFwcGluZyBzdGFydGVkLi4uXCIpO1xuXG4gICAgICAgIGxldCB0cmFuc2FjdGlvblByb21vdGlvbkFycmF5ID0gdGhpcy5nZXRUcmFuc2FjdGlvblByb21vdGlvbnModGhpcy5vcmRlckRldGFpbHMpO1xuXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiA9IHRyYW5zYWN0aW9uUHJvbW90aW9uQXJyYXk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IHRyYW5zYWN0aW9uUHJvbW90aW9uIG1hcHBpbmcgZW5kZWQuLi5cIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldFRyYW5zYWN0aW9uUHJvbW90aW9ucyhiYXNrZXQpOiBUcmFuc2FjdGlvblByb21vdGlvbltdIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvblByb21vdGlvbkFycmF5ID0gW10gYXMgVHJhbnNhY3Rpb25Qcm9tb3Rpb25bXTtcbiAgICAgICAgICAgIGlmIChiYXNrZXQub3JkZXJfcHJpY2VfYWRqdXN0bWVudHMgJiYgYmFza2V0Lm9yZGVyX3ByaWNlX2FkanVzdG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBiYXNrZXQub3JkZXJfcHJpY2VfYWRqdXN0bWVudHMuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgKHRyYW5zYWN0aW9uUHJvbW90aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmogPSB7fSBhcyBUcmFuc2FjdGlvblByb21vdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmouZGlzcGxheVRleHQgPSB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtX3RleHQgPyB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLm5hbWUgPSB0cmFuc2FjdGlvblByb21vdGlvbi5jb3Vwb25fY29kZSA/IHRyYW5zYWN0aW9uUHJvbW90aW9uLmNvdXBvbl9jb2RlIDogKHRyYW5zYWN0aW9uUHJvbW90aW9uIC5pdGVtX3RleHQ/dHJhbnNhY3Rpb25Qcm9tb3Rpb24uaXRlbV90ZXh0IDogJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmoucHJvbW90aW9uQW1vdW50ID0gdHJhbnNhY3Rpb25Qcm9tb3Rpb24ucHJpY2UgPyBNYXRoLmFicyh0cmFuc2FjdGlvblByb21vdGlvbi5wcmljZSkgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmoucHJvbW90aW9uSWQgPSB0cmFuc2FjdGlvblByb21vdGlvbi5wcm9tb3Rpb25faWQgPyB0cmFuc2FjdGlvblByb21vdGlvbi5wcm9tb3Rpb25faWQgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLnByb21vdGlvbkluZm8gPSB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtX3RleHQgPyB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLnByb21vdGlvblR5cGUgPSB0cmFuc2FjdGlvblByb21vdGlvbi5hcHBsaWVkX2Rpc2NvdW50ICYmIHRyYW5zYWN0aW9uUHJvbW90aW9uLmFwcGxpZWRfZGlzY291bnQudHlwZSA/IHRyYW5zYWN0aW9uUHJvbW90aW9uLmFwcGxpZWRfZGlzY291bnQudHlwZSA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmouaXRlbUxpbmVJZHMgPSB0aGlzLm9yZGVyRGV0YWlscy5wcm9kdWN0X2l0ZW1zLm1hcCgocHJvZHVjdCwgaW5kZXgpID0+IGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNhY3Rpb25Qcm9tb3Rpb24uY291cG9uX2NvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai50eXBlID0gUFJPTU9USU9OX1RZUEUuQ09VUE9OO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLmNvdXBvbkNvZGUgPSB0cmFuc2FjdGlvblByb21vdGlvbi5jb3Vwb25fY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai5zdWJMZXZlbFR5cGUgPSBQUk9NT1RJT05fTEVWRUwuVFJBTlNBQ1RJT047XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbkFycmF5LnB1c2godHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmopO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBnZXRUcmFuc2FjdGlvblByb21vdGlvbnMgOiBcIiwgSlNPTi5zdHJpbmdpZnkodHJhbnNhY3Rpb25Qcm9tb3Rpb25BcnJheSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uUHJvbW90aW9uQXJyYXk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiAgZmFpbGVkOlwiLCBlcnJvcik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiAgZmFpbGVkOlwiLCBKU09OLnN0cmluZ2lmeShlcnJvcikpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUxpbmVQcm9tb3Rpb25XaXRoQ291cG9uKCkge1xuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICBsZXQgdHJhbnNhY3Rpb25Qcm9tb3Rpb24gPSB7fSBhcyBUcmFuc2FjdGlvblByb21vdGlvbjtcbiAgICAgICAgICAgIGxldCB0cmlnZ2VyUHJvbW90aW9uID0gW10gYXMgVHJpZ2dlcltdO1xuICAgICAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMgJiYgdGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcy5mb3JFYWNoKFxuICAgICAgICAgICAgICAgICAgICAocHJvZHVjdCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QuaXRlbV9pZCA9IChpbmRleCArIDEpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0LnByaWNlX2FkanVzdG1lbnRzICYmIHByb2R1Y3QucHJpY2VfYWRqdXN0bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QucHJpY2VfYWRqdXN0bWVudHMuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb21vdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb21vdGlvbi5jb3Vwb25fY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0cmlnZ2VyID0ge30gYXMgVHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLml0ZW1MaW5lSWQgPSBwcm9kdWN0Lml0ZW1faWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHkgPyBwcm9kdWN0LnF1YW50aXR5IDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLnRvdGFsUXVhbnRpdHkgPSBwcm9kdWN0LnF1YW50aXR5ID8gcHJvZHVjdC5xdWFudGl0eSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5wcm9tb3Rpb25BbW91bnQgPSBwcm9tb3Rpb24ucHJpY2UgPyBNYXRoLmFicyhwcm9tb3Rpb24ucHJpY2UpIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLnJlZnVuZGVkUmVhc29uID0gcHJvbW90aW9uLmNvdXBvbl9jb2RlID8gcHJvbW90aW9uLmNvdXBvbl9jb2RlIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5yZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uID0gcHJvbW90aW9uLml0ZW1fdGV4dCA/IHByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLnByb21vdGlvbklkID0gcHJvbW90aW9uLnByb21vdGlvbl9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyUHJvbW90aW9uLnB1c2godHJpZ2dlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRyaWdnZXJQcm9tb3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uLmRpc3BsYXlUZXh0ID0gdHJpZ2dlclByb21vdGlvblswXS5yZWZ1bmRlZFJlYXNvbkRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uLm5hbWUgPSB0cmlnZ2VyUHJvbW90aW9uWzBdLnJlZnVuZGVkUmVhc29uO1xuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uLnByb21vdGlvbkFtb3VudCA9IC0odHJpZ2dlclByb21vdGlvbi5yZWR1Y2UoKG4sIHsgcHJvbW90aW9uQW1vdW50IH0pID0+IG4gKyBwcm9tb3Rpb25BbW91bnQsIDApKTtcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbi5wcm9tb3Rpb25JZCA9IHRyaWdnZXJQcm9tb3Rpb25bMF0ucHJvbW90aW9uSWQ7XG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb24ucHJvbW90aW9uSW5mbyA9IHRyaWdnZXJQcm9tb3Rpb25bMF0ucmVmdW5kZWRSZWFzb25EZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbi5jb3Vwb25Db2RlID0gdHJpZ2dlclByb21vdGlvblswXS5yZWZ1bmRlZFJlYXNvbjtcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtTGluZUlkcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uLnR5cGUgPSBQUk9NT1RJT05fVFlQRS5DT1VQT047XG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb24uc3ViTGV2ZWxUeXBlID0gUFJPTU9USU9OX0xFVkVMLkxJTkU7XG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb24udHJpZ2dlciA9IHRyaWdnZXJQcm9tb3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImxpbmVQcm9tb3Rpb24gbWFwcGluZyBlbmRlZC4uLlwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZS1iYXNrZXQ6IHVwZGF0ZUxpbmVQcm9tb3Rpb25XaXRoQ291cG9uXCIsIEpTT04uc3RyaW5naWZ5KHRyYW5zYWN0aW9uUHJvbW90aW9uKSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0LnRyYW5zYWN0aW9uUHJvbW90aW9uICkge1xuICAgICAgICAgICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHJhbnNhY3Rpb25Qcm9tb3Rpb24gJiYgdHJhbnNhY3Rpb25Qcm9tb3Rpb24ucHJvbW90aW9uSWQgKSB7XG4gICAgICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24ucHVzaCh0cmFuc2FjdGlvblByb21vdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFYmFza2V0OiBTYWxlc2ZvcmNlOiBsaW5lUHJvbW90aW9uIG1hcHBpbmc9PiBmYWlsZWQ6XCIsIGVycm9yKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRWJhc2tldDogU2FsZXNmb3JjZTogbGluZVByb21vdGlvbiBtYXBwaW5nPT4gZmFpbGVkOlwiLCBKU09OLnN0cmluZ2lmeShlcnJvcikpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zYWN0aW9uUHJvbW90aW9uUHJ0aW9uQ2FsYygpIHtcbiAgICAgICAgaWYgKHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiAmJiB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24ubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24uZm9yRWFjaCh0ciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uUHJvbW90aW9uUHJvZHVjdFBvcnRpb25DYWxjKHRoaXMud2ViUmV0dXJuT2JqZWN0ICwgdHIpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uUHJvZHVjdFBvcnRpb25DYWxjKFxuICAgICAgICB0eERvYzogVHJhbnNhY3Rpb25Eb2N1bWVudCxcbiAgICAgICAgcHJvbW90aW9uOiBUcmFuc2FjdGlvblByb21vdGlvblxuICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBlYmFza2V0OiB0cmFuc2FjdGlvblByb21vdGlvblByb2R1Y3RQb3J0aW9uQ2FsYzogdHJuc2FjdGlvblByb21vdGlvbjogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBwcm9tb3Rpb25cbiAgICAgICAgICAgICl9YFxuICAgICAgICApO1xuICAgICAgICBpZiAocHJvbW90aW9uLnR5cGUgPT09IFBST01PVElPTl9UWVBFLkNPVVBPTiAmJiBwcm9tb3Rpb24uc3ViTGV2ZWxUeXBlID09PSBQUk9NT1RJT05fTEVWRUwuTElORSkge1xuICAgICAgICAgICAgdHhEb2MuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3QpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9kdWN0ID0gdGhpcy52YWxpZGF0ZVByb2R1Y3RJdGVtRGlzY291bnQocHJvZHVjdCk7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvbW90aW9uLnRyaWdnZXIgJiYgcHJvbW90aW9uLnRyaWdnZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb24udHJpZ2dlci5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5pdGVtTGluZUlkID09PSBwcm9kdWN0Lml0ZW1MaW5lSWQudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QuaXRlbURpc2NvdW50cy50cm5Qcm9tb3Rpb25zUG9ydGlvbiArPSB0LnByb21vdGlvbkFtb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0eERvYy5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHByb2R1Y3QgPSB0aGlzLnZhbGlkYXRlUHJvZHVjdEl0ZW1EaXNjb3VudChwcm9kdWN0KTtcbiAgICAgICAgICAgICAgICBpZiAocHJvbW90aW9uLml0ZW1MaW5lSWRzLmluY2x1ZGVzKCtwcm9kdWN0Lml0ZW1MaW5lSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RJdGVtID0gdGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcy5maW5kKHByb2R1Y3RJdGVtID0+IHByb2R1Y3RJdGVtLnByb2R1Y3RfaWQgPT09IHByb2R1Y3QuU0tVKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25Qcm9tb3Rpb25Qb3J0aW9uID0gKHByb2R1Y3RJdGVtICYmIHByb2R1Y3RJdGVtLnByaWNlX2FmdGVyX2l0ZW1fZGlzY291bnQgJiYgcHJvZHVjdEl0ZW0ucHJpY2VfYWZ0ZXJfb3JkZXJfZGlzY291bnQpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIChwcm9kdWN0SXRlbS5wcmljZV9hZnRlcl9pdGVtX2Rpc2NvdW50IC0gcHJvZHVjdEl0ZW0ucHJpY2VfYWZ0ZXJfb3JkZXJfZGlzY291bnQpIDogMDtcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdC5pdGVtRGlzY291bnRzLnRyblByb21vdGlvbnNQb3J0aW9uICs9IHRoaXMubnVtYmVyVXRpbFNlcnZpY2UudHJpbVRvMkRlY2ltYWwyKHRyYW5zYWN0aW9uUHJvbW90aW9uUG9ydGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR4RG9jO1xuICAgIH1cblxuICAgICAgXG4gICAgICBwdWJsaWMgdmFsaWRhdGVQcm9kdWN0SXRlbURpc2NvdW50KHByb2R1Y3Q6IFRQcm9kdWN0KSB7XG4gICAgICAgIGlmICghcHJvZHVjdC5pdGVtRGlzY291bnRzKSB7XG4gICAgICAgICAgcHJvZHVjdC5pdGVtRGlzY291bnRzID0ge1xuICAgICAgICAgICAgdHJuRGlzY291bnRzUG9ydGlvbjogMCxcbiAgICAgICAgICAgIHRyblByb21vdGlvbnNQb3J0aW9uOiAwLFxuICAgICAgICAgICAgcmVmdW5kUG9ydGlvbjogMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9kdWN0O1xuICAgICAgfVxuICAgIFxuICAgICAgXG4gICAgY3VzdG9tZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGN1c3RvbWVyIG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcbiAgICAgICAgbGV0IGN1c3RvbWVyT2JqID0ge30gYXMgQ3VzdG9tZXI7XG4gICAgICAgIGN1c3RvbWVyT2JqLmVtYWlsID0gdGhpcy5vcmRlckRldGFpbHMuY3VzdG9tZXJfaW5mbyAmJiB0aGlzLm9yZGVyRGV0YWlscy5jdXN0b21lcl9pbmZvLmVtYWlsID8gdGhpcy5vcmRlckRldGFpbHMuY3VzdG9tZXJfaW5mby5lbWFpbCA6ICcnO1xuICAgICAgICBjdXN0b21lck9iai5maXJzdE5hbWUgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmZpcnN0X25hbWUgPyB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuZmlyc3RfbmFtZSA6ICcnO1xuICAgICAgICBjdXN0b21lck9iai5sYXN0TmFtZSA9IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcyAmJiB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MubGFzdF9uYW1lID8gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmxhc3RfbmFtZSA6ICcnO1xuXG4gICAgICAgIGxldCBzaGlwcGluZ0FkZHJlc3MgPSBbXSBhcyBBZGRyZXNzW107XG4gICAgICAgIHRoaXMub3JkZXJEZXRhaWxzLnNoaXBtZW50cy5mb3JFYWNoKFxuICAgICAgICAgICAgc2hpcG1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBzaGlwcGluZ0FkZHJlc3NPYmogPSB7fSBhcyBBZGRyZXNzO1xuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5pZCA9IHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MgJiYgc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcy5pZCA/IHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuaWQgOiAnJztcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmouY291bnRyeUNvZGUgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuY291bnRyeV9jb2RlID8gc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGUgOiAnJztcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmouYWRkcmVzczEgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuYWRkcmVzczEgPyBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLmFkZHJlc3MxIDogJyc7XG4gICAgICAgICAgICAgICAgc2hpcHBpbmdBZGRyZXNzT2JqLmNpdHkgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuY2l0eSA/IHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuY2l0eSA6ICcnO1xuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5jb3VudHJ5ID0gJyc7XG4gICAgICAgICAgICAgICAgc2hpcHBpbmdBZGRyZXNzT2JqLnBvc3RDb2RlID0gc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcyAmJiBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLnBvc3RhbF9jb2RlID8gc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcy5wb3N0YWxfY29kZSA6ICcnO1xuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzcy5wdXNoKHNoaXBwaW5nQWRkcmVzc09iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgY3VzdG9tZXJPYmouc2hpcHBpbmdBZGRyZXNzID0gc2hpcHBpbmdBZGRyZXNzO1xuXG4gICAgICAgIGxldCBiaWxsaW5nQWRkcmVzcyA9IFtdIGFzIEFkZHJlc3NbXTtcbiAgICAgICAgbGV0IGJpbGxpbmdBZGRyZXNzT2JqID0ge30gYXMgQWRkcmVzcztcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmouaWQgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmlkID8gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmlkIDogJyc7XG4gICAgICAgIGJpbGxpbmdBZGRyZXNzT2JqLmNvdW50cnlDb2RlID0gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzICYmIHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGUgPyB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuY291bnRyeV9jb2RlIDogJyc7XG4gICAgICAgIGJpbGxpbmdBZGRyZXNzT2JqLmFkZHJlc3MxID0gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzICYmIHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5hZGRyZXNzMSA/IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5hZGRyZXNzMSA6ICcnO1xuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5jaXR5ID0gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzICYmIHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5jaXR5ID8gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmNpdHkgOiAnJztcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmouY291bnRyeSA9ICcnO1xuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5wb3N0Q29kZSA9ICcnO1xuICAgICAgICBiaWxsaW5nQWRkcmVzcy5wdXNoKGJpbGxpbmdBZGRyZXNzT2JqKTtcbiAgICAgICAgY3VzdG9tZXJPYmouYmlsbGluZ0FkZHJlc3MgPSBiaWxsaW5nQWRkcmVzcztcblxuICAgICAgICBsZXQgc2hpcG1lbnREZXRhaWxzID0gW10gYXMgU2hpcG1lbnREZXRhaWxzW107XG4gICAgICAgIHRoaXMub3JkZXJEZXRhaWxzLnNoaXBtZW50cy5mb3JFYWNoKFxuICAgICAgICAgICAgc2hpcG1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBzaGlwbWVudERldGFpbHNPYmogPSB7fSBhcyBTaGlwbWVudERldGFpbHM7XG4gICAgICAgICAgICAgICAgc2hpcG1lbnREZXRhaWxzT2JqLmlkID0gc2hpcG1lbnQuc2hpcG1lbnRfaWQgPyBzaGlwbWVudC5zaGlwbWVudF9pZCA6ICcnO1xuICAgICAgICAgICAgICAgIHNoaXBtZW50RGV0YWlsc09iai5kZWxpdmVyeUdyb3VwID0gc2hpcG1lbnQuc2hpcG1lbnRfaWQgPyBzaGlwbWVudC5zaGlwbWVudF9pZCA6ICcnO1xuICAgICAgICAgICAgICAgIHNoaXBtZW50RGV0YWlscy5wdXNoKHNoaXBtZW50RGV0YWlsc09iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGN1c3RvbWVyT2JqLnNoaXBtZW50RGV0YWlscyA9IHNoaXBtZW50RGV0YWlscztcblxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5jdXN0b21lciA9IGN1c3RvbWVyT2JqO1xuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBjdXN0b21lciBtYXBwaW5nIGVuZGVkLi4uXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpc0luU3RvcmVPcmRlcigpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogaXNJblN0b3JlT3JkZXIgbWFwcGluZyBzdGFydGVkLi4uXCIpO1xuICAgICAgICBpZih0aGlzLm9yZGVyRGV0YWlscy5jX2lzSW5TdG9yZU9yZGVyKSB7XG4gICAgICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5pc0luU3RvcmVPcmRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogaXNJblN0b3JlT3JkZXIgbWFwcGluZyBlbmRlZC4uLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzIG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcbiAgICAgICAgbGV0IGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzID0gW10gYXMgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHNbXTtcbiAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLnNoaXBtZW50cyAmJiB0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmZvckVhY2goXG4gICAgICAgICAgICAgICAgc2hpcG1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHNPYmogPSB7fSBhcyBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlscztcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uSW5mbyA9IHt9IGFzIFRyYW5zYWN0aW9uSW5mbztcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHNPYmoudW5pcXVlSWQgPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl9ubyA/IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX25vIDogJyc7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzT2JqLnByb3ZpZGVyVHlwZSA9IFBST1ZJREVSUy5TQUxFU0ZPUkNFO1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkluZm8uc2hpcHBpbmdJZCA9IHNoaXBtZW50LnNoaXBwaW5nX21ldGhvZCAmJiBzaGlwbWVudC5zaGlwcGluZ19tZXRob2QuaWQgPyBzaGlwbWVudC5zaGlwcGluZ19tZXRob2QuaWQgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25JbmZvLmV4dGVybmFsU2hpcHBpbmdJZCA9IHNoaXBtZW50LnNoaXBtZW50X2lkID8gc2hpcG1lbnQuc2hpcG1lbnRfaWQgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHNPYmouZGV0YWlscyA9IHRyYW5zYWN0aW9uSW5mbztcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMucHVzaChleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc09iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5leHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlscyA9IGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzO1xuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlscyBtYXBwaW5nIGVuZGVkLi4uXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBiYXNrZXRTdW1tYXJ5KCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBiYXNrZXRTdW1tYXJ5IG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcbiAgICAgICAgbGV0IGJhc2tldFN1bW1hcnkgPSB7fSBhcyBCYXNrZXRTdW1tYXJ5O1xuICAgICAgICBsZXQgYmFza2V0U3VtbWFyeVdlYk9yZGVyID0ge30gYXMgQmFza2V0U3VtbWFyeURldGFpbHM7XG4gICAgICAgIGNvbnN0IGxpbmVQcm9tb3Rpb25Ub3RhbCA9IHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC5saW5lUHJvbW90aW9uLm1hcChsaW5lUHJvbW90aW9uID0+IGxpbmVQcm9tb3Rpb24ucHJvbW90aW9uQW1vdW50KS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IGFjY3VtdWxhdG9yICsgY3VycmVudFZhbHVlLCAwKTtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25Qcm9tb3Rpb25Ub3RhbCA9IHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbi5tYXAodHJhbnNhY3Rpb25Qcm9tb3Rpb24gPT4gdHJhbnNhY3Rpb25Qcm9tb3Rpb24ucHJvbW90aW9uQW1vdW50KS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IGFjY3VtdWxhdG9yICsgY3VycmVudFZhbHVlLCAwKTtcbiAgICAgICAgYmFza2V0U3VtbWFyeS5kaXNjb3VudFRvdGFsID0gbGluZVByb21vdGlvblRvdGFsICsgdHJhbnNhY3Rpb25Qcm9tb3Rpb25Ub3RhbDtcbiAgICAgICAgYmFza2V0U3VtbWFyeS5WQVRUb3RhbCA9IHRoaXMub3JkZXJEZXRhaWxzLnRheF90b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLnRheF90b3RhbCA6IDA7XG4gICAgICAgIGJhc2tldFN1bW1hcnkuc2FsZVRvdGFsID0gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfdG90YWwgPyB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA6IDA7XG4gICAgICAgIGJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsIDogMDtcbiAgICAgICAgYmFza2V0U3VtbWFyeS50b3RhbEl0ZW1zID0gdGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcyAmJiB0aGlzLm9yZGVyRGV0YWlscy5wcm9kdWN0X2l0ZW1zLmxlbmd0aCA+IDAgPyB0aGlzLm9yZGVyRGV0YWlscy5wcm9kdWN0X2l0ZW1zLmxlbmd0aCA6IDA7XG4gICAgICAgIGJhc2tldFN1bW1hcnkuc2hpcHBpbmdUb3RhbCA9IHRoaXMub3JkZXJEZXRhaWxzLnNoaXBwaW5nX3RvdGFsID8gdGhpcy5vcmRlckRldGFpbHMuc2hpcHBpbmdfdG90YWwgOiAwO1xuICAgICAgICBiYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsV2l0aFNoaXBwaW5nVG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsIDogMDtcbiAgICAgICAgYmFza2V0U3VtbWFyeVdlYk9yZGVyLnNoaXBwaW5nVG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5zaGlwcGluZ190b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLnNoaXBwaW5nX3RvdGFsIDogMDtcbiAgICAgICAgYmFza2V0U3VtbWFyeVdlYk9yZGVyLmJhc2tldFRvdGFsV2l0aFNoaXBwaW5nVG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsIDogMDtcbiAgICAgICAgYmFza2V0U3VtbWFyeS53ZWJPcmRlciA9IGJhc2tldFN1bW1hcnlXZWJPcmRlcjtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0U3VtbWFyeSA9IGJhc2tldFN1bW1hcnk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGJhc2tldFN1bW1hcnkgbWFwcGluZyBlbmRlZC4uLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZGV2aWNlSWQoZGV2aWNlSWQpIHtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuZGV2aWNlSWQgPSBkZXZpY2VJZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGVybWluYWxJZCh0ZXJtaW5hbElkKSB7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnRlcm1pbmFsSWQgPSB0ZXJtaW5hbElkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvcmdDb2RlKG9yZ0NvZGUpIHtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3Qub3JnQ29kZSA9IG9yZ0NvZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHN0b3JlSWQoc3RvcmVJZCkge1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5zdG9yZUlkID0gc3RvcmVJZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc3RvcmVOb2RlSWQoc3RvcmVOb2RlSWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5zdG9yZU5vZGVJZCA9IHN0b3JlTm9kZUlkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzdG9yZU5vZGVTdHJ1Y3R1cmUoc3RvcmVOb2RlU3RydWN0dXJlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3Quc3RvcmVOb2RlU3RydWN0dXJlID0gc3RvcmVOb2RlU3RydWN0dXJlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBkb2NJZChkb2NJZCkge1xuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5pZCA9IGRvY0lkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB1cGRhdGVVc2VySUQodXNlcklEOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QudXNlcklkID0gdXNlcklEO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB1cGRhdGVVc2VyTmFtZShuYW1lKSB7XG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnVzZXJOYW1lID0gbmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgYnVpbGQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IG1hcHBpbmcgZG9uZS4uLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMud2ViUmV0dXJuT2JqZWN0O1xuICAgIH1cblxuICAgIGdldFVUQ0RhdGVUaW1lKGRhdGUpIHtcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS50b0lTT1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|