geonetwork-ui 2.7.0-dev.dbe423d28 → 2.7.0-dev.f29e01b0d
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.
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +18 -4
- package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +10 -2
- package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +31 -12
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +73 -26
- package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +4 -3
- package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +4 -4
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +21 -43
- package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
- package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
- package/esm2022/libs/util/shared/src/index.mjs +2 -2
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +9 -1
- package/esm2022/libs/util/shared/src/lib/record/index.mjs +3 -0
- package/esm2022/libs/util/shared/src/lib/record/quality-score.util.mjs +45 -0
- package/esm2022/libs/util/shared/src/lib/record/record.util.mjs +56 -0
- package/esm2022/translations/de.json +1 -1
- package/esm2022/translations/en.json +1 -1
- package/esm2022/translations/es.json +1 -1
- package/esm2022/translations/fr.json +1 -1
- package/esm2022/translations/it.json +1 -1
- package/esm2022/translations/nl.json +1 -1
- package/esm2022/translations/pt.json +1 -1
- package/esm2022/translations/sk.json +1 -1
- package/fesm2022/geonetwork-ui.mjs +213 -92
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +1 -0
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -0
- package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -0
- package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +3 -2
- package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +8 -4
- package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +12 -5
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +7 -6
- package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
- package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
- package/libs/util/app-config/src/lib/model.d.ts +1 -0
- package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
- package/libs/util/shared/src/index.d.ts +1 -1
- package/libs/util/shared/src/index.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts +1 -0
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/libs/util/shared/src/lib/record/index.d.ts +3 -0
- package/libs/util/shared/src/lib/record/index.d.ts.map +1 -0
- package/libs/util/shared/src/lib/record/quality-score.util.d.ts +13 -0
- package/libs/util/shared/src/lib/record/quality-score.util.d.ts.map +1 -0
- package/libs/util/shared/src/lib/record/record.util.d.ts +3 -0
- package/libs/util/shared/src/lib/record/record.util.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +25 -4
- package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +2 -0
- package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +10 -1
- package/src/libs/feature/record/src/lib/data-view/data-view.component.html +2 -0
- package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +34 -15
- package/src/libs/feature/record/src/lib/map-view/map-view.component.html +2 -0
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +67 -22
- package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +6 -1
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +1 -0
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +5 -1
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +1 -0
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +21 -54
- package/src/libs/util/app-config/src/lib/app-config.ts +2 -0
- package/src/libs/util/app-config/src/lib/model.ts +1 -0
- package/src/libs/util/shared/src/index.ts +1 -1
- package/src/libs/util/shared/src/lib/links/link-utils.ts +9 -0
- package/src/libs/util/shared/src/lib/record/index.ts +2 -0
- package/src/libs/util/shared/src/lib/record/quality-score.util.ts +69 -0
- package/src/libs/util/shared/src/lib/{record.util.ts → record/record.util.ts} +1 -1
- package/translations/de.json +1 -1
- package/translations/en.json +1 -1
- package/translations/es.json +1 -1
- package/translations/fr.json +1 -1
- package/translations/it.json +1 -1
- package/translations/nl.json +1 -1
- package/translations/pt.json +1 -1
- package/translations/sk.json +1 -1
- package/esm2022/libs/util/shared/src/lib/record.util.mjs +0 -56
- package/libs/util/shared/src/lib/record.util.d.ts +0 -3
- package/libs/util/shared/src/lib/record.util.d.ts.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
2
|
import { MapUtilsService } from '../../../../../../libs/feature/map/src';
|
|
3
|
-
import { getLinkLabel } from '../../../../../../libs/util/shared/src';
|
|
3
|
+
import { getLinkId, getLinkLabel } from '../../../../../../libs/util/shared/src';
|
|
4
4
|
import { BehaviorSubject, combineLatest, from, of, startWith, throwError, withLatestFrom, } from 'rxjs';
|
|
5
|
-
import { catchError, distinctUntilChanged, finalize, map, shareReplay, switchMap,
|
|
5
|
+
import { catchError, distinctUntilChanged, finalize, map, shareReplay, switchMap, tap, } from 'rxjs/operators';
|
|
6
6
|
import { MdViewFacade } from '../state/mdview.facade';
|
|
7
7
|
import { DataService } from '../../../../../../libs/feature/dataviz/src';
|
|
8
8
|
import { createViewFromLayer, } from '@geospatial-sdk/core';
|
|
@@ -31,17 +31,25 @@ export class MapViewComponent {
|
|
|
31
31
|
this.excludeWfs$.next(value);
|
|
32
32
|
}
|
|
33
33
|
set selectedView(value) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
this.selectedView$.next(value);
|
|
35
|
+
}
|
|
36
|
+
set datavizConfig(value) {
|
|
37
|
+
if (value.view === 'map') {
|
|
38
|
+
this.selectedView$.next(value.view);
|
|
39
|
+
if (value.styleTMSIndex) {
|
|
40
|
+
this._styleFromConfig = value.styleTMSIndex;
|
|
41
|
+
}
|
|
42
|
+
if (value.source) {
|
|
43
|
+
this.linkFromConfig$.next(value.source);
|
|
44
|
+
}
|
|
38
45
|
}
|
|
39
46
|
}
|
|
40
|
-
selectLinkToDisplay(
|
|
41
|
-
this.
|
|
47
|
+
selectLinkToDisplay(id) {
|
|
48
|
+
this.selectedLinkId$.next(id);
|
|
42
49
|
}
|
|
43
50
|
selectStyleToDisplay(i) {
|
|
44
|
-
this.
|
|
51
|
+
this.selectedStyleId$.next(i);
|
|
52
|
+
this.styleSelected.emit(i);
|
|
45
53
|
}
|
|
46
54
|
toggleLegend() {
|
|
47
55
|
this.showLegend = !this.showLegend;
|
|
@@ -55,8 +63,13 @@ export class MapViewComponent {
|
|
|
55
63
|
this.dataService = dataService;
|
|
56
64
|
this.changeRef = changeRef;
|
|
57
65
|
this.translateService = translateService;
|
|
66
|
+
this.linkFromConfig$ = new BehaviorSubject(null);
|
|
67
|
+
this._selectedChoice = null;
|
|
68
|
+
this._styleFromConfig = null;
|
|
69
|
+
this.linkMap = new Map();
|
|
58
70
|
this.displaySource = true;
|
|
59
71
|
this.linkSelected = new EventEmitter();
|
|
72
|
+
this.styleSelected = new EventEmitter();
|
|
60
73
|
this.excludeWfs$ = new BehaviorSubject(false);
|
|
61
74
|
this.hidePreview = false;
|
|
62
75
|
this.showLegend = true;
|
|
@@ -70,22 +83,45 @@ export class MapViewComponent {
|
|
|
70
83
|
...mapApiLinks,
|
|
71
84
|
...geoDataLinksWithGeometry,
|
|
72
85
|
]), shareReplay(1));
|
|
73
|
-
this.dropdownChoices$ = this.compatibleMapLinks$.pipe(map((links) =>
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
86
|
+
this.dropdownChoices$ = this.compatibleMapLinks$.pipe(map((links) => {
|
|
87
|
+
this.linkMap.clear();
|
|
88
|
+
links.forEach((link) => this.linkMap.set(getLinkId(link), link));
|
|
89
|
+
return links.length
|
|
90
|
+
? links.map((link) => ({
|
|
91
|
+
label: getLinkLabel(link),
|
|
92
|
+
value: getLinkId(link),
|
|
93
|
+
}))
|
|
94
|
+
: [{ label: 'map.dropdown.placeholder', value: '' }];
|
|
95
|
+
}));
|
|
96
|
+
this.selectedView$ = new BehaviorSubject(null);
|
|
97
|
+
this.selectedLinkId$ = new BehaviorSubject(null);
|
|
98
|
+
this.selectedStyleId$ = new BehaviorSubject(null);
|
|
81
99
|
this.selectedSourceLink$ = combineLatest([
|
|
82
100
|
this.compatibleMapLinks$,
|
|
83
|
-
this.
|
|
101
|
+
this.linkFromConfig$,
|
|
102
|
+
this.selectedLinkId$.pipe(distinctUntilChanged()),
|
|
103
|
+
this.selectedView$,
|
|
84
104
|
]).pipe(tap(() => {
|
|
85
105
|
this.error = null;
|
|
86
|
-
}), map(([
|
|
87
|
-
|
|
88
|
-
|
|
106
|
+
}), map(([compatibleLinks, configLink, id, view]) => {
|
|
107
|
+
if (view === 'map') {
|
|
108
|
+
if (configLink &&
|
|
109
|
+
!id &&
|
|
110
|
+
compatibleLinks.some((link) => getLinkId(link) === getLinkId(configLink))) {
|
|
111
|
+
this._selectedChoice = getLinkId(configLink);
|
|
112
|
+
this.linkSelected.emit(configLink);
|
|
113
|
+
return configLink;
|
|
114
|
+
}
|
|
115
|
+
else if (id) {
|
|
116
|
+
this._selectedChoice = id;
|
|
117
|
+
this.linkSelected.emit(this.linkMap.get(id));
|
|
118
|
+
return this.linkMap.get(id);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
this.linkSelected.emit(compatibleLinks[0]);
|
|
122
|
+
return compatibleLinks[0];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
89
125
|
}));
|
|
90
126
|
this.styleLinks$ = this.selectedSourceLink$.pipe(switchMap((src) => {
|
|
91
127
|
if (src &&
|
|
@@ -104,7 +140,14 @@ export class MapViewComponent {
|
|
|
104
140
|
}));
|
|
105
141
|
}
|
|
106
142
|
return of([]);
|
|
107
|
-
}), tap(() =>
|
|
143
|
+
}), tap((styles) => {
|
|
144
|
+
if (this._styleFromConfig && this._styleFromConfig <= styles.length) {
|
|
145
|
+
this.selectedStyleId$.next(this._styleFromConfig);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
this.selectedStyleId$.next(0);
|
|
149
|
+
}
|
|
150
|
+
}), shareReplay(1));
|
|
108
151
|
this.styleDropdownChoices$ = this.styleLinks$.pipe(map((links) => links.length
|
|
109
152
|
? links.map((link, index) => ({
|
|
110
153
|
label: getLinkLabel(link),
|
|
@@ -119,7 +162,7 @@ export class MapViewComponent {
|
|
|
119
162
|
this.selectedLink$ = combineLatest([
|
|
120
163
|
this.selectedSourceLink$,
|
|
121
164
|
this.styleLinks$,
|
|
122
|
-
this.
|
|
165
|
+
this.selectedStyleId$.pipe(distinctUntilChanged()),
|
|
123
166
|
]).pipe(map(([src, styles, styleIdx]) => (styles.length ? styles[styleIdx] : src)), shareReplay(1));
|
|
124
167
|
this.currentLayers$ = combineLatest([this.selectedLink$, this.excludeWfs$]).pipe(switchMap(([link, excludeWfs]) => {
|
|
125
168
|
if (!link) {
|
|
@@ -256,7 +299,7 @@ export class MapViewComponent {
|
|
|
256
299
|
this.changeRef.detectChanges();
|
|
257
300
|
}
|
|
258
301
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapViewComponent, deps: [{ token: i1.MdViewFacade }, { token: i2.MapUtilsService }, { token: i3.DataService }, { token: i0.ChangeDetectorRef }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
259
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapViewComponent, isStandalone: true, selector: "gn-ui-map-view", inputs: { exceedsLimit: "exceedsLimit", selectedView: "selectedView", displaySource: "displaySource" }, outputs: { linkSelected: "linkSelected" }, viewQueries: [{ propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true }], ngImport: i0, template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"flex flex-col md:flex-row gap-4 py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"displaySource\"\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n\n <ng-container *ngIf=\"(styleLinks$ | async)?.length > 0; else styleDisabled\">\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n (selectValue)=\"selectStyleToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n </ng-container>\n <ng-template #styleDisabled>\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0 text-gray-400\"\n extraBtnClass=\"font-sans font-bold text-gray-400\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [disabled]=\"true\"\n ></gn-ui-dropdown-selector>\n </ng-template>\n\n <div class=\"self-end md:ml-2\">\n <gn-ui-external-viewer-button\n extraClass=\"w-[44px] h-[44px]\"\n [link]=\"selectedLink$ | async\"\n >\n </gn-ui-external-viewer-button>\n </div>\n </div>\n <ng-container *ngIf=\"hidePreview; else mapView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #mapView>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n (sourceLoadError)=\"onSourceLoadError($event)\"\n ></gn-ui-map-container>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\" translate>map.legend.title</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n translate\n >\n map.legend.title\n </gn-ui-button>\n\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick", "sourceLoadError"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature", "featureCatalog"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "extraClass"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: MapLegendComponent, selector: "gn-ui-map-legend", inputs: ["context"], outputs: ["legendStatusChange"] }], viewProviders: [provideIcons({ matClose })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
302
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapViewComponent, isStandalone: true, selector: "gn-ui-map-view", inputs: { exceedsLimit: "exceedsLimit", selectedView: "selectedView", datavizConfig: "datavizConfig", displaySource: "displaySource" }, outputs: { linkSelected: "linkSelected", styleSelected: "styleSelected" }, viewQueries: [{ propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true }], ngImport: i0, template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"flex flex-col md:flex-row gap-4 py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"displaySource\"\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n [selected]=\"_selectedChoice\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n\n <ng-container *ngIf=\"(styleLinks$ | async)?.length > 0; else styleDisabled\">\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [selected]=\"_styleFromConfig\"\n (selectValue)=\"selectStyleToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n </ng-container>\n <ng-template #styleDisabled>\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0 text-gray-400\"\n extraBtnClass=\"font-sans font-bold text-gray-400\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [disabled]=\"true\"\n ></gn-ui-dropdown-selector>\n </ng-template>\n\n <div class=\"self-end md:ml-2\">\n <gn-ui-external-viewer-button\n extraClass=\"w-[44px] h-[44px]\"\n [link]=\"selectedLink$ | async\"\n >\n </gn-ui-external-viewer-button>\n </div>\n </div>\n <ng-container *ngIf=\"hidePreview; else mapView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #mapView>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n (sourceLoadError)=\"onSourceLoadError($event)\"\n ></gn-ui-map-container>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\" translate>map.legend.title</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n translate\n >\n map.legend.title\n </gn-ui-button>\n\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick", "sourceLoadError"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature", "featureCatalog"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "extraClass"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: MapLegendComponent, selector: "gn-ui-map-legend", inputs: ["context"], outputs: ["legendStatusChange"] }], viewProviders: [provideIcons({ matClose })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
260
303
|
}
|
|
261
304
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapViewComponent, decorators: [{
|
|
262
305
|
type: Component,
|
|
@@ -273,17 +316,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
273
316
|
ExternalViewerButtonComponent,
|
|
274
317
|
ButtonComponent,
|
|
275
318
|
MapLegendComponent,
|
|
276
|
-
], viewProviders: [provideIcons({ matClose })], template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"flex flex-col md:flex-row gap-4 py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"displaySource\"\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n\n <ng-container *ngIf=\"(styleLinks$ | async)?.length > 0; else styleDisabled\">\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n (selectValue)=\"selectStyleToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n </ng-container>\n <ng-template #styleDisabled>\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0 text-gray-400\"\n extraBtnClass=\"font-sans font-bold text-gray-400\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [disabled]=\"true\"\n ></gn-ui-dropdown-selector>\n </ng-template>\n\n <div class=\"self-end md:ml-2\">\n <gn-ui-external-viewer-button\n extraClass=\"w-[44px] h-[44px]\"\n [link]=\"selectedLink$ | async\"\n >\n </gn-ui-external-viewer-button>\n </div>\n </div>\n <ng-container *ngIf=\"hidePreview; else mapView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #mapView>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n (sourceLoadError)=\"onSourceLoadError($event)\"\n ></gn-ui-map-container>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\" translate>map.legend.title</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n translate\n >\n map.legend.title\n </gn-ui-button>\n\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n </ng-template>\n</div>\n" }]
|
|
319
|
+
], viewProviders: [provideIcons({ matClose })], template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"flex flex-col md:flex-row gap-4 py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"displaySource\"\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n [selected]=\"_selectedChoice\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n\n <ng-container *ngIf=\"(styleLinks$ | async)?.length > 0; else styleDisabled\">\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [selected]=\"_styleFromConfig\"\n (selectValue)=\"selectStyleToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n </ng-container>\n <ng-template #styleDisabled>\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0 text-gray-400\"\n extraBtnClass=\"font-sans font-bold text-gray-400\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [disabled]=\"true\"\n ></gn-ui-dropdown-selector>\n </ng-template>\n\n <div class=\"self-end md:ml-2\">\n <gn-ui-external-viewer-button\n extraClass=\"w-[44px] h-[44px]\"\n [link]=\"selectedLink$ | async\"\n >\n </gn-ui-external-viewer-button>\n </div>\n </div>\n <ng-container *ngIf=\"hidePreview; else mapView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #mapView>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n (sourceLoadError)=\"onSourceLoadError($event)\"\n ></gn-ui-map-container>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\" translate>map.legend.title</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n translate\n >\n map.legend.title\n </gn-ui-button>\n\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n </ng-template>\n</div>\n" }]
|
|
277
320
|
}], ctorParameters: () => [{ type: i1.MdViewFacade }, { type: i2.MapUtilsService }, { type: i3.DataService }, { type: i0.ChangeDetectorRef }, { type: i4.TranslateService }], propDecorators: { exceedsLimit: [{
|
|
278
321
|
type: Input
|
|
279
322
|
}], selectedView: [{
|
|
280
323
|
type: Input
|
|
324
|
+
}], datavizConfig: [{
|
|
325
|
+
type: Input
|
|
281
326
|
}], displaySource: [{
|
|
282
327
|
type: Input
|
|
283
328
|
}], linkSelected: [{
|
|
284
329
|
type: Output
|
|
330
|
+
}], styleSelected: [{
|
|
331
|
+
type: Output
|
|
285
332
|
}], mapContainer: [{
|
|
286
333
|
type: ViewChild,
|
|
287
334
|
args: ['mapContainer']
|
|
288
335
|
}] } });
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL3JlY29yZC9zcmMvbGliL21hcC12aWV3L21hcC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZmVhdHVyZS9yZWNvcmQvc3JjL2xpYi9tYXAtdmlldy9tYXAtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDckUsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsSUFBSSxFQUVKLEVBQUUsRUFDRixTQUFTLEVBQ1QsVUFBVSxFQUNWLGNBQWMsR0FDZixNQUFNLE1BQU0sQ0FBQTtBQUNiLE9BQU8sRUFDTCxVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixHQUFHLEVBQ0gsV0FBVyxFQUNYLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQTtBQUt4RSxPQUFPLEVBQ0wsbUJBQW1CLEdBSXBCLE1BQU0sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUNyQixNQUFNLG1DQUFtQyxDQUFBO0FBRTFDLE9B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QUFBO0lBQ2hDLENBQUM7K0dBbFRVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLDJVQ2xHN0IsNnJKQXFJQSx5RERsREksWUFBWSxzUkFDWix5QkFBeUIscU5BQ3pCLHFCQUFxQixpS0FDckIsc0JBQXNCLHdHQUN0QixtQkFBbUIsb0dBQ25CLGtCQUFrQiw2R0FDbEIsYUFBYSxrREFDYixvQkFBb0Isb0ZBQ3BCLGVBQWUsNkdBQ2YsNkJBQTZCLHlHQUM3QixlQUFlLCtIQUNmLGtCQUFrQix3R0FFTCxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7OzRGQUVoQyxnQkFBZ0I7a0JBdEI1QixTQUFTOytCQUNFLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLHlCQUF5Qjt3QkFDekIscUJBQXFCO3dCQUNyQixzQkFBc0I7d0JBQ3RCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsZUFBZTt3QkFDZiw2QkFBNkI7d0JBQzdCLGVBQWU7d0JBQ2Ysa0JBQWtCO3FCQUNuQixpQkFDYyxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7d01BRzlCLFlBQVk7c0JBQXhCLEtBQUs7Z0JBR08sWUFBWTtzQkFBeEIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ29CLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE1hcFV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZmVhdHVyZS9tYXAvc3JjJ1xuaW1wb3J0IHsgZ2V0TGlua0xhYmVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL3NoYXJlZC9zcmMnXG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZyb20sXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzdGFydFdpdGgsXG4gIHRocm93RXJyb3IsXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzJ1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbmFsaXplLFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBNZFZpZXdGYWNhZGUgfSBmcm9tICcuLi9zdGF0ZS9tZHZpZXcuZmFjYWRlJ1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2ZlYXR1cmUvZGF0YXZpei9zcmMnXG5pbXBvcnQge1xuICBEYXRhc2V0T25saW5lUmVzb3VyY2UsXG4gIERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQge1xuICBjcmVhdGVWaWV3RnJvbUxheWVyLFxuICBNYXBDb250ZXh0LFxuICBNYXBDb250ZXh0TGF5ZXIsXG4gIFNvdXJjZUxvYWRFcnJvckV2ZW50LFxufSBmcm9tICdAZ2Vvc3BhdGlhbC1zZGsvY29yZSdcbmltcG9ydCB7XG4gIEZlYXR1cmVEZXRhaWxDb21wb25lbnQsXG4gIE1hcENvbnRhaW5lckNvbXBvbmVudCxcbiAgTWFwTGVnZW5kQ29tcG9uZW50LFxuICBwcmlvcml0aXplUGFnZVNjcm9sbCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9tYXAvc3JjJ1xuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJ2dlb2pzb24nXG5pbXBvcnQgeyBOZ0ljb25Db21wb25lbnQsIHByb3ZpZGVJY29ucyB9IGZyb20gJ0BuZy1pY29ucy9jb3JlJ1xuaW1wb3J0IHsgbWF0Q2xvc2UgfSBmcm9tICdAbmctaWNvbnMvbWF0ZXJpYWwtaWNvbnMvYmFzZWxpbmUnXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnQsXG4gIERyb3Bkb3duU2VsZWN0b3JDb21wb25lbnQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvaW5wdXRzL3NyYydcbmltcG9ydCB7XG4gIFRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgVHJhbnNsYXRlUGlwZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbn0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IEV4dGVybmFsVmlld2VyQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vZXh0ZXJuYWwtdmlld2VyLWJ1dHRvbi9leHRlcm5hbC12aWV3ZXItYnV0dG9uLmNvbXBvbmVudCdcbmltcG9ydCB7XG4gIExvYWRpbmdNYXNrQ29tcG9uZW50LFxuICBQb3B1cEFsZXJ0Q29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL3dpZGdldHMvc3JjJ1xuaW1wb3J0IHsgbWFya2VyIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJ1xuaW1wb3J0IHsgRmV0Y2hFcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9kYXRhLWZldGNoZXIvc3JjJ1xuXG5tYXJrZXIoJ21hcC5kcm9wZG93bi5wbGFjZWhvbGRlcicpXG5tYXJrZXIoJ3dmcy5mZWF0dXJlLmxpbWl0Jylcbm1hcmtlcignZGF0YXNldC5lcnJvci5yZXN0cmljdGVkQWNjZXNzJylcbm1hcmtlcignbWFwLnNlbGVjdC5zdHlsZScpXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2duLXVpLW1hcC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFwLXZpZXcuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEcm9wZG93blNlbGVjdG9yQ29tcG9uZW50LFxuICAgIE1hcENvbnRhaW5lckNvbXBvbmVudCxcbiAgICBGZWF0dXJlRGV0YWlsQ29tcG9uZW50LFxuICAgIFBvcHVwQWxlcnRDb21wb25lbnQsXG4gICAgVHJhbnNsYXRlRGlyZWN0aXZlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgTG9hZGluZ01hc2tDb21wb25lbnQsXG4gICAgTmdJY29uQ29tcG9uZW50LFxuICAgIEV4dGVybmFsVmlld2VyQnV0dG9uQ29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBNYXBMZWdlbmRDb21wb25lbnQsXG4gIF0sXG4gIHZpZXdQcm92aWRlcnM6IFtwcm92aWRlSWNvbnMoeyBtYXRDbG9zZSB9KV0sXG59KVxuZXhwb3J0IGNsYXNzIE1hcFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgc2V0IGV4Y2VlZHNMaW1pdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZXhjbHVkZVdmcyQubmV4dCh2YWx1ZSlcbiAgfVxuICBASW5wdXQoKSBzZXQgc2VsZWN0ZWRWaWV3KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT09ICdtYXAnKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGluayQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGxpbmspID0+IHtcbiAgICAgICAgdGhpcy5saW5rU2VsZWN0ZWQuZW1pdChsaW5rKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgZGlzcGxheVNvdXJjZSA9IHRydWVcbiAgQE91dHB1dCgpIGxpbmtTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YXNldE9ubGluZVJlc291cmNlPigpXG4gIEBWaWV3Q2hpbGQoJ21hcENvbnRhaW5lcicpIG1hcENvbnRhaW5lcjogTWFwQ29udGFpbmVyQ29tcG9uZW50XG5cbiAgZXhjbHVkZVdmcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKVxuICBoaWRlUHJldmlldyA9IGZhbHNlXG4gIHNlbGVjdGlvbjogRmVhdHVyZVxuICBzaG93TGVnZW5kID0gdHJ1ZVxuICBsZWdlbmRFeGlzdHMgPSBmYWxzZVxuICBsb2FkaW5nID0gZmFsc2VcbiAgZXJyb3IgPSBudWxsXG5cbiAgc2VsZWN0TGlua1RvRGlzcGxheShpOiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkTGlua0luZGV4JC5uZXh0KGkpXG4gIH1cblxuICBzZWxlY3RTdHlsZVRvRGlzcGxheShpOiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkU3R5bGVJbmRleCQubmV4dChpKVxuICB9XG5cbiAgdG9nZ2xlTGVnZW5kKCkge1xuICAgIHRoaXMuc2hvd0xlZ2VuZCA9ICF0aGlzLnNob3dMZWdlbmRcbiAgfVxuICBvbkxlZ2VuZFN0YXR1c0NoYW5nZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5sZWdlbmRFeGlzdHMgPSB2XG4gIH1cblxuICBjb21wYXRpYmxlTWFwTGlua3MkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5tZFZpZXdGYWNhZGUubWFwQXBpTGlua3MkLFxuICAgIHRoaXMubWRWaWV3RmFjYWRlLmdlb0RhdGFMaW5rc1dpdGhHZW9tZXRyeSQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbbWFwQXBpTGlua3MsIGdlb0RhdGFMaW5rc1dpdGhHZW9tZXRyeV0pID0+IFtcbiAgICAgIC4uLm1hcEFwaUxpbmtzLFxuICAgICAgLi4uZ2VvRGF0YUxpbmtzV2l0aEdlb21ldHJ5LFxuICAgIF0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gIClcblxuICBkcm9wZG93bkNob2ljZXMkID0gdGhpcy5jb21wYXRpYmxlTWFwTGlua3MkLnBpcGUoXG4gICAgbWFwKChsaW5rcykgPT5cbiAgICAgIGxpbmtzLmxlbmd0aFxuICAgICAgICA/IGxpbmtzLm1hcCgobGluaywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICBsYWJlbDogZ2V0TGlua0xhYmVsKGxpbmspLFxuICAgICAgICAgICAgdmFsdWU6IGluZGV4LFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IFt7IGxhYmVsOiAnbWFwLmRyb3Bkb3duLnBsYWNlaG9sZGVyJywgdmFsdWU6IDAgfV1cbiAgICApXG4gIClcblxuICBzZWxlY3RlZExpbmtJbmRleCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApXG4gIHByaXZhdGUgc2VsZWN0ZWRTdHlsZUluZGV4JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMClcblxuICBzZWxlY3RlZFNvdXJjZUxpbmskID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5jb21wYXRpYmxlTWFwTGlua3MkLFxuICAgIHRoaXMuc2VsZWN0ZWRMaW5rSW5kZXgkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gIF0pLnBpcGUoXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMuZXJyb3IgPSBudWxsXG4gICAgfSksXG4gICAgbWFwKChbbGlua3MsIGluZGV4XSkgPT4ge1xuICAgICAgdGhpcy5saW5rU2VsZWN0ZWQuZW1pdChsaW5rc1tpbmRleF0pXG4gICAgICByZXR1cm4gbGlua3NbaW5kZXhdXG4gICAgfSlcbiAgKVxuXG4gIHN0eWxlTGlua3MkID0gdGhpcy5zZWxlY3RlZFNvdXJjZUxpbmskLnBpcGUoXG4gICAgc3dpdGNoTWFwKChzcmMpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgc3JjICYmXG4gICAgICAgIHNyYy50eXBlID09PSAnc2VydmljZScgJiZcbiAgICAgICAgc3JjLmFjY2Vzc1NlcnZpY2VQcm90b2NvbCA9PT0gJ3RtcydcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAvLyBXQVJOSU5HOiB3aGVuIHVzaW5nIFwiZ2V0R2VvZGF0YUxpbmtzRnJvbVRtc1wiLCBtYWtlIHN1cmUgdG8gYWRkIGVycm9yIGhhbmRsaW5nIHRvIHByZXZlbnQgdGhlIHJlc3Qgb2YgdGhlIGxvZ2ljIGZyb20gZmFpbGluZ1xuICAgICAgICAgIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIFRNUyBlbmRwb2ludCBpcyBpbiBlcnJvclxuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0R2VvZGF0YUxpbmtzRnJvbVRtcyhcbiAgICAgICAgICAgIHNyYyBhcyBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvbixcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBmb3IgbWFwbGlicmUtc3R5bGUgbGlua3MgYmVjYXVzZSB3aGVuIGEgVE1TIHNlcnZpY2UgaGFzIG5vIHN0eWxlcyxcbiAgICAgICAgICAvLyBnZXRHZW9kYXRhTGlua3NGcm9tVG1zIHJldHVybnMgdGhlIG9yaWdpbmFsIFRNUyBsaW5rLCB3aGljaCBpc24ndCBhIG1hcGxpYnJlLXN0eWxlIGxpbmtcbiAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAobGlua3MpID0+XG4gICAgICAgICAgICAgIGxpbmtzPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGxpbmspID0+XG4gICAgICAgICAgICAgICAgICBsaW5rLnR5cGUgPT09ICdzZXJ2aWNlJyAmJlxuICAgICAgICAgICAgICAgICAgbGluay5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICdtYXBsaWJyZS1zdHlsZSdcbiAgICAgICAgICAgICAgKSB8fCBbXVxuICAgICAgICAgICksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gb2Yoc3JjKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBvZihbXSlcbiAgICB9KSxcbiAgICB0YXAoKCkgPT4gdGhpcy5zZWxlY3RlZFN0eWxlSW5kZXgkLm5leHQoMCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gIClcblxuICBzdHlsZURyb3Bkb3duQ2hvaWNlcyQgPSB0aGlzLnN0eWxlTGlua3MkLnBpcGUoXG4gICAgbWFwKChsaW5rcykgPT5cbiAgICAgIGxpbmtzLmxlbmd0aFxuICAgICAgICA/IGxpbmtzLm1hcCgobGluaywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICBsYWJlbDogZ2V0TGlua0xhYmVsKGxpbmspLFxuICAgICAgICAgICAgdmFsdWU6IGluZGV4LFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGFiZWw6ICdcXHUwMEEwXFx1MDBBMFxcdTAwQTBcXHUwMEEwJyxcbiAgICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICApXG4gIClcblxuICBzZWxlY3RlZExpbmskID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5zZWxlY3RlZFNvdXJjZUxpbmskLFxuICAgIHRoaXMuc3R5bGVMaW5rcyQsXG4gICAgdGhpcy5zZWxlY3RlZFN0eWxlSW5kZXgkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbc3JjLCBzdHlsZXMsIHN0eWxlSWR4XSkgPT4gKHN0eWxlcy5sZW5ndGggPyBzdHlsZXNbc3R5bGVJZHhdIDogc3JjKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKVxuXG4gIGN1cnJlbnRMYXllcnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3RlZExpbmskLCB0aGlzLmV4Y2x1ZGVXZnMkXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtsaW5rLCBleGNsdWRlV2ZzXSkgPT4ge1xuICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgIHJldHVybiBvZihbXSlcbiAgICAgIH1cbiAgICAgIGlmIChleGNsdWRlV2ZzICYmIGxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAnd2ZzJykge1xuICAgICAgICB0aGlzLmhpZGVQcmV2aWV3ID0gdHJ1ZVxuICAgICAgICByZXR1cm4gb2YoW10pXG4gICAgICB9XG4gICAgICB0aGlzLmhpZGVQcmV2aWV3ID0gZmFsc2VcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgIGlmIChsaW5rLmFjY2Vzc1Jlc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcignZGF0YXNldC5lcnJvci5yZXN0cmljdGVkQWNjZXNzJylcbiAgICAgICAgcmV0dXJuIG9mKFtdKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGF5ZXJGcm9tTGluayhsaW5rKS5waXBlKFxuICAgICAgICBtYXAoKGxheWVyKSA9PiBbbGF5ZXJdKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZSlcbiAgICAgICAgICByZXR1cm4gb2YoW10pXG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKVxuICAgICAgKVxuICAgIH0pXG4gIClcblxuICBtYXBDb250ZXh0JDogT2JzZXJ2YWJsZTxNYXBDb250ZXh0PiA9IHRoaXMuY3VycmVudExheWVycyQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGxheWVycykgPT5cbiAgICAgIGZyb20oY3JlYXRlVmlld0Zyb21MYXllcihsYXllcnNbMF0pKS5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSwgLy8gY291bGQgbm90IHpvb20gb24gdGhlIGxheWVyOiB1c2UgdGhlIHJlY29yZCBleHRlbnRcbiAgICAgICAgbWFwKCh2aWV3KSA9PiAoe1xuICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICB2aWV3LFxuICAgICAgICB9KSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICBzdGFydFdpdGgoe1xuICAgICAgbGF5ZXJzOiBbXSxcbiAgICAgIHZpZXc6IG51bGwsXG4gICAgfSksXG4gICAgd2l0aExhdGVzdEZyb20odGhpcy5tZFZpZXdGYWNhZGUubWV0YWRhdGEkKSxcbiAgICBtYXAoKFtjb250ZXh0LCBtZXRhZGF0YV0pID0+IHtcbiAgICAgIGlmIChjb250ZXh0LnZpZXcpIHJldHVybiBjb250ZXh0XG4gICAgICBjb25zdCBleHRlbnQgPSB0aGlzLm1hcFV0aWxzLmdldFJlY29yZEV4dGVudChtZXRhZGF0YSlcbiAgICAgIGNvbnN0IHZpZXcgPSBleHRlbnQgPyB7IGV4dGVudCB9IDogbnVsbFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgdmlldyxcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtZFZpZXdGYWNhZGU6IE1kVmlld0ZhY2FkZSxcbiAgICBwcml2YXRlIG1hcFV0aWxzOiBNYXBVdGlsc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IG1hcCA9IGF3YWl0IHRoaXMubWFwQ29udGFpbmVyLm9wZW5sYXllcnNNYXBcbiAgICBwcmlvcml0aXplUGFnZVNjcm9sbChtYXAuZ2V0SW50ZXJhY3Rpb25zKCkpXG4gIH1cblxuICBvbk1hcEZlYXR1cmVTZWxlY3QoZmVhdHVyZXM6IEZlYXR1cmVbXSk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKVxuICAgIHRoaXMuc2VsZWN0aW9uID0gZmVhdHVyZXM/Lmxlbmd0aCA+IDAgJiYgZmVhdHVyZXNbMF1cbiAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgIC8vIEZJWE1FOiByZXN0b3JlIHN0eWxpbmcgb2Ygc2VsZWN0ZWQgZmVhdHVyZVxuICAgICAgLy8gdGhpcy5zZWxlY3Rpb24uc2V0U3R5bGUodGhpcy5zZWxlY3Rpb25TdHlsZSlcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VSZWYuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cblxuICBvblNvdXJjZUxvYWRFcnJvcihlcnJvcjogU291cmNlTG9hZEVycm9yRXZlbnQpIHtcbiAgICBpZiAoZXJyb3IuaHR0cFN0YXR1cyA9PT0gNDAzIHx8IGVycm9yLmh0dHBTdGF0dXMgPT09IDQwMSkge1xuICAgICAgdGhpcy5lcnJvciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBkYXRhc2V0LmVycm9yLmZvcmJpZGRlbmApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZGF0YXNldC5lcnJvci5odHRwYCwge1xuICAgICAgICBpbmZvOiBlcnJvci5odHRwU3RhdHVzLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXNldFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgIC8vIEZJWE1FOiByZXN0b3JlIHN0eWxpbmcgb2Ygc2VsZWN0ZWQgZmVhdHVyZVxuICAgICAgLy8gdGhpcy5zZWxlY3Rpb24uc2V0U3R5bGUobnVsbClcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb24gPSBudWxsXG4gIH1cblxuICBnZXRMYXllckZyb21MaW5rKGxpbms6IERhdGFzZXRPbmxpbmVSZXNvdXJjZSk6IE9ic2VydmFibGU8TWFwQ29udGV4dExheWVyPiB7XG4gICAgaWYgKGxpbmsudHlwZSA9PT0gJ3NlcnZpY2UnICYmIGxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAnd21zJykge1xuICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgdXJsOiBsaW5rLnVybC50b1N0cmluZygpLFxuICAgICAgICB0eXBlOiAnd21zJyxcbiAgICAgICAgbmFtZTogbGluay5uYW1lLFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbGluay50eXBlID09PSAnc2VydmljZScgJiZcbiAgICAgIGxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAndG1zJ1xuICAgICkge1xuICAgICAgLy8gRklYTUU6IGhlcmUgd2UncmUgYXNzdW1pbmcgdGhhdCB0aGUgVE1TIHNlcnZlcyB2ZWN0b3IgdGlsZXMgb25seTsgc2hvdWxkIGJlIGNoZWNrZWQgd2l0aCBvZ2MtY2xpZW50IGZpcnN0XG4gICAgICByZXR1cm4gb2Yoe1xuICAgICAgICB1cmw6IGxpbmsudXJsLnRvU3RyaW5nKCkucmVwbGFjZSgvXFwvPyQvLCAnL3t6fS97eH0ve3l9LnBiZicpLFxuICAgICAgICB0eXBlOiAneHl6JyxcbiAgICAgICAgdGlsZUZvcm1hdDogJ2FwcGxpY2F0aW9uL3ZuZC5tYXBib3gtdmVjdG9yLXRpbGUnLFxuICAgICAgICBuYW1lOiBsaW5rLm5hbWUsXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBsaW5rLnR5cGUgPT09ICdzZXJ2aWNlJyAmJlxuICAgICAgbGluay5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICdtYXBsaWJyZS1zdHlsZSdcbiAgICApIHtcbiAgICAgIHJldHVybiBvZih7XG4gICAgICAgIHR5cGU6ICdtYXBsaWJyZS1zdHlsZScsXG4gICAgICAgIG5hbWU6IGxpbmsubmFtZSxcbiAgICAgICAgc3R5bGVVcmw6IGxpbmsudXJsLnRvU3RyaW5nKCksXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBsaW5rLnR5cGUgPT09ICdzZXJ2aWNlJyAmJlxuICAgICAgbGluay5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICd3bXRzJ1xuICAgICkge1xuICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgdXJsOiBsaW5rLnVybC50b1N0cmluZygpLFxuICAgICAgICB0eXBlOiAnd210cycsXG4gICAgICAgIG5hbWU6IGxpbmsubmFtZSxcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChsaW5rLnR5cGUgPT09ICdzZXJ2aWNlJyAmJlxuICAgICAgICAobGluay5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICd3ZnMnIHx8XG4gICAgICAgICAgbGluay5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICdlc3JpUmVzdCcgfHxcbiAgICAgICAgICBsaW5rLmFjY2Vzc1NlcnZpY2VQcm90b2NvbCA9PT0gJ29nY0ZlYXR1cmVzJykpIHx8XG4gICAgICBsaW5rLnR5cGUgPT09ICdkb3dubG9hZCdcbiAgICApIHtcbiAgICAgIGNvbnN0IGNhY2hlQWN0aXZlID0gdHJ1ZSAvLyBUT0RPIGltcGxlbWVudCB3aGV0aGVyIHNob3VsZCBiZSB0cnVlIG9yIGZhbHNlXG4gICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5yZWFkQXNHZW9Kc29uKGxpbmssIGNhY2hlQWN0aXZlKS5waXBlKFxuICAgICAgICBtYXAoKGRhdGEpID0+ICh7XG4gICAgICAgICAgdHlwZTogJ2dlb2pzb24nLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAncHJvdG9jb2wgbm90IHN1cHBvcnRlZCcpXG4gIH1cbiAgaGFuZGxlRXJyb3IoZXJyb3I6IEZldGNoRXJyb3IgfCBFcnJvciB8IHN0cmluZykge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEZldGNoRXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgYGRhdGFzZXQuZXJyb3IuJHtlcnJvci50eXBlfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBpbmZvOiBlcnJvci5pbmZvLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICBjb25zb2xlLndhcm4oZXJyb3IubWVzc2FnZSlcbiAgICB9IGVsc2UgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlcnJvci5tZXNzYWdlKVxuICAgICAgY29uc29sZS53YXJuKGVycm9yLnN0YWNrIHx8IGVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZXJyb3IpXG4gICAgICBjb25zb2xlLndhcm4oZXJyb3IpXG4gICAgfVxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgdGhpcy5jaGFuZ2VSZWYuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgZ2FwLVsxM3B4XVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IGdhcC00IHB5LTQgcHgtNSBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWNvbG9yLWJvcmRlciByb3VuZGVkLWxnIG10LTZcIlxuICA+XG4gICAgPGduLXVpLWRyb3Bkb3duLXNlbGVjdG9yXG4gICAgICAqbmdJZj1cImRpc3BsYXlTb3VyY2VcIlxuICAgICAgY2xhc3M9XCJ3LWZ1bGwgbWQ6ZmxleC0xIG1kOm1pbi13LTBcIlxuICAgICAgZXh0cmFCdG5DbGFzcz1cImZvbnQtc2FucyBmb250LWJvbGRcIlxuICAgICAgW3RpdGxlXT1cIidtYXAuc2VsZWN0LmxheWVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbY2hvaWNlc109XCJkcm9wZG93bkNob2ljZXMkIHwgYXN5bmNcIlxuICAgICAgKHNlbGVjdFZhbHVlKT1cInNlbGVjdExpbmtUb0Rpc3BsYXkoJGV2ZW50KVwiXG4gICAgPjwvZ24tdWktZHJvcGRvd24tc2VsZWN0b3I+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHN0eWxlTGlua3MkIHwgYXN5bmMpPy5sZW5ndGggPiAwOyBlbHNlIHN0eWxlRGlzYWJsZWRcIj5cbiAgICAgIDxnbi11aS1kcm9wZG93bi1zZWxlY3RvclxuICAgICAgICBjbGFzcz1cInctZnVsbCBtZDpmbGV4LTEgbWQ6bWluLXctMFwiXG4gICAgICAgIGV4dHJhQnRuQ2xhc3M9XCJmb250LXNhbnMgZm9udC1ib2xkXCJcbiAgICAgICAgW3RpdGxlXT1cIidtYXAuc2VsZWN0LnN0eWxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtjaG9pY2VzXT1cInN0eWxlRHJvcGRvd25DaG9pY2VzJCB8IGFzeW5jXCJcbiAgICAgICAgKHNlbGVjdFZhbHVlKT1cInNlbGVjdFN0eWxlVG9EaXNwbGF5KCRldmVudClcIlxuICAgICAgPjwvZ24tdWktZHJvcGRvd24tc2VsZWN0b3I+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNzdHlsZURpc2FibGVkPlxuICAgICAgPGduLXVpLWRyb3Bkb3duLXNlbGVjdG9yXG4gICAgICAgIGNsYXNzPVwidy1mdWxsIG1kOmZsZXgtMSBtZDptaW4tdy0wIHRleHQtZ3JheS00MDBcIlxuICAgICAgICBleHRyYUJ0bkNsYXNzPVwiZm9udC1zYW5zIGZvbnQtYm9sZCB0ZXh0LWdyYXktNDAwXCJcbiAgICAgICAgW3RpdGxlXT1cIidtYXAuc2VsZWN0LnN0eWxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtjaG9pY2VzXT1cInN0eWxlRHJvcGRvd25DaG9pY2VzJCB8IGFzeW5jXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxuICAgICAgPjwvZ24tdWktZHJvcGRvd24tc2VsZWN0b3I+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXYgY2xhc3M9XCJzZWxmLWVuZCBtZDptbC0yXCI+XG4gICAgICA8Z24tdWktZXh0ZXJuYWwtdmlld2VyLWJ1dHRvblxuICAgICAgICBleHRyYUNsYXNzPVwidy1bNDRweF0gaC1bNDRweF1cIlxuICAgICAgICBbbGlua109XCJzZWxlY3RlZExpbmskIHwgYXN5bmNcIlxuICAgICAgPlxuICAgICAgPC9nbi11aS1leHRlcm5hbC12aWV3ZXItYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhpZGVQcmV2aWV3OyBlbHNlIG1hcFZpZXdcIj5cbiAgICA8Z24tdWktcG9wdXAtYWxlcnRcbiAgICAgIHR5cGU9XCJ3YXJuaW5nXCJcbiAgICAgIGljb249XCJtYXRFcnJvck91dGxpbmVPdXRsaW5lXCJcbiAgICAgIGNsYXNzPVwiYmxvY2sgaC0xMiBwLTFcIlxuICAgID5cbiAgICAgIDxzcGFuIHRyYW5zbGF0ZT5yZWNvcmQuZmVhdHVyZS5saW1pdDwvc3Bhbj5cbiAgICA8L2duLXVpLXBvcHVwLWFsZXJ0PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNtYXBWaWV3PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICA+XG4gICAgICA8Z24tdWktbWFwLWNvbnRhaW5lclxuICAgICAgICAjbWFwQ29udGFpbmVyXG4gICAgICAgIFtjb250ZXh0XT1cIm1hcENvbnRleHQkIHwgYXN5bmNcIlxuICAgICAgICAoZmVhdHVyZXNDbGljayk9XCJvbk1hcEZlYXR1cmVTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgIChzb3VyY2VMb2FkRXJyb3IpPVwib25Tb3VyY2VMb2FkRXJyb3IoJGV2ZW50KVwiXG4gICAgICA+PC9nbi11aS1tYXAtY29udGFpbmVyPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRvcC1bMWVtXSByaWdodC1bMWVtXSBwLTMgYmctd2hpdGUgYWJzb2x1dGUgb3ZlcmZsb3cteS1hdXRvIG92ZXJmbG93LXgtaGlkZGVuIG1heC1oLTcyIHctNTZcIlxuICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFzZWxlY3Rpb25cIlxuICAgICAgPlxuICAgICAgICA8Z24tdWktYnV0dG9uXG4gICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwicmVzZXRTZWxlY3Rpb24oKVwiXG4gICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgIC0tZ24tdWktYnV0dG9uLXBhZGRpbmc6IDBweDtcbiAgICAgICAgICAgIC0tZ24tdWktYnV0dG9uLXdpZHRoOiAyNHB4O1xuICAgICAgICAgICAgLS1nbi11aS1idXR0b24taGVpZ2h0OiAyNHB4O1xuICAgICAgICAgIFwiXG4gICAgICAgICAgZXh0cmFDbGFzcz1cImFic29sdXRlIHJpZ2h0LVswLjVlbV0gbWwtWzhweF0gbXItWzEwcHhdXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRDbG9zZVwiIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRleHQtc21cIj48L25nLWljb24+XG4gICAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgICA8Z24tdWktZmVhdHVyZS1kZXRhaWxcbiAgICAgICAgICBbZmVhdHVyZUNhdGFsb2ddPVwibWRWaWV3RmFjYWRlLmZlYXR1cmVDYXRhbG9nJCB8IGFzeW5jXCJcbiAgICAgICAgICBbZmVhdHVyZV09XCJzZWxlY3Rpb25cIlxuICAgICAgICA+PC9nbi11aS1mZWF0dXJlLWRldGFpbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidG9wLVsxZW1dIHAtMyBiZy13aGl0ZSBhYnNvbHV0ZSBvdmVyZmxvdy15LWF1dG8gb3ZlcmZsb3cteC1oaWRkZW4gbWF4LWgtNzIgdy01NlwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ3JpZ2h0LVsxZW1dJzogIXNlbGVjdGlvbiwgJ3JpZ2h0LVsxNmVtXSc6IHNlbGVjdGlvbiB9XCJcbiAgICAgICAgW2hpZGRlbl09XCIhc2hvd0xlZ2VuZCB8fCAhbGVnZW5kRXhpc3RzXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LWJvbGRcIiB0cmFuc2xhdGU+bWFwLmxlZ2VuZC50aXRsZTwvZGl2PlxuICAgICAgICAgIDxnbi11aS1idXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJsaWdodFwiXG4gICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwidG9nZ2xlTGVnZW5kKClcIlxuICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgLS1nbi11aS1idXR0b24tcGFkZGluZzogMHB4O1xuICAgICAgICAgICAgICAtLWduLXVpLWJ1dHRvbi13aWR0aDogMjRweDtcbiAgICAgICAgICAgICAgLS1nbi11aS1idXR0b24taGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M9XCJtbC1bOHB4XSBtci1bMTBweF1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRDbG9zZVwiIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHRleHQtc21cIj48L25nLWljb24+XG4gICAgICAgICAgPC9nbi11aS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Z24tdWktbWFwLWxlZ2VuZFxuICAgICAgICAgIFtjb250ZXh0XT1cIm1hcENvbnRleHQkIHwgYXN5bmNcIlxuICAgICAgICAgIChsZWdlbmRTdGF0dXNDaGFuZ2UpPVwib25MZWdlbmRTdGF0dXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2duLXVpLW1hcC1sZWdlbmQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFzaG93TGVnZW5kICYmIGxlZ2VuZEV4aXN0cyAmJiAhc2VsZWN0aW9uXCJcbiAgICAgICAgdHlwZT1cIm91dGxpbmVcIlxuICAgICAgICAoYnV0dG9uQ2xpY2spPVwidG9nZ2xlTGVnZW5kKClcIlxuICAgICAgICBleHRyYUNsYXNzPVwiYWJzb2x1dGUgdG9wLVsxZW1dIHJpZ2h0LVsxZW1dIHJvdW5kZWQgcC0xIHRleHQteHMgYmctd2hpdGVcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgbWFwLmxlZ2VuZC50aXRsZVxuICAgICAgPC9nbi11aS1idXR0b24+XG5cbiAgICAgIDxnbi11aS1sb2FkaW5nLW1hc2tcbiAgICAgICAgKm5nSWY9XCJsb2FkaW5nXCJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wXCJcbiAgICAgICAgW21lc3NhZ2VdPVwiJ21hcC5sb2FkaW5nLmRhdGEnIHwgdHJhbnNsYXRlXCJcbiAgICAgID48L2duLXVpLWxvYWRpbmctbWFzaz5cbiAgICAgIDxnbi11aS1wb3B1cC1hbGVydFxuICAgICAgICAqbmdJZj1cImVycm9yXCJcbiAgICAgICAgdHlwZT1cIndhcm5pbmdcIlxuICAgICAgICBpY29uPVwibWF0RXJyb3JPdXRsaW5lT3V0bGluZVwiXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgbS0yIGluc2V0LTBcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiB0cmFuc2xhdGU+e3sgZXJyb3IgfX08L3NwYW4+XG4gICAgICA8L2duLXVpLXBvcHVwLWFsZXJ0PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL3JlY29yZC9zcmMvbGliL21hcC12aWV3L21hcC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZmVhdHVyZS9yZWNvcmQvc3JjL2xpYi9tYXAtdmlldy9tYXAtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ2hGLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLElBQUksRUFFSixFQUFFLEVBQ0YsU0FBUyxFQUNULFVBQVUsRUFDVixjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUE7QUFDYixPQUFPLEVBQ0wsVUFBVSxFQUNWLG9CQUFvQixFQUNwQixRQUFRLEVBQ1IsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBRVQsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQTtBQUt4RSxPQUFPLEVBQ0wsbUJBQW1CLEdBSXBCLE1BQU0sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUNyQixNQUFNLG1DQUFtQyxDQUFBO0FBRTFDLE9B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QUdULHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1oseUJBQXlCO3dCQUN6QixxQkFBcUI7d0JBQ3JCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixlQUFlO3dCQUNmLDZCQUE2Qjt3QkFDN0IsZUFBZTt3QkFDZixrQkFBa0I7cUJBQ25CLGlCQUNjLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQzt3TUFHOUIsWUFBWTtzQkFBeEIsS0FBSztnQkFRTyxZQUFZO3NCQUF4QixLQUFLO2dCQUdPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBV0csYUFBYTtzQkFBckIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ29CLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE1hcFV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZmVhdHVyZS9tYXAvc3JjJ1xuaW1wb3J0IHsgZ2V0TGlua0lkLCBnZXRMaW5rTGFiZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvc2hhcmVkL3NyYydcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZnJvbSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgdGhyb3dFcnJvcixcbiAgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMnXG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmluYWxpemUsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IE1kVmlld0ZhY2FkZSB9IGZyb20gJy4uL3N0YXRlL21kdmlldy5mYWNhZGUnXG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZmVhdHVyZS9kYXRhdml6L3NyYydcbmltcG9ydCB7XG4gIERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgRGF0YXNldFNlcnZpY2VEaXN0cmlidXRpb24sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7XG4gIGNyZWF0ZVZpZXdGcm9tTGF5ZXIsXG4gIE1hcENvbnRleHQsXG4gIE1hcENvbnRleHRMYXllcixcbiAgU291cmNlTG9hZEVycm9yRXZlbnQsXG59IGZyb20gJ0BnZW9zcGF0aWFsLXNkay9jb3JlJ1xuaW1wb3J0IHtcbiAgRmVhdHVyZURldGFpbENvbXBvbmVudCxcbiAgTWFwQ29udGFpbmVyQ29tcG9uZW50LFxuICBNYXBMZWdlbmRDb21wb25lbnQsXG4gIHByaW9yaXRpemVQYWdlU2Nyb2xsLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL21hcC9zcmMnXG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnZ2VvanNvbidcbmltcG9ydCB7IE5nSWNvbkNvbXBvbmVudCwgcHJvdmlkZUljb25zIH0gZnJvbSAnQG5nLWljb25zL2NvcmUnXG5pbXBvcnQgeyBtYXRDbG9zZSB9IGZyb20gJ0BuZy1pY29ucy9tYXRlcmlhbC1pY29ucy9iYXNlbGluZSdcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgRHJvcGRvd25TZWxlY3RvckNvbXBvbmVudCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9pbnB1dHMvc3JjJ1xuaW1wb3J0IHtcbiAgVHJhbnNsYXRlRGlyZWN0aXZlLFxuICBUcmFuc2xhdGVQaXBlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxufSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgRXh0ZXJuYWxWaWV3ZXJCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9leHRlcm5hbC12aWV3ZXItYnV0dG9uL2V4dGVybmFsLXZpZXdlci1idXR0b24uY29tcG9uZW50J1xuaW1wb3J0IHtcbiAgTG9hZGluZ01hc2tDb21wb25lbnQsXG4gIFBvcHVwQWxlcnRDb21wb25lbnQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvd2lkZ2V0cy9zcmMnXG5pbXBvcnQgeyBtYXJrZXIgfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInXG5pbXBvcnQgeyBGZXRjaEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL2RhdGEtZmV0Y2hlci9zcmMnXG5cbm1hcmtlcignbWFwLmRyb3Bkb3duLnBsYWNlaG9sZGVyJylcbm1hcmtlcignd2ZzLmZlYXR1cmUubGltaXQnKVxubWFya2VyKCdkYXRhc2V0LmVycm9yLnJlc3RyaWN0ZWRBY2Nlc3MnKVxubWFya2VyKCdtYXAuc2VsZWN0LnN0eWxlJylcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktbWFwLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXAtdmlldy5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIERyb3Bkb3duU2VsZWN0b3JDb21wb25lbnQsXG4gICAgTWFwQ29udGFpbmVyQ29tcG9uZW50LFxuICAgIEZlYXR1cmVEZXRhaWxDb21wb25lbnQsXG4gICAgUG9wdXBBbGVydENvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVEaXJlY3RpdmUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBMb2FkaW5nTWFza0NvbXBvbmVudCxcbiAgICBOZ0ljb25Db21wb25lbnQsXG4gICAgRXh0ZXJuYWxWaWV3ZXJCdXR0b25Db21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIE1hcExlZ2VuZENvbXBvbmVudCxcbiAgXSxcbiAgdmlld1Byb3ZpZGVyczogW3Byb3ZpZGVJY29ucyh7IG1hdENsb3NlIH0pXSxcbn0pXG5leHBvcnQgY2xhc3MgTWFwVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBzZXQgZXhjZWVkc0xpbWl0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5leGNsdWRlV2ZzJC5uZXh0KHZhbHVlKVxuICB9XG4gIGxpbmtGcm9tQ29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbClcbiAgX3NlbGVjdGVkQ2hvaWNlID0gbnVsbFxuICBfc3R5bGVGcm9tQ29uZmlnID0gbnVsbFxuXG4gIGxpbmtNYXA6IE1hcDxzdHJpbmcsIERhdGFzZXRPbmxpbmVSZXNvdXJjZT4gPSBuZXcgTWFwKClcbiAgQElucHV0KCkgc2V0IHNlbGVjdGVkVmlldyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZpZXckLm5leHQodmFsdWUpXG4gIH1cbiAgQElucHV0KCkgc2V0IGRhdGF2aXpDb25maWcodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZS52aWV3ID09PSAnbWFwJykge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXckLm5leHQodmFsdWUudmlldylcbiAgICAgIGlmICh2YWx1ZS5zdHlsZVRNU0luZGV4KSB7XG4gICAgICAgIHRoaXMuX3N0eWxlRnJvbUNvbmZpZyA9IHZhbHVlLnN0eWxlVE1TSW5kZXhcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZS5zb3VyY2UpIHtcbiAgICAgICAgdGhpcy5saW5rRnJvbUNvbmZpZyQubmV4dCh2YWx1ZS5zb3VyY2UpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIGRpc3BsYXlTb3VyY2UgPSB0cnVlXG4gIEBPdXRwdXQoKSBsaW5rU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFzZXRPbmxpbmVSZXNvdXJjZT4oKVxuICBAT3V0cHV0KCkgc3R5bGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpXG4gIEBWaWV3Q2hpbGQoJ21hcENvbnRhaW5lcicpIG1hcENvbnRhaW5lcjogTWFwQ29udGFpbmVyQ29tcG9uZW50XG5cbiAgZXhjbHVkZVdmcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKVxuICBoaWRlUHJldmlldyA9IGZhbHNlXG4gIHNlbGVjdGlvbjogRmVhdHVyZVxuICBzaG93TGVnZW5kID0gdHJ1ZVxuICBsZWdlbmRFeGlzdHMgPSBmYWxzZVxuICBsb2FkaW5nID0gZmFsc2VcbiAgZXJyb3IgPSBudWxsXG5cbiAgc2VsZWN0TGlua1RvRGlzcGxheShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZExpbmtJZCQubmV4dChpZClcbiAgfVxuXG4gIHNlbGVjdFN0eWxlVG9EaXNwbGF5KGk6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRTdHlsZUlkJC5uZXh0KGkpXG4gICAgdGhpcy5zdHlsZVNlbGVjdGVkLmVtaXQoaSlcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZCgpIHtcbiAgICB0aGlzLnNob3dMZWdlbmQgPSAhdGhpcy5zaG93TGVnZW5kXG4gIH1cbiAgb25MZWdlbmRTdGF0dXNDaGFuZ2UodjogYm9vbGVhbikge1xuICAgIHRoaXMubGVnZW5kRXhpc3RzID0gdlxuICB9XG5cbiAgY29tcGF0aWJsZU1hcExpbmtzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMubWRWaWV3RmFjYWRlLm1hcEFwaUxpbmtzJCxcbiAgICB0aGlzLm1kVmlld0ZhY2FkZS5nZW9EYXRhTGlua3NXaXRoR2VvbWV0cnkkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW21hcEFwaUxpbmtzLCBnZW9EYXRhTGlua3NXaXRoR2VvbWV0cnldKSA9PiBbXG4gICAgICAuLi5tYXBBcGlMaW5rcyxcbiAgICAgIC4uLmdlb0RhdGFMaW5rc1dpdGhHZW9tZXRyeSxcbiAgICBdKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApXG5cbiAgZHJvcGRvd25DaG9pY2VzJCA9IHRoaXMuY29tcGF0aWJsZU1hcExpbmtzJC5waXBlKFxuICAgIG1hcCgobGlua3MpID0+IHtcbiAgICAgIHRoaXMubGlua01hcC5jbGVhcigpXG4gICAgICBsaW5rcy5mb3JFYWNoKChsaW5rOiBEYXRhc2V0T25saW5lUmVzb3VyY2UpID0+XG4gICAgICAgIHRoaXMubGlua01hcC5zZXQoZ2V0TGlua0lkKGxpbmspLCBsaW5rKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGxpbmtzLmxlbmd0aFxuICAgICAgICA/IGxpbmtzLm1hcCgobGluaykgPT4gKHtcbiAgICAgICAgICAgIGxhYmVsOiBnZXRMaW5rTGFiZWwobGluayksXG4gICAgICAgICAgICB2YWx1ZTogZ2V0TGlua0lkKGxpbmspLFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IFt7IGxhYmVsOiAnbWFwLmRyb3Bkb3duLnBsYWNlaG9sZGVyJywgdmFsdWU6ICcnIH1dXG4gICAgfSlcbiAgKVxuXG4gIHNlbGVjdGVkVmlldyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpXG4gIHNlbGVjdGVkTGlua0lkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbClcbiAgc2VsZWN0ZWRTdHlsZUlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbClcblxuICBzZWxlY3RlZFNvdXJjZUxpbmskID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5jb21wYXRpYmxlTWFwTGlua3MkLFxuICAgIHRoaXMubGlua0Zyb21Db25maWckLFxuICAgIHRoaXMuc2VsZWN0ZWRMaW5rSWQkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gICAgdGhpcy5zZWxlY3RlZFZpZXckLFxuICBdKS5waXBlKFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLmVycm9yID0gbnVsbFxuICAgIH0pLFxuICAgIG1hcCgoW2NvbXBhdGlibGVMaW5rcywgY29uZmlnTGluaywgaWQsIHZpZXddKSA9PiB7XG4gICAgICBpZiAodmlldyA9PT0gJ21hcCcpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbmZpZ0xpbmsgJiZcbiAgICAgICAgICAhaWQgJiZcbiAgICAgICAgICBjb21wYXRpYmxlTGlua3Muc29tZShcbiAgICAgICAgICAgIChsaW5rKSA9PiBnZXRMaW5rSWQobGluaykgPT09IGdldExpbmtJZChjb25maWdMaW5rKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDaG9pY2UgPSBnZXRMaW5rSWQoY29uZmlnTGluaylcbiAgICAgICAgICB0aGlzLmxpbmtTZWxlY3RlZC5lbWl0KGNvbmZpZ0xpbmspXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZ0xpbmtcbiAgICAgICAgfSBlbHNlIGlmIChpZCkge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ2hvaWNlID0gaWRcbiAgICAgICAgICB0aGlzLmxpbmtTZWxlY3RlZC5lbWl0KHRoaXMubGlua01hcC5nZXQoaWQpKVxuICAgICAgICAgIHJldHVybiB0aGlzLmxpbmtNYXAuZ2V0KGlkKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubGlua1NlbGVjdGVkLmVtaXQoY29tcGF0aWJsZUxpbmtzWzBdKVxuICAgICAgICAgIHJldHVybiBjb21wYXRpYmxlTGlua3NbMF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIClcblxuICBzdHlsZUxpbmtzJCA9IHRoaXMuc2VsZWN0ZWRTb3VyY2VMaW5rJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoc3JjKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHNyYyAmJlxuICAgICAgICBzcmMudHlwZSA9PT0gJ3NlcnZpY2UnICYmXG4gICAgICAgIHNyYy5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICd0bXMnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgLy8gV0FSTklORzogd2hlbiB1c2luZyBcImdldEdlb2RhdGFMaW5rc0Zyb21UbXNcIiwgbWFrZSBzdXJlIHRvIGFkZCBlcnJvciBoYW5kbGluZyB0byBwcmV2ZW50IHRoZSByZXN0IG9mIHRoZSBsb2dpYyBmcm9tIGZhaWxpbmdcbiAgICAgICAgICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBUTVMgZW5kcG9pbnQgaXMgaW4gZXJyb3JcbiAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEdlb2RhdGFMaW5rc0Zyb21UbXMoXG4gICAgICAgICAgICBzcmMgYXMgRGF0YXNldFNlcnZpY2VEaXN0cmlidXRpb24sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgIClcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9yIG1hcGxpYnJlLXN0eWxlIGxpbmtzIGJlY2F1c2Ugd2hlbiBhIFRNUyBzZXJ2aWNlIGhhcyBubyBzdHlsZXMsXG4gICAgICAgICAgLy8gZ2V0R2VvZGF0YUxpbmtzRnJvbVRtcyByZXR1cm5zIHRoZSBvcmlnaW5hbCBUTVMgbGluaywgd2hpY2ggaXNuJ3QgYSBtYXBsaWJyZS1zdHlsZSBsaW5rXG4gICAgICAgICAgbWFwKFxuICAgICAgICAgICAgKGxpbmtzKSA9PlxuICAgICAgICAgICAgICBsaW5rcz8uZmlsdGVyKFxuICAgICAgICAgICAgICAgIChsaW5rKSA9PlxuICAgICAgICAgICAgICAgICAgbGluay50eXBlID09PSAnc2VydmljZScgJiZcbiAgICAgICAgICAgICAgICAgIGxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAnbWFwbGlicmUtc3R5bGUnXG4gICAgICAgICAgICAgICkgfHwgW11cbiAgICAgICAgICApLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKVxuICAgICAgICAgICAgcmV0dXJuIG9mKHNyYylcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gb2YoW10pXG4gICAgfSksXG4gICAgdGFwKChzdHlsZXMpID0+IHtcbiAgICAgIGlmICh0aGlzLl9zdHlsZUZyb21Db25maWcgJiYgdGhpcy5fc3R5bGVGcm9tQ29uZmlnIDw9IHN0eWxlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0eWxlSWQkLm5leHQodGhpcy5fc3R5bGVGcm9tQ29uZmlnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0eWxlSWQkLm5leHQoMClcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApXG5cbiAgc3R5bGVEcm9wZG93bkNob2ljZXMkID0gdGhpcy5zdHlsZUxpbmtzJC5waXBlKFxuICAgIG1hcCgobGlua3MpID0+XG4gICAgICBsaW5rcy5sZW5ndGhcbiAgICAgICAgPyBsaW5rcy5tYXAoKGxpbmssIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgbGFiZWw6IGdldExpbmtMYWJlbChsaW5rKSxcbiAgICAgICAgICAgIHZhbHVlOiBpbmRleCxcbiAgICAgICAgICB9KSlcbiAgICAgICAgOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGxhYmVsOiAnXFx1MDBBMFxcdTAwQTBcXHUwMEEwXFx1MDBBMCcsXG4gICAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgKVxuICApXG5cbiAgc2VsZWN0ZWRMaW5rJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuc2VsZWN0ZWRTb3VyY2VMaW5rJCxcbiAgICB0aGlzLnN0eWxlTGlua3MkLFxuICAgIHRoaXMuc2VsZWN0ZWRTdHlsZUlkJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3NyYywgc3R5bGVzLCBzdHlsZUlkeF0pID0+IChzdHlsZXMubGVuZ3RoID8gc3R5bGVzW3N0eWxlSWR4XSA6IHNyYykpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gIClcblxuICBjdXJyZW50TGF5ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc2VsZWN0ZWRMaW5rJCwgdGhpcy5leGNsdWRlV2ZzJF0pLnBpcGUoXG4gICAgc3dpdGNoTWFwKChbbGluaywgZXhjbHVkZVdmc10pID0+IHtcbiAgICAgIGlmICghbGluaykge1xuICAgICAgICByZXR1cm4gb2YoW10pXG4gICAgICB9XG4gICAgICBpZiAoZXhjbHVkZVdmcyAmJiBsaW5rLmFjY2Vzc1NlcnZpY2VQcm90b2NvbCA9PT0gJ3dmcycpIHtcbiAgICAgICAgdGhpcy5oaWRlUHJldmlldyA9IHRydWVcbiAgICAgICAgcmV0dXJuIG9mKFtdKVxuICAgICAgfVxuICAgICAgdGhpcy5oaWRlUHJldmlldyA9IGZhbHNlXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICBpZiAobGluay5hY2Nlc3NSZXN0cmljdGVkKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ2RhdGFzZXQuZXJyb3IucmVzdHJpY3RlZEFjY2VzcycpXG4gICAgICAgIHJldHVybiBvZihbXSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldExheWVyRnJvbUxpbmsobGluaykucGlwZShcbiAgICAgICAgbWFwKChsYXllcikgPT4gW2xheWVyXSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGUpXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKVxuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgIClcbiAgICB9KVxuICApXG5cbiAgbWFwQ29udGV4dCQ6IE9ic2VydmFibGU8TWFwQ29udGV4dD4gPSB0aGlzLmN1cnJlbnRMYXllcnMkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChsYXllcnMpID0+XG4gICAgICBmcm9tKGNyZWF0ZVZpZXdGcm9tTGF5ZXIobGF5ZXJzWzBdKSkucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSksIC8vIGNvdWxkIG5vdCB6b29tIG9uIHRoZSBsYXllcjogdXNlIHRoZSByZWNvcmQgZXh0ZW50XG4gICAgICAgIG1hcCgodmlldykgPT4gKHtcbiAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgdmlldyxcbiAgICAgICAgfSkpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICksXG4gICAgc3RhcnRXaXRoKHtcbiAgICAgIGxheWVyczogW10sXG4gICAgICB2aWV3OiBudWxsLFxuICAgIH0pLFxuICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMubWRWaWV3RmFjYWRlLm1ldGFkYXRhJCksXG4gICAgbWFwKChbY29udGV4dCwgbWV0YWRhdGFdKSA9PiB7XG4gICAgICBpZiAoY29udGV4dC52aWV3KSByZXR1cm4gY29udGV4dFxuICAgICAgY29uc3QgZXh0ZW50ID0gdGhpcy5tYXBVdGlscy5nZXRSZWNvcmRFeHRlbnQobWV0YWRhdGEpXG4gICAgICBjb25zdCB2aWV3ID0gZXh0ZW50ID8geyBleHRlbnQgfSA6IG51bGxcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgIHZpZXcsXG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWRWaWV3RmFjYWRlOiBNZFZpZXdGYWNhZGUsXG4gICAgcHJpdmF0ZSBtYXBVdGlsczogTWFwVXRpbHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBtYXAgPSBhd2FpdCB0aGlzLm1hcENvbnRhaW5lci5vcGVubGF5ZXJzTWFwXG4gICAgcHJpb3JpdGl6ZVBhZ2VTY3JvbGwobWFwLmdldEludGVyYWN0aW9ucygpKVxuICB9XG5cbiAgb25NYXBGZWF0dXJlU2VsZWN0KGZlYXR1cmVzOiBGZWF0dXJlW10pOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKClcbiAgICB0aGlzLnNlbGVjdGlvbiA9IGZlYXR1cmVzPy5sZW5ndGggPiAwICYmIGZlYXR1cmVzWzBdXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAvLyBGSVhNRTogcmVzdG9yZSBzdHlsaW5nIG9mIHNlbGVjdGVkIGZlYXR1cmVcbiAgICAgIC8vIHRoaXMuc2VsZWN0aW9uLnNldFN0eWxlKHRoaXMuc2VsZWN0aW9uU3R5bGUpXG4gICAgfVxuICAgIHRoaXMuY2hhbmdlUmVmLmRldGVjdENoYW5nZXMoKVxuICB9XG5cbiAgb25Tb3VyY2VMb2FkRXJyb3IoZXJyb3I6IFNvdXJjZUxvYWRFcnJvckV2ZW50KSB7XG4gICAgaWYgKGVycm9yLmh0dHBTdGF0dXMgPT09IDQwMyB8fCBlcnJvci5odHRwU3RhdHVzID09PSA0MDEpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZGF0YXNldC5lcnJvci5mb3JiaWRkZW5gKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGRhdGFzZXQuZXJyb3IuaHR0cGAsIHtcbiAgICAgICAgaW5mbzogZXJyb3IuaHR0cFN0YXR1cyxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmVzZXRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAvLyBGSVhNRTogcmVzdG9yZSBzdHlsaW5nIG9mIHNlbGVjdGVkIGZlYXR1cmVcbiAgICAgIC8vIHRoaXMuc2VsZWN0aW9uLnNldFN0eWxlKG51bGwpXG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uID0gbnVsbFxuICB9XG5cbiAgZ2V0TGF5ZXJGcm9tTGluayhsaW5rOiBEYXRhc2V0T25saW5lUmVzb3VyY2UpOiBPYnNlcnZhYmxlPE1hcENvbnRleHRMYXllcj4ge1xuICAgIGlmIChsaW5rLnR5cGUgPT09ICdzZXJ2aWNlJyAmJiBsaW5rLmFjY2Vzc1NlcnZpY2VQcm90b2NvbCA9PT0gJ3dtcycpIHtcbiAgICAgIHJldHVybiBvZih7XG4gICAgICAgIHVybDogbGluay51cmwudG9TdHJpbmcoKSxcbiAgICAgICAgdHlwZTogJ3dtcycsXG4gICAgICAgIG5hbWU6IGxpbmsubmFtZSxcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGxpbmsudHlwZSA9PT0gJ3NlcnZpY2UnICYmXG4gICAgICBsaW5rLmFjY2Vzc1NlcnZpY2VQcm90b2NvbCA9PT0gJ3RtcydcbiAgICApIHtcbiAgICAgIC8vIEZJWE1FOiBoZXJlIHdlJ3JlIGFzc3VtaW5nIHRoYXQgdGhlIFRNUyBzZXJ2ZXMgdmVjdG9yIHRpbGVzIG9ubHk7IHNob3VsZCBiZSBjaGVja2VkIHdpdGggb2djLWNsaWVudCBmaXJzdFxuICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgdXJsOiBsaW5rLnVybC50b1N0cmluZygpLnJlcGxhY2UoL1xcLz8kLywgJy97en0ve3h9L3t5fS5wYmYnKSxcbiAgICAgICAgdHlwZTogJ3h5eicsXG4gICAgICAgIHRpbGVGb3JtYXQ6ICdhcHBsaWNhdGlvbi92bmQubWFwYm94LXZlY3Rvci10aWxlJyxcbiAgICAgICAgbmFtZTogbGluay5uYW1lLFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbGluay50eXBlID09PSAnc2VydmljZScgJiZcbiAgICAgIGxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAnbWFwbGlicmUtc3R5bGUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gb2Yoe1xuICAgICAgICB0eXBlOiAnbWFwbGlicmUtc3R5bGUnLFxuICAgICAgICBuYW1lOiBsaW5rLm5hbWUsXG4gICAgICAgIHN0eWxlVXJsOiBsaW5rLnVybC50b1N0cmluZygpLFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbGluay50eXBlID09PSAnc2VydmljZScgJiZcbiAgICAgIGxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAnd210cydcbiAgICApIHtcbiAgICAgIHJldHVybiBvZih7XG4gICAgICAgIHVybDogbGluay51cmwudG9TdHJpbmcoKSxcbiAgICAgICAgdHlwZTogJ3dtdHMnLFxuICAgICAgICBuYW1lOiBsaW5rLm5hbWUsXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAobGluay50eXBlID09PSAnc2VydmljZScgJiZcbiAgICAgICAgKGxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAnd2ZzJyB8fFxuICAgICAgICAgIGxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAnZXNyaVJlc3QnIHx8XG4gICAgICAgICAgbGluay5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wgPT09ICdvZ2NGZWF0dXJlcycpKSB8fFxuICAgICAgbGluay50eXBlID09PSAnZG93bmxvYWQnXG4gICAgKSB7XG4gICAgICBjb25zdCBjYWNoZUFjdGl2ZSA9IHRydWUgLy8gVE9ETyBpbXBsZW1lbnQgd2hldGhlciBzaG91bGQgYmUgdHJ1ZSBvciBmYWxzZVxuICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UucmVhZEFzR2VvSnNvbihsaW5rLCBjYWNoZUFjdGl2ZSkucGlwZShcbiAgICAgICAgbWFwKChkYXRhKSA9PiAoe1xuICAgICAgICAgIHR5cGU6ICdnZW9qc29uJyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gJ3Byb3RvY29sIG5vdCBzdXBwb3J0ZWQnKVxuICB9XG4gIGhhbmRsZUVycm9yKGVycm9yOiBGZXRjaEVycm9yIHwgRXJyb3IgfCBzdHJpbmcpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBGZXRjaEVycm9yKSB7XG4gICAgICB0aGlzLmVycm9yID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgIGBkYXRhc2V0LmVycm9yLiR7ZXJyb3IudHlwZX1gLFxuICAgICAgICB7XG4gICAgICAgICAgaW5mbzogZXJyb3IuaW5mbyxcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgY29uc29sZS53YXJuKGVycm9yLm1lc3NhZ2UpXG4gICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICB0aGlzLmVycm9yID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIGNvbnNvbGUud2FybihlcnJvci5zdGFjayB8fCBlcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lcnJvciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGVycm9yKVxuICAgICAgY29uc29sZS53YXJuKGVycm9yKVxuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgIHRoaXMuY2hhbmdlUmVmLmRldGVjdENoYW5nZXMoKVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy1mdWxsIGgtZnVsbCBmbGV4IGZsZXgtY29sIGdhcC1bMTNweF1cIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBtZDpmbGV4LXJvdyBnYXAtNCBweS00IHB4LTUgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1jb2xvci1ib3JkZXIgcm91bmRlZC1sZyBtdC02XCJcbiAgPlxuICAgIDxnbi11aS1kcm9wZG93bi1zZWxlY3RvclxuICAgICAgKm5nSWY9XCJkaXNwbGF5U291cmNlXCJcbiAgICAgIGNsYXNzPVwidy1mdWxsIG1kOmZsZXgtMSBtZDptaW4tdy0wXCJcbiAgICAgIGV4dHJhQnRuQ2xhc3M9XCJmb250LXNhbnMgZm9udC1ib2xkXCJcbiAgICAgIFt0aXRsZV09XCInbWFwLnNlbGVjdC5sYXllcicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Nob2ljZXNdPVwiZHJvcGRvd25DaG9pY2VzJCB8IGFzeW5jXCJcbiAgICAgIFtzZWxlY3RlZF09XCJfc2VsZWN0ZWRDaG9pY2VcIlxuICAgICAgKHNlbGVjdFZhbHVlKT1cInNlbGVjdExpbmtUb0Rpc3BsYXkoJGV2ZW50KVwiXG4gICAgPjwvZ24tdWktZHJvcGRvd24tc2VsZWN0b3I+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHN0eWxlTGlua3MkIHwgYXN5bmMpPy5sZW5ndGggPiAwOyBlbHNlIHN0eWxlRGlzYWJsZWRcIj5cbiAgICAgIDxnbi11aS1kcm9wZG93bi1zZWxlY3RvclxuICAgICAgICBjbGFzcz1cInctZnVsbCBtZDpmbGV4LTEgbWQ6bWluLXctMFwiXG4gICAgICAgIGV4dHJhQnRuQ2xhc3M9XCJmb250LXNhbnMgZm9udC1ib2xkXCJcbiAgICAgICAgW3RpdGxlXT1cIidtYXAuc2VsZWN0LnN0eWxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtjaG9pY2VzXT1cInN0eWxlRHJvcGRvd25DaG9pY2VzJCB8IGFzeW5jXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cIl9zdHlsZUZyb21Db25maWdcIlxuICAgICAgICAoc2VsZWN0VmFsdWUpPVwic2VsZWN0U3R5bGVUb0Rpc3BsYXkoJGV2ZW50KVwiXG4gICAgICA+PC9nbi11aS1kcm9wZG93bi1zZWxlY3Rvcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3N0eWxlRGlzYWJsZWQ+XG4gICAgICA8Z24tdWktZHJvcGRvd24tc2VsZWN0b3JcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgbWQ6ZmxleC0xIG1kOm1pbi13LTAgdGV4dC1ncmF5LTQwMFwiXG4gICAgICAgIGV4dHJhQnRuQ2xhc3M9XCJmb250LXNhbnMgZm9udC1ib2xkIHRleHQtZ3JheS00MDBcIlxuICAgICAgICBbdGl0bGVdPVwiJ21hcC5zZWxlY3Quc3R5bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2Nob2ljZXNdPVwic3R5bGVEcm9wZG93bkNob2ljZXMkIHwgYXN5bmNcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICA+PC9nbi11aS1kcm9wZG93bi1zZWxlY3Rvcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPGRpdiBjbGFzcz1cInNlbGYtZW5kIG1kOm1sLTJcIj5cbiAgICAgIDxnbi11aS1leHRlcm5hbC12aWV3ZXItYnV0dG9uXG4gICAgICAgIGV4dHJhQ2xhc3M9XCJ3LVs0NHB4XSBoLVs0NHB4XVwiXG4gICAgICAgIFtsaW5rXT1cInNlbGVjdGVkTGluayQgfCBhc3luY1wiXG4gICAgICA+XG4gICAgICA8L2duLXVpLWV4dGVybmFsLXZpZXdlci1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGlkZVByZXZpZXc7IGVsc2UgbWFwVmlld1wiPlxuICAgIDxnbi11aS1wb3B1cC1hbGVydFxuICAgICAgdHlwZT1cIndhcm5pbmdcIlxuICAgICAgaWNvbj1cIm1hdEVycm9yT3V0bGluZU91dGxpbmVcIlxuICAgICAgY2xhc3M9XCJibG9jayBoLTEyIHAtMVwiXG4gICAgPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPnJlY29yZC5mZWF0dXJlLmxpbWl0PC9zcGFuPlxuICAgIDwvZ24tdWktcG9wdXAtYWxlcnQ+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI21hcFZpZXc+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBvdmVyZmxvdy1oaWRkZW5cIlxuICAgID5cbiAgICAgIDxnbi11aS1tYXAtY29udGFpbmVyXG4gICAgICAgICNtYXBDb250YWluZXJcbiAgICAgICAgW2NvbnRleHRdPVwibWFwQ29udGV4dCQgfCBhc3luY1wiXG4gICAgICAgIChmZWF0dXJlc0NsaWNrKT1cIm9uTWFwRmVhdHVyZVNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgKHNvdXJjZUxvYWRFcnJvcik9XCJvblNvdXJjZUxvYWRFcnJvcigkZXZlbnQpXCJcbiAgICAgID48L2duLXVpLW1hcC1jb250YWluZXI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidG9wLVsxZW1dIHJpZ2h0LVsxZW1dIHAtMyBiZy13aGl0ZSBhYnNvbHV0ZSBvdmVyZmxvdy15LWF1dG8gb3ZlcmZsb3cteC1oaWRkZW4gbWF4LWgtNzIgdy01NlwiXG4gICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIXNlbGVjdGlvblwiXG4gICAgICA+XG4gICAgICAgIDxnbi11aS1idXR0b25cbiAgICAgICAgICB0eXBlPVwibGlnaHRcIlxuICAgICAgICAgIChidXR0b25DbGljayk9XCJyZXNldFNlbGVjdGlvbigpXCJcbiAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgLS1nbi11aS1idXR0b24tcGFkZGluZzogMHB4O1xuICAgICAgICAgICAgLS1nbi11aS1idXR0b24td2lkdGg6IDI0cHg7XG4gICAgICAgICAgICAtLWduLXVpLWJ1dHRvbi1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgXCJcbiAgICAgICAgICBleHRyYUNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtWzAuNWVtXSBtbC1bOHB4XSBtci1bMTBweF1cIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWljb24gbmFtZT1cIm1hdENsb3NlXCIgY2xhc3M9XCJhbGlnbi1taWRkbGUgdGV4dC1zbVwiPjwvbmctaWNvbj5cbiAgICAgICAgPC9nbi11aS1idXR0b24+XG4gICAgICAgIDxnbi11aS1mZWF0dXJlLWRldGFpbFxuICAgICAgICAgIFtmZWF0dXJlQ2F0YWxvZ109XCJtZFZpZXdGYWNhZGUuZmVhdHVyZUNhdGFsb2ckIHwgYXN5bmNcIlxuICAgICAgICAgIFtmZWF0dXJlXT1cInNlbGVjdGlvblwiXG4gICAgICAgID48L2duLXVpLWZlYXR1cmUtZGV0YWlsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0b3AtWzFlbV0gcC0zIGJnLXdoaXRlIGFic29sdXRlIG92ZXJmbG93LXktYXV0byBvdmVyZmxvdy14LWhpZGRlbiBtYXgtaC03MiB3LTU2XCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAncmlnaHQtWzFlbV0nOiAhc2VsZWN0aW9uLCAncmlnaHQtWzE2ZW1dJzogc2VsZWN0aW9uIH1cIlxuICAgICAgICBbaGlkZGVuXT1cIiFzaG93TGVnZW5kIHx8ICFsZWdlbmRFeGlzdHNcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtYm9sZFwiIHRyYW5zbGF0ZT5tYXAubGVnZW5kLnRpdGxlPC9kaXY+XG4gICAgICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImxpZ2h0XCJcbiAgICAgICAgICAgIChidXR0b25DbGljayk9XCJ0b2dnbGVMZWdlbmQoKVwiXG4gICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAtLWduLXVpLWJ1dHRvbi1wYWRkaW5nOiAwcHg7XG4gICAgICAgICAgICAgIC0tZ24tdWktYnV0dG9uLXdpZHRoOiAyNHB4O1xuICAgICAgICAgICAgICAtLWduLXVpLWJ1dHRvbi1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgZXh0cmFDbGFzcz1cIm1sLVs4cHhdIG1yLVsxMHB4XVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWljb24gbmFtZT1cIm1hdENsb3NlXCIgY2xhc3M9XCJhbGlnbi1taWRkbGUgdGV4dC1zbVwiPjwvbmctaWNvbj5cbiAgICAgICAgICA8L2duLXVpLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxnbi11aS1tYXAtbGVnZW5kXG4gICAgICAgICAgW2NvbnRleHRdPVwibWFwQ29udGV4dCQgfCBhc3luY1wiXG4gICAgICAgICAgKGxlZ2VuZFN0YXR1c0NoYW5nZSk9XCJvbkxlZ2VuZFN0YXR1c0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvZ24tdWktbWFwLWxlZ2VuZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8Z24tdWktYnV0dG9uXG4gICAgICAgICpuZ0lmPVwiIXNob3dMZWdlbmQgJiYgbGVnZW5kRXhpc3RzICYmICFzZWxlY3Rpb25cIlxuICAgICAgICB0eXBlPVwib3V0bGluZVwiXG4gICAgICAgIChidXR0b25DbGljayk9XCJ0b2dnbGVMZWdlbmQoKVwiXG4gICAgICAgIGV4dHJhQ2xhc3M9XCJhYnNvbHV0ZSB0b3AtWzFlbV0gcmlnaHQtWzFlbV0gcm91bmRlZCBwLTEgdGV4dC14cyBiZy13aGl0ZVwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBtYXAubGVnZW5kLnRpdGxlXG4gICAgICA8L2duLXVpLWJ1dHRvbj5cblxuICAgICAgPGduLXVpLWxvYWRpbmctbWFza1xuICAgICAgICAqbmdJZj1cImxvYWRpbmdcIlxuICAgICAgICBjbGFzcz1cImFic29sdXRlIGluc2V0LTBcIlxuICAgICAgICBbbWVzc2FnZV09XCInbWFwLmxvYWRpbmcuZGF0YScgfCB0cmFuc2xhdGVcIlxuICAgICAgPjwvZ24tdWktbG9hZGluZy1tYXNrPlxuICAgICAgPGduLXVpLXBvcHVwLWFsZXJ0XG4gICAgICAgICpuZ0lmPVwiZXJyb3JcIlxuICAgICAgICB0eXBlPVwid2FybmluZ1wiXG4gICAgICAgIGljb249XCJtYXRFcnJvck91dGxpbmVPdXRsaW5lXCJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBtLTIgaW5zZXQtMFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIHRyYW5zbGF0ZT57eyBlcnJvciB9fTwvc3Bhbj5cbiAgICAgIDwvZ24tdWktcG9wdXAtYWxlcnQ+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -2,7 +2,7 @@ import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
|
2
2
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
3
3
|
import { MatSort, MatSortModule } from '@angular/material/sort';
|
|
4
4
|
import { MatTableModule } from '@angular/material/table';
|
|
5
|
-
import { TranslatePipe, TranslateService } from '@ngx-translate/core';
|
|
5
|
+
import { TranslateDirective, TranslatePipe, TranslateService, } from '@ngx-translate/core';
|
|
6
6
|
import { DataTableDataSource } from './data-table.data.source';
|
|
7
7
|
import { BaseReader, FetchError } from '../../../../../../libs/util/data-fetcher/src';
|
|
8
8
|
import { MatPaginator, MatPaginatorIntl, MatPaginatorModule, } from '@angular/material/paginator';
|
|
@@ -105,7 +105,7 @@ export class DataTableComponent {
|
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
108
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataTableComponent, isStandalone: true, selector: "gn-ui-data-table", inputs: { featureAttributes: "featureAttributes", dataset: "dataset", activeId: "activeId" }, outputs: { selected: "selected" }, providers: [{ provide: MatPaginatorIntl, useClass: CustomMatPaginatorIntl }], viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col border border-gray-300 rounded-lg bg-white h-full\">\n <div class=\"flex-1 overflow-y-hidden overflow-x-auto rounded-lg relative\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n (matSortChange)=\"setSort($event)\"\n [matSortDisableClear]=\"true\"\n *ngrxLet=\"properties$ as properties\"\n >\n <ng-container\n *ngFor=\"let attr of _featureAttributes\"\n [matColumnDef]=\"attr.value\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ attr.label }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[attr.value] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"\n activeId !== undefined && activeId !== null && row.id === activeId\n \"\n ></tr>\n </table>\n <gn-ui-loading-mask\n *ngIf=\"loading$ | async\"\n class=\"sticky inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0 z-[100]\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n <div class=\"flex justify-between items-center overflow-hidden\">\n <div class=\"text-gray-900 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n > <span translate>table.object.count</span>.\n </div>\n\n <mat-paginator\n class=\"my-[-16px]\"\n (page)=\"setPagination()\"\n [length]=\"count\"\n [pageSize]=\"10\"\n [showFirstLastButtons]=\"true\"\n [hidePageSize]=\"true\"\n ></mat-paginator>\n </div>\n</div>\n", styles: ["table{width:100%;background:#fff}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:#f5f5f5}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}.mat-mdc-paginator{background:none}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i3.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
108
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataTableComponent, isStandalone: true, selector: "gn-ui-data-table", inputs: { featureAttributes: "featureAttributes", dataset: "dataset", activeId: "activeId" }, outputs: { selected: "selected" }, providers: [{ provide: MatPaginatorIntl, useClass: CustomMatPaginatorIntl }], viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col border border-gray-300 rounded-lg bg-white h-full\">\n <div class=\"flex-1 overflow-y-hidden overflow-x-auto rounded-lg relative\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n (matSortChange)=\"setSort($event)\"\n [matSortDisableClear]=\"true\"\n *ngrxLet=\"properties$ as properties\"\n >\n <ng-container\n *ngFor=\"let attr of _featureAttributes\"\n [matColumnDef]=\"attr.value\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ attr.label }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[attr.value] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"\n activeId !== undefined && activeId !== null && row.id === activeId\n \"\n ></tr>\n </table>\n <gn-ui-loading-mask\n *ngIf=\"loading$ | async\"\n class=\"sticky inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0 z-[100]\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n <div class=\"flex justify-between items-center overflow-hidden\">\n <div class=\"text-gray-900 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n > <span translate>table.object.count</span>.\n </div>\n\n <mat-paginator\n class=\"my-[-16px]\"\n (page)=\"setPagination()\"\n [length]=\"count\"\n [pageSize]=\"10\"\n [showFirstLastButtons]=\"true\"\n [hidePageSize]=\"true\"\n ></mat-paginator>\n </div>\n</div>\n", styles: ["table{width:100%;background:#fff}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:#f5f5f5}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}.mat-mdc-paginator{background:none}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i3.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i3.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
109
109
|
}
|
|
110
110
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
111
111
|
type: Component,
|
|
@@ -119,6 +119,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
119
119
|
PopupAlertComponent,
|
|
120
120
|
LetDirective,
|
|
121
121
|
TranslatePipe,
|
|
122
|
+
TranslateDirective,
|
|
122
123
|
], providers: [{ provide: MatPaginatorIntl, useClass: CustomMatPaginatorIntl }], selector: 'gn-ui-data-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col border border-gray-300 rounded-lg bg-white h-full\">\n <div class=\"flex-1 overflow-y-hidden overflow-x-auto rounded-lg relative\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n (matSortChange)=\"setSort($event)\"\n [matSortDisableClear]=\"true\"\n *ngrxLet=\"properties$ as properties\"\n >\n <ng-container\n *ngFor=\"let attr of _featureAttributes\"\n [matColumnDef]=\"attr.value\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ attr.label }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[attr.value] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"\n activeId !== undefined && activeId !== null && row.id === activeId\n \"\n ></tr>\n </table>\n <gn-ui-loading-mask\n *ngIf=\"loading$ | async\"\n class=\"sticky inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0 z-[100]\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n <div class=\"flex justify-between items-center overflow-hidden\">\n <div class=\"text-gray-900 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n > <span translate>table.object.count</span>.\n </div>\n\n <mat-paginator\n class=\"my-[-16px]\"\n (page)=\"setPagination()\"\n [length]=\"count\"\n [pageSize]=\"10\"\n [showFirstLastButtons]=\"true\"\n [hidePageSize]=\"true\"\n ></mat-paginator>\n </div>\n</div>\n", styles: ["table{width:100%;background:#fff}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:#f5f5f5}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}.mat-mdc-paginator{background:none}\n"] }]
|
|
123
124
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.TranslateService }], propDecorators: { featureAttributes: [{
|
|
124
125
|
type: Input
|
|
@@ -135,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
135
136
|
type: ViewChild,
|
|
136
137
|
args: [MatPaginator]
|
|
137
138
|
}] } });
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2RhdGF2aXovc3JjL2xpYi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9kYXRhdml6L3NyYy9saWIvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQTtBQUNyRixPQUFPLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSw2QkFBNkIsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUNBQXVDLENBQUE7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBOzs7Ozs7O0FBRTlDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQTtBQTZCakMsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixJQUFhLGlCQUFpQixDQUFDLEtBQXlDO1FBQ3RFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUE7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDeEQsQ0FBQztJQUNELElBQWEsT0FBTyxDQUFDLEtBQWlCO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQWVELFlBQ1UsTUFBa0IsRUFDbEIsR0FBc0IsRUFDdEIsZ0JBQWtDO1FBRmxDLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDbEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQTNCNUMsdUJBQWtCLEdBQUcsRUFBRSxDQUFBO1FBV2IsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUE7UUFNNUMsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBVyxJQUFJLENBQUMsQ0FBQTtRQUlqRCxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7UUFDOUMsVUFBSyxHQUFHLElBQUksQ0FBQTtJQU1ULENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUE7SUFDN0MsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsWUFBWTtZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUE7UUFDL0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDdEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU07UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUMvRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTTtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFNO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQ3hCLENBQUE7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDeEIsaUNBQWlDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLE1BQU0sY0FBYyxDQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxQyxDQUFBO1FBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUMzQyxDQUFBO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ3pDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQ3BELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ25CLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUEyQixDQUFDLENBQUE7UUFDL0MsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBbUI7UUFDOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUNqRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDL0IsQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7SUFDekUsQ0FBQztJQUVNLFdBQVcsQ0FBQyxFQUFlO1FBQ2hDLE9BQU8sV0FBVyxHQUFHLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQXlCO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDM0IsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUN4QyxpQkFBaUIsS0FBSyxDQUFDLElBQUksRUFBRSxFQUM3QjtnQkFDRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7YUFDakIsQ0FDRixDQUFBO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQTtRQUNwQyxDQUFDO0lBQ0gsQ0FBQzsrR0E5R1Usa0JBQWtCO21HQUFsQixrQkFBa0IsZ01BTmxCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLENBQUMsZ0VBb0JqRSxPQUFPLDRFQUNQLFlBQVkscUVDN0V6Qix3cUVBd0VBLG1jRDFCSSxjQUFjLHNnQ0FDZCxhQUFhLGlkQUNiLGtCQUFrQixtU0FDbEIsZUFBZSw4QkFDZixZQUFZLHFUQUNaLG9CQUFvQixvRkFDcEIsbUJBQW1CLG9HQUNuQixZQUFZLDRGQUNaLGFBQWE7OzRGQVFKLGtCQUFrQjtrQkFuQjlCLFNBQVM7aUNBQ0ksSUFBSSxXQUNQO3dCQUNQLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixhQUFhO3FCQUNkLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxZQUNsRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTTs4SUFJbEMsaUJBQWlCO3NCQUE3QixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUVhLElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFDTyxTQUFTO3NCQUFqQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJ1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE1hdFNvcnQsIE1hdFNvcnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0J1xuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSdcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgRGF0YVRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4vZGF0YS10YWJsZS5kYXRhLnNvdXJjZSdcbmltcG9ydCB7IEJhc2VSZWFkZXIsIEZldGNoRXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvZGF0YS1mZXRjaGVyL3NyYydcbmltcG9ydCB7XG4gIE1hdFBhZ2luYXRvcixcbiAgTWF0UGFnaW5hdG9ySW50bCxcbiAgTWF0UGFnaW5hdG9yTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InXG5pbXBvcnQgeyBDdXN0b21NYXRQYWdpbmF0b3JJbnRsIH0gZnJvbSAnLi9jdXN0b20ubWF0LnBhZ2luYXRvci5pbnRsJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIExvYWRpbmdNYXNrQ29tcG9uZW50LFxuICBQb3B1cEFsZXJ0Q29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL3dpZGdldHMvc3JjJ1xuaW1wb3J0IHsgTGV0RGlyZWN0aXZlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50J1xuXG5jb25zdCByb3dJZFByZWZpeCA9ICd0YWJsZS1pdGVtLSdcblxuZXhwb3J0IHR5cGUgVGFibGVJdGVtSWQgPSBzdHJpbmcgfCBudW1iZXJcbnR5cGUgVGFibGVJdGVtVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IERhdGVcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUl0ZW1Nb2RlbCB7XG4gIGlkOiBUYWJsZUl0ZW1JZFxuICBba2V5OiBzdHJpbmddOiBUYWJsZUl0ZW1UeXBlXG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0VGFibGVNb2R1bGUsXG4gICAgTWF0U29ydE1vZHVsZSxcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gICAgU2Nyb2xsaW5nTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMb2FkaW5nTWFza0NvbXBvbmVudCxcbiAgICBQb3B1cEFsZXJ0Q29tcG9uZW50LFxuICAgIExldERpcmVjdGl2ZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1hdFBhZ2luYXRvckludGwsIHVzZUNsYXNzOiBDdXN0b21NYXRQYWdpbmF0b3JJbnRsIH1dLFxuICBzZWxlY3RvcjogJ2duLXVpLWRhdGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBfZmVhdHVyZUF0dHJpYnV0ZXMgPSBbXVxuICBASW5wdXQoKSBzZXQgZmVhdHVyZUF0dHJpYnV0ZXModmFsdWU6IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10pIHtcbiAgICB0aGlzLl9mZWF0dXJlQXR0cmlidXRlcyA9IHZhbHVlXG4gICAgdGhpcy5wcm9wZXJ0aWVzJC5uZXh0KHZhbHVlLm1hcCgoYXR0cikgPT4gYXR0ci52YWx1ZSkpXG4gIH1cbiAgQElucHV0KCkgc2V0IGRhdGFzZXQodmFsdWU6IEJhc2VSZWFkZXIpIHtcbiAgICB0aGlzLmRhdGFzZXRfID0gdmFsdWVcbiAgICB0aGlzLmRhdGFzZXRfLmxvYWQoKVxuICAgIHRoaXMuZGF0YXNldF8uaW5mby50aGVuKChpbmZvKSA9PiAodGhpcy5jb3VudCA9IGluZm8uaXRlbXNDb3VudCkpXG4gIH1cbiAgQElucHV0KCkgYWN0aXZlSWQ6IFRhYmxlSXRlbUlkXG4gIEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG5cbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0OiBNYXRTb3J0XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvclxuXG4gIGRhdGFzZXRfOiBCYXNlUmVhZGVyXG4gIHByb3BlcnRpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4obnVsbClcbiAgZGF0YVNvdXJjZTogRGF0YVRhYmxlRGF0YVNvdXJjZVxuICBoZWFkZXJIZWlnaHQ6IG51bWJlclxuICBjb3VudDogbnVtYmVyXG4gIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcbiAgZXJyb3IgPSBudWxsXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbHRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IERhdGFUYWJsZURhdGFTb3VyY2UoKVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaGVhZGVySGVpZ2h0ID1cbiAgICAgIHRoaXMuZWx0UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGhlYWQnKS5vZmZzZXRIZWlnaHRcbiAgICB0aGlzLnNldFBhZ2luYXRpb24oKVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uKClcbiAgfVxuXG4gIHNldFNvcnQoc29ydDogTWF0U29ydCkge1xuICAgIGlmICghdGhpcy5kYXRhc2V0XykgcmV0dXJuXG4gICAgaWYgKCFzb3J0LmFjdGl2ZSkge1xuICAgICAgdGhpcy5kYXRhc2V0Xy5vcmRlckJ5KClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhc2V0Xy5vcmRlckJ5KFtzb3J0LmRpcmVjdGlvbiB8fCAnYXNjJywgc29ydC5hY3RpdmVdKVxuICAgIH1cbiAgICB0aGlzLnJlYWREYXRhKClcbiAgfVxuXG4gIHNldFBhZ2luYXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRvcikgcmV0dXJuXG4gICAgaWYgKCF0aGlzLmRhdGFzZXRfKSByZXR1cm5cbiAgICB0aGlzLmRhdGFzZXRfLmxpbWl0KFxuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZVxuICAgIClcbiAgICB0aGlzLnJlYWREYXRhKClcbiAgfVxuXG4gIGFzeW5jIHJlYWREYXRhKCkge1xuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKVxuICAgIC8vIHdhaXQgZm9yIHByb3BlcnRpZXMgdG8gYmUgcmVhZFxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgIHRoaXMucHJvcGVydGllcyQucGlwZShmaWx0ZXIoKHApID0+ICEhcCkpXG4gICAgKVxuICAgIGNvbnN0IHByb3BzV2l0aG91dEdlb20gPSBwcm9wZXJ0aWVzLmZpbHRlcihcbiAgICAgIChwKSA9PiAhcC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2dlb20nKVxuICAgIClcbiAgICB0aGlzLmRhdGFzZXRfLnNlbGVjdCguLi5wcm9wc1dpdGhvdXRHZW9tKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmRhdGFTb3VyY2Uuc2hvd0RhdGEodGhpcy5kYXRhc2V0Xy5yZWFkKCkpXG4gICAgICB0aGlzLmVycm9yID0gbnVsbFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yIGFzIEZldGNoRXJyb3IgfCBFcnJvcilcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKVxuICB9XG5cbiAgc2Nyb2xsVG9JdGVtKGl0ZW1JZDogVGFibGVJdGVtSWQpOiB2b2lkIHtcbiAgICBjb25zdCByb3cgPSB0aGlzLmVsdFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgIyR7dGhpcy5nZXRSb3dFbHRJZChpdGVtSWQpfWBcbiAgICApXG4gICAgdGhpcy5lbHRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSByb3cub2Zmc2V0VG9wIC0gdGhpcy5oZWFkZXJIZWlnaHRcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dFbHRJZChpZDogVGFibGVJdGVtSWQpOiBzdHJpbmcge1xuICAgIHJldHVybiByb3dJZFByZWZpeCArIGlkXG4gIH1cblxuICBoYW5kbGVFcnJvcihlcnJvcjogRmV0Y2hFcnJvciB8IEVycm9yKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyRGF0YSgpXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRmV0Y2hFcnJvcikge1xuICAgICAgdGhpcy5lcnJvciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICBgZGF0YXNldC5lcnJvci4ke2Vycm9yLnR5cGV9YCxcbiAgICAgICAge1xuICAgICAgICAgIGluZm86IGVycm9yLmluZm8sXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIGNvbnNvbGUud2FybihlcnJvci5tZXNzYWdlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIGNvbnNvbGUud2FybihlcnJvci5zdGFjayB8fCBlcnJvcilcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBiZy13aGl0ZSBoLWZ1bGxcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy15LWhpZGRlbiBvdmVyZmxvdy14LWF1dG8gcm91bmRlZC1sZyByZWxhdGl2ZVwiPlxuICAgIDx0YWJsZVxuICAgICAgbWF0LXRhYmxlXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgICAgIG1hdFNvcnRcbiAgICAgIChtYXRTb3J0Q2hhbmdlKT1cInNldFNvcnQoJGV2ZW50KVwiXG4gICAgICBbbWF0U29ydERpc2FibGVDbGVhcl09XCJ0cnVlXCJcbiAgICAgICpuZ3J4TGV0PVwicHJvcGVydGllcyQgYXMgcHJvcGVydGllc1wiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJsZXQgYXR0ciBvZiBfZmVhdHVyZUF0dHJpYnV0ZXNcIlxuICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImF0dHIudmFsdWVcIlxuICAgICAgPlxuICAgICAgICA8dGhcbiAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWJsYWNrIGJnLXdoaXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGF0dHIubGFiZWwgfX1cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkXG4gICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCJcbiAgICAgICAgICBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIHByLTEgdHJ1bmNhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZWxlbWVudFthdHRyLnZhbHVlXSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwicHJvcGVydGllczsgc3RpY2t5OiB0cnVlXCI+PC90cj5cbiAgICAgIDx0clxuICAgICAgICBbaWRdPVwiZ2V0Um93RWx0SWQocm93LmlkKVwiXG4gICAgICAgIG1hdC1yb3dcbiAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHByb3BlcnRpZXNcIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWQuZW1pdChyb3cpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJcbiAgICAgICAgICBhY3RpdmVJZCAhPT0gdW5kZWZpbmVkICYmIGFjdGl2ZUlkICE9PSBudWxsICYmIHJvdy5pZCA9PT0gYWN0aXZlSWRcbiAgICAgICAgXCJcbiAgICAgID48L3RyPlxuICAgIDwvdGFibGU+XG4gICAgPGduLXVpLWxvYWRpbmctbWFza1xuICAgICAgKm5nSWY9XCJsb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgIGNsYXNzPVwic3RpY2t5IGluc2V0LTBcIlxuICAgICAgW21lc3NhZ2VdPVwiJ3RhYmxlLmxvYWRpbmcuZGF0YScgfCB0cmFuc2xhdGVcIlxuICAgID48L2duLXVpLWxvYWRpbmctbWFzaz5cbiAgICA8Z24tdWktcG9wdXAtYWxlcnRcbiAgICAgICpuZ0lmPVwiZXJyb3JcIlxuICAgICAgdHlwZT1cIndhcm5pbmdcIlxuICAgICAgaWNvbj1cIm1hdEVycm9yT3V0bGluZU91dGxpbmVcIlxuICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBtLTIgaW5zZXQtMCB6LVsxMDBdXCJcbiAgICA+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+e3sgZXJyb3IgfX08L3NwYW4+XG4gICAgPC9nbi11aS1wb3B1cC1hbGVydD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtZ3JheS05MDAgcHgtNCBweS0yIHRleHQtc21cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY291bnQgZm9udC1leHRyYWJvbGQgdGV4dC1wcmltYXJ5XCI+e3sgY291bnQgfX08L3NwYW5cbiAgICAgID4mbmJzcDs8c3BhbiB0cmFuc2xhdGU+dGFibGUub2JqZWN0LmNvdW50PC9zcGFuPi5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtcGFnaW5hdG9yXG4gICAgICBjbGFzcz1cIm15LVstMTZweF1cIlxuICAgICAgKHBhZ2UpPVwic2V0UGFnaW5hdGlvbigpXCJcbiAgICAgIFtsZW5ndGhdPVwiY291bnRcIlxuICAgICAgW3BhZ2VTaXplXT1cIjEwXCJcbiAgICAgIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcbiAgICAgIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiXG4gICAgPjwvbWF0LXBhZ2luYXRvcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2RhdGF2aXovc3JjL2xpYi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9kYXRhdml6L3NyYy9saWIvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixnQkFBZ0IsR0FDakIsTUFBTSxxQkFBcUIsQ0FBQTtBQUM1QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLDhDQUE4QyxDQUFBO0FBQ3JGLE9BQU8sRUFDTCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGtCQUFrQixHQUNuQixNQUFNLDZCQUE2QixDQUFBO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxN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QWU7d0JBQ2YsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGtCQUFrQjtxQkFDbkIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLFlBQ2xFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNOzhJQUlsQyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRWEsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUNPLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnXG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJ1xuaW1wb3J0IHtcbiAgVHJhbnNsYXRlRGlyZWN0aXZlLFxuICBUcmFuc2xhdGVQaXBlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxufSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgRGF0YVRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4vZGF0YS10YWJsZS5kYXRhLnNvdXJjZSdcbmltcG9ydCB7IEJhc2VSZWFkZXIsIEZldGNoRXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvZGF0YS1mZXRjaGVyL3NyYydcbmltcG9ydCB7XG4gIE1hdFBhZ2luYXRvcixcbiAgTWF0UGFnaW5hdG9ySW50bCxcbiAgTWF0UGFnaW5hdG9yTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InXG5pbXBvcnQgeyBDdXN0b21NYXRQYWdpbmF0b3JJbnRsIH0gZnJvbSAnLi9jdXN0b20ubWF0LnBhZ2luYXRvci5pbnRsJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIExvYWRpbmdNYXNrQ29tcG9uZW50LFxuICBQb3B1cEFsZXJ0Q29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL3dpZGdldHMvc3JjJ1xuaW1wb3J0IHsgTGV0RGlyZWN0aXZlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50J1xuXG5jb25zdCByb3dJZFByZWZpeCA9ICd0YWJsZS1pdGVtLSdcblxuZXhwb3J0IHR5cGUgVGFibGVJdGVtSWQgPSBzdHJpbmcgfCBudW1iZXJcbnR5cGUgVGFibGVJdGVtVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IERhdGVcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUl0ZW1Nb2RlbCB7XG4gIGlkOiBUYWJsZUl0ZW1JZFxuICBba2V5OiBzdHJpbmddOiBUYWJsZUl0ZW1UeXBlXG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0VGFibGVNb2R1bGUsXG4gICAgTWF0U29ydE1vZHVsZSxcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gICAgU2Nyb2xsaW5nTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMb2FkaW5nTWFza0NvbXBvbmVudCxcbiAgICBQb3B1cEFsZXJ0Q29tcG9uZW50LFxuICAgIExldERpcmVjdGl2ZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIFRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRQYWdpbmF0b3JJbnRsLCB1c2VDbGFzczogQ3VzdG9tTWF0UGFnaW5hdG9ySW50bCB9XSxcbiAgc2VsZWN0b3I6ICdnbi11aS1kYXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgX2ZlYXR1cmVBdHRyaWJ1dGVzID0gW11cbiAgQElucHV0KCkgc2V0IGZlYXR1cmVBdHRyaWJ1dGVzKHZhbHVlOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdKSB7XG4gICAgdGhpcy5fZmVhdHVyZUF0dHJpYnV0ZXMgPSB2YWx1ZVxuICAgIHRoaXMucHJvcGVydGllcyQubmV4dCh2YWx1ZS5tYXAoKGF0dHIpID0+IGF0dHIudmFsdWUpKVxuICB9XG4gIEBJbnB1dCgpIHNldCBkYXRhc2V0KHZhbHVlOiBCYXNlUmVhZGVyKSB7XG4gICAgdGhpcy5kYXRhc2V0XyA9IHZhbHVlXG4gICAgdGhpcy5kYXRhc2V0Xy5sb2FkKClcbiAgICB0aGlzLmRhdGFzZXRfLmluZm8udGhlbigoaW5mbykgPT4gKHRoaXMuY291bnQgPSBpbmZvLml0ZW1zQ291bnQpKVxuICB9XG4gIEBJbnB1dCgpIGFjdGl2ZUlkOiBUYWJsZUl0ZW1JZFxuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydDogTWF0U29ydFxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3JcblxuICBkYXRhc2V0XzogQmFzZVJlYWRlclxuICBwcm9wZXJ0aWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KG51bGwpXG4gIGRhdGFTb3VyY2U6IERhdGFUYWJsZURhdGFTb3VyY2VcbiAgaGVhZGVySGVpZ2h0OiBudW1iZXJcbiAgY291bnQ6IG51bWJlclxuICBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXG4gIGVycm9yID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWx0UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBEYXRhVGFibGVEYXRhU291cmNlKClcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmhlYWRlckhlaWdodCA9XG4gICAgICB0aGlzLmVsdFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJykub2Zmc2V0SGVpZ2h0XG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uKClcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMuc2V0UGFnaW5hdGlvbigpXG4gIH1cblxuICBzZXRTb3J0KHNvcnQ6IE1hdFNvcnQpIHtcbiAgICBpZiAoIXRoaXMuZGF0YXNldF8pIHJldHVyblxuICAgIGlmICghc29ydC5hY3RpdmUpIHtcbiAgICAgIHRoaXMuZGF0YXNldF8ub3JkZXJCeSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YXNldF8ub3JkZXJCeShbc29ydC5kaXJlY3Rpb24gfHwgJ2FzYycsIHNvcnQuYWN0aXZlXSlcbiAgICB9XG4gICAgdGhpcy5yZWFkRGF0YSgpXG4gIH1cblxuICBzZXRQYWdpbmF0aW9uKCkge1xuICAgIGlmICghdGhpcy5wYWdpbmF0b3IpIHJldHVyblxuICAgIGlmICghdGhpcy5kYXRhc2V0XykgcmV0dXJuXG4gICAgdGhpcy5kYXRhc2V0Xy5saW1pdChcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemVcbiAgICApXG4gICAgdGhpcy5yZWFkRGF0YSgpXG4gIH1cblxuICBhc3luYyByZWFkRGF0YSgpIHtcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSlcbiAgICAvLyB3YWl0IGZvciBwcm9wZXJ0aWVzIHRvIGJlIHJlYWRcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLnByb3BlcnRpZXMkLnBpcGUoZmlsdGVyKChwKSA9PiAhIXApKVxuICAgIClcbiAgICBjb25zdCBwcm9wc1dpdGhvdXRHZW9tID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gIXAudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdnZW9tJylcbiAgICApXG4gICAgdGhpcy5kYXRhc2V0Xy5zZWxlY3QoLi4ucHJvcHNXaXRob3V0R2VvbSlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5kYXRhU291cmNlLnNob3dEYXRhKHRoaXMuZGF0YXNldF8ucmVhZCgpKVxuICAgICAgdGhpcy5lcnJvciA9IG51bGxcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciBhcyBGZXRjaEVycm9yIHwgRXJyb3IpXG4gICAgfVxuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSlcbiAgfVxuXG4gIHNjcm9sbFRvSXRlbShpdGVtSWQ6IFRhYmxlSXRlbUlkKTogdm9pZCB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5lbHRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYCMke3RoaXMuZ2V0Um93RWx0SWQoaXRlbUlkKX1gXG4gICAgKVxuICAgIHRoaXMuZWx0UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gcm93Lm9mZnNldFRvcCAtIHRoaXMuaGVhZGVySGVpZ2h0XG4gIH1cblxuICBwdWJsaWMgZ2V0Um93RWx0SWQoaWQ6IFRhYmxlSXRlbUlkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcm93SWRQcmVmaXggKyBpZFxuICB9XG5cbiAgaGFuZGxlRXJyb3IoZXJyb3I6IEZldGNoRXJyb3IgfCBFcnJvcikge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5jbGVhckRhdGEoKVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEZldGNoRXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgYGRhdGFzZXQuZXJyb3IuJHtlcnJvci50eXBlfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBpbmZvOiBlcnJvci5pbmZvLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICBjb25zb2xlLndhcm4oZXJyb3IubWVzc2FnZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lcnJvciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGVycm9yLm1lc3NhZ2UpXG4gICAgICBjb25zb2xlLndhcm4oZXJyb3Iuc3RhY2sgfHwgZXJyb3IpXG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgYmctd2hpdGUgaC1mdWxsXCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4LTEgb3ZlcmZsb3cteS1oaWRkZW4gb3ZlcmZsb3cteC1hdXRvIHJvdW5kZWQtbGcgcmVsYXRpdmVcIj5cbiAgICA8dGFibGVcbiAgICAgIG1hdC10YWJsZVxuICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICBtYXRTb3J0XG4gICAgICAobWF0U29ydENoYW5nZSk9XCJzZXRTb3J0KCRldmVudClcIlxuICAgICAgW21hdFNvcnREaXNhYmxlQ2xlYXJdPVwidHJ1ZVwiXG4gICAgICAqbmdyeExldD1cInByb3BlcnRpZXMkIGFzIHByb3BlcnRpZXNcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwibGV0IGF0dHIgb2YgX2ZlYXR1cmVBdHRyaWJ1dGVzXCJcbiAgICAgICAgW21hdENvbHVtbkRlZl09XCJhdHRyLnZhbHVlXCJcbiAgICAgID5cbiAgICAgICAgPHRoXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcbiAgICAgICAgICBjbGFzcz1cInRleHQtc20gdGV4dC1ibGFjayBiZy13aGl0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBhdHRyLmxhYmVsIH19XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZFxuICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiXG4gICAgICAgICAgY2xhc3M9XCJ3aGl0ZXNwYWNlLW5vd3JhcCBwci0xIHRydW5jYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGVsZW1lbnRbYXR0ci52YWx1ZV0gfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInByb3BlcnRpZXM7IHN0aWNreTogdHJ1ZVwiPjwvdHI+XG4gICAgICA8dHJcbiAgICAgICAgW2lkXT1cImdldFJvd0VsdElkKHJvdy5pZClcIlxuICAgICAgICBtYXQtcm93XG4gICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBwcm9wZXJ0aWVzXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkLmVtaXQocm93KVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgICAgYWN0aXZlSWQgIT09IHVuZGVmaW5lZCAmJiBhY3RpdmVJZCAhPT0gbnVsbCAmJiByb3cuaWQgPT09IGFjdGl2ZUlkXG4gICAgICAgIFwiXG4gICAgICA+PC90cj5cbiAgICA8L3RhYmxlPlxuICAgIDxnbi11aS1sb2FkaW5nLW1hc2tcbiAgICAgICpuZ0lmPVwibG9hZGluZyQgfCBhc3luY1wiXG4gICAgICBjbGFzcz1cInN0aWNreSBpbnNldC0wXCJcbiAgICAgIFttZXNzYWdlXT1cIid0YWJsZS5sb2FkaW5nLmRhdGEnIHwgdHJhbnNsYXRlXCJcbiAgICA+PC9nbi11aS1sb2FkaW5nLW1hc2s+XG4gICAgPGduLXVpLXBvcHVwLWFsZXJ0XG4gICAgICAqbmdJZj1cImVycm9yXCJcbiAgICAgIHR5cGU9XCJ3YXJuaW5nXCJcbiAgICAgIGljb249XCJtYXRFcnJvck91dGxpbmVPdXRsaW5lXCJcbiAgICAgIGNsYXNzPVwiYWJzb2x1dGUgbS0yIGluc2V0LTAgei1bMTAwXVwiXG4gICAgPlxuICAgICAgPHNwYW4gdHJhbnNsYXRlPnt7IGVycm9yIH19PC9zcGFuPlxuICAgIDwvZ24tdWktcG9wdXAtYWxlcnQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktOTAwIHB4LTQgcHktMiB0ZXh0LXNtXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNvdW50IGZvbnQtZXh0cmFib2xkIHRleHQtcHJpbWFyeVwiPnt7IGNvdW50IH19PC9zcGFuXG4gICAgICA+Jm5ic3A7PHNwYW4gdHJhbnNsYXRlPnRhYmxlLm9iamVjdC5jb3VudDwvc3Bhbj4uXG4gICAgPC9kaXY+XG5cbiAgICA8bWF0LXBhZ2luYXRvclxuICAgICAgY2xhc3M9XCJteS1bLTE2cHhdXCJcbiAgICAgIChwYWdlKT1cInNldFBhZ2luYXRpb24oKVwiXG4gICAgICBbbGVuZ3RoXT1cImNvdW50XCJcbiAgICAgIFtwYWdlU2l6ZV09XCIxMFwiXG4gICAgICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiXG4gICAgICBbaGlkZVBhZ2VTaXplXT1cInRydWVcIlxuICAgID48L21hdC1wYWdpbmF0b3I+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|