@arsedizioni/ars-utils 18.1.73 → 18.1.75
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/clipper.common/common/common.module.d.ts +1 -2
- package/clipper.common/common/definitions.d.ts +317 -0
- package/clipper.common/common/interceptors/auth.interceptor.d.ts +2 -5
- package/clipper.common/common/messages.d.ts +4 -0
- package/clipper.common/common/services/clipper.service.d.ts +12 -36
- package/clipper.ui/{ui/document/documents.d.ts → documents.d.ts} +2 -6
- package/clipper.ui/public_api.d.ts +6 -5
- package/clipper.ui/ui/browser-dialog/browser-dialog.component.d.ts +30 -143
- package/clipper.ui/ui/clipper.scss +270 -106
- package/clipper.ui/ui/document/document.component.d.ts +64 -118
- package/clipper.ui/ui/document-index/document-index.component.d.ts +34 -0
- package/clipper.ui/ui/document-manager/document-manager.d.ts +126 -0
- package/clipper.ui/ui/document-menu/document-menu.component.d.ts +28 -0
- package/clipper.ui/ui/references/references.component.d.ts +39 -73
- package/clipper.ui/ui/search-calendar/search-calendar.component.d.ts +40 -0
- package/clipper.ui/ui/search-dialog/search-dialog.component.d.ts +37 -40
- package/clipper.ui/ui/search-facets/search-facets.component.d.ts +22 -70
- package/clipper.ui/ui/search-free-text-help/search-free-text-help.component.d.ts +0 -1
- package/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.d.ts +8 -12
- package/clipper.ui/ui/search-result-item/search-result-item.component.d.ts +6 -4
- package/clipper.ui/ui/search-result-manager/search-result-manager.d.ts +147 -0
- package/esm2022/clipper.common/common/common.module.mjs +2 -3
- package/esm2022/clipper.common/common/definitions.mjs +1536 -0
- package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +15 -15
- package/esm2022/clipper.common/common/messages.mjs +6 -1
- package/esm2022/clipper.common/common/services/clipper.service.mjs +65 -65
- package/esm2022/clipper.ui/documents.mjs +51 -0
- package/esm2022/clipper.ui/public_api.mjs +7 -6
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +320 -784
- package/esm2022/clipper.ui/ui/document/document.component.mjs +214 -319
- package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +121 -0
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +431 -0
- package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +56 -0
- package/esm2022/clipper.ui/ui/references/references.component.mjs +244 -438
- package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +116 -0
- package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +216 -205
- package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +157 -209
- package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +7 -8
- package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +22 -23
- package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +12 -10
- package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +462 -0
- package/esm2022/help/components/help-viewer/help-viewer.component.mjs +29 -32
- package/esm2022/help/services/help.service.mjs +16 -16
- package/esm2022/support.common/common/definitions.mjs +21 -0
- package/esm2022/support.common/common/services/support.service.mjs +9 -7
- package/esm2022/support.common/public_api.mjs +2 -2
- package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +3 -3
- package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +4 -5
- package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +3 -3
- package/esm2022/ui.application/public_api.mjs +4 -1
- package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +163 -0
- package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +47 -0
- package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +239 -0
- package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +23 -24
- package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/messages.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +1608 -1507
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +2276 -2398
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-help.mjs +43 -47
- package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +8 -6
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +5 -6
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +450 -47
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
- package/help/components/help-viewer/help-viewer.component.d.ts +7 -11
- package/help/services/help.service.d.ts +3 -6
- package/package.json +7 -7
- package/styles/ui.scss +140 -0
- package/support.common/common/services/support.service.d.ts +2 -2
- package/support.common/public_api.d.ts +1 -1
- package/ui.application/public_api.d.ts +3 -0
- package/ui.application/ui/components/button-selector/button-selector.component.d.ts +49 -0
- package/ui.application/ui/components/button-toggle/button-toggle.component.d.ts +26 -0
- package/ui.application/ui/components/chips-selector/chips-selector.component.d.ts +70 -0
- package/ui.application/ui/components/file-preview/file-preview.component.d.ts +4 -8
- package/ui.application/ui/messages.d.ts +2 -2
- package/clipper.common/common/clipper.d.ts +0 -119
- package/clipper.common/common/search.d.ts +0 -49
- package/clipper.ui/ui/document/base/document-base.component.d.ts +0 -38
- package/clipper.ui/ui/document/document-index/document-index.component.d.ts +0 -38
- package/clipper.ui/ui/document/document-menu/document-menu.component.d.ts +0 -30
- package/clipper.ui/ui/last-15-days/last-15-days.component.d.ts +0 -41
- package/esm2022/clipper.common/common/clipper.mjs +0 -1371
- package/esm2022/clipper.common/common/search.mjs +0 -69
- package/esm2022/clipper.ui/ui/document/base/document-base.component.mjs +0 -194
- package/esm2022/clipper.ui/ui/document/document-index/document-index.component.mjs +0 -121
- package/esm2022/clipper.ui/ui/document/document-menu/document-menu.component.mjs +0 -88
- package/esm2022/clipper.ui/ui/document/documents.mjs +0 -49
- package/esm2022/clipper.ui/ui/last-15-days/last-15-days.component.mjs +0 -107
- package/esm2022/help/components/help-search-query-builder/help-search-query-builder.component.mjs +0 -114
- package/esm2022/support.common/common/support.mjs +0 -21
- package/esm2022/ui.oauth/ui/components/login/loginOAuth.component.mjs +0 -198
- package/help/components/help-search-query-builder/help-search-query-builder.component.d.ts +0 -29
- package/help/help.scss +0 -72
- package/ui.oauth/ui/components/login/loginOAuth.component.d.ts +0 -38
- /package/support.common/common/{support.d.ts → definitions.d.ts} +0 -0
|
@@ -1,181 +1,213 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { MatMenuModule } from '@angular/material/menu';
|
|
4
|
-
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
5
|
-
import { DateFormat, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';
|
|
6
|
-
import { fromEvent, Subject } from 'rxjs';
|
|
7
|
-
import { startOfDay, startOfToday, subDays } from 'date-fns';
|
|
8
|
-
import { ClipperDocumentBaseComponent } from '../document/base/document-base.component';
|
|
9
|
-
import { ClipperDefinitions } from '@arsedizioni/ars-utils/clipper.common';
|
|
10
|
-
import { takeUntil } from 'rxjs/operators';
|
|
11
|
-
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
12
|
-
import { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';
|
|
13
|
-
import saveAs from 'file-saver';
|
|
14
|
-
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
15
|
-
import { ExtendedModule } from '@ngbracket/ngx-layout/extended';
|
|
16
|
-
import { ClipperDocumentMenuComponent } from '../document/document-menu/document-menu.component';
|
|
17
|
-
import { MatBadgeModule } from '@angular/material/badge';
|
|
1
|
+
import { Breakpoints } from '@angular/cdk/layout';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ViewChild, inject } from '@angular/core';
|
|
18
3
|
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { MatBadgeModule } from '@angular/material/badge';
|
|
5
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
19
6
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
20
|
-
import {
|
|
7
|
+
import { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';
|
|
21
8
|
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
10
|
+
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
11
|
+
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
12
|
+
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
13
|
+
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
22
14
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
23
|
-
import {
|
|
15
|
+
import { ClipperDocumentSnapshotMode } from '@arsedizioni/ars-utils/clipper.common';
|
|
16
|
+
import { SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';
|
|
17
|
+
import { ExtendedModule } from '@ngbracket/ngx-layout/extended';
|
|
24
18
|
import { FlexModule } from '@ngbracket/ngx-layout/flex';
|
|
19
|
+
import { fromEvent } from 'rxjs';
|
|
20
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
21
|
+
import { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';
|
|
22
|
+
import { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';
|
|
23
|
+
import { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';
|
|
24
|
+
import { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';
|
|
25
25
|
import * as i0 from "@angular/core";
|
|
26
|
-
import * as i1 from "@
|
|
27
|
-
import * as i2 from "@
|
|
28
|
-
import * as i3 from "@
|
|
29
|
-
import * as i4 from "@
|
|
30
|
-
import * as i5 from "@angular/material/
|
|
31
|
-
import * as i6 from "@
|
|
32
|
-
import * as i7 from "@angular/
|
|
33
|
-
import * as i8 from "@angular/material/
|
|
34
|
-
import * as i9 from "@angular/material/
|
|
35
|
-
import * as i10 from "@angular/material/
|
|
36
|
-
import * as i11 from "@
|
|
37
|
-
import * as i12 from "@angular/material/
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
constructor($dialog, $clipper, $screen, media, dialogRef, _data) {
|
|
45
|
-
super($dialog, $clipper);
|
|
46
|
-
this.$dialog = $dialog;
|
|
47
|
-
this.$clipper = $clipper;
|
|
48
|
-
this.$screen = $screen;
|
|
49
|
-
this.media = media;
|
|
50
|
-
this.dialogRef = dialogRef;
|
|
51
|
-
this.__d$ = new Subject();
|
|
26
|
+
import * as i1 from "@ngbracket/ngx-layout/flex";
|
|
27
|
+
import * as i2 from "@angular/material/button";
|
|
28
|
+
import * as i3 from "@angular/material/tooltip";
|
|
29
|
+
import * as i4 from "@angular/material/icon";
|
|
30
|
+
import * as i5 from "@angular/material/checkbox";
|
|
31
|
+
import * as i6 from "@angular/material/slide-toggle";
|
|
32
|
+
import * as i7 from "@angular/forms";
|
|
33
|
+
import * as i8 from "@angular/material/menu";
|
|
34
|
+
import * as i9 from "@angular/material/badge";
|
|
35
|
+
import * as i10 from "@angular/material/paginator";
|
|
36
|
+
import * as i11 from "@ngbracket/ngx-layout/extended";
|
|
37
|
+
import * as i12 from "@angular/material/sidenav";
|
|
38
|
+
export class ClipperReferencesComponent extends ClipperSearchResultManager {
|
|
39
|
+
constructor() {
|
|
40
|
+
super(...arguments);
|
|
41
|
+
this.height = -1;
|
|
42
|
+
this.dialogRef = inject((MatDialogRef));
|
|
43
|
+
this.dialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperDocumentSnapshotMode.ReferencesIn };
|
|
52
44
|
this.title = null;
|
|
53
|
-
this.selection = new SelectableModel(true, 'documentId');
|
|
54
|
-
this.snapshot = null;
|
|
55
|
-
this.facetsMode = 'side';
|
|
56
|
-
this.facetsClosed = false;
|
|
57
|
-
this.contentHeight = null;
|
|
58
|
-
this.contextMenuPosition = { x: '0px', y: '0px' };
|
|
59
|
-
this.mq = null;
|
|
60
|
-
this.anchor = null;
|
|
61
45
|
this.item = null;
|
|
62
|
-
// Choose the title
|
|
63
|
-
switch (_data.mode) {
|
|
64
|
-
case ClipperDefinitions.SM_REFERENCES_IN:
|
|
65
|
-
this.title = 'Documenti richiamati nelle note o nel testo';
|
|
66
|
-
break;
|
|
67
|
-
case ClipperDefinitions.SM_REFERENCES_OUT:
|
|
68
|
-
this.title = 'Documenti che richiamano quello in visione';
|
|
69
|
-
break;
|
|
70
|
-
case ClipperDefinitions.SM_CHANGES_IN:
|
|
71
|
-
this.title = 'Modifiche subite';
|
|
72
|
-
break;
|
|
73
|
-
case ClipperDefinitions.SM_CHANGES_OUT:
|
|
74
|
-
this.title = 'Modifiche apportate';
|
|
75
|
-
break;
|
|
76
|
-
case ClipperDefinitions.SM_JURIS:
|
|
77
|
-
this.title = 'Giurisprudenza associata';
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
if (_data.anchorTitle)
|
|
81
|
-
this.title += ' - ' + _data.anchorTitle;
|
|
82
|
-
this.anchor = _data.anchor;
|
|
83
|
-
// Use service snapshot
|
|
84
|
-
this.snapshot = $clipper.referencesSnapshot;
|
|
85
|
-
if (!this.snapshot)
|
|
86
|
-
this.snapshot = {
|
|
87
|
-
searchParams: {},
|
|
88
|
-
};
|
|
89
|
-
if (this.snapshot.searchParams.mode !== _data.mode ||
|
|
90
|
-
this.snapshot.searchParams.documentId !== _data.id ||
|
|
91
|
-
this.snapshot.searchParams.anchor !== _data.anchor) {
|
|
92
|
-
this.snapshot.searchParams = {
|
|
93
|
-
mode: _data.mode,
|
|
94
|
-
model: _data.model,
|
|
95
|
-
anchor: _data.anchor,
|
|
96
|
-
documentId: _data.id,
|
|
97
|
-
useModifierInfo: _data.mode === ClipperDefinitions.SM_CHANGES_OUT,
|
|
98
|
-
returnModifierInfo: _data.mode !== ClipperDefinitions.SM_CHANGES_OUT,
|
|
99
|
-
first: 0,
|
|
100
|
-
count: 25,
|
|
101
|
-
};
|
|
102
|
-
// Store snapshot
|
|
103
|
-
$clipper.referencesSnapshot = this.snapshot;
|
|
104
|
-
// New search
|
|
105
|
-
this.fetch(true);
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
setTimeout(() => {
|
|
109
|
-
// Display current snapshot facets if necessary
|
|
110
|
-
this.displayFacets();
|
|
111
|
-
this.restoreScrollPosition();
|
|
112
|
-
}, 250);
|
|
113
|
-
}
|
|
114
46
|
}
|
|
115
47
|
ngOnInit() {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
48
|
+
if (this.dialogData) {
|
|
49
|
+
switch (this.dialogData.mode) {
|
|
50
|
+
case ClipperDocumentSnapshotMode.ReferencesIn:
|
|
51
|
+
this.title = "Documenti richiamati nelle note o nel testo";
|
|
52
|
+
break;
|
|
53
|
+
case ClipperDocumentSnapshotMode.ReferencesOut:
|
|
54
|
+
this.title = "Documenti che richiamano quello in visione";
|
|
55
|
+
break;
|
|
56
|
+
case ClipperDocumentSnapshotMode.ChangesIn:
|
|
57
|
+
this.title = "Modifiche subite";
|
|
58
|
+
break;
|
|
59
|
+
case ClipperDocumentSnapshotMode.ChangesOut:
|
|
60
|
+
this.title = "Modifiche apportate";
|
|
61
|
+
break;
|
|
62
|
+
case ClipperDocumentSnapshotMode.Juris:
|
|
63
|
+
this.title = "Giurisprudenza associata";
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
if (this.dialogData.anchorTitle) {
|
|
67
|
+
this.title += " - " + this.dialogData.anchorTitle;
|
|
68
|
+
}
|
|
69
|
+
// Use service snapshot
|
|
70
|
+
this.snapshot = this.clipperService.referencesSnapshot ?? { searchParams: {}, interval: "-1" };
|
|
71
|
+
if (this.filterParams.documentSnapshotMode !== this.dialogData.mode ||
|
|
72
|
+
this.filterParams.documentId !== this.dialogData.id ||
|
|
73
|
+
this.filterParams.anchor !== this.dialogData.anchor) {
|
|
74
|
+
this.filterParams = {
|
|
75
|
+
documentSnapshotMode: this.dialogData.mode,
|
|
76
|
+
model: this.dialogData.model,
|
|
77
|
+
anchor: this.dialogData.anchor,
|
|
78
|
+
documentId: this.dialogData.id,
|
|
79
|
+
useModifierInfo: this.dialogData.mode === ClipperDocumentSnapshotMode.ChangesOut,
|
|
80
|
+
returnModifierInfo: this.dialogData.mode !== ClipperDocumentSnapshotMode.ChangesOut,
|
|
81
|
+
first: 0,
|
|
82
|
+
count: 15,
|
|
83
|
+
};
|
|
84
|
+
this.clipperService.referencesSnapshot = this.snapshot;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Initialize selection
|
|
88
|
+
this.selection = new SelectableModel(true, 'documentId');
|
|
89
|
+
// Observe layout changes
|
|
90
|
+
this.breakpointObserver
|
|
91
|
+
.observe([
|
|
92
|
+
Breakpoints.XSmall,
|
|
93
|
+
Breakpoints.Small,
|
|
94
|
+
Breakpoints.Medium,
|
|
95
|
+
Breakpoints.Large,
|
|
96
|
+
Breakpoints.XLarge,
|
|
97
|
+
])
|
|
98
|
+
.pipe(takeUntil(this.unsubscribe))
|
|
99
|
+
.subscribe(result => {
|
|
100
|
+
for (const query of Object.keys(result.breakpoints)) {
|
|
101
|
+
if (result.breakpoints[query]) {
|
|
102
|
+
this.handleFilterPaneVisibility();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
123
105
|
});
|
|
124
|
-
this.updateFacetsVisibility();
|
|
125
106
|
// React to window size change
|
|
126
107
|
fromEvent(window, 'resize')
|
|
127
|
-
.pipe(takeUntil(this.
|
|
108
|
+
.pipe(takeUntil(this.unsubscribe), debounceTime(500))
|
|
128
109
|
.subscribe(() => {
|
|
129
|
-
|
|
130
|
-
this.updateView();
|
|
110
|
+
this.resize();
|
|
131
111
|
});
|
|
132
|
-
|
|
112
|
+
}
|
|
113
|
+
ngOnDestroy() {
|
|
114
|
+
this.unsubscribe.next();
|
|
115
|
+
this.unsubscribe.complete();
|
|
116
|
+
}
|
|
117
|
+
ngAfterViewInit() {
|
|
133
118
|
setTimeout(() => {
|
|
134
|
-
//
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
this.
|
|
145
|
-
this.snapshot.searchParams.toDate = this.facetsSearch.toDate;
|
|
146
|
-
this.snapshot.searchParams.year = this.facetsSearch.fromDate.getFullYear();
|
|
119
|
+
// Handle filter pane
|
|
120
|
+
this.handleFilterPaneVisibility();
|
|
121
|
+
// Handle facets
|
|
122
|
+
if (this.facets) {
|
|
123
|
+
this.facets.changed
|
|
124
|
+
.subscribe((value) => {
|
|
125
|
+
this.snapshot.facets = value;
|
|
126
|
+
if (this.snapshot.facets.fromDate) {
|
|
127
|
+
this.filterParams.fromDate = this.snapshot.facets.fromDate;
|
|
128
|
+
this.filterParams.toDate = this.snapshot.facets.toDate;
|
|
129
|
+
this.filterParams.year = this.snapshot.facets.fromDate.getFullYear();
|
|
147
130
|
}
|
|
148
|
-
else if (this.
|
|
149
|
-
this.
|
|
150
|
-
this.
|
|
151
|
-
this.
|
|
131
|
+
else if (this.snapshot.facets.changedInterval) {
|
|
132
|
+
this.filterParams.year = null;
|
|
133
|
+
this.filterParams.fromDate = null;
|
|
134
|
+
this.filterParams.toDate = null;
|
|
152
135
|
}
|
|
153
|
-
if (this.
|
|
154
|
-
this.
|
|
155
|
-
if (this.
|
|
156
|
-
this.
|
|
157
|
-
if (this.
|
|
158
|
-
this.
|
|
159
|
-
if (this.facetsSearch.reason || this.facetsSearch.changedReason)
|
|
160
|
-
this.snapshot.searchParams.reason = this.facetsSearch.reason;
|
|
161
|
-
this.snapshot.searchParams.anchor = this.facetsSearch.anchor
|
|
162
|
-
? this.facetsSearch.anchor
|
|
163
|
-
: this.anchor;
|
|
136
|
+
if (this.snapshot.facets.sector || this.snapshot.facets.changedSector)
|
|
137
|
+
this.filterParams.sector = this.snapshot.facets.sector;
|
|
138
|
+
if (this.snapshot.facets.type || this.snapshot.facets.changedType)
|
|
139
|
+
this.filterParams.type = this.snapshot.facets.type;
|
|
140
|
+
if (this.snapshot.facets.author || this.snapshot.facets.changedAuthor)
|
|
141
|
+
this.filterParams.author = this.snapshot.facets.author;
|
|
164
142
|
this.fetch(true);
|
|
165
143
|
});
|
|
166
144
|
}
|
|
167
|
-
},
|
|
145
|
+
}, 0);
|
|
146
|
+
if (this.snapshot.interval === "-1") {
|
|
147
|
+
this.snapshot.interval = null;
|
|
148
|
+
this.fetch(true);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
// Display current snapshot facets if necessary
|
|
152
|
+
this.restoreFacets();
|
|
153
|
+
this.restoreScrollPosition();
|
|
154
|
+
}
|
|
155
|
+
this.resize();
|
|
156
|
+
this.changeDetector.detectChanges();
|
|
168
157
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
158
|
+
/**
|
|
159
|
+
* Resize
|
|
160
|
+
*/
|
|
161
|
+
resize() {
|
|
162
|
+
setTimeout(() => {
|
|
163
|
+
let elem = document.getElementById('clipper-references-scrollable');
|
|
164
|
+
if (elem) {
|
|
165
|
+
const height = this.dialogService.getCurrentDialogScrollableHeight(['clipper-references-fixed'], window.innerHeight);
|
|
166
|
+
if (height != this.height) {
|
|
167
|
+
elem.setAttribute('style', 'height:' + height + 'px !important;max-height:' + height + 'px !important');
|
|
168
|
+
this.height = height;
|
|
169
|
+
this.resize();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.resize();
|
|
174
|
+
}
|
|
175
|
+
}, 100);
|
|
172
176
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
this.
|
|
178
|
-
this.
|
|
177
|
+
/**
|
|
178
|
+
* Show hide filter pane manually
|
|
179
|
+
*/
|
|
180
|
+
toggleFilterPane() {
|
|
181
|
+
this.filterPaneClosed = !this.filterPaneClosed;
|
|
182
|
+
this.filterPane?.toggle();
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Handle filter pane visibility
|
|
186
|
+
*/
|
|
187
|
+
handleFilterPaneVisibility() {
|
|
188
|
+
if (this.filterPane) {
|
|
189
|
+
if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||
|
|
190
|
+
this.breakpointObserver.isMatched(Breakpoints.Small) ||
|
|
191
|
+
this.breakpointObserver.isMatched(Breakpoints.Medium)) {
|
|
192
|
+
if (this.filterPane.opened) {
|
|
193
|
+
this.filterPane.close();
|
|
194
|
+
}
|
|
195
|
+
this.filterPane.mode = 'over';
|
|
196
|
+
this.filterPane.disableClose = false;
|
|
197
|
+
this.filterPaneHasBackdrop = true;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
if (!this.filterPane.opened && !this.filterPaneClosed) {
|
|
201
|
+
this.filterPane.open();
|
|
202
|
+
}
|
|
203
|
+
else if (this.filterPane.opened && this.filterPaneClosed) {
|
|
204
|
+
this.filterPane.close();
|
|
205
|
+
}
|
|
206
|
+
this.filterPane.mode = 'side';
|
|
207
|
+
this.filterPane.disableClose = true;
|
|
208
|
+
this.filterPaneHasBackdrop = false;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
179
211
|
}
|
|
180
212
|
/**
|
|
181
213
|
* Close dialog
|
|
@@ -188,118 +220,19 @@ export class ClipperReferencesComponent extends ClipperDocumentBaseComponent {
|
|
|
188
220
|
* Save scroll position
|
|
189
221
|
*/
|
|
190
222
|
saveScrollPosition() {
|
|
191
|
-
this
|
|
223
|
+
this.clipperService.scrollable.savePosition(this.filterParams.documentId, '#references_container');
|
|
192
224
|
}
|
|
193
225
|
/**
|
|
194
226
|
* Reset scroll position
|
|
195
227
|
*/
|
|
196
228
|
resetScrollPosition() {
|
|
197
|
-
document.querySelector('#
|
|
229
|
+
document.querySelector('#clipper-references-scroller').scrollTo(0, 0);
|
|
198
230
|
}
|
|
199
231
|
/**
|
|
200
232
|
* Restore scroll position
|
|
201
233
|
*/
|
|
202
234
|
restoreScrollPosition() {
|
|
203
|
-
this
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Update menu buttons visibility when the menu is closed
|
|
207
|
-
*/
|
|
208
|
-
updateMenuButtonsVisibility() {
|
|
209
|
-
this.snapshot.items.forEach((n) => {
|
|
210
|
-
n.isMenuOpen = false;
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Adjust view
|
|
215
|
-
*/
|
|
216
|
-
adjustView() {
|
|
217
|
-
setTimeout(() => {
|
|
218
|
-
this.updateView();
|
|
219
|
-
}, 250);
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Update view
|
|
223
|
-
*/
|
|
224
|
-
updateView() {
|
|
225
|
-
// Update router height
|
|
226
|
-
let a = window.innerHeight;
|
|
227
|
-
let b = document.getElementById('clipper-references-fixed');
|
|
228
|
-
try {
|
|
229
|
-
if (!a || !b || a === 0)
|
|
230
|
-
this.adjustView();
|
|
231
|
-
let hb = b.clientHeight;
|
|
232
|
-
if (hb === 0)
|
|
233
|
-
this.adjustView();
|
|
234
|
-
this.contentHeight = a - (hb + 12);
|
|
235
|
-
}
|
|
236
|
-
catch { }
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Update sidenav visibility
|
|
240
|
-
* @param mq : the current media query
|
|
241
|
-
*/
|
|
242
|
-
updateFacetsVisibility() {
|
|
243
|
-
if (this.mq === 'xs') {
|
|
244
|
-
this.facetsMode = 'over';
|
|
245
|
-
if (this.facetsSearch &&
|
|
246
|
-
this.facetsSearch.hasFacets &&
|
|
247
|
-
this.facetsSidenav &&
|
|
248
|
-
this.facetsSidenav.opened)
|
|
249
|
-
this.facetsSidenav.close();
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
this.facetsMode = 'side';
|
|
253
|
-
if (this.facetsSearch &&
|
|
254
|
-
this.facetsSearch.hasFacets &&
|
|
255
|
-
this.facetsSidenav &&
|
|
256
|
-
!this.facetsClosed)
|
|
257
|
-
this.facetsSidenav.toggle(true);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Open facetsSidenav sidebar
|
|
262
|
-
*/
|
|
263
|
-
facetsOpen() {
|
|
264
|
-
this.facetsClosed = false;
|
|
265
|
-
this.facetsSidenav.open();
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Close facets sidebar
|
|
269
|
-
* @param closedManually : ture if facets has been closed manually by clicking the button
|
|
270
|
-
*/
|
|
271
|
-
facetsClose(closedManually = false) {
|
|
272
|
-
if (this.mq !== 'xs')
|
|
273
|
-
this.facetsClosed = closedManually;
|
|
274
|
-
this.facetsSidenav.close();
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Export a document in pdf format
|
|
278
|
-
* @param item : the document to export
|
|
279
|
-
*/
|
|
280
|
-
exportPdf(item) {
|
|
281
|
-
if (!this.$clipper.loggedIn)
|
|
282
|
-
return;
|
|
283
|
-
if (!item || item.model === 11)
|
|
284
|
-
return;
|
|
285
|
-
this.$dialog
|
|
286
|
-
.confirm("Confermi l'esportazione?", 'Attenzione!')
|
|
287
|
-
.componentInstance.choosen
|
|
288
|
-
.subscribe((r) => {
|
|
289
|
-
if (r.result === 'ok') {
|
|
290
|
-
this.$dialog.busy('Esportazione in corso...');
|
|
291
|
-
this.$clipper
|
|
292
|
-
.exportPdf(item.documentId)
|
|
293
|
-
.subscribe({
|
|
294
|
-
next: (r2) => {
|
|
295
|
-
saveAs(r2, (item.title1 ? item.title1 : item.documentId) + '.pdf');
|
|
296
|
-
},
|
|
297
|
-
complete: () => {
|
|
298
|
-
this.$dialog.clearBusy();
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
});
|
|
235
|
+
this.clipperService.scrollable.tryRestorePosition(this.filterParams.documentId, '#clipper-references-scroller');
|
|
303
236
|
}
|
|
304
237
|
/**
|
|
305
238
|
* Send document links by email
|
|
@@ -313,140 +246,32 @@ export class ClipperReferencesComponent extends ClipperDocumentBaseComponent {
|
|
|
313
246
|
* @param newSearch: true if is a new search
|
|
314
247
|
*/
|
|
315
248
|
fetch(newSearch = false) {
|
|
316
|
-
if (!this
|
|
249
|
+
if (!this.clipperService.loggedIn)
|
|
317
250
|
return;
|
|
318
251
|
if (newSearch)
|
|
319
|
-
this.
|
|
320
|
-
this.
|
|
321
|
-
this.
|
|
322
|
-
this.
|
|
323
|
-
this.
|
|
324
|
-
this
|
|
325
|
-
this
|
|
252
|
+
this.filterParams.first = 0;
|
|
253
|
+
this.filterParams.useModifierInfo =
|
|
254
|
+
this.filterParams.documentSnapshotMode === ClipperDocumentSnapshotMode.ChangesOut;
|
|
255
|
+
this.filterParams.returnModifierInfo =
|
|
256
|
+
this.filterParams.documentSnapshotMode !== ClipperDocumentSnapshotMode.ChangesOut;
|
|
257
|
+
this.dialogService.busy('Ricerca in corso...');
|
|
258
|
+
this.clipperService.references(this.filterParams)
|
|
326
259
|
.subscribe({
|
|
327
260
|
next: (r) => {
|
|
328
261
|
if (!r.success)
|
|
329
|
-
this
|
|
262
|
+
this.dialogService.error(r.message);
|
|
330
263
|
else {
|
|
331
|
-
|
|
332
|
-
let group = '';
|
|
333
|
-
this.snapshot.total = r.value?.total ?? 0;
|
|
334
|
-
this.snapshot.items = r.value?.items ?? [];
|
|
335
|
-
this.snapshot.items.forEach((n) => {
|
|
336
|
-
if (n.model === ClipperDefinitions.DM_SCADENZA ||
|
|
337
|
-
n.model === ClipperDefinitions.DM_SEGNALAZIONE) {
|
|
338
|
-
switch (n.model) {
|
|
339
|
-
case ClipperDefinitions.DM_SCADENZA:
|
|
340
|
-
n.originDescription = 'Scadenza';
|
|
341
|
-
break;
|
|
342
|
-
case ClipperDefinitions.DM_SEGNALAZIONE:
|
|
343
|
-
n.originDescription = 'Segnalazione';
|
|
344
|
-
break;
|
|
345
|
-
}
|
|
346
|
-
if (n.expiringInfo) {
|
|
347
|
-
let parts = n.expiringInfo.split('|');
|
|
348
|
-
if (parts.length === 3)
|
|
349
|
-
n.description = parts[2];
|
|
350
|
-
}
|
|
351
|
-
if (n.expiringDate) {
|
|
352
|
-
n.date = startOfDay(new Date(n.expiringDate));
|
|
353
|
-
const d = startOfDay(subDays(n.date, 15));
|
|
354
|
-
n.isExpiring = today <= n.date && today >= d;
|
|
355
|
-
n.isExpired = n.date < today;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
else {
|
|
359
|
-
if (n.date) {
|
|
360
|
-
n.date = startOfDay(new Date(n.date));
|
|
361
|
-
const d = startOfDay(subDays(startOfToday(), 7));
|
|
362
|
-
n.isNew = n.date > d;
|
|
363
|
-
}
|
|
364
|
-
if (n.anchors) {
|
|
365
|
-
let anchorType;
|
|
366
|
-
let anchors = [];
|
|
367
|
-
n.anchors.forEach((a) => {
|
|
368
|
-
if (a.type === 20)
|
|
369
|
-
return;
|
|
370
|
-
if (a.type !== anchorType) {
|
|
371
|
-
if (a.type >= 3)
|
|
372
|
-
anchors.push({ text: a.typeDescription });
|
|
373
|
-
anchorType = a.type;
|
|
374
|
-
}
|
|
375
|
-
let score = a.score;
|
|
376
|
-
if (score > 7)
|
|
377
|
-
score -= 7;
|
|
378
|
-
else if (score > 5)
|
|
379
|
-
score -= 5;
|
|
380
|
-
else if (score > 3)
|
|
381
|
-
score -= 3;
|
|
382
|
-
anchors.push({
|
|
383
|
-
text: a.text,
|
|
384
|
-
title: a.title,
|
|
385
|
-
documentId: a.documentId,
|
|
386
|
-
uri: a.uri,
|
|
387
|
-
veryRelevant: score > 0.6,
|
|
388
|
-
});
|
|
389
|
-
});
|
|
390
|
-
n.anchors = anchors;
|
|
391
|
-
}
|
|
392
|
-
if (n.validityState > 0) {
|
|
393
|
-
n.validityDescription = 'Il documento non è più vigente';
|
|
394
|
-
n.isExpired = true;
|
|
395
|
-
if (n.validUntilDate) {
|
|
396
|
-
const expiringDate = startOfDay(new Date(n.validUntilDate));
|
|
397
|
-
if (expiringDate < today) {
|
|
398
|
-
n.validityDescription =
|
|
399
|
-
'Il documento non è più vigente dal ' +
|
|
400
|
-
SystemUtils.formatDate(expiringDate) +
|
|
401
|
-
'.';
|
|
402
|
-
}
|
|
403
|
-
else {
|
|
404
|
-
n.validityDescription =
|
|
405
|
-
'Il documento non sarà più vigente dal ' +
|
|
406
|
-
SystemUtils.formatDate(expiringDate) +
|
|
407
|
-
'.';
|
|
408
|
-
n.isExpired = false;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
if (n.expiringDate) {
|
|
413
|
-
n.date = startOfDay(new Date(n.expiringDate));
|
|
414
|
-
n.isExpired = n.date < today;
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
let year = SystemUtils.formatDate(n.date, DateFormat.LongMonthAndYear).toLowerCase();
|
|
418
|
-
if (group !== year) {
|
|
419
|
-
n.group = year;
|
|
420
|
-
group = year;
|
|
421
|
-
}
|
|
422
|
-
if (n.taxonomy) {
|
|
423
|
-
n.taxonomyNodes = n.taxonomy.split('\r\n');
|
|
424
|
-
if (this.snapshot.searchParams.model ===
|
|
425
|
-
ClipperDefinitions.DM_GUIDA ||
|
|
426
|
-
this.snapshot.searchParams.model ===
|
|
427
|
-
ClipperDefinitions.DM_GUIDA_NORMATIVA ||
|
|
428
|
-
this.snapshot.searchParams.model ===
|
|
429
|
-
ClipperDefinitions.DM_SCHEDA_ADEMPIMENTI) {
|
|
430
|
-
for (let i = 0; i < n.taxonomyNodes.length; i++) {
|
|
431
|
-
let node = n.taxonomyNodes[i];
|
|
432
|
-
let p = node.indexOf('>');
|
|
433
|
-
if (p !== -1)
|
|
434
|
-
n.taxonomyNodes[i] = node
|
|
435
|
-
.substring(p + 1)
|
|
436
|
-
.replace(/\>/gi, ' > ');
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
});
|
|
264
|
+
this.prepareResults(r.value);
|
|
441
265
|
// Handle facets
|
|
442
266
|
if (this.snapshot.total > 0) {
|
|
267
|
+
this.snapshot.facets.hasTooManyResults = this.snapshot.total >= 1000;
|
|
443
268
|
if (newSearch)
|
|
444
269
|
// Update facets
|
|
445
|
-
this.
|
|
270
|
+
this.fetchFacets();
|
|
446
271
|
}
|
|
447
272
|
else {
|
|
448
|
-
this.
|
|
449
|
-
this.
|
|
273
|
+
this.facets.reset();
|
|
274
|
+
this.filterPane.close();
|
|
450
275
|
}
|
|
451
276
|
if (newSearch) {
|
|
452
277
|
if (this.paginator)
|
|
@@ -456,7 +281,7 @@ export class ClipperReferencesComponent extends ClipperDocumentBaseComponent {
|
|
|
456
281
|
}
|
|
457
282
|
},
|
|
458
283
|
complete: () => {
|
|
459
|
-
this
|
|
284
|
+
this.dialogService.clearBusy();
|
|
460
285
|
}
|
|
461
286
|
});
|
|
462
287
|
}
|
|
@@ -465,93 +290,74 @@ export class ClipperReferencesComponent extends ClipperDocumentBaseComponent {
|
|
|
465
290
|
* @param e : the MatPaginator PageEvent data
|
|
466
291
|
*/
|
|
467
292
|
fetchMore(e) {
|
|
468
|
-
let first = e.pageIndex * this.
|
|
469
|
-
this.
|
|
293
|
+
let first = e.pageIndex * this.filterParams.count;
|
|
294
|
+
this.filterParams.first = first;
|
|
470
295
|
this.fetch();
|
|
471
296
|
}
|
|
472
297
|
/**
|
|
473
298
|
* Get facets
|
|
474
|
-
* @param searchParams : the current search params to use to gather facets or null to use current snapshot
|
|
475
299
|
*/
|
|
476
|
-
|
|
477
|
-
if (!this
|
|
300
|
+
fetchFacets() {
|
|
301
|
+
if (!this.clipperService.loggedIn)
|
|
478
302
|
return;
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
if (this.facetsSearch.hasFacets &&
|
|
487
|
-
!this.facetsClosed &&
|
|
488
|
-
this.mq !== 'xs')
|
|
489
|
-
this.facetsOpen();
|
|
490
|
-
else
|
|
491
|
-
this.facetsClose();
|
|
492
|
-
this.snapshot.facets = this.facetsSearch;
|
|
493
|
-
}
|
|
494
|
-
this.resetScrollPosition();
|
|
495
|
-
},
|
|
496
|
-
complete: () => {
|
|
497
|
-
this.facetsSearch.busy = false;
|
|
303
|
+
this.facets.busy.set(true);
|
|
304
|
+
this.clipperService.referencesFacets(this.filterParams)
|
|
305
|
+
.subscribe({
|
|
306
|
+
next: (r) => {
|
|
307
|
+
if (r.success) {
|
|
308
|
+
this.prepareResults(null, r.value.facets);
|
|
309
|
+
this.handleFilterPaneVisibility();
|
|
498
310
|
}
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
311
|
+
this.resetScrollPosition();
|
|
312
|
+
},
|
|
313
|
+
complete: () => {
|
|
314
|
+
this.facets.busy.set(false);
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Try to restore stored facets
|
|
320
|
+
*/
|
|
321
|
+
restoreFacets() {
|
|
322
|
+
if (this.snapshot.facets) {
|
|
323
|
+
this.facets.restore(this.snapshot.facets);
|
|
324
|
+
this.handleFilterPaneVisibility();
|
|
507
325
|
}
|
|
508
326
|
}
|
|
509
327
|
/**
|
|
510
328
|
* Close current dialog and return the id to navigate to
|
|
511
|
-
* @param
|
|
329
|
+
* @param documentId : the document id
|
|
512
330
|
*/
|
|
513
|
-
open(
|
|
514
|
-
this.dialogRef.close({ id:
|
|
331
|
+
open(documentId) {
|
|
332
|
+
this.dialogRef.close({ id: documentId });
|
|
515
333
|
}
|
|
516
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperReferencesComponent, deps:
|
|
517
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperReferencesComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, viewQueries: [{ propertyName: "facetsSidenav", first: true, predicate: ["facetsSidenav"], descendants: true }, { propertyName: "facetsSearch", first: true, predicate: ["facetsSearch"], descendants: true }, { propertyName: "paginator", first: true, predicate: ["paginator"], descendants: true }, { propertyName: "contextMenu", first: true, predicate: ["contextMenuTrigger"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div id=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxFill style=\"padding: 0 0 0 15px;\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n @if (snapshot.searchParams.mode == 1) {\r\n <mat-checkbox color=\"primary\" name=\"excludeTextReferences\"\r\n [(ngModel)]=\"snapshot.searchParams.excludeTextReferences\" (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note</mat-checkbox>\r\n }\r\n @if (snapshot.searchParams.mode == 2) {\r\n <mat-checkbox color=\"primary\" name=\"excludeNotesReferences\"\r\n [(ngModel)]=\"snapshot.searchParams.excludeNotesReferences\" (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\" color=\"primary\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (facetsSearch && facetsSearch.hasFacets && facetsSidenav && (!facetsSidenav.opened || facetsClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"facetsOpen()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content style=\"padding:0 0 0 15px\" [ngStyle]=\"{'min-height.px': contentHeight}\">\r\n <mat-sidenav-container [ngStyle]=\"{'height.px': contentHeight}\">\r\n <mat-sidenav #facetsSidenav position=\"end\" autoFocus=\"false\" opened=\"false\" mode=\"{{facetsMode}}\"\r\n class=\"sidenav sidenav-facets\">\r\n @if (facetsSearch.busy) {\r\n <div class=\"sidenav-overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"height:5px\">\r\n @if (facetsSearch.busy) {\r\n <mat-progress-bar class=\"sidenav-loader\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"64px\">\r\n <div fxLayout=\"row\" fxFill class=\"sidenav-title-container\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" fxLayoutAlign=\"start\">\r\n <span class=\"sidenav-title\">Affina ricerca</span>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Nascondi\"\r\n (click)=\"facetsClose(true)\" color=\"primary\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" style=\"overflow: hidden;\">\r\n <clipper-search-facets #facetsSearch></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <div [ngStyle]=\"{'height.px': contentHeight }\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"100\" id=\"references_container\" style=\"overflow: auto\">\r\n <div style=\"overflow:hidden\">\r\n @if (!snapshot.total) {\r\n <div style=\"padding:32px;\">\r\n <div class=\"item-greyed-1\" style='text-align: center'>\r\n <p>Nessun elemento da visualizzare.</p>\r\n <p>Il filtro applicato non consente la selezione di alcun risulato.</p>\r\n </div>\r\n </div>\r\n }\r\n @if (snapshot.total) {\r\n <div>\r\n @for (item of snapshot.items; track item) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div style=\"padding-left: 15px; padding-top:24px;\">\r\n <div class=\"item-accent\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"0px\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection.isSelected(item.documentId) }\">\r\n <div fxFlex=\"48px\" fxFlexAlign=\"center\" fxLayoutAlign=\"center\">\r\n @if ($screen.isTouchable || item.isOver || selection.isSelected(item.documentId)) {\r\n <mat-checkbox color=\"primary\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (!item.isJuris && item.model != 9 && (item.model != 11 || snapshot.searchParams.mode == 2) &&\r\n item.modelName && item.modelName.length > 0) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">\r\n {{item.modelName}}</div>\r\n }\r\n @if (!item.isJuris && item.model == 22) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">ARS\r\n BLOG</div>\r\n }\r\n @if (item.author && item.origin === 'LR') {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">{{item.author}}</div>\r\n }\r\n <div class=\"item-line item-line-2 item-line-read\">\r\n <a (click)=\"open(item.documentId)\"\r\n [attr.aria-label]=\"'Apri documento ' + (item.title1 ? item.title1: item.title2)\">{{item.title1\r\n ? item.title1 : item.title2}}</a>\r\n @if (item.part > 0) {\r\n <span class=\"item-badge\">PARTE {{item.part}}</span>\r\n }\r\n\r\n </div>\r\n @if (item.title1 && item.title2) {\r\n <div class=\"item-line item-line-2 item-line-read\">\r\n {{item.title2}}\r\n </div>\r\n }\r\n @if (item.originDescription ) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-2\">\r\n {{item.originDescription}}\r\n </div>\r\n }\r\n @if (item.anchors.length > 0) {\r\n <div class=\"item-line item-line-3 item-line-read\">\r\n <div class=\"item-line-block\">\r\n <div class=\"item-line-block-title\">DETTAGLIO</div>\r\n <div>\r\n @for (a of item.anchors; track a) {\r\n <span>\r\n @if (a.uri && a.text) {\r\n <a class=\"link\" style='line-height: 18px; margin-right: 8px'\r\n (click)=\"open(a.documentId + '#' + a.uri)\" [matTooltip]=\"a.title\">{{a.text}} @if\r\n (a.veryRelevant) {\r\n <sup>\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </sup>\r\n }</a>\r\n }\r\n @if (!a.uri && a.text) {\r\n <span style='line-height: 18px; margin-right: 8px '>{{a.text}}</span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @if (item.validityState > 0) {\r\n <div class=\"item-line item-line-3 item-line-read\">\r\n <span\r\n style=\"background-color: red; color: white; padding: 2px 4px; border-radius: 3px; border: 1px solid red\">\r\n {{item.validityDescription}}\r\n </span>\r\n </div>\r\n }\r\n\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (snapshot.total > 0) {\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot.total\"\r\n [pageSize]=\"25\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.item{min-height:50px!important;border-bottom:1px dotted #eee!important;line-height:18px}.item:hover{background-color:#fff8e1}.item-cell{padding:5px 0}.item-line{padding-top:1px;padding-bottom:1px}.item-line .command a{text-decoration:none;color:#2a91e0;font-weight:500;cursor:pointer!important}.item-line .command a:hover{opacity:.7}.item-line>a{color:#2a91e0!important;opacity:1!important;cursor:pointer}.item-line>a:hover{opacity:.7!important}.item-line-1{font-weight:500;font-size:1em;color:#000}.item-line-2{font-size:.9em;color:#000}.item-line-3{font-size:.8em;color:#000}.item-line-4{font-size:.7em;color:#000}.item-line-block-title{font-size:.8em;font-weight:500}.item-line-block{margin-top:4px;margin-bottom:4px;margin-left:10px;padding-left:10px;border-left:2px solid #009688}.item-line-read{font-weight:400!important}.item-line-read .command,.item-line-read a{color:#2a91e0;cursor:pointer!important;opacity:1!important}.item-line-read .command:hover,.item-line-read a:hover{opacity:.7!important}.item-line-red-badge{background-color:red;color:#fff;padding:2px 4px;border-radius:3px;border:1px solid red}.items-group-title{line-height:24px;padding:20px 10px 10px 20px;font-weight:500;font-size:19.2px}.items-footer{padding-top:10px}.sidenav-title-container{min-height:64px!important;padding-left:15px;margin-bottom:4px}.sidenav-title{color:#009688;font-weight:500;font-size:19.2px}.item-greyed-1{color:#607d8b}.item-greyed-2{color:#90a4ae}.item-accent{color:#0d7066}.item-primary{color:#009688}.item-badge{margin-left:10px;margin-bottom:5px;padding:0 4px;height:12px;line-height:12px;border-radius:3px;font-size:x-small;font-weight:500;text-align:center;background-color:orange;color:#000}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i6.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i6.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i6.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i6.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i6.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i12.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i13.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["selectionSource", "parent", "item", "isReference", "isReadable", "isSelectable", "isDeadline", "isLawInForce", "isLaw"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i14.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i14.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i15.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i15.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i15.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i16.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ClipperSearchFacetsComponent, selector: "clipper-search-facets", inputs: ["busy"], outputs: ["changed"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i17.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }] }); }
|
|
334
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperReferencesComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
335
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperReferencesComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, viewQueries: [{ propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div id=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill style=\"padding: 0 10px 0 24px;\">\r\n <div fxFlex=\"*\">\r\n @if (snapshot.searchParams.documentSnapshotMode == 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"snapshot.searchParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (snapshot.searchParams.documentSnapshotMode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"snapshot.searchParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"40px\" style=\"margin:0 4px\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" id=\"clipper-references-scroller\">\r\n @if (!snapshot.total) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track item; let i = $index) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection.isSelected(item.documentId) }\">\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"center\">\r\n @if (screenService.isTouchable || item.isOver || selection.isSelected(item.documentId)) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"item-content\">\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-color-text: #191c1b;--ars-color-text-low: #e0e2e5;--ars-color-divider: #757d87;--ars-drawer-background-color: #eff1ef;--ars-drawer-background-color-low: #e0e3e1;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%;width:100%}.fill{min-width:100%!important;max-width:100%;width:100%;min-height:100%!important;max-height:100%;height:100%}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.accent{color:var(--ars-accent)!important}.primary{color:var(--ars-primary)!important}.secondary{color:var(--ars-secondary)!important}.error{color:var(--ars-error)!important}.warning{color:var(--ars-warning)!important}.drawer-content{padding-top:10px}.drawer,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 5px 5px;background-color:var(--ars-drawer-background-color)!important}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .fade-in,.drawer-small .fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.drawer .content,.drawer-small .content{padding:10px 0}.drawer .fixed,.drawer-small .fixed{padding:0 4px}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px}.drawer-small .content{padding:20px 0 10px}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-color-text: #e0e2e5;--ars-color-text-low: #191c1b;--ars-color-divider: #757d87;--ars-drawer-background-color: #323534;--ars-drawer-background-color-low: #424444;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.expired,.unread{color:var(--ars-error, #ff5449)!important}.expiring{color:var(--ars-warning, #FFC107)!important}.error-bg,.expired-bg,.unread-bg{background-color:var(--ars-error, #ff5449)}.expiring-bg{background-color:var(--ars-warning, #FFC107)}.popular-bg{background-color:#388e3c}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .spaced,.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 0;min-height:60px!important;margin-bottom:2px}.item .item-content .info-1{font-size:x-small;font-weight:700;text-transform:uppercase;color:var(--ars-accent, #7894ae)}.item .item-content .info-2{font-size:x-small;font-weight:700;text-transform:uppercase;color:var(--ars-accent-low, #456179)}.item .item-content .title{font-size:small}.item .item-content .details{margin-top:4px;font-size:x-small;font-weight:700;color:var(--ars-accent-low, #456179);text-transform:uppercase;border-left:4px solid var(--ars-accent-low, #456179);padding-left:10px}.item .item-content .details .links{text-transform:none;text-decoration:none}.item .item-content .details .links a,.item .item-content .details .links span,.item .item-content .details .links div{margin-right:8px;font-weight:600;color:var(--ars-color-text, #191c1b)}.item .item-content .details .links a{cursor:pointer!important;color:var(--ars-link, #03A9F4);font-weight:600}.item .item-content a.link{color:var(--ars-link, #03A9F4);cursor:pointer!important}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer;padding:10px 13px;margin-bottom:2px}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-error, #ff5449);margin:0 8px}.tile .image{height:180px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image .img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-item-opaque-background-color, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-item-opaque-background-color, rgba(255, 255, 255, .75));color:var(--ars-accent, #7894ae);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .check{position:absolute;left:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .check-selected{background-color:var(--ars-primary-hi, #12c0ae)}.tile .image .read{position:absolute;right:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .badge,.tile .badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:700;text-align:center;background-color:var(--ars-accent, #7894ae);text-transform:uppercase;white-space:nowrap;color:var(--ars-color-text-low, #e0e2e5)}.tile .badge-red{background-color:var(--ars-error, #ff5449);color:var(--ars-color-text-low, #e0e2e5)}.tile .date{padding:8px 0 6px;font-weight:700;text-transform:uppercase}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .time{font-size:small;font-weight:700}.tile .title{text-decoration:none;font-size:small;min-height:72px;overflow:hidden}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .next{margin-left:8px}.special-date,.special-date-expired{border:2px var(--ars-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-error, #ff5449) solid!important}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i9.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i11.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i12.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i12.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["parent", "selectionSource", "useSelections", "item", "isReference", "isReadable", "isDeadline", "isLawInForce", "isLaw"] }, { kind: "component", type: ClipperSearchFacetsComponent, selector: "clipper-search-facets", outputs: ["changed"] }, { kind: "component", type: ClipperSearchResultItemComponent, selector: "clipper-search-result-item", inputs: ["parent", "item"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
518
336
|
}
|
|
519
337
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperReferencesComponent, decorators: [{
|
|
520
338
|
type: Component,
|
|
521
|
-
args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, imports: [
|
|
339
|
+
args: [{ host: { 'Bind': SystemUtils.generateUUID() }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
522
340
|
FlexModule,
|
|
523
341
|
MatDialogTitle,
|
|
524
342
|
MatButtonModule,
|
|
525
343
|
MatTooltipModule,
|
|
526
344
|
MatIconModule,
|
|
527
345
|
MatCheckboxModule,
|
|
346
|
+
MatSlideToggleModule,
|
|
528
347
|
FormsModule,
|
|
529
348
|
MatMenuModule,
|
|
530
349
|
MatBadgeModule,
|
|
531
|
-
|
|
350
|
+
MatPaginatorModule,
|
|
532
351
|
MatDialogContent,
|
|
533
|
-
NgStyle,
|
|
534
352
|
ExtendedModule,
|
|
535
353
|
MatSidenavModule,
|
|
536
354
|
MatProgressBarModule,
|
|
355
|
+
ClipperDocumentMenuComponent,
|
|
537
356
|
ClipperSearchFacetsComponent,
|
|
538
|
-
|
|
539
|
-
MatPaginatorModule,
|
|
540
|
-
], template: "<div id=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Chiudi\"\r\n aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxFill style=\"padding: 0 0 0 15px;\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">\r\n @if (snapshot.searchParams.mode == 1) {\r\n <mat-checkbox color=\"primary\" name=\"excludeTextReferences\"\r\n [(ngModel)]=\"snapshot.searchParams.excludeTextReferences\" (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note</mat-checkbox>\r\n }\r\n @if (snapshot.searchParams.mode == 2) {\r\n <mat-checkbox color=\"primary\" name=\"excludeNotesReferences\"\r\n [(ngModel)]=\"snapshot.searchParams.excludeNotesReferences\" (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\" color=\"primary\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (facetsSearch && facetsSearch.hasFacets && facetsSidenav && (!facetsSidenav.opened || facetsClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button color=\"primary\" matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"facetsOpen()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content style=\"padding:0 0 0 15px\" [ngStyle]=\"{'min-height.px': contentHeight}\">\r\n <mat-sidenav-container [ngStyle]=\"{'height.px': contentHeight}\">\r\n <mat-sidenav #facetsSidenav position=\"end\" autoFocus=\"false\" opened=\"false\" mode=\"{{facetsMode}}\"\r\n class=\"sidenav sidenav-facets\">\r\n @if (facetsSearch.busy) {\r\n <div class=\"sidenav-overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div style=\"height:5px\">\r\n @if (facetsSearch.busy) {\r\n <mat-progress-bar class=\"sidenav-loader\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"64px\">\r\n <div fxLayout=\"row\" fxFill class=\"sidenav-title-container\">\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" fxLayoutAlign=\"start\">\r\n <span class=\"sidenav-title\">Affina ricerca</span>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Nascondi\"\r\n (click)=\"facetsClose(true)\" color=\"primary\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" style=\"overflow: hidden;\">\r\n <clipper-search-facets #facetsSearch></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content>\r\n <div [ngStyle]=\"{'height.px': contentHeight }\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"100\" id=\"references_container\" style=\"overflow: auto\">\r\n <div style=\"overflow:hidden\">\r\n @if (!snapshot.total) {\r\n <div style=\"padding:32px;\">\r\n <div class=\"item-greyed-1\" style='text-align: center'>\r\n <p>Nessun elemento da visualizzare.</p>\r\n <p>Il filtro applicato non consente la selezione di alcun risulato.</p>\r\n </div>\r\n </div>\r\n }\r\n @if (snapshot.total) {\r\n <div>\r\n @for (item of snapshot.items; track item) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div style=\"padding-left: 15px; padding-top:24px;\">\r\n <div class=\"item-accent\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"0px\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection.isSelected(item.documentId) }\">\r\n <div fxFlex=\"48px\" fxFlexAlign=\"center\" fxLayoutAlign=\"center\">\r\n @if ($screen.isTouchable || item.isOver || selection.isSelected(item.documentId)) {\r\n <mat-checkbox color=\"primary\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (!item.isJuris && item.model != 9 && (item.model != 11 || snapshot.searchParams.mode == 2) &&\r\n item.modelName && item.modelName.length > 0) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">\r\n {{item.modelName}}</div>\r\n }\r\n @if (!item.isJuris && item.model == 22) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">ARS\r\n BLOG</div>\r\n }\r\n @if (item.author && item.origin === 'LR') {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-1 uppercase\">{{item.author}}</div>\r\n }\r\n <div class=\"item-line item-line-2 item-line-read\">\r\n <a (click)=\"open(item.documentId)\"\r\n [attr.aria-label]=\"'Apri documento ' + (item.title1 ? item.title1: item.title2)\">{{item.title1\r\n ? item.title1 : item.title2}}</a>\r\n @if (item.part > 0) {\r\n <span class=\"item-badge\">PARTE {{item.part}}</span>\r\n }\r\n\r\n </div>\r\n @if (item.title1 && item.title2) {\r\n <div class=\"item-line item-line-2 item-line-read\">\r\n {{item.title2}}\r\n </div>\r\n }\r\n @if (item.originDescription ) {\r\n <div class=\"item-line item-line-3 item-line-read item-greyed-2\">\r\n {{item.originDescription}}\r\n </div>\r\n }\r\n @if (item.anchors.length > 0) {\r\n <div class=\"item-line item-line-3 item-line-read\">\r\n <div class=\"item-line-block\">\r\n <div class=\"item-line-block-title\">DETTAGLIO</div>\r\n <div>\r\n @for (a of item.anchors; track a) {\r\n <span>\r\n @if (a.uri && a.text) {\r\n <a class=\"link\" style='line-height: 18px; margin-right: 8px'\r\n (click)=\"open(a.documentId + '#' + a.uri)\" [matTooltip]=\"a.title\">{{a.text}} @if\r\n (a.veryRelevant) {\r\n <sup>\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </sup>\r\n }</a>\r\n }\r\n @if (!a.uri && a.text) {\r\n <span style='line-height: 18px; margin-right: 8px '>{{a.text}}</span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @if (item.validityState > 0) {\r\n <div class=\"item-line item-line-3 item-line-read\">\r\n <span\r\n style=\"background-color: red; color: white; padding: 2px 4px; border-radius: 3px; border: 1px solid red\">\r\n {{item.validityDescription}}\r\n </span>\r\n </div>\r\n }\r\n\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (snapshot.total > 0) {\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot.total\"\r\n [pageSize]=\"25\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.item{min-height:50px!important;border-bottom:1px dotted #eee!important;line-height:18px}.item:hover{background-color:#fff8e1}.item-cell{padding:5px 0}.item-line{padding-top:1px;padding-bottom:1px}.item-line .command a{text-decoration:none;color:#2a91e0;font-weight:500;cursor:pointer!important}.item-line .command a:hover{opacity:.7}.item-line>a{color:#2a91e0!important;opacity:1!important;cursor:pointer}.item-line>a:hover{opacity:.7!important}.item-line-1{font-weight:500;font-size:1em;color:#000}.item-line-2{font-size:.9em;color:#000}.item-line-3{font-size:.8em;color:#000}.item-line-4{font-size:.7em;color:#000}.item-line-block-title{font-size:.8em;font-weight:500}.item-line-block{margin-top:4px;margin-bottom:4px;margin-left:10px;padding-left:10px;border-left:2px solid #009688}.item-line-read{font-weight:400!important}.item-line-read .command,.item-line-read a{color:#2a91e0;cursor:pointer!important;opacity:1!important}.item-line-read .command:hover,.item-line-read a:hover{opacity:.7!important}.item-line-red-badge{background-color:red;color:#fff;padding:2px 4px;border-radius:3px;border:1px solid red}.items-group-title{line-height:24px;padding:20px 10px 10px 20px;font-weight:500;font-size:19.2px}.items-footer{padding-top:10px}.sidenav-title-container{min-height:64px!important;padding-left:15px;margin-bottom:4px}.sidenav-title{color:#009688;font-weight:500;font-size:19.2px}.item-greyed-1{color:#607d8b}.item-greyed-2{color:#90a4ae}.item-accent{color:#0d7066}.item-primary{color:#009688}.item-badge{margin-left:10px;margin-bottom:5px;padding:0 4px;height:12px;line-height:12px;border-radius:3px;font-size:x-small;font-weight:500;text-align:center;background-color:orange;color:#000}\n"] }]
|
|
541
|
-
}], ctorParameters: () => [{ type: i1.DialogService }, { type: i2.ClipperService }, { type: i3.ScreenService }, { type: i4.MediaObserver }, { type: i5.MatDialogRef }, { type: undefined, decorators: [{
|
|
542
|
-
type: Inject,
|
|
543
|
-
args: [MAT_DIALOG_DATA]
|
|
544
|
-
}] }], propDecorators: { facetsSidenav: [{
|
|
545
|
-
type: ViewChild,
|
|
546
|
-
args: ['facetsSidenav']
|
|
547
|
-
}], facetsSearch: [{
|
|
548
|
-
type: ViewChild,
|
|
549
|
-
args: ['facetsSearch']
|
|
550
|
-
}], paginator: [{
|
|
551
|
-
type: ViewChild,
|
|
552
|
-
args: ['paginator']
|
|
553
|
-
}], contextMenu: [{
|
|
357
|
+
ClipperSearchResultItemComponent
|
|
358
|
+
], template: "<div id=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill style=\"padding: 0 10px 0 24px;\">\r\n <div fxFlex=\"*\">\r\n @if (snapshot.searchParams.documentSnapshotMode == 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"snapshot.searchParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (snapshot.searchParams.documentSnapshotMode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"snapshot.searchParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"40px\" style=\"margin:0 4px\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" id=\"clipper-references-scroller\">\r\n @if (!snapshot.total) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track item; let i = $index) {\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection.isSelected(item.documentId) }\">\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"center\">\r\n @if (screenService.isTouchable || item.isOver || selection.isSelected(item.documentId)) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"item-content\">\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-color-text: #191c1b;--ars-color-text-low: #e0e2e5;--ars-color-divider: #757d87;--ars-drawer-background-color: #eff1ef;--ars-drawer-background-color-low: #e0e3e1;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%;width:100%}.fill{min-width:100%!important;max-width:100%;width:100%;min-height:100%!important;max-height:100%;height:100%}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.accent{color:var(--ars-accent)!important}.primary{color:var(--ars-primary)!important}.secondary{color:var(--ars-secondary)!important}.error{color:var(--ars-error)!important}.warning{color:var(--ars-warning)!important}.drawer-content{padding-top:10px}.drawer,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 5px 5px;background-color:var(--ars-drawer-background-color)!important}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .fade-in,.drawer-small .fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}.drawer .content,.drawer-small .content{padding:10px 0}.drawer .fixed,.drawer-small .fixed{padding:0 4px}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px}.drawer-small .content{padding:20px 0 10px}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-color-text: #e0e2e5;--ars-color-text-low: #191c1b;--ars-color-divider: #757d87;--ars-drawer-background-color: #323534;--ars-drawer-background-color-low: #424444;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.expired,.unread{color:var(--ars-error, #ff5449)!important}.expiring{color:var(--ars-warning, #FFC107)!important}.error-bg,.expired-bg,.unread-bg{background-color:var(--ars-error, #ff5449)}.expiring-bg{background-color:var(--ars-warning, #FFC107)}.popular-bg{background-color:#388e3c}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .spaced,.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 0;min-height:60px!important;margin-bottom:2px}.item .item-content .info-1{font-size:x-small;font-weight:700;text-transform:uppercase;color:var(--ars-accent, #7894ae)}.item .item-content .info-2{font-size:x-small;font-weight:700;text-transform:uppercase;color:var(--ars-accent-low, #456179)}.item .item-content .title{font-size:small}.item .item-content .details{margin-top:4px;font-size:x-small;font-weight:700;color:var(--ars-accent-low, #456179);text-transform:uppercase;border-left:4px solid var(--ars-accent-low, #456179);padding-left:10px}.item .item-content .details .links{text-transform:none;text-decoration:none}.item .item-content .details .links a,.item .item-content .details .links span,.item .item-content .details .links div{margin-right:8px;font-weight:600;color:var(--ars-color-text, #191c1b)}.item .item-content .details .links a{cursor:pointer!important;color:var(--ars-link, #03A9F4);font-weight:600}.item .item-content a.link{color:var(--ars-link, #03A9F4);cursor:pointer!important}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer;padding:10px 13px;margin-bottom:2px}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-error, #ff5449);margin:0 8px}.tile .image{height:180px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image .img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-item-opaque-background-color, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-item-opaque-background-color, rgba(255, 255, 255, .75));color:var(--ars-accent, #7894ae);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .check{position:absolute;left:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .check-selected{background-color:var(--ars-primary-hi, #12c0ae)}.tile .image .read{position:absolute;right:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .badge,.tile .badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:700;text-align:center;background-color:var(--ars-accent, #7894ae);text-transform:uppercase;white-space:nowrap;color:var(--ars-color-text-low, #e0e2e5)}.tile .badge-red{background-color:var(--ars-error, #ff5449);color:var(--ars-color-text-low, #e0e2e5)}.tile .date{padding:8px 0 6px;font-weight:700;text-transform:uppercase}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .time{font-size:small;font-weight:700}.tile .title{text-decoration:none;font-size:small;min-height:72px;overflow:hidden}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .next{margin-left:8px}.special-date,.special-date-expired{border:2px var(--ars-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-error, #ff5449) solid!important}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}\n"] }]
|
|
359
|
+
}], propDecorators: { filterPane: [{
|
|
554
360
|
type: ViewChild,
|
|
555
|
-
args: ['
|
|
361
|
+
args: ['filterPane']
|
|
556
362
|
}] } });
|
|
557
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEYsT0FBTyxFQUFnQixlQUFlLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0csT0FBTyxFQUFrQixhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFVBQVUsRUFBaUIsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RixPQUFPLEVBQ0wsa0JBQWtCLEVBR25CLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBYyxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXhGLE9B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LENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO3dCQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7d0JBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDN0UsQ0FBQzt5QkFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQzNDLENBQUM7b0JBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWE7d0JBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztvQkFDL0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVc7d0JBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDM0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWE7d0JBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztvQkFDL0QsSUFBSSxJ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LDRCQUE0Qjt3QkFDNUIsZ0JBQWdCO3dCQUNoQixPQUFPO3dCQUNQLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixvQkFBb0I7d0JBQ3BCLDRCQUE0Qjt3QkFFNUIsT0FBTzt3QkFDUCxrQkFBa0I7cUJBQ3JCOzswQkE0QkEsTUFBTTsyQkFBQyxlQUFlO3lDQXhCRyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0MsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNELFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDVyxXQUFXO3NCQUEzQyxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lZGlhQ2hhbmdlLCBNZWRpYU9ic2VydmVyIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0JztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1RpdGxlLCBNYXREaWFsb2dDb250ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIsIE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBEYXRlRm9ybWF0LCBTY3JlZW5TZXJ2aWNlLCBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN0YXJ0T2ZEYXksIHN0YXJ0T2ZUb2RheSwgc3ViRGF5cyB9IGZyb20gJ2RhdGUtZm5zJ1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vZG9jdW1lbnQvYmFzZS9kb2N1bWVudC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQ2xpcHBlckRlZmluaXRpb25zLFxyXG4gIENsaXBwZXJTZXJ2aWNlLFxyXG4gIERvY3VtZW50UmVmZXJlbmNlU25hcHNob3RcclxufSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXRTaWRlbmF2LCBNYXRTaWRlbmF2TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZmFjZXRzL3NlYXJjaC1mYWNldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWknO1xyXG5pbXBvcnQgc2F2ZUFzIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IEV4dGVuZGVkTW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2V4dGVuZGVkJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50TWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2RvY3VtZW50L2RvY3VtZW50LW1lbnUvZG9jdW1lbnQtbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRCYWRnZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyAgTmdTdHlsZSwgIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dC9mbGV4JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgaG9zdDogeyAnQmluZCc6IFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpIH0sXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVmZXJlbmNlcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9yZWZlcmVuY2VzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIEZsZXhNb2R1bGUsXHJcbiAgICAgICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcclxuICAgICAgICBcclxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgICBNYXRNZW51TW9kdWxlLFxyXG4gICAgICAgIE1hdEJhZGdlTW9kdWxlLFxyXG4gICAgICAgIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQsXHJcbiAgICAgICAgTWF0RGlhbG9nQ29udGVudCxcclxuICAgICAgICBOZ1N0eWxlLFxyXG4gICAgICAgIEV4dGVuZGVkTW9kdWxlLFxyXG4gICAgICAgIE1hdFNpZGVuYXZNb2R1bGUsXHJcbiAgICAgICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXHJcbiAgICAgICAgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCxcclxuICAgICAgICBcclxuICAgICAgICBOZ0NsYXNzLFxyXG4gICAgICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcclxuICAgIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCBleHRlbmRzIENsaXBwZXJEb2N1bWVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdmYWNldHNTaWRlbmF2JykgZmFjZXRzU2lkZW5hdiA6IE1hdFNpZGVuYXY7XHJcbiAgQFZpZXdDaGlsZCgnZmFjZXRzU2VhcmNoJykgZmFjZXRzU2VhcmNoIDogQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdwYWdpbmF0b3InKSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnVUcmlnZ2VyJykgY29udGV4dE1lbnUhOiBNYXRNZW51VHJpZ2dlcjtcclxuXHJcbiAgcHJpdmF0ZSBfX2QkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgdGl0bGU6IHN0cmluZyA9IG51bGw7XHJcbiAgc2VsZWN0aW9uOiBTZWxlY3RhYmxlTW9kZWw8YW55LCBzdHJpbmc+ID0gbmV3IFNlbGVjdGFibGVNb2RlbCh0cnVlLCAnZG9jdW1lbnRJZCcpO1xyXG4gIHNuYXBzaG90OiBEb2N1bWVudFJlZmVyZW5jZVNuYXBzaG90ID0gbnVsbDtcclxuICBmYWNldHNNb2RlOiBzdHJpbmcgPSAnc2lkZSc7XHJcbiAgZmFjZXRzQ2xvc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY29udGVudEhlaWdodDogbnVtYmVyID0gbnVsbDtcclxuICBjb250ZXh0TWVudVBvc2l0aW9uID0geyB4OiAnMHB4JywgeTogJzBweCcgfTtcclxuICBtcTogc3RyaW5nID0gbnVsbDtcclxuICBhbmNob3I6IHN0cmluZyA9IG51bGw7XHJcbiAgaXRlbTogYW55ID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgJGRpYWxvZzogRGlhbG9nU2VydmljZSxcclxuICAgIHB1YmxpYyAkY2xpcHBlcjogQ2xpcHBlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgJHNjcmVlbjogU2NyZWVuU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVkaWE6IE1lZGlhT2JzZXJ2ZXIsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBfZGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICBzdXBlcigkZGlhbG9nLCAkY2xpcHBlcik7XHJcblxyXG4gICAgLy8gQ2hvb3NlIHRoZSB0aXRsZVxyXG4gICAgc3dpdGNoIChfZGF0YS5tb2RlKSB7XHJcbiAgICAgIGNhc2UgQ2xpcHBlckRlZmluaXRpb25zLlNNX1JFRkVSRU5DRVNfSU46XHJcbiAgICAgICAgdGhpcy50aXRsZSA9ICdEb2N1bWVudGkgcmljaGlhbWF0aSBuZWxsZSBub3RlIG8gbmVsIHRlc3RvJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDbGlwcGVyRGVmaW5pdGlvbnMuU01fUkVGRVJFTkNFU19PVVQ6XHJcbiAgICAgICAgdGhpcy50aXRsZSA9ICdEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm8gcXVlbGxvIGluIHZpc2lvbmUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENsaXBwZXJEZWZpbml0aW9ucy5TTV9DSEFOR0VTX0lOOlxyXG4gICAgICAgIHRoaXMudGl0bGUgPSAnTW9kaWZpY2hlIHN1Yml0ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2xpcHBlckRlZmluaXRpb25zLlNNX0NIQU5HRVNfT1VUOlxyXG4gICAgICAgIHRoaXMudGl0bGUgPSAnTW9kaWZpY2hlIGFwcG9ydGF0ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2xpcHBlckRlZmluaXRpb25zLlNNX0pVUklTOlxyXG4gICAgICAgIHRoaXMudGl0bGUgPSAnR2l1cmlzcHJ1ZGVuemEgYXNzb2NpYXRhJztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmIChfZGF0YS5hbmNob3JUaXRsZSkgdGhpcy50aXRsZSArPSAnIC0gJyArIF9kYXRhLmFuY2hvclRpdGxlO1xyXG5cclxuICAgIHRoaXMuYW5jaG9yID0gX2RhdGEuYW5jaG9yO1xyXG5cclxuICAgIC8vIFVzZSBzZXJ2aWNlIHNuYXBzaG90XHJcbiAgICB0aGlzLnNuYXBzaG90ID0gJGNsaXBwZXIucmVmZXJlbmNlc1NuYXBzaG90O1xyXG4gICAgaWYgKCF0aGlzLnNuYXBzaG90KVxyXG4gICAgICB0aGlzLnNuYXBzaG90ID0ge1xyXG4gICAgICAgIHNlYXJjaFBhcmFtczoge30sXHJcbiAgICAgIH07XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc25hcHNob3Quc2VhcmNoUGFyYW1zLm1vZGUgIT09IF9kYXRhLm1vZGUgfHxcclxuICAgICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hQYXJhbXMuZG9jdW1lbnRJZCAhPT0gX2RhdGEuaWQgfHxcclxuICAgICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hQYXJhbXMuYW5jaG9yICE9PSBfZGF0YS5hbmNob3JcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNuYXBzaG90LnNlYXJjaFBhcmFtcyA9IHtcclxuICAgICAgICBtb2RlOiBfZGF0YS5tb2RlLFxyXG4gICAgICAgIG1vZGVsOiBfZGF0YS5tb2RlbCxcclxuICAgICAgICBhbmNob3I6IF9kYXRhLmFuY2hvcixcclxuICAgICAgICBkb2N1bWVudElkOiBfZGF0YS5pZCxcclxuICAgICAgICB1c2VNb2RpZmllckluZm86IF9kYXRhLm1vZGUgPT09IENsaXBwZXJEZWZpbml0aW9ucy5TTV9DSEFOR0VTX09VVCxcclxuICAgICAgICByZXR1cm5Nb2RpZmllckluZm86IF9kYXRhLm1vZGUgIT09IENsaXBwZXJEZWZpbml0aW9ucy5TTV9DSEFOR0VTX09VVCxcclxuICAgICAgICBmaXJzdDogMCxcclxuICAgICAgICBjb3VudDogMjUsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBTdG9yZSBzbmFwc2hvdFxyXG4gICAgICAkY2xpcHBlci5yZWZlcmVuY2VzU25hcHNob3QgPSB0aGlzLnNuYXBzaG90O1xyXG5cclxuICAgICAgLy8gTmV3IHNlYXJjaFxyXG4gICAgICB0aGlzLmZldGNoKHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gRGlzcGxheSBjdXJyZW50IHNuYXBzaG90IGZhY2V0cyBpZiBuZWNlc3NhcnlcclxuICAgICAgICB0aGlzLmRpc3BsYXlGYWNldHMoKTtcclxuICAgICAgICB0aGlzLnJlc3RvcmVTY3JvbGxQb3NpdGlvbigpO1xyXG4gICAgICB9LCAyNTApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBSZWFjdCB0byBtZWRpYSBxdWVyeSBjaGFuZ2VzXHJcbiAgICB0aGlzLm1lZGlhXHJcbiAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fX2QkKSlcclxuICAgICAgLnN1YnNjcmliZSgoY2hhbmdlczogTWVkaWFDaGFuZ2VbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMubXEgPSBjaGFuZ2VzWzBdLm1xQWxpYXM7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGYWNldHNWaXNpYmlsaXR5KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVGYWNldHNWaXNpYmlsaXR5KCk7XHJcblxyXG4gICAgLy8gUmVhY3QgdG8gd2luZG93IHNpemUgY2hhbmdlXHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX19kJCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIC8vIFVwZGF0ZSB2aWV3XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5hZGp1c3RWaWV3KCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIFJlYWN0IHRvIHNpZGVuYXYgc3RhdGUgY2hhbmdlXHJcbiAgICAgIGlmICh0aGlzLmZhY2V0c1NpZGVuYXYpXHJcbiAgICAgICAgdGhpcy5mYWNldHNTaWRlbmF2Lm9wZW5lZENoYW5nZVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0VmlldygpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBDb25maWd1cmUgZmFjZXQgc2VhY2ggY29tcG9uZW50XHJcbiAgICAgIGlmICh0aGlzLmZhY2V0c1NlYXJjaCkge1xyXG4gICAgICAgIHRoaXMuZmFjZXRzU2VhcmNoLmNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmZhY2V0c1NlYXJjaC5mcm9tRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90LnNlYXJjaFBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZmFjZXRzU2VhcmNoLmZyb21EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90LnNlYXJjaFBhcmFtcy50b0RhdGUgPSB0aGlzLmZhY2V0c1NlYXJjaC50b0RhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3Quc2VhcmNoUGFyYW1zLnllYXIgPSB0aGlzLmZhY2V0c1NlYXJjaC5mcm9tRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZhY2V0c1NlYXJjaC5jaGFuZ2VkSW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hQYXJhbXMueWVhciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3Quc2VhcmNoUGFyYW1zLmZyb21EYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hQYXJhbXMudG9EYXRlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLmZhY2V0c1NlYXJjaC5zZWN0b3IgfHwgdGhpcy5mYWNldHNTZWFyY2guY2hhbmdlZFNlY3RvcilcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hQYXJhbXMuc2VjdG9yID0gdGhpcy5mYWNldHNTZWFyY2guc2VjdG9yO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmFjZXRzU2VhcmNoLnR5cGUgfHwgdGhpcy5mYWNldHNTZWFyY2guY2hhbmdlZFR5cGUpXHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3Quc2VhcmNoUGFyYW1zLnR5cGUgPSB0aGlzLmZhY2V0c1NlYXJjaC50eXBlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmFjZXRzU2VhcmNoLmF1dGhvciB8fCB0aGlzLmZhY2V0c1NlYXJjaC5jaGFuZ2VkQXV0aG9yKVxyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90LnNlYXJjaFBhcmFtcy5hdXRob3IgPSB0aGlzLmZhY2V0c1NlYXJjaC5hdXRob3I7XHJcbiAgICAgICAgICBpZiAodGhpcy5mYWNldHNTZWFyY2gucmVhc29uIHx8IHRoaXMuZmFjZXRzU2VhcmNoLmNoYW5nZWRSZWFzb24pXHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3Quc2VhcmNoUGFyYW1zLnJlYXNvbiA9IHRoaXMuZmFjZXRzU2VhcmNoLnJlYXNvbjtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3Quc2VhcmNoUGFyYW1zLmFuY2hvciA9IHRoaXMuZmFjZXRzU2VhcmNoLmFuY2hvclxyXG4gICAgICAgICAgICA/IHRoaXMuZmFjZXRzU2VhcmNoLmFuY2hvclxyXG4gICAgICAgICAgICA6IHRoaXMuYW5jaG9yO1xyXG4gICAgICAgICAgdGhpcy5mZXRjaCh0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMjUwKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fX2QkLm5leHQoKTtcclxuICAgIHRoaXMuX19kJC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25Db250ZXh0TWVudShldmVudDogTW91c2VFdmVudCwgaXRlbTogYW55KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnggPSBldmVudC5jbGllbnRYICsgJ3B4JztcclxuICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi55ID0gZXZlbnQuY2xpZW50WSArICdweCc7XHJcbiAgICB0aGlzLmNvbnRleHRNZW51Lm1lbnVEYXRhID0geyBpdGVtOiBpdGVtIH07XHJcbiAgICB0aGlzLmNvbnRleHRNZW51Lm9wZW5NZW51KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBkaWFsb2dcclxuICAgKi9cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMuc2F2ZVNjcm9sbFBvc2l0aW9uKCk7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBzY3JvbGwgcG9zaXRpb25cclxuICAgKi9cclxuICBzYXZlU2Nyb2xsUG9zaXRpb24oKSB7XHJcbiAgICB0aGlzLiRjbGlwcGVyLnNjcm9sbGFibGUuc2F2ZVBvc2l0aW9uKFxyXG4gICAgICB0aGlzLnNuYXBzaG90LnNlYXJjaFBhcmFtcy5kb2N1bWVudElkLFxyXG4gICAgICAnI3JlZmVyZW5jZXNfY29udGFpbmVyJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IHNjcm9sbCBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHJlc2V0U2Nyb2xsUG9zaXRpb24oKSB7XHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcmVmZXJlbmNlc19jb250YWluZXInKS5zY3JvbGxUbygwLCAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3RvcmUgc2Nyb2xsIHBvc2l0aW9uXHJcbiAgICovXHJcbiAgcmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkge1xyXG4gICAgdGhpcy4kY2xpcHBlci5zY3JvbGxhYmxlLnRyeVJlc3RvcmVQb3NpdGlvbihcclxuICAgICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hQYXJhbXMuZG9jdW1lbnRJZCxcclxuICAgICAgJyNyZWZlcmVuY2VzX2NvbnRhaW5lcidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgbWVudSBidXR0b25zIHZpc2liaWxpdHkgd2hlbiB0aGUgbWVudSBpcyBjbG9zZWRcclxuICAgKi9cclxuICB1cGRhdGVNZW51QnV0dG9uc1Zpc2liaWxpdHkoKSB7XHJcbiAgICB0aGlzLnNuYXBzaG90Lml0ZW1zLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICBuLmlzTWVudU9wZW4gPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRqdXN0IHZpZXdcclxuICAgKi9cclxuICBhZGp1c3RWaWV3KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gICAgfSwgMjUwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB2aWV3XHJcbiAgICovXHJcbiAgdXBkYXRlVmlldygpIHtcclxuICAgIC8vIFVwZGF0ZSByb3V0ZXIgaGVpZ2h0XHJcbiAgICBsZXQgYSA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgIGxldCBiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NsaXBwZXItcmVmZXJlbmNlcy1maXhlZCcpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCFhIHx8ICFiIHx8IGEgPT09IDApIHRoaXMuYWRqdXN0VmlldygpO1xyXG4gICAgICBsZXQgaGIgPSBiLmNsaWVudEhlaWdodDtcclxuICAgICAgaWYgKGhiID09PSAwKSB0aGlzLmFkanVzdFZpZXcoKTtcclxuICAgICAgdGhpcy5jb250ZW50SGVpZ2h0ID0gYSAtIChoYiArIDEyKTtcclxuICAgIH0gY2F0Y2ggeyB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgc2lkZW5hdiB2aXNpYmlsaXR5XHJcbiAgICogQHBhcmFtIG1xIDogdGhlIGN1cnJlbnQgbWVkaWEgcXVlcnlcclxuICAgKi9cclxuICB1cGRhdGVGYWNldHNWaXNpYmlsaXR5KCkge1xyXG4gICAgaWYgKHRoaXMubXEgPT09ICd4cycpIHtcclxuICAgICAgdGhpcy5mYWNldHNNb2RlID0gJ292ZXInO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mYWNldHNTZWFyY2ggJiZcclxuICAgICAgICB0aGlzLmZhY2V0c1NlYXJjaC5oYXNGYWNldHMgJiZcclxuICAgICAgICB0aGlzLmZhY2V0c1NpZGVuYXYgJiZcclxuICAgICAgICB0aGlzLmZhY2V0c1NpZGVuYXYub3BlbmVkXHJcbiAgICAgIClcclxuICAgICAgICB0aGlzLmZhY2V0c1NpZGVuYXYuY2xvc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmFjZXRzTW9kZSA9ICdzaWRlJztcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZmFjZXRzU2VhcmNoICYmXHJcbiAgICAgICAgdGhpcy5mYWNldHNTZWFyY2guaGFzRmFjZXRzICYmXHJcbiAgICAgICAgdGhpcy5mYWNldHNTaWRlbmF2ICYmXHJcbiAgICAgICAgIXRoaXMuZmFjZXRzQ2xvc2VkXHJcbiAgICAgIClcclxuICAgICAgICB0aGlzLmZhY2V0c1NpZGVuYXYudG9nZ2xlKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBmYWNldHNTaWRlbmF2IHNpZGViYXJcclxuICAgKi9cclxuICBmYWNldHNPcGVuKCkge1xyXG4gICAgdGhpcy5mYWNldHNDbG9zZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuZmFjZXRzU2lkZW5hdi5vcGVuKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBmYWNldHMgc2lkZWJhclxyXG4gICAqIEBwYXJhbSBjbG9zZWRNYW51YWxseSA6IHR1cmUgaWYgZmFjZXRzIGhhcyBiZWVuIGNsb3NlZCBtYW51YWxseSBieSBjbGlja2luZyB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgZmFjZXRzQ2xvc2UoY2xvc2VkTWFudWFsbHk6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKHRoaXMubXEgIT09ICd4cycpIHRoaXMuZmFjZXRzQ2xvc2VkID0gY2xvc2VkTWFudWFsbHk7XHJcbiAgICB0aGlzLmZhY2V0c1NpZGVuYXYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBhIGRvY3VtZW50IGluIHBkZiBmb3JtYXRcclxuICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBkb2N1bWVudCB0byBleHBvcnRcclxuICAgKi9cclxuICBleHBvcnRQZGYoaXRlbTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuJGNsaXBwZXIubG9nZ2VkSW4pIHJldHVybjtcclxuICAgIGlmICghaXRlbSB8fCBpdGVtLm1vZGVsID09PSAxMSkgcmV0dXJuO1xyXG4gICAgdGhpcy4kZGlhbG9nXHJcbiAgICAgIC5jb25maXJtKFwiQ29uZmVybWkgbCdlc3BvcnRhemlvbmU/XCIsICdBdHRlbnppb25lIScpXHJcbiAgICAgIC5jb21wb25lbnRJbnN0YW5jZS5jaG9vc2VuXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyLnJlc3VsdCA9PT0gJ29rJykge1xyXG4gICAgICAgICAgdGhpcy4kZGlhbG9nLmJ1c3koJ0VzcG9ydGF6aW9uZSBpbiBjb3Jzby4uLicpO1xyXG4gICAgICAgICAgdGhpcy4kY2xpcHBlclxyXG4gICAgICAgICAgICAuZXhwb3J0UGRmKGl0ZW0uZG9jdW1lbnRJZClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogKHIyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHNhdmVBcyhcclxuICAgICAgICAgICAgICAgICAgcjIsXHJcbiAgICAgICAgICAgICAgICAgIChpdGVtLnRpdGxlMSA/IGl0ZW0udGl0bGUxIDogaXRlbS5kb2N1bWVudElkKSArICcucGRmJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiRkaWFsb2cuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBkb2N1bWVudCBsaW5rcyBieSBlbWFpbFxyXG4gICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gYWRkXHJcbiAgICovXHJcbiAgc2VuZFRvKGl0ZW06IGFueSA9IG51bGwpIHtcclxuICAgIHRoaXMuc2VuZEl0ZW1zVG8oaXRlbSA/IFtpdGVtXSA6IHRoaXMuc2VsZWN0aW9uLmFsbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIGEgc2VhcmNoXHJcbiAgICogQHBhcmFtIG5ld1NlYXJjaDogdHJ1ZSBpZiBpcyBhIG5ldyBzZWFyY2hcclxuICAgKi9cclxuICBmZXRjaChuZXdTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKCF0aGlzLiRjbGlwcGVyLmxvZ2dlZEluKSByZXR1cm47XHJcbiAgICBpZiAobmV3U2VhcmNoKSB0aGlzLnNuYXBzaG90LnNlYXJjaFBhcmFtcy5maXJzdCA9IDA7XHJcbiAgICB0aGlzLnNuYXBzaG90LnNlYXJjaFBhcmFtcy51c2VNb2RpZmllckluZm8gPVxyXG4gICAgICB0aGlzLnNuYXBzaG90LnNlYXJjaFBhcmFtcy5tb2RlID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuU01fQ0hBTkdFU19PVVQ7XHJcbiAgICB0aGlzLnNuYXBzaG90LnNlYXJjaFBhcmFtcy5yZXR1cm5Nb2RpZmllckluZm8gPVxyXG4gICAgICB0aGlzLnNuYXBzaG90LnNlYXJjaFBhcmFtcy5tb2RlICE9PSBDbGlwcGVyRGVmaW5pdGlvbnMuU01fQ0hBTkdFU19PVVQ7XHJcbiAgICB0aGlzLiRkaWFsb2cuYnVzeSgnUmljZXJjYSBpbiBjb3Jzby4uLicpO1xyXG4gICAgdGhpcy4kY2xpcHBlci5yZWZlcmVuY2VzKHRoaXMuc25hcHNob3Quc2VhcmNoUGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHRoaXMuJGRpYWxvZy5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvZGF5ID0gc3RhcnRPZlRvZGF5KCk7XHJcbiAgICAgICAgICAgIGxldCBncm91cCA9ICcnOyAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90LnRvdGFsID0gci52YWx1ZT8udG90YWwgPz8gMDtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5pdGVtcyA9IHIudmFsdWU/Lml0ZW1zID8/IFtdOyAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5pdGVtcy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBuLm1vZGVsID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRE1fU0NBREVOWkEgfHxcclxuICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJEZWZpbml0aW9ucy5ETV9TRUdOQUxBWklPTkVcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobi5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIENsaXBwZXJEZWZpbml0aW9ucy5ETV9TQ0FERU5aQTpcclxuICAgICAgICAgICAgICAgICAgICBuLm9yaWdpbkRlc2NyaXB0aW9uID0gJ1NjYWRlbnphJztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBDbGlwcGVyRGVmaW5pdGlvbnMuRE1fU0VHTkFMQVpJT05FOlxyXG4gICAgICAgICAgICAgICAgICAgIG4ub3JpZ2luRGVzY3JpcHRpb24gPSAnU2VnbmFsYXppb25lJztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChuLmV4cGlyaW5nSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcGFydHMgPSBuLmV4cGlyaW5nSW5mby5zcGxpdCgnfCcpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSBuLmRlc2NyaXB0aW9uID0gcGFydHNbMl07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi5leHBpcmluZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgbi5kYXRlID0gc3RhcnRPZkRheShuZXcgRGF0ZShuLmV4cGlyaW5nRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBkID0gc3RhcnRPZkRheShzdWJEYXlzKG4uZGF0ZSwgMTUpKVxyXG4gICAgICAgICAgICAgICAgICBuLmlzRXhwaXJpbmcgPSB0b2RheSA8PSBuLmRhdGUgJiYgdG9kYXkgPj0gZDtcclxuICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSBuLmRhdGUgPCB0b2RheTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKG4uZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICBuLmRhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4uZGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBkID0gc3RhcnRPZkRheShzdWJEYXlzKHN0YXJ0T2ZUb2RheSgpLCA3KSlcclxuICAgICAgICAgICAgICAgICAgbi5pc05ldyA9IG4uZGF0ZSA+IGQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi5hbmNob3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBhbmNob3JUeXBlOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBhbmNob3JzOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgbi5hbmNob3JzLmZvckVhY2goKGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGUgPT09IDIwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEudHlwZSAhPT0gYW5jaG9yVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGEudHlwZSA+PSAzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JzLnB1c2goeyB0ZXh0OiBhLnR5cGVEZXNjcmlwdGlvbiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclR5cGUgPSBhLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzY29yZSA9IGEuc2NvcmU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3JlID4gNykgc2NvcmUgLT0gNztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY29yZSA+IDUpIHNjb3JlIC09IDU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcmUgPiAzKSBzY29yZSAtPSAzO1xyXG4gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBhLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYS50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50SWQ6IGEuZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgIHVyaTogYS51cmksXHJcbiAgICAgICAgICAgICAgICAgICAgICB2ZXJ5UmVsZXZhbnQ6IHNjb3JlID4gMC42LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgbi5hbmNob3JzID0gYW5jaG9ycztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChuLnZhbGlkaXR5U3RhdGUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9ICdJbCBkb2N1bWVudG8gbm9uIMOoIHBpw7kgdmlnZW50ZSc7XHJcbiAgICAgICAgICAgICAgICAgIG4uaXNFeHBpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgaWYgKG4udmFsaWRVbnRpbERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBpcmluZ0RhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4udmFsaWRVbnRpbERhdGUpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwaXJpbmdEYXRlIDwgdG9kYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdJbCBkb2N1bWVudG8gbm9uIMOoIHBpw7kgdmlnZW50ZSBkYWwgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoZXhwaXJpbmdEYXRlKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcuJztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbi52YWxpZGl0eURlc2NyaXB0aW9uID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgJ0lsIGRvY3VtZW50byBub24gc2Fyw6AgcGnDuSB2aWdlbnRlIGRhbCAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShleHBpcmluZ0RhdGUpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJy4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChuLmV4cGlyaW5nRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICBuLmRhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4uZXhwaXJpbmdEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgIG4uaXNFeHBpcmVkID0gbi5kYXRlIDwgdG9kYXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCB5ZWFyID0gU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShuLmRhdGUsIERhdGVGb3JtYXQuTG9uZ01vbnRoQW5kWWVhcikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICBpZiAoZ3JvdXAgIT09IHllYXIpIHtcclxuICAgICAgICAgICAgICAgIG4uZ3JvdXAgPSB5ZWFyO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXAgPSB5ZWFyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAobi50YXhvbm9teSkge1xyXG4gICAgICAgICAgICAgICAgbi50YXhvbm9teU5vZGVzID0gbi50YXhvbm9teS5zcGxpdCgnXFxyXFxuJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3Quc2VhcmNoUGFyYW1zLm1vZGVsID09PVxyXG4gICAgICAgICAgICAgICAgICBDbGlwcGVyRGVmaW5pdGlvbnMuRE1fR1VJREEgfHxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hQYXJhbXMubW9kZWwgPT09XHJcbiAgICAgICAgICAgICAgICAgIENsaXBwZXJEZWZpbml0aW9ucy5ETV9HVUlEQV9OT1JNQVRJVkEgfHxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hQYXJhbXMubW9kZWwgPT09XHJcbiAgICAgICAgICAgICAgICAgIENsaXBwZXJEZWZpbml0aW9ucy5ETV9TQ0hFREFfQURFTVBJTUVOVElcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG4udGF4b25vbXlOb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBub2RlID0gbi50YXhvbm9teU5vZGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwID0gbm9kZS5pbmRleE9mKCc+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgICAgICAgbi50YXhvbm9teU5vZGVzW2ldID0gbm9kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKHAgKyAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFw+L2dpLCAnID4gJyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gSGFuZGxlIGZhY2V0c1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC50b3RhbCA+IDApIHtcclxuICAgICAgICAgICAgICBpZiAobmV3U2VhcmNoKVxyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGZhY2V0c1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RmFjZXRzKHRoaXMuc25hcHNob3Quc2VhcmNoUGFyYW1zKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZhY2V0c1NlYXJjaC5yZXNldCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmFjZXRzU2lkZW5hdi5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobmV3U2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsUG9zaXRpb24oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLiRkaWFsb2cuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYSBuZXcgcGFnZSByZXN1bHRcclxuICAgKiBAcGFyYW0gZSA6IHRoZSBNYXRQYWdpbmF0b3IgUGFnZUV2ZW50IGRhdGFcclxuICAgKi9cclxuICBmZXRjaE1vcmUoZTogYW55KSB7XHJcbiAgICBsZXQgZmlyc3QgPSBlLnBhZ2VJbmRleCAqIHRoaXMuc25hcHNob3Quc2VhcmNoUGFyYW1zLmNvdW50O1xyXG4gICAgdGhpcy5zbmFwc2hvdC5zZWFyY2hQYXJhbXMuZmlyc3QgPSBmaXJzdDtcclxuICAgIHRoaXMuZmV0Y2goKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmYWNldHNcclxuICAgKiBAcGFyYW0gc2VhcmNoUGFyYW1zIDogdGhlIGN1cnJlbnQgc2VhcmNoIHBhcmFtcyB0byB1c2UgdG8gZ2F0aGVyIGZhY2V0cyBvciBudWxsIHRvIHVzZSBjdXJyZW50IHNuYXBzaG90XHJcbiAgICovXHJcbiAgZGlzcGxheUZhY2V0cyhzZWFyY2hQYXJhbXM6IGFueSA9IG51bGwpIHtcclxuICAgIGlmICghdGhpcy4kY2xpcHBlci5sb2dnZWRJbikgcmV0dXJuO1xyXG4gICAgaWYgKHNlYXJjaFBhcmFtcykge1xyXG4gICAgICB0aGlzLmZhY2V0c1NlYXJjaC5idXN5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy4kY2xpcHBlci5yZWZlcmVuY2VzRmFjZXRzKHNlYXJjaFBhcmFtcylcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZhY2V0c1NlYXJjaC51cGRhdGUoci52YWx1ZS5mYWNldHMsIG51bGwpO1xyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHRoaXMuZmFjZXRzU2VhcmNoLmhhc0ZhY2V0cyAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMuZmFjZXRzQ2xvc2VkICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1xICE9PSAneHMnXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mYWNldHNPcGVuKCk7XHJcbiAgICAgICAgICAgICAgZWxzZSB0aGlzLmZhY2V0c0Nsb3NlKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5mYWNldHMgPSB0aGlzLmZhY2V0c1NlYXJjaDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXNldFNjcm9sbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mYWNldHNTZWFyY2guYnVzeSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cykge1xyXG4gICAgICB0aGlzLmZhY2V0c1NlYXJjaC5yZXN0b3JlRnJvbSh0aGlzLnNuYXBzaG90LmZhY2V0cyk7XHJcbiAgICAgIGlmICh0aGlzLmZhY2V0c1NlYXJjaC5oYXNGYWNldHMgJiYgIXRoaXMuZmFjZXRzQ2xvc2VkICYmIHRoaXMubXEgIT09ICd4cycpXHJcbiAgICAgICAgdGhpcy5mYWNldHNPcGVuKCk7XHJcbiAgICAgIGVsc2UgdGhpcy5mYWNldHNDbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgY3VycmVudCBkaWFsb2cgYW5kIHJldHVybiB0aGUgaWQgdG8gbmF2aWdhdGUgdG9cclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKi9cclxuICBvcGVuKGlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgaWQ6IGlkIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwiY2xpcHBlci1yZWZlcmVuY2VzLWZpeGVkXCI+XHJcbiAgPGRpdiBpZD1cImNsaXBwZXItcmVmZXJlbmNlcy1oZWFkZXJcIj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD0nMTBweCcgZnhGaWxsPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7dGl0bGV9fSA8L2gyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgbWF0VG9vbHRpcD1cIkNoaXVkaVwiXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2hpdWRpXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4RmlsbCBzdHlsZT1cInBhZGRpbmc6IDAgMCAwIDE1cHg7XCI+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICBAaWYgKHNuYXBzaG90LnNlYXJjaFBhcmFtcy5tb2RlID09IDEpIHtcclxuICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBuYW1lPVwiZXhjbHVkZVRleHRSZWZlcmVuY2VzXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInNuYXBzaG90LnNlYXJjaFBhcmFtcy5leGNsdWRlVGV4dFJlZmVyZW5jZXNcIiAoY2hhbmdlKT1cImZldGNoKHRydWUpXCI+XHJcbiAgICAgICAgTW9zdHJhIHNvbG8gc2UgY2l0YXRpIG5lbGxlIG5vdGU8L21hdC1jaGVja2JveD5cclxuICAgICAgfVxyXG4gICAgICBAaWYgKHNuYXBzaG90LnNlYXJjaFBhcmFtcy5tb2RlID09IDIpIHtcclxuICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBuYW1lPVwiZXhjbHVkZU5vdGVzUmVmZXJlbmNlc1wiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzbmFwc2hvdC5zZWFyY2hQYXJhbXMuZXhjbHVkZU5vdGVzUmVmZXJlbmNlc1wiIChjaGFuZ2UpPVwiZmV0Y2godHJ1ZSlcIj5cclxuICAgICAgICBNb3N0cmEgc29sbyBzZSBjaXRhbm8gbmVsIHRlc3RvIGlsIGRvY3VtZW50b1xyXG4gICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgQGlmIChzZWxlY3Rpb24uaGFzVmFsdWUoKSkge1xyXG4gICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gbWF0VG9vbHRpcD1cIkF6aW9uaSBkYSBlc2VndWlyZSBzdWdsaSBlbGVtZW50aSBzZWxlemlvbmF0aVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pIHBlciBlbGVtZW50aSBzZWxlemlvbmF0aSdcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVNlbGVjdGlvbnNcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhc25hcHNob3QudG90YWxcIj5cclxuICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIFttYXRCYWRnZV09XCJzZWxlY3Rpb24uYWxsLmxlbmd0aFwiXHJcbiAgICAgICAgICBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+cGxheWxpc3RfYWRkX2NoZWNrPC9tYXQtaWNvbj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLW1lbnUtZHJvcC1kb3duXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgICA8bWF0LW1lbnUgI21lbnVTZWxlY3Rpb25zPVwibWF0TWVudVwiPlxyXG4gICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgW3NlbGVjdGlvblNvdXJjZV09XCJzZWxlY3Rpb25cIiBbaXNSZWFkYWJsZV09XCJmYWxzZVwiIFtpc1JlZmVyZW5jZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgPC9jbGlwcGVyLWRvY3VtZW50LW1lbnU+XHJcbiAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgIEBpZiAoZmFjZXRzU2VhcmNoICYmIGZhY2V0c1NlYXJjaC5oYXNGYWNldHMgJiYgZmFjZXRzU2lkZW5hdiAmJiAoIWZhY2V0c1NpZGVuYXYub3BlbmVkIHx8IGZhY2V0c0Nsb3NlZCkpIHtcclxuICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBtYXRUb29sdGlwPVwiQWZmaW5hIHJpY2VyY2FcIiBhcmlhLWxhYmVsPVwiJ0FmZmluYSByaWNlcmNhJ1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZmFjZXRzT3BlbigpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+bWVudV9vcGVuPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgc3R5bGU9XCJwYWRkaW5nOjAgMCAwIDE1cHhcIiBbbmdTdHlsZV09XCJ7J21pbi1oZWlnaHQucHgnOiBjb250ZW50SGVpZ2h0fVwiPlxyXG4gIDxtYXQtc2lkZW5hdi1jb250YWluZXIgW25nU3R5bGVdPVwieydoZWlnaHQucHgnOiBjb250ZW50SGVpZ2h0fVwiPlxyXG4gICAgPG1hdC1zaWRlbmF2ICNmYWNldHNTaWRlbmF2IHBvc2l0aW9uPVwiZW5kXCIgYXV0b0ZvY3VzPVwiZmFsc2VcIiBvcGVuZWQ9XCJmYWxzZVwiIG1vZGU9XCJ7e2ZhY2V0c01vZGV9fVwiXHJcbiAgICAgIGNsYXNzPVwic2lkZW5hdiBzaWRlbmF2LWZhY2V0c1wiPlxyXG4gICAgICBAaWYgKGZhY2V0c1NlYXJjaC5idXN5KSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaWRlbmF2LW92ZXJsYXlcIj48L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6NXB4XCI+XHJcbiAgICAgICAgICBAaWYgKGZhY2V0c1NlYXJjaC5idXN5KSB7XHJcbiAgICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBjbGFzcz1cInNpZGVuYXYtbG9hZGVyXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCI2NHB4XCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhGaWxsIGNsYXNzPVwic2lkZW5hdi10aXRsZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBmeExheW91dEFsaWduPVwic3RhcnRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNpZGVuYXYtdGl0bGVcIj5BZmZpbmEgcmljZXJjYTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJOYXNjb25kaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmFjZXRzQ2xvc2UodHJ1ZSlcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuO1wiPlxyXG4gICAgICAgICAgPGNsaXBwZXItc2VhcmNoLWZhY2V0cyAjZmFjZXRzU2VhcmNoPjwvY2xpcHBlci1zZWFyY2gtZmFjZXRzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXNpZGVuYXY+XHJcbiAgICA8bWF0LXNpZGVuYXYtY29udGVudD5cclxuICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7J2hlaWdodC5weCc6IGNvbnRlbnRIZWlnaHQgfVwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjEwMFwiIGlkPVwicmVmZXJlbmNlc19jb250YWluZXJcIiBzdHlsZT1cIm92ZXJmbG93OiBhdXRvXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdzpoaWRkZW5cIj5cclxuICAgICAgICAgICAgICBAaWYgKCFzbmFwc2hvdC50b3RhbCkge1xyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOjMycHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1ncmV5ZWQtMVwiIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXInPlxyXG4gICAgICAgICAgICAgICAgICA8cD5OZXNzdW4gZWxlbWVudG8gZGEgdmlzdWFsaXp6YXJlLjwvcD5cclxuICAgICAgICAgICAgICAgICAgPHA+SWwgZmlsdHJvIGFwcGxpY2F0byBub24gY29uc2VudGUgbGEgc2VsZXppb25lIGRpIGFsY3VuIHJpc3VsYXRvLjwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAaWYgKHNuYXBzaG90LnRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc25hcHNob3QuaXRlbXM7IHRyYWNrIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgKGNvbnRleHRtZW51KT1cIm9uQ29udGV4dE1lbnUoJGV2ZW50LCBpdGVtKVwiIChtb3VzZWVudGVyKT1cIml0ZW0uaXNPdmVyID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIml0ZW0uaXNPdmVyID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDE1cHg7IHBhZGRpbmctdG9wOjI0cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tYWNjZW50XCI+e3tpdGVtLmdyb3VwfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMHB4XCIgZnhGaWxsIGNsYXNzPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpdGVtLXNlbGVjdGVkJzogc2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI0OHB4XCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBmeExheW91dEFsaWduPVwiY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKCRzY3JlZW4uaXNUb3VjaGFibGUgfHwgaXRlbS5pc092ZXIgfHwgc2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKGl0ZW0sIGl0ZW0uZG9jdW1lbnRJZCkgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIxMDBcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgQGlmICghaXRlbS5pc0p1cmlzICYmIGl0ZW0ubW9kZWwgIT0gOSAmJiAoaXRlbS5tb2RlbCAhPSAxMSB8fCBzbmFwc2hvdC5zZWFyY2hQYXJhbXMubW9kZSA9PSAyKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5tb2RlbE5hbWUgJiYgaXRlbS5tb2RlbE5hbWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGluZSBpdGVtLWxpbmUtMyBpdGVtLWxpbmUtcmVhZCBpdGVtLWdyZXllZC0xIHVwcGVyY2FzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ubW9kZWxOYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWl0ZW0uaXNKdXJpcyAmJiBpdGVtLm1vZGVsID09IDIyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1saW5lIGl0ZW0tbGluZS0zIGl0ZW0tbGluZS1yZWFkIGl0ZW0tZ3JleWVkLTEgdXBwZXJjYXNlXCI+QVJTXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJMT0c8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5hdXRob3IgJiYgaXRlbS5vcmlnaW4gPT09ICdMUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWxpbmUgaXRlbS1saW5lLTMgaXRlbS1saW5lLXJlYWQgaXRlbS1ncmV5ZWQtMSB1cHBlcmNhc2VcIj57e2l0ZW0uYXV0aG9yfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWxpbmUgaXRlbS1saW5lLTIgaXRlbS1saW5lLXJlYWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW4oaXRlbS5kb2N1bWVudElkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQXByaSBkb2N1bWVudG8gJyArIChpdGVtLnRpdGxlMSA/IGl0ZW0udGl0bGUxOiBpdGVtLnRpdGxlMilcIj57e2l0ZW0udGl0bGUxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtLnRpdGxlMSA6IGl0ZW0udGl0bGUyfX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5wYXJ0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tYmFkZ2VcIj5QQVJURSB7e2l0ZW0ucGFydH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0udGl0bGUxICYmIGl0ZW0udGl0bGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1saW5lIGl0ZW0tbGluZS0yIGl0ZW0tbGluZS1yZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS50aXRsZTJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24gKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1saW5lIGl0ZW0tbGluZS0zIGl0ZW0tbGluZS1yZWFkIGl0ZW0tZ3JleWVkLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLm9yaWdpbkRlc2NyaXB0aW9ufX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmFuY2hvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGluZSBpdGVtLWxpbmUtMyBpdGVtLWxpbmUtcmVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1saW5lLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGluZS1ibG9jay10aXRsZVwiPkRFVFRBR0xJTzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChhIG9mIGl0ZW0uYW5jaG9yczsgdHJhY2sgYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYS51cmkgJiYgYS50ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGlua1wiIHN0eWxlPSdsaW5lLWhlaWdodDogMThweDsgbWFyZ2luLXJpZ2h0OiA4cHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW4oYS5kb2N1bWVudElkICsgJyMnICsgYS51cmkpXCIgW21hdFRvb2x0aXBdPVwiYS50aXRsZVwiPnt7YS50ZXh0fX0gQGlmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEudmVyeVJlbGV2YW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0nZm9udC1zaXplOngtc21hbGw7IGhlaWdodDogMTBweDsgd2lkdGg6MTBweCcgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk1vbHRvIHJpbGV2YW50ZVwiPnRodW1iX3VwX2FsdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFhLnVyaSAmJiBhLnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9J2xpbmUtaGVpZ2h0OiAxOHB4OyBtYXJnaW4tcmlnaHQ6IDhweCAnPnt7YS50ZXh0fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS52YWxpZGl0eVN0YXRlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGluZSBpdGVtLWxpbmUtMyBpdGVtLWxpbmUtcmVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogcmVkOyBjb2xvcjogd2hpdGU7IHBhZGRpbmc6IDJweCA0cHg7IGJvcmRlci1yYWRpdXM6IDNweDsgYm9yZGVyOiAxcHggc29saWQgcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnZhbGlkaXR5RGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI0OHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmlzT3ZlciB8fCBpdGVtLmlzTWVudU9wZW4gfHwgc2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIk1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG9wemlvbmknXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7aXRlbTogaXRlbX1cIiAoY2xpY2spPVwiaXRlbS5pc01lbnVPcGVuID0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPGRpdiAjY29udGV4dE1lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIiBzdHlsZT1cInBvc2l0aW9uOiBmaXhlZFwiIFtzdHlsZS5sZWZ0XT1cImNvbnRleHRNZW51UG9zaXRpb24ueFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3BdPVwiY29udGV4dE1lbnVQb3NpdGlvbi55XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7aXRlbTogaXRlbX1cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1tZW51ICNjb250ZXh0TWVudT1cIm1hdE1lbnVcIiAoY2xvc2VkKT1cInVwZGF0ZU1lbnVCdXR0b25zVmlzaWJpbGl0eSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xpcHBlci1kb2N1bWVudC1tZW51IFtwYXJlbnRdPVwidGhpc1wiIFtpdGVtXT1cIml0ZW1cIiBbaXNSZWFkYWJsZV09XCJmYWxzZVwiIFtpc1JlZmVyZW5jZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbGlwcGVyLWRvY3VtZW50LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgQGlmIChzbmFwc2hvdC50b3RhbCA+IDApIHtcclxuICAgICAgICAgICAgICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgY2xhc3M9XCJwYWdpbmF0b3JcIiBbaGlkZVBhZ2VTaXplXT1cInRydWVcIiBbbGVuZ3RoXT1cInNuYXBzaG90LnRvdGFsXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cIjI1XCIgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIiAocGFnZSk9XCJmZXRjaE1vcmUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXNpZGVuYXYtY29udGVudD5cclxuICA8L21hdC1zaWRlbmF2LWNvbnRhaW5lcj5cclxuPC9kaXY+Il19
|
|
363
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFn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cEIsNEJBQTRCO3dCQUM1Qiw0QkFBNEI7d0JBQzVCLGdDQUFnQztxQkFFakM7OEJBSXdCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xyXG5pbXBvcnQgeyBNYXREcmF3ZXIsIE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcclxuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7XHJcbiAgQ2xpcHBlckRvY3VtZW50SW5mbyxcclxuICBDbGlwcGVyRG9jdW1lbnRTbmFwc2hvdE1vZGUsIENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdFxyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRXh0ZW5kZWRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZXh0ZW5kZWQnO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mYWNldHMvc2VhcmNoLWZhY2V0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlciB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtbWFuYWdlci9zZWFyY2gtcmVzdWx0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtaXRlbS9zZWFyY2gtcmVzdWx0LWl0ZW0uY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcHBlclJlZmVyZW5jZXNEaWFsb2dEYXRhIHtcclxuICBtb2RlPzogQ2xpcHBlckRvY3VtZW50U25hcHNob3RNb2RlIHwgbnVsbDtcclxuICBhbmNob3I/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGFuY2hvclRpdGxlPzogc3RyaW5nIHwgbnVsbDtcclxuICBpZDogc3RyaW5nO1xyXG4gIG1vZGVsOiBudW1iZXI7XHJcblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVmZXJlbmNlcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVmZXJlbmNlcy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgRmxleE1vZHVsZSxcclxuICAgIE1hdERpYWxvZ1RpdGxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRNZW51TW9kdWxlLFxyXG4gICAgTWF0QmFkZ2VNb2R1bGUsXHJcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXHJcbiAgICBNYXREaWFsb2dDb250ZW50LFxyXG4gICAgRXh0ZW5kZWRNb2R1bGUsXHJcbiAgICBNYXRTaWRlbmF2TW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXHJcbiAgICBDbGlwcGVyRG9jdW1lbnRNZW51Q29tcG9uZW50LFxyXG4gICAgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCwgICAgXHJcbiAgICBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudFxyXG4gICAgXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50IGV4dGVuZHMgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXJcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdmaWx0ZXJQYW5lJykgZmlsdGVyUGFuZSE6IE1hdERyYXdlcjtcclxuXHJcbiAgcHJpdmF0ZSBoZWlnaHQ6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBDbGlwcGVyUmVmZXJlbmNlc0RpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKSA/PyB7IG1vZGU6IENsaXBwZXJEb2N1bWVudFNuYXBzaG90TW9kZS5SZWZlcmVuY2VzSW4gfTtcclxuICBwcm90ZWN0ZWQgdGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLmRpYWxvZ0RhdGEubW9kZSkge1xyXG4gICAgICAgIGNhc2UgQ2xpcHBlckRvY3VtZW50U25hcHNob3RNb2RlLlJlZmVyZW5jZXNJbjpcclxuICAgICAgICAgIHRoaXMudGl0bGUgPSBcIkRvY3VtZW50aSByaWNoaWFtYXRpIG5lbGxlIG5vdGUgbyBuZWwgdGVzdG9cIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ2xpcHBlckRvY3VtZW50U25hcHNob3RNb2RlLlJlZmVyZW5jZXNPdXQ6XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gXCJEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm8gcXVlbGxvIGluIHZpc2lvbmVcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ2xpcHBlckRvY3VtZW50U25hcHNob3RNb2RlLkNoYW5nZXNJbjpcclxuICAgICAgICAgIHRoaXMudGl0bGUgPSBcIk1vZGlmaWNoZSBzdWJpdGVcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ2xpcHBlckRvY3VtZW50U25hcHNob3RNb2RlLkNoYW5nZXNPdXQ6XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gXCJNb2RpZmljaGUgYXBwb3J0YXRlXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENsaXBwZXJEb2N1bWVudFNuYXBzaG90TW9kZS5KdXJpczpcclxuICAgICAgICAgIHRoaXMudGl0bGUgPSBcIkdpdXJpc3BydWRlbnphIGFzc29jaWF0YVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5hbmNob3JUaXRsZSkge1xyXG4gICAgICAgIHRoaXMudGl0bGUgKz0gXCIgLSBcIiArIHRoaXMuZGlhbG9nRGF0YS5hbmNob3JUaXRsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXNlIHNlcnZpY2Ugc25hcHNob3RcclxuICAgICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMuY2xpcHBlclNlcnZpY2UucmVmZXJlbmNlc1NuYXBzaG90ID8/IHsgc2VhcmNoUGFyYW1zOiB7fSwgaW50ZXJ2YWw6IFwiLTFcIiB9O1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZG9jdW1lbnRTbmFwc2hvdE1vZGUgIT09IHRoaXMuZGlhbG9nRGF0YS5tb2RlIHx8XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZG9jdW1lbnRJZCAhPT0gdGhpcy5kaWFsb2dEYXRhLmlkIHx8XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuYW5jaG9yICE9PSB0aGlzLmRpYWxvZ0RhdGEuYW5jaG9yXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zID0ge1xyXG4gICAgICAgICAgZG9jdW1lbnRTbmFwc2hvdE1vZGU6IHRoaXMuZGlhbG9nRGF0YS5tb2RlLFxyXG4gICAgICAgICAgbW9kZWw6IHRoaXMuZGlhbG9nRGF0YS5tb2RlbCxcclxuICAgICAgICAgIGFuY2hvcjogdGhpcy5kaWFsb2dEYXRhLmFuY2hvcixcclxuICAgICAgICAgIGRvY3VtZW50SWQ6IHRoaXMuZGlhbG9nRGF0YS5pZCxcclxuICAgICAgICAgIHVzZU1vZGlmaWVySW5mbzogdGhpcy5kaWFsb2dEYXRhLm1vZGUgPT09IENsaXBwZXJEb2N1bWVudFNuYXBzaG90TW9kZS5DaGFuZ2VzT3V0LFxyXG4gICAgICAgICAgcmV0dXJuTW9kaWZpZXJJbmZvOiB0aGlzLmRpYWxvZ0RhdGEubW9kZSAhPT0gQ2xpcHBlckRvY3VtZW50U25hcHNob3RNb2RlLkNoYW5nZXNPdXQsXHJcbiAgICAgICAgICBmaXJzdDogMCxcclxuICAgICAgICAgIGNvdW50OiAxNSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UucmVmZXJlbmNlc1NuYXBzaG90ID0gdGhpcy5zbmFwc2hvdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3RhYmxlTW9kZWw8YW55LCBzdHJpbmc+KHRydWUsICdkb2N1bWVudElkJyk7XHJcblxyXG4gICAgLy8gT2JzZXJ2ZSBsYXlvdXQgY2hhbmdlc1xyXG4gICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJcclxuICAgICAgLm9ic2VydmUoW1xyXG4gICAgICAgIEJyZWFrcG9pbnRzLlhTbWFsbCxcclxuICAgICAgICBCcmVha3BvaW50cy5TbWFsbCxcclxuICAgICAgICBCcmVha3BvaW50cy5NZWRpdW0sXHJcbiAgICAgICAgQnJlYWtwb2ludHMuTGFyZ2UsXHJcbiAgICAgICAgQnJlYWtwb2ludHMuWExhcmdlLFxyXG4gICAgICBdKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IHF1ZXJ5IG9mIE9iamVjdC5rZXlzKHJlc3VsdC5icmVha3BvaW50cykpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuYnJlYWtwb2ludHNbcXVlcnldKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAvLyBSZWFjdCB0byB3aW5kb3cgc2l6ZSBjaGFuZ2VcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gSGFuZGxlIGZpbHRlciBwYW5lIFxyXG4gICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgIC8vIEhhbmRsZSBmYWNldHNcclxuICAgICAgaWYgKHRoaXMuZmFjZXRzKSB7XHJcbiAgICAgICAgdGhpcy5mYWNldHMuY2hhbmdlZFxyXG4gICAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMuZnJvbURhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzLmZyb21EYXRlO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzLnRvRGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy55ZWFyID0gdGhpcy5zbmFwc2hvdC5mYWNldHMuZnJvbURhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkSW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy55ZWFyID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMuc2VjdG9yIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzLmNoYW5nZWRTZWN0b3IpXHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID0gdGhpcy5zbmFwc2hvdC5mYWNldHMuc2VjdG9yO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMudHlwZSB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkVHlwZSlcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50eXBlID0gdGhpcy5zbmFwc2hvdC5mYWNldHMudHlwZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzLmF1dGhvciB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkQXV0aG9yKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmF1dGhvciA9IHRoaXMuc25hcHNob3QuZmFjZXRzLmF1dGhvcjtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaCh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmludGVydmFsID09PSBcIi0xXCIpIHtcclxuICAgICAgdGhpcy5zbmFwc2hvdC5pbnRlcnZhbCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBEaXNwbGF5IGN1cnJlbnQgc25hcHNob3QgZmFjZXRzIGlmIG5lY2Vzc2FyeVxyXG4gICAgICB0aGlzLnJlc3RvcmVGYWNldHMoKTtcclxuICAgICAgdGhpcy5yZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2l6ZSBcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGlwcGVyLXJlZmVyZW5jZXMtc2Nyb2xsYWJsZScpO1xyXG4gICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRDdXJyZW50RGlhbG9nU2Nyb2xsYWJsZUhlaWdodChcclxuICAgICAgICAgIFsnY2xpcHBlci1yZWZlcmVuY2VzLWZpeGVkJ10sXHJcbiAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoZWlnaHQgIT0gdGhpcy5oZWlnaHQpIHtcclxuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdzdHlsZScsICdoZWlnaHQ6JyArIGhlaWdodCArICdweCAhaW1wb3J0YW50O21heC1oZWlnaHQ6JyArIGhlaWdodCArICdweCAhaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogU2hvdyBoaWRlIGZpbHRlciBwYW5lIG1hbnVhbGx5XHJcbiAqL1xyXG4gIHByb3RlY3RlZCB0b2dnbGVGaWx0ZXJQYW5lKCkge1xyXG4gICAgdGhpcy5maWx0ZXJQYW5lQ2xvc2VkID0gIXRoaXMuZmlsdGVyUGFuZUNsb3NlZDtcclxuICAgIHRoaXMuZmlsdGVyUGFuZT8udG9nZ2xlKCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBmaWx0ZXIgcGFuZSB2aXNpYmlsaXR5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlclBhbmUpIHtcclxuICAgICAgaWYgKHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5YU21hbGwpIHx8XHJcbiAgICAgICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLlNtYWxsKSB8fFxyXG4gICAgICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5NZWRpdW0pKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyUGFuZS5vcGVuZWQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUubW9kZSA9ICdvdmVyJztcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUuZGlzYWJsZUNsb3NlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lSGFzQmFja2Ryb3AgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5maWx0ZXJQYW5lLm9wZW5lZCAmJiAhdGhpcy5maWx0ZXJQYW5lQ2xvc2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUub3BlbigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJQYW5lLm9wZW5lZCAmJiB0aGlzLmZpbHRlclBhbmVDbG9zZWQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUubW9kZSA9ICdzaWRlJztcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmVIYXNCYWNrZHJvcCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgZGlhbG9nXHJcbiAgICovXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLnNhdmVTY3JvbGxQb3NpdGlvbigpO1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgc2Nyb2xsIHBvc2l0aW9uXHJcbiAgICovXHJcbiAgc2F2ZVNjcm9sbFBvc2l0aW9uKCkge1xyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS5zY3JvbGxhYmxlLnNhdmVQb3NpdGlvbihcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZG9jdW1lbnRJZCxcclxuICAgICAgJyNyZWZlcmVuY2VzX2NvbnRhaW5lcidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCBzY3JvbGwgcG9zaXRpb25cclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0U2Nyb2xsUG9zaXRpb24oKSB7XHJcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjY2xpcHBlci1yZWZlcmVuY2VzLXNjcm9sbGVyJykuc2Nyb2xsVG8oMCwgMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN0b3JlIHNjcm9sbCBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkge1xyXG4gICAgdGhpcy5jbGlwcGVyU2VydmljZS5zY3JvbGxhYmxlLnRyeVJlc3RvcmVQb3NpdGlvbihcclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZG9jdW1lbnRJZCxcclxuICAgICAgJyNjbGlwcGVyLXJlZmVyZW5jZXMtc2Nyb2xsZXInXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgZG9jdW1lbnQgbGlua3MgYnkgZW1haWxcclxuICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGFkZFxyXG4gICAqL1xyXG4gIHNlbmRUbyhpdGVtOiBhbnkgPSBudWxsKSB7XHJcbiAgICB0aGlzLnNlbmRJdGVtc1RvKGl0ZW0gPyBbaXRlbV0gOiB0aGlzLnNlbGVjdGlvbi5hbGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBhIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBuZXdTZWFyY2g6IHRydWUgaWYgaXMgYSBuZXcgc2VhcmNoXHJcbiAgICovXHJcbiAgZmV0Y2gobmV3U2VhcmNoOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbikgcmV0dXJuO1xyXG4gICAgaWYgKG5ld1NlYXJjaCkgdGhpcy5maWx0ZXJQYXJhbXMuZmlyc3QgPSAwO1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMudXNlTW9kaWZpZXJJbmZvID1cclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZG9jdW1lbnRTbmFwc2hvdE1vZGUgPT09IENsaXBwZXJEb2N1bWVudFNuYXBzaG90TW9kZS5DaGFuZ2VzT3V0O1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMucmV0dXJuTW9kaWZpZXJJbmZvID1cclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuZG9jdW1lbnRTbmFwc2hvdE1vZGUgIT09IENsaXBwZXJEb2N1bWVudFNuYXBzaG90TW9kZS5DaGFuZ2VzT3V0O1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ1JpY2VyY2EgaW4gY29yc28uLi4nKTtcclxuICAgIHRoaXMuY2xpcHBlclNlcnZpY2UucmVmZXJlbmNlcyh0aGlzLmZpbHRlclBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHIpID0+IHtcclxuICAgICAgICAgIGlmICghci5zdWNjZXNzKSB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVSZXN1bHRzKHIudmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gSGFuZGxlIGZhY2V0c1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC50b3RhbCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cy5oYXNUb29NYW55UmVzdWx0cyA9IHRoaXMuc25hcHNob3QudG90YWwgPj0gMTAwMDtcclxuICAgICAgICAgICAgICBpZiAobmV3U2VhcmNoKVxyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGZhY2V0c1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEZhY2V0cygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmFjZXRzLnJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChuZXdTZWFyY2gpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRTY3JvbGxQb3NpdGlvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhIG5ldyBwYWdlIHJlc3VsdFxyXG4gICAqIEBwYXJhbSBlIDogdGhlIE1hdFBhZ2luYXRvciBQYWdlRXZlbnQgZGF0YVxyXG4gICAqL1xyXG4gIGZldGNoTW9yZShlOiBhbnkpIHtcclxuICAgIGxldCBmaXJzdCA9IGUucGFnZUluZGV4ICogdGhpcy5maWx0ZXJQYXJhbXMuY291bnQ7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcy5maXJzdCA9IGZpcnN0O1xyXG4gICAgdGhpcy5mZXRjaCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0c1xyXG4gICAqL1xyXG4gIGZldGNoRmFjZXRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKSByZXR1cm47XHJcbiAgICB0aGlzLmZhY2V0cy5idXN5LnNldCh0cnVlKTtcclxuICAgIHRoaXMuY2xpcHBlclNlcnZpY2UucmVmZXJlbmNlc0ZhY2V0cyh0aGlzLmZpbHRlclBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHIpID0+IHtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmVzdWx0cyhudWxsLCByLnZhbHVlLmZhY2V0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsUG9zaXRpb24oKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZhY2V0cy5idXN5LnNldChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBUcnkgdG8gcmVzdG9yZSBzdG9yZWQgZmFjZXRzXHJcbiAqL1xyXG4gIHJlc3RvcmVGYWNldHMoKSB7XHJcbiAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMpIHtcclxuICAgICAgdGhpcy5mYWNldHMucmVzdG9yZSh0aGlzLnNuYXBzaG90LmZhY2V0cyk7XHJcbiAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGN1cnJlbnQgZGlhbG9nIGFuZCByZXR1cm4gdGhlIGlkIHRvIG5hdmlnYXRlIHRvXHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKi9cclxuICBvcGVuKGRvY3VtZW50SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBpZDogZG9jdW1lbnRJZCB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cImNsaXBwZXItcmVmZXJlbmNlcy1maXhlZFwiPlxyXG4gIDxkaXYgaWQ9XCJjbGlwcGVyLXJlZmVyZW5jZXMtaGVhZGVyXCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4TGF5b3V0R2FwPScxMHB4JyBmeEZpbGw+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7dGl0bGV9fSA8L2gyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cInN0YXJ0XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQ2hpdWRpXCIgYXJpYS1sYWJlbD1cIkNoaXVkaVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiIGNsYXNzPVwiZGlhbG9nLWNsb3NlXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsIHN0eWxlPVwicGFkZGluZzogMCAxMHB4IDAgMjRweDtcIj5cclxuICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICBAaWYgKHNuYXBzaG90LnNlYXJjaFBhcmFtcy5kb2N1bWVudFNuYXBzaG90TW9kZSA9PSAxKSB7XHJcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIG5hbWU9XCJleGNsdWRlVGV4dFJlZmVyZW5jZXNcIiBbKG5nTW9kZWwpXT1cInNuYXBzaG90LnNlYXJjaFBhcmFtcy5leGNsdWRlVGV4dFJlZmVyZW5jZXNcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwiZmV0Y2godHJ1ZSlcIj5cclxuICAgICAgICBNb3N0cmEgc29sbyBzZSBjaXRhdGkgbmVsbGUgbm90ZVxyXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgIH0gQGVsc2UgaWYgKHNuYXBzaG90LnNlYXJjaFBhcmFtcy5kb2N1bWVudFNuYXBzaG90TW9kZSA9PSAyKSB7XHJcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIG5hbWU9XCJleGNsdWRlTm90ZXNSZWZlcmVuY2VzXCIgWyhuZ01vZGVsKV09XCJzbmFwc2hvdC5zZWFyY2hQYXJhbXMuZXhjbHVkZU5vdGVzUmVmZXJlbmNlc1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJmZXRjaCh0cnVlKVwiPlxyXG4gICAgICAgIE1vc3RyYSBzb2xvIHNlIGNpdGFubyBuZWwgdGVzdG8gaWwgZG9jdW1lbnRvXHJcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgQGlmIChzZWxlY3Rpb24uaGFzVmFsdWUoKSkge1xyXG4gICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gbWF0VG9vbHRpcD1cIkF6aW9uaSBkYSBlc2VndWlyZSBzdWdsaSBlbGVtZW50aSBzZWxlemlvbmF0aVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pIHBlciBlbGVtZW50aSBzZWxlemlvbmF0aSdcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVNlbGVjdGlvbnNcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhc25hcHNob3QudG90YWxcIj5cclxuICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIFttYXRCYWRnZV09XCJzZWxlY3Rpb24uYWxsLmxlbmd0aFwiXHJcbiAgICAgICAgICBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+cGxheWxpc3RfYWRkX2NoZWNrPC9tYXQtaWNvbj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLW1lbnUtZHJvcC1kb3duXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgICA8bWF0LW1lbnUgI21lbnVTZWxlY3Rpb25zPVwibWF0TWVudVwiPlxyXG4gICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgW3NlbGVjdGlvblNvdXJjZV09XCJzZWxlY3Rpb25cIiBbaXNSZWFkYWJsZV09XCJmYWxzZVwiIFtpc1JlZmVyZW5jZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgPC9jbGlwcGVyLWRvY3VtZW50LW1lbnU+XHJcbiAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgIEBpZiAoc25hcHNob3QgJiYgc25hcHNob3QuZmFjZXRzPy5oYXNGYWNldHMgJiYgZmlsdGVyUGFuZSAmJiAoIWZpbHRlclBhbmUub3BlbmVkIHx8IGZpbHRlclBhbmVDbG9zZWQpKSB7XHJcbiAgICAgIDxkaXYgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gIG1hdFRvb2x0aXA9XCJBZmZpbmEgcmljZXJjYVwiIGFyaWEtbGFiZWw9XCInQWZmaW5hIHJpY2VyY2EnXCJcclxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5tZW51X29wZW48L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBpZD1cImNsaXBwZXItcmVmZXJlbmNlcy1zY3JvbGxhYmxlXCI+XHJcbiAgPG1hdC1kcmF3ZXItY29udGFpbmVyIFtoYXNCYWNrZHJvcF09XCJmaWx0ZXJQYW5lSGFzQmFja2Ryb3BcIj5cclxuICAgIDxtYXQtZHJhd2VyICNmaWx0ZXJQYW5lIHBvc2l0aW9uPVwiZW5kXCIgY2xhc3M9XCJkcmF3ZXItc21hbGxcIj5cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIjQwcHhcIiBzdHlsZT1cIm1hcmdpbjowIDRweFwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIGNsYXNzPVwidGl0bGVcIj5BZmZpbmEgcmljZXJjYTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlRmlsdGVyUGFuZSgpXCJcclxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJOYXNjb25kaVwiPjxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgY2xhc3M9XCJzY3JvbGwtaGlkZGVuXCI+XHJcbiAgICAgICAgICA8Y2xpcHBlci1zZWFyY2gtZmFjZXRzICNmYWNldHM+PC9jbGlwcGVyLXNlYXJjaC1mYWNldHM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtZHJhd2VyPlxyXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgaWQ9XCJjbGlwcGVyLXJlZmVyZW5jZXMtc2Nyb2xsZXJcIj5cclxuICAgICAgICBAaWYgKCFzbmFwc2hvdC50b3RhbCkge1xyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cIm1lc3NhZ2VcIj48aT5OZXNzdW4gZWxlbWVudG8gZGEgdmlzdWFsaXp6YXJlLjwvaT48L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc25hcHNob3QuaXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICA8ZGl2IChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRNZW51KCRldmVudCwgaXRlbSlcIiAobW91c2VlbnRlcik9XCJpdGVtLmlzT3ZlciA9IHRydWVcIlxyXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJpdGVtLmlzT3ZlciA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIEBpZiAoaXRlbS5ncm91cCkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZ3JvdXAtdGl0bGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnc3BhY2VkJzogaSA+IDB9XCI+e3tpdGVtLmdyb3VwfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiNnB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbCBjbGFzcz1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXRlbS1zZWxlY3RlZCc6IHNlbGVjdGlvbi5pc1NlbGVjdGVkKGl0ZW0uZG9jdW1lbnRJZCkgfVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiNDhweFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoc2NyZWVuU2VydmljZS5pc1RvdWNoYWJsZSB8fCBpdGVtLmlzT3ZlciB8fCBzZWxlY3Rpb24uaXNTZWxlY3RlZChpdGVtLmRvY3VtZW50SWQpKSB7XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94ICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKGl0ZW0sIGl0ZW0uZG9jdW1lbnRJZCkgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cIml0ZW0tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGNsaXBwZXItc2VhcmNoLXJlc3VsdC1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbcGFyZW50XT1cInRoaXNcIj48L2NsaXBwZXItc2VhcmNoLXJlc3VsdC1pdGVtPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiNDhweFwiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pc092ZXIgfHwgaXRlbS5pc01lbnVPcGVuIHx8IHNlbGVjdGlvbi5pc1NlbGVjdGVkKGl0ZW0uZG9jdW1lbnRJZCkpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJNZW51XCJcclxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCIgKGNsaWNrKT1cIml0ZW0uaXNNZW51T3BlbiA9IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICNjb250ZXh0TWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIHN0eWxlPVwicG9zaXRpb246IGZpeGVkXCIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS50b3BdPVwiY29udGV4dE1lbnVQb3NpdGlvbi55XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiIChjbG9zZWQpPVwidXBkYXRlTWVudUJ1dHRvbnNWaXNpYmlsaXR5KClcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgW2l0ZW1dPVwiaXRlbVwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCIgW2lzUmVmZXJlbmNlXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICA8L2NsaXBwZXItZG9jdW1lbnQtbWVudT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBmb290ZXIgLS0+XHJcbiAgICAgIEBpZiAoKHNuYXBzaG90Py50b3RhbCA/PyAwKSA+IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWZvb3RlclwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgY2xhc3M9XCJwYWdpbmF0b3JcIiBbaGlkZVBhZ2VTaXplXT1cInRydWVcIiBbbGVuZ3RoXT1cInNuYXBzaG90Py50b3RhbCA/PyAwXCJcclxuICAgICAgICAgICAgW3BhZ2VTaXplXT1cImZpbHRlclBhcmFtcy5jb3VudCA/PyAxNVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCIgKHBhZ2UpPVwiZmV0Y2hNb3JlKCRldmVudClcIj5cclxuICAgICAgICAgIDwvbWF0LXBhZ2luYXRvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LWRyYXdlci1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
|