@snabcentr/client-ui 2.6.1 → 2.6.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,38 +1,28 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Inject, inject, Input, Output, ViewChild } from '@angular/core';
2
- import { ScImageHelper } from '@snabcentr/client-core';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
3
2
  import { TuiPreviewDialogService } from '@taiga-ui/kit';
3
+ import { AbstractScPriceCard } from '../../directives';
4
4
  import * as i0 from "@angular/core";
5
- import * as i1 from "@snabcentr/client-core";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@taiga-ui/core";
8
- import * as i4 from "@taiga-ui/kit";
9
- import * as i5 from "../../catalog/price-warehouse-stock/sc-price-warehouse-stock.component";
10
- import * as i6 from "@taiga-ui/polymorpheus";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@taiga-ui/core";
7
+ import * as i3 from "@taiga-ui/kit";
8
+ import * as i4 from "../../catalog/price-warehouse-stock/sc-price-warehouse-stock.component";
9
+ import * as i5 from "@taiga-ui/polymorpheus";
11
10
  /**
12
11
  * Компонент карточки элемента заказа.
13
12
  */
14
- export class ScOrderItemMobileComponent {
13
+ export class ScOrderItemMobileComponent extends AbstractScPriceCard {
15
14
  /**
16
15
  * Инициирует экземпляр класса {@link ScOrderItemMobileComponent}.
17
16
  *
18
- * @param unitsHelper Объект-хэлпер для работы со значениями единиц измерения товара.
19
17
  * @param previewDialogService Сервис диалогового окна предварительного просмотра.
20
18
  */
21
- constructor(unitsHelper, previewDialogService) {
22
- this.unitsHelper = unitsHelper;
19
+ constructor(previewDialogService) {
20
+ super();
23
21
  this.previewDialogService = previewDialogService;
24
- /**
25
- * Событие нажатия на карточку.
26
- */
27
- this.clickCardEvent = new EventEmitter();
28
22
  /**
29
23
  * Событие нажатия на дополнительные действия.
30
24
  */
31
25
  this.clickActionsEvent = new EventEmitter();
32
- /**
33
- * Хелпер для работы с изображениями товара.
34
- */
35
- this.imageHelper = inject(ScImageHelper);
36
26
  }
37
27
  /**
38
28
  * Продукт элемента заказа.
@@ -54,13 +44,13 @@ export class ScOrderItemMobileComponent {
54
44
  getCardImage(product) {
55
45
  return this.imageHelper.getImage(product);
56
46
  }
57
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ScOrderItemMobileComponent, deps: [{ token: i1.ScUnitsHelper }, { token: TuiPreviewDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
58
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: ScOrderItemMobileComponent, selector: "sc-order-item-mobile", inputs: { orderItem: "orderItem" }, outputs: { clickCardEvent: "clickCardEvent", clickActionsEvent: "clickActionsEvent" }, viewQueries: [{ propertyName: "specificationPreviewRef", first: true, predicate: ["specificationPreview"], descendants: true }], ngImport: i0, template: "<div class=\"relative flex flex-wrap gap-x-4 gap-y-2 rounded-xl border border-tui-base-04 bg-white p-4 shadow-sc-2\">\n <ng-container *ngIf=\"orderItem && product; else skeleton\">\n <button\n tuiIconButton\n (click)=\"clickActionsEvent.emit()\"\n size=\"m\"\n iconStart=\"@tui.ellipsis-vertical\"\n appearance=\"float\"\n class=\"!absolute right-0 top-0 !hidden\"\n ></button>\n <div class=\"flex grow gap-2\">\n <div class=\"flex size-20 shrink-0 items-center justify-center overflow-hidden\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage(product)\"\n [alt]=\"product.name\"\n [class.p-5]=\"!product.images?.length\"\n class=\"cursor-pointer\"\n />\n </div>\n\n <div class=\"flex grow flex-wrap gap-x-8 self-center\">\n <div class=\"flex grow basis-min-content flex-col\">\n <a\n tuiLink\n (click)=\"clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n <div class=\"flex flex-col gap-y-0.5 text-tui-text-02\">\n <div class=\"flex flex-wrap\">\n <p class=\"w-40\">\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n <p\n class=\"w-40\"\n *ngIf=\"product.pack\"\n >\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n </p>\n </div>\n <a\n tuiLink\n *ngIf=\"orderItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a\n >\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItem.specificationImgUrl\"\n />\n <button\n iconStart=\"@tui.x\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n\n <div class=\"flex flex-wrap gap-y-0.5\">\n <span\n *ngIf=\"product.discount\"\n class=\"w-50 items-center gap-x-2 gap-y-0.5 text-xs text-tui-text-02\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <p class=\"w-50 flex items-baseline gap-x-2 gap-y-0.5 font-bold\">\n <span>{{ product.costRubString }}</span>\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"text-xs text-tui-text-02\"\n >{{ product.costString }}</span\n >\n </p>\n </div>\n </div>\n <div class=\"flex flex-wrap content-center\">\n <div class=\"w-50 flex flex-col gap-x-8 gap-y-0.5\">\n <ng-container *ngIf=\"orderItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ orderItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"orderItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ orderItem.length }} \u043C.</p>\n </ng-template>\n <p *ngIf=\"orderItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ orderItem.width }} \u043C.</p>\n <p class=\"flex flex-col items-baseline gap-x-2\">\n <span class=\"whitespace-nowrap text-body-m-bold\">\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: <span class=\"whitespace-nowrap\">{{ orderItem.quantity }}</span>\n </span>\n </p>\n </div>\n\n <div class=\"w-50 flex flex-col gap-y-0.5\">\n <p class=\"whitespace-nowrap text-body-m-bold\">\n \u0421\u0443\u043C\u043C\u0430: <span class=\"whitespace-nowrap\"> {{ orderItem.getCostRubStr() }} </span>\n </p>\n <sc-price-warehouse-stock\n [product]=\"product\"\n [fromMain]=\"false\"\n ></sc-price-warehouse-stock>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-template #skeleton>\n <div class=\"flex w-full gap-2\">\n <div class=\"size-20 rounded-xl bg-tui-base-02\"></div>\n <div class=\"flex grow flex-col gap-2.5 bg-white\">\n <div class=\"h-4 w-full rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-4/5 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: i3.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: i4.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { kind: "directive", type: i4.TuiPreviewAction, selector: "[tuiPreviewAction]" }, { kind: "component", type: i5.ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { kind: "directive", type: i6.PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ScOrderItemMobileComponent, deps: [{ token: TuiPreviewDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: ScOrderItemMobileComponent, selector: "sc-order-item-mobile", inputs: { orderItem: "orderItem" }, outputs: { clickActionsEvent: "clickActionsEvent" }, viewQueries: [{ propertyName: "specificationPreviewRef", first: true, predicate: ["specificationPreview"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"relative flex flex-wrap gap-x-4 gap-y-2 rounded-xl border border-tui-base-04 bg-white p-4 shadow-sc-2\">\n <ng-container *ngIf=\"orderItem && product; else skeleton\">\n <button\n tuiIconButton\n (click)=\"clickActionsEvent.emit()\"\n size=\"m\"\n iconStart=\"@tui.ellipsis-vertical\"\n appearance=\"float\"\n class=\"!absolute right-0 top-0 !hidden\"\n ></button>\n <div class=\"flex grow gap-2\">\n <div class=\"flex size-20 shrink-0 items-center justify-center overflow-hidden\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage(product)\"\n [alt]=\"product.name\"\n [class.p-5]=\"!product.images?.length\"\n class=\"cursor-pointer\"\n />\n </div>\n\n <div class=\"flex grow flex-wrap gap-x-8 self-center\">\n <div class=\"flex grow basis-min-content flex-col\">\n <a\n [attr.href]=\"href ?? null\"\n tuiLink\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n <div class=\"flex flex-col gap-y-0.5 text-tui-text-02\">\n <div class=\"flex flex-wrap\">\n <p class=\"w-40\">\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n <p\n class=\"w-40\"\n *ngIf=\"product.pack\"\n >\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n </p>\n </div>\n <a\n tuiLink\n *ngIf=\"orderItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a\n >\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItem.specificationImgUrl\"\n />\n <button\n iconStart=\"@tui.x\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n\n <div class=\"flex flex-wrap gap-y-0.5\">\n <span\n *ngIf=\"product.discount\"\n class=\"w-50 items-center gap-x-2 gap-y-0.5 text-xs text-tui-text-02\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <p class=\"w-50 flex items-baseline gap-x-2 gap-y-0.5 font-bold\">\n <span>{{ product.costRubString }}</span>\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"text-xs text-tui-text-02\"\n >{{ product.costString }}</span\n >\n </p>\n </div>\n </div>\n <div class=\"flex flex-wrap content-center\">\n <div class=\"w-50 flex flex-col gap-x-8 gap-y-0.5\">\n <ng-container *ngIf=\"orderItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ orderItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"orderItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ orderItem.length }} \u043C.</p>\n </ng-template>\n <p *ngIf=\"orderItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ orderItem.width }} \u043C.</p>\n <p class=\"flex flex-col items-baseline gap-x-2\">\n <span class=\"whitespace-nowrap text-body-m-bold\">\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: <span class=\"whitespace-nowrap\">{{ orderItem.quantity }}</span>\n </span>\n </p>\n </div>\n\n <div class=\"w-50 flex flex-col gap-y-0.5\">\n <p class=\"whitespace-nowrap text-body-m-bold\">\n \u0421\u0443\u043C\u043C\u0430: <span class=\"whitespace-nowrap\"> {{ orderItem.getCostRubStr() }} </span>\n </p>\n <sc-price-warehouse-stock\n [product]=\"product\"\n [fromMain]=\"false\"\n ></sc-price-warehouse-stock>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-template #skeleton>\n <div class=\"flex w-full gap-2\">\n <div class=\"size-20 rounded-xl bg-tui-base-02\"></div>\n <div class=\"flex grow flex-col gap-2.5 bg-white\">\n <div class=\"h-4 w-full rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-4/5 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: i2.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: i3.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { kind: "directive", type: i3.TuiPreviewAction, selector: "[tuiPreviewAction]" }, { kind: "component", type: i4.ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { kind: "directive", type: i5.PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
59
49
  }
60
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ScOrderItemMobileComponent, decorators: [{
61
51
  type: Component,
62
- args: [{ selector: 'sc-order-item-mobile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative flex flex-wrap gap-x-4 gap-y-2 rounded-xl border border-tui-base-04 bg-white p-4 shadow-sc-2\">\n <ng-container *ngIf=\"orderItem && product; else skeleton\">\n <button\n tuiIconButton\n (click)=\"clickActionsEvent.emit()\"\n size=\"m\"\n iconStart=\"@tui.ellipsis-vertical\"\n appearance=\"float\"\n class=\"!absolute right-0 top-0 !hidden\"\n ></button>\n <div class=\"flex grow gap-2\">\n <div class=\"flex size-20 shrink-0 items-center justify-center overflow-hidden\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage(product)\"\n [alt]=\"product.name\"\n [class.p-5]=\"!product.images?.length\"\n class=\"cursor-pointer\"\n />\n </div>\n\n <div class=\"flex grow flex-wrap gap-x-8 self-center\">\n <div class=\"flex grow basis-min-content flex-col\">\n <a\n tuiLink\n (click)=\"clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n <div class=\"flex flex-col gap-y-0.5 text-tui-text-02\">\n <div class=\"flex flex-wrap\">\n <p class=\"w-40\">\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n <p\n class=\"w-40\"\n *ngIf=\"product.pack\"\n >\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n </p>\n </div>\n <a\n tuiLink\n *ngIf=\"orderItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a\n >\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItem.specificationImgUrl\"\n />\n <button\n iconStart=\"@tui.x\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n\n <div class=\"flex flex-wrap gap-y-0.5\">\n <span\n *ngIf=\"product.discount\"\n class=\"w-50 items-center gap-x-2 gap-y-0.5 text-xs text-tui-text-02\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <p class=\"w-50 flex items-baseline gap-x-2 gap-y-0.5 font-bold\">\n <span>{{ product.costRubString }}</span>\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"text-xs text-tui-text-02\"\n >{{ product.costString }}</span\n >\n </p>\n </div>\n </div>\n <div class=\"flex flex-wrap content-center\">\n <div class=\"w-50 flex flex-col gap-x-8 gap-y-0.5\">\n <ng-container *ngIf=\"orderItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ orderItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"orderItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ orderItem.length }} \u043C.</p>\n </ng-template>\n <p *ngIf=\"orderItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ orderItem.width }} \u043C.</p>\n <p class=\"flex flex-col items-baseline gap-x-2\">\n <span class=\"whitespace-nowrap text-body-m-bold\">\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: <span class=\"whitespace-nowrap\">{{ orderItem.quantity }}</span>\n </span>\n </p>\n </div>\n\n <div class=\"w-50 flex flex-col gap-y-0.5\">\n <p class=\"whitespace-nowrap text-body-m-bold\">\n \u0421\u0443\u043C\u043C\u0430: <span class=\"whitespace-nowrap\"> {{ orderItem.getCostRubStr() }} </span>\n </p>\n <sc-price-warehouse-stock\n [product]=\"product\"\n [fromMain]=\"false\"\n ></sc-price-warehouse-stock>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-template #skeleton>\n <div class=\"flex w-full gap-2\">\n <div class=\"size-20 rounded-xl bg-tui-base-02\"></div>\n <div class=\"flex grow flex-col gap-2.5 bg-white\">\n <div class=\"h-4 w-full rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-4/5 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n </ng-template>\n</div>\n" }]
63
- }], ctorParameters: () => [{ type: i1.ScUnitsHelper }, { type: i4.TuiPreviewDialogService, decorators: [{
52
+ args: [{ selector: 'sc-order-item-mobile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative flex flex-wrap gap-x-4 gap-y-2 rounded-xl border border-tui-base-04 bg-white p-4 shadow-sc-2\">\n <ng-container *ngIf=\"orderItem && product; else skeleton\">\n <button\n tuiIconButton\n (click)=\"clickActionsEvent.emit()\"\n size=\"m\"\n iconStart=\"@tui.ellipsis-vertical\"\n appearance=\"float\"\n class=\"!absolute right-0 top-0 !hidden\"\n ></button>\n <div class=\"flex grow gap-2\">\n <div class=\"flex size-20 shrink-0 items-center justify-center overflow-hidden\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage(product)\"\n [alt]=\"product.name\"\n [class.p-5]=\"!product.images?.length\"\n class=\"cursor-pointer\"\n />\n </div>\n\n <div class=\"flex grow flex-wrap gap-x-8 self-center\">\n <div class=\"flex grow basis-min-content flex-col\">\n <a\n [attr.href]=\"href ?? null\"\n tuiLink\n (click)=\"$event.preventDefault(); clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n <div class=\"flex flex-col gap-y-0.5 text-tui-text-02\">\n <div class=\"flex flex-wrap\">\n <p class=\"w-40\">\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n <p\n class=\"w-40\"\n *ngIf=\"product.pack\"\n >\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n </p>\n </div>\n <a\n tuiLink\n *ngIf=\"orderItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a\n >\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"orderItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"orderItem.specificationImgUrl\"\n />\n <button\n iconStart=\"@tui.x\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n\n <div class=\"flex flex-wrap gap-y-0.5\">\n <span\n *ngIf=\"product.discount\"\n class=\"w-50 items-center gap-x-2 gap-y-0.5 text-xs text-tui-text-02\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> &nbsp;\n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n <p class=\"w-50 flex items-baseline gap-x-2 gap-y-0.5 font-bold\">\n <span>{{ product.costRubString }}</span>\n <span\n *ngIf=\"!product.priceInRub\"\n class=\"text-xs text-tui-text-02\"\n >{{ product.costString }}</span\n >\n </p>\n </div>\n </div>\n <div class=\"flex flex-wrap content-center\">\n <div class=\"w-50 flex flex-col gap-x-8 gap-y-0.5\">\n <ng-container *ngIf=\"orderItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ orderItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"orderItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ orderItem.length }} \u043C.</p>\n </ng-template>\n <p *ngIf=\"orderItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ orderItem.width }} \u043C.</p>\n <p class=\"flex flex-col items-baseline gap-x-2\">\n <span class=\"whitespace-nowrap text-body-m-bold\">\n \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: <span class=\"whitespace-nowrap\">{{ orderItem.quantity }}</span>\n </span>\n </p>\n </div>\n\n <div class=\"w-50 flex flex-col gap-y-0.5\">\n <p class=\"whitespace-nowrap text-body-m-bold\">\n \u0421\u0443\u043C\u043C\u0430: <span class=\"whitespace-nowrap\"> {{ orderItem.getCostRubStr() }} </span>\n </p>\n <sc-price-warehouse-stock\n [product]=\"product\"\n [fromMain]=\"false\"\n ></sc-price-warehouse-stock>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-template #skeleton>\n <div class=\"flex w-full gap-2\">\n <div class=\"size-20 rounded-xl bg-tui-base-02\"></div>\n <div class=\"flex grow flex-col gap-2.5 bg-white\">\n <div class=\"h-4 w-full rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-4/5 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n </ng-template>\n</div>\n" }]
53
+ }], ctorParameters: () => [{ type: i3.TuiPreviewDialogService, decorators: [{
64
54
  type: Inject,
65
55
  args: [TuiPreviewDialogService]
66
56
  }] }], propDecorators: { specificationPreviewRef: [{
@@ -68,9 +58,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
68
58
  args: ['specificationPreview']
69
59
  }], orderItem: [{
70
60
  type: Input
71
- }], clickCardEvent: [{
72
- type: Output
73
61
  }], clickActionsEvent: [{
74
62
  type: Output
75
63
  }] } });
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbS1tb2JpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL29yZGVyL29yZGVyLWl0ZW0tbW9iaWxlL3NjLW9yZGVyLWl0ZW0tbW9iaWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtLW1vYmlsZS9zYy1vcmRlci1pdGVtLW1vYmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hJLE9BQU8sRUFBYyxhQUFhLEVBQTRCLE1BQU0sd0JBQXdCLENBQUM7QUFFN0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQUV4RDs7R0FFRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUE4Qm5DOzs7OztPQUtHO0lBQ0gsWUFDb0IsV0FBMEIsRUFFekIsb0JBQTZDO1FBRjlDLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBRXpCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUExQmxFOztXQUVHO1FBRUksbUJBQWMsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVyRTs7V0FFRztRQUVJLHNCQUFpQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXhFOztXQUVHO1FBQ2MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFZbEQsQ0FBQztJQUVKOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxZQUFZLENBQUMsT0FBa0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDOzhHQS9EUSwwQkFBMEIsK0NBc0N2Qix1QkFBdUI7a0dBdEMxQiwwQkFBMEIsd1RDYnZDLDA2TkFxSUE7OzJGRHhIYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0ksc0JBQXNCLG1CQUVmLHVCQUF1QixDQUFDLE1BQU07OzBCQXdDMUMsTUFBTTsyQkFBQyx1QkFBdUI7eUNBakNsQix1QkFBdUI7c0JBRHZDLFNBQVM7dUJBQUMsc0JBQXNCO2dCQU8xQixTQUFTO3NCQURmLEtBQUs7Z0JBT0MsY0FBYztzQkFEcEIsTUFBTTtnQkFPQSxpQkFBaUI7c0JBRHZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTY0NhcnRJdGVtLCBTY0ltYWdlSGVscGVyLCBTY1Byb2R1Y3QsIFNjVW5pdHNIZWxwZXIgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGN0LvQtdC80LXQvdGC0LAg0LfQsNC60LDQt9CwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLW9yZGVyLWl0ZW0tbW9iaWxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2Mtb3JkZXItaXRlbS1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY09yZGVySXRlbU1vYmlsZUNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC90LAg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0YHQv9C10YbQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NwZWNpZmljYXRpb25QcmV2aWV3JylcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNwZWNpZmljYXRpb25QcmV2aWV3UmVmPzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dD47XG5cbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3JkZXJJdGVtPzogU2NDYXJ0SXRlbTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQsNGA0YLQvtGH0LrRgy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xpY2tDYXJkRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQtNC10LnRgdGC0LLQuNGPLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0FjdGlvbnNFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0KXQtdC70L/QtdGAINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LjQt9C+0LHRgNCw0LbQtdC90LjRj9C80Lgg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW1hZ2VIZWxwZXIgPSBpbmplY3QoU2NJbWFnZUhlbHBlcik7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY09yZGVySXRlbU1vYmlsZUNvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdW5pdHNIZWxwZXIg0J7QsdGK0LXQutGCLdGF0Y3Qu9C/0LXRgCDQtNC70Y8g0YDQsNCx0L7RgtGLINGB0L4g0LfQvdCw0YfQtdC90LjRj9C80Lgg0LXQtNC40L3QuNGGINC40LfQvNC10YDQtdC90LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICogQHBhcmFtIHByZXZpZXdEaWFsb2dTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC40LDQu9C+0LPQvtCy0L7Qs9C+INC+0LrQvdCwINC/0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90L7Qs9C+INC/0YDQvtGB0LzQvtGC0YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSB1bml0c0hlbHBlcjogU2NVbml0c0hlbHBlcixcbiAgICAgICAgQEluamVjdChUdWlQcmV2aWV3RGlhbG9nU2VydmljZSlcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwcmV2aWV3RGlhbG9nU2VydmljZTogVHVpUHJldmlld0RpYWxvZ1NlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7QtNGD0LrRgiDRjdC70LXQvNC10L3RgtCwINC30LDQutCw0LfQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHByb2R1Y3QoKTogU2NQcm9kdWN0IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JkZXJJdGVtPy5wcm9kdWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQvtCx0YDQsNC30LjRgtGMINGB0L/QtdGG0LjRhNC40LrQsNGG0LjRji5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1NwZWNpZmljYXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLnNwZWNpZmljYXRpb25QcmV2aWV3UmVmID8/ICcnKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdGB0YvQu9C60YMg0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1INC60LDRgNGC0L7Rh9C60Lgg0YLQvtCy0LDRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0J/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwL9GD0YHQu9GD0LPQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2FyZEltYWdlKHByb2R1Y3Q6IFNjUHJvZHVjdCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlSGVscGVyLmdldEltYWdlKHByb2R1Y3QpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtd3JhcCBnYXAteC00IGdhcC15LTIgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLXR1aS1iYXNlLTA0IGJnLXdoaXRlIHAtNCBzaGFkb3ctc2MtMlwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcmRlckl0ZW0gJiYgcHJvZHVjdDsgZWxzZSBza2VsZXRvblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tBY3Rpb25zRXZlbnQuZW1pdCgpXCJcbiAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuZWxsaXBzaXMtdmVydGljYWxcIlxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cImZsb2F0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiIWFic29sdXRlIHJpZ2h0LTAgdG9wLTAgIWhpZGRlblwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ3JvdyBnYXAtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggc2l6ZS0yMCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tDYXJkRXZlbnQuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJnZXRDYXJkSW1hZ2UocHJvZHVjdClcIlxuICAgICAgICAgICAgICAgICAgICBbYWx0XT1cInByb2R1Y3QubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wLTVdPVwiIXByb2R1Y3QuaW1hZ2VzPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdyb3cgZmxleC13cmFwIGdhcC14LTggc2VsZi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBncm93IGJhc2lzLW1pbi1jb250ZW50IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tDYXJkRXZlbnQuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIj57eyBwcm9kdWN0Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLXktMC41IHRleHQtdHVpLXRleHQtMDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidy00MFwiPtCQ0YDRgtC40LrRg9C7OiB7eyBwcm9kdWN0LmNvZGUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTQwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9kdWN0LnBhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0J3QvtGA0LzQsCDRg9C/0LDQutC+0LLQutC4OiB7eyBwcm9kdWN0LnBhY2sgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3JkZXJJdGVtLnNwZWNpZmljYXRpb25JbWdVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93U3BlY2lmaWNhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+0KHQv9C10YbQuNGE0LjQutCw0YbQuNGPPC9hXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3BlY2lmaWNhdGlvblByZXZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQtcHJldmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktcHJldmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm90YXRhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pvb21hYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJvcmRlckl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybCBhcyBzcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwicHJldmlld1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIm9yZGVySXRlbS5zcGVjaWZpY2F0aW9uSW1nVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS54XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpUHJldmlld0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldmlldy5jb21wbGV0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHVpLXByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLXktMC41XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvZHVjdC5kaXNjb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTUwIGl0ZW1zLWNlbnRlciBnYXAteC0yIGdhcC15LTAuNSB0ZXh0LXhzIHRleHQtdHVpLXRleHQtMDJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGluZS10aHJvdWdoXCI+e3sgcHJvZHVjdC5kaXNjb3VudENvc3RTdHJpbmcgfX08L3NwYW4+ICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtdHVpLXN1Y2Nlc3MtZmlsbFwiPiAte3sgcHJvZHVjdC5kaXNjb3VudC5wZXJjZW50IH19JSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNjb3VudEhpbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGRcIj57eyBwcm9kdWN0LmRpc2NvdW50Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByb2R1Y3QuZGlzY291bnQuZXhwaXJlZEF0IGFzIGV4cGlyZWRBdFwiPtCU0LDRgtCwINC+0LrQvtC90YfQsNC90LjRjzoge3sgZXhwaXJlZEF0IH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidy01MCBmbGV4IGl0ZW1zLWJhc2VsaW5lIGdhcC14LTIgZ2FwLXktMC41IGZvbnQtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHByb2R1Y3QuY29zdFJ1YlN0cmluZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFwcm9kdWN0LnByaWNlSW5SdWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgdGV4dC10dWktdGV4dC0wMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBwcm9kdWN0LmNvc3RTdHJpbmcgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBjb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy01MCBmbGV4IGZsZXgtY29sIGdhcC14LTggZ2FwLXktMC41XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3JkZXJJdGVtLmhlaWdodDsgZWxzZSBsZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD7QktGL0YHQvtGC0LA6IHt7IG9yZGVySXRlbS5oZWlnaHQgfX0g0LwuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlbmd0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIm9yZGVySXRlbS5sZW5ndGhcIj7QlNC70LjQvdCwOiB7eyBvcmRlckl0ZW0ubGVuZ3RoIH19INC8LjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIm9yZGVySXRlbS53aWR0aFwiPtCo0LjRgNC40L3QsDoge3sgb3JkZXJJdGVtLndpZHRoIH19INC8LjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1iYXNlbGluZSBnYXAteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LWJvZHktbS1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgINCa0L7Qu9C40YfQtdGB0YLQstC+OiA8c3BhbiBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwXCI+e3sgb3JkZXJJdGVtLnF1YW50aXR5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctNTAgZmxleCBmbGV4LWNvbCBnYXAteS0wLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1ib2R5LW0tYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINCh0YPQvNC80LA6IDxzcGFuIGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXBcIj4ge3sgb3JkZXJJdGVtLmdldENvc3RSdWJTdHIoKSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2R1Y3RdPVwicHJvZHVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zyb21NYWluXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NjLXByaWNlLXdhcmVob3VzZS1zdG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI3NrZWxldG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXplLTIwIHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdyb3cgZmxleC1jb2wgZ2FwLTIuNSBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTQgdy1mdWxsIHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC00IHctMy81IHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC00IHctNC81IHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbS1tb2JpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL29yZGVyL29yZGVyLWl0ZW0tbW9iaWxlL3NjLW9yZGVyLWl0ZW0tbW9iaWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtLW1vYmlsZS9zYy1vcmRlci1pdGVtLW1vYmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEksT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7O0FBRXZEOztHQUVHO0FBTUgsTUFBTSxPQUFPLDBCQUEyQixTQUFRLG1CQUFtQjtJQW1CL0Q7Ozs7T0FJRztJQUNILFlBRXFCLG9CQUE2QztRQUU5RCxLQUFLLEVBQUUsQ0FBQztRQUZTLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFibEU7O1dBRUc7UUFFSSxzQkFBaUIsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQVl4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFvQixPQUFPO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25GLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLE9BQWtCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs4R0FwRFEsMEJBQTBCLGtCQXlCdkIsdUJBQXVCO2tHQXpCMUIsMEJBQTBCLDZTQ2Z2Qyx5L05Bc0lBOzsyRkR2SGEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNJLHNCQUFzQixtQkFFZix1QkFBdUIsQ0FBQyxNQUFNOzswQkEyQjFDLE1BQU07MkJBQUMsdUJBQXVCO3lDQXBCbEIsdUJBQXVCO3NCQUR2QyxTQUFTO3VCQUFDLHNCQUFzQjtnQkFPMUIsU0FBUztzQkFEZixLQUFLO2dCQU9DLGlCQUFpQjtzQkFEdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTY0NhcnRJdGVtLCBTY1Byb2R1Y3QgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFNjUHJpY2VDYXJkIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC60LDRgNGC0L7Rh9C60Lgg0Y3Qu9C10LzQtdC90YLQsCDQt9Cw0LrQsNC30LAuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2Mtb3JkZXItaXRlbS1tb2JpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1vcmRlci1pdGVtLW1vYmlsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjT3JkZXJJdGVtTW9iaWxlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RTY1ByaWNlQ2FyZCB7XG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC90LAg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0YHQv9C10YbQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NwZWNpZmljYXRpb25QcmV2aWV3JylcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNwZWNpZmljYXRpb25QcmV2aWV3UmVmPzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dD47XG5cbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3JkZXJJdGVtPzogU2NDYXJ0SXRlbTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQtNC10LnRgdGC0LLQuNGPLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0FjdGlvbnNFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNC40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NPcmRlckl0ZW1Nb2JpbGVDb21wb25lbnR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByZXZpZXdEaWFsb2dTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC40LDQu9C+0LPQvtCy0L7Qs9C+INC+0LrQvdCwINC/0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90L7Qs9C+INC/0YDQvtGB0LzQvtGC0YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJldmlld0RpYWxvZ1NlcnZpY2U6IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC+0LTRg9C60YIg0Y3Qu9C10LzQtdC90YLQsCDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwcm9kdWN0KCk6IFNjUHJvZHVjdCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yZGVySXRlbT8ucHJvZHVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0L7QsdGA0LDQt9C40YLRjCDRgdC/0LXRhtC40YTQuNC60LDRhtC40Y4uXG4gICAgICovXG4gICAgcHVibGljIHNob3dTcGVjaWZpY2F0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5zcGVjaWZpY2F0aW9uUHJldmlld1JlZiA/PyAnJykuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0YHRgdGL0LvQutGDINC90LAg0LjQt9C+0LHRgNCw0LbQtdC90LjQtSDQutCw0YDRgtC+0YfQutC4INGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0INCf0L7Qt9C40YbQuNGPINGC0L7QstCw0YDQsC/Rg9GB0LvRg9Cz0LguXG4gICAgICovXG4gICAgcHVibGljIGdldENhcmRJbWFnZShwcm9kdWN0OiBTY1Byb2R1Y3QpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZUhlbHBlci5nZXRJbWFnZShwcm9kdWN0KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZmxleCBmbGV4LXdyYXAgZ2FwLXgtNCBnYXAteS0yIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci10dWktYmFzZS0wNCBiZy13aGl0ZSBwLTQgc2hhZG93LXNjLTJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3JkZXJJdGVtICYmIHByb2R1Y3Q7IGVsc2Ugc2tlbGV0b25cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrQWN0aW9uc0V2ZW50LmVtaXQoKVwiXG4gICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLmVsbGlwc2lzLXZlcnRpY2FsXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJmbG9hdFwiXG4gICAgICAgICAgICBjbGFzcz1cIiFhYnNvbHV0ZSByaWdodC0wIHRvcC0wICFoaWRkZW5cIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdyb3cgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNpemUtMjAgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrQ2FyZEV2ZW50LmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0Q2FyZEltYWdlKHByb2R1Y3QpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJwcm9kdWN0Lm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucC01XT1cIiFwcm9kdWN0LmltYWdlcz8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBncm93IGZsZXgtd3JhcCBnYXAteC04IHNlbGYtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ3JvdyBiYXNpcy1taW4tY29udGVudCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaHJlZl09XCJocmVmID8/IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBjbGlja0NhcmRFdmVudC5lbWl0KClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IHByb2R1Y3QubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAteS0wLjUgdGV4dC10dWktdGV4dC0wMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ3LTQwXCI+0JDRgNGC0LjQutGD0Ls6IHt7IHByb2R1Y3QuY29kZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctNDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2R1Y3QucGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDQndC+0YDQvNCwINGD0L/QsNC60L7QstC60Lg6IHt7IHByb2R1Y3QucGFjayB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcmRlckl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dTcGVjaWZpY2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID7QodC/0LXRhtC40YTQuNC60LDRhtC40Y88L2FcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzcGVjaWZpY2F0aW9uUHJldmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1wcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1wcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3RhdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbem9vbWFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvbHltb3JwaGV1c091dGxldD1cIm9yZGVySXRlbS5zcGVjaWZpY2F0aW9uSW1nVXJsIGFzIHNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJwcmV2aWV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwib3JkZXJJdGVtLnNwZWNpZmljYXRpb25JbWdVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlQcmV2aWV3QWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2aWV3LmNvbXBsZXRlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90dWktcHJldmlldz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAteS0wLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9kdWN0LmRpc2NvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctNTAgaXRlbXMtY2VudGVyIGdhcC14LTIgZ2FwLXktMC41IHRleHQteHMgdGV4dC10dWktdGV4dC0wMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaW5lLXRocm91Z2hcIj57eyBwcm9kdWN0LmRpc2NvdW50Q29zdFN0cmluZyB9fTwvc3Bhbj4gJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC10dWktc3VjY2Vzcy1maWxsXCI+IC17eyBwcm9kdWN0LmRpc2NvdW50LnBlcmNlbnQgfX0lIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc2NvdW50SGludD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IHByb2R1Y3QuZGlzY291bnQubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvZHVjdC5kaXNjb3VudC5leHBpcmVkQXQgYXMgZXhwaXJlZEF0XCI+0JTQsNGC0LAg0L7QutC+0L3Rh9Cw0L3QuNGPOiB7eyBleHBpcmVkQXQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ3LTUwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLXgtMiBnYXAteS0wLjUgZm9udC1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcHJvZHVjdC5jb3N0UnViU3RyaW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXByb2R1Y3QucHJpY2VJblJ1YlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC14cyB0ZXh0LXR1aS10ZXh0LTAyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHByb2R1Y3QuY29zdFN0cmluZyB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTUwIGZsZXggZmxleC1jb2wgZ2FwLXgtOCBnYXAteS0wLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcmRlckl0ZW0uaGVpZ2h0OyBlbHNlIGxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPtCS0YvRgdC+0YLQsDoge3sgb3JkZXJJdGVtLmhlaWdodCB9fSDQvC48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVuZ3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwib3JkZXJJdGVtLmxlbmd0aFwiPtCU0LvQuNC90LA6IHt7IG9yZGVySXRlbS5sZW5ndGggfX0g0LwuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwib3JkZXJJdGVtLndpZHRoXCI+0KjQuNGA0LjQvdCwOiB7eyBvcmRlckl0ZW0ud2lkdGggfX0g0LwuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWJhc2VsaW5lIGdhcC14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIHRleHQtYm9keS1tLWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg0JrQvtC70LjRh9C10YHRgtCy0L46IDxzcGFuIGNsYXNzPVwid2hpdGVzcGFjZS1ub3dyYXBcIj57eyBvcmRlckl0ZW0ucXVhbnRpdHkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy01MCBmbGV4IGZsZXgtY29sIGdhcC15LTAuNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LWJvZHktbS1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0KHRg9C80LzQsDogPHNwYW4gY2xhc3M9XCJ3aGl0ZXNwYWNlLW5vd3JhcFwiPiB7eyBvcmRlckl0ZW0uZ2V0Q29zdFJ1YlN0cigpIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYy1wcmljZS13YXJlaG91c2Utc3RvY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvZHVjdF09XCJwcm9kdWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnJvbU1haW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjc2tlbGV0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBnYXAtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpemUtMjAgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMlwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ3JvdyBmbGV4LWNvbCBnYXAtMi41IGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtNCB3LWZ1bGwgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMlwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTQgdy0zLzUgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMlwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTQgdy00LzUgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMlwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==