@snabcentr/client-ui 3.49.4 → 3.50.1

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 (43) hide show
  1. package/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.d.ts +5 -5
  2. package/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.d.ts +5 -5
  3. package/cart/index.d.ts +0 -1
  4. package/catalog/price-card-inline/sc-price-card-inline.component.d.ts +1 -1
  5. package/configurators/sandwich/sc-i-new-cart-item-sandwich.d.ts +2 -2
  6. package/configurators/sandwich/sc-sandwich.component.d.ts +2 -2
  7. package/directives/abstract-price-card/abstract-sc-price-card.directive.d.ts +6 -6
  8. package/esm2022/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.mjs +11 -11
  9. package/esm2022/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.mjs +6 -6
  10. package/esm2022/cart/index.mjs +1 -2
  11. package/esm2022/catalog/price-card/sc-price-card.component.mjs +3 -3
  12. package/esm2022/catalog/price-card-inline/sc-price-card-inline.component.mjs +3 -3
  13. package/esm2022/configurators/sandwich/sc-i-new-cart-item-sandwich.mjs +1 -1
  14. package/esm2022/configurators/sandwich/sc-sandwich.component.mjs +5 -5
  15. package/esm2022/directives/abstract-price-card/abstract-sc-price-card.directive.mjs +8 -8
  16. package/esm2022/order/draft/sc-draft.component.mjs +117 -0
  17. package/esm2022/order/index.mjs +7 -2
  18. package/esm2022/order/models/sc-i-cart-items-by-direction.mjs +22 -0
  19. package/esm2022/order/order-item/sc-order-item.component.mjs +85 -0
  20. package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +203 -0
  21. package/esm2022/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.mjs +75 -0
  22. package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +75 -0
  23. package/esm2022/order/sc-order.module.mjs +5 -6
  24. package/esm2022/providers/index.mjs +2 -1
  25. package/esm2022/providers/sc-dialog-service.providers.mjs +6 -0
  26. package/fesm2022/snabcentr-client-ui.mjs +1839 -1410
  27. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  28. package/order/draft/sc-draft.component.d.ts +63 -0
  29. package/order/index.d.ts +6 -1
  30. package/order/models/sc-i-cart-items-by-direction.d.ts +25 -0
  31. package/{cart/cart-item/sc-cart-item.component.d.ts → order/order-item/sc-order-item.component.d.ts} +7 -3
  32. package/order/order-items-list/sc-order-items-list.component.d.ts +102 -0
  33. package/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.d.ts +55 -0
  34. package/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.d.ts +55 -0
  35. package/order/sc-order.module.d.ts +10 -11
  36. package/package.json +2 -1
  37. package/providers/index.d.ts +1 -0
  38. package/providers/sc-dialog-service.providers.d.ts +41 -0
  39. package/styles/taiga/snabcentr-tailwind-preset.js +2 -3
  40. package/styles/tailwind/tailwind.scss +96 -100
  41. package/esm2022/cart/cart-item/sc-cart-item.component.mjs +0 -71
  42. package/esm2022/order/order-item-mobile/sc-order-item-mobile.component.mjs +0 -60
  43. package/order/order-item-mobile/sc-order-item-mobile.component.d.ts +0 -39
@@ -1,6 +1,6 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { FormControl, FormGroup } from '@angular/forms';
3
- import { ScCartItem, ScINewCartItemBase, ScProduct } from '@snabcentr/client-core';
3
+ import { ScINewOrderItemBase, ScOrderItem, ScProduct } from '@snabcentr/client-core';
4
4
  import { Observable } from 'rxjs';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
@@ -26,7 +26,7 @@ export declare class ScAddOrEditingCartItemFormComponent implements OnInit {
26
26
  /**
27
27
  * Данные о товаре в корзине.
28
28
  */
29
- readonly cartItem: import("@angular/core").InputSignal<ScCartItem | undefined>;
29
+ readonly orderItem: import("@angular/core").InputSignal<ScOrderItem | undefined>;
30
30
  /**
31
31
  * Признак загрузки данных.
32
32
  */
@@ -62,11 +62,11 @@ export declare class ScAddOrEditingCartItemFormComponent implements OnInit {
62
62
  /**
63
63
  * {@link Output} события добавления товара в корзину.
64
64
  */
65
- readonly addToCart: import("@angular/core").OutputEmitterRef<ScINewCartItemBase>;
65
+ readonly addProduct: import("@angular/core").OutputEmitterRef<ScINewOrderItemBase>;
66
66
  /**
67
67
  * {@link Output} события редактирования товара в корзине.
68
68
  */
69
- readonly editCartItem: import("@angular/core").OutputEmitterRef<Omit<ScINewCartItemBase, "productId">>;
69
+ readonly editCartItem: import("@angular/core").OutputEmitterRef<Omit<ScINewOrderItemBase, "productId">>;
70
70
  /**
71
71
  * Объект-помощник для работы со значениями единиц измерения товара.
72
72
  */
@@ -98,5 +98,5 @@ export declare class ScAddOrEditingCartItemFormComponent implements OnInit {
98
98
  */
99
99
  protected onSubmit(): void;
100
100
  static ɵfac: i0.ɵɵFactoryDeclaration<ScAddOrEditingCartItemFormComponent, never>;
101
- static ɵcmp: i0.ɵɵComponentDeclaration<ScAddOrEditingCartItemFormComponent, "sc-add-or-editing-cart-item-form", never, { "product": { "alias": "product"; "required": true; "isSignal": true; }; "cartItem": { "alias": "cartItem"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; }, { "addToCart": "addToCart"; "editCartItem": "editCartItem"; }, never, never, true, never>;
101
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScAddOrEditingCartItemFormComponent, "sc-add-or-editing-cart-item-form", never, { "product": { "alias": "product"; "required": true; "isSignal": true; }; "orderItem": { "alias": "orderItem"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; }, { "addProduct": "addProduct"; "editCartItem": "editCartItem"; }, never, never, true, never>;
102
102
  }
@@ -1,5 +1,5 @@
1
1
  import { Signal } from '@angular/core';
2
- import { ScCartItem, ScINewCartItemBase, ScProduct } from '@snabcentr/client-core';
2
+ import { ScINewOrderItemBase, ScOrderItem, ScProduct } from '@snabcentr/client-core';
3
3
  import { TuiDialogContext } from '@taiga-ui/core';
4
4
  import { Observable, Subject } from 'rxjs';
5
5
  import { ScAddOrEditingCartItemFormComponent } from './add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component';
@@ -15,11 +15,11 @@ export declare class ScAddOrEditingCartItemDialogComponent {
15
15
  /**
16
16
  * {@link Subject} события отправки формы.
17
17
  */
18
- readonly onSubmit: Subject<ScINewCartItemBase | Omit<ScINewCartItemBase, 'productId'>>;
18
+ readonly onSubmit: Subject<ScINewOrderItemBase>;
19
19
  /**
20
20
  * {@link Observable} запроса добавления / изменения товара в корзине.
21
21
  */
22
- readonly submit$: Observable<import("@snabcentr/client-core").ScCart | null>;
22
+ readonly submit$: Observable<import("@snabcentr/client-core").ScCart>;
23
23
  /**
24
24
  * {@link Observable} изменения состояния загрузки данных.
25
25
  */
@@ -29,7 +29,7 @@ export declare class ScAddOrEditingCartItemDialogComponent {
29
29
  */
30
30
  readonly context: TuiDialogContext<boolean, {
31
31
  product: ScProduct;
32
- cartItem: ScCartItem | undefined;
32
+ orderItem: ScOrderItem | undefined;
33
33
  }>;
34
34
  /**
35
35
  * Данные о товаре.
@@ -38,7 +38,7 @@ export declare class ScAddOrEditingCartItemDialogComponent {
38
38
  /**
39
39
  * Данные о товаре в корзине.
40
40
  */
41
- readonly cartItem: ScCartItem | undefined;
41
+ readonly orderItem: ScOrderItem | undefined;
42
42
  /**
43
43
  * Сервис для работы с корзиной.
44
44
  */
package/cart/index.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- export * from './cart-item/sc-cart-item.component';
2
1
  export * from './sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component';
3
2
  export * from './add-or-editing-cart-item-dialog';
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  * Компонент карточки товара во всю строку.
5
5
  */
6
6
  export declare class ScPriceCardInlineComponent extends AbstractScPriceCard {
7
- readonly type: import("@angular/core").InputSignal<"catalogItem" | "cartItem" | "orderItem">;
7
+ readonly type: import("@angular/core").InputSignal<"catalogItem" | "orderItem">;
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<ScPriceCardInlineComponent, never>;
9
9
  static ɵcmp: i0.ɵɵComponentDeclaration<ScPriceCardInlineComponent, "sc-price-card-inline", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
10
10
  }
@@ -1,8 +1,8 @@
1
- import { ScINewCartItemBase } from '@snabcentr/client-core';
1
+ import { ScINewOrderItemBase } from '@snabcentr/client-core';
2
2
  /**
3
3
  * Модель данных товара, который необходимо добавить в корзину, используя конфигуратор распила сэндвич-панелей.
4
4
  */
5
- export interface ScINewCartItemSandwich extends ScINewCartItemBase {
5
+ export interface ScINewCartItemSandwich extends ScINewOrderItemBase {
6
6
  /**
7
7
  * Идентификатор записи категории.
8
8
  */
@@ -1,6 +1,6 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { FormArray, FormControl, FormGroup, ValidatorFn } from '@angular/forms';
3
- import { ScCartItem, ScIConfiguratorCalculateResult, ScProduct } from '@snabcentr/client-core';
3
+ import { ScIConfiguratorCalculateResult, ScOrderItem, ScProduct } from '@snabcentr/client-core';
4
4
  import { Observable } from 'rxjs';
5
5
  import { ScISandwichSettings } from '../models/sandwich/sc-i-sandwich-settings';
6
6
  import * as i0 from "@angular/core";
@@ -27,7 +27,7 @@ export declare class ScSandwichComponent implements OnInit {
27
27
  /**
28
28
  * Позиция товара/услуги в корзине.
29
29
  */
30
- readonly cartItem: import("@angular/core").InputSignal<ScCartItem | undefined>;
30
+ readonly cartItem: import("@angular/core").InputSignal<ScOrderItem | undefined>;
31
31
  /**
32
32
  * Событие переключения отображения товаров.
33
33
  */
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter, WritableSignal } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
- import { ScCartItem, ScIImage, ScImageHelper, ScProduct, ScUnitsHelper } from '@snabcentr/client-core';
3
+ import { ScIImage, ScImageHelper, ScOrderItem, ScProduct, ScUnitsHelper } from '@snabcentr/client-core';
4
4
  import { Observable } from 'rxjs';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
@@ -12,13 +12,13 @@ export declare class AbstractScPriceCard {
12
12
  *
13
13
  * TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
14
14
  */
15
- get cartItem(): ScCartItem | undefined;
15
+ get orderItem(): ScOrderItem | undefined;
16
16
  /**
17
17
  * Позиция товара в корзине
18
18
  *
19
19
  * TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
20
20
  */
21
- set cartItem(value: ScCartItem | undefined);
21
+ set orderItem(value: ScOrderItem | undefined);
22
22
  /**
23
23
  * Объект товара.
24
24
  */
@@ -70,7 +70,7 @@ export declare class AbstractScPriceCard {
70
70
  /**
71
71
  * Событие нажатия на кнопку очистки количества товара.
72
72
  */
73
- readonly clickClearEvent: EventEmitter<ScCartItem>;
73
+ readonly clickClearEvent: EventEmitter<ScOrderItem>;
74
74
  /**
75
75
  * Событие нажатия на карточку товара.
76
76
  */
@@ -112,7 +112,7 @@ export declare class AbstractScPriceCard {
112
112
  *
113
113
  * TODO: Сделать товар в корзине наблюдаемой переменной после реализации TASK:[#7144].
114
114
  */
115
- private _cartItem;
115
+ private _orderItem;
116
116
  /**
117
117
  * Признак, что нужно показать скелетон.
118
118
  */
@@ -132,5 +132,5 @@ export declare class AbstractScPriceCard {
132
132
  */
133
133
  markForCheck(): void;
134
134
  static ɵfac: i0.ɵɵFactoryDeclaration<AbstractScPriceCard, never>;
135
- static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractScPriceCard, never, never, { "cartItem": { "alias": "cartItem"; "required": false; }; "product": { "alias": "product"; "required": false; }; "showQuantityControl": { "alias": "showQuantityControl"; "required": false; }; "href": { "alias": "href"; "required": false; }; }, { "clickFavoriteEvent": "clickFavoriteEvent"; "clickAddToCartEvent": "clickAddToCartEvent"; "clickClearEvent": "clickClearEvent"; "clickCardEvent": "clickCardEvent"; "clickPriceHistoryEvent": "clickPriceHistoryEvent"; "quantityValueChanges": "quantityValueChanges"; }, never, never, false, never>;
135
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractScPriceCard, never, never, { "orderItem": { "alias": "orderItem"; "required": false; }; "product": { "alias": "product"; "required": false; }; "showQuantityControl": { "alias": "showQuantityControl"; "required": false; }; "href": { "alias": "href"; "required": false; }; }, { "clickFavoriteEvent": "clickFavoriteEvent"; "clickAddToCartEvent": "clickAddToCartEvent"; "clickClearEvent": "clickClearEvent"; "clickCardEvent": "clickCardEvent"; "clickPriceHistoryEvent": "clickPriceHistoryEvent"; "quantityValueChanges": "quantityValueChanges"; }, never, never, false, never>;
136
136
  }
@@ -45,7 +45,7 @@ export class ScAddOrEditingCartItemFormComponent {
45
45
  /**
46
46
  * Данные о товаре в корзине.
47
47
  */
48
- this.cartItem = input();
48
+ this.orderItem = input();
49
49
  /**
50
50
  * Признак загрузки данных.
51
51
  */
@@ -82,7 +82,7 @@ export class ScAddOrEditingCartItemFormComponent {
82
82
  /**
83
83
  * {@link Output} события добавления товара в корзину.
84
84
  */
85
- this.addToCart = output();
85
+ this.addProduct = output();
86
86
  /**
87
87
  * {@link Output} события редактирования товара в корзине.
88
88
  */
@@ -108,12 +108,12 @@ export class ScAddOrEditingCartItemFormComponent {
108
108
  });
109
109
  if (this.productIsMeasurable()) {
110
110
  // Добавляем поле ввода длины, если товар измеряемый.
111
- this.form.addControl('length', new FormControl(this.cartItem()?.length ?? this.minLength() ?? 0.01, [Validators.required, Validators.min(0.01)]));
111
+ this.form.addControl('length', new FormControl(this.orderItem()?.length ?? this.minLength() ?? 0.01, [Validators.required, Validators.min(0.01)]));
112
112
  }
113
113
  // Устанавливаем количество из корзины или кратности товара.
114
114
  this.form.patchValue({
115
- quantity: this.cartItem()?.quantity ?? this.unitsHelper.productMultiplicity(this.product()),
116
- marker: this.cartItem()?.marker ?? '',
115
+ quantity: this.orderItem()?.quantity ?? this.unitsHelper.productMultiplicity(this.product()),
116
+ marker: this.orderItem()?.marker ?? '',
117
117
  });
118
118
  const step = this.lengthStep();
119
119
  if (this.isLengthConfigurator() && this.lengthStep() && this.form.controls.quantity.value && step) {
@@ -182,7 +182,7 @@ export class ScAddOrEditingCartItemFormComponent {
182
182
  // Удаляем null-поля из значения формы.
183
183
  const value = this.convertersService.removeNull(this.form.value);
184
184
  // Если это добавление нового товара — добавляем productId.
185
- if (!this.cartItem()) {
185
+ if (!this.orderItem()) {
186
186
  value.productId = this.product().id;
187
187
  }
188
188
  const step = this.lengthStep();
@@ -193,15 +193,15 @@ export class ScAddOrEditingCartItemFormComponent {
193
193
  // Помечаем все поля формы как "touch" и запускаем валидацию для отображения ошибок с сервера.
194
194
  tuiMarkControlAsTouchedAndValidate(this.form);
195
195
  // В зависимости от режима — редактируем или добавляем товар.
196
- if (this.cartItem()) {
196
+ if (this.orderItem()) {
197
197
  this.editCartItem.emit(value);
198
198
  }
199
199
  else {
200
- this.addToCart.emit(value);
200
+ this.addProduct.emit(value);
201
201
  }
202
202
  }
203
203
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScAddOrEditingCartItemFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
204
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScAddOrEditingCartItemFormComponent, isStandalone: true, selector: "sc-add-or-editing-cart-item-form", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null }, cartItem: { classPropertyName: "cartItem", publicName: "cartItem", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { addToCart: "addToCart", editCartItem: "editCartItem" }, ngImport: i0, template: "<!-- \u0424\u043E\u0440\u043C\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0438\u0437\u043C\u0435\u0440\u044F\u0435\u043C\u043E\u0433\u043E \u0442\u043E\u0432\u0430\u0440\u0430. -->\n<form\n *ngIf=\"product\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit()\"\n ScNextInputFocus\n class=\"flex flex-col gap-2\"\n>\n @let step = lengthStep();\n\n <!-- \u0414\u043B\u0438\u043D\u0430 \u0442\u043E\u0432\u0430\u0440\u0430 (\u043C\u0435\u0442\u0440\u0430\u0436) -->\n <label\n *ngIf=\"productIsMeasurable()\"\n tuiLabel\n >\n \u041C\u0435\u0442\u0440\u0430\u0436, {{ product().unit.name }}\n @if (!step || maxLength()) {\n {{ lengthHint() }}\n }\n\n <tui-textfield>\n <input\n tuiInputNumber\n formControlName=\"length\"\n [tuiNumberFormat]=\"{ precision: 2 }\"\n [max]=\"maxLength() || null\"\n [min]=\"minLength() || null\"\n (keydown.arrowDown)=\"onStepLength(-(lengthStep() ?? 0.01))\"\n (keydown.arrowUp)=\"onStepLength(lengthStep() ?? 0.01)\"\n autocomplete=\"length\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"length\"\n [error]=\"[] | tuiFieldError | async\"\n />\n <p\n *ngIf=\"lengthStep()\"\n class=\"tui-form__field-note\"\n >\n \u041C\u0435\u0442\u0440\u0430\u0436 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u0435\u043D {{ lengthStep() }}\n </p>\n </label>\n\n <!-- \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <label tuiLabel>\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E, \u0448\u0442.\n <tui-textfield>\n <tui-chip\n *ngIf=\"isLengthConfigurator() && productMultiplicity() && step\"\n size=\"s\"\n appearance=\"negative\"\n class=\"font-bold\"\n >\n x {{ step }} {{ product().unit.name }}\n </tui-chip>\n\n <input\n placeholder=\"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\"\n tuiInputNumber\n [tuiNumberFormat]=\"{ decimalMode: 'not-zero' }\"\n [min]=\"productMultiplicity()\"\n (keydown.arrowDown)=\"onStepQuantity(-productMultiplicity())\"\n (keydown.arrowUp)=\"onStepQuantity(productMultiplicity())\"\n formControlName=\"quantity\"\n autocomplete=\"quantity\"\n />\n </tui-textfield>\n <p class=\"tui-form__field-note\">\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u043E {{ productMultiplicity() }}</p>\n <tui-error\n formControlName=\"quantity\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430 -->\n <label tuiLabel>\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <tui-input formControlName=\"marker\">\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <input\n tuiTextfieldLegacy\n autocomplete=\"marker\"\n />\n </tui-input>\n <tui-error\n formControlName=\"marker\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <div class=\"flex flex-col items-center\">\n @let cost = totalCost$ | async;\n\n <div *ngIf=\"cost\">\n \u0418\u0442\u043E\u0433\u043E:<span class=\"text-2xl font-bold\">\n {{ cost | tuiAmount | async }}\n {{ product().currency.symbol }}\n </span>\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <button\n tuiButton\n iconStart=\"@tui.check\"\n [disabled]=\"form.invalid\"\n [loading]=\"isLoading()\"\n type=\"submit\"\n class=\"mt-2\"\n >\n {{ cartItem() ? '\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C' : '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443' }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ScNextInputFocusModule }, { kind: "directive", type: i2.ScNextInputFocusDirective, selector: "form[ScNextInputFocus]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "directive", type: ScSelectOnFocusinDirective, selector: "tui-input-number, tui-input, tui-input-phone, tui-input-date, tui-input-password, input[tuiInputNumber], input[tuiTextfield], input[tuiInputSlider]" }, { kind: "directive", type: TuiNumberFormat, selector: "[tuiNumberFormat]", inputs: ["tuiNumberFormat"] }, { kind: "component", type: TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "ngmodule", type: TuiInputModule }, { kind: "component", type: i3.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i3.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i4.TuiTextfieldComponent, selector: "input[tuiTextfieldLegacy], textarea[tuiTextfieldLegacy]" }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiFieldErrorPipe, name: "tuiFieldError" }, { kind: "directive", type: i5.TuiInputNumberDirective, selector: "input[tuiInputNumber]", inputs: ["min", "max", "prefix", "postfix"] }, { kind: "component", type: i6.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "pipe", type: TuiAmountPipe, name: "tuiAmount" }, { kind: "directive", type: TuiChip, selector: "tui-chip,[tuiChip]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
204
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScAddOrEditingCartItemFormComponent, isStandalone: true, selector: "sc-add-or-editing-cart-item-form", inputs: { product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null }, orderItem: { classPropertyName: "orderItem", publicName: "orderItem", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { addProduct: "addProduct", editCartItem: "editCartItem" }, ngImport: i0, template: "<!-- \u0424\u043E\u0440\u043C\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0438\u0437\u043C\u0435\u0440\u044F\u0435\u043C\u043E\u0433\u043E \u0442\u043E\u0432\u0430\u0440\u0430. -->\n<form\n *ngIf=\"product\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit()\"\n ScNextInputFocus\n class=\"flex flex-col gap-2\"\n>\n @let step = lengthStep();\n\n <!-- \u0414\u043B\u0438\u043D\u0430 \u0442\u043E\u0432\u0430\u0440\u0430 (\u043C\u0435\u0442\u0440\u0430\u0436) -->\n <label\n *ngIf=\"productIsMeasurable()\"\n tuiLabel\n >\n \u041C\u0435\u0442\u0440\u0430\u0436, {{ product().unit.name }}\n @if (!step || maxLength()) {\n {{ lengthHint() }}\n }\n\n <tui-textfield>\n <input\n tuiInputNumber\n formControlName=\"length\"\n [tuiNumberFormat]=\"{ precision: 2 }\"\n [max]=\"maxLength() || null\"\n [min]=\"minLength() || null\"\n (keydown.arrowDown)=\"onStepLength(-(lengthStep() ?? 0.01))\"\n (keydown.arrowUp)=\"onStepLength(lengthStep() ?? 0.01)\"\n autocomplete=\"length\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"length\"\n [error]=\"[] | tuiFieldError | async\"\n />\n <p\n *ngIf=\"lengthStep()\"\n class=\"tui-form__field-note\"\n >\n \u041C\u0435\u0442\u0440\u0430\u0436 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u0435\u043D {{ lengthStep() }}\n </p>\n </label>\n\n <!-- \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <label tuiLabel>\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E, \u0448\u0442.\n <tui-textfield>\n <tui-chip\n *ngIf=\"isLengthConfigurator() && productMultiplicity() && step\"\n size=\"s\"\n appearance=\"negative\"\n class=\"font-bold\"\n >\n x {{ step }} {{ product().unit.name }}\n </tui-chip>\n\n <input\n placeholder=\"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\"\n tuiInputNumber\n [tuiNumberFormat]=\"{ decimalMode: 'not-zero' }\"\n [min]=\"productMultiplicity()\"\n (keydown.arrowDown)=\"onStepQuantity(-productMultiplicity())\"\n (keydown.arrowUp)=\"onStepQuantity(productMultiplicity())\"\n formControlName=\"quantity\"\n autocomplete=\"quantity\"\n />\n </tui-textfield>\n <p class=\"tui-form__field-note\">\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u043E {{ productMultiplicity() }}</p>\n <tui-error\n formControlName=\"quantity\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430 -->\n <label tuiLabel>\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <tui-input formControlName=\"marker\">\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <input\n tuiTextfieldLegacy\n autocomplete=\"marker\"\n />\n </tui-input>\n <tui-error\n formControlName=\"marker\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <div class=\"flex flex-col items-center\">\n @let cost = totalCost$ | async;\n\n <div *ngIf=\"cost\">\n \u0418\u0442\u043E\u0433\u043E:<span class=\"text-2xl font-bold\">\n {{ cost | tuiAmount | async }}\n {{ product().currency.symbol }}\n </span>\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <button\n tuiButton\n iconStart=\"@tui.check\"\n [disabled]=\"form.invalid\"\n [loading]=\"isLoading()\"\n type=\"submit\"\n class=\"mt-2\"\n >\n {{ orderItem() ? '\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C' : '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443' }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ScNextInputFocusModule }, { kind: "directive", type: i2.ScNextInputFocusDirective, selector: "form[ScNextInputFocus]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "directive", type: ScSelectOnFocusinDirective, selector: "tui-input-number, tui-input, tui-input-phone, tui-input-date, tui-input-password, input[tuiInputNumber], input[tuiTextfield], input[tuiInputSlider]" }, { kind: "directive", type: TuiNumberFormat, selector: "[tuiNumberFormat]", inputs: ["tuiNumberFormat"] }, { kind: "component", type: TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "ngmodule", type: TuiInputModule }, { kind: "component", type: i3.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i3.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i4.TuiTextfieldComponent, selector: "input[tuiTextfieldLegacy], textarea[tuiTextfieldLegacy]" }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiFieldErrorPipe, name: "tuiFieldError" }, { kind: "directive", type: i5.TuiInputNumberDirective, selector: "input[tuiInputNumber]", inputs: ["min", "max", "prefix", "postfix"] }, { kind: "component", type: i6.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "pipe", type: TuiAmountPipe, name: "tuiAmount" }, { kind: "directive", type: TuiChip, selector: "tui-chip,[tuiChip]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
205
205
  }
206
206
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScAddOrEditingCartItemFormComponent, decorators: [{
207
207
  type: Component,
@@ -228,6 +228,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
228
228
  TuiTextfield,
229
229
  TuiAmountPipe,
230
230
  TuiChip,
231
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- \u0424\u043E\u0440\u043C\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0438\u0437\u043C\u0435\u0440\u044F\u0435\u043C\u043E\u0433\u043E \u0442\u043E\u0432\u0430\u0440\u0430. -->\n<form\n *ngIf=\"product\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit()\"\n ScNextInputFocus\n class=\"flex flex-col gap-2\"\n>\n @let step = lengthStep();\n\n <!-- \u0414\u043B\u0438\u043D\u0430 \u0442\u043E\u0432\u0430\u0440\u0430 (\u043C\u0435\u0442\u0440\u0430\u0436) -->\n <label\n *ngIf=\"productIsMeasurable()\"\n tuiLabel\n >\n \u041C\u0435\u0442\u0440\u0430\u0436, {{ product().unit.name }}\n @if (!step || maxLength()) {\n {{ lengthHint() }}\n }\n\n <tui-textfield>\n <input\n tuiInputNumber\n formControlName=\"length\"\n [tuiNumberFormat]=\"{ precision: 2 }\"\n [max]=\"maxLength() || null\"\n [min]=\"minLength() || null\"\n (keydown.arrowDown)=\"onStepLength(-(lengthStep() ?? 0.01))\"\n (keydown.arrowUp)=\"onStepLength(lengthStep() ?? 0.01)\"\n autocomplete=\"length\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"length\"\n [error]=\"[] | tuiFieldError | async\"\n />\n <p\n *ngIf=\"lengthStep()\"\n class=\"tui-form__field-note\"\n >\n \u041C\u0435\u0442\u0440\u0430\u0436 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u0435\u043D {{ lengthStep() }}\n </p>\n </label>\n\n <!-- \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <label tuiLabel>\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E, \u0448\u0442.\n <tui-textfield>\n <tui-chip\n *ngIf=\"isLengthConfigurator() && productMultiplicity() && step\"\n size=\"s\"\n appearance=\"negative\"\n class=\"font-bold\"\n >\n x {{ step }} {{ product().unit.name }}\n </tui-chip>\n\n <input\n placeholder=\"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\"\n tuiInputNumber\n [tuiNumberFormat]=\"{ decimalMode: 'not-zero' }\"\n [min]=\"productMultiplicity()\"\n (keydown.arrowDown)=\"onStepQuantity(-productMultiplicity())\"\n (keydown.arrowUp)=\"onStepQuantity(productMultiplicity())\"\n formControlName=\"quantity\"\n autocomplete=\"quantity\"\n />\n </tui-textfield>\n <p class=\"tui-form__field-note\">\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u043E {{ productMultiplicity() }}</p>\n <tui-error\n formControlName=\"quantity\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430 -->\n <label tuiLabel>\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <tui-input formControlName=\"marker\">\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <input\n tuiTextfieldLegacy\n autocomplete=\"marker\"\n />\n </tui-input>\n <tui-error\n formControlName=\"marker\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <div class=\"flex flex-col items-center\">\n @let cost = totalCost$ | async;\n\n <div *ngIf=\"cost\">\n \u0418\u0442\u043E\u0433\u043E:<span class=\"text-2xl font-bold\">\n {{ cost | tuiAmount | async }}\n {{ product().currency.symbol }}\n </span>\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <button\n tuiButton\n iconStart=\"@tui.check\"\n [disabled]=\"form.invalid\"\n [loading]=\"isLoading()\"\n type=\"submit\"\n class=\"mt-2\"\n >\n {{ cartItem() ? '\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C' : '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443' }}\n </button>\n </div>\n</form>\n" }]
231
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- \u0424\u043E\u0440\u043C\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0438\u0437\u043C\u0435\u0440\u044F\u0435\u043C\u043E\u0433\u043E \u0442\u043E\u0432\u0430\u0440\u0430. -->\n<form\n *ngIf=\"product\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit()\"\n ScNextInputFocus\n class=\"flex flex-col gap-2\"\n>\n @let step = lengthStep();\n\n <!-- \u0414\u043B\u0438\u043D\u0430 \u0442\u043E\u0432\u0430\u0440\u0430 (\u043C\u0435\u0442\u0440\u0430\u0436) -->\n <label\n *ngIf=\"productIsMeasurable()\"\n tuiLabel\n >\n \u041C\u0435\u0442\u0440\u0430\u0436, {{ product().unit.name }}\n @if (!step || maxLength()) {\n {{ lengthHint() }}\n }\n\n <tui-textfield>\n <input\n tuiInputNumber\n formControlName=\"length\"\n [tuiNumberFormat]=\"{ precision: 2 }\"\n [max]=\"maxLength() || null\"\n [min]=\"minLength() || null\"\n (keydown.arrowDown)=\"onStepLength(-(lengthStep() ?? 0.01))\"\n (keydown.arrowUp)=\"onStepLength(lengthStep() ?? 0.01)\"\n autocomplete=\"length\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"length\"\n [error]=\"[] | tuiFieldError | async\"\n />\n <p\n *ngIf=\"lengthStep()\"\n class=\"tui-form__field-note\"\n >\n \u041C\u0435\u0442\u0440\u0430\u0436 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u0435\u043D {{ lengthStep() }}\n </p>\n </label>\n\n <!-- \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u0432\u0430\u0440\u0430 -->\n <label tuiLabel>\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E, \u0448\u0442.\n <tui-textfield>\n <tui-chip\n *ngIf=\"isLengthConfigurator() && productMultiplicity() && step\"\n size=\"s\"\n appearance=\"negative\"\n class=\"font-bold\"\n >\n x {{ step }} {{ product().unit.name }}\n </tui-chip>\n\n <input\n placeholder=\"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\"\n tuiInputNumber\n [tuiNumberFormat]=\"{ decimalMode: 'not-zero' }\"\n [min]=\"productMultiplicity()\"\n (keydown.arrowDown)=\"onStepQuantity(-productMultiplicity())\"\n (keydown.arrowUp)=\"onStepQuantity(productMultiplicity())\"\n formControlName=\"quantity\"\n autocomplete=\"quantity\"\n />\n </tui-textfield>\n <p class=\"tui-form__field-note\">\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u043E {{ productMultiplicity() }}</p>\n <tui-error\n formControlName=\"quantity\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430 -->\n <label tuiLabel>\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <tui-input formControlName=\"marker\">\n \u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430\n <input\n tuiTextfieldLegacy\n autocomplete=\"marker\"\n />\n </tui-input>\n <tui-error\n formControlName=\"marker\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <div class=\"flex flex-col items-center\">\n @let cost = totalCost$ | async;\n\n <div *ngIf=\"cost\">\n \u0418\u0442\u043E\u0433\u043E:<span class=\"text-2xl font-bold\">\n {{ cost | tuiAmount | async }}\n {{ product().currency.symbol }}\n </span>\n </div>\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F / \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443 -->\n <button\n tuiButton\n iconStart=\"@tui.check\"\n [disabled]=\"form.invalid\"\n [loading]=\"isLoading()\"\n type=\"submit\"\n class=\"mt-2\"\n >\n {{ orderItem() ? '\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C' : '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443' }}\n </button>\n </div>\n</form>\n" }]
232
232
  }] });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybS9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nL2FkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtL3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBGQUEwRjtBQUUxRixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBRUgsbUJBQW1CLEVBSW5CLGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsb0JBQW9CLEdBQ3ZCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFB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QUtkLFNBQVMsb0lBQ1QsZ0JBQWdCLGtIQUNoQixTQUFTLHlDQUNULGlCQUFpQix5UkFJakIsYUFBYSxrREFDYixPQUFPOzs0RkFJRixtQ0FBbUM7a0JBOUIvQyxTQUFTO2lDQUNNLElBQUksWUFDTixrQ0FBa0MsV0FFbkM7d0JBQ0wsSUFBSTt3QkFDSixXQUFXO3dCQUNYLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixRQUFRO3dCQUNSLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZixRQUFRO3dCQUNSLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsU0FBUzt3QkFDVCxpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsT0FBTztxQkFDVixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHNvbmFyanMvbm8tbmVzdGVkLXRlbXBsYXRlLWxpdGVyYWxzLEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAqL1xuXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgU2NDYXJ0SXRlbSxcbiAgICBTY0NvbnZlcnRlcnNTZXJ2aWNlLFxuICAgIFNjSU5ld0NhcnRJdGVtQmFzZSxcbiAgICBTY0lOZXdDYXJ0SXRlbU1lYXN1cmVkLFxuICAgIFNjUHJvZHVjdCxcbiAgICBTY1VuaXRzSGVscGVyLFxuICAgIFNjVXNlck1ldHJpa2FHb2Fsc0VudW0sXG4gICAgU2NVc2VyTWV0cmlrYVNlcnZpY2UsXG59IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpQW1vdW50UGlwZSB9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZSc7XG5pbXBvcnQgeyB0dWlDb250cm9sVmFsdWUsIHR1aU1hcmtDb250cm9sQXNUb3VjaGVkQW5kVmFsaWRhdGUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aUJ1dHRvbiwgVHVpRXJyb3IsIFR1aUxhYmVsLCBUdWlOdW1iZXJGb3JtYXQsIFR1aVRleHRmaWVsZCB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUFwcGVhcmFuY2UsIFR1aVdpdGhBcHBlYXJhbmNlIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9hcHBlYXJhbmNlJztcbmltcG9ydCB7IFR1aUljb25zLCBUdWlXaXRoSWNvbnMgfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2ljb25zJztcbmltcG9ydCB7IFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUNoaXAsIFR1aUZpZWxkRXJyb3JQaXBlLCBUdWlJbnB1dE51bWJlciB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgVHVpSW5wdXRNb2R1bGUgfSBmcm9tICdAdGFpZ2EtdWkvbGVnYWN5JztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBwYWlyd2lzZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjTmV4dElucHV0Rm9jdXNNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL25leHQtaW5wdXQtZm9jdXMvc2MtbmV4dC1pbnB1dC1mb2N1cy5tb2R1bGUnO1xuaW1wb3J0IHsgU2NTZWxlY3RPbkZvY3VzaW5EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL3NlbGVjdC1vbi1mb2N1c2luL3NjLXNlbGVjdC1vbi1mb2N1c2luLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBzdGVwVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vLi4vdmFsaWRhdG9ycy9zdGVwLXZhbGlkYXRvcic7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC00L7QsdCw0LLQu9C10L3QuNGPIC8g0LjQt9C80LXQvdC10L3QuNGPINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFNjTmV4dElucHV0Rm9jdXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFR1aUxhYmVsLFxuICAgICAgICBTY1NlbGVjdE9uRm9jdXNpbkRpcmVjdGl2ZSxcbiAgICAgICAgVHVpTnVtYmVyRm9ybWF0LFxuICAgICAgICBUdWlFcnJvcixcbiAgICAgICAgVHVpSW5wdXRNb2R1bGUsXG4gICAgICAgIFR1aUFwcGVhcmFuY2UsXG4gICAgICAgIFR1aVdpdGhBcHBlYXJhbmNlLFxuICAgICAgICBUdWlJY29ucyxcbiAgICAgICAgVHVpV2l0aEljb25zLFxuICAgICAgICBUdWlCdXR0b24sXG4gICAgICAgIFR1aUJ1dHRvbkxvYWRpbmcsXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgVHVpRmllbGRFcnJvclBpcGUsXG4gICAgICAgIFR1aUlucHV0TnVtYmVyLFxuICAgICAgICBUdWlOdW1iZXJGb3JtYXQsXG4gICAgICAgIFR1aVRleHRmaWVsZCxcbiAgICAgICAgVHVpQW1vdW50UGlwZSxcbiAgICAgICAgVHVpQ2hpcCxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0FkZE9yRWRpdGluZ0NhcnRJdGVtRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICog0JPRgNGD0L/Qv9CwINC/0L7Qu9C10Lkg0LTQvtCx0LDQstC70LXQvdC40Y8gLyDQuNC30LzQtdC90LXQvdC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cDx7XG4gICAgICAgIGxlbmd0aD86IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+O1xuICAgICAgICBxdWFudGl0eTogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XG4gICAgICAgIG1hcmtlcjogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XG4gICAgfT4oe1xuICAgICAgICBxdWFudGl0eTogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBtYXJrZXI6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPignJyksXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0YLQvtCy0LDRgNC1LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwcm9kdWN0ID0gaW5wdXQucmVxdWlyZWQ8U2NQcm9kdWN0PigpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINGH0YLQviDQtNC70Y8g0YPQutCw0LfQsNC90L3QvtC5INC60LDRgtC10LPQvtGA0LjQuCDQuNC70Lgg0L/RgNC+0LTRg9C60YLQsCDQtNC10LnRgdGC0LLRg9C10YIg0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGAINC00LvQuNC90YsuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzTGVuZ3RoQ29uZmlndXJhdG9yID0gY29tcHV0ZWQoKCkgPT4gQm9vbGVhbih0aGlzLnByb2R1Y3QoKS5wcm9wZXJ0aWVzPy5bJ2lzTGVuZ3RoQ29uZmlndXJhdG9yJ10pKTtcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDRgtC+0LLQsNGA0LUg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNhcnRJdGVtID0gaW5wdXQ8U2NDYXJ0SXRlbSB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INC30LDQs9GA0YPQt9C60Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc0xvYWRpbmcgPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDQstC+0LfQvNC+0LbQvdC+0YHRgtC4INC/0YDQvtC00LDQttC4INGC0L7QstCw0YDQsCDQvdCwINC80LXRgtGA0LDQti5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvZHVjdElzTWVhc3VyYWJsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudW5pdHNIZWxwZXIucHJvZHVjdElzTWVhc3VyYWJsZSh0aGlzLnByb2R1Y3QoKSkpO1xuXG4gICAgLyoqXG4gICAgICog0JrRgNCw0YLQvdC+0YHRgtGMINC60L7Qu9C40YfQtdGB0YLQstCwINC00LvRjyDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb2R1Y3RNdWx0aXBsaWNpdHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnVuaXRzSGVscGVyLnByb2R1Y3RNdWx0aXBsaWNpdHkodGhpcy5wcm9kdWN0KCkpKTtcblxuICAgIC8qKlxuICAgICAqINCc0LjQvdC40LzQsNC70YzQvdGL0Lkg0LzQtdGC0YDQsNC2INC00LvRjyDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1pbkxlbmd0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvZHVjdCgpLnByb3BlcnRpZXM/Lm1pbkxlbmd0aCA/PyAodGhpcy5wcm9kdWN0KCkuaWdub3JlTWluQ291bnRDaGVjayA/IDAgOiB0aGlzLnByb2R1Y3QoKS5taW5Db3VudCkpO1xuXG4gICAgLyoqXG4gICAgICog0JzQsNC60YHQuNC80LDQu9GM0L3Ri9C5INC80LXRgtGA0LDQtiDQtNC70Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtYXhMZW5ndGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb2R1Y3QoKS5wcm9wZXJ0aWVzPy5tYXhMZW5ndGgpO1xuXG4gICAgLyoqXG4gICAgICog0KjQsNCzINC40LfQvNC10L3QtdC90LjRjyDQvNC10YLRgNCw0LbQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGVuZ3RoU3RlcCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvZHVjdCgpLnByb3BlcnRpZXM/Lmxlbmd0aFN0ZXAgPz8gKHRoaXMucHJvZHVjdCgpLmlnbm9yZU1pbkNvdW50Q2hlY2sgPyAwIDogdGhpcy5wcm9kdWN0KCkubWluQ291bnQpKTtcblxuICAgIC8qKlxuICAgICAqINCf0L7QtNGB0LrQsNC30LrQsCDQv9C+INC80LjQvdC40LzQsNC70YzQvdC+0LzRgyDQuCDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LzRgyDQvNC10YLRgNCw0LbRgyDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxlbmd0aEhpbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluTGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4TGVuZ3RoKCk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvbm8tbmVzdGVkLWNvbmRpdGlvbmFsXG4gICAgICAgIHJldHVybiBtaW4gfHwgbWF4ID8gYCgke21pbiA/IGDQvtGCICR7bWlufWAgOiAnJ30ke21pbiAmJiBtYXggPyAnICcgOiAnJ30ke21heCA/IGDQtNC+ICR7bWF4fWAgOiAnJ30gJHt0aGlzLnByb2R1Y3QoKS51bml0Lm5hbWV9KWAgOiAnJztcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCY0YLQvtCz0L7QstCw0Y8g0YHRgtC+0LjQvNC+0YHRgtGMINC30LDQutCw0LfQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdG90YWxDb3N0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE91dHB1dH0g0YHQvtCx0YvRgtC40Y8g0LTQvtCx0LDQstC70LXQvdC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdGDLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhZGRUb0NhcnQgPSBvdXRwdXQ8U2NJTmV3Q2FydEl0ZW1CYXNlPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE91dHB1dH0g0YHQvtCx0YvRgtC40Y8g0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRDYXJ0SXRlbSA9IG91dHB1dDxPbWl0PFNjSU5ld0NhcnRJdGVtQmFzZSwgJ3Byb2R1Y3RJZCc+PigpO1xuXG4gICAgLyoqXG4gICAgICog0J7QsdGK0LXQutGCLdC/0L7QvNC+0YnQvdC40Log0LTQu9GPINGA0LDQsdC+0YLRiyDRgdC+INC30L3QsNGH0LXQvdC40Y/QvNC4INC10LTQuNC90LjRhiDQuNC30LzQtdGA0LXQvdC40Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdW5pdHNIZWxwZXI6IFNjVW5pdHNIZWxwZXIgPSBpbmplY3QoU2NVbml0c0hlbHBlcik7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGB0LHQvtGA0LAg0LzQtdGC0YDQuNC6INC+INC00LXQudGB0YLQstC40Y/RhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJNZXRyaWthU2VydmljZTogU2NVc2VyTWV0cmlrYVNlcnZpY2UgPSBpbmplY3QoU2NVc2VyTWV0cmlrYVNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udmVydGVyc1NlcnZpY2U6IFNjQ29udmVydGVyc1NlcnZpY2UgPSBpbmplY3QoU2NDb252ZXJ0ZXJzU2VydmljZSk7XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5jYXJ0SXRlbUFkZFNob3csXG4gICAgICAgICAgICBwYXJhbXM6IHsgcHJvZHVjdF9pZDogdGhpcy5wcm9kdWN0KCkuaWQgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMucHJvZHVjdElzTWVhc3VyYWJsZSgpKSB7XG4gICAgICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0L/QvtC70LUg0LLQstC+0LTQsCDQtNC70LjQvdGLLCDQtdGB0LvQuCDRgtC+0LLQsNGAINC40LfQvNC10YDRj9C10LzRi9C5LlxuICAgICAgICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ2xlbmd0aCcsIG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPih0aGlzLmNhcnRJdGVtKCk/Lmxlbmd0aCA/PyB0aGlzLm1pbkxlbmd0aCgpID8/IDAuMDEsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigwLjAxKV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INC60L7Qu9C40YfQtdGB0YLQstC+INC40Lcg0LrQvtGA0LfQuNC90Ysg0LjQu9C4INC60YDQsNGC0L3QvtGB0YLQuCDRgtC+0LLQsNGA0LAuXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgIHF1YW50aXR5OiB0aGlzLmNhcnRJdGVtKCk/LnF1YW50aXR5ID8/IHRoaXMudW5pdHNIZWxwZXIucHJvZHVjdE11bHRpcGxpY2l0eSh0aGlzLnByb2R1Y3QoKSksXG4gICAgICAgICAgICBtYXJrZXI6IHRoaXMuY2FydEl0ZW0oKT8ubWFya2VyID8/ICcnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5sZW5ndGhTdGVwKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMZW5ndGhDb25maWd1cmF0b3IoKSAmJiB0aGlzLmxlbmd0aFN0ZXAoKSAmJiB0aGlzLmZvcm0uY29udHJvbHMucXVhbnRpdHkudmFsdWUgJiYgc3RlcCkge1xuICAgICAgICAgICAgLy8g0JXRgdC70Lgg0LXRgdGC0Ywg0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGAINC00LvQuNC90YssINGA0LDRgdGB0YfQuNGC0YvQstCw0LXQvCDQvdCw0YfQsNC70YzQvdC+INC30L3QsNGH0LXQvdC40LUg0LTQu9C40L3Riy5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5sZW5ndGg/LnBhdGNoVmFsdWUodGhpcy5mb3JtLmNvbnRyb2xzLnF1YW50aXR5LnZhbHVlICogc3RlcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0LLQsNC70LjQtNCw0YbQuNGOINGI0LDQs9CwINC00LvRjyDQutC+0LvQuNGH0LXRgdGC0LLQsC5cbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnF1YW50aXR5LmFkZFZhbGlkYXRvcnMoc3RlcFZhbGlkYXRvcih0aGlzLnVuaXRzSGVscGVyLnByb2R1Y3RTdGVwRm9yVmFsaWRhdG9yKHRoaXMucHJvZHVjdCgpKSkpO1xuICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0LLQsNC70LjQtNCw0YbQuNGOINGI0LDQs9CwINC00LvRjyDQtNC70LjQvdGLLlxuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdsZW5ndGgnKT8uYWRkVmFsaWRhdG9ycyhzdGVwVmFsaWRhdG9yKHRoaXMucHJvZHVjdCgpLnByb3BlcnRpZXM/Lmxlbmd0aFN0ZXAgPz8gKHRoaXMucHJvZHVjdCgpLmlnbm9yZU1pbkNvdW50Q2hlY2sgPyAwIDogKHRoaXMucHJvZHVjdCgpLm1pbkNvdW50ID8/IDApKSkpO1xuXG4gICAgICAgIC8vINCh0YfQuNGC0LDQtdC8INC40YLQvtCz0L7QstGD0Y4g0YHRgtC+0LjQvNC+0YHRgtGMINC30LDQutCw0LfQsC5cbiAgICAgICAgdGhpcy50b3RhbENvc3QkID0gdHVpQ29udHJvbFZhbHVlPHtcbiAgICAgICAgICAgIGxlbmd0aD86IG51bWJlcjtcbiAgICAgICAgICAgIHF1YW50aXR5OiBudW1iZXI7XG4gICAgICAgIH0+KHRoaXMuZm9ybSkucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSwgLy8g0JjRgdC/0YDQsNCy0LvRj9C10Lwg0L7RiNC40LHQutGDIE5HMDk1MC5cbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm0udmFsaWQpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBwcmV2aW91cy5sZW5ndGggPT09IGN1cnJlbnQubGVuZ3RoICYmIHByZXZpb3VzLnF1YW50aXR5ID09PSBjdXJyZW50LnF1YW50aXR5KSwgLy8g0KLQvtC70YzQutC+INC/0YDQuCDQuNC30LzQtdC90LXQvdC40Lgg0LfQvdCw0YfQtdC90LjQuVxuICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybS52YWx1ZSBhcyB7IGxlbmd0aD86IG51bWJlcjsgcXVhbnRpdHk6IG51bWJlciB9KSxcbiAgICAgICAgICAgIHBhaXJ3aXNlKCksXG4gICAgICAgICAgICBtYXAoKFtwcmV2aW91cywgY3VycmVudF0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGhDb250cm9sID0gdGhpcy5mb3JtLmdldCgnbGVuZ3RoJyk7XG5cbiAgICAgICAgICAgICAgICAvLyDQldGB0LvQuCDQvdC10YIg0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGA0LAg0LTQu9C40L3RiyDQuNC70Lgg0L3QtdC60L7RgNGA0LXQutGC0L3Ri9C1INC00LDQvdC90YvQtSDigJQg0LLQvtC30LLRgNCw0YnQsNC10Lwg0LHQtdC3INC40LfQvNC10L3QtdC90LjQuS5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNMZW5ndGhDb25maWd1cmF0b3IoKSB8fCBpc1VuZGVmaW5lZChjdXJyZW50Lmxlbmd0aCkgfHwgIWxlbmd0aENvbnRyb2wgfHwgdGhpcy5mb3JtLmludmFsaWQgfHwgIXN0ZXApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g0JXRgdC70Lgg0LjQt9C80LXQvdC40LvQvtGB0Ywg0LrQvtC70LjRh9C10YHRgtCy0L4g4oCUINC/0LXRgNC10YHRh9C40YLRi9Cy0LDQtdC8INC00LvQuNC90YMuXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzLnF1YW50aXR5ICE9PSBjdXJyZW50LnF1YW50aXR5ICYmIHRoaXMuZm9ybS5jb250cm9scy5xdWFudGl0eS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZm9ybS5jb250cm9scy5xdWFudGl0eS52YWx1ZSAqIHN0ZXA7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aENvbnRyb2wucGF0Y2hWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g0JXRgdC70Lgg0LjQt9C80LXQvdC40LvQsNGB0Ywg0LTQu9C40L3QsCDigJQg0L/QtdGA0LXRgdGH0LjRgtGL0LLQsNC10Lwg0LrQvtC70LjRh9C10YHRgtCy0L4g0Lgg0LLQvtC30LLRgNCw0YnQsNC10Lwg0LfQvdCw0YfQtdC90LjQtSDQtNC70LjQvdGLLlxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91cy5sZW5ndGggIT09IGN1cnJlbnQubGVuZ3RoICYmIGxlbmd0aENvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBsZW5ndGhDb250cm9sLnZhbHVlIC8gc3RlcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnF1YW50aXR5LnBhdGNoVmFsdWUobmV3VmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGxlbmd0aDogc3RlcCwgcXVhbnRpdHk6IG5ld1ZhbHVlIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g0JLQvtC30LLRgNCw0YnQsNC10Lwg0LjRgtC+0LPQvtCy0YvQtSDQt9C90LDRh9C10L3QuNGPINC00LvRjyDRgNCw0YHRh9GR0YLQsCDRgdGC0L7QuNC80L7RgdGC0LguXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbGVuZ3RoOiBzdGVwLCBxdWFudGl0eTogY3VycmVudC5xdWFudGl0eSB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyDQodGH0LjRgtCw0LXQvCDRgdGC0L7QuNC80L7RgdGC0Yw6INGG0LXQvdCwICog0LTQu9C40L3QsCAqINC60L7Qu9C40YfQtdGB0YLQstC+LlxuICAgICAgICAgICAgbWFwKCh7IGxlbmd0aCwgcXVhbnRpdHkgfSkgPT4gKHRoaXMucHJvZHVjdCgpLmNvc3RSdWIgPz8gMCkgKiAobGVuZ3RoID8/IDEpICogcXVhbnRpdHkpLFxuICAgICAgICAgICAgbWFwKChzdW0pID0+IE1hdGgucm91bmQoc3VtICogMTAwKSAvIDEwMClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDRgdC+0LHRi9GC0LjRjyDRiNCw0LPQsCDQvNC10YLRgNCw0LbQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGVwINCo0LDQsy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25TdGVwTGVuZ3RoKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBsZW5ndGhDb250cm9sID0gdGhpcy5mb3JtLmdldCgnbGVuZ3RoJyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnByb2R1Y3RJc01lYXN1cmFibGUoKSB8fCAhbGVuZ3RoQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGVuZ3RoID0gbGVuZ3RoQ29udHJvbC52YWx1ZSA/PyAwO1xuICAgICAgICBsZXQgbmV3TGVuZ3RoID0gTWF0aC5tYXgodGhpcy5taW5MZW5ndGgoKSA/PyBzdGVwLCBsZW5ndGggKyBzdGVwKTtcbiAgICAgICAgLy8g0J7QutGA0YPQs9C70Y/QtdC8INC00L4g0LHQu9C40LbQsNC50YjQtdCz0L4g0LrRgNCw0YLQvdC+0LPQviDRh9C40YHQu9CwLlxuICAgICAgICBuZXdMZW5ndGggPSBNYXRoLnJvdW5kKG5ld0xlbmd0aCAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgbGVuZ3RoQ29udHJvbC5zZXRWYWx1ZShOdW1iZXIobmV3TGVuZ3RoLnRvRml4ZWQoMikpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDRgdC+0LHRi9GC0LjRjyDRiNCw0LPQsCDQutC+0LvQuNGH0LXRgdGC0LLQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGVwINCo0LDQsy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25TdGVwUXVhbnRpdHkoc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHF1YW50aXR5ID0gdGhpcy5mb3JtLmNvbnRyb2xzLnF1YW50aXR5LnZhbHVlID8/IDA7XG5cbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnF1YW50aXR5LnNldFZhbHVlKE1hdGgubWF4KHRoaXMucHJvZHVjdE11bHRpcGxpY2l0eSgpLCBxdWFudGl0eSAtIChxdWFudGl0eSAlIHN0ZXApICsgc3RlcCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25TdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIC8vINCj0LTQsNC70Y/QtdC8IG51bGwt0L/QvtC70Y8g0LjQtyDQt9C90LDRh9C10L3QuNGPINGE0L7RgNC80YsuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsPFNjSU5ld0NhcnRJdGVtTWVhc3VyZWQ+KHRoaXMuZm9ybS52YWx1ZSBhcyBTY0lOZXdDYXJ0SXRlbU1lYXN1cmVkKTtcblxuICAgICAgICAvLyDQldGB0LvQuCDRjdGC0L4g0LTQvtCx0LDQstC70LXQvdC40LUg0L3QvtCy0L7Qs9C+INGC0L7QstCw0YDQsCDigJQg0LTQvtCx0LDQstC70Y/QtdC8IHByb2R1Y3RJZC5cbiAgICAgICAgaWYgKCF0aGlzLmNhcnRJdGVtKCkpIHtcbiAgICAgICAgICAgIHZhbHVlLnByb2R1Y3RJZCA9IHRoaXMucHJvZHVjdCgpLmlkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RlcCA9IHRoaXMubGVuZ3RoU3RlcCgpO1xuXG4gICAgICAgIC8vINCV0YHQu9C4INGC0L7QstCw0YAg0LjQt9C80LXRgNGP0LXQvNGL0Lkg0Lgg0LXRgdGC0Ywg0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGAINC00LvQuNC90Ysg4oCUINGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INC00LvQuNC90YMg0L/QviDRiNCw0LPRgyAo0LrQvtC70LjRh9C10YHRgtCy0L4g0YPQttC1INCx0YPQtNC10YIg0LLRi9GH0LjRgdC70LXQvdC+INC/0L4g0YTQvtGA0LzRg9C70LUg0JzQtdGC0YDQsNC2L21pbi1jb3VudClcbiAgICAgICAgaWYgKHRoaXMucHJvZHVjdElzTWVhc3VyYWJsZSgpICYmIHRoaXMuaXNMZW5ndGhDb25maWd1cmF0b3IoKSAmJiBzdGVwKSB7XG4gICAgICAgICAgICB2YWx1ZS5sZW5ndGggPSBzdGVwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J/QvtC80LXRh9Cw0LXQvCDQstGB0LUg0L/QvtC70Y8g0YTQvtGA0LzRiyDQutCw0LogXCJ0b3VjaFwiINC4INC30LDQv9GD0YHQutCw0LXQvCDQstCw0LvQuNC00LDRhtC40Y4g0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0L7RiNC40LHQvtC6INGBINGB0LXRgNCy0LXRgNCwLlxuICAgICAgICB0dWlNYXJrQ29udHJvbEFzVG91Y2hlZEFuZFZhbGlkYXRlKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgLy8g0JIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINGA0LXQttC40LzQsCDigJQg0YDQtdC00LDQutGC0LjRgNGD0LXQvCDQuNC70Lgg0LTQvtCx0LDQstC70Y/QtdC8INGC0L7QstCw0YAuXG4gICAgICAgIGlmICh0aGlzLmNhcnRJdGVtKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdENhcnRJdGVtLmVtaXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGRUb0NhcnQuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8IS0tINCk0L7RgNC80LAg0LTQvtCx0LDQstC70LXQvdC40Y8g0LjQt9C80LXRgNGP0LXQvNC+0LPQviDRgtC+0LLQsNGA0LAuIC0tPlxuPGZvcm1cbiAgICAqbmdJZj1cInByb2R1Y3RcIlxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIlxuICAgIFNjTmV4dElucHV0Rm9jdXNcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIlxuPlxuICAgIEBsZXQgc3RlcCA9IGxlbmd0aFN0ZXAoKTtcblxuICAgIDwhLS0g0JTQu9C40L3QsCDRgtC+0LLQsNGA0LAgKNC80LXRgtGA0LDQtikgLS0+XG4gICAgPGxhYmVsXG4gICAgICAgICpuZ0lmPVwicHJvZHVjdElzTWVhc3VyYWJsZSgpXCJcbiAgICAgICAgdHVpTGFiZWxcbiAgICA+XG4gICAgICAgINCc0LXRgtGA0LDQtiwge3sgcHJvZHVjdCgpLnVuaXQubmFtZSB9fVxuICAgICAgICBAaWYgKCFzdGVwIHx8IG1heExlbmd0aCgpKSB7XG4gICAgICAgICAgICB7eyBsZW5ndGhIaW50KCkgfX1cbiAgICAgICAgfVxuXG4gICAgICAgIDx0dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHVpSW5wdXROdW1iZXJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0dWlOdW1iZXJGb3JtYXRdPVwieyBwcmVjaXNpb246IDIgfVwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXhMZW5ndGgoKSB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm1pbkxlbmd0aCgpIHx8IG51bGxcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmFycm93RG93bik9XCJvblN0ZXBMZW5ndGgoLShsZW5ndGhTdGVwKCkgPz8gMC4wMSkpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd1VwKT1cIm9uU3RlcExlbmd0aChsZW5ndGhTdGVwKCkgPz8gMC4wMSlcIlxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cImxlbmd0aFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3R1aS10ZXh0ZmllbGQ+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxlbmd0aFwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAvPlxuICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCJsZW5ndGhTdGVwKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0dWktZm9ybV9fZmllbGQtbm90ZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCc0LXRgtGA0LDQtiDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0LrRgNCw0YLQtdC9IHt7IGxlbmd0aFN0ZXAoKSB9fVxuICAgICAgICA8L3A+XG4gICAgPC9sYWJlbD5cblxuICAgIDwhLS0g0JrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwIC0tPlxuICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAg0JrQvtC70LjRh9C10YHRgtCy0L4sINGI0YIuXG4gICAgICAgIDx0dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgPHR1aS1jaGlwXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc0xlbmd0aENvbmZpZ3VyYXRvcigpICYmIHByb2R1Y3RNdWx0aXBsaWNpdHkoKSAmJiBzdGVwXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIm5lZ2F0aXZlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtYm9sZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeCB7eyBzdGVwIH19IHt7IHByb2R1Y3QoKS51bml0Lm5hbWUgfX1cbiAgICAgICAgICAgIDwvdHVpLWNoaXA+XG5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi0JrQvtC70LjRh9C10YHRgtCy0L5cIlxuICAgICAgICAgICAgICAgIHR1aUlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgW3R1aU51bWJlckZvcm1hdF09XCJ7IGRlY2ltYWxNb2RlOiAnbm90LXplcm8nIH1cIlxuICAgICAgICAgICAgICAgIFttaW5dPVwicHJvZHVjdE11bHRpcGxpY2l0eSgpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd0Rvd24pPVwib25TdGVwUXVhbnRpdHkoLXByb2R1Y3RNdWx0aXBsaWNpdHkoKSlcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmFycm93VXApPVwib25TdGVwUXVhbnRpdHkocHJvZHVjdE11bHRpcGxpY2l0eSgpKVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicXVhbnRpdHlcIlxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cInF1YW50aXR5XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvdHVpLXRleHRmaWVsZD5cbiAgICAgICAgPHAgY2xhc3M9XCJ0dWktZm9ybV9fZmllbGQtbm90ZVwiPtCa0L7Qu9C40YfQtdGB0YLQstC+INC00L7Qu9C20L3QviDQsdGL0YLRjCDQutGA0LDRgtC90L4ge3sgcHJvZHVjdE11bHRpcGxpY2l0eSgpIH19PC9wPlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJxdWFudGl0eVwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAvPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8IS0tINCc0LDRgNC60LjRgNC+0LLQutCwIC0tPlxuICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAg0JzQsNGA0LrQuNGA0L7QstC60LBcbiAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtYXJrZXJcIj5cbiAgICAgICAgICAgINCc0LDRgNC60LjRgNC+0LLQutCwXG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0dWlUZXh0ZmllbGRMZWdhY3lcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJtYXJrZXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1hcmtlclwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAvPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8IS0tINCa0L3QvtC/0LrQsCDQtNC+0LHQsNCy0LvQtdC90LjRjyAvINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdGDIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICBAbGV0IGNvc3QgPSB0b3RhbENvc3QkIHwgYXN5bmM7XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImNvc3RcIj5cbiAgICAgICAgICAgINCY0YLQvtCz0L46PHNwYW4gY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICB7eyBjb3N0IHwgdHVpQW1vdW50IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICB7eyBwcm9kdWN0KCkuY3VycmVuY3kuc3ltYm9sIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0g0JrQvdC+0L/QutCwINC00L7QsdCw0LLQu9C10L3QuNGPIC8g0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90YMgLS0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5jaGVja1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZygpXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJtdC0yXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgY2FydEl0ZW0oKSA/ICfQmNC30LzQtdC90LjRgtGMJyA6ICfQlNC+0LHQsNCy0LjRgtGMINCyINC60L7RgNC30LjQvdGDJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybS9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nL2FkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtL3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBGQUEwRjtBQUUxRixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQ0gsbUJBQW1CLEVBS25CLGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsb0JBQW9CLEdBQ3ZCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFB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QUtkLFNBQVMsb0lBQ1QsZ0JBQWdCLGtIQUNoQixTQUFTLHlDQUNULGlCQUFpQix5UkFJakIsYUFBYSxrREFDYixPQUFPOzs0RkFJRixtQ0FBbUM7a0JBOUIvQyxTQUFTO2lDQUNNLElBQUksWUFDTixrQ0FBa0MsV0FFbkM7d0JBQ0wsSUFBSTt3QkFDSixXQUFXO3dCQUNYLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixRQUFRO3dCQUNSLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZixRQUFRO3dCQUNSLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsU0FBUzt3QkFDVCxpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsT0FBTztxQkFDVixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHNvbmFyanMvbm8tbmVzdGVkLXRlbXBsYXRlLWxpdGVyYWxzLEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAqL1xuXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgU2NDb252ZXJ0ZXJzU2VydmljZSxcbiAgICBTY0lOZXdDYXJ0SXRlbU1lYXN1cmVkLFxuICAgIFNjSU5ld09yZGVySXRlbUJhc2UsXG4gICAgU2NPcmRlckl0ZW0sXG4gICAgU2NQcm9kdWN0LFxuICAgIFNjVW5pdHNIZWxwZXIsXG4gICAgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSxcbiAgICBTY1VzZXJNZXRyaWthU2VydmljZSxcbn0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlBbW91bnRQaXBlIH0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNvbW1lcmNlJztcbmltcG9ydCB7IHR1aUNvbnRyb2xWYWx1ZSwgdHVpTWFya0NvbnRyb2xBc1RvdWNoZWRBbmRWYWxpZGF0ZSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlFcnJvciwgVHVpTGFiZWwsIFR1aU51bWJlckZvcm1hdCwgVHVpVGV4dGZpZWxkIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpQXBwZWFyYW5jZSwgVHVpV2l0aEFwcGVhcmFuY2UgfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2FwcGVhcmFuY2UnO1xuaW1wb3J0IHsgVHVpSWNvbnMsIFR1aVdpdGhJY29ucyB9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2RpcmVjdGl2ZXMvaWNvbnMnO1xuaW1wb3J0IHsgVHVpQnV0dG9uTG9hZGluZywgVHVpQ2hpcCwgVHVpRmllbGRFcnJvclBpcGUsIFR1aUlucHV0TnVtYmVyIH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBUdWlJbnB1dE1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9sZWdhY3knO1xuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIHBhaXJ3aXNlLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NOZXh0SW5wdXRGb2N1c01vZHVsZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvbmV4dC1pbnB1dC1mb2N1cy9zYy1uZXh0LWlucHV0LWZvY3VzLm1vZHVsZSc7XG5pbXBvcnQgeyBTY1NlbGVjdE9uRm9jdXNpbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvc2VsZWN0LW9uLWZvY3VzaW4vc2Mtc2VsZWN0LW9uLWZvY3VzaW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IHN0ZXBWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi8uLi92YWxpZGF0b3JzL3N0ZXAtdmFsaWRhdG9yJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQvtCx0LDQstC70LXQvdC40Y8gLyDQuNC30LzQtdC90LXQvdC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgU2NOZXh0SW5wdXRGb2N1c01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgVHVpTGFiZWwsXG4gICAgICAgIFNjU2VsZWN0T25Gb2N1c2luRGlyZWN0aXZlLFxuICAgICAgICBUdWlOdW1iZXJGb3JtYXQsXG4gICAgICAgIFR1aUVycm9yLFxuICAgICAgICBUdWlJbnB1dE1vZHVsZSxcbiAgICAgICAgVHVpQXBwZWFyYW5jZSxcbiAgICAgICAgVHVpV2l0aEFwcGVhcmFuY2UsXG4gICAgICAgIFR1aUljb25zLFxuICAgICAgICBUdWlXaXRoSWNvbnMsXG4gICAgICAgIFR1aUJ1dHRvbixcbiAgICAgICAgVHVpQnV0dG9uTG9hZGluZyxcbiAgICAgICAgQXN5bmNQaXBlLFxuICAgICAgICBUdWlGaWVsZEVycm9yUGlwZSxcbiAgICAgICAgVHVpSW5wdXROdW1iZXIsXG4gICAgICAgIFR1aU51bWJlckZvcm1hdCxcbiAgICAgICAgVHVpVGV4dGZpZWxkLFxuICAgICAgICBUdWlBbW91bnRQaXBlLFxuICAgICAgICBUdWlDaGlwLFxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjQWRkT3JFZGl0aW5nQ2FydEl0ZW1Gb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQk9GA0YPQv9C/0LAg0L/QvtC70LXQuSDQtNC+0LHQsNCy0LvQtdC90LjRjyAvINC40LfQvNC10L3QtdC90LjRjyDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGZvcm0gPSBuZXcgRm9ybUdyb3VwPHtcbiAgICAgICAgbGVuZ3RoPzogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XG4gICAgICAgIHF1YW50aXR5OiBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPjtcbiAgICAgICAgbWFya2VyOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcbiAgICB9Pih7XG4gICAgICAgIHF1YW50aXR5OiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIG1hcmtlcjogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KCcnKSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDRgtC+0LLQsNGA0LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHByb2R1Y3QgPSBpbnB1dC5yZXF1aXJlZDxTY1Byb2R1Y3Q+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INC00LvRjyDRg9C60LDQt9Cw0L3QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4INC40LvQuCDQv9GA0L7QtNGD0LrRgtCwINC00LXQudGB0YLQstGD0LXRgiDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAg0LTQu9C40L3Riy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNMZW5ndGhDb25maWd1cmF0b3IgPSBjb21wdXRlZCgoKSA9PiBCb29sZWFuKHRoaXMucHJvZHVjdCgpLnByb3BlcnRpZXM/LlsnaXNMZW5ndGhDb25maWd1cmF0b3InXSkpO1xuXG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+INGC0L7QstCw0YDQtSDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb3JkZXJJdGVtID0gaW5wdXQ8U2NPcmRlckl0ZW0gfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNMb2FkaW5nID0gaW5wdXQoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0LLQvtC30LzQvtC20L3QvtGB0YLQuCDQv9GA0L7QtNCw0LbQuCDRgtC+0LLQsNGA0LAg0L3QsCDQvNC10YLRgNCw0LYuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHByb2R1Y3RJc01lYXN1cmFibGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnVuaXRzSGVscGVyLnByb2R1Y3RJc01lYXN1cmFibGUodGhpcy5wcm9kdWN0KCkpKTtcblxuICAgIC8qKlxuICAgICAqINCa0YDQsNGC0L3QvtGB0YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQsCDQtNC70Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwcm9kdWN0TXVsdGlwbGljaXR5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy51bml0c0hlbHBlci5wcm9kdWN0TXVsdGlwbGljaXR5KHRoaXMucHJvZHVjdCgpKSk7XG5cbiAgICAvKipcbiAgICAgKiDQnNC40L3QuNC80LDQu9GM0L3Ri9C5INC80LXRgtGA0LDQtiDQtNC70Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtaW5MZW5ndGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb2R1Y3QoKS5wcm9wZXJ0aWVzPy5taW5MZW5ndGggPz8gKHRoaXMucHJvZHVjdCgpLmlnbm9yZU1pbkNvdW50Q2hlY2sgPyAwIDogdGhpcy5wcm9kdWN0KCkubWluQ291bnQpKTtcblxuICAgIC8qKlxuICAgICAqINCc0LDQutGB0LjQvNCw0LvRjNC90YvQuSDQvNC10YLRgNCw0LYg0LTQu9GPINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWF4TGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9kdWN0KCkucHJvcGVydGllcz8ubWF4TGVuZ3RoKTtcblxuICAgIC8qKlxuICAgICAqINCo0LDQsyDQuNC30LzQtdC90LXQvdC40Y8g0LzQtdGC0YDQsNC20LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxlbmd0aFN0ZXAgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb2R1Y3QoKS5wcm9wZXJ0aWVzPy5sZW5ndGhTdGVwID8/ICh0aGlzLnByb2R1Y3QoKS5pZ25vcmVNaW5Db3VudENoZWNrID8gMCA6IHRoaXMucHJvZHVjdCgpLm1pbkNvdW50KSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LTRgdC60LDQt9C60LAg0L/QviDQvNC40L3QuNC80LDQu9GM0L3QvtC80YMg0Lgg0LzQsNC60YHQuNC80LDQu9GM0L3QvtC80YMg0LzQtdGC0YDQsNC20YMg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBsZW5ndGhIaW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbkxlbmd0aCgpO1xuICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heExlbmd0aCgpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL25vLW5lc3RlZC1jb25kaXRpb25hbFxuICAgICAgICByZXR1cm4gbWluIHx8IG1heCA/IGAoJHttaW4gPyBg0L7RgiAke21pbn1gIDogJyd9JHttaW4gJiYgbWF4ID8gJyAnIDogJyd9JHttYXggPyBg0LTQviAke21heH1gIDogJyd9ICR7dGhpcy5wcm9kdWN0KCkudW5pdC5uYW1lfSlgIDogJyc7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQmNGC0L7Qs9C+0LLQsNGPINGB0YLQvtC40LzQvtGB0YLRjCDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRvdGFsQ29zdCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPdXRwdXR9INGB0L7QsdGL0YLQuNGPINC00L7QsdCw0LLQu9C10L3QuNGPINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3Rgy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYWRkUHJvZHVjdCA9IG91dHB1dDxTY0lOZXdPcmRlckl0ZW1CYXNlPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE91dHB1dH0g0YHQvtCx0YvRgtC40Y8g0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRDYXJ0SXRlbSA9IG91dHB1dDxPbWl0PFNjSU5ld09yZGVySXRlbUJhc2UsICdwcm9kdWN0SWQnPj4oKTtcblxuICAgIC8qKlxuICAgICAqINCe0LHRitC10LrRgi3Qv9C+0LzQvtGJ0L3QuNC6INC00LvRjyDRgNCw0LHQvtGC0Ysg0YHQviDQt9C90LDRh9C10L3QuNGP0LzQuCDQtdC00LjQvdC40YYg0LjQt9C80LXRgNC10L3QuNGPINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVuaXRzSGVscGVyOiBTY1VuaXRzSGVscGVyID0gaW5qZWN0KFNjVW5pdHNIZWxwZXIpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgdCx0L7RgNCwINC80LXRgtGA0LjQuiDQviDQtNC10LnRgdGC0LLQuNGP0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyTWV0cmlrYVNlcnZpY2U6IFNjVXNlck1ldHJpa2FTZXJ2aWNlID0gaW5qZWN0KFNjVXNlck1ldHJpa2FTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQutC+0L3QstC10YDRgtCw0YbQuNC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlOiBTY0NvbnZlcnRlcnNTZXJ2aWNlID0gaW5qZWN0KFNjQ29udmVydGVyc1NlcnZpY2UpO1xuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0uY2FydEl0ZW1BZGRTaG93LFxuICAgICAgICAgICAgcGFyYW1zOiB7IHByb2R1Y3RfaWQ6IHRoaXMucHJvZHVjdCgpLmlkIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnByb2R1Y3RJc01lYXN1cmFibGUoKSkge1xuICAgICAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INC/0L7Qu9C1INCy0LLQvtC00LAg0LTQu9C40L3Riywg0LXRgdC70Lgg0YLQvtCy0LDRgCDQuNC30LzQtdGA0Y/QtdC80YvQuS5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdsZW5ndGgnLCBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4odGhpcy5vcmRlckl0ZW0oKT8ubGVuZ3RoID8/IHRoaXMubWluTGVuZ3RoKCkgPz8gMC4wMSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDAuMDEpXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10Lwg0LrQvtC70LjRh9C10YHRgtCy0L4g0LjQtyDQutC+0YDQt9C40L3RiyDQuNC70Lgg0LrRgNCw0YLQvdC+0YHRgtC4INGC0L7QstCw0YDQsC5cbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgcXVhbnRpdHk6IHRoaXMub3JkZXJJdGVtKCk/LnF1YW50aXR5ID8/IHRoaXMudW5pdHNIZWxwZXIucHJvZHVjdE11bHRpcGxpY2l0eSh0aGlzLnByb2R1Y3QoKSksXG4gICAgICAgICAgICBtYXJrZXI6IHRoaXMub3JkZXJJdGVtKCk/Lm1hcmtlciA/PyAnJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3RlcCA9IHRoaXMubGVuZ3RoU3RlcCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTGVuZ3RoQ29uZmlndXJhdG9yKCkgJiYgdGhpcy5sZW5ndGhTdGVwKCkgJiYgdGhpcy5mb3JtLmNvbnRyb2xzLnF1YW50aXR5LnZhbHVlICYmIHN0ZXApIHtcbiAgICAgICAgICAgIC8vINCV0YHQu9C4INC10YHRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgCDQtNC70LjQvdGLLCDRgNCw0YHRgdGH0LjRgtGL0LLQsNC10Lwg0L3QsNGH0LDQu9GM0L3QviDQt9C90LDRh9C10L3QuNC1INC00LvQuNC90YsuXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMubGVuZ3RoPy5wYXRjaFZhbHVlKHRoaXMuZm9ybS5jb250cm9scy5xdWFudGl0eS52YWx1ZSAqIHN0ZXApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INCy0LDQu9C40LTQsNGG0LjRjiDRiNCw0LPQsCDQtNC70Y8g0LrQvtC70LjRh9C10YHRgtCy0LAuXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5xdWFudGl0eS5hZGRWYWxpZGF0b3JzKHN0ZXBWYWxpZGF0b3IodGhpcy51bml0c0hlbHBlci5wcm9kdWN0U3RlcEZvclZhbGlkYXRvcih0aGlzLnByb2R1Y3QoKSkpKTtcbiAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INCy0LDQu9C40LTQsNGG0LjRjiDRiNCw0LPQsCDQtNC70Y8g0LTQu9C40L3Riy5cbiAgICAgICAgdGhpcy5mb3JtLmdldCgnbGVuZ3RoJyk/LmFkZFZhbGlkYXRvcnMoc3RlcFZhbGlkYXRvcih0aGlzLnByb2R1Y3QoKS5wcm9wZXJ0aWVzPy5sZW5ndGhTdGVwID8/ICh0aGlzLnByb2R1Y3QoKS5pZ25vcmVNaW5Db3VudENoZWNrID8gMCA6ICh0aGlzLnByb2R1Y3QoKS5taW5Db3VudCA/PyAwKSkpKTtcblxuICAgICAgICAvLyDQodGH0LjRgtCw0LXQvCDQuNGC0L7Qs9C+0LLRg9GOINGB0YLQvtC40LzQvtGB0YLRjCDQt9Cw0LrQsNC30LAuXG4gICAgICAgIHRoaXMudG90YWxDb3N0JCA9IHR1aUNvbnRyb2xWYWx1ZTx7XG4gICAgICAgICAgICBsZW5ndGg/OiBudW1iZXI7XG4gICAgICAgICAgICBxdWFudGl0eTogbnVtYmVyO1xuICAgICAgICB9Pih0aGlzLmZvcm0pLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMCksIC8vINCY0YHQv9GA0LDQstC70Y/QtdC8INC+0YjQuNCx0LrRgyBORzA5NTAuXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5mb3JtLnZhbGlkKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2aW91cywgY3VycmVudCkgPT4gcHJldmlvdXMubGVuZ3RoID09PSBjdXJyZW50Lmxlbmd0aCAmJiBwcmV2aW91cy5xdWFudGl0eSA9PT0gY3VycmVudC5xdWFudGl0eSksIC8vINCi0L7Qu9GM0LrQviDQv9GA0Lgg0LjQt9C80LXQvdC10L3QuNC4INC30L3QsNGH0LXQvdC40LlcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLmZvcm0udmFsdWUgYXMgeyBsZW5ndGg/OiBudW1iZXI7IHF1YW50aXR5OiBudW1iZXIgfSksXG4gICAgICAgICAgICBwYWlyd2lzZSgpLFxuICAgICAgICAgICAgbWFwKChbcHJldmlvdXMsIGN1cnJlbnRdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoQ29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ2xlbmd0aCcpO1xuXG4gICAgICAgICAgICAgICAgLy8g0JXRgdC70Lgg0L3QtdGCINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNCwINC00LvQuNC90Ysg0LjQu9C4INC90LXQutC+0YDRgNC10LrRgtC90YvQtSDQtNCw0L3QvdGL0LUg4oCUINCy0L7Qt9Cy0YDQsNGJ0LDQtdC8INCx0LXQtyDQuNC30LzQtdC90LXQvdC40LkuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGVuZ3RoQ29uZmlndXJhdG9yKCkgfHwgaXNVbmRlZmluZWQoY3VycmVudC5sZW5ndGgpIHx8ICFsZW5ndGhDb250cm9sIHx8IHRoaXMuZm9ybS5pbnZhbGlkIHx8ICFzdGVwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vINCV0YHQu9C4INC40LfQvNC10L3QuNC70L7RgdGMINC60L7Qu9C40YfQtdGB0YLQstC+IOKAlCDQv9C10YDQtdGB0YfQuNGC0YvQstCw0LXQvCDQtNC70LjQvdGDLlxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91cy5xdWFudGl0eSAhPT0gY3VycmVudC5xdWFudGl0eSAmJiB0aGlzLmZvcm0uY29udHJvbHMucXVhbnRpdHkudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmZvcm0uY29udHJvbHMucXVhbnRpdHkudmFsdWUgKiBzdGVwO1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGhDb250cm9sLnBhdGNoVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vINCV0YHQu9C4INC40LfQvNC10L3QuNC70LDRgdGMINC00LvQuNC90LAg4oCUINC/0LXRgNC10YHRh9C40YLRi9Cy0LDQtdC8INC60L7Qu9C40YfQtdGB0YLQstC+INC4INCy0L7Qt9Cy0YDQsNGJ0LDQtdC8INC30L3QsNGH0LXQvdC40LUg0LTQu9C40L3Riy5cbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXMubGVuZ3RoICE9PSBjdXJyZW50Lmxlbmd0aCAmJiBsZW5ndGhDb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbGVuZ3RoQ29udHJvbC52YWx1ZSAvIHN0ZXA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5xdWFudGl0eS5wYXRjaFZhbHVlKG5ld1ZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBsZW5ndGg6IHN0ZXAsIHF1YW50aXR5OiBuZXdWYWx1ZSB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vINCS0L7Qt9Cy0YDQsNGJ0LDQtdC8INC40YLQvtCz0L7QstGL0LUg0LfQvdCw0YfQtdC90LjRjyDQtNC70Y8g0YDQsNGB0YfRkdGC0LAg0YHRgtC+0LjQvNC+0YHRgtC4LlxuICAgICAgICAgICAgICAgIHJldHVybiB7IGxlbmd0aDogc3RlcCwgcXVhbnRpdHk6IGN1cnJlbnQucXVhbnRpdHkgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8g0KHRh9C40YLQsNC10Lwg0YHRgtC+0LjQvNC+0YHRgtGMOiDRhtC10L3QsCAqINC00LvQuNC90LAgKiDQutC+0LvQuNGH0LXRgdGC0LLQvi5cbiAgICAgICAgICAgIG1hcCgoeyBsZW5ndGgsIHF1YW50aXR5IH0pID0+ICh0aGlzLnByb2R1Y3QoKS5jb3N0UnViID8/IDApICogKGxlbmd0aCA/PyAxKSAqIHF1YW50aXR5KSxcbiAgICAgICAgICAgIG1hcCgoc3VtKSA9PiBNYXRoLnJvdW5kKHN1bSAqIDEwMCkgLyAxMDApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0YHQvtCx0YvRgtC40Y8g0YjQsNCz0LAg0LzQtdGC0YDQsNC20LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RlcCDQqNCw0LMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uU3RlcExlbmd0aChzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoQ29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ2xlbmd0aCcpO1xuXG4gICAgICAgIGlmICghdGhpcy5wcm9kdWN0SXNNZWFzdXJhYmxlKCkgfHwgIWxlbmd0aENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGxlbmd0aENvbnRyb2wudmFsdWUgPz8gMDtcbiAgICAgICAgbGV0IG5ld0xlbmd0aCA9IE1hdGgubWF4KHRoaXMubWluTGVuZ3RoKCkgPz8gc3RlcCwgbGVuZ3RoICsgc3RlcCk7XG4gICAgICAgIC8vINCe0LrRgNGD0LPQu9GP0LXQvCDQtNC+INCx0LvQuNC20LDQudGI0LXQs9C+INC60YDQsNGC0L3QvtCz0L4g0YfQuNGB0LvQsC5cbiAgICAgICAgbmV3TGVuZ3RoID0gTWF0aC5yb3VuZChuZXdMZW5ndGggLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgIGxlbmd0aENvbnRyb2wuc2V0VmFsdWUoTnVtYmVyKG5ld0xlbmd0aC50b0ZpeGVkKDIpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0YHQvtCx0YvRgtC40Y8g0YjQsNCz0LAg0LrQvtC70LjRh9C10YHRgtCy0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RlcCDQqNCw0LMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uU3RlcFF1YW50aXR5KHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBxdWFudGl0eSA9IHRoaXMuZm9ybS5jb250cm9scy5xdWFudGl0eS52YWx1ZSA/PyAwO1xuXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5xdWFudGl0eS5zZXRWYWx1ZShNYXRoLm1heCh0aGlzLnByb2R1Y3RNdWx0aXBsaWNpdHkoKSwgcXVhbnRpdHkgLSAocXVhbnRpdHkgJSBzdGVwKSArIHN0ZXApKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDRgdC+0LHRi9GC0LjRjyDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uU3VibWl0KCk6IHZvaWQge1xuICAgICAgICAvLyDQo9C00LDQu9GP0LXQvCBudWxsLdC/0L7Qu9GPINC40Lcg0LfQvdCw0YfQtdC90LjRjyDRhNC+0YDQvNGLLlxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udmVydGVyc1NlcnZpY2UucmVtb3ZlTnVsbDxTY0lOZXdDYXJ0SXRlbU1lYXN1cmVkPih0aGlzLmZvcm0udmFsdWUgYXMgU2NJTmV3Q2FydEl0ZW1NZWFzdXJlZCk7XG5cbiAgICAgICAgLy8g0JXRgdC70Lgg0Y3RgtC+INC00L7QsdCw0LLQu9C10L3QuNC1INC90L7QstC+0LPQviDRgtC+0LLQsNGA0LAg4oCUINC00L7QsdCw0LLQu9GP0LXQvCBwcm9kdWN0SWQuXG4gICAgICAgIGlmICghdGhpcy5vcmRlckl0ZW0oKSkge1xuICAgICAgICAgICAgdmFsdWUucHJvZHVjdElkID0gdGhpcy5wcm9kdWN0KCkuaWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5sZW5ndGhTdGVwKCk7XG5cbiAgICAgICAgLy8g0JXRgdC70Lgg0YLQvtCy0LDRgCDQuNC30LzQtdGA0Y/QtdC80YvQuSDQuCDQtdGB0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAg0LTQu9C40L3RiyDigJQg0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10Lwg0LTQu9C40L3RgyDQv9C+INGI0LDQs9GDICjQutC+0LvQuNGH0LXRgdGC0LLQviDRg9C20LUg0LHRg9C00LXRgiDQstGL0YfQuNGB0LvQtdC90L4g0L/QviDRhNC+0YDQvNGD0LvQtSDQnNC10YLRgNCw0LYvbWluLWNvdW50KVxuICAgICAgICBpZiAodGhpcy5wcm9kdWN0SXNNZWFzdXJhYmxlKCkgJiYgdGhpcy5pc0xlbmd0aENvbmZpZ3VyYXRvcigpICYmIHN0ZXApIHtcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA9IHN0ZXA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQn9C+0LzQtdGH0LDQtdC8INCy0YHQtSDQv9C+0LvRjyDRhNC+0YDQvNGLINC60LDQuiBcInRvdWNoXCIg0Lgg0LfQsNC/0YPRgdC60LDQtdC8INCy0LDQu9C40LTQsNGG0LjRjiDQtNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQvtGI0LjQsdC+0Log0YEg0YHQtdGA0LLQtdGA0LAuXG4gICAgICAgIHR1aU1hcmtDb250cm9sQXNUb3VjaGVkQW5kVmFsaWRhdGUodGhpcy5mb3JtKTtcblxuICAgICAgICAvLyDQkiDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC4INC+0YIg0YDQtdC20LjQvNCwIOKAlCDRgNC10LTQsNC60YLQuNGA0YPQtdC8INC40LvQuCDQtNC+0LHQsNCy0LvRj9C10Lwg0YLQvtCy0LDRgC5cbiAgICAgICAgaWYgKHRoaXMub3JkZXJJdGVtKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdENhcnRJdGVtLmVtaXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGRQcm9kdWN0LmVtaXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPCEtLSDQpNC+0YDQvNCwINC00L7QsdCw0LLQu9C10L3QuNGPINC40LfQvNC10YDRj9C10LzQvtCz0L4g0YLQvtCy0LDRgNCwLiAtLT5cbjxmb3JtXG4gICAgKm5nSWY9XCJwcm9kdWN0XCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCJcbiAgICBTY05leHRJbnB1dEZvY3VzXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCJcbj5cbiAgICBAbGV0IHN0ZXAgPSBsZW5ndGhTdGVwKCk7XG5cbiAgICA8IS0tINCU0LvQuNC90LAg0YLQvtCy0LDRgNCwICjQvNC10YLRgNCw0LYpIC0tPlxuICAgIDxsYWJlbFxuICAgICAgICAqbmdJZj1cInByb2R1Y3RJc01lYXN1cmFibGUoKVwiXG4gICAgICAgIHR1aUxhYmVsXG4gICAgPlxuICAgICAgICDQnNC10YLRgNCw0LYsIHt7IHByb2R1Y3QoKS51bml0Lm5hbWUgfX1cbiAgICAgICAgQGlmICghc3RlcCB8fCBtYXhMZW5ndGgoKSkge1xuICAgICAgICAgICAge3sgbGVuZ3RoSGludCgpIH19XG4gICAgICAgIH1cblxuICAgICAgICA8dHVpLXRleHRmaWVsZD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR1aUlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbdHVpTnVtYmVyRm9ybWF0XT1cInsgcHJlY2lzaW9uOiAyIH1cIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWF4TGVuZ3RoKCkgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5MZW5ndGgoKSB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd0Rvd24pPVwib25TdGVwTGVuZ3RoKC0obGVuZ3RoU3RlcCgpID8/IDAuMDEpKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uYXJyb3dVcCk9XCJvblN0ZXBMZW5ndGgobGVuZ3RoU3RlcCgpID8/IDAuMDEpXCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJsZW5ndGhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC90dWktdGV4dGZpZWxkPlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsZW5ndGhcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwibGVuZ3RoU3RlcCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidHVpLWZvcm1fX2ZpZWxkLW5vdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQnNC10YLRgNCw0LYg0LTQvtC70LbQtdC9INCx0YvRgtGMINC60YDQsNGC0LXQvSB7eyBsZW5ndGhTdGVwKCkgfX1cbiAgICAgICAgPC9wPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8IS0tINCa0L7Qu9C40YfQtdGB0YLQstC+INGC0L7QstCw0YDQsCAtLT5cbiAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgINCa0L7Qu9C40YfQtdGB0YLQstC+LCDRiNGCLlxuICAgICAgICA8dHVpLXRleHRmaWVsZD5cbiAgICAgICAgICAgIDx0dWktY2hpcFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMZW5ndGhDb25maWd1cmF0b3IoKSAmJiBwcm9kdWN0TXVsdGlwbGljaXR5KCkgJiYgc3RlcFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJuZWdhdGl2ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb250LWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHgge3sgc3RlcCB9fSB7eyBwcm9kdWN0KCkudW5pdC5uYW1lIH19XG4gICAgICAgICAgICA8L3R1aS1jaGlwPlxuXG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cItCa0L7Qu9C40YfQtdGB0YLQstC+XCJcbiAgICAgICAgICAgICAgICB0dWlJbnB1dE51bWJlclxuICAgICAgICAgICAgICAgIFt0dWlOdW1iZXJGb3JtYXRdPVwieyBkZWNpbWFsTW9kZTogJ25vdC16ZXJvJyB9XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cInByb2R1Y3RNdWx0aXBsaWNpdHkoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uYXJyb3dEb3duKT1cIm9uU3RlcFF1YW50aXR5KC1wcm9kdWN0TXVsdGlwbGljaXR5KCkpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd1VwKT1cIm9uU3RlcFF1YW50aXR5KHByb2R1Y3RNdWx0aXBsaWNpdHkoKSlcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInF1YW50aXR5XCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJxdWFudGl0eVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3R1aS10ZXh0ZmllbGQ+XG4gICAgICAgIDxwIGNsYXNzPVwidHVpLWZvcm1fX2ZpZWxkLW5vdGVcIj7QmtC+0LvQuNGH0LXRgdGC0LLQviDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LrRgNCw0YLQvdC+IHt7IHByb2R1Y3RNdWx0aXBsaWNpdHkoKSB9fTwvcD5cbiAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicXVhbnRpdHlcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQnNCw0YDQutC40YDQvtCy0LrQsCAtLT5cbiAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgINCc0LDRgNC60LjRgNC+0LLQutCwXG4gICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibWFya2VyXCI+XG4gICAgICAgICAgICDQnNCw0YDQutC40YDQvtCy0LrQsFxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHVpVGV4dGZpZWxkTGVnYWN5XG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwibWFya2VyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtYXJrZXJcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQmtC90L7Qv9C60LAg0LTQvtCx0LDQstC70LXQvdC40Y8gLyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3RgyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgQGxldCBjb3N0ID0gdG90YWxDb3N0JCB8IGFzeW5jO1xuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb3N0XCI+XG4gICAgICAgICAgICDQmNGC0L7Qs9C+OjxzcGFuIGNsYXNzPVwidGV4dC0yeGwgZm9udC1ib2xkXCI+XG4gICAgICAgICAgICAgICAge3sgY29zdCB8IHR1aUFtb3VudCB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAge3sgcHJvZHVjdCgpLmN1cnJlbmN5LnN5bWJvbCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tINCa0L3QvtC/0LrQsCDQtNC+0LHQsNCy0LvQtdC90LjRjyAvINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdGDIC0tPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuY2hlY2tcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmcoKVwiXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXQtMlwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IG9yZGVySXRlbSgpID8gJ9CY0LfQvNC10L3QuNGC0YwnIDogJ9CU0L7QsdCw0LLQuNGC0Ywg0LIg0LrQvtGA0LfQuNC90YMnIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9mb3JtPlxuIl19
@@ -25,7 +25,7 @@ export class ScAddOrEditingCartItemDialogComponent {
25
25
  /**
26
26
  * {@link Observable} запроса добавления / изменения товара в корзине.
27
27
  */
28
- this.submit$ = this.onSubmit.pipe(switchMap((value) => (this.cartItem && !('productId' in value) ? this.cartService.patchCartItem$(this.cartItem.id, value) : this.cartService.addToCart$(value)).pipe(tap(() => {
28
+ this.submit$ = this.onSubmit.pipe(switchMap((value) => (this.orderItem && !('productId' in value) ? this.cartService.updateProduct$(this.orderItem.id, value) : this.cartService.addProduct$(value)).pipe(tap(() => {
29
29
  this.context.$implicit.complete();
30
30
  }), catchError((error) => {
31
31
  if (error instanceof HttpErrorResponse) {
@@ -42,7 +42,7 @@ export class ScAddOrEditingCartItemDialogComponent {
42
42
  this.formComponent().form.markAsDirty();
43
43
  }
44
44
  return of();
45
- }), startWith(null))), startWith(), share());
45
+ }))), startWith(), share());
46
46
  /**
47
47
  * {@link Observable} изменения состояния загрузки данных.
48
48
  */
@@ -58,17 +58,17 @@ export class ScAddOrEditingCartItemDialogComponent {
58
58
  /**
59
59
  * Данные о товаре в корзине.
60
60
  */
61
- this.cartItem = this.context.data.cartItem;
61
+ this.orderItem = this.context.data.orderItem;
62
62
  /**
63
63
  * Сервис для работы с корзиной.
64
64
  */
65
65
  this.cartService = inject(ScCartService);
66
66
  }
67
67
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScAddOrEditingCartItemDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
68
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScAddOrEditingCartItemDialogComponent, isStandalone: true, selector: "sc-add-or-editing-cart-item-dialog", viewQueries: [{ propertyName: "formComponent", first: true, predicate: ScAddOrEditingCartItemFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (product) {\n <sc-add-or-editing-cart-item-form\n [product]=\"product\"\n [cartItem]=\"cartItem\"\n (addToCart)=\"onSubmit.next($event)\"\n (editCartItem)=\"onSubmit.next($event)\"\n [isLoading]=\"loading()\"\n ></sc-add-or-editing-cart-item-form>\n}\n", dependencies: [{ kind: "component", type: ScAddOrEditingCartItemFormComponent, selector: "sc-add-or-editing-cart-item-form", inputs: ["product", "cartItem", "isLoading"], outputs: ["addToCart", "editCartItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
68
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScAddOrEditingCartItemDialogComponent, isStandalone: true, selector: "sc-add-or-editing-cart-item-dialog", viewQueries: [{ propertyName: "formComponent", first: true, predicate: ScAddOrEditingCartItemFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (product) {\n <sc-add-or-editing-cart-item-form\n [product]=\"product\"\n [orderItem]=\"orderItem\"\n (addProduct)=\"onSubmit.next($event)\"\n (editCartItem)=\"onSubmit.next($event)\"\n [isLoading]=\"loading()\"\n ></sc-add-or-editing-cart-item-form>\n}\n", dependencies: [{ kind: "component", type: ScAddOrEditingCartItemFormComponent, selector: "sc-add-or-editing-cart-item-form", inputs: ["product", "orderItem", "isLoading"], outputs: ["addProduct", "editCartItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
69
69
  }
70
70
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScAddOrEditingCartItemDialogComponent, decorators: [{
71
71
  type: Component,
72
- args: [{ standalone: true, selector: 'sc-add-or-editing-cart-item-dialog', imports: [ScAddOrEditingCartItemFormComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (product) {\n <sc-add-or-editing-cart-item-form\n [product]=\"product\"\n [cartItem]=\"cartItem\"\n (addToCart)=\"onSubmit.next($event)\"\n (editCartItem)=\"onSubmit.next($event)\"\n [isLoading]=\"loading()\"\n ></sc-add-or-editing-cart-item-form>\n}\n" }]
72
+ args: [{ standalone: true, selector: 'sc-add-or-editing-cart-item-dialog', imports: [ScAddOrEditingCartItemFormComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (product) {\n <sc-add-or-editing-cart-item-form\n [product]=\"product\"\n [orderItem]=\"orderItem\"\n (addProduct)=\"onSubmit.next($event)\"\n (editCartItem)=\"onSubmit.next($event)\"\n [isLoading]=\"loading()\"\n ></sc-add-or-editing-cart-item-form>\n}\n" }]
73
73
  }] });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nL3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRIQUE0SDtBQUU1SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBYyxhQUFhLEVBQXNELE1BQU0sd0JBQXdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSw0RUFBNEUsQ0FBQzs7QUFFakk7O0dBRUc7QUFRSCxNQUFNLE9BQU8scUNBQXFDO0lB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QUFvQyxXQUVyQyxDQUFDLG1DQUFtQyxDQUFDLG1CQUM3Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgc29uYXJqcy9uby1uZXN0ZWQtdGVtcGxhdGUtbGl0ZXJhbHMsQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgU2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgU2NDYXJ0SXRlbSwgU2NDYXJ0U2VydmljZSwgU2NJQXBpRXJyb3JSZXNwb25zZSwgU2NJTmV3Q2FydEl0ZW1CYXNlLCBTY1Byb2R1Y3QgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IHR1aUlzRmFsc3kgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RDb250ZXh0IH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY0FkZE9yRWRpdGluZ0NhcnRJdGVtRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0vc2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0uY29tcG9uZW50JztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQvtCx0LDQstC70LXQvdC40Y8gLyDQuNC30LzQtdC90LXQvdC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtTY0FkZE9yRWRpdGluZ0NhcnRJdGVtRm9ybUNvbXBvbmVudF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjQWRkT3JFZGl0aW5nQ2FydEl0ZW1EaWFsb2dDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCa0L7QvNC/0L7QvdC10L3RgiDRhNC+0YDQvNGLINC00L7QsdCw0LLQu9C10L3QuNGPIC8g0LjQt9C80LXQvdC10L3QuNGPINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybUNvbXBvbmVudCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxTY0FkZE9yRWRpdGluZ0NhcnRJdGVtRm9ybUNvbXBvbmVudD4oU2NBZGRPckVkaXRpbmdDYXJ0SXRlbUZvcm1Db21wb25lbnQpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TdWJtaXQ6IFN1YmplY3Q8U2NJTmV3Q2FydEl0ZW1CYXNlIHwgT21pdDxTY0lOZXdDYXJ0SXRlbUJhc2UsICdwcm9kdWN0SWQnPj4gPSBuZXcgU3ViamVjdDxTY0lOZXdDYXJ0SXRlbUJhc2UgfCBPbWl0PFNjSU5ld0NhcnRJdGVtQmFzZSwgJ3Byb2R1Y3RJZCc+PigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINC00L7QsdCw0LLQu9C10L3QuNGPIC8g0LjQt9C80LXQvdC10L3QuNGPINGC0L7QstCw0YDQsCDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VibWl0JCA9IHRoaXMub25TdWJtaXQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgICh0aGlzLmNhcnRJdGVtICYmICEoJ3Byb2R1Y3RJZCcgaW4gdmFsdWUpID8gdGhpcy5jYXJ0U2VydmljZS5wYXRjaENhcnRJdGVtJCh0aGlzLmNhcnRJdGVtLmlkLCB2YWx1ZSkgOiB0aGlzLmNhcnRTZXJ2aWNlLmFkZFRvQ2FydCQodmFsdWUgYXMgU2NJTmV3Q2FydEl0ZW1CYXNlKSkucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuJGltcGxpY2l0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JzLCBtZXNzYWdlIH0gPSBlcnJvci5lcnJvciBhcyBTY0lBcGlFcnJvclJlc3BvbnNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JzICYmIGlzT2JqZWN0KGVycm9ycykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhlcnJvcnMpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db21wb25lbnQoKS5mb3JtLmdldChrKT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IHYgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29tcG9uZW50KCkuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogW21lc3NhZ2VdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db21wb25lbnQoKS5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbXBvbmVudCgpLmZvcm0ubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc3RhcnRXaXRoKCksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LfQsNCz0YDRg9C30LrQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmc6IFNpZ25hbDxib29sZWFuPiA9IHRvU2lnbmFsKHRoaXMuc3VibWl0JC5waXBlKG1hcCh0dWlJc0ZhbHN5KSksIHsgaW5pdGlhbFZhbHVlOiBmYWxzZSB9KTtcblxuICAgIC8qKlxuICAgICAqINCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udGV4dCA9IGluamVjdENvbnRleHQ8VHVpRGlhbG9nQ29udGV4dDxib29sZWFuLCB7IHByb2R1Y3Q6IFNjUHJvZHVjdDsgY2FydEl0ZW06IFNjQ2FydEl0ZW0gfCB1bmRlZmluZWQgfT4+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0YLQvtCy0LDRgNC1LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwcm9kdWN0ID0gdGhpcy5jb250ZXh0LmRhdGEucHJvZHVjdDtcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDRgtC+0LLQsNGA0LUg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNhcnRJdGVtID0gdGhpcy5jb250ZXh0LmRhdGEuY2FydEl0ZW07XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutC+0YDQt9C40L3QvtC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FydFNlcnZpY2U6IFNjQ2FydFNlcnZpY2UgPSBpbmplY3QoU2NDYXJ0U2VydmljZSk7XG59XG4iLCJAaWYgKHByb2R1Y3QpIHtcbiAgICA8c2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm1cbiAgICAgICAgW3Byb2R1Y3RdPVwicHJvZHVjdFwiXG4gICAgICAgIFtjYXJ0SXRlbV09XCJjYXJ0SXRlbVwiXG4gICAgICAgIChhZGRUb0NhcnQpPVwib25TdWJtaXQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgKGVkaXRDYXJ0SXRlbSk9XCJvblN1Ym1pdC5uZXh0KCRldmVudClcIlxuICAgICAgICBbaXNMb2FkaW5nXT1cImxvYWRpbmcoKVwiXG4gICAgPjwvc2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWZvcm0+XG59XG4iXX0=
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nL3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRIQUE0SDtBQUU1SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQW9FLE1BQU0sd0JBQXdCLENBQUM7QUFDekgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSw0RUFBNEUsQ0FBQzs7QUFFakk7O0dBRUc7QUFRSCxNQUFNLE9BQU8scUNBQXFDO0lBUGxEO1FBUUk7O1dBRUc7UUFDYSxrQkFBYSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQXNDLG1DQUFtQyxDQUFDLENBQUM7UUFFN0g7O1dBRUc7UUFDYSxhQUFRLEdBQWlDLElBQUksT0FBTyxFQUF1QixDQUFDO1FBRTVGOztXQUVHO1FBQ2EsWUFBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUN4QyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNoQixDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM5SSxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEMsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBNEIsQ0FBQztnQkFFL0QsSUFBSSxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDdEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3ZFLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDVixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkUsQ0FBQztnQkFFRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUMsQ0FBQztZQUNELE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0wsQ0FDSixFQUNELFNBQVMsRUFBRSxFQUNYLEtBQUssRUFBRSxDQUNWLENBQUM7UUFFRjs7V0FFRztRQUNhLFlBQU8sR0FBb0IsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFakg7O1dBRUc7UUFDYSxZQUFPLEdBQUcsYUFBYSxFQUF5RixDQUFDO1FBRWpJOztXQUVHO1FBQ2EsWUFBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUVwRDs7V0FFRztRQUNhLGNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFeEQ7O1dBRUc7UUFDYyxnQkFBVyxHQUFrQixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDdkU7K0dBckVZLHFDQUFxQzttR0FBckMscUNBQXFDLDZJQUkwQyxtQ0FBbUMsZ0VDNUIvSCw4U0FTQSw0Q0RZYyxtQ0FBbUM7OzRGQUdwQyxxQ0FBcUM7a0JBUGpELFNBQVM7aUNBQ00sSUFBSSxZQUNOLG9DQUFvQyxXQUVyQyxDQUFDLG1DQUFtQyxDQUFDLG1CQUM3Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgc29uYXJqcy9uby1uZXN0ZWQtdGVtcGxhdGUtbGl0ZXJhbHMsQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgU2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgU2NDYXJ0U2VydmljZSwgU2NJQXBpRXJyb3JSZXNwb25zZSwgU2NJTmV3T3JkZXJJdGVtQmFzZSwgU2NPcmRlckl0ZW0sIFNjUHJvZHVjdCB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgdHVpSXNGYWxzeSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpRGlhbG9nQ29udGV4dCB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IGluamVjdENvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlLCBzdGFydFdpdGgsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjQWRkT3JFZGl0aW5nQ2FydEl0ZW1Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybS9zYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZm9ybS5jb21wb25lbnQnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQtNC+0LHQsNCy0LvQtdC90LjRjyAvINC40LfQvNC10L3QtdC90LjRjyDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1hZGQtb3ItZWRpdGluZy1jYXJ0LWl0ZW0tZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1NjQWRkT3JFZGl0aW5nQ2FydEl0ZW1Gb3JtQ29tcG9uZW50XSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NBZGRPckVkaXRpbmdDYXJ0SXRlbURpYWxvZ0NvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0JrQvtC80L/QvtC90LXQvdGCINGE0L7RgNC80Ysg0LTQvtCx0LDQstC70LXQvdC40Y8gLyDQuNC30LzQtdC90LXQvdC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtQ29tcG9uZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkPFNjQWRkT3JFZGl0aW5nQ2FydEl0ZW1Gb3JtQ29tcG9uZW50PihTY0FkZE9yRWRpdGluZ0NhcnRJdGVtRm9ybUNvbXBvbmVudCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU3ViamVjdH0g0YHQvtCx0YvRgtC40Y8g0L7RgtC/0YDQsNCy0LrQuCDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBvblN1Ym1pdDogU3ViamVjdDxTY0lOZXdPcmRlckl0ZW1CYXNlPiA9IG5ldyBTdWJqZWN0PFNjSU5ld09yZGVySXRlbUJhc2U+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0LTQvtCx0LDQstC70LXQvdC40Y8gLyDQuNC30LzQtdC90LXQvdC40Y8g0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzdWJtaXQkID0gdGhpcy5vblN1Ym1pdC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgKHRoaXMub3JkZXJJdGVtICYmICEoJ3Byb2R1Y3RJZCcgaW4gdmFsdWUpID8gdGhpcy5jYXJ0U2VydmljZS51cGRhdGVQcm9kdWN0JCh0aGlzLm9yZGVySXRlbS5pZCwgdmFsdWUpIDogdGhpcy5jYXJ0U2VydmljZS5hZGRQcm9kdWN0JCh2YWx1ZSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LiRpbXBsaWNpdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycywgbWVzc2FnZSB9ID0gZXJyb3IuZXJyb3IgYXMgU2NJQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ycyAmJiBpc09iamVjdChlcnJvcnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXJyb3JzKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29tcG9uZW50KCkuZm9ybS5nZXQoayk/LnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiB2IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbXBvbmVudCgpLmZvcm0uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IFttZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29tcG9uZW50KCkuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db21wb25lbnQoKS5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc3RhcnRXaXRoKCksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LfQsNCz0YDRg9C30LrQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmc6IFNpZ25hbDxib29sZWFuPiA9IHRvU2lnbmFsKHRoaXMuc3VibWl0JC5waXBlKG1hcCh0dWlJc0ZhbHN5KSksIHsgaW5pdGlhbFZhbHVlOiBmYWxzZSB9KTtcblxuICAgIC8qKlxuICAgICAqINCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udGV4dCA9IGluamVjdENvbnRleHQ8VHVpRGlhbG9nQ29udGV4dDxib29sZWFuLCB7IHByb2R1Y3Q6IFNjUHJvZHVjdDsgb3JkZXJJdGVtOiBTY09yZGVySXRlbSB8IHVuZGVmaW5lZCB9Pj4oKTtcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDRgtC+0LLQsNGA0LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHByb2R1Y3QgPSB0aGlzLmNvbnRleHQuZGF0YS5wcm9kdWN0O1xuXG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+INGC0L7QstCw0YDQtSDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb3JkZXJJdGVtID0gdGhpcy5jb250ZXh0LmRhdGEub3JkZXJJdGVtO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LrQvtGA0LfQuNC90L7QuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhcnRTZXJ2aWNlOiBTY0NhcnRTZXJ2aWNlID0gaW5qZWN0KFNjQ2FydFNlcnZpY2UpO1xufVxuIiwiQGlmIChwcm9kdWN0KSB7XG4gICAgPHNjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtXG4gICAgICAgIFtwcm9kdWN0XT1cInByb2R1Y3RcIlxuICAgICAgICBbb3JkZXJJdGVtXT1cIm9yZGVySXRlbVwiXG4gICAgICAgIChhZGRQcm9kdWN0KT1cIm9uU3VibWl0Lm5leHQoJGV2ZW50KVwiXG4gICAgICAgIChlZGl0Q2FydEl0ZW0pPVwib25TdWJtaXQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgW2lzTG9hZGluZ109XCJsb2FkaW5nKClcIlxuICAgID48L3NjLWFkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1mb3JtPlxufVxuIl19
@@ -1,4 +1,3 @@
1
- export * from './cart-item/sc-cart-item.component';
2
1
  export * from './sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component';
3
2
  export * from './add-or-editing-cart-item-dialog';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsdUZBQXVGLENBQUM7QUFDdEcsY0FBYyxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2FydC1pdGVtL3NjLWNhcnQtaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cvc2MtY2FydC1hZGQtcHJvZHVjdHMtZnJvbS1jc3YtZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FkZC1vci1lZGl0aW5nLWNhcnQtaXRlbS1kaWFsb2cnO1xuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVGQUF1RixDQUFDO0FBQ3RHLGNBQWMsbUNBQW1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjLWNhcnQtYWRkLXByb2R1Y3RzLWZyb20tY3N2LWRpYWxvZy9zYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYWRkLW9yLWVkaXRpbmctY2FydC1pdGVtLWRpYWxvZyc7XG4iXX0=