@arsedizioni/ars-utils 18.1.71 → 18.1.73

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.
@@ -1,9 +1,9 @@
1
1
  import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
2
2
  import { FlatTreeControl } from '@angular/cdk/tree';
3
3
  import { NgClass, NgStyle } from '@angular/common';
4
- import { ChangeDetectionStrategy, Component, Injectable, ViewChild, computed, inject, signal } from '@angular/core';
4
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injectable, ViewChild, computed, inject, signal } from '@angular/core';
5
5
  import { MatButtonModule } from '@angular/material/button';
6
- import { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef } from '@angular/material/dialog';
6
+ import { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';
7
7
  import { MatIconModule } from '@angular/material/icon';
8
8
  import { MatProgressBarModule } from '@angular/material/progress-bar';
9
9
  import { MatSidenavModule } from '@angular/material/sidenav';
@@ -146,8 +146,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
146
146
  export class HelpViewerComponent {
147
147
  constructor() {
148
148
  this.unsubscribe = new Subject();
149
+ this.changeDetector = inject(ChangeDetectorRef);
149
150
  this.dialogRef = inject((MatDialogRef));
150
- this.dialogData = inject(MAT_DIALOG_DATA) ?? { id: "1" };
151
+ this.dialogData = inject(MAT_DIALOG_DATA) ?? { indexId: "1" };
151
152
  this.dialogService = inject(DialogService);
152
153
  this.helpService = inject(HelpService);
153
154
  this.breakpointObserver = inject(BreakpointObserver);
@@ -218,6 +219,13 @@ export class HelpViewerComponent {
218
219
  this.unsubscribe.next();
219
220
  this.unsubscribe.complete();
220
221
  }
222
+ ngAfterViewInit() {
223
+ setTimeout(() => {
224
+ this.handleFilterPaneVisibility();
225
+ this.indexPaneClosed = !this.indexPane.opened;
226
+ }, 0);
227
+ this.changeDetector.detectChanges();
228
+ }
221
229
  /**
222
230
  * Adjust view
223
231
  */
@@ -238,7 +246,7 @@ export class HelpViewerComponent {
238
246
  let hb = b[0].clientHeight;
239
247
  if (hb === 0)
240
248
  this.adjustView();
241
- this.height.set(a - (hb + 50));
249
+ this.height.set(a - (hb + 24));
242
250
  }
243
251
  /**
244
252
  * Handle filter pane visibility
@@ -453,14 +461,14 @@ export class HelpViewerComponent {
453
461
  this.getChapter(n.id, n.position + 1);
454
462
  }
455
463
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: HelpViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
456
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: HelpViewerComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [IndexTreeDataSource], viewQueries: [{ propertyName: "indexPane", first: true, predicate: ["indexPane"], descendants: true }], ngImport: i0, template: "<div class=\"help-viewer-fixed\">\r\n <div class=\"help-viewer-header\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"dialog-menu\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Mostra menu\" [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"toggleIndexPane()\" >\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"100\" >\r\n <h2 class=\"mat-dialog-title truncated\">\r\n <div>Guida</div>\r\n </h2>\r\n </div>\r\n <div fxFlex=\"100px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (canGoBack()) {\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"height:5px\">\r\n @if (busy()) {\r\n <mat-progress-bar z-index=\"11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content [ngStyle]=\"{'min-height.px': height()}\" style=\"padding: 0 0 0 24px\">\r\n <mat-sidenav-container [ngStyle]=\"{'height.px': height()}\">\r\n <mat-sidenav #indexPane mode=\"side\" [autoFocus]=\"false\" class=\"helpbrowser-index \">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\" class=\"scroll-auto tree \"\r\n style=\"max-width:310px\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple tree-node-style\"\r\n (click)=\"getChapter(node.id);\"\r\n [ngClass]=\"{'tree-node-activated': indexNode && indexNode.id === node.id}\" [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node tree-node-simple tree-node-style\"\r\n [ngClass]=\"{'tree-node-activated': indexNode && indexNode.id === node.id }\"\r\n (click)=\"getChapter(node.id)\" [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'Apri/chiudi ' + node.name\" class=\"small-icon-button\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content id=\"help-page-container\">\r\n <div [ngStyle]=\"{'height.px': height() }\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"padding: 0 15px;\" (click)=\"gotoChapter($event)\" [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}a.help-link,.help-link>a{text-decoration:none;color:#2a91e0}.help-title-2,.help-title-1{font-weight:600!important}.help-word-hit{font-size:inherit;background-color:#ff0;border:1px solid silver;padding:0 4px}.help-hint{margin:10px;padding:5px 20px;background-color:#fafad2;border-radius:12px}.help-summary{margin:10px;padding:5px 20px;background-color:#e6e6fa;border-radius:12px}.help-img{display:flex;align-items:center;justify-content:center;margin:10px}.help-img-200,.help-img-300,.help-img-400,.help-img-500,.help-img-700,.help-img-800{width:100%}.help-img-200{max-width:200px}.help-img-300{max-width:300px}.help-img-400{max-width:400px}.help-img-500{max-width:500px}.help-img-600{max-width:600px}.help-img-700{max-width:700px}.help-img-800{max-width:800px}.help-filter-box{background-color:#f9fbe7;border-radius:12px;padding:6px;display:inline-block;margin:0 0 8px 10px}.helpbrowser-index{width:320px}.helpbrowser-index>.mat-drawer-inner-container{overflow-x:hidden!important}.tree{overflow-x:hidden}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-simple,.tree-node-simple>div{min-height:36px!important}.tree-node-activated,.tree-node-activated>div{min-height:36px!important;font-weight:700!important}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i6.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i6.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i7.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i7.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i7.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i8.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i8.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i8.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i8.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i8.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
464
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: HelpViewerComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [IndexTreeDataSource], viewQueries: [{ propertyName: "indexPane", first: true, predicate: ["indexPane"], descendants: true }], ngImport: i0, template: "<div class=\"help-viewer-fixed\">\r\n <div class=\"help-viewer-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill >\r\n <div class=\"dialog-menu\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Mostra menu\" [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"toggleIndexPane()\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\" >\r\n <h2 mat-dialog-title>Guida</h2>\r\n </div>\r\n <div fxFlex=\"100px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (canGoBack()) {\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"height:5px\">\r\n @if (busy()) {\r\n <mat-progress-bar z-index=\"11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content [ngStyle]=\"{'min-height.px': height()}\" style=\"padding: 0 0 0 24px\">\r\n <mat-sidenav-container [ngStyle]=\"{'height.px': height()}\">\r\n <mat-sidenav #indexPane mode=\"side\" [autoFocus]=\"false\" class=\"helpbrowser-index \">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\" class=\"scroll-auto tree \"\r\n style=\"max-width:310px\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple tree-node-style\"\r\n (click)=\"getChapter(node.id);\"\r\n [ngClass]=\"{'tree-node-activated': indexNode && indexNode.id === node.id}\" [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node tree-node-simple tree-node-style\"\r\n [ngClass]=\"{'tree-node-activated': indexNode && indexNode.id === node.id }\"\r\n (click)=\"getChapter(node.id)\" [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'Apri/chiudi ' + node.name\" class=\"small-icon-button\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content id=\"help-page-container\">\r\n <div [ngStyle]=\"{'height.px': height() }\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"padding: 0 0 0 24px;\" (click)=\"gotoChapter($event)\" [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.helpbrowser-index{width:320px}.helpbrowser-index>.mat-drawer-inner-container{overflow-x:hidden!important}.tree{overflow-x:hidden}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-simple,.tree-node-simple>div{min-height:36px!important}.tree-node-activated,.tree-node-activated>div{min-height:36px!important;font-weight:700!important}a.help-link,.help-link>a{text-decoration:none;color:#2a91e0}.help-title-2,.help-title-1{font-weight:600!important}.help-word-hit{font-size:inherit;background-color:#ff0;border:1px solid silver;padding:0 4px}.help-hint{margin:10px;padding:5px 20px;background-color:#fafad2;border-radius:12px}.help-summary{margin:10px;padding:5px 20px;background-color:#e6e6fa;border-radius:12px}.help-img{display:flex;align-items:center;justify-content:center;margin:10px}.help-img-200,.help-img-300,.help-img-400,.help-img-500,.help-img-700,.help-img-800{width:100%}.help-img-200{max-width:200px}.help-img-300{max-width:300px}.help-img-400{max-width:400px}.help-img-500{max-width:500px}.help-img-600{max-width:600px}.help-img-700{max-width:700px}.help-img-800{max-width:800px}.help-filter-box{background-color:#f9fbe7;border-radius:12px;padding:6px;display:inline-block;margin:0 0 8px 10px}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i6.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i6.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i7.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i7.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i7.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i8.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i8.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i8.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i8.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i8.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
457
465
  }
458
466
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: HelpViewerComponent, decorators: [{
459
467
  type: Component,
460
- args: [{ host: { 'Bind': SystemUtils.generateUUID() }, changeDetection: ChangeDetectionStrategy.OnPush, providers: [IndexTreeDataSource], standalone: true, imports: [FlexModule, MatButtonModule, MatTooltipModule, MatIconModule, MatProgressBarModule, MatDialogContent,
461
- NgStyle, ExtendedModule, MatSidenavModule, MatTreeModule, NgClass, SafeHtmlPipe], template: "<div class=\"help-viewer-fixed\">\r\n <div class=\"help-viewer-header\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"dialog-menu\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Mostra menu\" [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"toggleIndexPane()\" >\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"100\" >\r\n <h2 class=\"mat-dialog-title truncated\">\r\n <div>Guida</div>\r\n </h2>\r\n </div>\r\n <div fxFlex=\"100px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (canGoBack()) {\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"height:5px\">\r\n @if (busy()) {\r\n <mat-progress-bar z-index=\"11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content [ngStyle]=\"{'min-height.px': height()}\" style=\"padding: 0 0 0 24px\">\r\n <mat-sidenav-container [ngStyle]=\"{'height.px': height()}\">\r\n <mat-sidenav #indexPane mode=\"side\" [autoFocus]=\"false\" class=\"helpbrowser-index \">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\" class=\"scroll-auto tree \"\r\n style=\"max-width:310px\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple tree-node-style\"\r\n (click)=\"getChapter(node.id);\"\r\n [ngClass]=\"{'tree-node-activated': indexNode && indexNode.id === node.id}\" [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node tree-node-simple tree-node-style\"\r\n [ngClass]=\"{'tree-node-activated': indexNode && indexNode.id === node.id }\"\r\n (click)=\"getChapter(node.id)\" [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'Apri/chiudi ' + node.name\" class=\"small-icon-button\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content id=\"help-page-container\">\r\n <div [ngStyle]=\"{'height.px': height() }\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"padding: 0 15px;\" (click)=\"gotoChapter($event)\" [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}a.help-link,.help-link>a{text-decoration:none;color:#2a91e0}.help-title-2,.help-title-1{font-weight:600!important}.help-word-hit{font-size:inherit;background-color:#ff0;border:1px solid silver;padding:0 4px}.help-hint{margin:10px;padding:5px 20px;background-color:#fafad2;border-radius:12px}.help-summary{margin:10px;padding:5px 20px;background-color:#e6e6fa;border-radius:12px}.help-img{display:flex;align-items:center;justify-content:center;margin:10px}.help-img-200,.help-img-300,.help-img-400,.help-img-500,.help-img-700,.help-img-800{width:100%}.help-img-200{max-width:200px}.help-img-300{max-width:300px}.help-img-400{max-width:400px}.help-img-500{max-width:500px}.help-img-600{max-width:600px}.help-img-700{max-width:700px}.help-img-800{max-width:800px}.help-filter-box{background-color:#f9fbe7;border-radius:12px;padding:6px;display:inline-block;margin:0 0 8px 10px}.helpbrowser-index{width:320px}.helpbrowser-index>.mat-drawer-inner-container{overflow-x:hidden!important}.tree{overflow-x:hidden}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-simple,.tree-node-simple>div{min-height:36px!important}.tree-node-activated,.tree-node-activated>div{min-height:36px!important;font-weight:700!important}\n"] }]
468
+ args: [{ host: { 'Bind': SystemUtils.generateUUID() }, changeDetection: ChangeDetectionStrategy.OnPush, providers: [IndexTreeDataSource], standalone: true, imports: [FlexModule, MatButtonModule, MatTooltipModule, MatIconModule, MatProgressBarModule, MatDialogTitle, MatDialogContent,
469
+ NgStyle, ExtendedModule, MatSidenavModule, MatTreeModule, NgClass, SafeHtmlPipe], template: "<div class=\"help-viewer-fixed\">\r\n <div class=\"help-viewer-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill >\r\n <div class=\"dialog-menu\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Mostra menu\" [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"toggleIndexPane()\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\" >\r\n <h2 mat-dialog-title>Guida</h2>\r\n </div>\r\n <div fxFlex=\"100px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (canGoBack()) {\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"height:5px\">\r\n @if (busy()) {\r\n <mat-progress-bar z-index=\"11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content [ngStyle]=\"{'min-height.px': height()}\" style=\"padding: 0 0 0 24px\">\r\n <mat-sidenav-container [ngStyle]=\"{'height.px': height()}\">\r\n <mat-sidenav #indexPane mode=\"side\" [autoFocus]=\"false\" class=\"helpbrowser-index \">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\" class=\"scroll-auto tree \"\r\n style=\"max-width:310px\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple tree-node-style\"\r\n (click)=\"getChapter(node.id);\"\r\n [ngClass]=\"{'tree-node-activated': indexNode && indexNode.id === node.id}\" [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node tree-node-simple tree-node-style\"\r\n [ngClass]=\"{'tree-node-activated': indexNode && indexNode.id === node.id }\"\r\n (click)=\"getChapter(node.id)\" [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'Apri/chiudi ' + node.name\" class=\"small-icon-button\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content id=\"help-page-container\">\r\n <div [ngStyle]=\"{'height.px': height() }\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"padding: 0 0 0 24px;\" (click)=\"gotoChapter($event)\" [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.helpbrowser-index{width:320px}.helpbrowser-index>.mat-drawer-inner-container{overflow-x:hidden!important}.tree{overflow-x:hidden}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-simple,.tree-node-simple>div{min-height:36px!important}.tree-node-activated,.tree-node-activated>div{min-height:36px!important;font-weight:700!important}a.help-link,.help-link>a{text-decoration:none;color:#2a91e0}.help-title-2,.help-title-1{font-weight:600!important}.help-word-hit{font-size:inherit;background-color:#ff0;border:1px solid silver;padding:0 4px}.help-hint{margin:10px;padding:5px 20px;background-color:#fafad2;border-radius:12px}.help-summary{margin:10px;padding:5px 20px;background-color:#e6e6fa;border-radius:12px}.help-img{display:flex;align-items:center;justify-content:center;margin:10px}.help-img-200,.help-img-300,.help-img-400,.help-img-500,.help-img-700,.help-img-800{width:100%}.help-img-200{max-width:200px}.help-img-300{max-width:300px}.help-img-400{max-width:400px}.help-img-500{max-width:500px}.help-img-600{max-width:600px}.help-img-700{max-width:700px}.help-img-800{max-width:800px}.help-filter-box{background-color:#f9fbe7;border-radius:12px;padding:6px;display:inline-block;margin:0 0 8px 10px}\n"] }]
462
470
  }], propDecorators: { indexPane: [{
463
471
  type: ViewChild,
464
472
  args: ['indexPane']
465
473
  }] } });
466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2hlbHAvY29tcG9uZW50cy9oZWxwLXZpZXdlci9oZWxwLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvaGVscC9jb21wb25lbnRzL2hlbHAtdmlld2VyL2hlbHAtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBNkIsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9JLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7OztBQU0xRCxNQUFNLE9BQU8sU0FBUztDQU1yQjtBQUVELE1BQU0sT0FBTyxTQUFVLFNBQVEsU0FBUztJQUl0QyxZQUFZLElBQWUsRUFBRSxLQUFhO1FBQ3hDLEtBQUssRUFBRSxDQUFDO1FBRVIsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsT0FBTztRQUNQLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFHRCxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRUUsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFjLEVBQUUsQ0FBQyxDQUFDO0tBZ0duRDtJQTlGQyxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLElBQWlCO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLElBQWUsRUFBRSxFQUFVO1FBQ2xDLElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEMsSUFBSSxJQUFJO1lBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O1lBQ2hDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDZCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNoQixDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDaEIsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLEVBQUU7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ3BCLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsRUFBVTtRQUNuQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDYixDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLElBQWU7UUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0IsQ0FBQzs7WUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsRUFBVSxFQUFFLElBQVk7UUFDakMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNOLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OEdBaEdVLG1CQUFtQjtrSEFBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVOztBQThHWCxNQUFNLE9BQU8sbUJBQW1CO0lBVmhDO1FBYVUsZ0JBQVcsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNqRCxjQUFTLEdBQUcsTUFBTSxDQUFDLENBQUEsWUFBaUMsQ0FBQSxDQUFDLENBQUM7UUFDcEQsZUFBVSxHQUF5QixNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDNUUsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsZ0JBQVcsR0FBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakMsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEQsU0FBSSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM5QixTQUFJLEdBQUcsTUFBTSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQzlCLFlBQU8sR0FBVyxJQUFJLENBQUM7UUFDdkIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDL0IsY0FBUyxHQUFjLElBQUksQ0FBQztRQUM5QixZQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLGNBQVMsR0FBb0IsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO1FBRVEsV0FBTSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLFNBQUksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUszQzs7V0FFRztRQUNLLFlBQU8sR0FBUSxJQUFJLENBQUM7UUFDcEIsZ0JBQVcsR0FBRyxDQUFDLElBQWUsRUFBMkIsRUFBRSxDQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hCLGFBQVEsR0FBRyxDQUFDLElBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMzQyxpQkFBWSxHQUFHLENBQUMsSUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xELGFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxLQUFnQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQzdELGdCQUFXLEdBQUcsQ0FBQyxJQUFlLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDekQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDO0tBNFRIO0lBMVRDLFFBQVE7UUFFTix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGdCQUFnQixDQUN2QyxJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksZUFBZSxDQUNwQyxJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQXFCLENBQ3ZDLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxhQUFhLENBQ25CLENBQUM7UUFFRix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO2FBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVsRCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGtCQUFrQjthQUNwQixPQUFPLENBQUM7WUFDUCxXQUFXLENBQUMsTUFBTTtZQUNsQixXQUFXLENBQUMsS0FBSztZQUNqQixXQUFXLENBQUMsTUFBTTtZQUNsQixXQUFXLENBQUMsS0FBSztZQUNqQixXQUFXLENBQUMsTUFBTTtTQUNuQixDQUFDO2FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDakMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7Z0JBQ3BDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFHTCw4QkFBOEI7UUFDOUIsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7YUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxjQUFjO1lBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVU7UUFDUixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVU7UUFDUix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDM0IsSUFBSSxFQUFFLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBR0Q7O0lBRUE7SUFDUSwwQkFBMEI7UUFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ08sZUFBZTtRQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFHRDs7T0FFRztJQUNPLEtBQUs7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNRLE1BQU07UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVzthQUNiLE1BQU0sRUFBRTthQUNSLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUM7WUFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNRLFdBQVcsQ0FBQyxLQUFVO1FBQy9CLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQUssR0FBRztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3BELElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ3JDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNiLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDYixDQUFDLEVBQUUsQ0FBQztZQUNOLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxFQUFFO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssVUFBVSxDQUFDLEVBQVU7UUFDM0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLElBQUksSUFBSTtvQkFBRSxPQUFPLElBQUksQ0FBQztnQkFDdEIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FDckIsV0FBVyxDQUFDLGNBQWMsQ0FDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQzFCLElBQUksRUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDbEIsQ0FDRixDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMxQiwyQkFBMkI7Z0JBQzNCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUM5QixPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNULElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUNyQixXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ25FLENBQUM7b0JBQ0YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ2YsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDUSxVQUFVLENBQUMsRUFBVSxFQUFFLFdBQW1CLENBQUM7UUFDcEQsMEJBQTBCO1FBQzFCLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDYixNQUFNLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztpQkFDNUIsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUNmLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztvQkFDbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDZixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO29CQUNwRCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFFBQVE7NEJBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUMxRSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDNUIsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO3dCQUMxQyxJQUFJLEtBQUssRUFBRSxDQUFDOzRCQUNWLGdCQUFnQjs0QkFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUNyQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzs0QkFDM0IscUJBQXFCOzRCQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDdEMsQ0FBQztvQkFDSCxDQUFDO29CQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN2QixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLDJCQUEyQjtZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDUSxZQUFZLENBQUMsTUFBYyxFQUFFLFdBQW1CLENBQUM7UUFDMUQscUJBQXFCO1FBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxzQkFBc0I7WUFDdEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzVELElBQUksSUFBSTtvQkFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsZ0JBQWdCO1lBQ2hCLElBQUksUUFBUSxHQUFHLENBQUM7Z0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7O2dCQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRDs7O09BR0c7SUFDUSxXQUFXO1FBQ3BCLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7O09BR0c7SUFDUSxXQUFXLENBQUMsUUFBZ0I7UUFDckMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzFELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ1EsSUFBSTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3ZELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDOzhHQTFWVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw4RUFUZCxXQUFXLENBQUMsWUFBWSxFQUFFLGlCQUkvQixDQUFDLG1CQUFtQixDQUFDLGtJQzNKbEMsKzRIQTBFTSxpc0lEbUZNLFVBQVUsK2hHQUFFLGVBQWUsMklBQUUsZ0JBQWdCLDRUQUFFLGFBQWEsbUxBQUUsb0JBQW9CLHlOQUFFLGdCQUFnQix5R0FDNUcsT0FBTywwRUFBRSxjQUFjLHFpQ0FBRSxnQkFBZ0IsMFlBQUUsYUFBYSxxb0JBQUUsT0FBTywrRUFBRSxZQUFZOzsyRkFFdEUsbUJBQW1CO2tCQVYvQixTQUFTOzJCQUNGLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxtQkFHM0IsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLG1CQUFtQixDQUFDLGNBQ3BCLElBQUksV0FDUCxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQjt3QkFDNUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQzs4QkFHMUQsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7IE5nQ2xhc3MsIE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2lnbmFsLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xyXG5pbXBvcnQgeyBNYXRTaWRlbmF2LCBNYXRTaWRlbmF2TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyLCBNYXRUcmVlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IFNhZmVIdG1sUGlwZSwgU3lzdGVtVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aSc7XHJcbmltcG9ydCB7IEV4dGVuZGVkTW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2V4dGVuZGVkJztcclxuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dC9mbGV4JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tRXZlbnQsIG9mIGFzIG9ic2VydmFibGVPZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSGVscFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oZWxwLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIZWxwVmlld2VyRGlhbG9nRGF0YSB7XHJcbiAgaW5kZXhJZD86IHN0cmluZyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJbmRleEluZm8ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgcGFyZW50PzogSW5kZXhJbmZvIHwgbnVsbDtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgaXRlbXNDb3VudD86IG51bWJlciB8IG51bGw7XHJcbiAgc3ViRm9sZGVycz86IEluZGV4SW5mb1tdIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEluZGV4Tm9kZSBleHRlbmRzIEluZGV4SW5mbyB7XHJcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcclxuICBsZXZlbDogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihpdGVtOiBJbmRleEluZm8sIGxldmVsOiBudW1iZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgLy8gRmxhdHRlbmVkIGltcGxlbWVudGF0aW9uXHJcbiAgICB0aGlzLmV4cGFuZGFibGUgPSBpdGVtLnN1YkZvbGRlcnMgJiYgaXRlbS5zdWJGb2xkZXJzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XHJcblxyXG4gICAgLy8gRGF0YVxyXG4gICAgdGhpcy5pZCA9IGl0ZW0uaWQ7XHJcbiAgICB0aGlzLm5hbWUgPSBpdGVtLm5hbWU7XHJcbiAgICB0aGlzLml0ZW1zQ291bnQgPSBpdGVtLml0ZW1zQ291bnQ7XHJcbiAgICB0aGlzLnBhcmVudCA9IGl0ZW0ucGFyZW50O1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSW5kZXhUcmVlRGF0YVNvdXJjZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW5kZXhJbmZvW10+KFtdKTtcclxuXHJcbiAgZ2V0IGRhdGEoKTogSW5kZXhJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YUNoYW5nZS52YWx1ZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsemllIHRoZSBkYXRhIHNvdXJjZVxyXG4gICAqIEBwYXJhbSBkYXRhIDogZGF0YVxyXG4gICAqL1xyXG4gIGluaXRpYWxpemUoZGF0YTogSW5kZXhJbmZvW10pIHtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZCBhIG5vZGUgYnkgaWQgcmVjdXJzaXZlbHlcclxuICAgKiBAcGFyYW0gbm9kZTogdGhlIHNvdXJjZSBub2RlXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIGlkIHRvIHNlYXJjaCBmb3JcclxuICAgKi9cclxuICBmaW5kTm9kZShub2RlOiBJbmRleEluZm8sIGlkOiBzdHJpbmcpOiBJbmRleEluZm8ge1xyXG4gICAgbGV0IGNoaWxkcmVuO1xyXG4gICAgaWYgKG5vZGUgJiYgbm9kZS5pZCA9PT0gaWQpIHJldHVybiBub2RlO1xyXG4gICAgaWYgKG5vZGUpIGNoaWxkcmVuID0gbm9kZS5zdWJGb2xkZXJzO1xyXG4gICAgZWxzZSBjaGlsZHJlbiA9IHRoaXMuZGF0YTtcclxuICAgIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBsZXQgX24gPSBudWxsO1xyXG4gICAgICBjaGlsZHJlbi5zb21lKG4gPT4ge1xyXG4gICAgICAgIG4ucGFyZW50ID0gbm9kZTtcclxuICAgICAgICBfbiA9IHRoaXMuZmluZE5vZGUobiwgaWQpO1xyXG4gICAgICAgIGlmIChfbikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIF9uO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYSBub2RlXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIG5vZGUgaWQgdG8gcmVtb3ZlXHJcbiAgICovXHJcbiAgcmVtb3ZlTm9kZShpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuZmluZE5vZGUobnVsbCwgaWQpO1xyXG4gICAgaWYgKCFuKSByZXR1cm47XHJcbiAgICBpZiAobi5wYXJlbnQpIHtcclxuICAgICAgbGV0IGkgPSBTeXN0ZW1VdGlscy5hcnJheUZpbmRJbmRleEJ5S2V5KG4ucGFyZW50LnN1YkZvbGRlcnMsICdpZCcsIGlkKTtcclxuICAgICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgICAgbi5wYXJlbnQuc3ViRm9sZGVycy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgbi5wYXJlbnQuaXRlbXNDb3VudC0tO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaSA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEluZGV4QnlLZXkodGhpcy5kYXRhLCAnaWQnLCBpZCk7XHJcbiAgICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuZGF0YS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zZXJ0IGEgbmV3IG5vZGVcclxuICAgKiBAcGFyYW0gbm9kZSA6IHRoZSBuZXcgbm9kZVxyXG4gICAqL1xyXG4gIGluc2VydE5vZGUobm9kZTogSW5kZXhJbmZvKSB7XHJcbiAgICBpZiAobm9kZS5wYXJlbnQpIHtcclxuICAgICAgbm9kZS5wYXJlbnQuc3ViRm9sZGVycy51bnNoaWZ0KG5vZGUpO1xyXG4gICAgICBub2RlLnBhcmVudC5pdGVtc0NvdW50Kys7XHJcbiAgICB9IGVsc2UgdGhpcy5kYXRhLnVuc2hpZnQobm9kZSk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbmFtZSBhIG5vZGVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgbm9kZSBpZFxyXG4gICAqIEBwYXJhbSBuYW1lIDogdGhlIG5ldyBub2RlIG5hbWVcclxuICAgKi9cclxuICByZW5hbWVOb2RlKGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xyXG4gICAgbGV0IG4gPSB0aGlzLmZpbmROb2RlKG51bGwsIGlkKTtcclxuICAgIGlmIChuKSB7XHJcbiAgICAgIG4ubmFtZSA9IG5hbWU7XHJcbiAgICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgZGF0YVxyXG4gICAqL1xyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaGVscC12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2hlbHAtdmlld2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbSW5kZXhUcmVlRGF0YVNvdXJjZV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbRmxleE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRQcm9ncmVzc0Jhck1vZHVsZSwgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIE5nU3R5bGUsIEV4dGVuZGVkTW9kdWxlLCBNYXRTaWRlbmF2TW9kdWxlLCBNYXRUcmVlTW9kdWxlLCBOZ0NsYXNzLCBTYWZlSHRtbFBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIZWxwVmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoJ2luZGV4UGFuZScpIGluZGV4UGFuZSE6IE1hdFNpZGVuYXY7XHJcblxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxIZWxwVmlld2VyQ29tcG9uZW50Pik7XHJcbiAgcHJvdGVjdGVkIGRpYWxvZ0RhdGE6IEhlbHBWaWV3ZXJEaWFsb2dEYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgPz8geyBpZDogXCIxXCIgfTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBoZWxwU2VydmljZSA9ICBpbmplY3QoSGVscFNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCBicmVha3BvaW50T2JzZXJ2ZXIgPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcclxuICBwcm90ZWN0ZWQgYnVzeSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIHBhZ2UgPSBzaWduYWw8c3RyaW5nPihudWxsKTtcclxuICBwcml2YXRlIGluZGV4SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpbmRleFBhbmVDbG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgaW5kZXhOb2RlOiBJbmRleEluZm8gPSBudWxsO1xyXG4gIHByaXZhdGUgaGlzdG9yeSA9IHNpZ25hbChbXSk7XHJcbiAgcHJvdGVjdGVkIGNhbkdvQmFjazogU2lnbmFsPGJvb2xlYW4+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlzdG9yeSgpPy5sZW5ndGggPiAxO1xyXG4gIH0pXHJcblxyXG4gIHByb3RlY3RlZCBoZWlnaHQgPSBzaWduYWw8bnVtYmVyPigtMSk7XHJcbiAgcHJpdmF0ZSB0cmVlID0gaW5qZWN0KEluZGV4VHJlZURhdGFTb3VyY2UpO1xyXG4gIHByaXZhdGUgdHJlZUZsYXR0ZW5lcjogTWF0VHJlZUZsYXR0ZW5lcjxJbmRleEluZm8sIEluZGV4Tm9kZT47XHJcbiAgcHJvdGVjdGVkIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8SW5kZXhOb2RlPjtcclxuICBwcm90ZWN0ZWQgdHJlZURhdGE6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxJbmRleEluZm8sIEluZGV4Tm9kZT47XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hbmFnZSBmbGF0IHRyZWUgdmlld1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZm9sZGVyczogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIGdldENoaWxkcmVuID0gKG5vZGU6IEluZGV4SW5mbyk6IE9ic2VydmFibGU8SW5kZXhJbmZvW10+ID0+XHJcbiAgICBvYnNlcnZhYmxlT2Yobm9kZS5zdWJGb2xkZXJzKTtcclxuICBwcml2YXRlIGdldExldmVsID0gKG5vZGU6IEluZGV4Tm9kZSkgPT4gbm9kZS5sZXZlbDtcclxuICBwcml2YXRlIGlzRXhwYW5kYWJsZSA9IChub2RlOiBJbmRleE5vZGUpID0+IG5vZGUuZXhwYW5kYWJsZTtcclxuICBwcm90ZWN0ZWQgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBfbm9kZTogSW5kZXhOb2RlKSA9PiBfbm9kZS5leHBhbmRhYmxlO1xyXG4gIHByb3RlY3RlZCB0cmFuc2Zvcm1lciA9IChpdGVtOiBJbmRleEluZm8sIGxldmVsOiBudW1iZXIpID0+IHtcclxuICAgIHJldHVybiBuZXcgSW5kZXhOb2RlKGl0ZW0sIGxldmVsKTtcclxuICB9O1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBTZXR1cCB0cmVlIHN0cnVjdHVyZVxyXG4gICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXHJcbiAgICAgIHRoaXMudHJhbnNmb3JtZXIsXHJcbiAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgIHRoaXMuaXNFeHBhbmRhYmxlLFxyXG4gICAgICB0aGlzLmdldENoaWxkcmVuXHJcbiAgICApO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8SW5kZXhOb2RlPihcclxuICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgdGhpcy5pc0V4cGFuZGFibGVcclxuICAgICk7XHJcbiAgICB0aGlzLnRyZWVEYXRhID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZShcclxuICAgICAgdGhpcy50cmVlQ29udHJvbCxcclxuICAgICAgdGhpcy50cmVlRmxhdHRlbmVyXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFN1YnNjcmliZSBkYXRhIGNoYW5nZVxyXG4gICAgdGhpcy50cmVlLmRhdGFDaGFuZ2VcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4gKHRoaXMudHJlZURhdGEuZGF0YSA9IGRhdGEpKTtcclxuXHJcbiAgICAvLyBPYnNlcnZlIGxheW91dCBjaGFuZ2VzXHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclxyXG4gICAgICAub2JzZXJ2ZShbXHJcbiAgICAgICAgQnJlYWtwb2ludHMuWFNtYWxsLFxyXG4gICAgICAgIEJyZWFrcG9pbnRzLlNtYWxsLFxyXG4gICAgICAgIEJyZWFrcG9pbnRzLk1lZGl1bSxcclxuICAgICAgICBCcmVha3BvaW50cy5MYXJnZSxcclxuICAgICAgICBCcmVha3BvaW50cy5YTGFyZ2UsXHJcbiAgICAgIF0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IHF1ZXJ5IG9mIE9iamVjdC5rZXlzKHJlc3VsdC5icmVha3BvaW50cykpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuYnJlYWtwb2ludHNbcXVlcnldKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAvLyBSZWFjdCB0byB3aW5kb3cgc2l6ZSBjaGFuZ2VcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAvLyBVcGRhdGUgdmlld1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuYWRqdXN0VmlldygpO1xyXG5cclxuICAgIHRoaXMuZ2V0VG9jKCk7XHJcblxyXG4gICAgdGhpcy5pbmRleElkID0gdGhpcy5kaWFsb2dEYXRhLmluZGV4SWQ7XHJcbiAgICBpZiAodGhpcy5pbmRleElkKSB7XHJcbiAgICAgIHRoaXMuZ2V0Q2hhcHRlcih0aGlzLmluZGV4SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkanVzdCB2aWV3XHJcbiAgICovXHJcbiAgYWRqdXN0VmlldygpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdmlld1xyXG4gICAqL1xyXG4gIHVwZGF0ZVZpZXcoKTogdm9pZCB7XHJcbiAgICAvLyBVcGRhdGUgcm91dGVyIGhlaWdodFxyXG4gICAgbGV0IGEgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICBsZXQgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hlbHAtdmlld2VyLWZpeGVkJyk7XHJcbiAgICBpZiAoIWEgfHwgIWIgfHwgYSA9PT0gMCB8fCBiLmxlbmd0aCA9PT0gMCkgdGhpcy5hZGp1c3RWaWV3KCk7XHJcbiAgICBsZXQgaGIgPSBiWzBdLmNsaWVudEhlaWdodDtcclxuICAgIGlmIChoYiA9PT0gMCkgdGhpcy5hZGp1c3RWaWV3KCk7XHJcbiAgICB0aGlzLmhlaWdodC5zZXQoYSAtIChoYiArIDUwKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiogSGFuZGxlIGZpbHRlciBwYW5lIHZpc2liaWxpdHlcclxuKi9cclxuICBwcml2YXRlIGhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCkge1xyXG4gICAgaWYgKHRoaXMuaW5kZXhQYW5lKSB7XHJcbiAgICAgIGlmICh0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuWFNtYWxsKSB8fFxyXG4gICAgICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5TbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuTWVkaXVtKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmluZGV4UGFuZS5vcGVuZWQpIHtcclxuICAgICAgICAgIHRoaXMuaW5kZXhQYW5lLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5pbmRleFBhbmUub3BlbmVkICYmICF0aGlzLmluZGV4UGFuZUNsb3NlZCkge1xyXG4gICAgICAgICAgdGhpcy5pbmRleFBhbmUub3BlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBoaWRlIGluZGV4IHBhbmUgbWFudWFsbHlcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgdG9nZ2xlSW5kZXhQYW5lKCkge1xyXG4gICAgdGhpcy5pbmRleFBhbmVDbG9zZWQgPSAhdGhpcy5pbmRleFBhbmVDbG9zZWQ7XHJcbiAgICB0aGlzLmluZGV4UGFuZT8udG9nZ2xlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgZGlhbG9nXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgdG9jXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkICBnZXRUb2MoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1c3kuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5oZWxwU2VydmljZVxyXG4gICAgICAuZ2V0VG9jKClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvbGRlcnMgPSByLnZhbHVlLnN1YkZvbGRlcnM7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZS5pbml0aWFsaXplKHIudmFsdWUuc3ViRm9sZGVycyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5idXN5LnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlYWN0IHRvIGNsaWNrIGV2ZW50IGFuZCBmaW5kIG5ldyBoZWxwIHRhcmdldCB0byBnbyB0b1xyXG4gICAqIEBwYXJhbSBldmVudCA6IHRoZSBjbGljayBldmVudFxyXG4gICAqIEByZXR1cm5zIDogYWx3YXlzIGZhbHNlLCB0byBzdG9wIG5hdmlnYXRpb25cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgIGdvdG9DaGFwdGVyKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChldmVudC5zcmNFbGVtZW50Lm5vZGVOYW1lICE9PSAnQScpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCB0YWcgPSBldmVudC5zcmNFbGVtZW50Lm91dGVySFRNTDtcclxuICAgIGxldCBpZCA9ICcnO1xyXG4gICAgbGV0IHAgPSB0YWcuaW5kZXhPZignaGVscC10YXJnZXQ9XCInKTtcclxuICAgIGlmIChwICE9PSAtMSkge1xyXG4gICAgICBwICs9IDEzO1xyXG4gICAgICB3aGlsZSAodGFnW3BdICE9PSAnXCInKSB7XHJcbiAgICAgICAgaWQgKz0gdGFnW3BdO1xyXG4gICAgICAgIHArKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlkKSB0aGlzLmdldENoYXB0ZXIoaWQpO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZCBhIG5vZGUgYnkgaWRcclxuICAgKiBAcGFyYW0gaWQgOiBmb2xkZXIgaWRcclxuICAgKiBAcmV0dXJuczogdGhlIGZvbGRlciBpbmZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmaW5kRm9sZGVyKGlkOiBzdHJpbmcpOiBJbmRleEluZm8ge1xyXG4gICAgbGV0IG5vZGUgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuZm9sZGVycykge1xyXG4gICAgICB0aGlzLmZvbGRlcnMuc29tZSgobjogYW55KSA9PiB7XHJcbiAgICAgICAgbm9kZSA9IHRoaXMudHJlZS5maW5kTm9kZShuLCBpZCk7XHJcbiAgICAgICAgaWYgKG5vZGUpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm9kZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cGFuZCBjdXJyZW50IGZvZGxlciBub2RlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBleHBhbmRDdXJyZW50Rm9sZGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5kZXhOb2RlKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKFxyXG4gICAgICAgIFN5c3RlbVV0aWxzLmFycmF5RmluZEJ5S2V5KFxyXG4gICAgICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMsXHJcbiAgICAgICAgICAnaWQnLFxyXG4gICAgICAgICAgdGhpcy5pbmRleE5vZGUuaWRcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmluZGV4Tm9kZS5wYXJlbnQpIHtcclxuICAgICAgICAvLyBBcHBseSBwcmV2aW91cyBzZWxlY3Rpb25cclxuICAgICAgICBsZXQgbiA9IHRoaXMuaW5kZXhOb2RlLnBhcmVudDtcclxuICAgICAgICB3aGlsZSAobikge1xyXG4gICAgICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQoXHJcbiAgICAgICAgICAgIFN5c3RlbVV0aWxzLmFycmF5RmluZEJ5S2V5KHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLCAnaWQnLCBuLmlkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIG4gPSBuLnBhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGEgbmV3IGNoYXB0ZXJcclxuICAgKiBAcGFyYW0gaWQgdGhlIGNoYXB0ZXIgaWQjYW5jaG9yXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIDogdGhlIHBvc2l0aW9uIHRvIHNjcm9sbCB0b1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCAgZ2V0Q2hhcHRlcihpZDogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyID0gMCk6IHZvaWQge1xyXG4gICAgLy8gRGV0ZWN0IGFuY2hvciBpZiBleGlzdHNcclxuICAgIGxldCBhbmNob3I6IHN0cmluZyA9IG51bGw7XHJcbiAgICBsZXQgcCA9IGlkLmluZGV4T2YoJyMnKTtcclxuICAgIGlmIChwICE9PSAtMSkge1xyXG4gICAgICBhbmNob3IgPSBpZC5zdWJzdHJpbmcocCArIDEpO1xyXG4gICAgICBpZCA9IGlkLnN1YnN0cmluZygwLCBwKTtcclxuICAgIH1cclxuICAgIGlmIChpZCAhPT0gJy4nKSB7XHJcbiAgICAgIHRoaXMuYnVzeS5zZXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuaGVscFNlcnZpY2UuZ2V0Q2hhcHRlcihpZClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKFwiQ2FwaXRvbG8gbm9uIHRyb3ZhdG8uXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghcG9zaXRpb24pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkoKS5wdXNoKHsgaWQ6IHRoaXMuaW5kZXhJZCwgcG9zaXRpb246IHRoaXMuZ2V0UG9zaXRpb24oKSB9KTtcclxuICAgICAgICAgICAgICB0aGlzLmluZGV4SWQgPSBpZDtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2Uuc2V0KHIudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICAgICAgZm91bmQgPSByLnZhbHVlLmNoYXB0ZXI/Lm5hbWU/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZm9sZGVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4Tm9kZSA9IHRoaXMuZmluZEZvbGRlcihpZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZEN1cnJlbnRGb2xkZXIoKTtcclxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBwb3NpdGlvbmluZ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb3RvUG9zaXRpb24oYW5jaG9yLCBwb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRDaGFwdGVyKFwiMVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzeS5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCFwb3NpdGlvbilcclxuICAgICAgICB0aGlzLmhpc3RvcnkoKS5wdXNoKHsgaWQ6IHRoaXMuaW5kZXhJZCwgcG9zaXRpb246IHRoaXMuZ2V0UG9zaXRpb24oKSB9KTtcclxuICAgICAgLy8gTW92ZSBvbiB0aGUgc2FtZSBjaGFwdGVyXHJcbiAgICAgIHRoaXMuZ290b1Bvc2l0aW9uKGFuY2hvciwgcG9zaXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR290byBwb3NpdGlvblxyXG4gICAqIEBwYXJhbSBhbmNob3IgdGhlIGFuY2hvciB0byBnbyB0b1xyXG4gICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgb2Zmc2V0IHRvIGdvIHRvXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkICBnb3RvUG9zaXRpb24oYW5jaG9yOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIgPSAwKTogdm9pZCB7XHJcbiAgICAvLyBIYW5kbGUgcG9zaXRpb25pbmdcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyBIYW5kbGUgYW5jaG9yIGZpcnN0XHJcbiAgICAgIGlmIChhbmNob3IpIHtcclxuICAgICAgICBsZXQgZWxtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGFuY2hvci50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICBpZiAoZWxtcykgcG9zaXRpb24gPSBlbG1zWzBdLm9mZnNldFRvcDtcclxuICAgICAgfVxyXG4gICAgICAvLyBUaGVuIHBvc2l0aW9uXHJcbiAgICAgIGlmIChwb3NpdGlvbiA+IDApIHRoaXMuc2V0UG9zaXRpb24ocG9zaXRpb24gLSAxKTtcclxuICAgICAgZWxzZSB0aGlzLnNldFBvc2l0aW9uKDApO1xyXG4gICAgfSwgNTApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHNjcm9sbCBwb3NpdGlvblxyXG4gICAqIEByZXR1cm5zOiB0aGUgbmV3IHNjcm9sbCB0b3BcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgIGdldFBvc2l0aW9uKCk6IG51bWJlciB7XHJcbiAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWxwLXBhZ2UtY29udGFpbmVyJyk7XHJcbiAgICBpZiAoZWxlbSkge1xyXG4gICAgICByZXR1cm4gZWxlbS5zY3JvbGxUb3A7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBzY3JvbGwgcG9zaXRpb25cclxuICAgKiBAcGFyYW0gcG9zaXRpb24gOiB0aGUgcG9zaXRpb24gdG8gZ28gdG9cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgIHNldFBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHAtcGFnZS1jb250YWluZXInKTtcclxuICAgIGlmIChlbGVtKSB7XHJcbiAgICAgIGVsZW0uc2Nyb2xsVG8oMCwgcG9zaXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gYmFja1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCAgYmFjaygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5oaXN0b3J5IHx8IHRoaXMuaGlzdG9yeS5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgIGxldCBuID0gdGhpcy5oaXN0b3J5KCkucG9wKCk7XHJcbiAgICB0aGlzLmdldENoYXB0ZXIobi5pZCwgbi5wb3NpdGlvbiArIDEpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJoZWxwLXZpZXdlci1maXhlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWxwLXZpZXdlci1oZWFkZXJcIj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLW1lbnVcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIk1vc3RyYSBtZW51XCIgW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGluZGljZSdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUluZGV4UGFuZSgpXCIgPlxyXG4gICAgICAgICAgPG1hdC1pY29uPm1lbnU8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBmeEZsZXg9XCIxMDBcIiA+XHJcbiAgICAgICAgPGgyIGNsYXNzPVwibWF0LWRpYWxvZy10aXRsZSB0cnVuY2F0ZWRcIj5cclxuICAgICAgICAgIDxkaXY+R3VpZGE8L2Rpdj5cclxuICAgICAgICA8L2gyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBmeEZsZXg9XCIxMDBweFwiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIiBjbGFzcz1cImRpYWxvZy1jbG9zZVwiPlxyXG4gICAgICAgIEBpZiAoY2FuR29CYWNrKCkpIHtcclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwic3RhcnRcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJJbmRpZXRyb1wiIChjbGljayk9XCJiYWNrKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cInN0YXJ0XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQ2hpdWRpXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBzdHlsZT1cImhlaWdodDo1cHhcIj5cclxuICAgIEBpZiAoYnVzeSgpKSB7XHJcbiAgICA8bWF0LXByb2dyZXNzLWJhciB6LWluZGV4PVwiMTFcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IFtuZ1N0eWxlXT1cInsnbWluLWhlaWdodC5weCc6IGhlaWdodCgpfVwiIHN0eWxlPVwicGFkZGluZzogMCAwIDAgMjRweFwiPlxyXG4gIDxtYXQtc2lkZW5hdi1jb250YWluZXIgW25nU3R5bGVdPVwieydoZWlnaHQucHgnOiBoZWlnaHQoKX1cIj5cclxuICAgIDxtYXQtc2lkZW5hdiAjaW5kZXhQYW5lIG1vZGU9XCJzaWRlXCIgW2F1dG9Gb2N1c109XCJmYWxzZVwiIGNsYXNzPVwiaGVscGJyb3dzZXItaW5kZXggXCI+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgY2xhc3M9XCJzY3JvbGwtaGlkZGVuXCI+XHJcbiAgICAgICAgICA8bWF0LXRyZWUgW2RhdGFTb3VyY2VdPVwidHJlZURhdGFcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIiBjbGFzcz1cInNjcm9sbC1hdXRvIHRyZWUgXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6MzEwcHhcIj5cclxuICAgICAgICAgICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBtYXRUcmVlTm9kZVRvZ2dsZSBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cIjIwXCIgY2xhc3M9XCJ0cmVlLW5vZGUgdHJlZS1ub2RlLXNpbXBsZSB0cmVlLW5vZGUtc3R5bGVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJnZXRDaGFwdGVyKG5vZGUuaWQpO1wiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0cmVlLW5vZGUtYWN0aXZhdGVkJzogaW5kZXhOb2RlICYmIGluZGV4Tm9kZS5pZCA9PT0gbm9kZS5pZH1cIiBbZGlzYWJsZWRdPVwiYnVzeSgpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbCBjbGFzcz1cInNtYWxsIHVwcGVyY2FzZVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZWQgY2xhc3M9XCJzbWFsbC1pY29uLWJ1dHRvblwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj57e25vZGUubmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgICAgICAgICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7d2hlbjogaGFzQ2hpbGRcIiBtYXRUcmVlTm9kZVBhZGRpbmcgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCIyMFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLW5vZGUgdHJlZS1ub2RlLXNpbXBsZSB0cmVlLW5vZGUtc3R5bGVcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndHJlZS1ub2RlLWFjdGl2YXRlZCc6IGluZGV4Tm9kZSAmJiBpbmRleE5vZGUuaWQgPT09IG5vZGUuaWQgfVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdldENoYXB0ZXIobm9kZS5pZClcIiBbZGlzYWJsZWRdPVwiYnVzeSgpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbCBjbGFzcz1cInNtYWxsIHVwcGVyY2FzZVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBtYXQtaWNvbi1idXR0b24gbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQXByaS9jaGl1ZGkgJyArIG5vZGUubmFtZVwiIGNsYXNzPVwic21hbGwtaWNvbi1idXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdleHBhbmRfbW9yZScgOiAnY2hldnJvbl9yaWdodCd9fVxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPnt7bm9kZS5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgICAgICAgPC9tYXQtdHJlZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1zaWRlbmF2PlxyXG4gICAgPG1hdC1zaWRlbmF2LWNvbnRlbnQgaWQ9XCJoZWxwLXBhZ2UtY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgW25nU3R5bGVdPVwieydoZWlnaHQucHgnOiBoZWlnaHQoKSB9XCI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAwIDE1cHg7XCIgKGNsaWNrKT1cImdvdG9DaGFwdGVyKCRldmVudClcIiBbaW5uZXJIdG1sXT1cIihwYWdlKCkgPz8gJycpIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1zaWRlbmF2LWNvbnRlbnQ+XHJcbiAgPC9tYXQtc2lkZW5hdi1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
474
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2hlbHAvY29tcG9uZW50cy9oZWxwLXZpZXdlci9oZWxwLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvaGVscC9jb21wb25lbnRzL2hlbHAtdmlld2VyL2hlbHAtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQTZCLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBYyxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFB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cG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT25Jbml0LCBTaWduYWwsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2dUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xyXG5pbXBvcnQgeyBNYXRTaWRlbmF2LCBNYXRTaWRlbmF2TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyLCBNYXRUcmVlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IFNhZmVIdG1sUGlwZSwgU3lzdGVtVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aSc7XHJcbmltcG9ydCB7IEV4dGVuZGVkTW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2V4dGVuZGVkJztcclxuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dC9mbGV4JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tRXZlbnQsIG9mIGFzIG9ic2VydmFibGVPZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSGVscFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oZWxwLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIZWxwVmlld2VyRGlhbG9nRGF0YSB7XHJcbiAgaW5kZXhJZD86IHN0cmluZyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJbmRleEluZm8ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgcGFyZW50PzogSW5kZXhJbmZvIHwgbnVsbDtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgaXRlbXNDb3VudD86IG51bWJlciB8IG51bGw7XHJcbiAgc3ViRm9sZGVycz86IEluZGV4SW5mb1tdIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEluZGV4Tm9kZSBleHRlbmRzIEluZGV4SW5mbyB7XHJcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcclxuICBsZXZlbDogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihpdGVtOiBJbmRleEluZm8sIGxldmVsOiBudW1iZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgLy8gRmxhdHRlbmVkIGltcGxlbWVudGF0aW9uXHJcbiAgICB0aGlzLmV4cGFuZGFibGUgPSBpdGVtLnN1YkZvbGRlcnMgJiYgaXRlbS5zdWJGb2xkZXJzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XHJcblxyXG4gICAgLy8gRGF0YVxyXG4gICAgdGhpcy5pZCA9IGl0ZW0uaWQ7XHJcbiAgICB0aGlzLm5hbWUgPSBpdGVtLm5hbWU7XHJcbiAgICB0aGlzLml0ZW1zQ291bnQgPSBpdGVtLml0ZW1zQ291bnQ7XHJcbiAgICB0aGlzLnBhcmVudCA9IGl0ZW0ucGFyZW50O1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSW5kZXhUcmVlRGF0YVNvdXJjZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW5kZXhJbmZvW10+KFtdKTtcclxuXHJcbiAgZ2V0IGRhdGEoKTogSW5kZXhJbmZvW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YUNoYW5nZS52YWx1ZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsemllIHRoZSBkYXRhIHNvdXJjZVxyXG4gICAqIEBwYXJhbSBkYXRhIDogZGF0YVxyXG4gICAqL1xyXG4gIGluaXRpYWxpemUoZGF0YTogSW5kZXhJbmZvW10pIHtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZCBhIG5vZGUgYnkgaWQgcmVjdXJzaXZlbHlcclxuICAgKiBAcGFyYW0gbm9kZTogdGhlIHNvdXJjZSBub2RlXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIGlkIHRvIHNlYXJjaCBmb3JcclxuICAgKi9cclxuICBmaW5kTm9kZShub2RlOiBJbmRleEluZm8sIGlkOiBzdHJpbmcpOiBJbmRleEluZm8ge1xyXG4gICAgbGV0IGNoaWxkcmVuO1xyXG4gICAgaWYgKG5vZGUgJiYgbm9kZS5pZCA9PT0gaWQpIHJldHVybiBub2RlO1xyXG4gICAgaWYgKG5vZGUpIGNoaWxkcmVuID0gbm9kZS5zdWJGb2xkZXJzO1xyXG4gICAgZWxzZSBjaGlsZHJlbiA9IHRoaXMuZGF0YTtcclxuICAgIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBsZXQgX24gPSBudWxsO1xyXG4gICAgICBjaGlsZHJlbi5zb21lKG4gPT4ge1xyXG4gICAgICAgIG4ucGFyZW50ID0gbm9kZTtcclxuICAgICAgICBfbiA9IHRoaXMuZmluZE5vZGUobiwgaWQpO1xyXG4gICAgICAgIGlmIChfbikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIF9uO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYSBub2RlXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIG5vZGUgaWQgdG8gcmVtb3ZlXHJcbiAgICovXHJcbiAgcmVtb3ZlTm9kZShpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgbiA9IHRoaXMuZmluZE5vZGUobnVsbCwgaWQpO1xyXG4gICAgaWYgKCFuKSByZXR1cm47XHJcbiAgICBpZiAobi5wYXJlbnQpIHtcclxuICAgICAgbGV0IGkgPSBTeXN0ZW1VdGlscy5hcnJheUZpbmRJbmRleEJ5S2V5KG4ucGFyZW50LnN1YkZvbGRlcnMsICdpZCcsIGlkKTtcclxuICAgICAgaWYgKGkgIT09IC0xKSB7XHJcbiAgICAgICAgbi5wYXJlbnQuc3ViRm9sZGVycy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgbi5wYXJlbnQuaXRlbXNDb3VudC0tO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgaSA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEluZGV4QnlLZXkodGhpcy5kYXRhLCAnaWQnLCBpZCk7XHJcbiAgICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuZGF0YS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zZXJ0IGEgbmV3IG5vZGVcclxuICAgKiBAcGFyYW0gbm9kZSA6IHRoZSBuZXcgbm9kZVxyXG4gICAqL1xyXG4gIGluc2VydE5vZGUobm9kZTogSW5kZXhJbmZvKSB7XHJcbiAgICBpZiAobm9kZS5wYXJlbnQpIHtcclxuICAgICAgbm9kZS5wYXJlbnQuc3ViRm9sZGVycy51bnNoaWZ0KG5vZGUpO1xyXG4gICAgICBub2RlLnBhcmVudC5pdGVtc0NvdW50Kys7XHJcbiAgICB9IGVsc2UgdGhpcy5kYXRhLnVuc2hpZnQobm9kZSk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbmFtZSBhIG5vZGVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgbm9kZSBpZFxyXG4gICAqIEBwYXJhbSBuYW1lIDogdGhlIG5ldyBub2RlIG5hbWVcclxuICAgKi9cclxuICByZW5hbWVOb2RlKGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xyXG4gICAgbGV0IG4gPSB0aGlzLmZpbmROb2RlKG51bGwsIGlkKTtcclxuICAgIGlmIChuKSB7XHJcbiAgICAgIG4ubmFtZSA9IG5hbWU7XHJcbiAgICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgZGF0YVxyXG4gICAqL1xyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaGVscC12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2hlbHAtdmlld2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbSW5kZXhUcmVlRGF0YVNvdXJjZV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbRmxleE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRQcm9ncmVzc0Jhck1vZHVsZSwgTWF0RGlhbG9nVGl0bGUsICBNYXREaWFsb2dDb250ZW50LFxyXG4gICAgTmdTdHlsZSwgRXh0ZW5kZWRNb2R1bGUsIE1hdFNpZGVuYXZNb2R1bGUsIE1hdFRyZWVNb2R1bGUsIE5nQ2xhc3MsIFNhZmVIdG1sUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEhlbHBWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnaW5kZXhQYW5lJykgaW5kZXhQYW5lITogTWF0U2lkZW5hdjtcclxuXHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIGRpYWxvZ1JlZiA9IGluamVjdChNYXREaWFsb2dSZWY8SGVscFZpZXdlckNvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBIZWxwVmlld2VyRGlhbG9nRGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpID8/IHsgaW5kZXhJZDogXCIxXCIgfTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBoZWxwU2VydmljZSA9ICBpbmplY3QoSGVscFNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCBicmVha3BvaW50T2JzZXJ2ZXIgPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcclxuICBwcm90ZWN0ZWQgYnVzeSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIHBhZ2UgPSBzaWduYWw8c3RyaW5nPihudWxsKTtcclxuICBwcml2YXRlIGluZGV4SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpbmRleFBhbmVDbG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgaW5kZXhOb2RlOiBJbmRleEluZm8gPSBudWxsO1xyXG4gIHByaXZhdGUgaGlzdG9yeSA9IHNpZ25hbChbXSk7XHJcbiAgcHJvdGVjdGVkIGNhbkdvQmFjazogU2lnbmFsPGJvb2xlYW4+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlzdG9yeSgpPy5sZW5ndGggPiAxO1xyXG4gIH0pXHJcblxyXG4gIHByb3RlY3RlZCBoZWlnaHQgPSBzaWduYWw8bnVtYmVyPigtMSk7XHJcbiAgcHJpdmF0ZSB0cmVlID0gaW5qZWN0KEluZGV4VHJlZURhdGFTb3VyY2UpO1xyXG4gIHByaXZhdGUgdHJlZUZsYXR0ZW5lcjogTWF0VHJlZUZsYXR0ZW5lcjxJbmRleEluZm8sIEluZGV4Tm9kZT47XHJcbiAgcHJvdGVjdGVkIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8SW5kZXhOb2RlPjtcclxuICBwcm90ZWN0ZWQgdHJlZURhdGE6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxJbmRleEluZm8sIEluZGV4Tm9kZT47XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hbmFnZSBmbGF0IHRyZWUgdmlld1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZm9sZGVyczogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIGdldENoaWxkcmVuID0gKG5vZGU6IEluZGV4SW5mbyk6IE9ic2VydmFibGU8SW5kZXhJbmZvW10+ID0+XHJcbiAgICBvYnNlcnZhYmxlT2Yobm9kZS5zdWJGb2xkZXJzKTtcclxuICBwcml2YXRlIGdldExldmVsID0gKG5vZGU6IEluZGV4Tm9kZSkgPT4gbm9kZS5sZXZlbDtcclxuICBwcml2YXRlIGlzRXhwYW5kYWJsZSA9IChub2RlOiBJbmRleE5vZGUpID0+IG5vZGUuZXhwYW5kYWJsZTtcclxuICBwcm90ZWN0ZWQgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBfbm9kZTogSW5kZXhOb2RlKSA9PiBfbm9kZS5leHBhbmRhYmxlO1xyXG4gIHByb3RlY3RlZCB0cmFuc2Zvcm1lciA9IChpdGVtOiBJbmRleEluZm8sIGxldmVsOiBudW1iZXIpID0+IHtcclxuICAgIHJldHVybiBuZXcgSW5kZXhOb2RlKGl0ZW0sIGxldmVsKTtcclxuICB9O1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBTZXR1cCB0cmVlIHN0cnVjdHVyZVxyXG4gICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXHJcbiAgICAgIHRoaXMudHJhbnNmb3JtZXIsXHJcbiAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgIHRoaXMuaXNFeHBhbmRhYmxlLFxyXG4gICAgICB0aGlzLmdldENoaWxkcmVuXHJcbiAgICApO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8SW5kZXhOb2RlPihcclxuICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgdGhpcy5pc0V4cGFuZGFibGVcclxuICAgICk7XHJcbiAgICB0aGlzLnRyZWVEYXRhID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZShcclxuICAgICAgdGhpcy50cmVlQ29udHJvbCxcclxuICAgICAgdGhpcy50cmVlRmxhdHRlbmVyXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFN1YnNjcmliZSBkYXRhIGNoYW5nZVxyXG4gICAgdGhpcy50cmVlLmRhdGFDaGFuZ2VcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4gKHRoaXMudHJlZURhdGEuZGF0YSA9IGRhdGEpKTtcclxuXHJcbiAgICAvLyBPYnNlcnZlIGxheW91dCBjaGFuZ2VzXHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclxyXG4gICAgICAub2JzZXJ2ZShbXHJcbiAgICAgICAgQnJlYWtwb2ludHMuWFNtYWxsLFxyXG4gICAgICAgIEJyZWFrcG9pbnRzLlNtYWxsLFxyXG4gICAgICAgIEJyZWFrcG9pbnRzLk1lZGl1bSxcclxuICAgICAgICBCcmVha3BvaW50cy5MYXJnZSxcclxuICAgICAgICBCcmVha3BvaW50cy5YTGFyZ2UsXHJcbiAgICAgIF0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IHF1ZXJ5IG9mIE9iamVjdC5rZXlzKHJlc3VsdC5icmVha3BvaW50cykpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuYnJlYWtwb2ludHNbcXVlcnldKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAvLyBSZWFjdCB0byB3aW5kb3cgc2l6ZSBjaGFuZ2VcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAvLyBVcGRhdGUgdmlld1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuYWRqdXN0VmlldygpO1xyXG5cclxuICAgIHRoaXMuZ2V0VG9jKCk7XHJcblxyXG4gICAgdGhpcy5pbmRleElkID0gdGhpcy5kaWFsb2dEYXRhLmluZGV4SWQ7XHJcbiAgICBpZiAodGhpcy5pbmRleElkKSB7XHJcbiAgICAgIHRoaXMuZ2V0Q2hhcHRlcih0aGlzLmluZGV4SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgIHRoaXMuaW5kZXhQYW5lQ2xvc2VkID0gIXRoaXMuaW5kZXhQYW5lLm9wZW5lZDtcclxuICAgIH0sIDApO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGp1c3Qgdmlld1xyXG4gICAqL1xyXG4gIGFkanVzdFZpZXcoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHZpZXdcclxuICAgKi9cclxuICB1cGRhdGVWaWV3KCk6IHZvaWQge1xyXG4gICAgLy8gVXBkYXRlIHJvdXRlciBoZWlnaHRcclxuICAgIGxldCBhID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgbGV0IGIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoZWxwLXZpZXdlci1maXhlZCcpO1xyXG4gICAgaWYgKCFhIHx8ICFiIHx8IGEgPT09IDAgfHwgYi5sZW5ndGggPT09IDApIHRoaXMuYWRqdXN0VmlldygpO1xyXG4gICAgbGV0IGhiID0gYlswXS5jbGllbnRIZWlnaHQ7XHJcbiAgICBpZiAoaGIgPT09IDApIHRoaXMuYWRqdXN0VmlldygpO1xyXG4gICAgdGhpcy5oZWlnaHQuc2V0KGEgLSAoaGIgKyAyNCkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4qIEhhbmRsZSBmaWx0ZXIgcGFuZSB2aXNpYmlsaXR5XHJcbiovXHJcbiAgcHJpdmF0ZSBoYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpIHtcclxuICAgIGlmICh0aGlzLmluZGV4UGFuZSkge1xyXG4gICAgICBpZiAodGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLlhTbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuU21hbGwpIHx8XHJcbiAgICAgICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLk1lZGl1bSkpIHtcclxuICAgICAgICBpZiAodGhpcy5pbmRleFBhbmUub3BlbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmluZGV4UGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5kZXhQYW5lLm9wZW5lZCAmJiAhdGhpcy5pbmRleFBhbmVDbG9zZWQpIHtcclxuICAgICAgICAgIHRoaXMuaW5kZXhQYW5lLm9wZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgaGlkZSBpbmRleCBwYW5lIG1hbnVhbGx5XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHRvZ2dsZUluZGV4UGFuZSgpIHtcclxuICAgIHRoaXMuaW5kZXhQYW5lQ2xvc2VkID0gIXRoaXMuaW5kZXhQYW5lQ2xvc2VkO1xyXG4gICAgdGhpcy5pbmRleFBhbmU/LnRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGRpYWxvZ1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRvY1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCAgZ2V0VG9jKCk6IHZvaWQge1xyXG4gICAgdGhpcy5idXN5LnNldCh0cnVlKTtcclxuICAgIHRoaXMuaGVscFNlcnZpY2VcclxuICAgICAgLmdldFRvYygpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb2xkZXJzID0gci52YWx1ZS5zdWJGb2xkZXJzO1xyXG4gICAgICAgICAgICB0aGlzLnRyZWUuaW5pdGlhbGl6ZShyLnZhbHVlLnN1YkZvbGRlcnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuYnVzeS5zZXQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWFjdCB0byBjbGljayBldmVudCBhbmQgZmluZCBuZXcgaGVscCB0YXJnZXQgdG8gZ28gdG9cclxuICAgKiBAcGFyYW0gZXZlbnQgOiB0aGUgY2xpY2sgZXZlbnRcclxuICAgKiBAcmV0dXJucyA6IGFsd2F5cyBmYWxzZSwgdG8gc3RvcCBuYXZpZ2F0aW9uXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkICBnb3RvQ2hhcHRlcihldmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZXZlbnQuc3JjRWxlbWVudC5ub2RlTmFtZSAhPT0gJ0EnKSByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgdGFnID0gZXZlbnQuc3JjRWxlbWVudC5vdXRlckhUTUw7XHJcbiAgICBsZXQgaWQgPSAnJztcclxuICAgIGxldCBwID0gdGFnLmluZGV4T2YoJ2hlbHAtdGFyZ2V0PVwiJyk7XHJcbiAgICBpZiAocCAhPT0gLTEpIHtcclxuICAgICAgcCArPSAxMztcclxuICAgICAgd2hpbGUgKHRhZ1twXSAhPT0gJ1wiJykge1xyXG4gICAgICAgIGlkICs9IHRhZ1twXTtcclxuICAgICAgICBwKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpZCkgdGhpcy5nZXRDaGFwdGVyKGlkKTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmQgYSBub2RlIGJ5IGlkXHJcbiAgICogQHBhcmFtIGlkIDogZm9sZGVyIGlkXHJcbiAgICogQHJldHVybnM6IHRoZSBmb2xkZXIgaW5mb1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZmluZEZvbGRlcihpZDogc3RyaW5nKTogSW5kZXhJbmZvIHtcclxuICAgIGxldCBub2RlID0gbnVsbDtcclxuICAgIGlmICh0aGlzLmZvbGRlcnMpIHtcclxuICAgICAgdGhpcy5mb2xkZXJzLnNvbWUoKG46IGFueSkgPT4ge1xyXG4gICAgICAgIG5vZGUgPSB0aGlzLnRyZWUuZmluZE5vZGUobiwgaWQpO1xyXG4gICAgICAgIGlmIChub2RlKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBhbmQgY3VycmVudCBmb2RsZXIgbm9kZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZXhwYW5kQ3VycmVudEZvbGRlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmluZGV4Tm9kZSkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChcclxuICAgICAgICBTeXN0ZW1VdGlscy5hcnJheUZpbmRCeUtleShcclxuICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLFxyXG4gICAgICAgICAgJ2lkJyxcclxuICAgICAgICAgIHRoaXMuaW5kZXhOb2RlLmlkXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5pbmRleE5vZGUucGFyZW50KSB7XHJcbiAgICAgICAgLy8gQXBwbHkgcHJldmlvdXMgc2VsZWN0aW9uXHJcbiAgICAgICAgbGV0IG4gPSB0aGlzLmluZGV4Tm9kZS5wYXJlbnQ7XHJcbiAgICAgICAgd2hpbGUgKG4pIHtcclxuICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKFxyXG4gICAgICAgICAgICBTeXN0ZW1VdGlscy5hcnJheUZpbmRCeUtleSh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcywgJ2lkJywgbi5pZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBuID0gbi5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhIG5ldyBjaGFwdGVyXHJcbiAgICogQHBhcmFtIGlkIHRoZSBjaGFwdGVyIGlkI2FuY2hvclxyXG4gICAqIEBwYXJhbSBwb3NpdGlvbiA6IHRoZSBwb3NpdGlvbiB0byBzY3JvbGwgdG9cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgIGdldENoYXB0ZXIoaWQ6IHN0cmluZywgcG9zaXRpb246IG51bWJlciA9IDApOiB2b2lkIHtcclxuICAgIC8vIERldGVjdCBhbmNob3IgaWYgZXhpc3RzXHJcbiAgICBsZXQgYW5jaG9yOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgbGV0IHAgPSBpZC5pbmRleE9mKCcjJyk7XHJcbiAgICBpZiAocCAhPT0gLTEpIHtcclxuICAgICAgYW5jaG9yID0gaWQuc3Vic3RyaW5nKHAgKyAxKTtcclxuICAgICAgaWQgPSBpZC5zdWJzdHJpbmcoMCwgcCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaWQgIT09ICcuJykge1xyXG4gICAgICB0aGlzLmJ1c3kuc2V0KHRydWUpO1xyXG4gICAgICB0aGlzLmhlbHBTZXJ2aWNlLmdldENoYXB0ZXIoaWQpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihcIkNhcGl0b2xvIG5vbiB0cm92YXRvLlwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoIXBvc2l0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5KCkucHVzaCh7IGlkOiB0aGlzLmluZGV4SWQsIHBvc2l0aW9uOiB0aGlzLmdldFBvc2l0aW9uKCkgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbmRleElkID0gaWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdlLnNldChyLnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgICAgIGZvdW5kID0gci52YWx1ZS5jaGFwdGVyPy5uYW1lPy5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGZvbGRlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleE5vZGUgPSB0aGlzLmZpbmRGb2xkZXIoaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRDdXJyZW50Rm9sZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcG9zaXRpb25pbmdcclxuICAgICAgICAgICAgICAgIHRoaXMuZ290b1Bvc2l0aW9uKGFuY2hvciwgcG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0Q2hhcHRlcihcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kuc2V0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghcG9zaXRpb24pXHJcbiAgICAgICAgdGhpcy5oaXN0b3J5KCkucHVzaCh7IGlkOiB0aGlzLmluZGV4SWQsIHBvc2l0aW9uOiB0aGlzLmdldFBvc2l0aW9uKCkgfSk7XHJcbiAgICAgIC8vIE1vdmUgb24gdGhlIHNhbWUgY2hhcHRlclxyXG4gICAgICB0aGlzLmdvdG9Qb3NpdGlvbihhbmNob3IsIHBvc2l0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvdG8gcG9zaXRpb25cclxuICAgKiBAcGFyYW0gYW5jaG9yIHRoZSBhbmNob3IgdG8gZ28gdG9cclxuICAgKiBAcGFyYW0gcG9zaXRpb24gdGhlIG9mZnNldCB0byBnbyB0b1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCAgZ290b1Bvc2l0aW9uKGFuY2hvcjogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyID0gMCk6IHZvaWQge1xyXG4gICAgLy8gSGFuZGxlIHBvc2l0aW9uaW5nXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gSGFuZGxlIGFuY2hvciBmaXJzdFxyXG4gICAgICBpZiAoYW5jaG9yKSB7XHJcbiAgICAgICAgbGV0IGVsbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShhbmNob3IudG9VcHBlckNhc2UoKSk7XHJcbiAgICAgICAgaWYgKGVsbXMpIHBvc2l0aW9uID0gZWxtc1swXS5vZmZzZXRUb3A7XHJcbiAgICAgIH1cclxuICAgICAgLy8gVGhlbiBwb3NpdGlvblxyXG4gICAgICBpZiAocG9zaXRpb24gPiAwKSB0aGlzLnNldFBvc2l0aW9uKHBvc2l0aW9uIC0gMSk7XHJcbiAgICAgIGVsc2UgdGhpcy5zZXRQb3NpdGlvbigwKTtcclxuICAgIH0sIDUwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBzY3JvbGwgcG9zaXRpb25cclxuICAgKiBAcmV0dXJuczogdGhlIG5ldyBzY3JvbGwgdG9wXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkICBnZXRQb3NpdGlvbigpOiBudW1iZXIge1xyXG4gICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVscC1wYWdlLWNvbnRhaW5lcicpO1xyXG4gICAgaWYgKGVsZW0pIHtcclxuICAgICAgcmV0dXJuIGVsZW0uc2Nyb2xsVG9wO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgc2Nyb2xsIHBvc2l0aW9uXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIDogdGhlIHBvc2l0aW9uIHRvIGdvIHRvXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkICBzZXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWxwLXBhZ2UtY29udGFpbmVyJyk7XHJcbiAgICBpZiAoZWxlbSkge1xyXG4gICAgICBlbGVtLnNjcm9sbFRvKDAsIHBvc2l0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIGJhY2tcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgIGJhY2soKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGlzdG9yeSB8fCB0aGlzLmhpc3RvcnkubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICBsZXQgbiA9IHRoaXMuaGlzdG9yeSgpLnBvcCgpO1xyXG4gICAgdGhpcy5nZXRDaGFwdGVyKG4uaWQsIG4ucG9zaXRpb24gKyAxKTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaGVscC12aWV3ZXItZml4ZWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiaGVscC12aWV3ZXItaGVhZGVyXCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbCA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctbWVudVwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiTW9zdHJhIG1lbnVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgaW5kaWNlJ1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlSW5kZXhQYW5lKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5tZW51PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiID5cclxuICAgICAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT5HdWlkYTwvaDI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjEwMHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiIGNsYXNzPVwiZGlhbG9nLWNsb3NlXCI+XHJcbiAgICAgICAgQGlmIChjYW5Hb0JhY2soKSkge1xyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJzdGFydFwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkluZGlldHJvXCIgKGNsaWNrKT1cImJhY2soKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwic3RhcnRcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJDaGl1ZGlcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OjVweFwiPlxyXG4gICAgQGlmIChidXN5KCkpIHtcclxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIHotaW5kZXg9XCIxMVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgW25nU3R5bGVdPVwieydtaW4taGVpZ2h0LnB4JzogaGVpZ2h0KCl9XCIgc3R5bGU9XCJwYWRkaW5nOiAwIDAgMCAyNHB4XCI+XHJcbiAgPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBbbmdTdHlsZV09XCJ7J2hlaWdodC5weCc6IGhlaWdodCgpfVwiPlxyXG4gICAgPG1hdC1zaWRlbmF2ICNpbmRleFBhbmUgbW9kZT1cInNpZGVcIiBbYXV0b0ZvY3VzXT1cImZhbHNlXCIgY2xhc3M9XCJoZWxwYnJvd3Nlci1pbmRleCBcIj5cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBjbGFzcz1cInNjcm9sbC1oaWRkZW5cIj5cclxuICAgICAgICAgIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJ0cmVlRGF0YVwiIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiIGNsYXNzPVwic2Nyb2xsLWF1dG8gdHJlZSBcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIm1heC13aWR0aDozMTBweFwiPlxyXG4gICAgICAgICAgICA8bWF0LXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiIG1hdFRyZWVOb2RlVG9nZ2xlIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICAgICAgICAgIFttYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnRdPVwiMjBcIiBjbGFzcz1cInRyZWUtbm9kZSB0cmVlLW5vZGUtc2ltcGxlIHRyZWUtbm9kZS1zdHlsZVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdldENoYXB0ZXIobm9kZS5pZCk7XCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RyZWUtbm9kZS1hY3RpdmF0ZWQnOiBpbmRleE5vZGUgJiYgaW5kZXhOb2RlLmlkID09PSBub2RlLmlkfVwiIFtkaXNhYmxlZF09XCJidXN5KClcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsIGNsYXNzPVwic21hbGwgdXBwZXJjYXNlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cInNtYWxsLWljb24tYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPnt7bm9kZS5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgICAgICAgICA8bWF0LXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTt3aGVuOiBoYXNDaGlsZFwiIG1hdFRyZWVOb2RlUGFkZGluZyBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cIjIwXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtbm9kZSB0cmVlLW5vZGUtc2ltcGxlIHRyZWUtbm9kZS1zdHlsZVwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0cmVlLW5vZGUtYWN0aXZhdGVkJzogaW5kZXhOb2RlICYmIGluZGV4Tm9kZS5pZCA9PT0gbm9kZS5pZCB9XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0Q2hhcHRlcihub2RlLmlkKVwiIFtkaXNhYmxlZF09XCJidXN5KClcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsIGNsYXNzPVwic21hbGwgdXBwZXJjYXNlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUcmVlTm9kZVRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBcHJpL2NoaXVkaSAnICsgbm9kZS5uYW1lXCIgY2xhc3M9XCJzbWFsbC1pY29uLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0J319XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4RmxleEFsaWduPVwiY2VudGVyXCI+e3tub2RlLm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICAgICAgICA8L21hdC10cmVlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXNpZGVuYXY+XHJcbiAgICA8bWF0LXNpZGVuYXYtY29udGVudCBpZD1cImhlbHAtcGFnZS1jb250YWluZXJcIj5cclxuICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7J2hlaWdodC5weCc6IGhlaWdodCgpIH1cIj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDAgMCAwIDI0cHg7XCIgKGNsaWNrKT1cImdvdG9DaGFwdGVyKCRldmVudClcIiBbaW5uZXJIdG1sXT1cIihwYWdlKCkgPz8gJycpIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1zaWRlbmF2LWNvbnRlbnQ+XHJcbiAgPC9tYXQtc2lkZW5hdi1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
@@ -98,11 +98,11 @@ export class SupportNotificationComponent {
98
98
  window.open(item.url, '_blank');
99
99
  }
100
100
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SupportNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
101
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: SupportNotificationComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div class=\"support-notification-fixed\">\r\n <div class=\"support-notification-header\">\r\n <div fxLayout=\"row\" fxFill fxLayoutGap=\"10px\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <h2 mat-dialog-title>{{item?.title}}</h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"notification-scrollable\">\r\n <div id=\"notification-scroller\">\r\n <div [innerHtml]=\"(item?.text ?? 'Caricamento in corso...') | safeHtml\"></div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"notification-fixed\">\r\n <div style=\"padding: 10px 0\">\r\n @if (item?.documents && item?.documents.length > 0) {\r\n <button type=\"button\" mat-button [attr.aria-label]=\"'Documenti scaricabili'\" [matMenuTriggerFor]=\"documentsMenu\"\r\n color=\"primary\">\r\n {{item?.documents.length}} @if (item?.documents.length === 1) {\r\n <span>Documento scaricabile</span>\r\n }\r\n @if (item?.documents.length !== 1) {\r\n <span>Documenti scaricabili</span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #documentsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n @for (doc of item?.documents; track doc) {\r\n <button mat-menu-item (click)=\"downloadDocument(doc)\">\r\n @if (doc.isBinary) {\r\n <mat-icon>attach_file</mat-icon>\r\n }\r\n @if (!doc.isBinary) {\r\n <mat-icon>link</mat-icon>\r\n }\r\n {{doc.name}}\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
101
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: SupportNotificationComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, ngImport: i0, template: "<div class=\"support-notification-fixed\">\r\n <div class=\"support-notification-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill >\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{item?.title}}</h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"notification-scrollable\">\r\n <div id=\"notification-scroller\">\r\n <div [innerHtml]=\"(item?.text ?? 'Caricamento in corso...') | safeHtml\"></div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"notification-fixed\">\r\n <div style=\"padding: 10px 0\">\r\n @if (item?.documents && item?.documents.length > 0) {\r\n <button type=\"button\" mat-button [attr.aria-label]=\"'Documenti scaricabili'\" [matMenuTriggerFor]=\"documentsMenu\"\r\n color=\"primary\">\r\n {{item?.documents.length}} @if (item?.documents.length === 1) {\r\n <span>Documento scaricabile</span>\r\n }\r\n @if (item?.documents.length !== 1) {\r\n <span>Documenti scaricabili</span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #documentsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n @for (doc of item?.documents; track doc) {\r\n <button mat-menu-item (click)=\"downloadDocument(doc)\">\r\n @if (doc.isBinary) {\r\n <mat-icon>attach_file</mat-icon>\r\n }\r\n @if (!doc.isBinary) {\r\n <mat-icon>link</mat-icon>\r\n }\r\n {{doc.name}}\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
102
102
  }
103
103
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: SupportNotificationComponent, decorators: [{
104
104
  type: Component,
105
105
  args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FlexModule, MatDialogTitle, MatButtonModule, MatTooltipModule, MatDialogClose, MatIconModule, MatDialogContent,
106
- MatDialogActions, MatMenuModule, SafeHtmlPipe], template: "<div class=\"support-notification-fixed\">\r\n <div class=\"support-notification-header\">\r\n <div fxLayout=\"row\" fxFill fxLayoutGap=\"10px\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <h2 mat-dialog-title>{{item?.title}}</h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"notification-scrollable\">\r\n <div id=\"notification-scroller\">\r\n <div [innerHtml]=\"(item?.text ?? 'Caricamento in corso...') | safeHtml\"></div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"notification-fixed\">\r\n <div style=\"padding: 10px 0\">\r\n @if (item?.documents && item?.documents.length > 0) {\r\n <button type=\"button\" mat-button [attr.aria-label]=\"'Documenti scaricabili'\" [matMenuTriggerFor]=\"documentsMenu\"\r\n color=\"primary\">\r\n {{item?.documents.length}} @if (item?.documents.length === 1) {\r\n <span>Documento scaricabile</span>\r\n }\r\n @if (item?.documents.length !== 1) {\r\n <span>Documenti scaricabili</span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #documentsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n @for (doc of item?.documents; track doc) {\r\n <button mat-menu-item (click)=\"downloadDocument(doc)\">\r\n @if (doc.isBinary) {\r\n <mat-icon>attach_file</mat-icon>\r\n }\r\n @if (!doc.isBinary) {\r\n <mat-icon>link</mat-icon>\r\n }\r\n {{doc.name}}\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n</div>" }]
106
+ MatDialogActions, MatMenuModule, SafeHtmlPipe], template: "<div class=\"support-notification-fixed\">\r\n <div class=\"support-notification-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill >\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{item?.title}}</h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" [mat-dialog-close]=\"true\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"notification-scrollable\">\r\n <div id=\"notification-scroller\">\r\n <div [innerHtml]=\"(item?.text ?? 'Caricamento in corso...') | safeHtml\"></div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"notification-fixed\">\r\n <div style=\"padding: 10px 0\">\r\n @if (item?.documents && item?.documents.length > 0) {\r\n <button type=\"button\" mat-button [attr.aria-label]=\"'Documenti scaricabili'\" [matMenuTriggerFor]=\"documentsMenu\"\r\n color=\"primary\">\r\n {{item?.documents.length}} @if (item?.documents.length === 1) {\r\n <span>Documento scaricabile</span>\r\n }\r\n @if (item?.documents.length !== 1) {\r\n <span>Documenti scaricabili</span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #documentsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n @for (doc of item?.documents; track doc) {\r\n <button mat-menu-item (click)=\"downloadDocument(doc)\">\r\n @if (doc.isBinary) {\r\n <mat-icon>attach_file</mat-icon>\r\n }\r\n @if (!doc.isBinary) {\r\n <mat-icon>link</mat-icon>\r\n }\r\n {{doc.name}}\r\n </button>\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}\n"] }]
107
107
  }] });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9zdXBwb3J0LnVpL3VpL25vdGlmaWNhdGlvbnMtYnJvd3Nlci9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9zdXBwb3J0LnVpL3VpL25vdGlmaWNhdGlvbnMtYnJvd3Nlci9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRixPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hGLE9BQU8sRUFDTCxhQUFhLEVBQ2QsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUs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d0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LCBPbkluaXQsXHJcbiAgaW5qZWN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nVGl0bGUsIE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dBY3Rpb25zIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQnJvYWRjYXN0U2VydmljZSwgU2NyZWVuU2VydmljZSwgU3lzdGVtVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBTdXBwb3J0TWVzc2FnZXMsIFN1cHBvcnRTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9zdXBwb3J0LmNvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgRGlhbG9nU2VydmljZVxyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWknO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgU2FmZUh0bWxQaXBlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dC9mbGV4JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3VwcG9ydE5vdGlmaWNhdGlvbkRhdGEge1xyXG4gIGlkPzogbnVtYmVyIHwgbnVsbDtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIGhvc3Q6IHsgJ0JpbmQnOiBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSB9LFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ub3RpZmljYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25vdGlmaWNhdGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW0ZsZXhNb2R1bGUsIE1hdERpYWxvZ1RpdGxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGUsIE1hdERpYWxvZ0Nsb3NlLCBNYXRJY29uTW9kdWxlLCBNYXREaWFsb2dDb250ZW50LFxyXG4gICAgTWF0RGlhbG9nQWN0aW9ucywgTWF0TWVudU1vZHVsZSwgU2FmZUh0bWxQaXBlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3VwcG9ydE5vdGlmaWNhdGlvbkNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgcHJvdGVjdGVkIHNjcmVlblNlcnZpY2UgPSBpbmplY3QoU2NyZWVuU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBzdXBwb3J0U2VydmljZSA9IGluamVjdChTdXBwb3J0U2VydmljZSk7XHJcbiAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSBicm9hZGNhc3RTZXJ2aWNlID0gaW5qZWN0KEJyb2FkY2FzdFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ0RhdGE6IFN1cHBvcnROb3RpZmljYXRpb25EYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSk7XHJcbiAgcHJpdmF0ZSBoZWlnaHQ6IG51bWJlciA9IC0xO1xyXG5cclxuICBwcm90ZWN0ZWQgaWQ6IG51bWJlciA9IC0xO1xyXG4gIHByb3RlY3RlZCBpdGVtOiBhbnkgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhKSB7XHJcbiAgICAgIHRoaXMuaWQgPSB0aGlzLmRpYWxvZ0RhdGEuaWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZldGNoKCk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNpemUgZGlhbG9nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNpemUoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm90aWZpY2F0aW9uLXNjcm9sbGFibGUnKTtcclxuICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICBjb25zdCBoID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldEN1cnJlbnREaWFsb2dTY3JvbGxhYmxlSGVpZ2h0KFxyXG4gICAgICAgICAgWydzdXBwb3J0LW5vdGlmaWNhdGlvbi1maXhlZCddLFxyXG4gICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaCAhPSB0aGlzLmhlaWdodCkge1xyXG4gICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2hlaWdodDonICsgaCArICdweCAhaW1wb3J0YW50O21heC1oZWlnaHQ6JyArIGggKyAncHggIWltcG9ydGFudCcpO1xyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSBoO1xyXG4gICAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBkYXRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmZXRjaCgpIHtcclxuICAgIGlmICghdGhpcy5zdXBwb3J0U2VydmljZS5sb2dnZWRJbikgcmV0dXJuO1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ0NhcmljYW1lbnRvIGluIGNvcnNvLi4uJyk7XHJcbiAgICB0aGlzLnN1cHBvcnRTZXJ2aWNlLmdldE5vdGlmaWNhdGlvbih0aGlzLmlkKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLml0ZW0gPSByLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoU3VwcG9ydE1lc3NhZ2VzLk5PVElGSUNBVElPTl9SRUFELCB0aGlzLml0ZW0uaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWQgYSBub3RpZmljYXRpb24gZG9jdW1lbnQgb3IgbmF2aWdhdGUgdG8gdGhlIHVybFxyXG4gICAqIEBwYXJhbSBpdGVtIDogdGhlIGRvY3VtZW50IGl0ZW1cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZG93bmxvYWREb2N1bWVudChpdGVtOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5zdXBwb3J0U2VydmljZS5sb2dnZWRJbikgcmV0dXJuO1xyXG4gICAgaWYgKGl0ZW0uaXNCaW5hcnkpIHtcclxuICAgICAgdGhpcy5zdXBwb3J0U2VydmljZS5kb3dsb2FkTm90aWZpY2F0aW9uRG9jdW1lbnQoaXRlbS5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocjogYW55KSA9PiB7XHJcbiAgICAgICAgICBzYXZlQXMocik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2VcclxuICAgICAgd2luZG93Lm9wZW4oaXRlbS51cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzdXBwb3J0LW5vdGlmaWNhdGlvbi1maXhlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJzdXBwb3J0LW5vdGlmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeEZpbGwgZnhMYXlvdXRHYXA9XCIxMHB4XCI+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4RmxleEFsaWduPVwiY2VudGVyXCI+XHJcbiAgICAgICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3tpdGVtPy50aXRsZX19PC9oMj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJzdGFydFwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gIG1hdFRvb2x0aXA9XCJDaGl1ZGlcIlxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNoaXVkaVwiIFttYXQtZGlhbG9nLWNsb3NlXT1cInRydWVcIiBjbGFzcz1cImRpYWxvZy1jbG9zZVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGlkPVwibm90aWZpY2F0aW9uLXNjcm9sbGFibGVcIj5cclxuICA8ZGl2IGlkPVwibm90aWZpY2F0aW9uLXNjcm9sbGVyXCI+XHJcbiAgICA8ZGl2IFtpbm5lckh0bWxdPVwiKGl0ZW0/LnRleHQgPz8gJ0NhcmljYW1lbnRvIGluIGNvcnNvLi4uJykgfCBzYWZlSHRtbFwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgY2xhc3M9XCJub3RpZmljYXRpb24tZml4ZWRcIj5cclxuICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMTBweCAwXCI+XHJcbiAgICBAaWYgKGl0ZW0/LmRvY3VtZW50cyAmJiBpdGVtPy5kb2N1bWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiBbYXR0ci5hcmlhLWxhYmVsXT1cIidEb2N1bWVudGkgc2NhcmljYWJpbGknXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImRvY3VtZW50c01lbnVcIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAge3tpdGVtPy5kb2N1bWVudHMubGVuZ3RofX0gQGlmIChpdGVtPy5kb2N1bWVudHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIDxzcGFuPkRvY3VtZW50byBzY2FyaWNhYmlsZTwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKGl0ZW0/LmRvY3VtZW50cy5sZW5ndGggIT09IDEpIHtcclxuICAgICAgPHNwYW4+RG9jdW1lbnRpIHNjYXJpY2FiaWxpPC9zcGFuPlxyXG4gICAgICB9XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tbWVudS1kcm9wLWRvd25cIj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICA8bWF0LW1lbnUgI2RvY3VtZW50c01lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudD5cclxuICAgICAgICBAZm9yIChkb2Mgb2YgaXRlbT8uZG9jdW1lbnRzOyB0cmFjayBkb2MpIHtcclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImRvd25sb2FkRG9jdW1lbnQoZG9jKVwiPlxyXG4gICAgICAgICAgQGlmIChkb2MuaXNCaW5hcnkpIHtcclxuICAgICAgICAgIDxtYXQtaWNvbj5hdHRhY2hfZmlsZTwvbWF0LWljb24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAaWYgKCFkb2MuaXNCaW5hcnkpIHtcclxuICAgICAgICAgIDxtYXQtaWNvbj5saW5rPC9tYXQtaWNvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHt7ZG9jLm5hbWV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbWF0LW1lbnU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9zdXBwb3J0LnVpL3VpL25vdGlmaWNhdGlvbnMtYnJvd3Nlci9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9zdXBwb3J0LnVpL3VpL25vdGlmaWNhdGlvbnMtYnJvd3Nlci9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRixPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hGLE9BQU8sRUFDTCxhQUFhLEVBQ2QsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUs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ZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCwgT25Jbml0LFxyXG4gIGluamVjdFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1RpdGxlLCBNYXREaWFsb2dDbG9zZSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nQWN0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEJyb2FkY2FzdFNlcnZpY2UsIFNjcmVlblNlcnZpY2UsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgU3VwcG9ydE1lc3NhZ2VzLCBTdXBwb3J0U2VydmljZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvc3VwcG9ydC5jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIERpYWxvZ1NlcnZpY2VcclxufSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IFNhZmVIdG1sUGlwZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IEZsZXhNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZmxleCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN1cHBvcnROb3RpZmljYXRpb25EYXRhIHtcclxuICBpZD86IG51bWJlciB8IG51bGw7XHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbm90aWZpY2F0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ub3RpZmljYXRpb24uY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGltcG9ydHM6IFtGbGV4TW9kdWxlLCBNYXREaWFsb2dUaXRsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBNYXREaWFsb2dDbG9zZSwgTWF0SWNvbk1vZHVsZSwgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIE1hdERpYWxvZ0FjdGlvbnMsIE1hdE1lbnVNb2R1bGUsIFNhZmVIdG1sUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFN1cHBvcnROb3RpZmljYXRpb25Db21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIHByb3RlY3RlZCBzY3JlZW5TZXJ2aWNlID0gaW5qZWN0KFNjcmVlblNlcnZpY2UpO1xyXG4gIHByaXZhdGUgc3VwcG9ydFNlcnZpY2UgPSBpbmplY3QoU3VwcG9ydFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dEYXRhOiBTdXBwb3J0Tm90aWZpY2F0aW9uRGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xyXG4gIHByaXZhdGUgaGVpZ2h0OiBudW1iZXIgPSAtMTtcclxuXHJcbiAgcHJvdGVjdGVkIGlkOiBudW1iZXIgPSAtMTtcclxuICBwcm90ZWN0ZWQgaXRlbTogYW55IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YSkge1xyXG4gICAgICB0aGlzLmlkID0gdGhpcy5kaWFsb2dEYXRhLmlkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mZXRjaCgpO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzaXplIGRpYWxvZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzaXplKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vdGlmaWNhdGlvbi1zY3JvbGxhYmxlJyk7XHJcbiAgICAgIGlmIChlbGVtKSB7XHJcbiAgICAgICAgY29uc3QgaCA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRDdXJyZW50RGlhbG9nU2Nyb2xsYWJsZUhlaWdodChcclxuICAgICAgICAgIFsnc3VwcG9ydC1ub3RpZmljYXRpb24tZml4ZWQnXSxcclxuICAgICAgICAgIHdpbmRvdy5pbm5lckhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGggIT0gdGhpcy5oZWlnaHQpIHtcclxuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdzdHlsZScsICdoZWlnaHQ6JyArIGggKyAncHggIWltcG9ydGFudDttYXgtaGVpZ2h0OicgKyBoICsgJ3B4ICFpbXBvcnRhbnQnKTtcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaDtcclxuICAgICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmV0Y2goKSB7XHJcbiAgICBpZiAoIXRoaXMuc3VwcG9ydFNlcnZpY2UubG9nZ2VkSW4pIHJldHVybjtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdDYXJpY2FtZW50byBpbiBjb3Jzby4uLicpO1xyXG4gICAgdGhpcy5zdXBwb3J0U2VydmljZS5nZXROb3RpZmljYXRpb24odGhpcy5pZClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHIpID0+IHtcclxuICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtID0gci52YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKFN1cHBvcnRNZXNzYWdlcy5OT1RJRklDQVRJT05fUkVBRCwgdGhpcy5pdGVtLmlkKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvd25sb2FkIGEgbm90aWZpY2F0aW9uIGRvY3VtZW50IG9yIG5hdmlnYXRlIHRvIHRoZSB1cmxcclxuICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBkb2N1bWVudCBpdGVtXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGRvd25sb2FkRG9jdW1lbnQoaXRlbTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuc3VwcG9ydFNlcnZpY2UubG9nZ2VkSW4pIHJldHVybjtcclxuICAgIGlmIChpdGVtLmlzQmluYXJ5KSB7XHJcbiAgICAgIHRoaXMuc3VwcG9ydFNlcnZpY2UuZG93bG9hZE5vdGlmaWNhdGlvbkRvY3VtZW50KGl0ZW0uaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgc2F2ZUFzKHIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlXHJcbiAgICAgIHdpbmRvdy5vcGVuKGl0ZW0udXJsLCAnX2JsYW5rJyk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic3VwcG9ydC1ub3RpZmljYXRpb24tZml4ZWRcIj5cclxuICA8ZGl2IGNsYXNzPVwic3VwcG9ydC1ub3RpZmljYXRpb24taGVhZGVyXCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbCA+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7aXRlbT8udGl0bGV9fTwvaDI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwic3RhcnRcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uICBtYXRUb29sdGlwPVwiQ2hpdWRpXCJcclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDaGl1ZGlcIiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY2xhc3M9XCJkaWFsb2ctY2xvc2VcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBpZD1cIm5vdGlmaWNhdGlvbi1zY3JvbGxhYmxlXCI+XHJcbiAgPGRpdiBpZD1cIm5vdGlmaWNhdGlvbi1zY3JvbGxlclwiPlxyXG4gICAgPGRpdiBbaW5uZXJIdG1sXT1cIihpdGVtPy50ZXh0ID8/ICdDYXJpY2FtZW50byBpbiBjb3Jzby4uLicpIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGNsYXNzPVwibm90aWZpY2F0aW9uLWZpeGVkXCI+XHJcbiAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDEwcHggMFwiPlxyXG4gICAgQGlmIChpdGVtPy5kb2N1bWVudHMgJiYgaXRlbT8uZG9jdW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gW2F0dHIuYXJpYS1sYWJlbF09XCInRG9jdW1lbnRpIHNjYXJpY2FiaWxpJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJkb2N1bWVudHNNZW51XCJcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgIHt7aXRlbT8uZG9jdW1lbnRzLmxlbmd0aH19IEBpZiAoaXRlbT8uZG9jdW1lbnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICA8c3Bhbj5Eb2N1bWVudG8gc2NhcmljYWJpbGU8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgICAgQGlmIChpdGVtPy5kb2N1bWVudHMubGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgIDxzcGFuPkRvY3VtZW50aSBzY2FyaWNhYmlsaTwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLW1lbnUtZHJvcC1kb3duXCI+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgPG1hdC1tZW51ICNkb2N1bWVudHNNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQ+XHJcbiAgICAgICAgQGZvciAoZG9jIG9mIGl0ZW0/LmRvY3VtZW50czsgdHJhY2sgZG9jKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJkb3dubG9hZERvY3VtZW50KGRvYylcIj5cclxuICAgICAgICAgIEBpZiAoZG9jLmlzQmluYXJ5KSB7XHJcbiAgICAgICAgICA8bWF0LWljb24+YXR0YWNoX2ZpbGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQGlmICghZG9jLmlzQmluYXJ5KSB7XHJcbiAgICAgICAgICA8bWF0LWljb24+bGluazwvbWF0LWljb24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB7e2RvYy5uYW1lfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=