ng-easycommerce 0.0.691 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +17 -0
  2. package/assets/ec-i18n/ct.json +3 -0
  3. package/assets/ec-i18n/en.json +3 -0
  4. package/assets/ec-i18n/es.json +3 -0
  5. package/assets/ec-i18n/fr.json +3 -0
  6. package/assets/ec-i18n/gl.json +3 -0
  7. package/assets/ec-i18n/pr.json +3 -0
  8. package/bundles/ng-easycommerce.umd.js +1219 -653
  9. package/bundles/ng-easycommerce.umd.js.map +1 -1
  10. package/bundles/ng-easycommerce.umd.min.js +1 -1
  11. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  12. package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +103 -5
  13. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +22 -8
  14. package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +34 -11
  15. package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +18 -7
  16. package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +12 -3
  17. package/esm2015/lib/interfaces/cart-item.js +1 -1
  18. package/esm2015/lib/interfaces/cart-totals.js +1 -0
  19. package/esm2015/lib/interfaces/channel.js +1 -0
  20. package/esm2015/lib/interfaces/checkout-data.js +1 -1
  21. package/esm2015/lib/interfaces/product.js +1 -1
  22. package/esm2015/lib/services/account/orders.service.js +18 -3
  23. package/esm2015/lib/services/cart.service.js +138 -23
  24. package/esm2015/lib/services/checkout/checkout.service.js +34 -4
  25. package/esm2015/lib/utils/order-util.service.js +99 -7
  26. package/esm2015/lib/utils/price-presentation.service.js +127 -0
  27. package/esm2015/public-api.js +2 -1
  28. package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +111 -5
  29. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +35 -8
  30. package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +36 -13
  31. package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +18 -7
  32. package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +12 -3
  33. package/esm5/lib/interfaces/cart-item.js +1 -1
  34. package/esm5/lib/interfaces/cart-totals.js +1 -0
  35. package/esm5/lib/interfaces/channel.js +1 -0
  36. package/esm5/lib/interfaces/checkout-data.js +1 -1
  37. package/esm5/lib/interfaces/product.js +1 -1
  38. package/esm5/lib/services/account/orders.service.js +18 -3
  39. package/esm5/lib/services/cart.service.js +154 -23
  40. package/esm5/lib/services/checkout/checkout.service.js +30 -4
  41. package/esm5/lib/utils/order-util.service.js +99 -7
  42. package/esm5/lib/utils/price-presentation.service.js +130 -0
  43. package/esm5/public-api.js +2 -1
  44. package/fesm2015/ng-easycommerce.js +1181 -652
  45. package/fesm2015/ng-easycommerce.js.map +1 -1
  46. package/fesm5/ng-easycommerce.js +1219 -654
  47. package/fesm5/ng-easycommerce.js.map +1 -1
  48. package/lib/ec-component/account-ec/order-ec/order-ec.component.d.ts +15 -0
  49. package/lib/ec-component/cart-ec/cart-ec.component.d.ts +8 -1
  50. package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +1 -1
  51. package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +2 -2
  52. package/lib/interfaces/cart-item.d.ts +27 -2
  53. package/lib/interfaces/cart-totals.d.ts +19 -0
  54. package/lib/interfaces/channel.d.ts +15 -0
  55. package/lib/interfaces/checkout-data.d.ts +2 -1
  56. package/lib/interfaces/product.d.ts +48 -1
  57. package/lib/services/account/orders.service.d.ts +5 -0
  58. package/lib/services/cart.service.d.ts +26 -5
  59. package/lib/utils/order-util.service.d.ts +22 -0
  60. package/lib/utils/price-presentation.service.d.ts +56 -0
  61. package/ng-easycommerce.metadata.json +1 -1
  62. package/package.json +1 -1
  63. package/public-api.d.ts +3 -0
@@ -147,10 +147,22 @@ var CartEcComponent = /** @class */ (function (_super) {
147
147
  * ```
148
148
  */
149
149
  _this.getItemEffectiveDiscount = function (item) { var _a; return Number(((_a = _this.cartService.getItemPricing(item)) === null || _a === void 0 ? void 0 : _a.effectiveDiscountPercent) || 0); };
150
- /** @param item Ítem del carrito. @returns Subtotal actual del renglón según backend. */
151
- _this.getDisplayedItemTotal = function (item) { var _a, _b; return Number((_b = (_a = item) === null || _a === void 0 ? void 0 : _a.total, (_b !== null && _b !== void 0 ? _b : 0))); };
150
+ /**
151
+ * Subtotal actual del renglón.
152
+ *
153
+ * El backend nuevo informa `item.subtotal` sin impuestos ni descuentos
154
+ * generales de orden. Las respuestas legacy continúan usando `item.total`.
155
+ */
156
+ _this.getDisplayedItemTotal = function (item) {
157
+ return _this.cartService.getCartItemPricePresentation(item, _this.channel).subtotal;
158
+ };
152
159
  /** @param item Ítem del carrito. @returns `true` si el backend informó promociones unitarias. */
153
160
  _this.hasUnitPromotions = function (item) { var _a; return Boolean((_a = _this.cartService.getItemPricing(item)) === null || _a === void 0 ? void 0 : _a.hasUnitPromotions); };
161
+ /** @param items Ítems del carrito. @returns `true` si al menos un ítem tiene promociones unitarias. */
162
+ _this.hasAnyUnitPromotions = function (items) {
163
+ if (items === void 0) { items = []; }
164
+ return items.some(function (item) { return _this.hasUnitPromotions(item); });
165
+ };
154
166
  /** @param item Ítem del carrito. @returns `true` si el resumen activo pertenece a ese ítem. */
155
167
  _this.isUnitPromotionSummaryOpen = function (item) { var _a; return _this.activeUnitPromotionItemId === ((_a = item) === null || _a === void 0 ? void 0 : _a.item_id); };
156
168
  /**
@@ -250,15 +262,29 @@ var CartEcComponent = /** @class */ (function (_super) {
250
262
  event.stopPropagation();
251
263
  };
252
264
  /** @param item Ítem del carrito. @returns Precio unitario base (`saleprice` o `price`). */
253
- _this.getOriginalUnitPrice = function (item) { var _a; return Number(((_a = _this.cartService.getItemPricing(item)) === null || _a === void 0 ? void 0 : _a.basePrice) || 0); };
265
+ _this.getOriginalUnitPrice = function (item) {
266
+ var _a;
267
+ var presentation = _this.cartService.getCartItemPricePresentation(item, _this.channel);
268
+ return presentation.source === 'linePricing'
269
+ ? presentation.unitPrice
270
+ : Number(((_a = _this.cartService.getItemPricing(item)) === null || _a === void 0 ? void 0 : _a.basePrice) || 0);
271
+ };
254
272
  /** @param item Ítem del carrito. @returns Precio tachado legacy o `0`. */
255
- _this.getStrikeThroughUnitPrice = function (item) { var _a; return Number(((_a = _this.cartService.getItemPricing(item)) === null || _a === void 0 ? void 0 : _a.strikePrice) || 0); };
273
+ _this.getStrikeThroughUnitPrice = function (item) {
274
+ return Number(_this.cartService.getCartItemPricePresentation(item, _this.channel).previous || 0);
275
+ };
256
276
  /** @param item Ítem del carrito. @returns Suma de promociones unitarias aplicadas. */
257
- _this.getUnitPromotionTotal = function (item) { var _a; return Number(((_a = _this.cartService.getItemPricing(item)) === null || _a === void 0 ? void 0 : _a.unitPromotionTotal) || 0); };
277
+ _this.getUnitPromotionTotal = function (item) {
278
+ return _this.cartService.getCartItemPricePresentation(item, _this.channel).discount;
279
+ };
258
280
  /** @param item Ítem del carrito. @returns Precio final unitario luego de promociones. */
259
- _this.getFinalUnitPrice = function (item) { var _a; return Number(((_a = _this.cartService.getItemPricing(item)) === null || _a === void 0 ? void 0 : _a.finalPrice) || 0); };
281
+ _this.getFinalUnitPrice = function (item) {
282
+ return _this.cartService.getCartItemPricePresentation(item, _this.channel).unitPrice;
283
+ };
260
284
  /** @param item Ítem del carrito. @returns Precio principal a mostrar junto al trigger. */
261
- _this.getDisplayedUnitPrice = function (item) { var _a; return Number(((_a = _this.cartService.getItemPricing(item)) === null || _a === void 0 ? void 0 : _a.finalPrice) || 0); };
285
+ _this.getDisplayedUnitPrice = function (item) {
286
+ return _this.cartService.getCartItemPricePresentation(item, _this.channel).unitPrice;
287
+ };
262
288
  /** @param item Ítem del carrito. @returns `true` si debe mostrarse el precio base junto al final. */
263
289
  _this.shouldShowOriginalUnitPrice = function (item) {
264
290
  return _this.hasUnitPromotions(item) && _this.getFinalUnitPrice(item) !== _this.getOriginalUnitPrice(item);
@@ -425,6 +451,7 @@ var CartEcComponent = /** @class */ (function (_super) {
425
451
  // console.log(this.cartService.getTaxes());
426
452
  this.channelConfigService.channelConfig$.subscribe(function (channel) {
427
453
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
454
+ _this.channel = channel || {};
428
455
  _this.hidePrices = (_b = (_a = channel) === null || _a === void 0 ? void 0 : _a.hidePrices, (_b !== null && _b !== void 0 ? _b : false));
429
456
  _this.hideDiscounts = (_d = (_c = channel) === null || _c === void 0 ? void 0 : _c.hideDiscounts, (_d !== null && _d !== void 0 ? _d : false));
430
457
  _this.hideTaxes = (_f = (_e = channel) === null || _e === void 0 ? void 0 : _e.hideTaxes, (_f !== null && _f !== void 0 ? _f : false));
@@ -802,4 +829,4 @@ var CartEcComponent = /** @class */ (function (_super) {
802
829
  return CartEcComponent;
803
830
  }(ComponentHelper));
804
831
  export { CartEcComponent };
805
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25GLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBU3hEO0lBQXFDLG1DQUFlO0lBMkJoRCx5QkFDVyxXQUF3QixFQUN4QixXQUF3QixFQUNyQixNQUFpQixFQUNwQixlQUFnQyxFQUNoQyxNQUFjLEVBQ2QsWUFBNEIsRUFDekIsYUFBMkIsRUFDOUIsaUJBQW9DLEVBQ3BDLG9CQUEwQyxFQUN2QyxHQUFl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Q0FBQztJQW9ERCwrQ0FBcUIsR0FBckIsVUFBc0IsU0FBaUIsRUFBRSxLQUFhO1FBQ2xELElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUN4RixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFekUsSUFBSSxlQUFlLEdBQU0sa0JBQWtCLFVBQU8sQ0FBQztRQUNuRCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDOztnQkE5c0J1QixXQUFXO2dCQUNYLFdBQVc7Z0JBQ2IsU0FBUztnQkFDSCxlQUFlO2dCQUN4QixNQUFNO2dCQUNBLGNBQWM7Z0JBQ1YsWUFBWTtnQkFDWCxpQkFBaUI7Z0JBQ2Qsb0JBQW9CO2dCQUNsQyxVQUFVOztJQTBQN0I7UUFEQyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7OERBUTlCO0lBSUQ7UUFEQyxZQUFZLENBQUMsZUFBZSxDQUFDOzZEQUk3QjtJQUlEO1FBREMsWUFBWSxDQUFDLGVBQWUsQ0FBQzs2REFPN0I7SUF2VFEsZUFBZTtRQUwzQixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsYUFBYTtZQUN2QixZQUF1Qzs7U0FFMUMsQ0FBQztPQUNXLGVBQWUsQ0Fnd0IzQjtJQUFELHNCQUFDO0NBQUEsQUFod0JELENBQXFDLGVBQWUsR0Fnd0JuRDtTQWh3QlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVGVtcGxhdGVSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsL2JzLW1vZGFsLXJlZi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jb3JlLmNvbnN0c1wiO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdHMuc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZVwiO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQWRkcmVzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9hZGRyZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlby5zZXJ2aWNlJztcbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1jYXJ0LWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FydC1lYy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FydC1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhcnRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cblxuICAgIHB1YmxpYyB2YXJpYW50c1RvU2hvdzogc3RyaW5nW10gPSBbJ1RBTExFJywgJ0NPTE9SJ107XG4gICAgcHVibGljIGlzTG9nZ2VkSW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgbWVkaWFVcmwgPSAnJztcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsO1xuICAgIHB1YmxpYyBwcm9tb3Rpb25zID0gW107XG4gICAgcHVibGljIGl0ZW1zOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHJpdmF0ZSBjYXJnYW5kbzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjaGFubmVsOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgdXBkYXRlU3RvY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZXhpdFVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaWRlVGF4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgc2hvd1RheExlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjYXJ0TG9hZGluZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBlbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzdW1tYXJ5UHJvbW90aW9uQW1vdW50JDtcbiAgICBwdWJsaWMgaGFzQXBwbGllZENvdXBvbiQ7XG4gICAgcHVibGljIGFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBhY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIHB1YmxpYyBzdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3ZlciA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgc2VvOiBTZW9TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgICAgIHRoaXMubWVkaWFVcmwgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpO1xuICAgICAgICB0aGlzLnN1bW1hcnlQcm9tb3Rpb25BbW91bnQkID0gdGhpcy5jYXJ0U2VydmljZS5nZXRTdW1tYXJ5UHJvbW90aW9uQW1vdW50KCk7XG4gICAgICAgIHRoaXMuaGFzQXBwbGllZENvdXBvbiQgPSB0aGlzLmNhcnRTZXJ2aWNlLmhhc0FwcGxpZWRDb3Vwb24oKTtcblxuICAgIH1cblxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlTG9nZ2VkSW4oKSB7XG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMCk7XG4gICAgICAgIHRoaXMudXBkYXRlVW5pdFByb21vdGlvblZpZXdwb3J0TW9kZSgpO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnByb21vdGlvbnMuc3Vic2NyaWJlKHByb21vdGlvbnMgPT4gdGhpcy5wcm9tb3Rpb25zID0gcHJvbW90aW9ucyk7XG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKHRoaXMuY2FydFNlcnZpY2UuZ2V0VGF4ZXMoKSk7XG5cbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhpZGVQcmljZXMgPSBjaGFubmVsPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gY2hhbm5lbD8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRheGVzID0gY2hhbm5lbD8uaGlkZVRheGVzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93VGF4TGVnZW5kID0gY2hhbm5lbD8uc2hvd1RheExlZ2VuZCA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSBjaGFubmVsPy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA/PyBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGlkZVByaWNlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZy5zdWJzY3JpYmUoaXNMb2FkaW5nID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FydExvYWRpbmcgPSBpc0xvYWRpbmc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRTZW8oKTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG5cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNhcnRTZW8gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNpdGVOYW1lID0gdGhpcy5zZW8uZ2V0U2l0ZU5hbWUoKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0VGl0bGUoYENhcnJpdG8gfCAke3NpdGVOYW1lfWApO1xuICAgICAgICB0aGlzLnNlby5zZXREZXNjcmlwdGlvbihgUmV2aXPDoSBsb3MgcHJvZHVjdG9zIHNlbGVjY2lvbmFkb3MgeSBmaW5hbGl6w6EgdHUgY29tcHJhIGVuICR7c2l0ZU5hbWV9LmApO1xuICAgICAgICB0aGlzLnNlby5zZXRPZ1R5cGUoJ3dlYnNpdGUnKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0Tm9JbmRleCh0cnVlKTtcblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VvLnNldENhbm9uaWNhbCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252aWVydGUgdW4gbW9udG8gY3J1ZG8gYWwgZm9ybWF0byBkZWNpbWFsIGVzcGVyYWRvIHBvciBsYSBVSS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbW91bnQgTW9udG8gZW4gY2VudGF2b3MgbyBlbnRlcm8gY3J1ZG8uXG4gICAgICogQHJldHVybnMgTW9udG8gZGVjaW1hbC5cbiAgICAgKi9cbiAgICB0b0RlY2ltYWwgPSAoYW1vdW50KSA9PiB0aGlzLmNvbnN0cy50b0RlY2ltYWwoYW1vdW50KTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgUG9yY2VudGFqZSBkZSBkZXNjdWVudG8gbGVnYWN5IHBhcmEgZWwgYmFkZ2UgYCUgT0ZGYC4gKi9cbiAgICBnZXRJdGVtRGlzY291bnQgPSAoaXRlbSk6IG51bWJlciA9PiBOdW1iZXIodGhpcy5jYXJ0U2VydmljZS5nZXRJdGVtUHJpY2luZyhpdGVtKT8uZGlzY291bnRQZXJjZW50IHx8IDApO1xuXG4gICAgLyoqXG4gICAgICogRGV2dWVsdmUgZWwgcG9yY2VudGFqZSBlZmVjdGl2byB0b3RhbCBkZWwgw610ZW0sIGNvbnNpZGVyYW5kbyBwcm9tb2Npb25lcyB1bml0YXJpYXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by5cbiAgICAgKiBAcmV0dXJucyBQb3JjZW50YWplIGVudGVybyBjYWxjdWxhZG8gY29udHJhIGVsIHByZWNpbyBkZSByZWZlcmVuY2lhIGRlbCDDrXRlbS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogU2kgZXhpc3RlIHByZWNpbyB0YWNoYWRvLCBjb21wYXJhIGBmaW5hbFByaWNlYCBjb250cmEgYHN0cmlrZVByaWNlYC5cbiAgICAgKiBTaSBubyBleGlzdGUsIHVzYSBgYmFzZVByaWNlYCBjb21vIHJlZmVyZW5jaWEuXG4gICAgICogRXN0byBwZXJtaXRlIG1vc3RyYXIgdW4gYmFkZ2UgY29oZXJlbnRlIGN1YW5kbyBlbCBwcmVjaW8gdmlzaWJsZSB5YSBpbmNsdXllXG4gICAgICogZGVzY3VlbnRvcy9wcm9tb2Npb25lcyB1bml0YXJpYXMgYWRpY2lvbmFsZXMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogLy8gc3RyaWtlUHJpY2UgMjQwMDAwLCBmaW5hbFByaWNlIDQ1MDAwID0+IDgxXG4gICAgICogdGhpcy5nZXRJdGVtRWZmZWN0aXZlRGlzY291bnQoaXRlbSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0SXRlbUVmZmVjdGl2ZURpc2NvdW50ID0gKGl0ZW0pOiBudW1iZXIgPT4gTnVtYmVyKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/LmVmZmVjdGl2ZURpc2NvdW50UGVyY2VudCB8fCAwKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgU3VidG90YWwgYWN0dWFsIGRlbCByZW5nbMOzbiBzZWfDum4gYmFja2VuZC4gKi9cbiAgICBnZXREaXNwbGF5ZWRJdGVtVG90YWwgPSAoaXRlbSk6IG51bWJlciA9PiBOdW1iZXIoaXRlbT8udG90YWwgPz8gMCk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIGB0cnVlYCBzaSBlbCBiYWNrZW5kIGluZm9ybcOzIHByb21vY2lvbmVzIHVuaXRhcmlhcy4gKi9cbiAgICBoYXNVbml0UHJvbW90aW9ucyA9IChpdGVtKTogYm9vbGVhbiA9PiBCb29sZWFuKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/Lmhhc1VuaXRQcm9tb3Rpb25zKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgYHRydWVgIHNpIGVsIHJlc3VtZW4gYWN0aXZvIHBlcnRlbmVjZSBhIGVzZSDDrXRlbS4gKi9cbiAgICBpc1VuaXRQcm9tb3Rpb25TdW1tYXJ5T3BlbiA9IChpdGVtKTogYm9vbGVhbiA9PiB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQgPT09IGl0ZW0/Lml0ZW1faWQ7XG5cbiAgICAvKipcbiAgICAgKiBBYnJlIGVsIHJlc3VtZW4gZGVsIMOtdGVtIGFsIGVudHJhciBjb24gZWwgbW91c2UgZW4gZGVza3RvcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLlxuICAgICAqIEBwYXJhbSBhbmNob3IgRWxlbWVudG8gdXNhZG8gY29tbyBhbmNsYSB2aXN1YWwuXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgaGFuZGxlVW5pdFByb21vdGlvbk1vdXNlRW50ZXIgPSAoaXRlbSwgYW5jaG9yOiBIVE1MRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc3VwcG9ydHNVbml0UHJvbW90aW9uSG92ZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3BlblVuaXRQcm9tb3Rpb25TdW1tYXJ5KGl0ZW0sIGFuY2hvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2llcnJhIGVsIHJlc3VtZW4gYWwgc2FsaXIgY29uIGVsIG1vdXNlIGVuIGRlc2t0b3AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDDjXRlbSBhc29jaWFkbyBhbCByZXN1bWVuLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIGhhbmRsZVVuaXRQcm9tb3Rpb25Nb3VzZUxlYXZlID0gKGl0ZW0pOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRzVW5pdFByb21vdGlvbkhvdmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlVW5pdFByb21vdGlvblN1bW1hcnkoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWJyZSBlbCByZXN1bWVuIGRlIHByb21vY2lvbmVzIHVuaXRhcmlhcyBwYXJhIHVuIMOtdGVtIHB1bnR1YWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by5cbiAgICAgKiBAcGFyYW0gYW5jaG9yIEVsZW1lbnRvIGRlIHJlZmVyZW5jaWEgcGFyYSBwb3NpY2lvbmFtaWVudG8uXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgb3BlblVuaXRQcm9tb3Rpb25TdW1tYXJ5ID0gKGl0ZW0sIGFuY2hvcj86IEhUTUxFbGVtZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uSXRlbUlkID0gaXRlbT8uaXRlbV9pZCA/PyBudWxsO1xuICAgICAgICB0aGlzLnVwZGF0ZVVuaXRQcm9tb3Rpb25TdW1tYXJ5U3R5bGVzKGFuY2hvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2llcnJhIGVsIHJlc3VtZW4gYWN0aXZvLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gU2kgc2UgZW52w61hLCBzb2xvIGNpZXJyYSBjdWFuZG8gY29pbmNpZGUgY29uIGVsIMOtdGVtIGFjdGl2by5cbiAgICAgKiBAcmV0dXJucyBgdm9pZGBcbiAgICAgKi9cbiAgICBjbG9zZVVuaXRQcm9tb3Rpb25TdW1tYXJ5ID0gKGl0ZW0/KTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghaXRlbSB8fCB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQgPT09IGl0ZW0/Lml0ZW1faWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVW5pdFByb21vdGlvbkl0ZW1JZCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25TdW1tYXJ5U3R5bGVzID0ge307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbHRlcm5hIG1hbnVhbG1lbnRlIGxhIGFwZXJ0dXJhIGRlbCByZXN1bWVuIHBhcmEgdW4gw610ZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by5cbiAgICAgKiBAcGFyYW0gYW5jaG9yIEVsZW1lbnRvIGRlIHJlZmVyZW5jaWEuXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgcHVudGVyby5cbiAgICAgKiBAcmV0dXJucyBgdm9pZGBcbiAgICAgKi9cbiAgICB0b2dnbGVVbml0UHJvbW90aW9uU3VtbWFyeSA9IChpdGVtLCBhbmNob3I6IEhUTUxFbGVtZW50LCBldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmhhc1VuaXRQcm9tb3Rpb25zKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1VuaXRQcm9tb3Rpb25TdW1tYXJ5T3BlbihpdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVVuaXRQcm9tb3Rpb25TdW1tYXJ5KGl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcGVuVW5pdFByb21vdGlvblN1bW1hcnkoaXRlbSwgYW5jaG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW5lamEgZWwgY2xpY2svdGFwIHNvYnJlIGVsIHByZWNpbyBlbiBkaXNwb3NpdGl2b3Mgc2luIGhvdmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHBhcmFtIGFuY2hvciBFbGVtZW50byB1c2FkbyBjb21vIHRyaWdnZXIuXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZSBjbGljay90YXAuXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgaGFuZGxlVW5pdFByb21vdGlvblByaWNlQ2xpY2sgPSAoaXRlbSwgYW5jaG9yOiBIVE1MRWxlbWVudCwgZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRzVW5pdFByb21vdGlvbkhvdmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvZ2dsZVVuaXRQcm9tb3Rpb25TdW1tYXJ5KGl0ZW0sIGFuY2hvciwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2aXRhIHF1ZSBldmVudG9zIGRlbnRybyBkZWwgcmVzdW1lbiBzZSBwcm9wYWd1ZW4gYWwgZG9jdW1lbnRvLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IEV2ZW50byBkZWwgcHVudGVyby5cbiAgICAgKiBAcmV0dXJucyBgdm9pZGBcbiAgICAgKi9cbiAgICBzdG9wVW5pdFByb21vdGlvblN1bW1hcnlFdmVudCA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBQcmVjaW8gdW5pdGFyaW8gYmFzZSAoYHNhbGVwcmljZWAgbyBgcHJpY2VgKS4gKi9cbiAgICBnZXRPcmlnaW5hbFVuaXRQcmljZSA9IChpdGVtKTogbnVtYmVyID0+IE51bWJlcih0aGlzLmNhcnRTZXJ2aWNlLmdldEl0ZW1QcmljaW5nKGl0ZW0pPy5iYXNlUHJpY2UgfHwgMCk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFByZWNpbyB0YWNoYWRvIGxlZ2FjeSBvIGAwYC4gKi9cbiAgICBnZXRTdHJpa2VUaHJvdWdoVW5pdFByaWNlID0gKGl0ZW0pOiBudW1iZXIgPT5cbiAgICAgICAgTnVtYmVyKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/LnN0cmlrZVByaWNlIHx8IDApO1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBTdW1hIGRlIHByb21vY2lvbmVzIHVuaXRhcmlhcyBhcGxpY2FkYXMuICovXG4gICAgZ2V0VW5pdFByb21vdGlvblRvdGFsID0gKGl0ZW0pOiBudW1iZXIgPT5cbiAgICAgICAgTnVtYmVyKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/LnVuaXRQcm9tb3Rpb25Ub3RhbCB8fCAwKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgUHJlY2lvIGZpbmFsIHVuaXRhcmlvIGx1ZWdvIGRlIHByb21vY2lvbmVzLiAqL1xuICAgIGdldEZpbmFsVW5pdFByaWNlID0gKGl0ZW0pOiBudW1iZXIgPT4gTnVtYmVyKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/LmZpbmFsUHJpY2UgfHwgMCk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFByZWNpbyBwcmluY2lwYWwgYSBtb3N0cmFyIGp1bnRvIGFsIHRyaWdnZXIuICovXG4gICAgZ2V0RGlzcGxheWVkVW5pdFByaWNlID0gKGl0ZW0pOiBudW1iZXIgPT4gTnVtYmVyKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/LmZpbmFsUHJpY2UgfHwgMCk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIGB0cnVlYCBzaSBkZWJlIG1vc3RyYXJzZSBlbCBwcmVjaW8gYmFzZSBqdW50byBhbCBmaW5hbC4gKi9cbiAgICBzaG91bGRTaG93T3JpZ2luYWxVbml0UHJpY2UgPSAoaXRlbSk6IGJvb2xlYW4gPT5cbiAgICAgICAgdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSAmJiB0aGlzLmdldEZpbmFsVW5pdFByaWNlKGl0ZW0pICE9PSB0aGlzLmdldE9yaWdpbmFsVW5pdFByaWNlKGl0ZW0pO1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBgdHJ1ZWAgc2kgYWRlbcOhcyBkZWwgYmFzZSBwcmljZSBleGlzdGUgdGFjaGFkbyBsZWdhY3kuICovXG4gICAgc2hvdWxkU2hvd0xlZ2FjeVByaWNlT3JpZ2luID0gKGl0ZW0pOiBib29sZWFuID0+XG4gICAgICAgIHRoaXMuZ2V0U3RyaWtlVGhyb3VnaFVuaXRQcmljZShpdGVtKSA+IHRoaXMuZ2V0T3JpZ2luYWxVbml0UHJpY2UoaXRlbSk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIEV0aXF1ZXRhIGZpbmFsIGRlbCByZXN1bWVuLiAqL1xuICAgIGdldFVuaXRQcm9tb3Rpb25GaW5hbFByaWNlTGFiZWwgPSAoaXRlbSk6IHN0cmluZyA9PlxuICAgICAgICB0aGlzLmhhc1VuaXRQcm9tb3Rpb25zKGl0ZW0pID8gJ1ByZWNpbyBmaW5hbCcgOiAnUHJlY2lvIHVuaXRhcmlvJztcblxuICAgIC8qKlxuICAgICAqIEJ1c2NhIGRlbnRybyBkZSB1bmEgbGlzdGEgZWwgw610ZW0gcXVlIHRpZW5lIGFjdHVhbG1lbnRlIGVsIHJlc3VtZW4gYWJpZXJ0by5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtcyBMaXN0YSBkZSDDrXRlbXMgZGVsIGNhcnJpdG8uXG4gICAgICogQHJldHVybnMgw410ZW0gYWN0aXZvIG8gYG51bGxgLlxuICAgICAqL1xuICAgIGdldEFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtID0gKGl0ZW1zKSA9PlxuICAgICAgICBpdGVtcz8uZmluZChpdGVtID0+IGl0ZW0/Lml0ZW1faWQgPT09IHRoaXMuYWN0aXZlVW5pdFByb21vdGlvbkl0ZW1JZCkgfHwgbnVsbDtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgUHJvbW9jaW9uZXMgdW5pdGFyaWFzIGNydWRhcyBkZWwgYmFja2VuZC4gKi9cbiAgICBnZXRVbml0UHJvbW90aW9ucyA9IChpdGVtKTogYW55W10gPT4gQXJyYXkuaXNBcnJheShpdGVtPy51bml0UHJvbW90aW9ucykgPyBpdGVtLnVuaXRQcm9tb3Rpb25zIDogW107XG5cbiAgICAvKiogQ2llcnJhIGVsIHJlc3VtZW4gYWwgaGFjZXIgY2xpY2sgZnVlcmEgZW4gZGVza3RvcC4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycpXG4gICAgaGFuZGxlRG9jdW1lbnRDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRzVW5pdFByb21vdGlvbkhvdmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25TdW1tYXJ5U3R5bGVzID0ge307XG4gICAgfVxuXG4gICAgLyoqIFJlY2FsY3VsYSBlbCBtb2RvIGRlIGludGVyYWNjacOzbiB5IGNpZXJyYSBlbCByZXN1bWVuIGFsIGNhbWJpYXIgZWwgdmlld3BvcnQuICovXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gICAgaGFuZGxlV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVVuaXRQcm9tb3Rpb25WaWV3cG9ydE1vZGUoKTtcbiAgICAgICAgdGhpcy5jbG9zZVVuaXRQcm9tb3Rpb25TdW1tYXJ5KCk7XG4gICAgfVxuXG4gICAgLyoqIENpZXJyYSBlbCByZXN1bWVuIGVuIG1vYmlsZSBhbCBoYWNlciBzY3JvbGwgcGFyYSBldml0YXIgZGVzYWxpbmVhY2nDs24gdmlzdWFsLiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICAgIGhhbmRsZVdpbmRvd1Njcm9sbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3VwcG9ydHNVbml0UHJvbW90aW9uSG92ZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2VVbml0UHJvbW90aW9uU3VtbWFyeSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVjdGEgc2kgZWwgZGlzcG9zaXRpdm8gc29wb3J0YSBgaG92ZXJgIHJlYWwgeSBkZWJlIGNvbXBvcnRhcnNlIGNvbW8gZGVza3RvcC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlVW5pdFByb21vdGlvblZpZXdwb3J0TW9kZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3ZlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAmJiB0eXBlb2Ygd2luZG93Lm1hdGNoTWVkaWEgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICYmIHdpbmRvdy5tYXRjaE1lZGlhKCcoaG92ZXI6IGhvdmVyKSBhbmQgKHBvaW50ZXI6IGZpbmUpJykubWF0Y2hlc1xuICAgICAgICAgICAgJiYgd2luZG93LmlubmVyV2lkdGggPj0gNzY4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGEgZXN0aWxvcyBpbmxpbmUgcGFyYSBtYW50ZW5lciBlbCByZXN1bWVuIG1vYmlsZSBkZW50cm8gZGVsIHZpZXdwb3J0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGFuY2hvciBFbGVtZW50byB1c2FkbyBjb21vIGFuY2xhIHZpc3VhbC5cbiAgICAgKiBAcmV0dXJucyBgdm9pZGBcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVVuaXRQcm9tb3Rpb25TdW1tYXJ5U3R5bGVzID0gKGFuY2hvcj86IEhUTUxFbGVtZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRzVW5pdFByb21vdGlvbkhvdmVyIHx8ICFhbmNob3IgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVW5pdFByb21vdGlvblN1bW1hcnlTdHlsZXMgPSB7fTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0UGFkZGluZyA9IDEyO1xuICAgICAgICBjb25zdCByZWN0ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBlc3RpbWF0ZWRQb3B1cEhlaWdodCA9IDI2MDtcbiAgICAgICAgY29uc3QgbmV4dFRvcCA9IHJlY3QuYm90dG9tICsgODtcbiAgICAgICAgY29uc3QgbWF4VG9wID0gd2luZG93LmlubmVySGVpZ2h0IC0gZXN0aW1hdGVkUG9wdXBIZWlnaHQgLSB2aWV3cG9ydFBhZGRpbmc7XG4gICAgICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KHZpZXdwb3J0UGFkZGluZywgTWF0aC5taW4obmV4dFRvcCwgbWF4VG9wKSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyA9IHtcbiAgICAgICAgICAgIGxlZnQ6IGAke3ZpZXdwb3J0UGFkZGluZ31weGAsXG4gICAgICAgICAgICByaWdodDogYCR7dmlld3BvcnRQYWRkaW5nfXB4YCxcbiAgICAgICAgICAgIHRvcDogYCR7dG9wfXB4YCxcbiAgICAgICAgICAgIHdpZHRoOiAnYXV0bycsXG4gICAgICAgICAgICAnbWF4LXdpZHRoJzogJ25vbmUnLFxuICAgICAgICAgICAgJ21heC1oZWlnaHQnOiBgY2FsYygxMDB2aCAtICR7dG9wICsgdmlld3BvcnRQYWRkaW5nfXB4KWAsXG4gICAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgICAgcG9zaXRpb246ICdmaXhlZCdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWN0dWFsaXphckNhbnRpZGFkKGl0ZW06IGFueSwgY2FudGlkYWQ6IG51bWJlciB8IHN0cmluZywgc3RvY2s6IG51bWJlciwgaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2FydExvYWRpbmcpIHsgICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtdWx0aXBsZVF1YW50aXR5ID0gaXRlbS5wcm9kdWN0Py52YXJpYW50cyAmJiBpdGVtLnByb2R1Y3QudmFyaWFudHMubGVuZ3RoID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5IDogMDtcbiAgICAgICAgY29uc3Qgc3RlcCA9IG11bHRpcGxlUXVhbnRpdHkgJiYgbXVsdGlwbGVRdWFudGl0eSA+IDAgPyBtdWx0aXBsZVF1YW50aXR5IDogMTtcblxuICAgICAgICBsZXQgbmV3UXVhbnRpdHk6IG51bWJlcjtcblxuICAgICAgICBpZiAodHlwZW9mIGNhbnRpZGFkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBwYXJzZUludChjYW50aWRhZCwgMTApO1xuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ICUgc3RlcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LWJlLW11bHRpcGxlJywgeyBxdWFudGl0eTogc3RlcCB9KTtcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdRdWFudGl0eSA9IGNhbnRpZGFkO1xuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ICUgc3RlcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gTWF0aC5yb3VuZChuZXdRdWFudGl0eSAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGtlZXBTYW1lQ29tbWVudCA9IGl0ZW0/LmNvbW1lbnRzID8/IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7IC8vIEFjdHVhbGl6YSBsYSBwcm9waWVkYWQgdmluY3VsYWRhIGEgYFtkaXNhYmxlZF1gXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgPiAwICYmIG5ld1F1YW50aXR5IDw9IHN0b2NrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgbmV3UXVhbnRpdHksIGtlZXBTYW1lQ29tbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2stYWN0dWFsbHknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIEZ1bmNpw7NuIGRlIGZsZWNoYSBwYXJhIHByZXNlcnZhciBlbCBjb250ZXh0b1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgPiAwICYmIG5ld1F1YW50aXR5IDw9IHN0b2NrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgbmV3UXVhbnRpdHksIGtlZXBTYW1lQ29tbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2stYWN0dWFsbHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cblxuICAgIGNhcnRJdGVtUGx1cyA9IChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdHk6IG51bWJlciA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSB8fCAwO1xuICAgICAgICBjb25zdCBzdGVwID0gbXVsdGlwbGVRdHkgfHwgMTtcbiAgICAgICAgY29uc3Qgc3RvY2sgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnN0b2NrO1xuICAgICAgICBjb25zdCBjdXJyZW50OiBudW1iZXIgPSBpdGVtLnF1YW50aXR5O1xuXG4gICAgICAgIGNvbnN0IG5leHQgPSBzdGVwID4gMSAmJiBjdXJyZW50ICUgc3RlcCAhPT0gMFxuICAgICAgICAgICAgPyBNYXRoLmNlaWwoY3VycmVudCAvIHN0ZXApICogc3RlcFxuICAgICAgICAgICAgOiBjdXJyZW50ICsgc3RlcDtcblxuICAgICAgICB0aGlzLmFjdHVhbGl6YXJDYW50aWRhZChpdGVtLCBuZXh0LCBzdG9jaywgJ2NhcnRQbHVzJyk7XG4gICAgfVxuXG4gICAgY2FydEl0ZW1MZXNzID0gKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBtdWx0aXBsZVF0eTogbnVtYmVyID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5tdWx0aXBsZVF1YW50aXR5IHx8IDA7XG4gICAgICAgIGNvbnN0IG1pbmltdW1RdHk6IG51bWJlciA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ubWluaW11bUl0ZW1zUXVhbnRpdHkgfHwgMDtcbiAgICAgICAgY29uc3Qgc3RlcCA9IG11bHRpcGxlUXR5IHx8IDE7XG4gICAgICAgIGNvbnN0IGZsb29yID0gbWluaW11bVF0eSB8fCBzdGVwO1xuICAgICAgICBjb25zdCBjdXJyZW50OiBudW1iZXIgPSBpdGVtLnF1YW50aXR5O1xuXG4gICAgICAgIGNvbnN0IG5leHQgPSBzdGVwID4gMSAmJiBjdXJyZW50ICUgc3RlcCAhPT0gMFxuICAgICAgICAgICAgPyBNYXRoLmZsb29yKGN1cnJlbnQgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgICAgIDogY3VycmVudCAtIHN0ZXA7XG5cbiAgICAgICAgaWYgKG5leHQgPj0gZmxvb3IpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0dWFsaXphckNhbnRpZGFkKGl0ZW0sIG5leHQsIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uc3RvY2ssICdjYXJ0TGVzcycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVkaXJlY3RDaGVja291dCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY2FydFNlcnZpY2UuaGFzU3VmZmljaWVudENyZWRpdHNGb3JDYXJ0VG90YWwoKSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NoZWNrb3V0YCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vIHNlIHB1ZWRlIHJlZGlyaWdpciBhbCBjaGVja291dCBkZWJpZG8gYSB1bmEgdmFsaWRhY2nDs24gZmFsbGlkYS5cIik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWRpcmVjdFJlZ2lzdGVyID0gKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2F1dGgvbG9naW5gKVxuXG4gICAgb3Blbk1vZGFsKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCB7IGNsYXNzOiAnbW9kYWwteGwnLCBrZXlib2FyZDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcmVkaXJlY3REZXRhaWxQcm9kdWN0KHByb2R1Y3QpIHtcbiAgICAgICAgbGV0IHZhcmlhbnQgPSBwcm9kdWN0LnZhcmlhbnRzWzBdXG4gICAgICAgIGxldCBwYXRoID0gJy9wcm9kdWN0LydcbiAgICAgICAgcGF0aCArPSB2YXJpYW50LmNvZGVcbiAgICAgICAgcGF0aCArPSB2YXJpYW50Lm9wdGlvbnMubGVuZ3RoID8gXCI/dmFyaWFudD10cnVlXCIgOiBcIlwiXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocGF0aClcbiAgICB9XG5cbiAgICBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShkYXRlKSxcbiAgICAgICAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXG4gICAgICAgICAgICBkYXkgPSAnJyArIGQuZ2V0RGF0ZSgpLFxuICAgICAgICAgICAgeWVhciA9IGQuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICBpZiAobW9udGgubGVuZ3RoIDwgMilcbiAgICAgICAgICAgIG1vbnRoID0gJzAnICsgbW9udGg7XG4gICAgICAgIGlmIChkYXkubGVuZ3RoIDwgMilcbiAgICAgICAgICAgIGRheSA9ICcwJyArIGRheTtcblxuICAgICAgICByZXR1cm4gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oJy0nKTtcbiAgICB9XG5cbiAgICBhc3luYyBjYXJnYU1vZGFsKGl0ZW0pIHtcblxuICAgICAgICAvLyBPYnRpZW5lIGxhcyBzZWRlcyBkZWwgY2xpZW50ZVxuICAgICAgICBjb25zdCBzZWRlcyA9IGF3YWl0IHRoaXMuY2FydFNlcnZpY2UuZ2V0QWRkcmVzc0Jvb2soKTtcblxuICAgICAgICAvLyBDcmVvIHVuYSBzZXJpZSBkZSB2YXJpYWJsZXMgcXVlIHZveSBhIG5lY2VzaXRhciwgaWQgcGFyYSBjb250cm9sYXIgbGFzIHZ1ZWx0YXMgcXVlIGRhIHkgY3VhbnRhcyBsaW5lYXMgaGF5IHkgYWxsSUQgcGFyYSBhbG1hY2VuYXIgbG9zIElEIGRlIGxvcyBsb3Rlcy5cbiAgICAgICAgdmFyIGlkID0gMTtcbiAgICAgICAgdmFyIHRoaXNfID0gdGhpcztcbiAgICAgICAgdmFyIGFsbElEID0gW107XG5cbiAgICAgICAgLy8gQcOxYWRlIGxvcyBkYXRvcyBhbCBlbmNhYmV6YWRvIGRlbCBNb2RhbFxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW5jYWJlemFkb01vZGFsJykuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwidGl0bGUgdGV4dC1kYXJrIHRleHQtZGVjb3JhdGlvbi1ub25lIGg1IGQtYmxvY2sgbS0wIHAtMCBtLTAgcC0wXCI+PHAgY2xhc3M9XCJub21icmUgbWItMFwiIGlkPVwicHJvZHVjdE5hbWVcIj4nICsgaXRlbVsncHJvZHVjdCddWyduYW1lJ10gKyAnPC9wPjxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IHBzLTIgbXMtMVwiIGlkPVwicHJvZHVjdFJlZlwiPlJlZjonICsgaXRlbVsndmFyaWFudF9pZCddICsgJzwvc21hbGw+PC9hPic7XG5cbiAgICAgICAgLy8gQm9ycmFtb3MgdG9kb3MgbG9zIGRhdG9zIGRlIGxvcyBsb3RlcyBhbnRlcmlvcmVzXG4gICAgICAgIHZhciBib2R5VGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvdF9ib2R5X3RhYmxlXCIpIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcblxuICAgICAgICAvLyBSZWNvcnJlIHRvZG9zIGxvcyBhcnRpY3Vsb3MgeSBlbmN1ZW50cmEgc2kgdGllbmVuIGxvdGVzIG8gbm8sIHNpIHRpZW5lIGNyZWEgbGFzIGxpbmVhc1xuICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0MigpLmZvckVhY2goaSA9PiB7XG5cbiAgICAgICAgICAgIGlmIChpWydpdGVtX2lkJ10gPT0gaXRlbS5pdGVtX2lkICYmIGlbJ2xvdCddICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgYm9keVRhYmxlLmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgIGlbJ2xvdCddLmZvckVhY2gobG90ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDMgPSByb3cuaW5zZXJ0Q2VsbCgyKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDYgPSByb3cuaW5zZXJ0Q2VsbCg1KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGxvdFsnZGF0ZV9yZXF1ZXN0J10pKTtcbiAgICAgICAgICAgICAgICAgICAgY2VsbDEuaW5uZXJIVE1MID0gJzxpbnB1dCBpZD1cImlkJyArIGlkICsgJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgZGlzYWJsZWQ+JztcbiAgICAgICAgICAgICAgICAgICAgY2VsbDIuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJxdWFudGl0eScgKyBpZCArICdcIiB2YWx1ZT0gXCInICsgbG90LnF1YW50aXR5ICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyBsb3QucXVhbnRpdHkgKyAnXCI+JztcbiAgICAgICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIHZhbHVlPVwiJyArIHRoaXMuZm9ybWF0RGF0ZShkYXRlKSArICdcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxuICAgICAgICAgICAgICAgICAgICBzZWRlcy5mb3JFYWNoKHNlZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZGUuaWQgPT0gbG90LnNoaXBwaW5nX2FkZHJlc3NfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiIHNlbGVjdGVkPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPicgKyBvcGNpb25lcyArICc8L3NlbGVjdD4nO1xuICAgICAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIHZhbHVlPVwiVmVyXCI+PC9pbnB1dD4nO1xuICAgICAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0b24+PC9kaXY+JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdzIgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWxhMiA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5jb2xTcGFuID0gNjtcbiAgICAgICAgICAgICAgICAgICAgZmlsYTIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiPjxpbnB1dCBpZD1cIm5vdGVzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdmFsdWU9XCInICsgbG90Lm5vdGVzICsgJ1wiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSB1biBjb21lbnRhcmlvIGVuIGNhc28gZGUgcXVlIHNlYSBuZWNlc2FyaW8uXCIgdHlwZT1cInRleHRcIi8+PC9kaXY+JztcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBpZCArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgYWxsSUQucHVzaChsb3RbJ2lkJ10pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25BZ3JlZ2FyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgLy8gLy8gU2UgY2FsY3VsYSBsYSBjYW50aWRhZCB5IGVsIGNvbnRhZG9yIHBhcmEgcXVlIG5vIGV4Y2VkYSBsYSBjYW50aWRhZCBkZSBsYSBsaW5lYSBhbCBjcmVhciB1biBudWV2byBsb3RlLlxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkQWN0dWFsID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRBY3R1YWwgPSBjYW50aWRhZEFjdHVhbCArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNlIGHDsWFkZSBsYSBsaW5lYSBzaWVtcHJlIHkgY3VhbmRvIGxhIGNhbnRpZGFkIHJlc3RhbnRlIG5vIHNlYSBjZXJvLlxuICAgICAgICAgICAgaWYgKGNhbnRpZGFkQWN0dWFsIDwgaXRlbVsncXVhbnRpdHknXSkge1xuICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGwyID0gcm93Lmluc2VydENlbGwoMSk7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGw1ID0gcm93Lmluc2VydENlbGwoNCk7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XG4gICAgICAgICAgICAgICAgY2VsbDEuaW5uZXJIVE1MID0gJzxpbnB1dCBpZD1cImlkJyArIGlkICsgJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIlBlbmR0LlwiIGRpc2FibGVkPic7XG4gICAgICAgICAgICAgICAgY2VsbDIuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJxdWFudGl0eScgKyBpZCArICdcIiB2YWx1ZT0gXCInICsgKGl0ZW1bJ3F1YW50aXR5J10gLSBjYW50aWRhZEFjdHVhbCkgKyAnXCJjbGFzcz1cImZvcm0tY29udHJvbCB3LTUwXCIgbWF4PVwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiPic7XG4gICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwiZGVsaXZlcnlEYXRlJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xuICAgICAgICAgICAgICAgIHZhciBvcGNpb25lcyA9IFwiXCJcbiAgICAgICAgICAgICAgICBzZWRlcy5mb3JFYWNoKHNlZGUgPT4geyBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7IH0pO1xuICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XG4gICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcbiAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiBjbGFzcz1cImJ0blwiIGlkPVwiYm90b25Cb3JyYXJcIj48aW1nIHNyYz1cIi4vYXNzZXRzL21hcXVldGFkby9pbWcvaWMtYm9ycmFyLnN2Z1wiIGFsdD1cIlwiPiA8L2J1dHQ+PC9kaXY+JztcbiAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcbiAgICAgICAgICAgICAgICBmaWxhMi5jb2xTcGFuID0gNjtcbiAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XG5cblxuICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1tYXgtcXVhbnRpdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEN1YW5kbyBzZSBwdWxzYSBlbCBib3RvbiBwYXJhIGd1YXJkYXIgZWwgbG90ZSByZWNvcnJlIGxhIGZ1bmNpb24geSBlbCBmb3IgLCByZWNvcnJlIGxpbmVhIGEgbGluZWEgeSBsYW56YSBlbCBlbmRwb2ludCBjb24gdW5hIHBhdXNhIHBhcmEgcXVlIG5vIHNlIHBpZXJkYSBuaW5ndW5vIHkgbm8gc2UgcXVlZGUgcGlsbGFkby5cbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdG9uR3VhcmRhcicpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1zYXZpbmcnKTtcbiAgICAgICAgICAgIHRoaXNfLmNhcmdhbmRvID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBsb3RJRCA9ICcnO1xuICAgICAgICAgICAgdmFyIGNhbnRpZGFkTG90ZXMgPSAwO1xuICAgICAgICAgICAgLy9Db250cm9sYSBxdWUgbGFzIGNhbnRpZGFkZXMgZGUgbG9zIGxvdGVzIG5vIHNlYSBzdXBlcmlvciBhIGxhIGRlbCBwcm9kdWN0byBlbiBlbCBjYXJyaXRvLlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBjYW50aWRhZExvdGVzID0gY2FudGlkYWRMb3RlcyArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtLnF1YW50aXR5ID49IGNhbnRpZGFkTG90ZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjYW50aWRhZExvdGVzKTtcbiAgICAgICAgICAgICAgICB2YXIgeSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpdHkgPSBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsaXZlcnlEYXRlID0gKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsaXZlcnlEYXRlXCIgKyBpbmRleCkpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzcyA9ICQoXCIjc2hpcHBpbmdBZGRyZXNzXCIgKyBpbmRleCkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90ZXMgPSAkKFwiI25vdGVzXCIgKyBpbmRleCkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpcHBpbmdBZGRyZXNzTmFtZSA9ICQoJyNzaGlwcGluZ0FkZHJlc3MnICsgaW5kZXggKyAnIG9wdGlvbjpzZWxlY3RlZCcpLnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRcIiArIGluZGV4KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvdElEID0gKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRcIiArIGluZGV4KSkudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXlJbmRleCA9IGFsbElELmluZGV4T2YocGFyc2VJbnQobG90SUQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteUluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbElELnNwbGljZShteUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb3RJRCA9PSAnUGVuZHQuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ251ZXZvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgMCwgaXRlbS5pdGVtX2lkLCBxdWFudGl0eSwgaXRlbS5wcm9kdWN0LnByaWNlLCBpdGVtLnF1YW50aXR5LCBpdGVtLmRpc2NvdW50LCBpdGVtLnByb2R1Y3QucHJpY2UgKiBxdWFudGl0eSwgJ25ldycsIGRlbGl2ZXJ5RGF0ZSwgbm90ZXMsIHBhcnNlSW50KHNoaXBwaW5nQWRkcmVzcyksIHNoaXBwaW5nQWRkcmVzc05hbWUsICduZXdsb3QnKTtcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvdElEICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb3RJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgcGFyc2VJbnQobG90SUQpLCBpdGVtLml0ZW1faWQsIHF1YW50aXR5LCBpdGVtLnByb2R1Y3QucHJpY2UsIGl0ZW0ucXVhbnRpdHksIGl0ZW0uZGlzY291bnQsIGl0ZW0ucHJvZHVjdC5wcmljZSAqIHF1YW50aXR5LCAnZWRpdGVkJywgZGVsaXZlcnlEYXRlLCBub3RlcywgcGFyc2VJbnQoc2hpcHBpbmdBZGRyZXNzKSwgc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ2VkaXRsb3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB5ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFsbElELmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ2JvcnJhcicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgZWxlbWVudCwgMCwgMCwgMCwgMCwgMCwgMCwgJ2RlbGV0ZScsIDAsICcnLCAwLCAnZGVsZXRlJywgJ2RlbGV0ZWxvdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy5jYXJ0U2VydmljZS5sb2FkQ2FydEJ5VG9rZW4odGhpc18uY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkpOyB9LCAzMDAgKiB5KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1zYXZlZCcpOyB9LCAzMDAgKiB5KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy5jYXJnYW5kbyA9IGZhbHNlIH0sIDMwMCAqIHkpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnTGEgY2FudGlkYWQgZGUgbG9zIGxvdGVzIGVzIHN1cGVyaW9yIGEgbGEgY2FudGlkYWQgZGVsIHByb2R1Y3RvLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcjYm90b25Cb3JyYXInLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzKTtcbiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5yZW1vdmUoKTtcblxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGNsb3NlTW9kYWwoaWQpIHtcbiAgICAgICAgJCgnIycgKyBpZCkubW9kYWwoJ2hpZGUnKTtcbiAgICB9XG5cbiAgICBjaGVja1N0b2NrKGl0ZW0pIHtcbiAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xuICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnF1YW50aXR5ID4gdmFyaWFudC5zdG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhbnQuc3RvY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gU29sbyBzZSBlamVjdXRhIHNpIG5vIHNlIGN1bXBsZSBsYSBjb25kaWNpw7NuXG4gICAgfVxuXG4gICAgdXBkYXRlQWxsU3RvY2soKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgIC8vIERlZmluZSBsYSBzdXNjcmlwY2nDs24gYW50ZXMgZGUgdXNhcmxhXG5cbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jYXJ0SXRlbXMuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhcmlhbnRfaWQgPT09IHZhcmlhbnQuY29kZSAmJiAhdGhpcy5leGl0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5zdG9jayA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZGVsZXRlQ2FydEl0ZW0oaXRlbSwgZmFsc2UpOyAvLyBCb3JyYSBlbCBhcnTDrWN1bG9cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IHZhcmlhbnQuc3RvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IHZhcmlhbnQuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDAgJiYgIXRoaXMuZXhpdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAgLy8gRGVzdXNjcsOtYmV0ZSBhbnRlcyBkZSBhY3R1YWxpemFyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRBbGxUb0NhcnQoaXRlbXMpOyAgLy8gQWN0dWFsaXphIGVsIGNhcnJpdG9cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5leGl0VXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnVwZGF0ZUFsbFN0b2NrKCk7ICAvLyBWdWVsdmUgYSB2ZXJpZmljYXIgZWwgc3RvY2tcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cblxuICAgIGdldFZhcmlhbnRzID0gcHJvZHVjdCA9PiB7XG5cbiAgICAgICAgbGV0IGl0ZW0gPSBwcm9kdWN0LnByb2R1Y3RcblxuICAgICAgICBpZiAoaXRlbS52YXJpYW50cyAmJiBpdGVtLnZhcmlhbnRzLmxlbmd0aCAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMgJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnNcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gdGhpcy52YXJpYW50c1RvU2hvdy5maW5kKG5hbWUgPT4gb3B0aW9uLmhhc093blByb3BlcnR5KG5hbWUpKSlcbiAgICAgICAgICAgIGxldCBvcHRpb25zTWFwID0gW11cbiAgICAgICAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9uKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uQWRkZWQgPSBmYWxzZTsgIC8vIFZhcmlhYmxlIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgaW5zZXJjaW9uZXNcblxuICAgICAgICAgICAgICAgICAgICBpdGVtLm9wdGlvbnMuZm9yRWFjaChvcHRpb24yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgPT0gJ0NPTE9SJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbjIudmFsdWVzLmZvckVhY2goY29sb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sb3IuY29kZSA9PSBvcHRpb25bZW50cnldICYmICFvcHRpb25BZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHsgbmFtZTogZW50cnksIHZhbHVlOiBvcHRpb25bZW50cnldLCBpbWFnZTogY29sb3IuaW1hZ2UsIG1vYmlsZUltYWdlOiBjb2xvci5tb2JpbGVJbWFnZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkFkZGVkID0gdHJ1ZTsgLy8gTWFyY2FyIG9wY2nDs24gYWdyZWdhZGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgbm8gc2UgYcOxYWRpw7MgbGEgb3BjacOzbiBkZSBDT0xPUiwgbWFuZWphciBvdHJhcyBvcGNpb25lc1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbkFkZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9wdGlvbnMuZm9yRWFjaChvcHRpb24yID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgIT09ICdDT0xPUicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbltlbnRyeV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGNyZWF0ZURpc2NvdW50TWVzc2FnZShzYWxlcHJpY2U6IG51bWJlciwgcHJpY2U6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChpc05hTihzYWxlcHJpY2UpIHx8IGlzTmFOKHByaWNlKSB8fCBzYWxlcHJpY2UgPj0gcHJpY2UgfHwgc2FsZXByaWNlIDw9IDAgfHwgcHJpY2UgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRpc2NvdW50UGVyY2VudGFnZSA9IE1hdGgucm91bmQoKChwcmljZSAtIHNhbGVwcmljZSkgLyBwcmljZSkgKiAxMDApO1xuXG4gICAgICAgIGxldCBkaXNjb3VudE1lc3NhZ2UgPSBgJHtkaXNjb3VudFBlcmNlbnRhZ2V9JSBPRkZgO1xuICAgICAgICByZXR1cm4gZGlzY291bnRNZXNzYWdlO1xuICAgIH1cbiAgICBnZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwudHlwZSA9PSAnYjJiJyA/IHRoaXMuY2hhbm5lbC53aG9sZXNhbGVyTWluaW11bVB1cmNoYXNlQW1vdW50IDogdGhpcy5jaGFubmVsLnJldGFpbGVyTWluaW11bVB1cmNoYXNlQW1vdW50XG5cbiAgICB9XG5cbiAgICBleGNlZWRzTWluaW11bUFtb3VudCA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA+PSB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWRpcmVjdENoZWNrb3V0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBWZXJpZmljYXIgc2kgaGF5IHVuIGJhbGFuY2UgZGUgY2xpZW50ZSBhY3Rpdm9cbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYmFsYW5jZUN1c3RvbWVyJC5zdWJzY3JpYmUoYmFsYW5jZUN1c3RvbWVyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYmFsYW5jZUN1c3RvbWVyICYmIGJhbGFuY2VDdXN0b21lci5jcmVkaXRBbW91bnQgIT09IG51bGwgJiYgYmFsYW5jZUN1c3RvbWVyLmNyZWRpdEFtb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdxdWFudGl0eS1ub3QtZXhjZWVkZWQtd2hpdG91dC1hbW91bnQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncXVhbnRpdHktbm90LWV4Y2VlZGVkJywgeyBhbW91bnQ6IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudW5zdWJzY3JpYmUoKTsgLy8gRGVzdXNjcmliaXJzZSBpbm1lZGlhdGFtZW50ZSBkZXNwdcOpcyBkZSBvYnRlbmVyIGVsIHZhbG9yXG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuXG5cblxuXG5cblxuXG4iXX0=
832
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25GLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBU3hEO0lBQXFDLG1DQUFlO0lBMkJoRCx5QkFDVyxXQUF3QixFQUN4QixXQUF3QixFQUNyQixNQUFpQixFQUNwQixlQUFnQyxFQUNoQyxNQUFjLEVBQ2QsWUFBNEIsRUFDekIsYUFBMkIsRUFDOUIsaUJBQW9DLEVBQ3BDLG9CQUEwQyxFQUN2QyxHQUFl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QW9CO2dCQUNsQyxVQUFVOztJQTJRN0I7UUFEQyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7OERBUTlCO0lBSUQ7UUFEQyxZQUFZLENBQUMsZUFBZSxDQUFDOzZEQUk3QjtJQUlEO1FBREMsWUFBWSxDQUFDLGVBQWUsQ0FBQzs2REFPN0I7SUF4VVEsZUFBZTtRQUwzQixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsYUFBYTtZQUN2QixZQUF1Qzs7U0FFMUMsQ0FBQztPQUNXLGVBQWUsQ0FpeEIzQjtJQUFELHNCQUFDO0NBQUEsQUFqeEJELENBQXFDLGVBQWUsR0FpeEJuRDtTQWp4QlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVGVtcGxhdGVSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsL2JzLW1vZGFsLXJlZi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jb3JlLmNvbnN0c1wiO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdHMuc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZVwiO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQWRkcmVzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9hZGRyZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlby5zZXJ2aWNlJztcbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1jYXJ0LWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FydC1lYy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FydC1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhcnRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cblxuICAgIHB1YmxpYyB2YXJpYW50c1RvU2hvdzogc3RyaW5nW10gPSBbJ1RBTExFJywgJ0NPTE9SJ107XG4gICAgcHVibGljIGlzTG9nZ2VkSW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgbWVkaWFVcmwgPSAnJztcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsO1xuICAgIHB1YmxpYyBwcm9tb3Rpb25zID0gW107XG4gICAgcHVibGljIGl0ZW1zOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHJpdmF0ZSBjYXJnYW5kbzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjaGFubmVsOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgdXBkYXRlU3RvY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZXhpdFVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaWRlVGF4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgc2hvd1RheExlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjYXJ0TG9hZGluZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBlbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzdW1tYXJ5UHJvbW90aW9uQW1vdW50JDtcbiAgICBwdWJsaWMgaGFzQXBwbGllZENvdXBvbiQ7XG4gICAgcHVibGljIGFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBhY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIHB1YmxpYyBzdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3ZlciA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgc2VvOiBTZW9TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgICAgIHRoaXMubWVkaWFVcmwgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpO1xuICAgICAgICB0aGlzLnN1bW1hcnlQcm9tb3Rpb25BbW91bnQkID0gdGhpcy5jYXJ0U2VydmljZS5nZXRTdW1tYXJ5UHJvbW90aW9uQW1vdW50KCk7XG4gICAgICAgIHRoaXMuaGFzQXBwbGllZENvdXBvbiQgPSB0aGlzLmNhcnRTZXJ2aWNlLmhhc0FwcGxpZWRDb3Vwb24oKTtcblxuICAgIH1cblxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlTG9nZ2VkSW4oKSB7XG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMCk7XG4gICAgICAgIHRoaXMudXBkYXRlVW5pdFByb21vdGlvblZpZXdwb3J0TW9kZSgpO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnByb21vdGlvbnMuc3Vic2NyaWJlKHByb21vdGlvbnMgPT4gdGhpcy5wcm9tb3Rpb25zID0gcHJvbW90aW9ucyk7XG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKHRoaXMuY2FydFNlcnZpY2UuZ2V0VGF4ZXMoKSk7XG5cbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gY2hhbm5lbD8uaGlkZVByaWNlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZURpc2NvdW50cyA9IGNoYW5uZWw/LmhpZGVEaXNjb3VudHMgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmhpZGVUYXhlcyA9IGNoYW5uZWw/LmhpZGVUYXhlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IGNoYW5uZWw/LnNob3dUYXhMZWdlbmQgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID0gY2hhbm5lbD8uZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPz8gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGVQcmljZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKChzaG93UHJpY2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmxvYWRpbmcuc3Vic2NyaWJlKGlzTG9hZGluZyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhcnRMb2FkaW5nID0gaXNMb2FkaW5nO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0U2VvKCk7XG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0U2VvID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzaXRlTmFtZSA9IHRoaXMuc2VvLmdldFNpdGVOYW1lKCk7XG4gICAgICAgIHRoaXMuc2VvLnNldFRpdGxlKGBDYXJyaXRvIHwgJHtzaXRlTmFtZX1gKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0RGVzY3JpcHRpb24oYFJldmlzw6EgbG9zIHByb2R1Y3RvcyBzZWxlY2Npb25hZG9zIHkgZmluYWxpesOhIHR1IGNvbXByYSBlbiAke3NpdGVOYW1lfS5gKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0T2dUeXBlKCd3ZWJzaXRlJyk7XG4gICAgICAgIHRoaXMuc2VvLnNldE5vSW5kZXgodHJ1ZSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlby5zZXRDYW5vbmljYWwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmllcnRlIHVuIG1vbnRvIGNydWRvIGFsIGZvcm1hdG8gZGVjaW1hbCBlc3BlcmFkbyBwb3IgbGEgVUkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYW1vdW50IE1vbnRvIGVuIGNlbnRhdm9zIG8gZW50ZXJvIGNydWRvLlxuICAgICAqIEByZXR1cm5zIE1vbnRvIGRlY2ltYWwuXG4gICAgICovXG4gICAgdG9EZWNpbWFsID0gKGFtb3VudCkgPT4gdGhpcy5jb25zdHMudG9EZWNpbWFsKGFtb3VudCk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFBvcmNlbnRhamUgZGUgZGVzY3VlbnRvIGxlZ2FjeSBwYXJhIGVsIGJhZGdlIGAlIE9GRmAuICovXG4gICAgZ2V0SXRlbURpc2NvdW50ID0gKGl0ZW0pOiBudW1iZXIgPT4gTnVtYmVyKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/LmRpc2NvdW50UGVyY2VudCB8fCAwKTtcblxuICAgIC8qKlxuICAgICAqIERldnVlbHZlIGVsIHBvcmNlbnRhamUgZWZlY3Rpdm8gdG90YWwgZGVsIMOtdGVtLCBjb25zaWRlcmFuZG8gcHJvbW9jaW9uZXMgdW5pdGFyaWFzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHJldHVybnMgUG9yY2VudGFqZSBlbnRlcm8gY2FsY3VsYWRvIGNvbnRyYSBlbCBwcmVjaW8gZGUgcmVmZXJlbmNpYSBkZWwgw610ZW0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFNpIGV4aXN0ZSBwcmVjaW8gdGFjaGFkbywgY29tcGFyYSBgZmluYWxQcmljZWAgY29udHJhIGBzdHJpa2VQcmljZWAuXG4gICAgICogU2kgbm8gZXhpc3RlLCB1c2EgYGJhc2VQcmljZWAgY29tbyByZWZlcmVuY2lhLlxuICAgICAqIEVzdG8gcGVybWl0ZSBtb3N0cmFyIHVuIGJhZGdlIGNvaGVyZW50ZSBjdWFuZG8gZWwgcHJlY2lvIHZpc2libGUgeWEgaW5jbHV5ZVxuICAgICAqIGRlc2N1ZW50b3MvcHJvbW9jaW9uZXMgdW5pdGFyaWFzIGFkaWNpb25hbGVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIC8vIHN0cmlrZVByaWNlIDI0MDAwMCwgZmluYWxQcmljZSA0NTAwMCA9PiA4MVxuICAgICAqIHRoaXMuZ2V0SXRlbUVmZmVjdGl2ZURpc2NvdW50KGl0ZW0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldEl0ZW1FZmZlY3RpdmVEaXNjb3VudCA9IChpdGVtKTogbnVtYmVyID0+IE51bWJlcih0aGlzLmNhcnRTZXJ2aWNlLmdldEl0ZW1QcmljaW5nKGl0ZW0pPy5lZmZlY3RpdmVEaXNjb3VudFBlcmNlbnQgfHwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBTdWJ0b3RhbCBhY3R1YWwgZGVsIHJlbmdsw7NuLlxuICAgICAqXG4gICAgICogRWwgYmFja2VuZCBudWV2byBpbmZvcm1hIGBpdGVtLnN1YnRvdGFsYCBzaW4gaW1wdWVzdG9zIG5pIGRlc2N1ZW50b3NcbiAgICAgKiBnZW5lcmFsZXMgZGUgb3JkZW4uIExhcyByZXNwdWVzdGFzIGxlZ2FjeSBjb250aW7DumFuIHVzYW5kbyBgaXRlbS50b3RhbGAuXG4gICAgICovXG4gICAgZ2V0RGlzcGxheWVkSXRlbVRvdGFsID0gKGl0ZW0pOiBudW1iZXIgPT5cbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0SXRlbVByaWNlUHJlc2VudGF0aW9uKGl0ZW0sIHRoaXMuY2hhbm5lbCkuc3VidG90YWw7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIGB0cnVlYCBzaSBlbCBiYWNrZW5kIGluZm9ybcOzIHByb21vY2lvbmVzIHVuaXRhcmlhcy4gKi9cbiAgICBoYXNVbml0UHJvbW90aW9ucyA9IChpdGVtKTogYm9vbGVhbiA9PiBCb29sZWFuKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/Lmhhc1VuaXRQcm9tb3Rpb25zKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbXMgw410ZW1zIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBgdHJ1ZWAgc2kgYWwgbWVub3MgdW4gw610ZW0gdGllbmUgcHJvbW9jaW9uZXMgdW5pdGFyaWFzLiAqL1xuICAgIGhhc0FueVVuaXRQcm9tb3Rpb25zID0gKGl0ZW1zOiBhbnlbXSA9IFtdKTogYm9vbGVhbiA9PiBpdGVtcy5zb21lKGl0ZW0gPT4gdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIGB0cnVlYCBzaSBlbCByZXN1bWVuIGFjdGl2byBwZXJ0ZW5lY2UgYSBlc2Ugw610ZW0uICovXG4gICAgaXNVbml0UHJvbW90aW9uU3VtbWFyeU9wZW4gPSAoaXRlbSk6IGJvb2xlYW4gPT4gdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uSXRlbUlkID09PSBpdGVtPy5pdGVtX2lkO1xuXG4gICAgLyoqXG4gICAgICogQWJyZSBlbCByZXN1bWVuIGRlbCDDrXRlbSBhbCBlbnRyYXIgY29uIGVsIG1vdXNlIGVuIGRlc2t0b3AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by5cbiAgICAgKiBAcGFyYW0gYW5jaG9yIEVsZW1lbnRvIHVzYWRvIGNvbW8gYW5jbGEgdmlzdWFsLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIGhhbmRsZVVuaXRQcm9tb3Rpb25Nb3VzZUVudGVyID0gKGl0ZW0sIGFuY2hvcjogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRzVW5pdFByb21vdGlvbkhvdmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wZW5Vbml0UHJvbW90aW9uU3VtbWFyeShpdGVtLCBhbmNob3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENpZXJyYSBlbCByZXN1bWVuIGFsIHNhbGlyIGNvbiBlbCBtb3VzZSBlbiBkZXNrdG9wLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gYXNvY2lhZG8gYWwgcmVzdW1lbi5cbiAgICAgKiBAcmV0dXJucyBgdm9pZGBcbiAgICAgKi9cbiAgICBoYW5kbGVVbml0UHJvbW90aW9uTW91c2VMZWF2ZSA9IChpdGVtKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZVVuaXRQcm9tb3Rpb25TdW1tYXJ5KGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFicmUgZWwgcmVzdW1lbiBkZSBwcm9tb2Npb25lcyB1bml0YXJpYXMgcGFyYSB1biDDrXRlbSBwdW50dWFsLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHBhcmFtIGFuY2hvciBFbGVtZW50byBkZSByZWZlcmVuY2lhIHBhcmEgcG9zaWNpb25hbWllbnRvLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIG9wZW5Vbml0UHJvbW90aW9uU3VtbWFyeSA9IChpdGVtLCBhbmNob3I/OiBIVE1MRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVW5pdFByb21vdGlvbnMoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlVW5pdFByb21vdGlvbkl0ZW1JZCA9IGl0ZW0/Lml0ZW1faWQgPz8gbnVsbDtcbiAgICAgICAgdGhpcy51cGRhdGVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyhhbmNob3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENpZXJyYSBlbCByZXN1bWVuIGFjdGl2by5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIFNpIHNlIGVudsOtYSwgc29sbyBjaWVycmEgY3VhbmRvIGNvaW5jaWRlIGNvbiBlbCDDrXRlbSBhY3Rpdm8uXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgY2xvc2VVbml0UHJvbW90aW9uU3VtbWFyeSA9IChpdGVtPyk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWl0ZW0gfHwgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uSXRlbUlkID09PSBpdGVtPy5pdGVtX2lkKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWx0ZXJuYSBtYW51YWxtZW50ZSBsYSBhcGVydHVyYSBkZWwgcmVzdW1lbiBwYXJhIHVuIMOtdGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHBhcmFtIGFuY2hvciBFbGVtZW50byBkZSByZWZlcmVuY2lhLlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHB1bnRlcm8uXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgdG9nZ2xlVW5pdFByb21vdGlvblN1bW1hcnkgPSAoaXRlbSwgYW5jaG9yOiBIVE1MRWxlbWVudCwgZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICghdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNVbml0UHJvbW90aW9uU3VtbWFyeU9wZW4oaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VVbml0UHJvbW90aW9uU3VtbWFyeShpdGVtKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3BlblVuaXRQcm9tb3Rpb25TdW1tYXJ5KGl0ZW0sIGFuY2hvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFuZWphIGVsIGNsaWNrL3RhcCBzb2JyZSBlbCBwcmVjaW8gZW4gZGlzcG9zaXRpdm9zIHNpbiBob3Zlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLlxuICAgICAqIEBwYXJhbSBhbmNob3IgRWxlbWVudG8gdXNhZG8gY29tbyB0cmlnZ2VyLlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGUgY2xpY2svdGFwLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIGhhbmRsZVVuaXRQcm9tb3Rpb25QcmljZUNsaWNrID0gKGl0ZW0sIGFuY2hvcjogSFRNTEVsZW1lbnQsIGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2dnbGVVbml0UHJvbW90aW9uU3VtbWFyeShpdGVtLCBhbmNob3IsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdml0YSBxdWUgZXZlbnRvcyBkZW50cm8gZGVsIHJlc3VtZW4gc2UgcHJvcGFndWVuIGFsIGRvY3VtZW50by5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHB1bnRlcm8uXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgc3RvcFVuaXRQcm9tb3Rpb25TdW1tYXJ5RXZlbnQgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgUHJlY2lvIHVuaXRhcmlvIGJhc2UgKGBzYWxlcHJpY2VgIG8gYHByaWNlYCkuICovXG4gICAgZ2V0T3JpZ2luYWxVbml0UHJpY2UgPSAoaXRlbSk6IG51bWJlciA9PiB7XG4gICAgICAgIGNvbnN0IHByZXNlbnRhdGlvbiA9IHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydEl0ZW1QcmljZVByZXNlbnRhdGlvbihpdGVtLCB0aGlzLmNoYW5uZWwpO1xuICAgICAgICByZXR1cm4gcHJlc2VudGF0aW9uLnNvdXJjZSA9PT0gJ2xpbmVQcmljaW5nJ1xuICAgICAgICAgICAgPyBwcmVzZW50YXRpb24udW5pdFByaWNlXG4gICAgICAgICAgICA6IE51bWJlcih0aGlzLmNhcnRTZXJ2aWNlLmdldEl0ZW1QcmljaW5nKGl0ZW0pPy5iYXNlUHJpY2UgfHwgMCk7XG4gICAgfVxuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBQcmVjaW8gdGFjaGFkbyBsZWdhY3kgbyBgMGAuICovXG4gICAgZ2V0U3RyaWtlVGhyb3VnaFVuaXRQcmljZSA9IChpdGVtKTogbnVtYmVyID0+XG4gICAgICAgIE51bWJlcih0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRJdGVtUHJpY2VQcmVzZW50YXRpb24oaXRlbSwgdGhpcy5jaGFubmVsKS5wcmV2aW91cyB8fCAwKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgU3VtYSBkZSBwcm9tb2Npb25lcyB1bml0YXJpYXMgYXBsaWNhZGFzLiAqL1xuICAgIGdldFVuaXRQcm9tb3Rpb25Ub3RhbCA9IChpdGVtKTogbnVtYmVyID0+XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydEl0ZW1QcmljZVByZXNlbnRhdGlvbihpdGVtLCB0aGlzLmNoYW5uZWwpLmRpc2NvdW50O1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBQcmVjaW8gZmluYWwgdW5pdGFyaW8gbHVlZ28gZGUgcHJvbW9jaW9uZXMuICovXG4gICAgZ2V0RmluYWxVbml0UHJpY2UgPSAoaXRlbSk6IG51bWJlciA9PlxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRJdGVtUHJpY2VQcmVzZW50YXRpb24oaXRlbSwgdGhpcy5jaGFubmVsKS51bml0UHJpY2U7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFByZWNpbyBwcmluY2lwYWwgYSBtb3N0cmFyIGp1bnRvIGFsIHRyaWdnZXIuICovXG4gICAgZ2V0RGlzcGxheWVkVW5pdFByaWNlID0gKGl0ZW0pOiBudW1iZXIgPT5cbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0SXRlbVByaWNlUHJlc2VudGF0aW9uKGl0ZW0sIHRoaXMuY2hhbm5lbCkudW5pdFByaWNlO1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBgdHJ1ZWAgc2kgZGViZSBtb3N0cmFyc2UgZWwgcHJlY2lvIGJhc2UganVudG8gYWwgZmluYWwuICovXG4gICAgc2hvdWxkU2hvd09yaWdpbmFsVW5pdFByaWNlID0gKGl0ZW0pOiBib29sZWFuID0+XG4gICAgICAgIHRoaXMuaGFzVW5pdFByb21vdGlvbnMoaXRlbSkgJiYgdGhpcy5nZXRGaW5hbFVuaXRQcmljZShpdGVtKSAhPT0gdGhpcy5nZXRPcmlnaW5hbFVuaXRQcmljZShpdGVtKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgYHRydWVgIHNpIGFkZW3DoXMgZGVsIGJhc2UgcHJpY2UgZXhpc3RlIHRhY2hhZG8gbGVnYWN5LiAqL1xuICAgIHNob3VsZFNob3dMZWdhY3lQcmljZU9yaWdpbiA9IChpdGVtKTogYm9vbGVhbiA9PlxuICAgICAgICB0aGlzLmdldFN0cmlrZVRocm91Z2hVbml0UHJpY2UoaXRlbSkgPiB0aGlzLmdldE9yaWdpbmFsVW5pdFByaWNlKGl0ZW0pO1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBFdGlxdWV0YSBmaW5hbCBkZWwgcmVzdW1lbi4gKi9cbiAgICBnZXRVbml0UHJvbW90aW9uRmluYWxQcmljZUxhYmVsID0gKGl0ZW0pOiBzdHJpbmcgPT5cbiAgICAgICAgdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSA/ICdQcmVjaW8gZmluYWwnIDogJ1ByZWNpbyB1bml0YXJpbyc7XG5cbiAgICAvKipcbiAgICAgKiBCdXNjYSBkZW50cm8gZGUgdW5hIGxpc3RhIGVsIMOtdGVtIHF1ZSB0aWVuZSBhY3R1YWxtZW50ZSBlbCByZXN1bWVuIGFiaWVydG8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbXMgTGlzdGEgZGUgw610ZW1zIGRlbCBjYXJyaXRvLlxuICAgICAqIEByZXR1cm5zIMONdGVtIGFjdGl2byBvIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXRBY3RpdmVVbml0UHJvbW90aW9uSXRlbSA9IChpdGVtcykgPT5cbiAgICAgICAgaXRlbXM/LmZpbmQoaXRlbSA9PiBpdGVtPy5pdGVtX2lkID09PSB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQpIHx8IG51bGw7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFByb21vY2lvbmVzIHVuaXRhcmlhcyBjcnVkYXMgZGVsIGJhY2tlbmQuICovXG4gICAgZ2V0VW5pdFByb21vdGlvbnMgPSAoaXRlbSk6IGFueVtdID0+IEFycmF5LmlzQXJyYXkoaXRlbT8udW5pdFByb21vdGlvbnMpID8gaXRlbS51bml0UHJvbW90aW9ucyA6IFtdO1xuXG4gICAgLyoqIENpZXJyYSBlbCByZXN1bWVuIGFsIGhhY2VyIGNsaWNrIGZ1ZXJhIGVuIGRlc2t0b3AuICovXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKVxuICAgIGhhbmRsZURvY3VtZW50Q2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uSXRlbUlkID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyA9IHt9O1xuICAgIH1cblxuICAgIC8qKiBSZWNhbGN1bGEgZWwgbW9kbyBkZSBpbnRlcmFjY2nDs24geSBjaWVycmEgZWwgcmVzdW1lbiBhbCBjYW1iaWFyIGVsIHZpZXdwb3J0LiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICAgIGhhbmRsZVdpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVVbml0UHJvbW90aW9uVmlld3BvcnRNb2RlKCk7XG4gICAgICAgIHRoaXMuY2xvc2VVbml0UHJvbW90aW9uU3VtbWFyeSgpO1xuICAgIH1cblxuICAgIC8qKiBDaWVycmEgZWwgcmVzdW1lbiBlbiBtb2JpbGUgYWwgaGFjZXIgc2Nyb2xsIHBhcmEgZXZpdGFyIGRlc2FsaW5lYWNpw7NuIHZpc3VhbC4gKi9cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcbiAgICBoYW5kbGVXaW5kb3dTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRzVW5pdFByb21vdGlvbkhvdmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlVW5pdFByb21vdGlvblN1bW1hcnkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlY3RhIHNpIGVsIGRpc3Bvc2l0aXZvIHNvcG9ydGEgYGhvdmVyYCByZWFsIHkgZGViZSBjb21wb3J0YXJzZSBjb21vIGRlc2t0b3AuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdm9pZGBcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVVuaXRQcm9tb3Rpb25WaWV3cG9ydE1vZGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuc3VwcG9ydHNVbml0UHJvbW90aW9uSG92ZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgJiYgdHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKGhvdmVyOiBob3ZlcikgYW5kIChwb2ludGVyOiBmaW5lKScpLm1hdGNoZXNcbiAgICAgICAgICAgICYmIHdpbmRvdy5pbm5lcldpZHRoID49IDc2ODtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhIGVzdGlsb3MgaW5saW5lIHBhcmEgbWFudGVuZXIgZWwgcmVzdW1lbiBtb2JpbGUgZGVudHJvIGRlbCB2aWV3cG9ydC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbmNob3IgRWxlbWVudG8gdXNhZG8gY29tbyBhbmNsYSB2aXN1YWwuXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyA9IChhbmNob3I/OiBIVE1MRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3ZlciB8fCAhYW5jaG9yIHx8IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25TdW1tYXJ5U3R5bGVzID0ge307XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aWV3cG9ydFBhZGRpbmcgPSAxMjtcbiAgICAgICAgY29uc3QgcmVjdCA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZXN0aW1hdGVkUG9wdXBIZWlnaHQgPSAyNjA7XG4gICAgICAgIGNvbnN0IG5leHRUb3AgPSByZWN0LmJvdHRvbSArIDg7XG4gICAgICAgIGNvbnN0IG1heFRvcCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGVzdGltYXRlZFBvcHVwSGVpZ2h0IC0gdmlld3BvcnRQYWRkaW5nO1xuICAgICAgICBjb25zdCB0b3AgPSBNYXRoLm1heCh2aWV3cG9ydFBhZGRpbmcsIE1hdGgubWluKG5leHRUb3AsIG1heFRvcCkpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVW5pdFByb21vdGlvblN1bW1hcnlTdHlsZXMgPSB7XG4gICAgICAgICAgICBsZWZ0OiBgJHt2aWV3cG9ydFBhZGRpbmd9cHhgLFxuICAgICAgICAgICAgcmlnaHQ6IGAke3ZpZXdwb3J0UGFkZGluZ31weGAsXG4gICAgICAgICAgICB0b3A6IGAke3RvcH1weGAsXG4gICAgICAgICAgICB3aWR0aDogJ2F1dG8nLFxuICAgICAgICAgICAgJ21heC13aWR0aCc6ICdub25lJyxcbiAgICAgICAgICAgICdtYXgtaGVpZ2h0JzogYGNhbGMoMTAwdmggLSAke3RvcCArIHZpZXdwb3J0UGFkZGluZ31weClgLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFjdHVhbGl6YXJDYW50aWRhZChpdGVtOiBhbnksIGNhbnRpZGFkOiBudW1iZXIgfCBzdHJpbmcsIHN0b2NrOiBudW1iZXIsIGlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRMb2FkaW5nKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdWFudGl0eSA9IGl0ZW0ucHJvZHVjdD8udmFyaWFudHMgJiYgaXRlbS5wcm9kdWN0LnZhcmlhbnRzLmxlbmd0aCA+IDAgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSA6IDA7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdWx0aXBsZVF1YW50aXR5ICYmIG11bHRpcGxlUXVhbnRpdHkgPiAwID8gbXVsdGlwbGVRdWFudGl0eSA6IDE7XG5cbiAgICAgICAgbGV0IG5ld1F1YW50aXR5OiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYW50aWRhZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gcGFyc2VJbnQoY2FudGlkYWQsIDEwKTtcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IHN0ZXAgfSk7XG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBNYXRoLnJvdW5kKG5ld1F1YW50aXR5IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBjYW50aWRhZDtcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZWVwU2FtZUNvbW1lbnQgPSBpdGVtPy5jb21tZW50cyA/PyB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlOyAvLyBBY3R1YWxpemEgbGEgcHJvcGllZGFkIHZpbmN1bGFkYSBhIGBbZGlzYWJsZWRdYFxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBGdW5jacOzbiBkZSBmbGVjaGEgcGFyYSBwcmVzZXJ2YXIgZWwgY29udGV4dG9cbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBjYXJ0SXRlbVBsdXMgPSAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG11bHRpcGxlUXR5OiBudW1iZXIgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/Lm11bHRpcGxlUXVhbnRpdHkgfHwgMDtcbiAgICAgICAgY29uc3Qgc3RlcCA9IG11bHRpcGxlUXR5IHx8IDE7XG4gICAgICAgIGNvbnN0IHN0b2NrID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5zdG9jaztcbiAgICAgICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gaXRlbS5xdWFudGl0eTtcblxuICAgICAgICBjb25zdCBuZXh0ID0gc3RlcCA+IDEgJiYgY3VycmVudCAlIHN0ZXAgIT09IDBcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKGN1cnJlbnQgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgICAgIDogY3VycmVudCArIHN0ZXA7XG5cbiAgICAgICAgdGhpcy5hY3R1YWxpemFyQ2FudGlkYWQoaXRlbSwgbmV4dCwgc3RvY2ssICdjYXJ0UGx1cycpO1xuICAgIH1cblxuICAgIGNhcnRJdGVtTGVzcyA9IChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdHk6IG51bWJlciA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSB8fCAwO1xuICAgICAgICBjb25zdCBtaW5pbXVtUXR5OiBudW1iZXIgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/Lm1pbmltdW1JdGVtc1F1YW50aXR5IHx8IDA7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdWx0aXBsZVF0eSB8fCAxO1xuICAgICAgICBjb25zdCBmbG9vciA9IG1pbmltdW1RdHkgfHwgc3RlcDtcbiAgICAgICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gaXRlbS5xdWFudGl0eTtcblxuICAgICAgICBjb25zdCBuZXh0ID0gc3RlcCA+IDEgJiYgY3VycmVudCAlIHN0ZXAgIT09IDBcbiAgICAgICAgICAgID8gTWF0aC5mbG9vcihjdXJyZW50IC8gc3RlcCkgKiBzdGVwXG4gICAgICAgICAgICA6IGN1cnJlbnQgLSBzdGVwO1xuXG4gICAgICAgIGlmIChuZXh0ID49IGZsb29yKSB7XG4gICAgICAgICAgICB0aGlzLmFjdHVhbGl6YXJDYW50aWRhZChpdGVtLCBuZXh0LCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnN0b2NrLCAnY2FydExlc3MnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZGlyZWN0Q2hlY2tvdXQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9jaGVja291dGApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBzZSBwdWVkZSByZWRpcmlnaXIgYWwgY2hlY2tvdXQgZGViaWRvIGEgdW5hIHZhbGlkYWNpw7NuIGZhbGxpZGEuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVkaXJlY3RSZWdpc3RlciA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9hdXRoL2xvZ2luYClcblxuICAgIG9wZW5Nb2RhbCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsLXhsJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHJlZGlyZWN0RGV0YWlsUHJvZHVjdChwcm9kdWN0KSB7XG4gICAgICAgIGxldCB2YXJpYW50ID0gcHJvZHVjdC52YXJpYW50c1swXVxuICAgICAgICBsZXQgcGF0aCA9ICcvcHJvZHVjdC8nXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5jb2RlXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5vcHRpb25zLmxlbmd0aCA/IFwiP3ZhcmlhbnQ9dHJ1ZVwiIDogXCJcIlxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhdGgpXG4gICAgfVxuXG4gICAgZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZSksXG4gICAgICAgICAgICBtb250aCA9ICcnICsgKGQuZ2V0TW9udGgoKSArIDEpLFxuICAgICAgICAgICAgZGF5ID0gJycgKyBkLmdldERhdGUoKSxcbiAgICAgICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xuICAgICAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpXG4gICAgICAgICAgICBkYXkgPSAnMCcgKyBkYXk7XG5cbiAgICAgICAgcmV0dXJuIFt5ZWFyLCBtb250aCwgZGF5XS5qb2luKCctJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2FyZ2FNb2RhbChpdGVtKSB7XG5cbiAgICAgICAgLy8gT2J0aWVuZSBsYXMgc2VkZXMgZGVsIGNsaWVudGVcbiAgICAgICAgY29uc3Qgc2VkZXMgPSBhd2FpdCB0aGlzLmNhcnRTZXJ2aWNlLmdldEFkZHJlc3NCb29rKCk7XG5cbiAgICAgICAgLy8gQ3JlbyB1bmEgc2VyaWUgZGUgdmFyaWFibGVzIHF1ZSB2b3kgYSBuZWNlc2l0YXIsIGlkIHBhcmEgY29udHJvbGFyIGxhcyB2dWVsdGFzIHF1ZSBkYSB5IGN1YW50YXMgbGluZWFzIGhheSB5IGFsbElEIHBhcmEgYWxtYWNlbmFyIGxvcyBJRCBkZSBsb3MgbG90ZXMuXG4gICAgICAgIHZhciBpZCA9IDE7XG4gICAgICAgIHZhciB0aGlzXyA9IHRoaXM7XG4gICAgICAgIHZhciBhbGxJRCA9IFtdO1xuXG4gICAgICAgIC8vIEHDsWFkZSBsb3MgZGF0b3MgYWwgZW5jYWJlemFkbyBkZWwgTW9kYWxcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuY2FiZXphZG9Nb2RhbCcpLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cInRpdGxlIHRleHQtZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZSBoNSBkLWJsb2NrIG0tMCBwLTAgbS0wIHAtMFwiPjxwIGNsYXNzPVwibm9tYnJlIG1iLTBcIiBpZD1cInByb2R1Y3ROYW1lXCI+JyArIGl0ZW1bJ3Byb2R1Y3QnXVsnbmFtZSddICsgJzwvcD48c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBwcy0yIG1zLTFcIiBpZD1cInByb2R1Y3RSZWZcIj5SZWY6JyArIGl0ZW1bJ3ZhcmlhbnRfaWQnXSArICc8L3NtYWxsPjwvYT4nO1xuXG4gICAgICAgIC8vIEJvcnJhbW9zIHRvZG9zIGxvcyBkYXRvcyBkZSBsb3MgbG90ZXMgYW50ZXJpb3Jlc1xuICAgICAgICB2YXIgYm9keVRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb3RfYm9keV90YWJsZVwiKSBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgICAgICBib2R5VGFibGUuaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgICAgLy8gUmVjb3JyZSB0b2RvcyBsb3MgYXJ0aWN1bG9zIHkgZW5jdWVudHJhIHNpIHRpZW5lbiBsb3RlcyBvIG5vLCBzaSB0aWVuZSBjcmVhIGxhcyBsaW5lYXNcbiAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuZ2V0Q2FydDIoKS5mb3JFYWNoKGkgPT4ge1xuXG4gICAgICAgICAgICBpZiAoaVsnaXRlbV9pZCddID09IGl0ZW0uaXRlbV9pZCAmJiBpWydsb3QnXSAhPSAnJykge1xuICAgICAgICAgICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgICAgICBpWydsb3QnXS5mb3JFYWNoKGxvdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMSA9IHJvdy5pbnNlcnRDZWxsKDApO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDIgPSByb3cuaW5zZXJ0Q2VsbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNCA9IHJvdy5pbnNlcnRDZWxsKDMpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDUgPSByb3cuaW5zZXJ0Q2VsbCg0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShsb3RbJ2RhdGVfcmVxdWVzdCddKSk7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcgKyBpZCArICdcIiAgc3R5bGU9XCJib3JkZXI6IDA7XCIgdmFsdWU9XCInICsgbG90LmlkICsgJ1wiIGRpc2FibGVkPic7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIGxvdC5xdWFudGl0eSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgbG90LnF1YW50aXR5ICsgJ1wiPic7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiB2YWx1ZT1cIicgKyB0aGlzLmZvcm1hdERhdGUoZGF0ZSkgKyAnXCIgaWQ9XCJkZWxpdmVyeURhdGUnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPic7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvcGNpb25lcyA9IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWRlLmlkID09IGxvdC5zaGlwcGluZ19hZGRyZXNzX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIiBzZWxlY3RlZD4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2VsbDQuaW5uZXJIVE1MID0gJzxzZWxlY3QgIGlkPVwic2hpcHBpbmdBZGRyZXNzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nICsgb3BjaW9uZXMgKyAnPC9zZWxlY3Q+JztcbiAgICAgICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcbiAgICAgICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gdmFsdWU9XCInICsgbG90LmlkICsgJ1wiIGNsYXNzPVwiYnRuXCIgaWQ9XCJib3RvbkJvcnJhclwiPjxpbWcgc3JjPVwiLi9hc3NldHMvbWFxdWV0YWRvL2ltZy9pYy1ib3JyYXIuc3ZnXCIgYWx0PVwiXCI+IDwvYnV0dG9uPjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cyID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcbiAgICAgICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XG4gICAgICAgICAgICAgICAgICAgIGZpbGEyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sbGFwc2VcIiBpZD1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIj48aW5wdXQgaWQ9XCJub3RlcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHZhbHVlPVwiJyArIGxvdC5ub3RlcyArICdcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgIGFsbElELnB1c2gobG90WydpZCddKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdG9uQWdyZWdhcicpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIC8vIC8vIFNlIGNhbGN1bGEgbGEgY2FudGlkYWQgeSBlbCBjb250YWRvciBwYXJhIHF1ZSBubyBleGNlZGEgbGEgY2FudGlkYWQgZGUgbGEgbGluZWEgYWwgY3JlYXIgdW4gbnVldm8gbG90ZS5cbiAgICAgICAgICAgIHZhciBjYW50aWRhZEFjdHVhbCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbnRpZGFkQWN0dWFsID0gY2FudGlkYWRBY3R1YWwgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZSBhw7FhZGUgbGEgbGluZWEgc2llbXByZSB5IGN1YW5kbyBsYSBjYW50aWRhZCByZXN0YW50ZSBubyBzZWEgY2Vyby5cbiAgICAgICAgICAgIGlmIChjYW50aWRhZEFjdHVhbCA8IGl0ZW1bJ3F1YW50aXR5J10pIHtcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsMSA9IHJvdy5pbnNlcnRDZWxsKDApO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsMyA9IHJvdy5pbnNlcnRDZWxsKDIpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsNCA9IHJvdy5pbnNlcnRDZWxsKDMpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsNiA9IHJvdy5pbnNlcnRDZWxsKDUpO1xuICAgICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcgKyBpZCArICdcIiAgc3R5bGU9XCJib3JkZXI6IDA7XCIgdmFsdWU9XCJQZW5kdC5cIiBkaXNhYmxlZD4nO1xuICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcIj4nO1xuICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcbiAgICAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXG4gICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHsgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nOyB9KTtcbiAgICAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPicgKyBvcGNpb25lcyArICc8L3NlbGVjdD4nO1xuICAgICAgICAgICAgICAgIGNlbGw1LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0blNlZ3VpclwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1icy10YXJnZXQ9XCIjY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgdmFsdWU9XCJWZXJcIj48L2lucHV0Pic7XG4gICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0PjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgdmFyIHJvdzIgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGEyID0gcm93Mi5pbnNlcnRDZWxsKDApXG4gICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XG4gICAgICAgICAgICAgICAgZmlsYTIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiPjxpbnB1dCBpZD1cIm5vdGVzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xuXG5cbiAgICAgICAgICAgICAgICBpZCA9IGlkICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3QtbWF4LXF1YW50aXR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdWFuZG8gc2UgcHVsc2EgZWwgYm90b24gcGFyYSBndWFyZGFyIGVsIGxvdGUgcmVjb3JyZSBsYSBmdW5jaW9uIHkgZWwgZm9yICwgcmVjb3JyZSBsaW5lYSBhIGxpbmVhIHkgbGFuemEgZWwgZW5kcG9pbnQgY29uIHVuYSBwYXVzYSBwYXJhIHF1ZSBubyBzZSBwaWVyZGEgbmluZ3VubyB5IG5vIHNlIHF1ZWRlIHBpbGxhZG8uXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3Rvbkd1YXJkYXInKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2aW5nJyk7XG4gICAgICAgICAgICB0aGlzXy5jYXJnYW5kbyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgbG90SUQgPSAnJztcbiAgICAgICAgICAgIHZhciBjYW50aWRhZExvdGVzID0gMDtcbiAgICAgICAgICAgIC8vQ29udHJvbGEgcXVlIGxhcyBjYW50aWRhZGVzIGRlIGxvcyBsb3RlcyBubyBzZWEgc3VwZXJpb3IgYSBsYSBkZWwgcHJvZHVjdG8gZW4gZWwgY2Fycml0by5cbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRMb3RlcyA9IGNhbnRpZGFkTG90ZXMgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5xdWFudGl0eSA+PSBjYW50aWRhZExvdGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2FudGlkYWRMb3Rlcyk7XG4gICAgICAgICAgICAgICAgdmFyIHkgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXR5ID0gcGFyc2VJbnQoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGl2ZXJ5RGF0ZSA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGl2ZXJ5RGF0ZVwiICsgaW5kZXgpKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3MgPSAkKFwiI3NoaXBwaW5nQWRkcmVzc1wiICsgaW5kZXgpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGVzID0gJChcIiNub3Rlc1wiICsgaW5kZXgpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzc05hbWUgPSAkKCcjc2hpcHBpbmdBZGRyZXNzJyArIGluZGV4ICsgJyBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb3RJRCA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG15SW5kZXggPSBhbGxJRC5pbmRleE9mKHBhcnNlSW50KGxvdElEKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXlJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5zcGxpY2UobXlJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobG90SUQgPT0gJ1BlbmR0LicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdudWV2bycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIDAsIGl0ZW0uaXRlbV9pZCwgcXVhbnRpdHksIGl0ZW0ucHJvZHVjdC5wcmljZSwgaXRlbS5xdWFudGl0eSwgaXRlbS5kaXNjb3VudCwgaXRlbS5wcm9kdWN0LnByaWNlICogcXVhbnRpdHksICduZXcnLCBkZWxpdmVyeURhdGUsIG5vdGVzLCBwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLCBzaGlwcGluZ0FkZHJlc3NOYW1lLCAnbmV3bG90Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb3RJRCAhPSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG90SUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIHBhcnNlSW50KGxvdElEKSwgaXRlbS5pdGVtX2lkLCBxdWFudGl0eSwgaXRlbS5wcm9kdWN0LnByaWNlLCBpdGVtLnF1YW50aXR5LCBpdGVtLmRpc2NvdW50LCBpdGVtLnByb2R1Y3QucHJpY2UgKiBxdWFudGl0eSwgJ2VkaXRlZCcsIGRlbGl2ZXJ5RGF0ZSwgbm90ZXMsIHBhcnNlSW50KHNoaXBwaW5nQWRkcmVzcyksIHNoaXBwaW5nQWRkcmVzc05hbWUsICdlZGl0bG90Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeSA9IGluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbGxJRC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdib3JyYXInKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIGVsZW1lbnQsIDAsIDAsIDAsIDAsIDAsIDAsICdkZWxldGUnLCAwLCAnJywgMCwgJ2RlbGV0ZScsICdkZWxldGVsb3QnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FydFNlcnZpY2UubG9hZENhcnRCeVRva2VuKHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpKTsgfSwgMzAwICogeSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2ZWQnKTsgfSwgMzAwICogeSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FyZ2FuZG8gPSBmYWxzZSB9LCAzMDAgKiB5KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ0xhIGNhbnRpZGFkIGRlIGxvcyBsb3RlcyBlcyBzdXBlcmlvciBhIGxhIGNhbnRpZGFkIGRlbCBwcm9kdWN0by4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI2JvdG9uQm9ycmFyJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcyk7XG4gICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykucmVtb3ZlKCk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBjbG9zZU1vZGFsKGlkKSB7XG4gICAgICAgICQoJyMnICsgaWQpLm1vZGFsKCdoaWRlJyk7XG4gICAgfVxuXG4gICAgY2hlY2tTdG9jayhpdGVtKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBpdGVtLnByb2R1Y3QudmFyaWFudHMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnZhcmlhbnRfaWQgPT09IHZhcmlhbnQuY29kZSkge1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYW50LnN0b2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxuICAgIH1cblxuICAgIHVwZGF0ZUFsbFN0b2NrKCkge1xuICAgICAgICBjb25zdCBpdGVtczogYW55W10gPSBbXTtcblxuICAgICAgICAvLyBEZWZpbmUgbGEgc3VzY3JpcGNpw7NuIGFudGVzIGRlIHVzYXJsYVxuXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUgJiYgIXRoaXMuZXhpdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKTsgLy8gQm9ycmEgZWwgYXJ0w61jdWxvXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucXVhbnRpdHkgPiB2YXJpYW50LnN0b2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiB2YXJpYW50LnN0b2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgIC8vIERlc3VzY3LDrWJldGUgYW50ZXMgZGUgYWN0dWFsaXphclxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkQWxsVG9DYXJ0KGl0ZW1zKTsgIC8vIEFjdHVhbGl6YSBlbCBjYXJyaXRvXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhpdFVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy51cGRhdGVBbGxTdG9jaygpOyAgLy8gVnVlbHZlIGEgdmVyaWZpY2FyIGVsIHN0b2NrXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG5cbiAgICBnZXRWYXJpYW50cyA9IHByb2R1Y3QgPT4ge1xuXG4gICAgICAgIGxldCBpdGVtID0gcHJvZHVjdC5wcm9kdWN0XG5cbiAgICAgICAgaWYgKGl0ZW0udmFyaWFudHMgJiYgaXRlbS52YXJpYW50cy5sZW5ndGggJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zICYmIGl0ZW0udmFyaWFudHNbMF0ub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gaXRlbS52YXJpYW50c1swXS5vcHRpb25zXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHRoaXMudmFyaWFudHNUb1Nob3cuZmluZChuYW1lID0+IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpXG4gICAgICAgICAgICBsZXQgb3B0aW9uc01hcCA9IFtdXG4gICAgICAgICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbkFkZGVkID0gZmFsc2U7ICAvLyBWYXJpYWJsZSBwYXJhIGV2aXRhciBtw7psdGlwbGVzIGluc2VyY2lvbmVzXG5cbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlID09ICdDT0xPUicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24yLnZhbHVlcy5mb3JFYWNoKGNvbG9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yLmNvZGUgPT0gb3B0aW9uW2VudHJ5XSAmJiAhb3B0aW9uQWRkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7IG5hbWU6IGVudHJ5LCB2YWx1ZTogb3B0aW9uW2VudHJ5XSwgaW1hZ2U6IGNvbG9yLmltYWdlLCBtb2JpbGVJbWFnZTogY29sb3IubW9iaWxlSW1hZ2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7IC8vIE1hcmNhciBvcGNpw7NuIGFncmVnYWRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIG5vIHNlIGHDsWFkacOzIGxhIG9wY2nDs24gZGUgQ09MT1IsIG1hbmVqYXIgb3RyYXMgb3BjaW9uZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25BZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlICE9PSAnQ09MT1InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25bZW50cnldXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkFkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBjcmVhdGVEaXNjb3VudE1lc3NhZ2Uoc2FsZXByaWNlOiBudW1iZXIsIHByaWNlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoaXNOYU4oc2FsZXByaWNlKSB8fCBpc05hTihwcmljZSkgfHwgc2FsZXByaWNlID49IHByaWNlIHx8IHNhbGVwcmljZSA8PSAwIHx8IHByaWNlIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkaXNjb3VudFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKCgocHJpY2UgLSBzYWxlcHJpY2UpIC8gcHJpY2UpICogMTAwKTtcblxuICAgICAgICBsZXQgZGlzY291bnRNZXNzYWdlID0gYCR7ZGlzY291bnRQZXJjZW50YWdlfSUgT0ZGYDtcbiAgICAgICAgcmV0dXJuIGRpc2NvdW50TWVzc2FnZTtcbiAgICB9XG4gICAgZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsLnR5cGUgPT0gJ2IyYicgPyB0aGlzLmNoYW5uZWwud2hvbGVzYWxlck1pbmltdW1QdXJjaGFzZUFtb3VudCA6IHRoaXMuY2hhbm5lbC5yZXRhaWxlck1pbmltdW1QdXJjaGFzZUFtb3VudFxuXG4gICAgfVxuXG4gICAgZXhjZWVkc01pbmltdW1BbW91bnQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPj0gdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVkaXJlY3RDaGVja291dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVmVyaWZpY2FyIHNpIGhheSB1biBiYWxhbmNlIGRlIGNsaWVudGUgYWN0aXZvXG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmJhbGFuY2VDdXN0b21lciQuc3Vic2NyaWJlKGJhbGFuY2VDdXN0b21lciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGJhbGFuY2VDdXN0b21lciAmJiBiYWxhbmNlQ3VzdG9tZXIuY3JlZGl0QW1vdW50ICE9PSBudWxsICYmIGJhbGFuY2VDdXN0b21lci5jcmVkaXRBbW91bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncXVhbnRpdHktbm90LWV4Y2VlZGVkLXdoaXRvdXQtYW1vdW50Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3F1YW50aXR5LW5vdC1leGNlZWRlZCcsIHsgYW1vdW50OiB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnVuc3Vic2NyaWJlKCk7IC8vIERlc3VzY3JpYmlyc2UgaW5tZWRpYXRhbWVudGUgZGVzcHXDqXMgZGUgb2J0ZW5lciBlbCB2YWxvclxuICAgICAgICB9XG4gICAgfVxuXG5cbn1cblxuXG5cbiJdfQ==