ng-easycommerce 0.0.660-beta.1 → 0.0.661

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 (47) hide show
  1. package/README.md +22 -58
  2. package/assets/ec-i18n/en.json +3 -1
  3. package/assets/ec-i18n/es.json +3 -1
  4. package/bundles/ng-easycommerce.umd.js +179 -512
  5. package/bundles/ng-easycommerce.umd.js.map +1 -1
  6. package/bundles/ng-easycommerce.umd.min.js +1 -1
  7. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  8. package/esm2015/lib/core.consts.js +6 -1
  9. package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +5 -3
  10. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +8 -5
  11. package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +11 -5
  12. package/esm2015/lib/ec-component/collection-ec/collection-ec.component.js +14 -450
  13. package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +30 -3
  14. package/esm2015/lib/ec-component/product-ec/product-ec.component.js +1 -2
  15. package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +8 -5
  16. package/esm2015/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +1 -3
  17. package/esm2015/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +3 -3
  18. package/esm2015/lib/ec-pipe/ec-currency-symbol.pipe.js +2 -1
  19. package/esm2015/lib/services/cart.service.js +27 -12
  20. package/esm2015/lib/services/currency.service.js +43 -7
  21. package/esm5/lib/core.consts.js +6 -1
  22. package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +5 -3
  23. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +8 -5
  24. package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +11 -5
  25. package/esm5/lib/ec-component/collection-ec/collection-ec.component.js +13 -458
  26. package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +48 -3
  27. package/esm5/lib/ec-component/product-ec/product-ec.component.js +1 -2
  28. package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +8 -5
  29. package/esm5/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +1 -3
  30. package/esm5/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +3 -3
  31. package/esm5/lib/ec-pipe/ec-currency-symbol.pipe.js +2 -1
  32. package/esm5/lib/services/cart.service.js +27 -12
  33. package/esm5/lib/services/currency.service.js +43 -7
  34. package/fesm2015/ng-easycommerce.js +157 -499
  35. package/fesm2015/ng-easycommerce.js.map +1 -1
  36. package/fesm5/ng-easycommerce.js +180 -513
  37. package/fesm5/ng-easycommerce.js.map +1 -1
  38. package/lib/core.consts.d.ts +5 -0
  39. package/lib/ec-component/account-ec/order-ec/order-ec.component.d.ts +1 -0
  40. package/lib/ec-component/cart-ec/cart-ec.component.d.ts +1 -0
  41. package/lib/ec-component/collection-ec/collection-ec.component.d.ts +4 -34
  42. package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +3 -0
  43. package/lib/ec-component/sidebar-ec/sidebar-ec.component.d.ts +1 -0
  44. package/lib/services/cart.service.d.ts +2 -2
  45. package/lib/services/currency.service.d.ts +14 -2
  46. package/ng-easycommerce.metadata.json +1 -1
  47. package/package.json +1 -1
@@ -65,11 +65,28 @@ var CurrencyService = /** @class */ (function () {
65
65
  this.getCurrencyListApi = function () { return 'shop-api/currencies'; };
66
66
  this.getConvertibilityApi = function (baseCurrency, targetCurrency) { return 'shop-api/currencies?baseCurrency=' + baseCurrency + '&targetCurrency=' + targetCurrency; };
67
67
  /**
68
- * @description Se carga la moneda por defecto.
68
+ * @description Se carga la moneda por defecto con metadatos (símbolo, posición, decimales).
69
69
  */
70
- this.loadDefaultCurrency = function (currency) {
71
- _this.consts.setCurrency(currency);
72
- _this.load();
70
+ this.loadDefaultCurrency = function (currencyCode) {
71
+ // Trae la lista igual para tener la configuración completa
72
+ _this.connection.get(_this.getCurrencyListApi()).toPromise().then(function (list) {
73
+ var _a;
74
+ _this.currencyListSubject.next(list);
75
+ _this.consts.setCurrencyTypeConfig(list);
76
+ var cfg = (_a = list) === null || _a === void 0 ? void 0 : _a.find(function (c) { return c.code === currencyCode; });
77
+ if (cfg) {
78
+ // Setea moneda activa con su configuración completa
79
+ _this.consts.setCurrency(cfg.code, cfg);
80
+ }
81
+ else {
82
+ _this.consts.setCurrency(currencyCode);
83
+ }
84
+ _this.load();
85
+ }).catch(function () {
86
+ // En caso de error, al menos fijá el código para no romper el flujo
87
+ _this.consts.setCurrency(currencyCode);
88
+ _this.load();
89
+ });
73
90
  };
74
91
  /**
75
92
  * @description calcula la convetibilidad del precio pasado por paramentro segun esta formula:
@@ -91,12 +108,32 @@ var CurrencyService = /** @class */ (function () {
91
108
  });
92
109
  }); };
93
110
  /**
94
- * @description Carga la lista de monedas/currencies.
111
+ * Carga la lista de monedas desde la API y registra la configuración completa en `Constants`.
112
+ *
113
+ * Si no existe una moneda activa guardada en `localStorage`, inicializa la moneda activa
114
+ * tomando la moneda base del canal (`ChannelConfigService.baseCurrency`) y sus metadatos
115
+ * obtenidos de la lista (símbolo, posición, decimales). Si no se encuentra la base en la
116
+ * lista, usa la primera disponible.
117
+ *
118
+ * Finalmente, llama a `load()` para propagar la configuración a los observables y (si aplica)
119
+ * actualizar `localStorage`.
120
+ *
121
+ * @sideEffect Actualiza `currencyList$`, `Constants.setCurrencyTypeConfig` y potencialmente
122
+ * `Constants.setCurrency`.
123
+ * @returns void
95
124
  */
96
125
  this.loadCurrencyList = function () {
97
126
  _this.connection.get(_this.getCurrencyListApi()).toPromise().then(function (res) {
127
+ var _a, _b, _c, _d;
98
128
  _this.currencyListSubject.next(res);
99
129
  _this.consts.setCurrencyTypeConfig(res);
130
+ var stored = localStorage.getItem('currency');
131
+ if (!stored) {
132
+ var base_1 = (_a = _this.injector.get(ChannelConfigService).getActiveChannel()) === null || _a === void 0 ? void 0 : _a.baseCurrency;
133
+ var cfg = (_c = (_b = res) === null || _b === void 0 ? void 0 : _b.find(function (c) { return c.code === base_1; }), (_c !== null && _c !== void 0 ? _c : (_d = res) === null || _d === void 0 ? void 0 : _d[0]));
134
+ if (cfg)
135
+ _this.consts.setCurrency(cfg.code, cfg);
136
+ }
100
137
  _this.load();
101
138
  });
102
139
  };
@@ -182,7 +219,6 @@ var CurrencyService = /** @class */ (function () {
182
219
  }
183
220
  };
184
221
  this.injector.get(ChannelConfigService).channelConfig$.subscribe(function (channel) {
185
- console.log(channel);
186
222
  channel.applyCurrencyExchange ? _this.loadCurrencyList() : _this.loadDefaultCurrency(channel.baseCurrency);
187
223
  console.log(_this.enableApplyCurrencyExchange);
188
224
  });
@@ -202,4 +238,4 @@ var CurrencyService = /** @class */ (function () {
202
238
  return CurrencyService;
203
239
  }());
204
240
  export { CurrencyService };
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jdXJyZW5jeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBS2hFO0lBZUkseUJBQW9CLE1BQWlCLEVBQ3pCLFVBQTZCLEVBQzdCLE1BQW9CLEVBQ3BCLFFBQWtCO1FBSDlCLGlCQVNDO1FBVG1CLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBaEJ0QixvQkFBZSxHQUFvQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMxRSxrQkFBYSxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwRSx3QkFBbUIsR0FBMkIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFdEUsY0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsWUFBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FB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QUFjLENBQUMsU0FBUyxDQUFFLFVBQUEsT0FBTztZQUNyRSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3BCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUUsS0FBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7O2dCQVQyQixTQUFTO2dCQUNiLGlCQUFpQjtnQkFDckIsWUFBWTtnQkFDVixRQUFROzs7SUFsQnJCLGVBQWU7UUFIM0IsVUFBVSxDQUFDO1lBQ1IsVUFBVSxFQUFFLE1BQU07U0FDckIsQ0FBQztPQUNXLGVBQWUsQ0F3STNCOzBCQW5KRDtDQW1KQyxBQXhJRCxJQXdJQztTQXhJWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2NvcmUuY29uc3RzJztcclxuaW1wb3J0IHsgQ3VycmVuY3lDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2N1cnJlbmN5Q29uZmlnJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VycmVuY3lTZXJ2aWNlIHtcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbmN5U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEN1cnJlbmN5Q29uZmlnPiA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pXHJcbiAgICBwcml2YXRlIHVwZGF0ZVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxCb29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpXHJcbiAgICBwcml2YXRlIGN1cnJlbmN5TGlzdFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKVxyXG5cclxuICAgIHB1YmxpYyBjdXJyZW5jeSQgPSB0aGlzLmN1cnJlbmN5U3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyB1cGRhdGUkID0gdGhpcy51cGRhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGN1cnJlbmN5TGlzdCQgPSB0aGlzLmN1cnJlbmN5TGlzdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBcclxuICAgIHByaXZhdGUgZW5hYmxlQXBwbHlDdXJyZW5jeUV4Y2hhbmdlOkJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIHByaXZhdGUgZ2V0Q3VycmVuY3lMaXN0QXBpID0gKCkgPT4gJ3Nob3AtYXBpL2N1cnJlbmNpZXMnO1xyXG4gICAgcHJpdmF0ZSBnZXRDb252ZXJ0aWJpbGl0eUFwaSA9IChiYXNlQ3VycmVuY3k6IGFueSwgdGFyZ2V0Q3VycmVuY3k6IGFueSkgPT4gJ3Nob3AtYXBpL2N1cnJlbmNpZXM/YmFzZUN1cnJlbmN5PScgKyBiYXNlQ3VycmVuY3kgKyAnJnRhcmdldEN1cnJlbmN5PScgKyB0YXJnZXRDdXJyZW5jeTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHByaXZhdGUgY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLmdldChDaGFubmVsQ29uZmlnU2VydmljZSkuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKCBjaGFubmVsID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYW5uZWwpXHJcbiAgICAgICAgICAgICAgICBjaGFubmVsLmFwcGx5Q3VycmVuY3lFeGNoYW5nZSA/ICB0aGlzLmxvYWRDdXJyZW5jeUxpc3QoKSA6IHRoaXMubG9hZERlZmF1bHRDdXJyZW5jeShjaGFubmVsLmJhc2VDdXJyZW5jeSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmVuYWJsZUFwcGx5Q3VycmVuY3lFeGNoYW5nZSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2UgY2FyZ2EgbGEgbW9uZWRhIHBvciBkZWZlY3RvLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGxvYWREZWZhdWx0Q3VycmVuY3kgPSAoY3VycmVuY3kpID0+IHtcclxuICAgICAgICB0aGlzLmNvbnN0cy5zZXRDdXJyZW5jeShjdXJyZW5jeSk7XHJcbiAgICAgICAgdGhpcy5sb2FkKClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBjYWxjdWxhIGxhIGNvbnZldGliaWxpZGFkIGRlbCBwcmVjaW8gIHBhc2FkbyBwb3IgcGFyYW1lbnRybyBzZWd1biBlc3RhIGZvcm11bGE6XHJcbiAgICAgKiAqKmMgPSBhICogYioqIGRvbmRlICpjPW1vbmVkYSBkZXNwdWVzIGRlbCBjYW1iaW8qLCAqYT12YWxvciBxdWUgcXVpZXJvIGNhbWJpYXIqIHkgKmI9cmF0aW8gZGUgY2FtYmlvKi4gXHJcbiAgICAgKiBAcGFyYW0gcHJpY2UgUHJlY2lvIGEgY2FtYmlhclxyXG4gICAgICogQHBhcmFtIHJhdGlvIFJhdGlvIGRlIGNhbWJpb1xyXG4gICAgICogQHJldHVybnMgU2kgZWwgcmF0aW8gbm8gZXMgbnVsbCwgcmV0b3JuYSBlbCBwcmVjaW8gY2FtYmlhZG8sIHNpbm8gcmV0b3JuYSBlbCBwcmVjaW8gc2luIGNhbWJpb3MuIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2FsY3VsYXRlQ29udmV0aWJpbGl0eSA9IChwcmljZSwgcmF0aW8pID0+IHtcclxuICAgICAgICByZXR1cm4gcmF0aW8gPyBwcmljZSAqIHJhdGlvIDogcHJpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29kZSBDb2RpZ28gZGUgbW9uZWRhIGEgbGEgcXVlIHNlIGRlc2VhIGNhbWJpYXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEN1cnJlbmN5ID0gYXN5bmMgKGNvZGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udmVydGliaWxpdHkodGhpcy5jb25zdHMuY3VycmVuY3kuY29kZSwgY29kZSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDYXJnYSBsYSBsaXN0YSBkZSBtb25lZGFzL2N1cnJlbmNpZXMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9hZEN1cnJlbmN5TGlzdCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuZ2V0Q3VycmVuY3lMaXN0QXBpKCkpLnRvUHJvbWlzZSgpLnRoZW4oXHJcbiAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbmN5TGlzdFN1YmplY3QubmV4dChyZXMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cy5zZXRDdXJyZW5jeVR5cGVDb25maWcocmVzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkKClcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGdlbmVyYSBsYSBjYXJnYSB5IGNvbmZpZ3VyYWNpw7NuIGRlIGxhIG1vbmVkYSBlbGVnaWRhIHBhcmEgbGEgY29udmVyc2lvbi5cclxuICAgICAqIEBwYXJhbSBjdXJyZW5jeSBNb25lZGEgYSBjb252ZXJ0aXIuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9hZEN1cnJlbmN5ID0gKCBjdXJyZW5jeTphbnkpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbmN5U3ViamVjdC5uZXh0KGN1cnJlbmN5KTtcclxuICAgICAgICB0aGlzLmNvbnN0cy5zZXRDdXJyZW5jeShjdXJyZW5jeS5jb2RlKTtcclxuICAgICAgICBsZXQgdXBkYXRlID0gdGhpcy51cGRhdGVTdWJqZWN0LmdldFZhbHVlKClcclxuICAgICAgICB0aGlzLnVwZGF0ZVN1YmplY3QubmV4dCghdXBkYXRlKVxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjdXJyZW5jeScsIEpTT04uc3RyaW5naWZ5KHRoaXMuY29uc3RzLmN1cnJlbmN5KSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZW5lcmEgbGEgY29udmVydGliaWxpZGFkIGRlIGxhIG1vbmVkYSBiYXNlIGEgbGEgbnVldmEuIFNpIGJhc2VDdXJyZW5jeSBubyB0aWVuZSB2YWxvciBcclxuICAgICAqIGVudG9uY2VzIHV0aWxpemEgbGEgbW9uZWRhIGJhc2UgZGVsIGNhbmFsLlxyXG4gICAgICogQHBhcmFtIGN1cnJlbmN5IE9iamV0byBkZSBsYSBtb25lZGEgZGVzdGluby5cclxuICAgICAqIEBwYXJhbSBiYXNlQ3VycmVuY3kgQ29kaWdvIGRlIGxhIG1vbmVkYSBiYXNlLiAqRWo6IFVTRCB8IEFSUyB8IEVVUiB8Li4uKlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUNvbnZlcnRpYmlsaXR5ID0gYXN5bmMgKGN1cnJlbmN5OmFueSwgYmFzZUN1cnJlbmN5PzpzdHJpbmcpID0+IHtcclxuICAgICAgICBpZighYmFzZUN1cnJlbmN5KXtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGJhc2VDdXJyZW5jeSA9IGF3YWl0IHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5uZWxDb25maWdTZXJ2aWNlKS5nZXRBY3RpdmVDaGFubmVsKCkuYmFzZUN1cnJlbmN5OyBcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgICAgICAgIGJhc2VDdXJyZW5jeSA9ICdVU0QnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoY3VycmVuY3kuY29kZSA9PSBiYXNlQ3VycmVuY3kpe1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDdXJyZW5jeShjdXJyZW5jeSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udmVydGliaWxpdHkoYmFzZUN1cnJlbmN5LGN1cnJlbmN5LmNvZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPYnRpZW5lIGxhIGNvbnZlcnNpb24gZGVzZGUgbGEgbW9uZWRhIGJhc2UgYSBsYSBkZXN0aW5vLiBSZWNpYmUgdW4gb2JqZXRvIGRlIHRpcG8gQ3VycmVuY3lDb25maWcuXHJcbiAgICAgKiBTaSBsYSBjb252ZXJzaW9uIHJldG9ybmEgcmVzdWx0YWRvIHJlYWxpemEgZWwgY2FtYmlvLCBkZSBsbyBjb250cmFyaW8gZW1pdGUgdW4gbWVuc2FqZSBkZSBlcnJvci5cclxuICAgICAqIEBwYXJhbSBiYXNlQ3VycmVuY3kgQ29kaWdvIGRlIGxhIG1vbmVkYSBiYXNlLlxyXG4gICAgICogQHBhcmFtIHRhcmdldEN1cnJlbmN5IENvZGlnbyBkZSBsYSBtb25lZGEgZGVzdGluby5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRDb252ZXJ0aWJpbGl0eSA9IChiYXNlQ3VycmVuY3k6IGFueSwgdGFyZ2V0Q3VycmVuY3k6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuZ2V0Q29udmVydGliaWxpdHlBcGkoYmFzZUN1cnJlbmN5LCB0YXJnZXRDdXJyZW5jeSkpXHJcbiAgICAgICAgICAgICAgICAudG9Qcm9taXNlKCkudGhlbihcclxuICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcEN1cnJlbmN5ID0gcmVzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRDdXJyZW5jeSh0ZW1wQ3VycmVuY3kpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsYSB2YXJpYWJsZSByZXMgbm8gY29udGllbmUgdmFsb3IsIGFzZWd1cmVzZSBkZSBxdWUgZXN0YSBjb252ZXJzacOzbiBlc3RlIGNvbmZpZ3VyYWRhIGVuIGVsIGJhY2tvZmZpY2UnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvdygnZXJyb3ItY29udmVydGliaWxpdHknKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKS5jYXRjaChlcnIgPT4gY29uc29sZS5sb2coZXJyKSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDYXJnYSBsYSBtb25lZGEsIHNpIGhheSB1bmEgZW4gZWwgbG9jYWxzdG9yYWdlIHRvbWEgZXNhIHkgcmVhbGl6YSBsYSBjb252ZXJzaW9uLlxyXG4gICAgICogZGUgbG8gY29udHJhcmlvIHNvbG8gc2V0ZWEgZW4gZWwgb2JzZXJ2YWJsZSBjdXJyZW5jeVN1YmplY3QgZWwgdmFsb3IgcG9yIGRlZmVjdG8gY2FyZ2FkbyBlbiBsYXMgY29uc3RhbnRlcy4gXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9hZCA9ICgpID0+IHtcclxuICAgICAgICBsZXQgbG9jYWxTdG9yYWdlQ3VycmVuY3kgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVuY3knKVxyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2VDdXJyZW5jeSkge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVuY3kgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZUN1cnJlbmN5KVxyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlQ29udmVydGliaWxpdHkoY3VycmVuY3kpIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3lTdWJqZWN0Lm5leHQodGhpcy5jb25zdHMuY3VycmVuY3kpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxufVxyXG4iXX0=
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jdXJyZW5jeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBS2hFO0lBZUkseUJBQW9CLE1BQWlCLEVBQ3pCLFVBQTZCLEVBQzdCLE1BQW9CLEVBQ3BCLFFBQWtCO1FBSDlCLGlCQVFDO1FBUm1CLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBaEJ0QixvQkFBZSxHQUFvQyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMxRSxrQkFBYSxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwRSx3QkFBbUIsR0FBMkIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFdEUsY0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsWUFBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FB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QUFlLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7YUFDbEQ7UUFDTCxDQUFDLENBQUE7UUFySkcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQUEsT0FBTztZQUNwRSxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSSxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztnQkFSMkIsU0FBUztnQkFDYixpQkFBaUI7Z0JBQ3JCLFlBQVk7Z0JBQ1YsUUFBUTs7O0lBbEJyQixlQUFlO1FBSDNCLFVBQVUsQ0FBQztZQUNSLFVBQVUsRUFBRSxNQUFNO1NBQ3JCLENBQUM7T0FDVyxlQUFlLENBMEszQjswQkFyTEQ7Q0FxTEMsQUExS0QsSUEwS0M7U0ExS1ksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCB7IEN1cnJlbmN5Q29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jdXJyZW5jeUNvbmZpZyc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uL3V0aWxzL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY2hhbm5lbC1jb25maWcuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1cnJlbmN5U2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW5jeVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDdXJyZW5jeUNvbmZpZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KVxyXG4gICAgcHJpdmF0ZSB1cGRhdGVTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8Qm9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKVxyXG4gICAgcHJpdmF0ZSBjdXJyZW5jeUxpc3RTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSlcclxuXHJcbiAgICBwdWJsaWMgY3VycmVuY3kkID0gdGhpcy5jdXJyZW5jeVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgdXBkYXRlJCA9IHRoaXMudXBkYXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIHB1YmxpYyBjdXJyZW5jeUxpc3QkID0gdGhpcy5jdXJyZW5jeUxpc3RTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIHByaXZhdGUgZW5hYmxlQXBwbHlDdXJyZW5jeUV4Y2hhbmdlOiBCb29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwcml2YXRlIGdldEN1cnJlbmN5TGlzdEFwaSA9ICgpID0+ICdzaG9wLWFwaS9jdXJyZW5jaWVzJztcclxuICAgIHByaXZhdGUgZ2V0Q29udmVydGliaWxpdHlBcGkgPSAoYmFzZUN1cnJlbmN5OiBhbnksIHRhcmdldEN1cnJlbmN5OiBhbnkpID0+ICdzaG9wLWFwaS9jdXJyZW5jaWVzP2Jhc2VDdXJyZW5jeT0nICsgYmFzZUN1cnJlbmN5ICsgJyZ0YXJnZXRDdXJyZW5jeT0nICsgdGFyZ2V0Q3VycmVuY3k7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25zdHM6IENvbnN0YW50cyxcclxuICAgICAgICBwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICB0aGlzLmluamVjdG9yLmdldChDaGFubmVsQ29uZmlnU2VydmljZSkuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKGNoYW5uZWwgPT4ge1xyXG4gICAgICAgICAgICBjaGFubmVsLmFwcGx5Q3VycmVuY3lFeGNoYW5nZSA/IHRoaXMubG9hZEN1cnJlbmN5TGlzdCgpIDogdGhpcy5sb2FkRGVmYXVsdEN1cnJlbmN5KGNoYW5uZWwuYmFzZUN1cnJlbmN5KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5lbmFibGVBcHBseUN1cnJlbmN5RXhjaGFuZ2UpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2UgY2FyZ2EgbGEgbW9uZWRhIHBvciBkZWZlY3RvIGNvbiBtZXRhZGF0b3MgKHPDrW1ib2xvLCBwb3NpY2nDs24sIGRlY2ltYWxlcykuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9hZERlZmF1bHRDdXJyZW5jeSA9IChjdXJyZW5jeUNvZGUpID0+IHtcclxuICAgICAgICAvLyBUcmFlIGxhIGxpc3RhIGlndWFsIHBhcmEgdGVuZXIgbGEgY29uZmlndXJhY2nDs24gY29tcGxldGFcclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuZ2V0Q3VycmVuY3lMaXN0QXBpKCkpLnRvUHJvbWlzZSgpLnRoZW4oKGxpc3Q6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3lMaXN0U3ViamVjdC5uZXh0KGxpc3QpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnN0cy5zZXRDdXJyZW5jeVR5cGVDb25maWcobGlzdCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjZmcgPSBsaXN0Py5maW5kKGMgPT4gYy5jb2RlID09PSBjdXJyZW5jeUNvZGUpO1xyXG4gICAgICAgICAgICBpZiAoY2ZnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZXRlYSBtb25lZGEgYWN0aXZhIGNvbiBzdSBjb25maWd1cmFjacOzbiBjb21wbGV0YVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHMuc2V0Q3VycmVuY3koY2ZnLmNvZGUsIGNmZyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cy5zZXRDdXJyZW5jeShjdXJyZW5jeUNvZGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWQoKTtcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIEVuIGNhc28gZGUgZXJyb3IsIGFsIG1lbm9zIGZpasOhIGVsIGPDs2RpZ28gcGFyYSBubyByb21wZXIgZWwgZmx1am9cclxuICAgICAgICAgICAgdGhpcy5jb25zdHMuc2V0Q3VycmVuY3koY3VycmVuY3lDb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gY2FsY3VsYSBsYSBjb252ZXRpYmlsaWRhZCBkZWwgcHJlY2lvICBwYXNhZG8gcG9yIHBhcmFtZW50cm8gc2VndW4gZXN0YSBmb3JtdWxhOlxyXG4gICAgICogKipjID0gYSAqIGIqKiBkb25kZSAqYz1tb25lZGEgZGVzcHVlcyBkZWwgY2FtYmlvKiwgKmE9dmFsb3IgcXVlIHF1aWVybyBjYW1iaWFyKiB5ICpiPXJhdGlvIGRlIGNhbWJpbyouIFxyXG4gICAgICogQHBhcmFtIHByaWNlIFByZWNpbyBhIGNhbWJpYXJcclxuICAgICAqIEBwYXJhbSByYXRpbyBSYXRpbyBkZSBjYW1iaW9cclxuICAgICAqIEByZXR1cm5zIFNpIGVsIHJhdGlvIG5vIGVzIG51bGwsIHJldG9ybmEgZWwgcHJlY2lvIGNhbWJpYWRvLCBzaW5vIHJldG9ybmEgZWwgcHJlY2lvIHNpbiBjYW1iaW9zLiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNhbGN1bGF0ZUNvbnZldGliaWxpdHkgPSAocHJpY2UsIHJhdGlvKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJhdGlvID8gcHJpY2UgKiByYXRpbyA6IHByaWNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvZGUgQ29kaWdvIGRlIG1vbmVkYSBhIGxhIHF1ZSBzZSBkZXNlYSBjYW1iaWFyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRDdXJyZW5jeSA9IGFzeW5jIChjb2RlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmdldENvbnZlcnRpYmlsaXR5KHRoaXMuY29uc3RzLmN1cnJlbmN5LmNvZGUsIGNvZGUpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYXJnYSBsYSBsaXN0YSBkZSBtb25lZGFzIGRlc2RlIGxhIEFQSSB5IHJlZ2lzdHJhIGxhIGNvbmZpZ3VyYWNpw7NuIGNvbXBsZXRhIGVuIGBDb25zdGFudHNgLlxyXG4gICAgICpcclxuICAgICAqIFNpIG5vIGV4aXN0ZSB1bmEgbW9uZWRhIGFjdGl2YSBndWFyZGFkYSBlbiBgbG9jYWxTdG9yYWdlYCwgaW5pY2lhbGl6YSBsYSBtb25lZGEgYWN0aXZhXHJcbiAgICAgKiB0b21hbmRvIGxhIG1vbmVkYSBiYXNlIGRlbCBjYW5hbCAoYENoYW5uZWxDb25maWdTZXJ2aWNlLmJhc2VDdXJyZW5jeWApIHkgc3VzIG1ldGFkYXRvc1xyXG4gICAgICogb2J0ZW5pZG9zIGRlIGxhIGxpc3RhIChzw61tYm9sbywgcG9zaWNpw7NuLCBkZWNpbWFsZXMpLiBTaSBubyBzZSBlbmN1ZW50cmEgbGEgYmFzZSBlbiBsYVxyXG4gICAgICogbGlzdGEsIHVzYSBsYSBwcmltZXJhIGRpc3BvbmlibGUuXHJcbiAgICAgKlxyXG4gICAgICogRmluYWxtZW50ZSwgbGxhbWEgYSBgbG9hZCgpYCBwYXJhIHByb3BhZ2FyIGxhIGNvbmZpZ3VyYWNpw7NuIGEgbG9zIG9ic2VydmFibGVzIHkgKHNpIGFwbGljYSlcclxuICAgICAqIGFjdHVhbGl6YXIgYGxvY2FsU3RvcmFnZWAuXHJcbiAgICAgKlxyXG4gICAgICogQHNpZGVFZmZlY3QgQWN0dWFsaXphIGBjdXJyZW5jeUxpc3QkYCwgYENvbnN0YW50cy5zZXRDdXJyZW5jeVR5cGVDb25maWdgIHkgcG90ZW5jaWFsbWVudGVcclxuICAgICAqICAgICAgICAgICAgIGBDb25zdGFudHMuc2V0Q3VycmVuY3lgLlxyXG4gICAgICogQHJldHVybnMgdm9pZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGxvYWRDdXJyZW5jeUxpc3QgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmdldEN1cnJlbmN5TGlzdEFwaSgpKS50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3lMaXN0U3ViamVjdC5uZXh0KHJlcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uc3RzLnNldEN1cnJlbmN5VHlwZUNvbmZpZyhyZXMpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbmN5Jyk7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5pbmplY3Rvci5nZXQoQ2hhbm5lbENvbmZpZ1NlcnZpY2UpLmdldEFjdGl2ZUNoYW5uZWwoKT8uYmFzZUN1cnJlbmN5O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2ZnID0gcmVzPy5maW5kKGMgPT4gYy5jb2RlID09PSBiYXNlKSA/PyByZXM/LlswXTtcclxuICAgICAgICAgICAgICAgIGlmIChjZmcpIHRoaXMuY29uc3RzLnNldEN1cnJlbmN5KGNmZy5jb2RlLCBjZmcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGdlbmVyYSBsYSBjYXJnYSB5IGNvbmZpZ3VyYWNpw7NuIGRlIGxhIG1vbmVkYSBlbGVnaWRhIHBhcmEgbGEgY29udmVyc2lvbi5cclxuICAgICAqIEBwYXJhbSBjdXJyZW5jeSBNb25lZGEgYSBjb252ZXJ0aXIuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9hZEN1cnJlbmN5ID0gKGN1cnJlbmN5OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbmN5U3ViamVjdC5uZXh0KGN1cnJlbmN5KTtcclxuICAgICAgICB0aGlzLmNvbnN0cy5zZXRDdXJyZW5jeShjdXJyZW5jeS5jb2RlKTtcclxuICAgICAgICBsZXQgdXBkYXRlID0gdGhpcy51cGRhdGVTdWJqZWN0LmdldFZhbHVlKClcclxuICAgICAgICB0aGlzLnVwZGF0ZVN1YmplY3QubmV4dCghdXBkYXRlKVxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjdXJyZW5jeScsIEpTT04uc3RyaW5naWZ5KHRoaXMuY29uc3RzLmN1cnJlbmN5KSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZW5lcmEgbGEgY29udmVydGliaWxpZGFkIGRlIGxhIG1vbmVkYSBiYXNlIGEgbGEgbnVldmEuIFNpIGJhc2VDdXJyZW5jeSBubyB0aWVuZSB2YWxvciBcclxuICAgICAqIGVudG9uY2VzIHV0aWxpemEgbGEgbW9uZWRhIGJhc2UgZGVsIGNhbmFsLlxyXG4gICAgICogQHBhcmFtIGN1cnJlbmN5IE9iamV0byBkZSBsYSBtb25lZGEgZGVzdGluby5cclxuICAgICAqIEBwYXJhbSBiYXNlQ3VycmVuY3kgQ29kaWdvIGRlIGxhIG1vbmVkYSBiYXNlLiAqRWo6IFVTRCB8IEFSUyB8IEVVUiB8Li4uKlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUNvbnZlcnRpYmlsaXR5ID0gYXN5bmMgKGN1cnJlbmN5OiBhbnksIGJhc2VDdXJyZW5jeT86IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICghYmFzZUN1cnJlbmN5KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlQ3VycmVuY3kgPSBhd2FpdCB0aGlzLmluamVjdG9yLmdldChDaGFubmVsQ29uZmlnU2VydmljZSkuZ2V0QWN0aXZlQ2hhbm5lbCgpLmJhc2VDdXJyZW5jeTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgICAgICAgIGJhc2VDdXJyZW5jeSA9ICdVU0QnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGN1cnJlbmN5LmNvZGUgPT0gYmFzZUN1cnJlbmN5KSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEN1cnJlbmN5KGN1cnJlbmN5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnZlcnRpYmlsaXR5KGJhc2VDdXJyZW5jeSwgY3VycmVuY3kuY29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9idGllbmUgbGEgY29udmVyc2lvbiBkZXNkZSBsYSBtb25lZGEgYmFzZSBhIGxhIGRlc3Rpbm8uIFJlY2liZSB1biBvYmpldG8gZGUgdGlwbyBDdXJyZW5jeUNvbmZpZy5cclxuICAgICAqIFNpIGxhIGNvbnZlcnNpb24gcmV0b3JuYSByZXN1bHRhZG8gcmVhbGl6YSBlbCBjYW1iaW8sIGRlIGxvIGNvbnRyYXJpbyBlbWl0ZSB1biBtZW5zYWplIGRlIGVycm9yLlxyXG4gICAgICogQHBhcmFtIGJhc2VDdXJyZW5jeSBDb2RpZ28gZGUgbGEgbW9uZWRhIGJhc2UuXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0Q3VycmVuY3kgQ29kaWdvIGRlIGxhIG1vbmVkYSBkZXN0aW5vLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldENvbnZlcnRpYmlsaXR5ID0gKGJhc2VDdXJyZW5jeTogYW55LCB0YXJnZXRDdXJyZW5jeTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmdldENvbnZlcnRpYmlsaXR5QXBpKGJhc2VDdXJyZW5jeSwgdGFyZ2V0Q3VycmVuY3kpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCkudGhlbihcclxuICAgICAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcEN1cnJlbmN5ID0gcmVzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEN1cnJlbmN5KHRlbXBDdXJyZW5jeSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsYSB2YXJpYWJsZSByZXMgbm8gY29udGllbmUgdmFsb3IsIGFzZWd1cmVzZSBkZSBxdWUgZXN0YSBjb252ZXJzacOzbiBlc3RlIGNvbmZpZ3VyYWRhIGVuIGVsIGJhY2tvZmZpY2UnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zaG93KCdlcnJvci1jb252ZXJ0aWJpbGl0eScpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApLmNhdGNoKGVyciA9PiBjb25zb2xlLmxvZyhlcnIpKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENhcmdhIGxhIG1vbmVkYSwgc2kgaGF5IHVuYSBlbiBlbCBsb2NhbHN0b3JhZ2UgdG9tYSBlc2EgeSByZWFsaXphIGxhIGNvbnZlcnNpb24uXHJcbiAgICAgKiBkZSBsbyBjb250cmFyaW8gc29sbyBzZXRlYSBlbiBlbCBvYnNlcnZhYmxlIGN1cnJlbmN5U3ViamVjdCBlbCB2YWxvciBwb3IgZGVmZWN0byBjYXJnYWRvIGVuIGxhcyBjb25zdGFudGVzLiBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBsb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCBsb2NhbFN0b3JhZ2VDdXJyZW5jeSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW5jeScpXHJcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZUN1cnJlbmN5KSB7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW5jeSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlQ3VycmVuY3kpXHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb252ZXJ0aWJpbGl0eShjdXJyZW5jeSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbmN5U3ViamVjdC5uZXh0KHRoaXMuY29uc3RzLmN1cnJlbmN5KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuIl19