ng-easycommerce 0.0.685 → 0.0.686

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +11 -0
  2. package/bundles/ng-easycommerce.umd.js +811 -641
  3. package/bundles/ng-easycommerce.umd.js.map +1 -1
  4. package/bundles/ng-easycommerce.umd.min.js +1 -1
  5. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  6. package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +22 -9
  7. package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +18 -5
  8. package/esm2015/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +11 -6
  9. package/esm2015/lib/ec-component/checkout-ec/shipment-ec-single/shipment-ec-single.component.js +13 -4
  10. package/esm2015/lib/interfaces/shipping-option.js +1 -0
  11. package/esm2015/lib/services/checkout/checkout.service.js +25 -12
  12. package/esm2015/lib/services/checkout/shipment.service.js +36 -8
  13. package/esm2015/lib/utils/order-util.service.js +41 -1
  14. package/esm2015/lib/utils/shipping-price-display.service.js +47 -0
  15. package/esm2015/public-api.js +2 -1
  16. package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +22 -9
  17. package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +18 -5
  18. package/esm5/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +13 -6
  19. package/esm5/lib/ec-component/checkout-ec/shipment-ec-single/shipment-ec-single.component.js +13 -4
  20. package/esm5/lib/interfaces/shipping-option.js +1 -0
  21. package/esm5/lib/services/checkout/checkout.service.js +27 -12
  22. package/esm5/lib/services/checkout/shipment.service.js +40 -10
  23. package/esm5/lib/utils/order-util.service.js +41 -1
  24. package/esm5/lib/utils/shipping-price-display.service.js +51 -0
  25. package/esm5/public-api.js +2 -1
  26. package/fesm2015/ng-easycommerce.js +775 -616
  27. package/fesm2015/ng-easycommerce.js.map +1 -1
  28. package/fesm5/ng-easycommerce.js +811 -642
  29. package/fesm5/ng-easycommerce.js.map +1 -1
  30. package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +5 -1
  31. package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +5 -1
  32. package/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.d.ts +4 -1
  33. package/lib/ec-component/checkout-ec/shipment-ec-single/shipment-ec-single.component.d.ts +4 -0
  34. package/lib/interfaces/shipping-option.d.ts +53 -0
  35. package/lib/services/checkout/shipment.service.d.ts +6 -1
  36. package/lib/utils/order-util.service.d.ts +20 -0
  37. package/lib/utils/shipping-price-display.service.d.ts +16 -0
  38. package/ng-easycommerce.metadata.json +1 -1
  39. package/package.json +1 -1
  40. package/public-api.d.ts +2 -0
@@ -197,13 +197,14 @@ let CheckoutService = class CheckoutService {
197
197
  return ({ ok: true, require_login: false, message: '' });
198
198
  });
199
199
  this.updateAsociatedData = (cart) => {
200
- var _a, _b, _c;
200
+ var _a, _b;
201
201
  let result = this.orderUtils.getSummaryPromotions(cart);
202
202
  const totals = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals;
203
203
  if (!totals) {
204
204
  this.asociatedDataSubject.next(result);
205
205
  return;
206
206
  }
207
+ const shipmentAmount = this.orderUtils.getSummaryShipmentAmount(cart);
207
208
  if (totals.taxes != 0) {
208
209
  let total = Object.assign({}, result[result.length - 1]);
209
210
  result[result.length - 1] = {
@@ -213,16 +214,28 @@ let CheckoutService = class CheckoutService {
213
214
  };
214
215
  result.push(total);
215
216
  }
216
- let shipment = (_b = result) === null || _b === void 0 ? void 0 : _b.find(promotion => promotion.type == "shipment");
217
- if (!shipment && totals.shipping != 0) {
218
- if (((_c = result) === null || _c === void 0 ? void 0 : _c.length) && !result.find(item => item.type === "shipment")) {
219
- let total = Object.assign({}, result[result.length - 1]);
220
- result[result.length - 1] = {
221
- type: 'shipment',
222
- name: 'shipment',
223
- amount: totals.shipping
224
- };
225
- result.push(total);
217
+ if (shipmentAmount !== null && ((_b = result) === null || _b === void 0 ? void 0 : _b.length)) {
218
+ const shipmentIndex = result.findIndex(item => item.type === 'shipment');
219
+ const shipmentItem = {
220
+ type: 'shipment',
221
+ name: 'shipment',
222
+ amount: shipmentAmount
223
+ };
224
+ if (shipmentIndex !== -1) {
225
+ result[shipmentIndex] = shipmentItem;
226
+ }
227
+ else {
228
+ const totalIndex = result.findIndex(item => item.type === 'total');
229
+ if (totalIndex !== -1) {
230
+ result = [
231
+ ...result.slice(0, totalIndex),
232
+ shipmentItem,
233
+ ...result.slice(totalIndex)
234
+ ];
235
+ }
236
+ else {
237
+ result.push(shipmentItem);
238
+ }
226
239
  }
227
240
  }
228
241
  this.asociatedDataSubject.next(result);
@@ -270,4 +283,4 @@ CheckoutService = __decorate([
270
283
  })
271
284
  ], CheckoutService);
272
285
  export { CheckoutService };
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFLbEQsSUFBYSxlQUFlLEdBQTVCLE1BQWEsZUFBZTtJQWlDeEIsWUFBb0IsVUFBNkIsRUFDckMsV0FBd0IsRUFD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QUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUMvRCxHQUFHLENBQUMsRUFBRTtZQUNGLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxjQUFjLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxtREFBbUQsRUFBRTtnQkFDL0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7Z0JBQ3hDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ3RDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNaO1FBQ0wsQ0FBQyxDQUNKLENBQUE7SUFDTCxDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7Q0E2TEosQ0FBQTs7WUFqT21DLGlCQUFpQjtZQUN4QixXQUFXO1lBQ2hCLFNBQVM7WUFDRixZQUFZO1lBQ2YsbUJBQW1CO1lBQ2IsZ0JBQWdCO1lBQ3RCLFdBQVc7WUFDZixNQUFNO1lBQ0EsbUJBQW1CO1lBQ3RCLFNBQVM7OztBQTFDdkIsZUFBZTtJQUgzQixVQUFVLENBQUM7UUFDUixVQUFVLEVBQUUsTUFBTTtLQUNyQixDQUFDO0dBQ1csZUFBZSxDQWtRM0I7U0FsUVksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vY2FydC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvcmUuY29uc3RzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgY29tYmluZUxhdGVzdCwgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTdGVwSSwgU3RlcFR5cGVJIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zdGVwJztcbmltcG9ydCB7IFN0ZXAgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NoZWNrb3V0L3N0ZXAnO1xuaW1wb3J0IHsgQ2hlY2tvdXREYXRhLCBDaGVja291dERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jaGVja291dC1kYXRhJztcbmltcG9ydCB7IE9yZGVyVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy9vcmRlci11dGlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uL2FuYWx5dGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3VzZXInO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4vZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IElwU2VydmljZSB9IGZyb20gJy4uL2lwLWFkZHJlc3Muc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tvdXRTZXJ2aWNlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIGJhc2VBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2hlY2tvdXQvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCk7XG4gICAgZ2V0UGF5bWVudE1ldGhvZHNBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvcGF5bWVudCc7XG4gICAgcHV0QWRkcmVzc0FwaSA9ICgpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9hZGRyZXNzJztcbiAgICBwdXRQYXltZW50QXBpID0gKG1ldGhvZCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3BheW1lbnQvJyArIG1ldGhvZDtcbiAgICBjb21wbGV0ZUFwaSA9ICgpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9jb21wbGV0ZSc7XG4gICAgcGVyc2lzdFNoaXBtZW50QXBpID0gKCkgPT4gJyc7XG4gICAgZ2V0UHJlZmVyZW5jZUFwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9tZXJjYWRvLXBhZ28vJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL3ByZWZlcmVuY2UnO1xuICAgIGdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucyA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jYXJ0cy8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSArICcvaGFzX3B1cmNoYXNlX2NvbmRpdGlvbnMnO1xuXG4gICAgcHJpdmF0ZSBjYW5DaGVja291dFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigpO1xuICAgIHByaXZhdGUgb25SZWFkeVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIHByaXZhdGUgc3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdGVwW10+KG51bGwpO1xuICAgIHByaXZhdGUgcGF5bWVudE1ldGhvZHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICAgIHByaXZhdGUgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIG9yZGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcbiAgICBwcml2YXRlIGFzb2NpYXRlZERhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGVja291dERhdGFbXT4obnVsbCk7XG4gICAgcHJpdmF0ZSBvcmRlcjogYW55O1xuICAgIHByaXZhdGUgY2hlY2tvdXRfZGF0YTogYW55ID0ge307XG4gICAgcHVibGljIHRvdGFsO1xuICAgIHByaXZhdGUgY2FydExvY2FsO1xuICAgIHByaXZhdGUgdXNlcjogVXNlcjtcblxuICAgIHB1YmxpYyBvcmRlciQgPSB0aGlzLm9yZGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgc3RhdGUkID0gdGhpcy5zdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGxvYWRpbmckID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgY2FuQ2hlY2tvdXQkID0gdGhpcy5jYW5DaGVja291dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGFzb2NpYXRlZERhdGEkID0gdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgb25SZWFkeSQgPSB0aGlzLm9uUmVhZHlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBwYXltZW50TWV0aG9kcyQgPSB0aGlzLnBheW1lbnRNZXRob2RzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLFxuICAgICAgICBwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBvcmRlclV0aWxzOiBPcmRlclV0aWxpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGlwU2VydmljZTogSXBTZXJ2aWNlKSB7XG5cbiAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5jYXJ0U2VydmljZS5jYXJ0SXRlbXMsIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZ10pLnN1YnNjcmliZSgoW2l0ZW1zLCBsb2FkaW5nXSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFsb2FkaW5nICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbkNoZWNrb3V0U3ViamVjdC5uZXh0KHRydWUpXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRUb3RhbEFtb3VudCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsID0gcmVzO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2FydC5zdWJzY3JpYmUoY2FydCA9PiBjYXJ0ICYmICh0aGlzLmNhcnRMb2NhbCA9IGNhcnQpICYmIHRoaXMudXBkYXRlQXNvY2lhdGVkRGF0YShjYXJ0KSk7XG4gICAgICAgIHRoaXMub3JkZXIkLnN1YnNjcmliZShvcmRlciA9PiBvcmRlciAmJiB0aGlzLnVwZGF0ZUFzb2NpYXRlZERhdGEob3JkZXIpKVxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJQcm9maWxlKCkuc3Vic2NyaWJlKHVzZXIgPT4gdGhpcy51c2VyID0gdXNlcilcbiAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIuZXJyb3IkLnBpcGUoZmlsdGVyKHJlcyA9PiByZXMgIT0gbnVsbCkpLnN1YnNjcmliZShcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09ICdvdXRfb2Zfc3RvY2snIHx8IHJlcy5jb2RlID09ICdpdGVtc193aXRoX3Byb2R1Y3Rfb3JfcHJvZHVjdF92YXJpYW50X25vdF9lbmFibGVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncmVkaXJlY3QtY2FydCcpXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnL2NhcnQnKVxuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICB9XG5cbiAgICB1cGRhdGVPcmRlciA9IChvcmRlcikgPT4gb3JkZXIgJiYgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XG5cbiAgICBzZXRDaGVja291dE5vdGVzID0gKG5vdGVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja291dF9kYXRhLm5vdGVzID0gbm90ZXMgfHwgJyc7XG4gICAgfVxuXG4gICAgZ2V0Q2hlY2tvdXROb3RlcyA9ICgpID0+IHRoaXMuY2hlY2tvdXRfZGF0YS5ub3RlcyB8fCAnJztcblxuICAgIHNldFBheW1lbnRNZXRob2RzID0gKG1ldGhvZHM6IGFueVtdKSA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudE1ldGhvZHNTdWJqZWN0Lm5leHQobWV0aG9kcyB8fCBbXSk7XG4gICAgfVxuXG4gICAgcHJlZmV0Y2hQYXltZW50TWV0aG9kcyA9IGFzeW5jICgpID0+XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5nZXRQYXltZW50TWV0aG9kc0FwaSgpKS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXRob2RzID0gcmVzLnBheW1lbnRzPy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBPYmplY3Qua2V5cyhyZXMucGF5bWVudHNbMF0ubWV0aG9kcykubWFwKGtleSA9PiByZXMucGF5bWVudHNbMF0ubWV0aG9kc1trZXldKVxuICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgICAgIGlmIChtZXRob2RzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBheW1lbnRNZXRob2RzU3ViamVjdC5uZXh0KG1ldGhvZHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICBnZXRTdGVwRGF0YSA9IChzdGVwX25hbWU6IFN0ZXBUeXBlSSkgPT4ge1xuICAgICAgICBjb25zdCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIGlmICghc3RlcHMgfHwgIXN0ZXBzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHN0ZXBfcmVzdWx0ID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PSBzdGVwX25hbWUpO1xuICAgICAgICByZXR1cm4gKHN0ZXBfcmVzdWx0ICYmIHN0ZXBfcmVzdWx0LmRhdGEpIHx8IG51bGw7XG4gICAgfVxuXG4gICAgc2V0U3RlcHMgPSAoc3RlcHM6IFN0ZXBJW10sIGF1dG9oYW5kbGUgPSB0cnVlKSA9PiB7XG4gICAgICAgIGxldCBmaW5hbF9zdGVwcyA9IFtdO1xuICAgICAgICBzdGVwcy5mb3JFYWNoKChzdGVwLCBpKSA9PiBmaW5hbF9zdGVwcy5wdXNoKG5ldyBTdGVwKHN0ZXAubmFtZSwgc3RlcC5wcmlvcml0eSB8fCAoaSArIDEpKSkpO1xuICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KGZpbmFsX3N0ZXBzKTtcblxuICAgICAgICAvLyBPYnRlbmVyIElQIHkgdWJpY2FjacOzblxuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICBpcDogdGhpcy5pcFNlcnZpY2UuZ2V0SXAoKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLmlwU2VydmljZS5nZXRMb2NhdGlvbigpLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpXG4gICAgICAgIH0pLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBpcDogcmVzdWx0cy5pcD8uaXAgfHwgJ3Vua25vd24nLFxuICAgICAgICAgICAgICAgIGNvdW50cnk6IHJlc3VsdHMubG9jYXRpb24/LmNvdW50cnkgfHwgJ3Vua25vd24nLFxuICAgICAgICAgICAgICAgIGNpdHk6IHJlc3VsdHMubG9jYXRpb24/LmNpdHkgfHwgJ3Vua25vd24nXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zKS50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgdXJsV2l0aFBhcmFtcyA9IGAke3RoaXMuZ2V0SGFzUHVyY2hhc2VDb25kaXRpb25zKCl9PyR7cXVlcnlTdHJpbmd9YDtcblxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmdldEVycm9yTm90SGFuZGxlcih1cmxXaXRoUGFyYW1zKS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ2NoZWNrb3V0X2luaXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNhcnRMb2NhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmNhcnRMb2NhbD8uY3VycmVuY3ksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jYXJ0TG9jYWw/LnRvdGFsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFN0ZXBSZWFkeSA9IGFzeW5jIChzdGVwX251bWJlciwgZGF0YSwgb3JkZXI/LCBhdXRvbWF0aWM/KSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzdGFydEFsbFN0ZXBzRnJvbShzdGVwX251bWJlcik7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHN0ZXBzID0gdGhpcy5zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIHN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLnByaW9yaXR5ID09IHN0ZXBfbnVtYmVyKS5yZWFkeShkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuXG4gICAgICAgICAgICBpZiAob3JkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyU3ViamVjdC5uZXh0KG9yZGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsID0gb3JkZXIudG90YWxzLnRvdGFsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0NoZWNrb3V0UmVhZHkoKSkge1xuICAgICAgICAgICAgICAgIGlmIChzdGVwc1tzdGVwcy5sZW5ndGggLSAxXS5uYW1lID09ICdzaGlwbWVudCcpIHtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25SZWFkeVN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSwgMTUwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2V0U3RlcERvaW5nID0gYXN5bmMgKHN0ZXBfbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgIHN0ZXBzID0gYXdhaXQgdGhpcy5yZXN0YXJ0QWxsU3RlcHNGcm9tKHN0ZXBfbnVtYmVyLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICBzdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5wcmlvcml0eSA9PSBzdGVwX251bWJlcikuZG9pbmcoKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChzdGVwcyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJlc3RhcnRBbGxTdGVwc0Zyb20gPSAoc3RlcF9udW1iZXIsIGluY2x1ZGVkID0gdHJ1ZSwgdXBkYXRlID0gdHJ1ZSkgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBzdGVwcyA9IHN0ZXBzLm1hcCgoc3RlcCkgPT4ge1xuICAgICAgICAgICAgaW5jbHVkZWRcbiAgICAgICAgICAgICAgICA/IChzdGVwLnByaW9yaXR5ID49IHN0ZXBfbnVtYmVyKSAmJiBzdGVwLnJlc3RhcnQoKVxuICAgICAgICAgICAgICAgIDogKHN0ZXAucHJpb3JpdHkgPiBzdGVwX251bWJlcikgJiYgc3RlcC5yZXN0YXJ0KClcbiAgICAgICAgICAgIHJldHVybiBzdGVwO1xuICAgICAgICB9KVxuICAgICAgICB1cGRhdGUgJiYgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChzdGVwcyk7XG4gICAgICAgIHJldHVybiBzdGVwcztcbiAgICB9XG5cbiAgICBpc0NoZWNrb3V0UmVhZHkgPSAoKSA9PiB7XG4gICAgICAgIGxldCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlO1xuICAgICAgICBjb25zdCBzdGVwX21pc3NpbmcgPSBzdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5pc1BlbmRpbmcoKSk7XG4gICAgICAgIHJldHVybiAhc3RlcF9taXNzaW5nO1xuICAgIH1cblxuICAgIGlzU3RlcFJlYWR5ID0gKHN0ZXBfbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCkgfHwgW107XG4gICAgICAgIGlmICghc3RlcHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBzdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5uYW1lID09IHN0ZXBfbmFtZSk7XG4gICAgICAgIGlmICghc3RlcCkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBzdGVwLmlzUmVhZHkoKTtcbiAgICB9O1xuXG4gICAgc2V0T3JkZXIgPSAob3JkZXIpID0+IHsgdGhpcy5vcmRlciA9IG9yZGVyLCB0aGlzLm9yZGVyU3ViamVjdC5uZXh0KG9yZGVyKSB9O1xuICAgIGdldE9yZGVyID0gKCkgPT4gdGhpcy5vcmRlciB8fCB0aGlzLm9yZGVyU3ViamVjdC52YWx1ZTtcblxuICAgIHByaXZhdGUgY29tcGxldGVPcmRlciA9ICgpID0+IHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5jb21wbGV0ZUFwaSgpLCB7IGVtYWlsOiB0aGlzLmNoZWNrb3V0X2RhdGEuZW1haWwsIG5vdGVzOiB0aGlzLmNoZWNrb3V0X2RhdGEubm90ZXMgfHwgJycgfSkudG9Qcm9taXNlKCk7XG5cbiAgICBjb21wbGV0ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb21wbGV0ZU9yZGVyKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFyZXN1bHQgfHxcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvciB8fFxuICAgICAgICAgICAgcmVzdWx0LmNvZGUgPT09ICdpbnN1ZmZpY2llbnRfY3JlZGl0JyB8fFxuICAgICAgICAgICAgcmVzdWx0LmNvZGUgPT09ICdlcnJvcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNoYW5nZUhhdmVUb1VwZGF0ZShmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuICh7IG9rOiBmYWxzZSwgcmVxdWlyZV9sb2dpbjogdHJ1ZSwgbWVzc2FnZTogJ25vdC1jb21wbGV0ZWQnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0T3JkZXIocmVzdWx0KTtcbiAgICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgncHVyY2hhc2UnLCB7IC4uLnJlc3VsdCwgY3VycmVuY3k6IHJlc3VsdC5jdXJyZW5jeSwgdmFsdWU6IHJlc3VsdC50b3RhbCB9KTtcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jbGVhckFuZFJlc2V0Q2FydCgpO1xuICAgICAgICB0aGlzLmNhbkNoZWNrb3V0U3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5vblJlYWR5U3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuICh7IG9rOiB0cnVlLCByZXF1aXJlX2xvZ2luOiBmYWxzZSwgbWVzc2FnZTogJycgfSk7XG4gICAgfVxuXG4gICAgdXBkYXRlQXNvY2lhdGVkRGF0YSA9IChjYXJ0OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMub3JkZXJVdGlscy5nZXRTdW1tYXJ5UHJvbW90aW9ucyhjYXJ0KTtcbiAgICAgICAgY29uc3QgdG90YWxzID0gY2FydD8udG90YWxzO1xuICAgICAgICBpZiAoIXRvdGFscykge1xuICAgICAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvdGFscy50YXhlcyAhPSAwKSB7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcbiAgICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RheGVzJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndGF4ZXMnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogdG90YWxzLnRheGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0b3RhbCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNoaXBtZW50ID0gcmVzdWx0Py5maW5kKHByb21vdGlvbiA9PiBwcm9tb3Rpb24udHlwZSA9PSBcInNoaXBtZW50XCIpO1xuICAgICAgICBpZiAoIXNoaXBtZW50ICYmIHRvdGFscy5zaGlwcGluZyAhPSAwKSB7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQ/Lmxlbmd0aCAmJiAhcmVzdWx0LmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09IFwic2hpcG1lbnRcIikpIHtcbiAgICAgICAgICAgICAgICBsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcbiAgICAgICAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IHRvdGFscy5zaGlwcGluZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0b3RhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc29jaWF0ZWREYXRhU3ViamVjdC5uZXh0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcmVzdGFydENoZWNrb3V0ID0gKCkgPT4geyB9XG5cbn1cbiJdfQ==
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFLbEQsSUFBYSxlQUFlLEdBQTVCLE1BQWEsZUFBZTtJQWlDeEIsWUFBb0IsVUFBNkIsRUFDckMsV0FBd0IsRUFD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LGVBQWUsQ0E2UTNCO1NBN1FZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RlcEksIFN0ZXBUeXBlSSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3RlcCc7XG5pbXBvcnQgeyBTdGVwIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jaGVja291dC9zdGVwJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSwgQ2hlY2tvdXREYXRhVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvb3JkZXItdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy91c2VyJztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJcFNlcnZpY2UgfSBmcm9tICcuLi9pcC1hZGRyZXNzLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0U2VydmljZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBiYXNlQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NoZWNrb3V0LycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpO1xuICAgIGdldFBheW1lbnRNZXRob2RzQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3BheW1lbnQnO1xuICAgIHB1dEFkZHJlc3NBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvYWRkcmVzcyc7XG4gICAgcHV0UGF5bWVudEFwaSA9IChtZXRob2QpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9wYXltZW50LycgKyBtZXRob2Q7XG4gICAgY29tcGxldGVBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvY29tcGxldGUnO1xuICAgIHBlcnNpc3RTaGlwbWVudEFwaSA9ICgpID0+ICcnO1xuICAgIGdldFByZWZlcmVuY2VBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvbWVyY2Fkby1wYWdvLycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpICsgJy9wcmVmZXJlbmNlJztcbiAgICBnZXRIYXNQdXJjaGFzZUNvbmRpdGlvbnMgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL2hhc19wdXJjaGFzZV9jb25kaXRpb25zJztcblxuICAgIHByaXZhdGUgY2FuQ2hlY2tvdXRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIG9uUmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RlcFtdPihudWxsKTtcbiAgICBwcml2YXRlIHBheW1lbnRNZXRob2RzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBvcmRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gICAgcHJpdmF0ZSBhc29jaWF0ZWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXREYXRhW10+KG51bGwpO1xuICAgIHByaXZhdGUgb3JkZXI6IGFueTtcbiAgICBwcml2YXRlIGNoZWNrb3V0X2RhdGE6IGFueSA9IHt9O1xuICAgIHB1YmxpYyB0b3RhbDtcbiAgICBwcml2YXRlIGNhcnRMb2NhbDtcbiAgICBwcml2YXRlIHVzZXI6IFVzZXI7XG5cbiAgICBwdWJsaWMgb3JkZXIkID0gdGhpcy5vcmRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIHN0YXRlJCA9IHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGNhbkNoZWNrb3V0JCA9IHRoaXMuY2FuQ2hlY2tvdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBhc29jaWF0ZWREYXRhJCA9IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG9uUmVhZHkkID0gdGhpcy5vblJlYWR5U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgcGF5bWVudE1ldGhvZHMkID0gdGhpcy5wYXltZW50TWV0aG9kc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3JkZXJVdGlsczogT3JkZXJVdGlsaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBpcFNlcnZpY2U6IElwU2VydmljZSkge1xuXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLCB0aGlzLmNhcnRTZXJ2aWNlLmxvYWRpbmddKS5zdWJzY3JpYmUoKFtpdGVtcywgbG9hZGluZ10pID0+IHtcbiAgICAgICAgICAgIGlmICghbG9hZGluZyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dCh0cnVlKVxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0VG90YWxBbW91bnQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlcztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnQuc3Vic2NyaWJlKGNhcnQgPT4gY2FydCAmJiAodGhpcy5jYXJ0TG9jYWwgPSBjYXJ0KSAmJiB0aGlzLnVwZGF0ZUFzb2NpYXRlZERhdGEoY2FydCkpO1xuICAgICAgICB0aGlzLm9yZGVyJC5zdWJzY3JpYmUob3JkZXIgPT4gb3JkZXIgJiYgdGhpcy51cGRhdGVBc29jaWF0ZWREYXRhKG9yZGVyKSlcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUHJvZmlsZSgpLnN1YnNjcmliZSh1c2VyID0+IHRoaXMudXNlciA9IHVzZXIpXG4gICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmVycm9yJC5waXBlKGZpbHRlcihyZXMgPT4gcmVzICE9IG51bGwpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAnb3V0X29mX3N0b2NrJyB8fCByZXMuY29kZSA9PSAnaXRlbXNfd2l0aF9wcm9kdWN0X29yX3Byb2R1Y3RfdmFyaWFudF9ub3RfZW5hYmxlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3JlZGlyZWN0LWNhcnQnKVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9jYXJ0JylcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgfVxuXG4gICAgdXBkYXRlT3JkZXIgPSAob3JkZXIpID0+IG9yZGVyICYmIHRoaXMub3JkZXJTdWJqZWN0Lm5leHQob3JkZXIpO1xuXG4gICAgc2V0Q2hlY2tvdXROb3RlcyA9IChub3Rlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0YS5ub3RlcyA9IG5vdGVzIHx8ICcnO1xuICAgIH1cblxuICAgIGdldENoZWNrb3V0Tm90ZXMgPSAoKSA9PiB0aGlzLmNoZWNrb3V0X2RhdGEubm90ZXMgfHwgJyc7XG5cbiAgICBzZXRQYXltZW50TWV0aG9kcyA9IChtZXRob2RzOiBhbnlbXSkgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRNZXRob2RzU3ViamVjdC5uZXh0KG1ldGhvZHMgfHwgW10pO1xuICAgIH1cblxuICAgIHByZWZldGNoUGF5bWVudE1ldGhvZHMgPSBhc3luYyAoKSA9PlxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuZ2V0UGF5bWVudE1ldGhvZHNBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0aG9kcyA9IHJlcy5wYXltZW50cz8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXMocmVzLnBheW1lbnRzWzBdLm1ldGhvZHMpLm1hcChrZXkgPT4gcmVzLnBheW1lbnRzWzBdLm1ldGhvZHNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXltZW50TWV0aG9kc1N1YmplY3QubmV4dChtZXRob2RzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgZ2V0U3RlcERhdGEgPSAoc3RlcF9uYW1lOiBTdGVwVHlwZUkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoIXN0ZXBzIHx8ICFzdGVwcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBzdGVwX3Jlc3VsdCA9IHN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcbiAgICAgICAgcmV0dXJuIChzdGVwX3Jlc3VsdCAmJiBzdGVwX3Jlc3VsdC5kYXRhKSB8fCBudWxsO1xuICAgIH1cblxuICAgIHNldFN0ZXBzID0gKHN0ZXBzOiBTdGVwSVtdLCBhdXRvaGFuZGxlID0gdHJ1ZSkgPT4ge1xuICAgICAgICBsZXQgZmluYWxfc3RlcHMgPSBbXTtcbiAgICAgICAgc3RlcHMuZm9yRWFjaCgoc3RlcCwgaSkgPT4gZmluYWxfc3RlcHMucHVzaChuZXcgU3RlcChzdGVwLm5hbWUsIHN0ZXAucHJpb3JpdHkgfHwgKGkgKyAxKSkpKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChmaW5hbF9zdGVwcyk7XG5cbiAgICAgICAgLy8gT2J0ZW5lciBJUCB5IHViaWNhY2nDs25cbiAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgaXA6IHRoaXMuaXBTZXJ2aWNlLmdldElwKCkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSksXG4gICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5pcFNlcnZpY2UuZ2V0TG9jYXRpb24oKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICB9KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgaXA6IHJlc3VsdHMuaXA/LmlwIHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiByZXN1bHRzLmxvY2F0aW9uPy5jb3VudHJ5IHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBjaXR5OiByZXN1bHRzLmxvY2F0aW9uPy5jaXR5IHx8ICd1bmtub3duJ1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHVybFdpdGhQYXJhbXMgPSBgJHt0aGlzLmdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucygpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXRFcnJvck5vdEhhbmRsZXIodXJsV2l0aFBhcmFtcykudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdjaGVja291dF9pbml0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jYXJ0TG9jYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jYXJ0TG9jYWw/LmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2FydExvY2FsPy50b3RhbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRTdGVwUmVhZHkgPSBhc3luYyAoc3RlcF9udW1iZXIsIGRhdGEsIG9yZGVyPywgYXV0b21hdGljPykgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnRBbGxTdGVwc0Zyb20oc3RlcF9udW1iZXIpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgICAgICBzdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5wcmlvcml0eSA9PSBzdGVwX251bWJlcikucmVhZHkoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHN0ZXBzKTtcblxuICAgICAgICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IG9yZGVyLnRvdGFscy50b3RhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDaGVja291dFJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RlcHNbc3RlcHMubGVuZ3RoIC0gMV0ubmFtZSA9PSAnc2hpcG1lbnQnKSB7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sIDE1MCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNldFN0ZXBEb2luZyA9IGFzeW5jIChzdGVwX251bWJlcikgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBzdGVwcyA9IGF3YWl0IHRoaXMucmVzdGFydEFsbFN0ZXBzRnJvbShzdGVwX251bWJlciwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgc3RlcHMuZmluZChzdGVwID0+IHN0ZXAucHJpb3JpdHkgPT0gc3RlcF9udW1iZXIpLmRvaW5nKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXN0YXJ0QWxsU3RlcHNGcm9tID0gKHN0ZXBfbnVtYmVyLCBpbmNsdWRlZCA9IHRydWUsIHVwZGF0ZSA9IHRydWUpID0+IHtcbiAgICAgICAgbGV0IHN0ZXBzID0gdGhpcy5zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgc3RlcHMgPSBzdGVwcy5tYXAoKHN0ZXApID0+IHtcbiAgICAgICAgICAgIGluY2x1ZGVkXG4gICAgICAgICAgICAgICAgPyAoc3RlcC5wcmlvcml0eSA+PSBzdGVwX251bWJlcikgJiYgc3RlcC5yZXN0YXJ0KClcbiAgICAgICAgICAgICAgICA6IChzdGVwLnByaW9yaXR5ID4gc3RlcF9udW1iZXIpICYmIHN0ZXAucmVzdGFydCgpXG4gICAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfSlcbiAgICAgICAgdXBkYXRlICYmIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuICAgICAgICByZXR1cm4gc3RlcHM7XG4gICAgfVxuXG4gICAgaXNDaGVja291dFJlYWR5ID0gKCkgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc3RlcF9taXNzaW5nID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAuaXNQZW5kaW5nKCkpO1xuICAgICAgICByZXR1cm4gIXN0ZXBfbWlzc2luZztcbiAgICB9XG5cbiAgICBpc1N0ZXBSZWFkeSA9IChzdGVwX25hbWUpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpIHx8IFtdO1xuICAgICAgICBpZiAoIXN0ZXBzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBzdGVwID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PSBzdGVwX25hbWUpO1xuICAgICAgICBpZiAoIXN0ZXApIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gc3RlcC5pc1JlYWR5KCk7XG4gICAgfTtcblxuICAgIHNldE9yZGVyID0gKG9yZGVyKSA9PiB7IHRoaXMub3JkZXIgPSBvcmRlciwgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcikgfTtcbiAgICBnZXRPcmRlciA9ICgpID0+IHRoaXMub3JkZXIgfHwgdGhpcy5vcmRlclN1YmplY3QudmFsdWU7XG5cbiAgICBwcml2YXRlIGNvbXBsZXRlT3JkZXIgPSAoKSA9PiB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMuY29tcGxldGVBcGkoKSwgeyBlbWFpbDogdGhpcy5jaGVja291dF9kYXRhLmVtYWlsLCBub3RlczogdGhpcy5jaGVja291dF9kYXRhLm5vdGVzIHx8ICcnIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgY29tcGxldGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tcGxldGVPcmRlcigpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcmVzdWx0IHx8XG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgfHxcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID09PSAnaW5zdWZmaWNpZW50X2NyZWRpdCcgfHxcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID09PSAnZXJyb3InXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jaGFuZ2VIYXZlVG9VcGRhdGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiAoeyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IHRydWUsIG1lc3NhZ2U6ICdub3QtY29tcGxldGVkJyB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldE9yZGVyKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3B1cmNoYXNlJywgeyAuLi5yZXN1bHQsIGN1cnJlbmN5OiByZXN1bHQuY3VycmVuY3ksIHZhbHVlOiByZXN1bHQudG90YWwgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2xlYXJBbmRSZXNldENhcnQoKTtcbiAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMub25SZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybiAoeyBvazogdHJ1ZSwgcmVxdWlyZV9sb2dpbjogZmFsc2UsIG1lc3NhZ2U6ICcnIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUFzb2NpYXRlZERhdGEgPSAoY2FydDogYW55KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm9yZGVyVXRpbHMuZ2V0U3VtbWFyeVByb21vdGlvbnMoY2FydCk7XG4gICAgICAgIGNvbnN0IHRvdGFscyA9IGNhcnQ/LnRvdGFscztcbiAgICAgICAgaWYgKCF0b3RhbHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNoaXBtZW50QW1vdW50ID0gdGhpcy5vcmRlclV0aWxzLmdldFN1bW1hcnlTaGlwbWVudEFtb3VudChjYXJ0KTtcbiAgICAgICAgaWYgKHRvdGFscy50YXhlcyAhPSAwKSB7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcbiAgICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RheGVzJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndGF4ZXMnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogdG90YWxzLnRheGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0b3RhbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoaXBtZW50QW1vdW50ICE9PSBudWxsICYmIHJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzaGlwbWVudEluZGV4ID0gcmVzdWx0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3NoaXBtZW50Jyk7XG4gICAgICAgICAgICBjb25zdCBzaGlwbWVudEl0ZW06IENoZWNrb3V0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdzaGlwbWVudCcsXG4gICAgICAgICAgICAgICAgYW1vdW50OiBzaGlwbWVudEFtb3VudFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHNoaXBtZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NoaXBtZW50SW5kZXhdID0gc2hpcG1lbnRJdGVtO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEluZGV4ID0gcmVzdWx0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5zbGljZSgwLCB0b3RhbEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBtZW50SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5zbGljZSh0b3RhbEluZGV4KVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNoaXBtZW50SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xuICAgIH1cblxuICAgIHJlc3RhcnRDaGVja291dCA9ICgpID0+IHsgfVxuXG59XG4iXX0=
@@ -13,6 +13,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
13
  step((generator = generator.apply(thisArg, _arguments || [])).next());
14
14
  });
15
15
  };
16
+ var __rest = (this && this.__rest) || function (s, e) {
17
+ var t = {};
18
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
19
+ t[p] = s[p];
20
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
21
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
22
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
23
+ t[p[i]] = s[p[i]];
24
+ }
25
+ return t;
26
+ };
16
27
  import { Injectable } from '@angular/core';
17
28
  import { BehaviorSubject } from 'rxjs';
18
29
  import { take } from 'rxjs/operators';
@@ -24,11 +35,13 @@ import { StoresService } from '../stores.service';
24
35
  import { CheckoutService } from './checkout.service';
25
36
  import { StepService } from '../../classes/checkout/step-service';
26
37
  import { AnalyticsService } from '../analytics.service';
38
+ import { ShippingPriceDisplayService } from '../../utils/shipping-price-display.service';
27
39
  let ShipmentService = class ShipmentService extends StepService {
28
- constructor(connection, transformer, analyticsService, consts, cartService, storesService, checkoutService) {
40
+ constructor(connection, transformer, shippingPriceDisplay, analyticsService, consts, cartService, storesService, checkoutService) {
29
41
  super(checkoutService);
30
42
  this.connection = connection;
31
43
  this.transformer = transformer;
44
+ this.shippingPriceDisplay = shippingPriceDisplay;
32
45
  this.analyticsService = analyticsService;
33
46
  this.consts = consts;
34
47
  this.cartService = cartService;
@@ -130,7 +143,8 @@ let ShipmentService = class ShipmentService extends StepService {
130
143
  this.setShippingOption = (payload, stepData = payload) => __awaiter(this, void 0, void 0, function* () {
131
144
  this.errorSubject.next(null);
132
145
  try {
133
- const res = yield this.connection.put(this.putShippingOptionApi(), payload).toPromise();
146
+ const sanitizedPayload = this.stripFrontendOnlyShippingFields(payload);
147
+ const res = yield this.connection.put(this.putShippingOptionApi(), sanitizedPayload).toPromise();
134
148
  this.checkoutService.updateAsociatedData(res);
135
149
  this.order = res;
136
150
  return this.setStepReady(stepData, res);
@@ -144,11 +158,12 @@ let ShipmentService = class ShipmentService extends StepService {
144
158
  this.putShipment = () => this.connection.put(this.putShipmentApi(), { method: this.stateSubject.getValue().data.method }).toPromise();
145
159
  this.getCalculatedCosts = () => this.connection.get(this.calculatedCostsApi()).toPromise();
146
160
  this.setContract = (contract) => __awaiter(this, void 0, void 0, function* () {
147
- const data = Object.assign(Object.assign({}, contract), this.otherParamsForContract(contract));
161
+ const stepData = Object.assign(Object.assign({}, contract), this.otherParamsForContract(contract));
162
+ const data = this.stripFrontendOnlyShippingFields(stepData);
148
163
  return yield this.connection.put(this.putContractApi(), data)
149
164
  .toPromise().then(order => {
150
165
  // this.analyticsService.callEvent('shipping_info', order);
151
- return this.setStepReady(data, order);
166
+ return this.setStepReady(stepData, order);
152
167
  }, err => {
153
168
  return new Promise((resolve, reject) => reject(new Error(err.error)));
154
169
  }).catch(err => console.error(err));
@@ -174,9 +189,10 @@ let ShipmentService = class ShipmentService extends StepService {
174
189
  let branch_delivery = result.findIndex(submethod => submethod.name == 'branch_delivery');
175
190
  if (branch_delivery != -1) {
176
191
  result[branch_delivery].contracts = result[branch_delivery].contracts.map(contract => {
192
+ const normalizedContract = this.normalizeShippingContract(contract);
177
193
  let branch_property = contract.branch_property || {};
178
194
  let address_data = branch_property.address || {};
179
- return Object.assign(Object.assign(Object.assign({ contract: 'branch_delivery', name: contract.name, price: contract.price }, address_data), branch_property), { computed: (address_data.street || '') + ' N° ' + (address_data.number || '') });
195
+ return Object.assign(Object.assign(Object.assign({ contract: 'branch_delivery', name: normalizedContract.name, price: normalizedContract.price, originalPrice: normalizedContract.originalPrice }, address_data), branch_property), { computed: (address_data.street || '') + ' N° ' + (address_data.number || '') });
180
196
  });
181
197
  }
182
198
  if (method.includes('pickup_store')) {
@@ -252,13 +268,14 @@ let ShipmentService = class ShipmentService extends StepService {
252
268
  const contracts = ((_d = option) === null || _d === void 0 ? void 0 : _d.contracts) || [];
253
269
  if (((_e = option) === null || _e === void 0 ? void 0 : _e.name) === 'branch_delivery') {
254
270
  option.contracts = contracts.map(contract => {
255
- var _a, _b, _c, _d;
271
+ var _a, _b, _c;
272
+ const normalizedContract = this.normalizeShippingContract(contract);
256
273
  const branch = ((_a = contract) === null || _a === void 0 ? void 0 : _a.branch_property) || {};
257
274
  const address = branch.address || {};
258
275
  const street = address.street || '';
259
276
  const number = address.number || '';
260
277
  const computed = [street, number ? `N° ${number}` : ''].filter(Boolean).join(' ');
261
- return Object.assign(Object.assign(Object.assign(Object.assign({}, contract), address), branch), { contract: ((_b = contract) === null || _b === void 0 ? void 0 : _b.contract) || option.name, name: (_c = contract) === null || _c === void 0 ? void 0 : _c.name, price: (_d = contract) === null || _d === void 0 ? void 0 : _d.price, computed: computed || contract.computed });
278
+ return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, contract), normalizedContract), address), branch), { contract: ((_b = contract) === null || _b === void 0 ? void 0 : _b.contract) || option.name, name: (_c = contract) === null || _c === void 0 ? void 0 : _c.name, price: normalizedContract.price, originalPrice: normalizedContract.originalPrice, computed: computed || contract.computed });
262
279
  });
263
280
  }
264
281
  if (methodCode.includes('pickup_store')) {
@@ -279,6 +296,16 @@ let ShipmentService = class ShipmentService extends StepService {
279
296
  return list;
280
297
  });
281
298
  }
299
+ normalizeShippingContract(contract) {
300
+ var _a, _b, _c, _d;
301
+ const price = this.shippingPriceDisplay.normalizePriceValue((_a = contract) === null || _a === void 0 ? void 0 : _a.price);
302
+ const originalPrice = this.shippingPriceDisplay.normalizePriceValue((_b = contract) === null || _b === void 0 ? void 0 : _b.originalPrice);
303
+ return Object.assign(Object.assign({}, contract), { price: price !== null ? price : (_c = contract) === null || _c === void 0 ? void 0 : _c.price, originalPrice: originalPrice !== null ? originalPrice : (_d = contract) === null || _d === void 0 ? void 0 : _d.originalPrice });
304
+ }
305
+ stripFrontendOnlyShippingFields(data) {
306
+ const _a = data || {}, { originalPrice } = _a, rest = __rest(_a, ["originalPrice"]);
307
+ return rest;
308
+ }
282
309
  };
283
310
  /**
284
311
  * @param moreInfoInMethod por defecto su estado es false, si se desea que visualice información adicional de cada método de envió asignar true.
@@ -287,6 +314,7 @@ ShipmentService.moreInfoInMethod = false;
287
314
  ShipmentService.ctorParameters = () => [
288
315
  { type: ConnectionService },
289
316
  { type: ShipmentDataTransformer },
317
+ { type: ShippingPriceDisplayService },
290
318
  { type: AnalyticsService },
291
319
  { type: Constants },
292
320
  { type: CartService },
@@ -297,4 +325,4 @@ ShipmentService = __decorate([
297
325
  Injectable()
298
326
  ], ShipmentService);
299
327
  export { ShipmentService };
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcG1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9zaGlwbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBZ0MsTUFBTSxNQUFNLENBQUM7QUFDckUsT0FBTyxFQUFFLElBQUksRUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHeEQsSUFBYSxlQUFlLEdBQTVCLE1BQWEsZUFBZ0IsU0FBUSxXQUFXO0lBaUM1QyxZQUFvQixVQUE2QixFQUFVLFdBQW9DLEVBQVUsZ0JBQWtDLEVBQy9ILE1BQWlCLEVBQVUsV0FBd0IsRUFBVSxhQUE0QixFQUFVLGVBQWdDO1FBQzNJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUZQLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUMvSCxX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LENBQUM7eUJBQ047cUJBQ0o7aUJBQ0o7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDOztLQUNmO0NBZ0NKLENBQUE7QUE1Ukc7O0dBRUc7QUFDVyxnQ0FBZ0IsR0FBRyxLQUFLLENBQUM7O1lBWVAsaUJBQWlCO1lBQXVCLHVCQUF1QjtZQUE0QixnQkFBZ0I7WUFDdkgsU0FBUztZQUF1QixXQUFXO1lBQXlCLGFBQWE7WUFBMkIsZUFBZTs7QUFsQ3RJLGVBQWU7SUFEM0IsVUFBVSxFQUFFO0dBQ0EsZUFBZSxDQThTM0I7U0E5U1ksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgb2YsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBDaGVja291dFByb2Nlc3NTdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY2hlY2tvdXQtcHJvY2Vzcy1zdGF0ZSc7XG5pbXBvcnQgeyBTaGlwbWVudERhdGFUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uL3V0aWxzL3NoaXBtZW50LXRyYW5zZm9ybWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3Jlc1NlcnZpY2UgfSBmcm9tICcuLi9zdG9yZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDaGVja291dFNlcnZpY2UgfSBmcm9tICcuL2NoZWNrb3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RlcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NoZWNrb3V0L3N0ZXAtc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi9hbmFseXRpY3Muc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaGlwbWVudFNlcnZpY2UgZXh0ZW5kcyBTdGVwU2VydmljZSB7XG5cbiAgICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXRQcm9jZXNzU3RhdGU+KHsgZG9pbmc6IGZhbHNlLCBvazogZmFsc2UsIGRhdGE6IG51bGwgfSk7XG4gICAgcHJpdmF0ZSBtZXRob2RzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihbXSk7XG4gICAgcHJpdmF0ZSBjb3N0c1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oW10pO1xuICAgIHByaXZhdGUgZXJyb3JTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBidXR0b25zRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgb3JkZXI7XG5cbiAgICBwcml2YXRlIGJhc2VBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvJyArICdjaGVja291dC8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKTtcblxuICAgIHB1YmxpYyBzdGF0ZSA9IHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBtZXRob2RzID0gdGhpcy5tZXRob2RzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgY29zdHMgPSB0aGlzLmNvc3RzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgZXJyb3IkID0gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBtb3JlSW5mb0luTWV0aG9kIHBvciBkZWZlY3RvIHN1IGVzdGFkbyBlcyBmYWxzZSwgc2kgc2UgZGVzZWEgcXVlIHZpc3VhbGljZSBpbmZvcm1hY2nDs24gYWRpY2lvbmFsIGRlIGNhZGEgbcOpdG9kbyBkZSBlbnZpw7MgYXNpZ25hciB0cnVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgbW9yZUluZm9Jbk1ldGhvZCA9IGZhbHNlO1xuXG5cbiAgICBwdWJsaWMgc2hpcG1lbnRNZXRob2RzQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3NoaXBwaW5nJztcbiAgICBwdWJsaWMgc2hpcHBpbmdPcHRpb25zQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3NoaXBwaW5nLW9wdGlvbnMnO1xuICAgIHB1YmxpYyBwdXRTaGlwcGluZ09wdGlvbkFwaSA9ICgpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9zaGlwcGluZy1vcHRpb24nO1xuXG4gICAgcHVibGljIHBlcnNpc3RTaGlwbWVudEFwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9hbmRyZWFuaS8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSArICcvc2hpcCc7XG4gICAgcHVibGljIHB1dFNoaXBtZW50QXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3NoaXBwaW5nLycgKyB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpLmRhdGEubWV0aG9kO1xuICAgIHB1YmxpYyBwdXRDb250cmFjdEFwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jaGVja291dC8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSArICcvc2hpcHBpbmctY29udHJhY3QnO1xuICAgIHB1YmxpYyBjYWxjdWxhdGVkQ29zdHNBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL211bHRpcGxlLWVzdGltYXRlZC1zaGlwcGluZy1jb3N0JztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UsIHByaXZhdGUgdHJhbnNmb3JtZXI6IFNoaXBtZW50RGF0YVRyYW5zZm9ybWVyLCBwcml2YXRlIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uc3RzOiBDb25zdGFudHMsIHByaXZhdGUgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLCBwcml2YXRlIHN0b3Jlc1NlcnZpY2U6IFN0b3Jlc1NlcnZpY2UsIHByaXZhdGUgY2hlY2tvdXRTZXJ2aWNlOiBDaGVja291dFNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoY2hlY2tvdXRTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBnZXRTaGlwbWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICAgIC8vIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5zaGlwbWVudE1ldGhvZHNBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgLy8gICAgIHJlcyA9PiB0aGlzLm1ldGhvZHNTdWJqZWN0Lm5leHQodGhpcy5yZXNwb25zZVRvTGlzdChyZXMpKVxuICAgICAgICAvLyApLmNhdGNoKGVyciA9PiB0aGlzLm1ldGhvZHNTdWJqZWN0Lm5leHQoW10pKVxuICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLmdldEVycm9yTm90SGFuZGxlcih0aGlzLnNoaXBtZW50TWV0aG9kc0FwaSgpKS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5yZXNwb25zZVRvTGlzdChyZXMpIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kc1N1YmplY3QubmV4dChsaXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiBsaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCgnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KFtdKVxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCgnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICB0aGlzLm1ldGhvZHNTdWJqZWN0Lm5leHQoW10pXG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0U2hpcHBpbmdPcHRpb25zID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb25zdHMuZ2V0Q2hlY2tvdXRWaWV3KCkgIT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLmdldEVycm9yTm90SGFuZGxlcih0aGlzLnNoaXBwaW5nT3B0aW9uc0FwaSgpKS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0ID0gYXdhaXQgdGhpcy5ub3JtYWxpemVTaGlwcGluZ09wdGlvbnMocmVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZHNTdWJqZWN0Lm5leHQobGlzdC5tYXAoZW50cnkgPT4gZW50cnkubWV0aG9kKS5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgICAgICAgICAgIHJldHVybiBsaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCgnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KFtdKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIHNldE1ldGhvZCA9IGFzeW5jIChtZXRob2QpID0+IHtcbiAgICAgICAgLy8gRGVzaGFiaWxpdGFyIHRvZG9zIGxvcyBib3RvbmVzXG4gICAgICAgIHRoaXMuYnV0dG9uc0Rpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLmNvc3RzU3ViamVjdC5uZXh0KFtdKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7IGRvaW5nOiB0cnVlLCBvazogZmFsc2UsIGRhdGE6IHsgbWV0aG9kIH0gfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucHV0U2hpcG1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnVwZGF0ZUFzb2NpYXRlZERhdGEocmVzKTtcbiAgICAgICAgICAgIHRoaXMub3JkZXIgPSByZXM7XG4gICAgICAgICAgICBjb25zdCBjb3N0cyA9IGF3YWl0IHRoaXMuZ2V0Q2FsY3VsYXRlZENvc3RzKCk7XG4gICAgICAgICAgICB0aGlzLm1vZGlmeUNvc3RzUmVzcG9uc2UoY29zdHMsIHRoaXMuZ2V0VXNlckRhdGEoKT8uc2hpcHBpbmdBZGRyZXNzPy5wb3N0Y29kZSwgbWV0aG9kKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIuZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgLy8gSGFiaWxpdGFyIHRvZG9zIGxvcyBib3RvbmVzXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0TWV0aG9kT25seSA9IGFzeW5jIChtZXRob2QpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7IGRvaW5nOiB0cnVlLCBvazogZmFsc2UsIGRhdGE6IHsgbWV0aG9kIH0gfSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnB1dFNoaXBtZW50KCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVBc29jaWF0ZWREYXRhKHJlcyk7XG4gICAgICAgICAgICB0aGlzLm9yZGVyID0gcmVzO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyci5lcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTaGlwcGluZ09wdGlvbiA9IGFzeW5jIChcbiAgICAgICAgcGF5bG9hZDogeyBtZXRob2Q6IHN0cmluZzsgb3B0aW9uOiBzdHJpbmc7IGNvbnRyYWN0OiBzdHJpbmc7IHByaWNlOiBudW1iZXIgfSxcbiAgICAgICAgc3RlcERhdGE6IGFueSA9IHBheWxvYWRcbiAgICApID0+IHtcbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5wdXRTaGlwcGluZ09wdGlvbkFwaSgpLCBwYXlsb2FkKS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnVwZGF0ZUFzb2NpYXRlZERhdGEocmVzKTtcbiAgICAgICAgICAgIHRoaXMub3JkZXIgPSByZXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGVwUmVhZHkoc3RlcERhdGEsIHJlcyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCgnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLmVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHV0U2hpcG1lbnQgPSAoKSA9PiB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMucHV0U2hpcG1lbnRBcGkoKSwgeyBtZXRob2Q6IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCkuZGF0YS5tZXRob2QgfSkudG9Qcm9taXNlKCk7XG5cbiAgICBnZXRDYWxjdWxhdGVkQ29zdHMgPSAoKSA9PiB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuY2FsY3VsYXRlZENvc3RzQXBpKCkpLnRvUHJvbWlzZSgpO1xuXG4gICAgc2V0Q29udHJhY3QgPSBhc3luYyAoY29udHJhY3Q6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi5jb250cmFjdCwgLi4udGhpcy5vdGhlclBhcmFtc0ZvckNvbnRyYWN0KGNvbnRyYWN0KSB9O1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLnB1dENvbnRyYWN0QXBpKCksIGRhdGEpXG4gICAgICAgIC50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgb3JkZXIgPT4ge1xuICAgICAgICAgICAgICAgLy8gIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3NoaXBwaW5nX2luZm8nLCBvcmRlcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0U3RlcFJlYWR5KGRhdGEsIG9yZGVyKX0sXG4gICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZWplY3QobmV3IEVycm9yKGVyci5lcnJvcikpKVxuICAgICAgICAgICAgfVxuICAgICAgICApLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKGVycikpXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uICYmIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLy8gVVRJTFNcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSByZXNwb25zZSBEZSBhcGkgZGUgc29saWNpdHVkIGRlIGNvc3RvcyBwb3IgbWV0b2RvIGRlIGVudsOtbyBzZWxlY2Npb25hZG9cbiAgICAgKiBAcGFyYW0gcG9zdF9jb2RlIEluZGljYWRvIGVuIGVsIHBhc28gZGUgQWRkcmVzc2luZyAoZGF0b3MgcGVyc29uYWxlcyB5IGRlIGZhY3R1cmFjacOzbilcbiAgICAgKiBAcGFyYW0gbWV0aG9kIE1ldG9kbyBkZSBlbnbDrW8gc2VsZWNjaW9uYWRvXG4gICAgICovXG4gICAgbW9kaWZ5Q29zdHNSZXNwb25zZSA9IGFzeW5jIChyZXNwb25zZSwgcG9zdF9jb2RlLCBtZXRob2QpID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UubXVsdGlwbGVQcmljZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgdGhpcy5jb3N0c1N1YmplY3QubmV4dChbXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29zdHMgPSBhd2FpdCB0aGlzLmJ1aWxkQ29zdHNGcm9tUmVzcG9uc2UocmVzcG9uc2UsIG1ldGhvZCk7XG4gICAgICAgIHRoaXMuY29zdHNTdWJqZWN0Lm5leHQoY29zdHMpO1xuICAgIH1cblxuICAgIGJ1aWxkQ29zdHNGcm9tUmVzcG9uc2UgPSBhc3luYyAocmVzcG9uc2UsIG1ldGhvZCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZT8ubXVsdGlwbGVQcmljZXMgfHwgW107XG4gICAgICAgIGxldCBicmFuY2hfZGVsaXZlcnkgPSByZXN1bHQuZmluZEluZGV4KHN1Ym1ldGhvZCA9PiBzdWJtZXRob2QubmFtZSA9PSAnYnJhbmNoX2RlbGl2ZXJ5Jyk7XG4gICAgICAgIGlmIChicmFuY2hfZGVsaXZlcnkgIT0gLTEpIHtcbiAgICAgICAgICAgIHJlc3VsdFticmFuY2hfZGVsaXZlcnldLmNvbnRyYWN0cyA9IHJlc3VsdFticmFuY2hfZGVsaXZlcnldLmNvbnRyYWN0cy5tYXAoY29udHJhY3QgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBicmFuY2hfcHJvcGVydHkgPSBjb250cmFjdC5icmFuY2hfcHJvcGVydHkgfHwge307XG4gICAgICAgICAgICAgICAgbGV0IGFkZHJlc3NfZGF0YSA9IGJyYW5jaF9wcm9wZXJ0eS5hZGRyZXNzIHx8IHt9O1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyYWN0OiAnYnJhbmNoX2RlbGl2ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29udHJhY3QubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJpY2U6IGNvbnRyYWN0LnByaWNlLFxuICAgICAgICAgICAgICAgICAgICAuLi5hZGRyZXNzX2RhdGEsXG4gICAgICAgICAgICAgICAgICAgIC4uLmJyYW5jaF9wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IChhZGRyZXNzX2RhdGEuc3RyZWV0IHx8ICcnKSArICcgTsKwICcgKyAoYWRkcmVzc19kYXRhLm51bWJlciB8fCAnJylcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZC5pbmNsdWRlcygncGlja3VwX3N0b3JlJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlcyA9IGF3YWl0IHRoaXMuc3RvcmVzU2VydmljZS5zdG9yZXMucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIGlmIChzdG9yZXMgJiYgc3RvcmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKHBpY2t1cF9zdG9yZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBpY2t1cF9zdG9yZS5jb250cmFjdHMuZm9yRWFjaChjb250cmFjdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50X3N0b3JlID0gc3RvcmVzLmZpbmQoc3RvcmUgPT4gc3RvcmUuY29kZSA9PSBjb250cmFjdC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudF9zdG9yZSkgY29udHJhY3QuZGV0YWlsID0gJ1NpbiBpbmZvcm1hY2nDs24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBjb250cmFjdC5kZXRhaWwgPSBjdXJyZW50X3N0b3JlLm5hbWUgKyAnIC0gJyArIGN1cnJlbnRfc3RvcmUuYWRkcmVzcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cmFjdDtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0Q29zdHNGb3JNZXRob2QgPSBhc3luYyAobWV0aG9kKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoeyBkb2luZzogdHJ1ZSwgb2s6IGZhbHNlLCBkYXRhOiB7IG1ldGhvZCB9IH0pO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnB1dFNoaXBtZW50KCk7XG4gICAgICAgIHJlcyAmJiB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVBc29jaWF0ZWREYXRhKHJlcyk7XG4gICAgICAgIGNvbnN0IGNvc3RzID0gYXdhaXQgdGhpcy5nZXRDYWxjdWxhdGVkQ29zdHMoKTtcbiAgICAgICAgaWYgKCFjb3N0cyB8fCAhY29zdHMubXVsdGlwbGVQcmljZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkQ29zdHNGcm9tUmVzcG9uc2UoY29zdHMsIG1ldGhvZCk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VUb0xpc3QgPSAocmVzcG9uc2UpID0+XG4gICAgICAgIChyZXNwb25zZS5zaGlwbWVudHMgJiYgcmVzcG9uc2Uuc2hpcG1lbnRzLmxlbmd0aCA+IDApICYmIE9iamVjdC5rZXlzKHJlc3BvbnNlLnNoaXBtZW50c1swXS5tZXRob2RzKS5tYXAoa2V5ID0+IHJlc3BvbnNlLnNoaXBtZW50c1swXS5tZXRob2RzW2tleV0pO1xuXG4gICAgcmVzcG9uc2VUb1NoaXBwaW5nT3B0aW9ucyA9IChyZXNwb25zZSkgPT5cbiAgICAgICAgKHJlc3BvbnNlLnNoaXBtZW50cyAmJiByZXNwb25zZS5zaGlwbWVudHMubGVuZ3RoID4gMCkgJiYgT2JqZWN0LmtleXMocmVzcG9uc2Uuc2hpcG1lbnRzWzBdLm1ldGhvZHMpLm1hcChrZXkgPT4gcmVzcG9uc2Uuc2hpcG1lbnRzWzBdLm1ldGhvZHNba2V5XSk7XG5cbiAgICBwcml2YXRlIGFzeW5jIG5vcm1hbGl6ZVNoaXBwaW5nT3B0aW9ucyhyZXNwb25zZSkge1xuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5yZXNwb25zZVRvU2hpcHBpbmdPcHRpb25zKHJlc3BvbnNlKSB8fCBbXTtcbiAgICAgICAgbGV0IHN0b3JlcyA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgbGlzdCkge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kQ29kZSA9IGVudHJ5Py5tZXRob2Q/LmNvZGUgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gZW50cnk/Lm9wdGlvbnMgfHwgW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJhY3RzID0gb3B0aW9uPy5jb250cmFjdHMgfHwgW107XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbj8ubmFtZSA9PT0gJ2JyYW5jaF9kZWxpdmVyeScpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmNvbnRyYWN0cyA9IGNvbnRyYWN0cy5tYXAoY29udHJhY3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJhbmNoID0gY29udHJhY3Q/LmJyYW5jaF9wcm9wZXJ0eSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBicmFuY2guYWRkcmVzcyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVldCA9IGFkZHJlc3Muc3RyZWV0IHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gYWRkcmVzcy5udW1iZXIgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wdXRlZCA9IFtzdHJlZXQsIG51bWJlciA/IGBOwrAgJHtudW1iZXJ9YCA6ICcnXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jb250cmFjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmJyYW5jaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmFjdDogY29udHJhY3Q/LmNvbnRyYWN0IHx8IG9wdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbnRyYWN0Py5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBjb250cmFjdD8ucHJpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IGNvbXB1dGVkIHx8IGNvbnRyYWN0LmNvbXB1dGVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1ldGhvZENvZGUuaW5jbHVkZXMoJ3BpY2t1cF9zdG9yZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RvcmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZXMgPSBhd2FpdCB0aGlzLnN0b3Jlc1NlcnZpY2Uuc3RvcmVzLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3JlcyAmJiBzdG9yZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uY29udHJhY3RzID0gY29udHJhY3RzLm1hcChjb250cmFjdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN0b3JlID0gc3RvcmVzLmZpbmQoc3RvcmUgPT4gc3RvcmUuY29kZSA9PSBjb250cmFjdC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRTdG9yZSkgcmV0dXJuIHsgLi4uY29udHJhY3QsIGRldGFpbDogJ1NpbiBpbmZvcm1hY2nDs24nIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uY29udHJhY3QsIGRldGFpbDogY3VycmVudFN0b3JlLm5hbWUgKyAnIC0gJyArIGN1cnJlbnRTdG9yZS5hZGRyZXNzIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBvdGhlclBhcmFtc0ZvckNvbnRyYWN0ID0gKGNvbnRyYWN0KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaGlwcGluZ19tZXRob2RfY29udHJhY3Q6XG4gICAgICAgICAgICAgICAgY29udHJhY3Quc2hpcHBpbmdfbWV0aG9kX2NvbnRyYWN0XG4gICAgICAgICAgICAgICAgICAgID8gY29udHJhY3Quc2hpcHBpbmdfbWV0aG9kX2NvbnRyYWN0XG4gICAgICAgICAgICAgICAgICAgIDogY29udHJhY3QuY29udHJhY3QgKyAnXycgKyBjb250cmFjdC5uYW1lLFxuICAgICAgICAgICAgc2hpcHBpbmdfbWV0aG9kX2JyYW5jaF9jb2RlOlxuICAgICAgICAgICAgICAgIGNvbnRyYWN0LnNoaXBwaW5nX21ldGhvZF9icmFuY2hfY29kZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbnRyYWN0LnNoaXBwaW5nX21ldGhvZF9icmFuY2hfY29kZVxuICAgICAgICAgICAgICAgICAgICA6IChjb250cmFjdC5jb250cmFjdCAmJiBjb250cmFjdC5jb250cmFjdCA9PSBcImJyYW5jaF9kZWxpdmVyeVwiKSA/IGNvbnRyYWN0Lm51bWJlciA6IGNvbnRyYWN0Lm5hbWVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEJyYW5jaE9mZmljZXMgPSAobWV0aG9kKSA9PiB0aGlzLmNvbm5lY3Rpb24uZ2V0T3V0c2lkZXIodGhpcy50cmFuc2Zvcm1lci5nZXRBcGkobWV0aG9kLnRvTG93ZXJDYXNlKCkpKS50b1Byb21pc2UoKTtcblxuICAgIGZvcm1hdFVubmVjZXNhcnlEb2N1bWVudCA9IChkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhLnNoaXBwaW5nQWRkcmVzcz8uZG9jdW1lbnROdW1iZXI/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBkYXRhLnNoaXBwaW5nQWRkcmVzcy5kb2N1bWVudE51bWJlciA9ICcwMDAwMDAwMCdcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5zaGlwcGluZ0FkZHJlc3M/LmRvY3VtZW50VHlwZT8ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGRhdGEuc2hpcHBpbmdBZGRyZXNzLmRvY3VtZW50VHlwZSA9ICdYWFgnXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuYmlsbGluZ0FkZHJlc3MgJiYgZGF0YS5iaWxsaW5nQWRkcmVzcy5kb2N1bWVudE51bWJlcj8ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGRhdGEuYmlsbGluZ0FkZHJlc3MuZG9jdW1lbnROdW1iZXIgPSAnMDAwMDAwMDAnXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuYmlsbGluZ0FkZHJlc3MgJiYgZGF0YS5iaWxsaW5nQWRkcmVzcy5kb2N1bWVudFR5cGU/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBkYXRhLmJpbGxpbmdBZGRyZXNzLmRvY3VtZW50VHlwZSA9ICdYWFgnXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG59XG4iXX0=
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcG1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9zaGlwbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFnQyxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsSUFBSSxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUd6RixJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFnQixTQUFRLFdBQVc7SUFpQzVDLFlBQW9CLFVBQTZCLEVBQVUsV0FBb0MsRUFBVSxvQkFBaUQsRUFBVSxnQkFBa0MsRUFDMUwsTUFBaUIsRUFBVSxXQUF3QixFQUFVLGFBQTRCLEVBQVUsZUFBZ0M7UUFDM0ksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRlAsZUFBVSxHQUFWLFVBQVUsQ0FB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OEMsRUFBOUMsRUFBRSxhQUFhLE9BQStCLEVBQTdCLG9DQUE2QixDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FnQ0osQ0FBQTtBQWxURzs7R0FFRztBQUNXLGdDQUFnQixHQUFHLEtBQUssQ0FBQzs7WUFZUCxpQkFBaUI7WUFBdUIsdUJBQXVCO1lBQWdDLDJCQUEyQjtZQUE0QixnQkFBZ0I7WUFDbEwsU0FBUztZQUF1QixXQUFXO1lBQXlCLGFBQWE7WUFBMkIsZUFBZTs7QUFsQ3RJLGVBQWU7SUFEM0IsVUFBVSxFQUFFO0dBQ0EsZUFBZSxDQW9VM0I7U0FwVVksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgb2YsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBDaGVja291dFByb2Nlc3NTdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY2hlY2tvdXQtcHJvY2Vzcy1zdGF0ZSc7XG5pbXBvcnQgeyBTaGlwbWVudERhdGFUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uL3V0aWxzL3NoaXBtZW50LXRyYW5zZm9ybWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcGkvY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3Jlc1NlcnZpY2UgfSBmcm9tICcuLi9zdG9yZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDaGVja291dFNlcnZpY2UgfSBmcm9tICcuL2NoZWNrb3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RlcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NoZWNrb3V0L3N0ZXAtc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBTaGlwcGluZ09wdGlvbkNvbnRyYWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zaGlwcGluZy1vcHRpb24nO1xuaW1wb3J0IHsgU2hpcHBpbmdQcmljZURpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2hpcHBpbmctcHJpY2UtZGlzcGxheS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNoaXBtZW50U2VydmljZSBleHRlbmRzIFN0ZXBTZXJ2aWNlIHtcblxuICAgIHByaXZhdGUgc3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGVja291dFByb2Nlc3NTdGF0ZT4oeyBkb2luZzogZmFsc2UsIG9rOiBmYWxzZSwgZGF0YTogbnVsbCB9KTtcbiAgICBwcml2YXRlIG1ldGhvZHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KFtdKTtcbiAgICBwcml2YXRlIGNvc3RzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihbXSk7XG4gICAgcHJpdmF0ZSBlcnJvclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGJ1dHRvbnNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBvcmRlcjtcblxuICAgIHByaXZhdGUgYmFzZUFwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy8nICsgJ2NoZWNrb3V0LycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpO1xuXG4gICAgcHVibGljIHN0YXRlID0gdGhpcy5zdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG1ldGhvZHMgPSB0aGlzLm1ldGhvZHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBjb3N0cyA9IHRoaXMuY29zdHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBlcnJvciQgPSB0aGlzLmVycm9yU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG1vcmVJbmZvSW5NZXRob2QgcG9yIGRlZmVjdG8gc3UgZXN0YWRvIGVzIGZhbHNlLCBzaSBzZSBkZXNlYSBxdWUgdmlzdWFsaWNlIGluZm9ybWFjacOzbiBhZGljaW9uYWwgZGUgY2FkYSBtw6l0b2RvIGRlIGVudmnDsyBhc2lnbmFyIHRydWUuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBtb3JlSW5mb0luTWV0aG9kID0gZmFsc2U7XG5cblxuICAgIHB1YmxpYyBzaGlwbWVudE1ldGhvZHNBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvc2hpcHBpbmcnO1xuICAgIHB1YmxpYyBzaGlwcGluZ09wdGlvbnNBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvc2hpcHBpbmctb3B0aW9ucyc7XG4gICAgcHVibGljIHB1dFNoaXBwaW5nT3B0aW9uQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3NoaXBwaW5nLW9wdGlvbic7XG5cbiAgICBwdWJsaWMgcGVyc2lzdFNoaXBtZW50QXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2FuZHJlYW5pLycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpICsgJy9zaGlwJztcbiAgICBwdWJsaWMgcHV0U2hpcG1lbnRBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvc2hpcHBpbmcvJyArIHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCkuZGF0YS5tZXRob2Q7XG4gICAgcHVibGljIHB1dENvbnRyYWN0QXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NoZWNrb3V0LycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpICsgJy9zaGlwcGluZy1jb250cmFjdCc7XG4gICAgcHVibGljIGNhbGN1bGF0ZWRDb3N0c0FwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jYXJ0cy8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSArICcvbXVsdGlwbGUtZXN0aW1hdGVkLXNoaXBwaW5nLWNvc3QnO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSwgcHJpdmF0ZSB0cmFuc2Zvcm1lcjogU2hpcG1lbnREYXRhVHJhbnNmb3JtZXIsIHByaXZhdGUgc2hpcHBpbmdQcmljZURpc3BsYXk6IFNoaXBwaW5nUHJpY2VEaXNwbGF5U2VydmljZSwgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLCBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSwgcHJpdmF0ZSBzdG9yZXNTZXJ2aWNlOiBTdG9yZXNTZXJ2aWNlLCBwcml2YXRlIGNoZWNrb3V0U2VydmljZTogQ2hlY2tvdXRTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGNoZWNrb3V0U2VydmljZSk7XG4gICAgfVxuXG4gICAgZ2V0U2hpcG1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgICAvLyB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuc2hpcG1lbnRNZXRob2RzQXBpKCkpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgIC8vICAgICByZXMgPT4gdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KHRoaXMucmVzcG9uc2VUb0xpc3QocmVzKSlcbiAgICAgICAgLy8gKS5jYXRjaChlcnIgPT4gdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KFtdKSlcbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5nZXRFcnJvck5vdEhhbmRsZXIodGhpcy5zaGlwbWVudE1ldGhvZHNBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMucmVzcG9uc2VUb0xpc3QocmVzKSB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZHNTdWJqZWN0Lm5leHQobGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kc1N1YmplY3QubmV4dChbXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KFtdKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldFNoaXBwaW5nT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29uc3RzLmdldENoZWNrb3V0VmlldygpICE9PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5nZXRFcnJvck5vdEhhbmRsZXIodGhpcy5zaGlwcGluZ09wdGlvbnNBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IHRoaXMubm9ybWFsaXplU2hpcHBpbmdPcHRpb25zKHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KGxpc3QubWFwKGVudHJ5ID0+IGVudHJ5Lm1ldGhvZCkuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kc1N1YmplY3QubmV4dChbXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICApLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMubWV0aG9kc1N1YmplY3QubmV4dChbXSk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICBzZXRNZXRob2QgPSBhc3luYyAobWV0aG9kKSA9PiB7XG4gICAgICAgIC8vIERlc2hhYmlsaXRhciB0b2RvcyBsb3MgYm90b25lc1xuICAgICAgICB0aGlzLmJ1dHRvbnNEaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5jb3N0c1N1YmplY3QubmV4dChbXSk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoeyBkb2luZzogdHJ1ZSwgb2s6IGZhbHNlLCBkYXRhOiB7IG1ldGhvZCB9IH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnB1dFNoaXBtZW50KCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVBc29jaWF0ZWREYXRhKHJlcyk7XG4gICAgICAgICAgICB0aGlzLm9yZGVyID0gcmVzO1xuICAgICAgICAgICAgY29uc3QgY29zdHMgPSBhd2FpdCB0aGlzLmdldENhbGN1bGF0ZWRDb3N0cygpO1xuICAgICAgICAgICAgdGhpcy5tb2RpZnlDb3N0c1Jlc3BvbnNlKGNvc3RzLCB0aGlzLmdldFVzZXJEYXRhKCk/LnNoaXBwaW5nQWRkcmVzcz8ucG9zdGNvZGUsIG1ldGhvZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCgnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLmVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIEhhYmlsaXRhciB0b2RvcyBsb3MgYm90b25lc1xuICAgICAgICAgICAgdGhpcy5idXR0b25zRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldE1ldGhvZE9ubHkgPSBhc3luYyAobWV0aG9kKSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoeyBkb2luZzogdHJ1ZSwgb2s6IGZhbHNlLCBkYXRhOiB7IG1ldGhvZCB9IH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5wdXRTaGlwbWVudCgpO1xuICAgICAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UudXBkYXRlQXNvY2lhdGVkRGF0YShyZXMpO1xuICAgICAgICAgICAgdGhpcy5vcmRlciA9IHJlcztcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0U2hpcHBpbmdPcHRpb24gPSBhc3luYyAoXG4gICAgICAgIHBheWxvYWQ6IHsgbWV0aG9kOiBzdHJpbmc7IG9wdGlvbjogc3RyaW5nOyBjb250cmFjdDogc3RyaW5nOyBwcmljZTogbnVtYmVyOyBvcmlnaW5hbFByaWNlPzogbnVtYmVyIHwgbnVsbCB9LFxuICAgICAgICBzdGVwRGF0YTogYW55ID0gcGF5bG9hZFxuICAgICkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc2FuaXRpemVkUGF5bG9hZCA9IHRoaXMuc3RyaXBGcm9udGVuZE9ubHlTaGlwcGluZ0ZpZWxkcyhwYXlsb2FkKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5wdXRTaGlwcGluZ09wdGlvbkFwaSgpLCBzYW5pdGl6ZWRQYXlsb2FkKS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnVwZGF0ZUFzb2NpYXRlZERhdGEocmVzKTtcbiAgICAgICAgICAgIHRoaXMub3JkZXIgPSByZXM7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGVwUmVhZHkoc3RlcERhdGEsIHJlcyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCgnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLmVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHV0U2hpcG1lbnQgPSAoKSA9PiB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMucHV0U2hpcG1lbnRBcGkoKSwgeyBtZXRob2Q6IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCkuZGF0YS5tZXRob2QgfSkudG9Qcm9taXNlKCk7XG5cbiAgICBnZXRDYWxjdWxhdGVkQ29zdHMgPSAoKSA9PiB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuY2FsY3VsYXRlZENvc3RzQXBpKCkpLnRvUHJvbWlzZSgpO1xuXG4gICAgc2V0Q29udHJhY3QgPSBhc3luYyAoY29udHJhY3Q6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBzdGVwRGF0YSA9IHsgLi4uY29udHJhY3QsIC4uLnRoaXMub3RoZXJQYXJhbXNGb3JDb250cmFjdChjb250cmFjdCkgfTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc3RyaXBGcm9udGVuZE9ubHlTaGlwcGluZ0ZpZWxkcyhzdGVwRGF0YSk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMucHV0Q29udHJhY3RBcGkoKSwgZGF0YSlcbiAgICAgICAgLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICBvcmRlciA9PiB7XG4gICAgICAgICAgICAgICAvLyAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnc2hpcHBpbmdfaW5mbycsIG9yZGVyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGVwUmVhZHkoc3RlcERhdGEsIG9yZGVyKX0sXG4gICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZWplY3QobmV3IEVycm9yKGVyci5lcnJvcikpKVxuICAgICAgICAgICAgfVxuICAgICAgICApLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKGVycikpXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uICYmIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLy8gVVRJTFNcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSByZXNwb25zZSBEZSBhcGkgZGUgc29saWNpdHVkIGRlIGNvc3RvcyBwb3IgbWV0b2RvIGRlIGVudsOtbyBzZWxlY2Npb25hZG9cbiAgICAgKiBAcGFyYW0gcG9zdF9jb2RlIEluZGljYWRvIGVuIGVsIHBhc28gZGUgQWRkcmVzc2luZyAoZGF0b3MgcGVyc29uYWxlcyB5IGRlIGZhY3R1cmFjacOzbilcbiAgICAgKiBAcGFyYW0gbWV0aG9kIE1ldG9kbyBkZSBlbnbDrW8gc2VsZWNjaW9uYWRvXG4gICAgICovXG4gICAgbW9kaWZ5Q29zdHNSZXNwb25zZSA9IGFzeW5jIChyZXNwb25zZSwgcG9zdF9jb2RlLCBtZXRob2QpID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2UubXVsdGlwbGVQcmljZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgdGhpcy5jb3N0c1N1YmplY3QubmV4dChbXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29zdHMgPSBhd2FpdCB0aGlzLmJ1aWxkQ29zdHNGcm9tUmVzcG9uc2UocmVzcG9uc2UsIG1ldGhvZCk7XG4gICAgICAgIHRoaXMuY29zdHNTdWJqZWN0Lm5leHQoY29zdHMpO1xuICAgIH1cblxuICAgIGJ1aWxkQ29zdHNGcm9tUmVzcG9uc2UgPSBhc3luYyAocmVzcG9uc2UsIG1ldGhvZCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZT8ubXVsdGlwbGVQcmljZXMgfHwgW107XG4gICAgICAgIGxldCBicmFuY2hfZGVsaXZlcnkgPSByZXN1bHQuZmluZEluZGV4KHN1Ym1ldGhvZCA9PiBzdWJtZXRob2QubmFtZSA9PSAnYnJhbmNoX2RlbGl2ZXJ5Jyk7XG4gICAgICAgIGlmIChicmFuY2hfZGVsaXZlcnkgIT0gLTEpIHtcbiAgICAgICAgICAgIHJlc3VsdFticmFuY2hfZGVsaXZlcnldLmNvbnRyYWN0cyA9IHJlc3VsdFticmFuY2hfZGVsaXZlcnldLmNvbnRyYWN0cy5tYXAoY29udHJhY3QgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDb250cmFjdCA9IHRoaXMubm9ybWFsaXplU2hpcHBpbmdDb250cmFjdChjb250cmFjdCk7XG4gICAgICAgICAgICAgICAgbGV0IGJyYW5jaF9wcm9wZXJ0eSA9IGNvbnRyYWN0LmJyYW5jaF9wcm9wZXJ0eSB8fCB7fTtcbiAgICAgICAgICAgICAgICBsZXQgYWRkcmVzc19kYXRhID0gYnJhbmNoX3Byb3BlcnR5LmFkZHJlc3MgfHwge307XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJhY3Q6ICdicmFuY2hfZGVsaXZlcnknLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkQ29udHJhY3QubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcHJpY2U6IG5vcm1hbGl6ZWRDb250cmFjdC5wcmljZSxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxQcmljZTogbm9ybWFsaXplZENvbnRyYWN0Lm9yaWdpbmFsUHJpY2UsXG4gICAgICAgICAgICAgICAgICAgIC4uLmFkZHJlc3NfZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYnJhbmNoX3Byb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBjb21wdXRlZDogKGFkZHJlc3NfZGF0YS5zdHJlZXQgfHwgJycpICsgJyBOwrAgJyArIChhZGRyZXNzX2RhdGEubnVtYmVyIHx8ICcnKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kLmluY2x1ZGVzKCdwaWNrdXBfc3RvcmUnKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmVzID0gYXdhaXQgdGhpcy5zdG9yZXNTZXJ2aWNlLnN0b3Jlcy5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgaWYgKHN0b3JlcyAmJiBzdG9yZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmZvckVhY2gocGlja3VwX3N0b3JlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGlja3VwX3N0b3JlLmNvbnRyYWN0cy5mb3JFYWNoKGNvbnRyYWN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRfc3RvcmUgPSBzdG9yZXMuZmluZChzdG9yZSA9PiBzdG9yZS5jb2RlID09IGNvbnRyYWN0Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50X3N0b3JlKSBjb250cmFjdC5kZXRhaWwgPSAnU2luIGluZm9ybWFjacOzbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbnRyYWN0LmRldGFpbCA9IGN1cnJlbnRfc3RvcmUubmFtZSArICcgLSAnICsgY3VycmVudF9zdG9yZS5hZGRyZXNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyYWN0O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRDb3N0c0Zvck1ldGhvZCA9IGFzeW5jIChtZXRob2QpID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dCh7IGRvaW5nOiB0cnVlLCBvazogZmFsc2UsIGRhdGE6IHsgbWV0aG9kIH0gfSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucHV0U2hpcG1lbnQoKTtcbiAgICAgICAgcmVzICYmIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnVwZGF0ZUFzb2NpYXRlZERhdGEocmVzKTtcbiAgICAgICAgY29uc3QgY29zdHMgPSBhd2FpdCB0aGlzLmdldENhbGN1bGF0ZWRDb3N0cygpO1xuICAgICAgICBpZiAoIWNvc3RzIHx8ICFjb3N0cy5tdWx0aXBsZVByaWNlcykge1xuICAgICAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCgnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYnVpbGRDb3N0c0Zyb21SZXNwb25zZShjb3N0cywgbWV0aG9kKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVRvTGlzdCA9IChyZXNwb25zZSkgPT5cbiAgICAgICAgKHJlc3BvbnNlLnNoaXBtZW50cyAmJiByZXNwb25zZS5zaGlwbWVudHMubGVuZ3RoID4gMCkgJiYgT2JqZWN0LmtleXMocmVzcG9uc2Uuc2hpcG1lbnRzWzBdLm1ldGhvZHMpLm1hcChrZXkgPT4gcmVzcG9uc2Uuc2hpcG1lbnRzWzBdLm1ldGhvZHNba2V5XSk7XG5cbiAgICByZXNwb25zZVRvU2hpcHBpbmdPcHRpb25zID0gKHJlc3BvbnNlKSA9PlxuICAgICAgICAocmVzcG9uc2Uuc2hpcG1lbnRzICYmIHJlc3BvbnNlLnNoaXBtZW50cy5sZW5ndGggPiAwKSAmJiBPYmplY3Qua2V5cyhyZXNwb25zZS5zaGlwbWVudHNbMF0ubWV0aG9kcykubWFwKGtleSA9PiByZXNwb25zZS5zaGlwbWVudHNbMF0ubWV0aG9kc1trZXldKTtcblxuICAgIHByaXZhdGUgYXN5bmMgbm9ybWFsaXplU2hpcHBpbmdPcHRpb25zKHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLnJlc3BvbnNlVG9TaGlwcGluZ09wdGlvbnMocmVzcG9uc2UpIHx8IFtdO1xuICAgICAgICBsZXQgc3RvcmVzID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBsaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBtZXRob2RDb2RlID0gZW50cnk/Lm1ldGhvZD8uY29kZSB8fCAnJztcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBlbnRyeT8ub3B0aW9ucyB8fCBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cmFjdHMgPSBvcHRpb24/LmNvbnRyYWN0cyB8fCBbXTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uPy5uYW1lID09PSAnYnJhbmNoX2RlbGl2ZXJ5Jykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24uY29udHJhY3RzID0gY29udHJhY3RzLm1hcChjb250cmFjdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkQ29udHJhY3QgPSB0aGlzLm5vcm1hbGl6ZVNoaXBwaW5nQ29udHJhY3QoY29udHJhY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJhbmNoID0gY29udHJhY3Q/LmJyYW5jaF9wcm9wZXJ0eSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBicmFuY2guYWRkcmVzcyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVldCA9IGFkZHJlc3Muc3RyZWV0IHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gYWRkcmVzcy5udW1iZXIgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wdXRlZCA9IFtzdHJlZXQsIG51bWJlciA/IGBOwrAgJHtudW1iZXJ9YCA6ICcnXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jb250cmFjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ub3JtYWxpemVkQ29udHJhY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5icmFuY2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhY3Q6IGNvbnRyYWN0Py5jb250cmFjdCB8fCBvcHRpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb250cmFjdD8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogbm9ybWFsaXplZENvbnRyYWN0LnByaWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUHJpY2U6IG5vcm1hbGl6ZWRDb250cmFjdC5vcmlnaW5hbFByaWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkOiBjb21wdXRlZCB8fCBjb250cmFjdC5jb21wdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtZXRob2RDb2RlLmluY2x1ZGVzKCdwaWNrdXBfc3RvcmUnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0b3Jlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVzID0gYXdhaXQgdGhpcy5zdG9yZXNTZXJ2aWNlLnN0b3Jlcy5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdG9yZXMgJiYgc3RvcmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmNvbnRyYWN0cyA9IGNvbnRyYWN0cy5tYXAoY29udHJhY3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdG9yZSA9IHN0b3Jlcy5maW5kKHN0b3JlID0+IHN0b3JlLmNvZGUgPT0gY29udHJhY3QubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50U3RvcmUpIHJldHVybiB7IC4uLmNvbnRyYWN0LCBkZXRhaWw6ICdTaW4gaW5mb3JtYWNpw7NuJyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmNvbnRyYWN0LCBkZXRhaWw6IGN1cnJlbnRTdG9yZS5uYW1lICsgJyAtICcgKyBjdXJyZW50U3RvcmUuYWRkcmVzcyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVTaGlwcGluZ0NvbnRyYWN0KGNvbnRyYWN0OiBTaGlwcGluZ09wdGlvbkNvbnRyYWN0IHwgYW55KTogU2hpcHBpbmdPcHRpb25Db250cmFjdCB7XG4gICAgICAgIGNvbnN0IHByaWNlID0gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5ub3JtYWxpemVQcmljZVZhbHVlKGNvbnRyYWN0Py5wcmljZSk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUHJpY2UgPSB0aGlzLnNoaXBwaW5nUHJpY2VEaXNwbGF5Lm5vcm1hbGl6ZVByaWNlVmFsdWUoY29udHJhY3Q/Lm9yaWdpbmFsUHJpY2UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29udHJhY3QsXG4gICAgICAgICAgICBwcmljZTogcHJpY2UgIT09IG51bGwgPyBwcmljZSA6IGNvbnRyYWN0Py5wcmljZSxcbiAgICAgICAgICAgIG9yaWdpbmFsUHJpY2U6IG9yaWdpbmFsUHJpY2UgIT09IG51bGwgPyBvcmlnaW5hbFByaWNlIDogY29udHJhY3Q/Lm9yaWdpbmFsUHJpY2VcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0cmlwRnJvbnRlbmRPbmx5U2hpcHBpbmdGaWVsZHM8VCBleHRlbmRzIHsgb3JpZ2luYWxQcmljZT86IGFueSB9PihkYXRhOiBUKTogT21pdDxULCAnb3JpZ2luYWxQcmljZSc+IHtcbiAgICAgICAgY29uc3QgeyBvcmlnaW5hbFByaWNlLCAuLi5yZXN0IH0gPSBkYXRhIHx8ICh7fSBhcyBUKTtcbiAgICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgfVxuXG4gICAgb3RoZXJQYXJhbXNGb3JDb250cmFjdCA9IChjb250cmFjdCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hpcHBpbmdfbWV0aG9kX2NvbnRyYWN0OlxuICAgICAgICAgICAgICAgIGNvbnRyYWN0LnNoaXBwaW5nX21ldGhvZF9jb250cmFjdFxuICAgICAgICAgICAgICAgICAgICA/IGNvbnRyYWN0LnNoaXBwaW5nX21ldGhvZF9jb250cmFjdFxuICAgICAgICAgICAgICAgICAgICA6IGNvbnRyYWN0LmNvbnRyYWN0ICsgJ18nICsgY29udHJhY3QubmFtZSxcbiAgICAgICAgICAgIHNoaXBwaW5nX21ldGhvZF9icmFuY2hfY29kZTpcbiAgICAgICAgICAgICAgICBjb250cmFjdC5zaGlwcGluZ19tZXRob2RfYnJhbmNoX2NvZGVcbiAgICAgICAgICAgICAgICAgICAgPyBjb250cmFjdC5zaGlwcGluZ19tZXRob2RfYnJhbmNoX2NvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAoY29udHJhY3QuY29udHJhY3QgJiYgY29udHJhY3QuY29udHJhY3QgPT0gXCJicmFuY2hfZGVsaXZlcnlcIikgPyBjb250cmFjdC5udW1iZXIgOiBjb250cmFjdC5uYW1lXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRCcmFuY2hPZmZpY2VzID0gKG1ldGhvZCkgPT4gdGhpcy5jb25uZWN0aW9uLmdldE91dHNpZGVyKHRoaXMudHJhbnNmb3JtZXIuZ2V0QXBpKG1ldGhvZC50b0xvd2VyQ2FzZSgpKSkudG9Qcm9taXNlKCk7XG5cbiAgICBmb3JtYXRVbm5lY2VzYXJ5RG9jdW1lbnQgPSAoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YS5zaGlwcGluZ0FkZHJlc3M/LmRvY3VtZW50TnVtYmVyPy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgZGF0YS5zaGlwcGluZ0FkZHJlc3MuZG9jdW1lbnROdW1iZXIgPSAnMDAwMDAwMDAnXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuc2hpcHBpbmdBZGRyZXNzPy5kb2N1bWVudFR5cGU/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBkYXRhLnNoaXBwaW5nQWRkcmVzcy5kb2N1bWVudFR5cGUgPSAnWFhYJ1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmJpbGxpbmdBZGRyZXNzICYmIGRhdGEuYmlsbGluZ0FkZHJlc3MuZG9jdW1lbnROdW1iZXI/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBkYXRhLmJpbGxpbmdBZGRyZXNzLmRvY3VtZW50TnVtYmVyID0gJzAwMDAwMDAwJ1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmJpbGxpbmdBZGRyZXNzICYmIGRhdGEuYmlsbGluZ0FkZHJlc3MuZG9jdW1lbnRUeXBlPy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgZGF0YS5iaWxsaW5nQWRkcmVzcy5kb2N1bWVudFR5cGUgPSAnWFhYJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgfVxufVxuIl19