@igo2/integration 18.0.1-next.1 → 18.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/igo2-integration.mjs +5 -0
- package/esm2022/lib/about/about-tool/about-tool.component.mjs +152 -0
- package/esm2022/lib/about/about-tool/index.mjs +2 -0
- package/esm2022/lib/about/about.module.mjs +26 -0
- package/esm2022/lib/about/index.mjs +2 -0
- package/esm2022/lib/analytics/analytics-listener.service.mjs +149 -0
- package/esm2022/lib/analytics/index.mjs +2 -0
- package/esm2022/lib/catalog/catalog-browser-tool/catalog-browser-tool.component.mjs +117 -0
- package/esm2022/lib/catalog/catalog-browser-tool/catalog-browser-tool.module.mjs +19 -0
- package/esm2022/lib/catalog/catalog-library-tool/catalog-library-tool.component.mjs +110 -0
- package/esm2022/lib/catalog/catalog-library-tool/catalog-library-tool.module.mjs +19 -0
- package/esm2022/lib/catalog/catalog.module.mjs +19 -0
- package/esm2022/lib/catalog/catalog.state.mjs +58 -0
- package/esm2022/lib/catalog/index.mjs +6 -0
- package/esm2022/lib/context/context-editor-tool/context-editor-tool.component.mjs +33 -0
- package/esm2022/lib/context/context-manager-tool/context-manager-tool.component.mjs +46 -0
- package/esm2022/lib/context/context-permission-manager-tool/context-permission-manager-tool.component.mjs +23 -0
- package/esm2022/lib/context/context-share-tool/context-share-tool.component.mjs +40 -0
- package/esm2022/lib/context/context.directive.mjs +11 -0
- package/esm2022/lib/context/context.module.mjs +23 -0
- package/esm2022/lib/context/context.state.mjs +96 -0
- package/esm2022/lib/context/index.mjs +7 -0
- package/esm2022/lib/directions/directions-tool/directions-tool.component.mjs +121 -0
- package/esm2022/lib/directions/directions-tool/index.mjs +2 -0
- package/esm2022/lib/directions/directions.module.mjs +25 -0
- package/esm2022/lib/directions/directions.state.mjs +57 -0
- package/esm2022/lib/directions/index.mjs +3 -0
- package/esm2022/lib/draw/draw.module.mjs +18 -0
- package/esm2022/lib/draw/draw.state.mjs +43 -0
- package/esm2022/lib/draw/drawing-tool/drawing-tool.component.mjs +72 -0
- package/esm2022/lib/draw/drawing-tool/drawing-tool.module.mjs +19 -0
- package/esm2022/lib/draw/index.mjs +4 -0
- package/esm2022/lib/environment/environment.interface.mjs +2 -0
- package/esm2022/lib/environment/index.mjs +2 -0
- package/esm2022/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.animation.mjs +10 -0
- package/esm2022/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.component.mjs +43 -0
- package/esm2022/lib/filter/active-ogc-filter-tool/index.mjs +2 -0
- package/esm2022/lib/filter/active-time-filter-tool/active-time-filter-tool.animation.mjs +10 -0
- package/esm2022/lib/filter/active-time-filter-tool/active-time-filter-tool.component.mjs +43 -0
- package/esm2022/lib/filter/active-time-filter-tool/index.mjs +2 -0
- package/esm2022/lib/filter/filter.module.mjs +53 -0
- package/esm2022/lib/filter/index.mjs +18 -0
- package/esm2022/lib/filter/ogc-filter-tool/index.mjs +2 -0
- package/esm2022/lib/filter/ogc-filter-tool/ogc-filter-tool.component.mjs +22 -0
- package/esm2022/lib/filter/spatial-filter-tool/index.mjs +2 -0
- package/esm2022/lib/filter/spatial-filter-tool/spatial-filter-tool.component.mjs +589 -0
- package/esm2022/lib/filter/time-filter-tool/index.mjs +2 -0
- package/esm2022/lib/filter/time-filter-tool/time-filter-tool.component.mjs +22 -0
- package/esm2022/lib/geometry-form/data-issue-reporter-tool/data-issue-reporter-tool.component.mjs +188 -0
- package/esm2022/lib/geometry-form/data-issue-reporter-tool/index.mjs +2 -0
- package/esm2022/lib/geometry-form/geometry-form.module.mjs +37 -0
- package/esm2022/lib/geometry-form/index.mjs +2 -0
- package/esm2022/lib/import-export/import-export-tool/import-export-tool.component.mjs +113 -0
- package/esm2022/lib/import-export/import-export-tool/index.mjs +2 -0
- package/esm2022/lib/import-export/import-export.module.mjs +25 -0
- package/esm2022/lib/import-export/import-export.state.mjs +39 -0
- package/esm2022/lib/import-export/index.mjs +3 -0
- package/esm2022/lib/integration.module.mjs +70 -0
- package/esm2022/lib/map/advanced-map-tool/advanced-coordinates/advanced-coordinates.component.mjs +446 -0
- package/esm2022/lib/map/advanced-map-tool/advanced-map-tool.component.mjs +66 -0
- package/esm2022/lib/map/advanced-map-tool/advanced-swipe/advanced-swipe.component.mjs +157 -0
- package/esm2022/lib/map/advanced-map-tool/index.mjs +2 -0
- package/esm2022/lib/map/index.mjs +10 -0
- package/esm2022/lib/map/layer-list-tool.state.mjs +40 -0
- package/esm2022/lib/map/map-details-tool/index.mjs +2 -0
- package/esm2022/lib/map/map-details-tool/map-details-tool.component.mjs +190 -0
- package/esm2022/lib/map/map-legend/index.mjs +2 -0
- package/esm2022/lib/map/map-legend/map-legend-tool.component.mjs +165 -0
- package/esm2022/lib/map/map-proximity-tool/index.mjs +2 -0
- package/esm2022/lib/map/map-proximity-tool/map-proximity-tool.component.mjs +152 -0
- package/esm2022/lib/map/map-proximity.state.mjs +179 -0
- package/esm2022/lib/map/map-tool/index.mjs +2 -0
- package/esm2022/lib/map/map-tool/map-tool.component.mjs +152 -0
- package/esm2022/lib/map/map-tools/index.mjs +2 -0
- package/esm2022/lib/map/map-tools/map-tools.component.mjs +350 -0
- package/esm2022/lib/map/map.directive.mjs +15 -0
- package/esm2022/lib/map/map.module.mjs +59 -0
- package/esm2022/lib/map/map.state.mjs +56 -0
- package/esm2022/lib/measure/index.mjs +4 -0
- package/esm2022/lib/measure/measure.module.mjs +18 -0
- package/esm2022/lib/measure/measure.state.mjs +41 -0
- package/esm2022/lib/measure/measurer-tool/measurer-tool.component.mjs +51 -0
- package/esm2022/lib/measure/measurer-tool/measurer-tool.module.mjs +19 -0
- package/esm2022/lib/print/index.mjs +2 -0
- package/esm2022/lib/print/print-tool/index.mjs +2 -0
- package/esm2022/lib/print/print-tool/print-tool.component.mjs +32 -0
- package/esm2022/lib/print/print.module.mjs +25 -0
- package/esm2022/lib/search/index.mjs +7 -0
- package/esm2022/lib/search/query.state.mjs +48 -0
- package/esm2022/lib/search/search-bar/search-bar-binding.directive.mjs +71 -0
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +19 -0
- package/esm2022/lib/search/search-results-tool/search-results-tool.component.mjs +557 -0
- package/esm2022/lib/search/search-results-tool/search-results-tool.module.mjs +19 -0
- package/esm2022/lib/search/search.module.mjs +20 -0
- package/esm2022/lib/search/search.state.mjs +155 -0
- package/esm2022/lib/storage/index.mjs +2 -0
- package/esm2022/lib/storage/storage.state.mjs +25 -0
- package/esm2022/lib/tool/index.mjs +2 -0
- package/esm2022/lib/tool/tool.state.mjs +56 -0
- package/esm2022/lib/workspace/index.mjs +4 -0
- package/esm2022/lib/workspace/shared/edition-actions.service.mjs +75 -0
- package/esm2022/lib/workspace/shared/feature-actions.service.mjs +65 -0
- package/esm2022/lib/workspace/shared/index.mjs +3 -0
- package/esm2022/lib/workspace/shared/wfs-actions.service.mjs +77 -0
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +168 -0
- package/esm2022/lib/workspace/workspace-button/index.mjs +2 -0
- package/esm2022/lib/workspace/workspace-button/workspace-button.component.mjs +72 -0
- package/esm2022/lib/workspace/workspace.module.mjs +19 -0
- package/esm2022/lib/workspace/workspace.state.mjs +205 -0
- package/esm2022/public_api.mjs +35 -0
- package/fesm2022/igo2-integration.mjs +261 -257
- package/fesm2022/igo2-integration.mjs.map +1 -1
- package/lib/workspace/shared/workspace.utils.d.ts +0 -1
- package/package.json +9 -7
package/esm2022/lib/map/advanced-map-tool/advanced-coordinates/advanced-coordinates.component.mjs
ADDED
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
import { AsyncPipe, DecimalPipe, NgFor, NgIf } from '@angular/common';
|
|
2
|
+
import { ChangeDetectorRef, Component, Input } from '@angular/core';
|
|
3
|
+
import { FormsModule, ReactiveFormsModule, UntypedFormBuilder, Validators } from '@angular/forms';
|
|
4
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
5
|
+
import { MatOptionModule } from '@angular/material/core';
|
|
6
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
7
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
+
import { MatInputModule } from '@angular/material/input';
|
|
9
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
10
|
+
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
11
|
+
import { ConfigService } from '@igo2/core/config';
|
|
12
|
+
import { LanguageService } from '@igo2/core/language';
|
|
13
|
+
import { IgoLanguageModule } from '@igo2/core/language';
|
|
14
|
+
import { MessageService } from '@igo2/core/message';
|
|
15
|
+
import { StorageScope, StorageService } from '@igo2/core/storage';
|
|
16
|
+
import { formatScale } from '@igo2/geo';
|
|
17
|
+
import { computeProjectionsConstraints, zoneMtm, zoneUtm } from '@igo2/geo';
|
|
18
|
+
import { Clipboard } from '@igo2/utils';
|
|
19
|
+
import * as olproj from 'ol/proj';
|
|
20
|
+
import { BehaviorSubject } from 'rxjs';
|
|
21
|
+
import { debounceTime } from 'rxjs/operators';
|
|
22
|
+
import { MapState } from '../../map.state';
|
|
23
|
+
import * as i0 from "@angular/core";
|
|
24
|
+
import * as i1 from "../../map.state";
|
|
25
|
+
import * as i2 from "@igo2/core/language";
|
|
26
|
+
import * as i3 from "@igo2/core/message";
|
|
27
|
+
import * as i4 from "@igo2/core/storage";
|
|
28
|
+
import * as i5 from "@igo2/core/config";
|
|
29
|
+
import * as i6 from "@angular/forms";
|
|
30
|
+
import * as i7 from "@angular/material/form-field";
|
|
31
|
+
import * as i8 from "@angular/material/input";
|
|
32
|
+
import * as i9 from "@angular/material/button";
|
|
33
|
+
import * as i10 from "@angular/material/icon";
|
|
34
|
+
import * as i11 from "@angular/material/select";
|
|
35
|
+
import * as i12 from "@angular/material/core";
|
|
36
|
+
import * as i13 from "@angular/material/slide-toggle";
|
|
37
|
+
import * as i14 from "@ngx-translate/core";
|
|
38
|
+
/**
|
|
39
|
+
* Tool to display the coordinates and a cursor of the center of the map
|
|
40
|
+
*/
|
|
41
|
+
export class AdvancedCoordinatesComponent {
|
|
42
|
+
mapState;
|
|
43
|
+
languageService;
|
|
44
|
+
messageService;
|
|
45
|
+
cdRef;
|
|
46
|
+
storageService;
|
|
47
|
+
config;
|
|
48
|
+
formBuilder;
|
|
49
|
+
formattedScale$ = new BehaviorSubject('');
|
|
50
|
+
projections$ = new BehaviorSubject([]);
|
|
51
|
+
form;
|
|
52
|
+
coordinates;
|
|
53
|
+
currentCenterDefaultProj;
|
|
54
|
+
center;
|
|
55
|
+
inMtmZone = true;
|
|
56
|
+
inLambert2 = { 32198: true, 3798: true };
|
|
57
|
+
mapState$$;
|
|
58
|
+
formStatus$$;
|
|
59
|
+
_projectionsLimitations = {};
|
|
60
|
+
projectionsConstraints;
|
|
61
|
+
defaultProj;
|
|
62
|
+
currentZones = { utm: undefined, mtm: undefined };
|
|
63
|
+
units = true;
|
|
64
|
+
get map() {
|
|
65
|
+
return this.mapState.map;
|
|
66
|
+
}
|
|
67
|
+
get inputProj() {
|
|
68
|
+
return this.form.get('inputProj').value;
|
|
69
|
+
}
|
|
70
|
+
set inputProj(value) {
|
|
71
|
+
this.form.patchValue({ inputProj: value });
|
|
72
|
+
}
|
|
73
|
+
get projectionsLimitations() {
|
|
74
|
+
return this._projectionsLimitations || {};
|
|
75
|
+
}
|
|
76
|
+
set projectionsLimitations(value) {
|
|
77
|
+
this._projectionsLimitations = value;
|
|
78
|
+
}
|
|
79
|
+
constructor(mapState, languageService, messageService, cdRef, storageService, config, formBuilder) {
|
|
80
|
+
this.mapState = mapState;
|
|
81
|
+
this.languageService = languageService;
|
|
82
|
+
this.messageService = messageService;
|
|
83
|
+
this.cdRef = cdRef;
|
|
84
|
+
this.storageService = storageService;
|
|
85
|
+
this.config = config;
|
|
86
|
+
this.formBuilder = formBuilder;
|
|
87
|
+
this.defaultProj = {
|
|
88
|
+
translatedValue: this.languageService.translate.instant('igo.geo.importExportForm.projections.wgs84', { code: 'EPSG:4326' }),
|
|
89
|
+
translateKey: 'wgs84',
|
|
90
|
+
alias: 'WGS84',
|
|
91
|
+
code: 'EPSG:4326',
|
|
92
|
+
zone: '',
|
|
93
|
+
def: undefined,
|
|
94
|
+
extent: undefined
|
|
95
|
+
};
|
|
96
|
+
this.center = this.storageService.get('centerToggle');
|
|
97
|
+
this.computeProjections();
|
|
98
|
+
this.buildForm();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Listen a state of the map, a state of a form, update the coordinates
|
|
102
|
+
*/
|
|
103
|
+
ngOnInit() {
|
|
104
|
+
this.mapState$$ = this.map.viewController.state$
|
|
105
|
+
.pipe(debounceTime(50))
|
|
106
|
+
.subscribe(() => {
|
|
107
|
+
this.setScaleValue(this.map);
|
|
108
|
+
this.updateCoordinates();
|
|
109
|
+
});
|
|
110
|
+
this.formStatus$$ = this.form.valueChanges.subscribe(() => {
|
|
111
|
+
this.updateCoordinates();
|
|
112
|
+
});
|
|
113
|
+
const tempInputProj = this.storageService.get('currentProjection');
|
|
114
|
+
this.inputProj =
|
|
115
|
+
this.projections$.value.find((val) => val.code === this.defaultProj.code) ?? this.projections$.value[0];
|
|
116
|
+
if (tempInputProj !== null) {
|
|
117
|
+
const pos = this.positionInList(tempInputProj);
|
|
118
|
+
this.inputProj = this.projections$.value[pos];
|
|
119
|
+
this.updateZoneMtmUtm();
|
|
120
|
+
}
|
|
121
|
+
this.map.mapCenter$.next(this.center);
|
|
122
|
+
this.coordinates = this.getCoordinates();
|
|
123
|
+
this.currentCenterDefaultProj = this.map.viewController.getCenter(this.defaultProj.code);
|
|
124
|
+
}
|
|
125
|
+
ngOnDestroy() {
|
|
126
|
+
this.map.mapCenter$.next(false);
|
|
127
|
+
this.mapState$$.unsubscribe();
|
|
128
|
+
this.formStatus$$.unsubscribe();
|
|
129
|
+
}
|
|
130
|
+
setScaleValue(map) {
|
|
131
|
+
this.formattedScale$.next(': ~ 1 / ' + formatScale(map.viewController.getScale()));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Coordinates of the center of the map on the appropriate systeme of coordinates
|
|
135
|
+
* @returns Array of two numbers
|
|
136
|
+
*/
|
|
137
|
+
getCoordinates() {
|
|
138
|
+
this.currentZones.mtm = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
139
|
+
this.currentZones.utm = zoneUtm(this.currentCenterDefaultProj[0]);
|
|
140
|
+
const code = this.inputProj.code;
|
|
141
|
+
let decimal = 2;
|
|
142
|
+
if (code.includes('EPSG:4326') || code.includes('EPSG:4269')) {
|
|
143
|
+
decimal = 5;
|
|
144
|
+
}
|
|
145
|
+
this.units = code === 'EPSG:4326' || code === 'EPSG:4269';
|
|
146
|
+
const coord = this.map.viewController
|
|
147
|
+
.getCenter(code)
|
|
148
|
+
.map((c) => c.toFixed(decimal));
|
|
149
|
+
return coord;
|
|
150
|
+
}
|
|
151
|
+
updateCoordinates() {
|
|
152
|
+
this.currentCenterDefaultProj = this.map.viewController.getCenter(this.defaultProj.code);
|
|
153
|
+
const currentMtmZone = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
154
|
+
const currentUtmZone = zoneUtm(this.currentCenterDefaultProj[0]);
|
|
155
|
+
if (!this.inMtmZone && currentMtmZone !== this.currentZones.mtm) {
|
|
156
|
+
this.back2quebec();
|
|
157
|
+
}
|
|
158
|
+
let zoneChange = false;
|
|
159
|
+
if (currentMtmZone !== this.currentZones.mtm) {
|
|
160
|
+
this.currentZones.mtm = currentMtmZone;
|
|
161
|
+
zoneChange = true;
|
|
162
|
+
}
|
|
163
|
+
if (currentUtmZone !== this.currentZones.utm) {
|
|
164
|
+
this.currentZones.utm = currentUtmZone;
|
|
165
|
+
zoneChange = true;
|
|
166
|
+
}
|
|
167
|
+
if (zoneChange) {
|
|
168
|
+
this.updateProjectionsZoneChange();
|
|
169
|
+
}
|
|
170
|
+
this.checkLambert(this.currentCenterDefaultProj);
|
|
171
|
+
this.coordinates = this.getCoordinates();
|
|
172
|
+
this.storageService.set('currentProjection', this.inputProj, StorageScope.SESSION);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Copy the coordinates to a clipboard
|
|
176
|
+
*/
|
|
177
|
+
copyTextToClipboard() {
|
|
178
|
+
const successful = Clipboard.copy(this.coordinates.toString());
|
|
179
|
+
if (successful) {
|
|
180
|
+
this.messageService.success('igo.integration.advanced-map-tool.advanced-coordinates.copyMsg', 'igo.integration.advanced-map-tool.advanced-coordinates.copyTitle');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Display a cursor on the center of the map
|
|
185
|
+
*/
|
|
186
|
+
displayCenter(toggle) {
|
|
187
|
+
this.center = toggle;
|
|
188
|
+
this.map.mapCenter$.next(toggle);
|
|
189
|
+
this.storageService.set('centerToggle', toggle, StorageScope.SESSION);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Builder of the form
|
|
193
|
+
*/
|
|
194
|
+
buildForm() {
|
|
195
|
+
this.form = this.formBuilder.group({
|
|
196
|
+
inputProj: ['', [Validators.required]]
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Update list of projections after changing of the state of the map
|
|
201
|
+
*/
|
|
202
|
+
updateProjectionsZoneChange() {
|
|
203
|
+
let modifiedProj = this.projections$.value;
|
|
204
|
+
const translate = this.languageService.translate;
|
|
205
|
+
modifiedProj.map((p) => {
|
|
206
|
+
if (p.translateKey === 'mtm') {
|
|
207
|
+
const zone = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
208
|
+
if (zone) {
|
|
209
|
+
const code = zone < 10 ? `EPSG:3218${zone}` : `EPSG:321${80 + zone}`;
|
|
210
|
+
p.alias = `MTM ${zone}`;
|
|
211
|
+
p.code = code;
|
|
212
|
+
p.zone = `${zone}`;
|
|
213
|
+
p.translatedValue = translate.instant('igo.geo.importExportForm.projections.mtm', p);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
p.alias = '';
|
|
217
|
+
this.inMtmZone = false;
|
|
218
|
+
if (this.inputProj.translateKey === 'mtm') {
|
|
219
|
+
this.inputProj = this.projections$.value[0];
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (p.translateKey === 'utm') {
|
|
224
|
+
const zone = zoneUtm(this.currentCenterDefaultProj[0]);
|
|
225
|
+
const code = `EPSG:326${zone}`;
|
|
226
|
+
p.alias = `UTM ${zone}`;
|
|
227
|
+
p.code = code;
|
|
228
|
+
p.zone = `${zone}`;
|
|
229
|
+
p.translatedValue = translate.instant('igo.geo.importExportForm.projections.utm', p);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
modifiedProj = modifiedProj.filter((p) => p.alias !== '');
|
|
233
|
+
this.projections$.next(modifiedProj);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Create a list of currents projections
|
|
237
|
+
*/
|
|
238
|
+
computeProjections() {
|
|
239
|
+
this.projectionsConstraints = computeProjectionsConstraints(this.projectionsLimitations);
|
|
240
|
+
const projections = [];
|
|
241
|
+
if (!this.currentCenterDefaultProj) {
|
|
242
|
+
this.currentCenterDefaultProj = this.map.viewController.getCenter(this.defaultProj.code);
|
|
243
|
+
}
|
|
244
|
+
const translate = this.languageService.translate;
|
|
245
|
+
if (this.projectionsConstraints.wgs84) {
|
|
246
|
+
projections.push({
|
|
247
|
+
translatedValue: translate.instant('igo.geo.importExportForm.projections.wgs84', { code: 'EPSG:4326' }),
|
|
248
|
+
translateKey: 'wgs84',
|
|
249
|
+
alias: 'WGS84',
|
|
250
|
+
code: 'EPSG:4326',
|
|
251
|
+
zone: '',
|
|
252
|
+
def: undefined,
|
|
253
|
+
extent: undefined
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
if (this.projectionsConstraints.nad83) {
|
|
257
|
+
projections.push({
|
|
258
|
+
translatedValue: translate.instant('igo.geo.importExportForm.projections.nad83', { code: 'EPSG:4269' }),
|
|
259
|
+
translateKey: 'nad83',
|
|
260
|
+
alias: 'NAD83',
|
|
261
|
+
code: 'EPSG:4269',
|
|
262
|
+
zone: '',
|
|
263
|
+
def: undefined,
|
|
264
|
+
extent: undefined
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
if (this.projectionsConstraints.webMercator) {
|
|
268
|
+
projections.push({
|
|
269
|
+
translatedValue: translate.instant('igo.geo.importExportForm.projections.webMercator', { code: 'EPSG:3857' }),
|
|
270
|
+
translateKey: 'webMercator',
|
|
271
|
+
alias: 'Web Mercator',
|
|
272
|
+
code: 'EPSG:3857',
|
|
273
|
+
zone: '',
|
|
274
|
+
def: undefined,
|
|
275
|
+
extent: undefined
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
if (this.projectionsConstraints.mtm) {
|
|
279
|
+
// Quebec
|
|
280
|
+
const zone = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
281
|
+
if (zone) {
|
|
282
|
+
this.inMtmZone = true;
|
|
283
|
+
const code = zone < 10 ? `EPSG:3218${zone}` : `EPSG:321${80 + zone}`;
|
|
284
|
+
projections.splice(3, 0, {
|
|
285
|
+
translatedValue: this.languageService.translate.instant('igo.geo.importExportForm.projections.mtm', { code, zone }),
|
|
286
|
+
translateKey: 'mtm',
|
|
287
|
+
alias: `MTM ${zone}`,
|
|
288
|
+
code,
|
|
289
|
+
zone: `${zone}`,
|
|
290
|
+
def: undefined,
|
|
291
|
+
extent: undefined
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
this.inMtmZone = false;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
if (this.projectionsConstraints.utm) {
|
|
299
|
+
const order = this.inMtmZone ? 4 : 3;
|
|
300
|
+
const zone = zoneUtm(this.currentCenterDefaultProj[0]);
|
|
301
|
+
const code = zone < 10 ? `EPSG:3260${zone}` : `EPSG:326${zone}`;
|
|
302
|
+
projections.splice(order, 0, {
|
|
303
|
+
translatedValue: this.languageService.translate.instant('igo.geo.importExportForm.projections.utm', { code, zone }),
|
|
304
|
+
translateKey: 'utm',
|
|
305
|
+
alias: `UTM ${zone}`,
|
|
306
|
+
code,
|
|
307
|
+
zone: `${zone}`,
|
|
308
|
+
def: undefined,
|
|
309
|
+
extent: undefined
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
let configProjection = [];
|
|
313
|
+
if (this.projectionsConstraints.projFromConfig) {
|
|
314
|
+
configProjection = (this.config.getConfig('projections') ||
|
|
315
|
+
[]);
|
|
316
|
+
}
|
|
317
|
+
this.projections$.next(configProjection.concat(projections));
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Push the MTM in the array of systeme of coordinates
|
|
321
|
+
* @param projections Array of the InputProjections
|
|
322
|
+
*/
|
|
323
|
+
pushMtm(projections) {
|
|
324
|
+
if (this.projectionsConstraints.mtm) {
|
|
325
|
+
const zone = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
326
|
+
const code = zone < 10 ? `EPSG:3218${zone}` : `EPSG:321${80 + zone}`;
|
|
327
|
+
projections.splice(3, 0, {
|
|
328
|
+
translatedValue: this.languageService.translate.instant('igo.geo.importExportForm.projections.mtm', { code, zone }),
|
|
329
|
+
translateKey: 'mtm',
|
|
330
|
+
alias: `MTM ${zone}`,
|
|
331
|
+
code,
|
|
332
|
+
zone: `${zone}`,
|
|
333
|
+
def: undefined,
|
|
334
|
+
extent: undefined
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Updates the list of systems of coordinates for territory of Quebec
|
|
340
|
+
* push MTM and UTM in the Array
|
|
341
|
+
*/
|
|
342
|
+
back2quebec() {
|
|
343
|
+
const projections = this.projections$.value;
|
|
344
|
+
this.pushMtm(projections);
|
|
345
|
+
this.inMtmZone = true;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Update the numbers of the zones when application is restarted
|
|
349
|
+
*/
|
|
350
|
+
updateZoneMtmUtm() {
|
|
351
|
+
if (this.inputProj.translateKey === 'mtm') {
|
|
352
|
+
const zone = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
353
|
+
this.inputProj.alias = `MTM ${zone}`;
|
|
354
|
+
const code = zone < 10 ? `EPSG:3218${zone}` : `EPSG:321${80 + zone}`;
|
|
355
|
+
this.inputProj.code = code;
|
|
356
|
+
this.inputProj.zone = `${zone}`;
|
|
357
|
+
this.inputProj.translatedValue = this.languageService.translate.instant('igo.geo.importExportForm.projections.mtm', { code, zone });
|
|
358
|
+
}
|
|
359
|
+
if (this.inputProj.translateKey === 'utm') {
|
|
360
|
+
const zone = zoneUtm(this.currentCenterDefaultProj[0]);
|
|
361
|
+
this.inputProj.alias = `UTM ${zone}`;
|
|
362
|
+
const code = zone < 10 ? `EPSG:3260${zone}` : `EPSG:326${zone}`;
|
|
363
|
+
this.inputProj.code = code;
|
|
364
|
+
this.inputProj.zone = `${zone}`;
|
|
365
|
+
this.inputProj.translatedValue = this.languageService.translate.instant('igo.geo.importExportForm.projections.utm', { code, zone });
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Compute the position of a current projection in a list. 0 if the projection is not in the list
|
|
370
|
+
* @param translateKey string, translate key of a projection
|
|
371
|
+
* @returns numeric, position of an element in the array
|
|
372
|
+
*/
|
|
373
|
+
positionInList(tempInputProj) {
|
|
374
|
+
const tk = tempInputProj.translateKey;
|
|
375
|
+
const alias = tempInputProj.alias;
|
|
376
|
+
let position; // = undefined;
|
|
377
|
+
let iter = 0;
|
|
378
|
+
this.projections$.value.map((projection) => {
|
|
379
|
+
if (tk) {
|
|
380
|
+
if (tk === projection.translateKey) {
|
|
381
|
+
position = iter;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
else if (alias === projection.alias) {
|
|
385
|
+
position = iter;
|
|
386
|
+
}
|
|
387
|
+
iter++;
|
|
388
|
+
});
|
|
389
|
+
position = position ? position : 0;
|
|
390
|
+
return position;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Change the list of projections depending on the projections of Lambert
|
|
394
|
+
* @param coordinates An array of numbers, longitude and latitude
|
|
395
|
+
*/
|
|
396
|
+
checkLambert(coordinates) {
|
|
397
|
+
const lambertProjections = this.config.getConfig('projections') || [];
|
|
398
|
+
lambertProjections.forEach((projection) => {
|
|
399
|
+
let modifiedProj = this.projections$.value;
|
|
400
|
+
const extent = projection.extent;
|
|
401
|
+
const code = projection.code.match(/\d+/);
|
|
402
|
+
const currentExtentWGS = olproj.transformExtent(extent, projection.code, this.defaultProj.code);
|
|
403
|
+
if (coordinates[0] < currentExtentWGS[0] ||
|
|
404
|
+
coordinates[0] > currentExtentWGS[2] ||
|
|
405
|
+
coordinates[1] < currentExtentWGS[1] ||
|
|
406
|
+
coordinates[1] > currentExtentWGS[3]) {
|
|
407
|
+
this.inLambert2[code] = false;
|
|
408
|
+
if (this.inputProj.alias === projection.alias) {
|
|
409
|
+
this.inputProj = this.projections$.value[0];
|
|
410
|
+
}
|
|
411
|
+
modifiedProj = modifiedProj.filter((p) => p.alias !== projection.alias);
|
|
412
|
+
this.projections$.next(modifiedProj);
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
if (!this.inLambert2[code]) {
|
|
416
|
+
this.projections$.next(modifiedProj.concat(projection));
|
|
417
|
+
this.inLambert2[code] = true;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AdvancedCoordinatesComponent, deps: [{ token: i1.MapState }, { token: i2.LanguageService }, { token: i3.MessageService }, { token: i0.ChangeDetectorRef }, { token: i4.StorageService }, { token: i5.ConfigService }, { token: i6.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
423
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AdvancedCoordinatesComponent, isStandalone: true, selector: "igo-advanced-coordinates", inputs: { projectionsLimitations: "projectionsLimitations" }, ngImport: i0, template: "<div class=\"advanced-coordinates__coordinates-container\">\n <div class=\"advanced-coordinates__coordinates-container__inner\">\n <mat-form-field *ngIf=\"units; else elseBlock\" subscriptSizing=\"dynamic\">\n <mat-label>{{\n 'igo.integration.advanced-map-tool.advanced-coordinates.lon' | translate\n }}</mat-label>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"\n 'igo.integration.advanced-map-tool.advanced-coordinates.lon'\n | translate\n \"\n [value]=\"coordinates[0]\"\n ></textarea>\n </mat-form-field>\n <ng-template #elseBlock>\n <mat-form-field subscriptSizing=\"dynamic\">\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"\n 'igo.integration.advanced-map-tool.advanced-coordinates.est'\n | translate\n \"\n [value]=\"coordinates[0]\"\n ></textarea>\n </mat-form-field>\n </ng-template>\n\n <mat-form-field *ngIf=\"units; else elseBlock2\" subscriptSizing=\"dynamic\">\n <mat-label>{{\n 'igo.integration.advanced-map-tool.advanced-coordinates.lat' | translate\n }}</mat-label>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"\n 'igo.integration.advanced-map-tool.advanced-coordinates.lat'\n | translate\n \"\n [value]=\"coordinates[1]\"\n ></textarea>\n </mat-form-field>\n <ng-template #elseBlock2>\n <mat-form-field subscriptSizing=\"dynamic\">\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"\n 'igo.integration.advanced-map-tool.advanced-coordinates.nord'\n | translate\n \"\n [value]=\"coordinates[1]\"\n ></textarea>\n </mat-form-field>\n </ng-template>\n <button\n mat-icon-button\n [attr.aria-label]=\"\n 'igo.integration.advanced-map-tool.advanced-coordinates.copy'\n | translate\n \"\n class=\"igo-form-button-group advanced-coordinates__copy-coordinates\"\n (click)=\"copyTextToClipboard()\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </div>\n\n <form class=\"igo-form advanced-coordinates__form\" [formGroup]=\"form\">\n <div class=\"advanced-coordinates__coordinates-container__inner\">\n <mat-form-field class=\"igo-input-container\" subscriptSizing=\"dynamic\">\n <mat-label>{{\n 'igo.integration.advanced-map-tool.advanced-coordinates.coordSystem'\n | translate\n }}</mat-label>\n <mat-select [(value)]=\"inputProj\">\n <mat-option\n matTooltipShowDelay=\"500\"\n *ngFor=\"let projection of projections$ | async\"\n [value]=\"projection\"\n (click)=\"$event.stopPropagation()\"\n >\n {{ projection.translatedValue || projection.alias }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"advanced-coordinates__coordinates-container__inner\">\n <mat-slide-toggle\n class=\"center-toggle mat-typography\"\n [checked]=\"center\"\n [labelPosition]=\"'before'\"\n (change)=\"displayCenter($event.checked)\"\n >\n {{\n 'igo.integration.advanced-map-tool.advanced-coordinates.center'\n | translate\n }}\n </mat-slide-toggle>\n </div>\n </form>\n\n <p class=\"igo-zoom mat-typography\">\n {{\n 'igo.integration.advanced-map-tool.advanced-coordinates.zoom' | translate\n }}\n {{ map.viewController.getZoom() }}\n </p>\n <p class=\"igo-zoom mat-typography\">\n {{\n 'igo.integration.advanced-map-tool.advanced-coordinates.scale' | translate\n }}\n {{ formattedScale$ | async }}\n </p>\n <p class=\"igo-zoom mat-typography\">\n {{\n 'igo.integration.advanced-map-tool.advanced-coordinates.resolution'\n | translate\n }}\n {{ map.viewController.getResolution() | number: '1.0-0' }}\n </p>\n</div>\n", styles: [":host{padding:12px 0}textarea{resize:none}.advanced-coordinates__coordinates-container{width:100%;display:flex;flex-direction:column;padding:12px 0}.advanced-coordinates__coordinates-container__inner{display:flex;align-items:center;margin-bottom:16px}.advanced-coordinates__coordinates-container__inner mat-form-field{flex:1}.advanced-coordinates__coordinates-container__inner mat-form-field:not(:first-child),.advanced-coordinates__coordinates-container__inner button:not(:first-child){margin-left:8px}.advanced-coordinates__form{display:flex;flex-direction:column}.advanced-coordinates__form mat-slide-toggle{flex:1}.advanced-coordinates__form mat-slide-toggle ::ng-deep .mdc-form-field{display:flex;justify-content:space-between}.advanced-coordinates__form mat-slide-toggle ::ng-deep .mdc-label{flex:1}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
|
|
424
|
+
}
|
|
425
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AdvancedCoordinatesComponent, decorators: [{
|
|
426
|
+
type: Component,
|
|
427
|
+
args: [{ selector: 'igo-advanced-coordinates', standalone: true, imports: [
|
|
428
|
+
NgIf,
|
|
429
|
+
MatFormFieldModule,
|
|
430
|
+
MatInputModule,
|
|
431
|
+
MatButtonModule,
|
|
432
|
+
MatIconModule,
|
|
433
|
+
FormsModule,
|
|
434
|
+
ReactiveFormsModule,
|
|
435
|
+
MatSelectModule,
|
|
436
|
+
NgFor,
|
|
437
|
+
MatOptionModule,
|
|
438
|
+
MatSlideToggleModule,
|
|
439
|
+
AsyncPipe,
|
|
440
|
+
DecimalPipe,
|
|
441
|
+
IgoLanguageModule
|
|
442
|
+
], template: "<div class=\"advanced-coordinates__coordinates-container\">\n <div class=\"advanced-coordinates__coordinates-container__inner\">\n <mat-form-field *ngIf=\"units; else elseBlock\" subscriptSizing=\"dynamic\">\n <mat-label>{{\n 'igo.integration.advanced-map-tool.advanced-coordinates.lon' | translate\n }}</mat-label>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"\n 'igo.integration.advanced-map-tool.advanced-coordinates.lon'\n | translate\n \"\n [value]=\"coordinates[0]\"\n ></textarea>\n </mat-form-field>\n <ng-template #elseBlock>\n <mat-form-field subscriptSizing=\"dynamic\">\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"\n 'igo.integration.advanced-map-tool.advanced-coordinates.est'\n | translate\n \"\n [value]=\"coordinates[0]\"\n ></textarea>\n </mat-form-field>\n </ng-template>\n\n <mat-form-field *ngIf=\"units; else elseBlock2\" subscriptSizing=\"dynamic\">\n <mat-label>{{\n 'igo.integration.advanced-map-tool.advanced-coordinates.lat' | translate\n }}</mat-label>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"\n 'igo.integration.advanced-map-tool.advanced-coordinates.lat'\n | translate\n \"\n [value]=\"coordinates[1]\"\n ></textarea>\n </mat-form-field>\n <ng-template #elseBlock2>\n <mat-form-field subscriptSizing=\"dynamic\">\n <textarea\n #textArea\n matInput\n readonly\n rows=\"1\"\n [placeholder]=\"\n 'igo.integration.advanced-map-tool.advanced-coordinates.nord'\n | translate\n \"\n [value]=\"coordinates[1]\"\n ></textarea>\n </mat-form-field>\n </ng-template>\n <button\n mat-icon-button\n [attr.aria-label]=\"\n 'igo.integration.advanced-map-tool.advanced-coordinates.copy'\n | translate\n \"\n class=\"igo-form-button-group advanced-coordinates__copy-coordinates\"\n (click)=\"copyTextToClipboard()\"\n >\n <mat-icon>content_copy</mat-icon>\n </button>\n </div>\n\n <form class=\"igo-form advanced-coordinates__form\" [formGroup]=\"form\">\n <div class=\"advanced-coordinates__coordinates-container__inner\">\n <mat-form-field class=\"igo-input-container\" subscriptSizing=\"dynamic\">\n <mat-label>{{\n 'igo.integration.advanced-map-tool.advanced-coordinates.coordSystem'\n | translate\n }}</mat-label>\n <mat-select [(value)]=\"inputProj\">\n <mat-option\n matTooltipShowDelay=\"500\"\n *ngFor=\"let projection of projections$ | async\"\n [value]=\"projection\"\n (click)=\"$event.stopPropagation()\"\n >\n {{ projection.translatedValue || projection.alias }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"advanced-coordinates__coordinates-container__inner\">\n <mat-slide-toggle\n class=\"center-toggle mat-typography\"\n [checked]=\"center\"\n [labelPosition]=\"'before'\"\n (change)=\"displayCenter($event.checked)\"\n >\n {{\n 'igo.integration.advanced-map-tool.advanced-coordinates.center'\n | translate\n }}\n </mat-slide-toggle>\n </div>\n </form>\n\n <p class=\"igo-zoom mat-typography\">\n {{\n 'igo.integration.advanced-map-tool.advanced-coordinates.zoom' | translate\n }}\n {{ map.viewController.getZoom() }}\n </p>\n <p class=\"igo-zoom mat-typography\">\n {{\n 'igo.integration.advanced-map-tool.advanced-coordinates.scale' | translate\n }}\n {{ formattedScale$ | async }}\n </p>\n <p class=\"igo-zoom mat-typography\">\n {{\n 'igo.integration.advanced-map-tool.advanced-coordinates.resolution'\n | translate\n }}\n {{ map.viewController.getResolution() | number: '1.0-0' }}\n </p>\n</div>\n", styles: [":host{padding:12px 0}textarea{resize:none}.advanced-coordinates__coordinates-container{width:100%;display:flex;flex-direction:column;padding:12px 0}.advanced-coordinates__coordinates-container__inner{display:flex;align-items:center;margin-bottom:16px}.advanced-coordinates__coordinates-container__inner mat-form-field{flex:1}.advanced-coordinates__coordinates-container__inner mat-form-field:not(:first-child),.advanced-coordinates__coordinates-container__inner button:not(:first-child){margin-left:8px}.advanced-coordinates__form{display:flex;flex-direction:column}.advanced-coordinates__form mat-slide-toggle{flex:1}.advanced-coordinates__form mat-slide-toggle ::ng-deep .mdc-form-field{display:flex;justify-content:space-between}.advanced-coordinates__form mat-slide-toggle ::ng-deep .mdc-label{flex:1}\n"] }]
|
|
443
|
+
}], ctorParameters: () => [{ type: i1.MapState }, { type: i2.LanguageService }, { type: i3.MessageService }, { type: i0.ChangeDetectorRef }, { type: i4.StorageService }, { type: i5.ConfigService }, { type: i6.UntypedFormBuilder }], propDecorators: { projectionsLimitations: [{
|
|
444
|
+
type: Input
|
|
445
|
+
}] } });
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi9tYXAvYWR2YW5jZWQtbWFwLXRvb2wvYWR2YW5jZWQtY29vcmRpbmF0ZXMvYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi9tYXAvYWR2YW5jZWQtbWFwLXRvb2wvYWR2YW5jZWQtY29vcmRpbmF0ZXMvYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULEtBQUssRUFHTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixrQkFBa0IsRUFFbEIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV0RSxPQUFPLEVB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QVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0ExY1UsNEJBQTRCOzRGQUE1Qiw0QkFBNEIsa0pDckV6Qyx1cElBb0lBLGkyQkQvRUksSUFBSSw0RkFDSixrQkFBa0IsMFNBQ2xCLGNBQWMsMFdBQ2QsZUFBZSwySUFDZixhQUFhLG9MQUNiLFdBQVcsbVNBQ1gsbUJBQW1CLCtLQUNuQixlQUFlLHNyQkFDZixLQUFLLGtIQUNMLGVBQWUsOEJBQ2Ysb0JBQW9CLHNYQUNwQixTQUFTLHlDQUNULFdBQVcsOENBQ1gsaUJBQWlCOzs0RkFHUiw0QkFBNEI7a0JBdEJ4QyxTQUFTOytCQUNFLDBCQUEwQixjQUd4QixJQUFJLFdBQ1A7d0JBQ1AsSUFBSTt3QkFDSixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLEtBQUs7d0JBQ0wsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLFNBQVM7d0JBQ1QsV0FBVzt3QkFDWCxpQkFBaUI7cUJBQ2xCO2tRQWlDRyxzQkFBc0I7c0JBRHpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIERlY2ltYWxQaXBlLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxuICBVbnR5cGVkRm9ybUdyb3VwLFxuICBWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XG5pbXBvcnQgeyBJZ29MYW5ndWFnZU1vZHVsZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL21lc3NhZ2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNjb3BlLCBTdG9yYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvc3RvcmFnZSc7XG5pbXBvcnQge1xuICBJZ29NYXAsXG4gIElucHV0UHJvamVjdGlvbnMsXG4gIFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zLFxuICBmb3JtYXRTY2FsZVxufSBmcm9tICdAaWdvMi9nZW8nO1xuaW1wb3J0IHsgY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHMsIHpvbmVNdG0sIHpvbmVVdG0gfSBmcm9tICdAaWdvMi9nZW8nO1xuaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1hcFN0YXRlIH0gZnJvbSAnLi4vLi4vbWFwLnN0YXRlJztcblxuLyoqXG4gKiBUb29sIHRvIGRpc3BsYXkgdGhlIGNvb3JkaW5hdGVzIGFuZCBhIGN1cnNvciBvZiB0aGUgY2VudGVyIG9mIHRoZSBtYXBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWFkdmFuY2VkLWNvb3JkaW5hdGVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLWNvb3JkaW5hdGVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE5nRm9yLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgRGVjaW1hbFBpcGUsXG4gICAgSWdvTGFuZ3VhZ2VNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZENvb3JkaW5hdGVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgZm9ybWF0dGVkU2NhbGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHVibGljIHByb2plY3Rpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW5wdXRQcm9qZWN0aW9uc1tdPihbXSk7XG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwdWJsaWMgY29vcmRpbmF0ZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvajogW251bWJlciwgbnVtYmVyXTtcbiAgcHVibGljIGNlbnRlcjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBpbk10bVpvbmUgPSB0cnVlO1xuICBwcml2YXRlIGluTGFtYmVydDIgPSB7IDMyMTk4OiB0cnVlLCAzNzk4OiB0cnVlIH07XG4gIHByaXZhdGUgbWFwU3RhdGUkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGZvcm1TdGF0dXMkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9wcm9qZWN0aW9uc0xpbWl0YXRpb25zOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyA9IHt9O1xuICBwcml2YXRlIHByb2plY3Rpb25zQ29uc3RyYWludHM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zO1xuICBwcml2YXRlIGRlZmF1bHRQcm9qOiBJbnB1dFByb2plY3Rpb25zO1xuICBwcml2YXRlIGN1cnJlbnRab25lcyA9IHsgdXRtOiB1bmRlZmluZWQsIG10bTogdW5kZWZpbmVkIH07XG4gIHB1YmxpYyB1bml0cyA9IHRydWU7XG4gIGdldCBtYXAoKTogSWdvTWFwIHtcbiAgICByZXR1cm4gdGhpcy5tYXBTdGF0ZS5tYXA7XG4gIH1cblxuICBnZXQgaW5wdXRQcm9qKCk6IElucHV0UHJvamVjdGlvbnMge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdpbnB1dFByb2onKS52YWx1ZTtcbiAgfVxuICBzZXQgaW5wdXRQcm9qKHZhbHVlOiBJbnB1dFByb2plY3Rpb25zKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHZhbHVlIH0pO1xuICB9XG4gIGdldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKCk6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKHZhbHVlOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucykge1xuICAgIHRoaXMuX3Byb2plY3Rpb25zTGltaXRhdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtYXBTdGF0ZTogTWFwU3RhdGUsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvaiA9IHtcbiAgICAgIHRyYW5zbGF0ZWRWYWx1ZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMud2dzODQnLFxuICAgICAgICB7IGNvZGU6ICdFUFNHOjQzMjYnIH1cbiAgICAgICksXG4gICAgICB0cmFuc2xhdGVLZXk6ICd3Z3M4NCcsXG4gICAgICBhbGlhczogJ1dHUzg0JyxcbiAgICAgIGNvZGU6ICdFUFNHOjQzMjYnLFxuICAgICAgem9uZTogJycsXG4gICAgICBkZWY6IHVuZGVmaW5lZCxcbiAgICAgIGV4dGVudDogdW5kZWZpbmVkXG4gICAgfTtcbiAgICB0aGlzLmNlbnRlciA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdjZW50ZXJUb2dnbGUnKSBhcyBib29sZWFuO1xuICAgIHRoaXMuY29tcHV0ZVByb2plY3Rpb25zKCk7XG4gICAgdGhpcy5idWlsZEZvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gYSBzdGF0ZSBvZiB0aGUgbWFwLCBhIHN0YXRlIG9mIGEgZm9ybSwgdXBkYXRlIHRoZSBjb29yZGluYXRlc1xuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tYXBTdGF0ZSQkID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuc3RhdGUkXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U2NhbGVWYWx1ZSh0aGlzLm1hcCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ29vcmRpbmF0ZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtU3RhdHVzJCQgPSB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUNvb3JkaW5hdGVzKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZW1wSW5wdXRQcm9qID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoXG4gICAgICAnY3VycmVudFByb2plY3Rpb24nXG4gICAgKSBhcyBJbnB1dFByb2plY3Rpb25zO1xuXG4gICAgdGhpcy5pbnB1dFByb2ogPVxuICAgICAgdGhpcy5wcm9qZWN0aW9ucyQudmFsdWUuZmluZChcbiAgICAgICAgKHZhbCkgPT4gdmFsLmNvZGUgPT09IHRoaXMuZGVmYXVsdFByb2ouY29kZVxuICAgICAgKSA/PyB0aGlzLnByb2plY3Rpb25zJC52YWx1ZVswXTtcblxuICAgIGlmICh0ZW1wSW5wdXRQcm9qICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwb3MgPSB0aGlzLnBvc2l0aW9uSW5MaXN0KHRlbXBJbnB1dFByb2opO1xuICAgICAgdGhpcy5pbnB1dFByb2ogPSB0aGlzLnByb2plY3Rpb25zJC52YWx1ZVtwb3NdO1xuICAgICAgdGhpcy51cGRhdGVab25lTXRtVXRtKCk7XG4gICAgfVxuICAgIHRoaXMubWFwLm1hcENlbnRlciQubmV4dCh0aGlzLmNlbnRlcik7XG4gICAgdGhpcy5jb29yZGluYXRlcyA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoKTtcbiAgICB0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvaiA9IHRoaXMubWFwLnZpZXdDb250cm9sbGVyLmdldENlbnRlcihcbiAgICAgIHRoaXMuZGVmYXVsdFByb2ouY29kZVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm1hcC5tYXBDZW50ZXIkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMubWFwU3RhdGUkJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZm9ybVN0YXR1cyQkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZXRTY2FsZVZhbHVlKG1hcDogSWdvTWFwKSB7XG4gICAgdGhpcy5mb3JtYXR0ZWRTY2FsZSQubmV4dChcbiAgICAgICc6IH4gMSAvICcgKyBmb3JtYXRTY2FsZShtYXAudmlld0NvbnRyb2xsZXIuZ2V0U2NhbGUoKSlcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBDb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG9mIHRoZSBtYXAgb24gdGhlIGFwcHJvcHJpYXRlIHN5c3RlbWUgb2YgY29vcmRpbmF0ZXNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgdHdvIG51bWJlcnNcbiAgICovXG4gIGdldENvb3JkaW5hdGVzKCk6IHN0cmluZ1tdIHtcbiAgICB0aGlzLmN1cnJlbnRab25lcy5tdG0gPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcbiAgICB0aGlzLmN1cnJlbnRab25lcy51dG0gPSB6b25lVXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcbiAgICBjb25zdCBjb2RlID0gdGhpcy5pbnB1dFByb2ouY29kZTtcbiAgICBsZXQgZGVjaW1hbCA9IDI7XG4gICAgaWYgKGNvZGUuaW5jbHVkZXMoJ0VQU0c6NDMyNicpIHx8IGNvZGUuaW5jbHVkZXMoJ0VQU0c6NDI2OScpKSB7XG4gICAgICBkZWNpbWFsID0gNTtcbiAgICB9XG4gICAgdGhpcy51bml0cyA9IGNvZGUgPT09ICdFUFNHOjQzMjYnIHx8IGNvZGUgPT09ICdFUFNHOjQyNjknO1xuICAgIGNvbnN0IGNvb3JkID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXJcbiAgICAgIC5nZXRDZW50ZXIoY29kZSlcbiAgICAgIC5tYXAoKGMpID0+IGMudG9GaXhlZChkZWNpbWFsKSk7XG4gICAgcmV0dXJuIGNvb3JkO1xuICB9XG5cbiAgdXBkYXRlQ29vcmRpbmF0ZXMoKSB7XG4gICAgdGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2ogPSB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5nZXRDZW50ZXIoXG4gICAgICB0aGlzLmRlZmF1bHRQcm9qLmNvZGVcbiAgICApO1xuICAgIGNvbnN0IGN1cnJlbnRNdG1ab25lID0gem9uZU10bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XG4gICAgY29uc3QgY3VycmVudFV0bVpvbmUgPSB6b25lVXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcbiAgICBpZiAoIXRoaXMuaW5NdG1ab25lICYmIGN1cnJlbnRNdG1ab25lICE9PSB0aGlzLmN1cnJlbnRab25lcy5tdG0pIHtcbiAgICAgIHRoaXMuYmFjazJxdWViZWMoKTtcbiAgICB9XG4gICAgbGV0IHpvbmVDaGFuZ2UgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudE10bVpvbmUgIT09IHRoaXMuY3VycmVudFpvbmVzLm10bSkge1xuICAgICAgdGhpcy5jdXJyZW50Wm9uZXMubXRtID0gY3VycmVudE10bVpvbmU7XG4gICAgICB6b25lQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRVdG1ab25lICE9PSB0aGlzLmN1cnJlbnRab25lcy51dG0pIHtcbiAgICAgIHRoaXMuY3VycmVudFpvbmVzLnV0bSA9IGN1cnJlbnRVdG1ab25lO1xuICAgICAgem9uZUNoYW5nZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh6b25lQ2hhbmdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb25zWm9uZUNoYW5nZSgpO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrTGFtYmVydCh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvaik7XG4gICAgdGhpcy5jb29yZGluYXRlcyA9IHRoaXMuZ2V0Q29vcmRpbmF0ZXMoKTtcblxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFxuICAgICAgJ2N1cnJlbnRQcm9qZWN0aW9uJyxcbiAgICAgIHRoaXMuaW5wdXRQcm9qLFxuICAgICAgU3RvcmFnZVNjb3BlLlNFU1NJT05cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHkgdGhlIGNvb3JkaW5hdGVzIHRvIGEgY2xpcGJvYXJkXG4gICAqL1xuICBjb3B5VGV4dFRvQ2xpcGJvYXJkKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSBDbGlwYm9hcmQuY29weSh0aGlzLmNvb3JkaW5hdGVzLnRvU3RyaW5nKCkpO1xuICAgIGlmIChzdWNjZXNzZnVsKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICAgICdpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29weU1zZycsXG4gICAgICAgICdpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29weVRpdGxlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhIGN1cnNvciBvbiB0aGUgY2VudGVyIG9mIHRoZSBtYXBcbiAgICovXG4gIGRpc3BsYXlDZW50ZXIodG9nZ2xlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jZW50ZXIgPSB0b2dnbGU7XG4gICAgdGhpcy5tYXAubWFwQ2VudGVyJC5uZXh0KHRvZ2dsZSk7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2NlbnRlclRvZ2dsZScsIHRvZ2dsZSwgU3RvcmFnZVNjb3BlLlNFU1NJT04pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkZXIgb2YgdGhlIGZvcm1cbiAgICovXG4gIHByaXZhdGUgYnVpbGRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaW5wdXRQcm9qOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbGlzdCBvZiBwcm9qZWN0aW9ucyBhZnRlciBjaGFuZ2luZyBvZiB0aGUgc3RhdGUgb2YgdGhlIG1hcFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVQcm9qZWN0aW9uc1pvbmVDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IG1vZGlmaWVkUHJvaiA9IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlO1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgICBtb2RpZmllZFByb2oubWFwKChwKSA9PiB7XG4gICAgICBpZiAocC50cmFuc2xhdGVLZXkgPT09ICdtdG0nKSB7XG4gICAgICAgIGNvbnN0IHpvbmUgPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcbiAgICAgICAgaWYgKHpvbmUpIHtcbiAgICAgICAgICBjb25zdCBjb2RlID0gem9uZSA8IDEwID8gYEVQU0c6MzIxOCR7em9uZX1gIDogYEVQU0c6MzIxJHs4MCArIHpvbmV9YDtcbiAgICAgICAgICBwLmFsaWFzID0gYE1UTSAke3pvbmV9YDtcbiAgICAgICAgICBwLmNvZGUgPSBjb2RlO1xuICAgICAgICAgIHAuem9uZSA9IGAke3pvbmV9YDtcbiAgICAgICAgICBwLnRyYW5zbGF0ZWRWYWx1ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5tdG0nLFxuICAgICAgICAgICAgcFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcC5hbGlhcyA9ICcnO1xuICAgICAgICAgIHRoaXMuaW5NdG1ab25lID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHRoaXMuaW5wdXRQcm9qLnRyYW5zbGF0ZUtleSA9PT0gJ210bScpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRQcm9qID0gdGhpcy5wcm9qZWN0aW9ucyQudmFsdWVbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocC50cmFuc2xhdGVLZXkgPT09ICd1dG0nKSB7XG4gICAgICAgIGNvbnN0IHpvbmUgPSB6b25lVXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcbiAgICAgICAgY29uc3QgY29kZSA9IGBFUFNHOjMyNiR7em9uZX1gO1xuICAgICAgICBwLmFsaWFzID0gYFVUTSAke3pvbmV9YDtcbiAgICAgICAgcC5jb2RlID0gY29kZTtcbiAgICAgICAgcC56b25lID0gYCR7em9uZX1gO1xuICAgICAgICBwLnRyYW5zbGF0ZWRWYWx1ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMudXRtJyxcbiAgICAgICAgICBwXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbW9kaWZpZWRQcm9qID0gbW9kaWZpZWRQcm9qLmZpbHRlcigocCkgPT4gcC5hbGlhcyAhPT0gJycpO1xuICAgIHRoaXMucHJvamVjdGlvbnMkLm5leHQobW9kaWZpZWRQcm9qKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsaXN0IG9mIGN1cnJlbnRzIHByb2plY3Rpb25zXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVQcm9qZWN0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMgPSBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyhcbiAgICAgIHRoaXMucHJvamVjdGlvbnNMaW1pdGF0aW9uc1xuICAgICk7XG4gICAgY29uc3QgcHJvamVjdGlvbnM6IElucHV0UHJvamVjdGlvbnNbXSA9IFtdO1xuXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvaikge1xuICAgICAgdGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2ogPSB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5nZXRDZW50ZXIoXG4gICAgICAgIHRoaXMuZGVmYXVsdFByb2ouY29kZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy53Z3M4NCkge1xuICAgICAgcHJvamVjdGlvbnMucHVzaCh7XG4gICAgICAgIHRyYW5zbGF0ZWRWYWx1ZTogdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy53Z3M4NCcsXG4gICAgICAgICAgeyBjb2RlOiAnRVBTRzo0MzI2JyB9XG4gICAgICAgICksXG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ3dnczg0JyxcbiAgICAgICAgYWxpYXM6ICdXR1M4NCcsXG4gICAgICAgIGNvZGU6ICdFUFNHOjQzMjYnLFxuICAgICAgICB6b25lOiAnJyxcbiAgICAgICAgZGVmOiB1bmRlZmluZWQsXG4gICAgICAgIGV4dGVudDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm5hZDgzKSB7XG4gICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgdHJhbnNsYXRlZFZhbHVlOiB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLm5hZDgzJyxcbiAgICAgICAgICB7IGNvZGU6ICdFUFNHOjQyNjknIH1cbiAgICAgICAgKSxcbiAgICAgICAgdHJhbnNsYXRlS2V5OiAnbmFkODMnLFxuICAgICAgICBhbGlhczogJ05BRDgzJyxcbiAgICAgICAgY29kZTogJ0VQU0c6NDI2OScsXG4gICAgICAgIHpvbmU6ICcnLFxuICAgICAgICBkZWY6IHVuZGVmaW5lZCxcbiAgICAgICAgZXh0ZW50OiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2ViTWVyY2F0b3IpIHtcbiAgICAgIHByb2plY3Rpb25zLnB1c2goe1xuICAgICAgICB0cmFuc2xhdGVkVmFsdWU6IHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMud2ViTWVyY2F0b3InLFxuICAgICAgICAgIHsgY29kZTogJ0VQU0c6Mzg1NycgfVxuICAgICAgICApLFxuICAgICAgICB0cmFuc2xhdGVLZXk6ICd3ZWJNZXJjYXRvcicsXG4gICAgICAgIGFsaWFzOiAnV2ViIE1lcmNhdG9yJyxcbiAgICAgICAgY29kZTogJ0VQU0c6Mzg1NycsXG4gICAgICAgIHpvbmU6ICcnLFxuICAgICAgICBkZWY6IHVuZGVmaW5lZCxcbiAgICAgICAgZXh0ZW50OiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bSkge1xuICAgICAgLy8gUXVlYmVjXG4gICAgICBjb25zdCB6b25lID0gem9uZU10bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XG4gICAgICBpZiAoem9uZSkge1xuICAgICAgICB0aGlzLmluTXRtWm9uZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNvZGUgPSB6b25lIDwgMTAgPyBgRVBTRzozMjE4JHt6b25lfWAgOiBgRVBTRzozMjEkezgwICsgem9uZX1gO1xuICAgICAgICBwcm9qZWN0aW9ucy5zcGxpY2UoMywgMCwge1xuICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLm10bScsXG4gICAgICAgICAgICB7IGNvZGUsIHpvbmUgfVxuICAgICAgICAgICksXG4gICAgICAgICAgdHJhbnNsYXRlS2V5OiAnbXRtJyxcbiAgICAgICAgICBhbGlhczogYE1UTSAke3pvbmV9YCxcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIHpvbmU6IGAke3pvbmV9YCxcbiAgICAgICAgICBkZWY6IHVuZGVmaW5lZCxcbiAgICAgICAgICBleHRlbnQ6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5NdG1ab25lID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtKSB7XG4gICAgICBjb25zdCBvcmRlciA9IHRoaXMuaW5NdG1ab25lID8gNCA6IDM7XG4gICAgICBjb25zdCB6b25lID0gem9uZVV0bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XG4gICAgICBjb25zdCBjb2RlID0gem9uZSA8IDEwID8gYEVQU0c6MzI2MCR7em9uZX1gIDogYEVQU0c6MzI2JHt6b25lfWA7XG4gICAgICBwcm9qZWN0aW9ucy5zcGxpY2Uob3JkZXIsIDAsIHtcbiAgICAgICAgdHJhbnNsYXRlZFZhbHVlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLnV0bScsXG4gICAgICAgICAgeyBjb2RlLCB6b25lIH1cbiAgICAgICAgKSxcbiAgICAgICAgdHJhbnNsYXRlS2V5OiAndXRtJyxcbiAgICAgICAgYWxpYXM6IGBVVE0gJHt6b25lfWAsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIHpvbmU6IGAke3pvbmV9YCxcbiAgICAgICAgZGVmOiB1bmRlZmluZWQsXG4gICAgICAgIGV4dGVudDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGV0IGNvbmZpZ1Byb2plY3Rpb246IElucHV0UHJvamVjdGlvbnNbXSA9IFtdO1xuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMucHJvakZyb21Db25maWcpIHtcbiAgICAgIGNvbmZpZ1Byb2plY3Rpb24gPSAodGhpcy5jb25maWcuZ2V0Q29uZmlnKCdwcm9qZWN0aW9ucycpIHx8XG4gICAgICAgIFtdKSBhcyBJbnB1dFByb2plY3Rpb25zW107XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0aW9ucyQubmV4dChjb25maWdQcm9qZWN0aW9uLmNvbmNhdChwcm9qZWN0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1c2ggdGhlIE1UTSBpbiB0aGUgYXJyYXkgb2Ygc3lzdGVtZSBvZiBjb29yZGluYXRlc1xuICAgKiBAcGFyYW0gcHJvamVjdGlvbnMgQXJyYXkgb2YgdGhlIElucHV0UHJvamVjdGlvbnNcbiAgICovXG4gIHByaXZhdGUgcHVzaE10bShwcm9qZWN0aW9uczogSW5wdXRQcm9qZWN0aW9uc1tdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG0pIHtcbiAgICAgIGNvbnN0IHpvbmUgPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcbiAgICAgIGNvbnN0IGNvZGUgPSB6b25lIDwgMTAgPyBgRVBTRzozMjE4JHt6b25lfWAgOiBgRVBTRzozMjEkezgwICsgem9uZX1gO1xuICAgICAgcHJvamVjdGlvbnMuc3BsaWNlKDMsIDAsIHtcbiAgICAgICAgdHJhbnNsYXRlZFZhbHVlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLm10bScsXG4gICAgICAgICAgeyBjb2RlLCB6b25lIH1cbiAgICAgICAgKSxcbiAgICAgICAgdHJhbnNsYXRlS2V5OiAnbXRtJyxcbiAgICAgICAgYWxpYXM6IGBNVE0gJHt6b25lfWAsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIHpvbmU6IGAke3pvbmV9YCxcbiAgICAgICAgZGVmOiB1bmRlZmluZWQsXG4gICAgICAgIGV4dGVudDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiBzeXN0ZW1zIG9mIGNvb3JkaW5hdGVzIGZvciB0ZXJyaXRvcnkgb2YgUXVlYmVjXG4gICAqIHB1c2ggTVRNIGFuZCBVVE0gaW4gdGhlIEFycmF5XG4gICAqL1xuICBwcml2YXRlIGJhY2sycXVlYmVjKCk6IHZvaWQge1xuICAgIGNvbnN0IHByb2plY3Rpb25zID0gdGhpcy5wcm9qZWN0aW9ucyQudmFsdWU7XG4gICAgdGhpcy5wdXNoTXRtKHByb2plY3Rpb25zKTtcbiAgICB0aGlzLmluTXRtWm9uZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBudW1iZXJzIG9mIHRoZSB6b25lcyB3aGVuIGFwcGxpY2F0aW9uIGlzIHJlc3RhcnRlZFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVab25lTXRtVXRtKCkge1xuICAgIGlmICh0aGlzLmlucHV0UHJvai50cmFuc2xhdGVLZXkgPT09ICdtdG0nKSB7XG4gICAgICBjb25zdCB6b25lID0gem9uZU10bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XG4gICAgICB0aGlzLmlucHV0UHJvai5hbGlhcyA9IGBNVE0gJHt6b25lfWA7XG4gICAgICBjb25zdCBjb2RlID0gem9uZSA8IDEwID8gYEVQU0c6MzIxOCR7em9uZX1gIDogYEVQU0c6MzIxJHs4MCArIHpvbmV9YDtcbiAgICAgIHRoaXMuaW5wdXRQcm9qLmNvZGUgPSBjb2RlO1xuICAgICAgdGhpcy5pbnB1dFByb2ouem9uZSA9IGAke3pvbmV9YDtcbiAgICAgIHRoaXMuaW5wdXRQcm9qLnRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLm10bScsXG4gICAgICAgIHsgY29kZSwgem9uZSB9XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbnB1dFByb2oudHJhbnNsYXRlS2V5ID09PSAndXRtJykge1xuICAgICAgY29uc3Qgem9uZSA9IHpvbmVVdG0odGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2pbMF0pO1xuICAgICAgdGhpcy5pbnB1dFByb2ouYWxpYXMgPSBgVVRNICR7em9uZX1gO1xuICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyNjAke3pvbmV9YCA6IGBFUFNHOjMyNiR7em9uZX1gO1xuICAgICAgdGhpcy5pbnB1dFByb2ouY29kZSA9IGNvZGU7XG4gICAgICB0aGlzLmlucHV0UHJvai56b25lID0gYCR7em9uZX1gO1xuICAgICAgdGhpcy5pbnB1dFByb2oudHJhbnNsYXRlZFZhbHVlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMudXRtJyxcbiAgICAgICAgeyBjb2RlLCB6b25lIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHBvc2l0aW9uIG9mIGEgY3VycmVudCBwcm9qZWN0aW9uIGluIGEgbGlzdC4gMCBpZiB0aGUgcHJvamVjdGlvbiBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICogQHBhcmFtIHRyYW5zbGF0ZUtleSBzdHJpbmcsIHRyYW5zbGF0ZSBrZXkgb2YgYSBwcm9qZWN0aW9uXG4gICAqIEByZXR1cm5zIG51bWVyaWMsIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgaW4gdGhlIGFycmF5XG4gICAqL1xuICBwb3NpdGlvbkluTGlzdCh0ZW1wSW5wdXRQcm9qOiBJbnB1dFByb2plY3Rpb25zKTogbnVtYmVyIHtcbiAgICBjb25zdCB0ayA9IHRlbXBJbnB1dFByb2oudHJhbnNsYXRlS2V5O1xuICAgIGNvbnN0IGFsaWFzID0gdGVtcElucHV0UHJvai5hbGlhcztcbiAgICBsZXQgcG9zaXRpb247IC8vID0gdW5kZWZpbmVkO1xuICAgIGxldCBpdGVyID0gMDtcbiAgICB0aGlzLnByb2plY3Rpb25zJC52YWx1ZS5tYXAoKHByb2plY3Rpb24pID0+IHtcbiAgICAgIGlmICh0aykge1xuICAgICAgICBpZiAodGsgPT09IHByb2plY3Rpb24udHJhbnNsYXRlS2V5KSB7XG4gICAgICAgICAgcG9zaXRpb24gPSBpdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGFsaWFzID09PSBwcm9qZWN0aW9uLmFsaWFzKSB7XG4gICAgICAgIHBvc2l0aW9uID0gaXRlcjtcbiAgICAgIH1cbiAgICAgIGl0ZXIrKztcbiAgICB9KTtcbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID8gcG9zaXRpb24gOiAwO1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2UgdGhlIGxpc3Qgb2YgcHJvamVjdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBwcm9qZWN0aW9ucyBvZiBMYW1iZXJ0XG4gICAqIEBwYXJhbSBjb29yZGluYXRlcyBBbiBhcnJheSBvZiBudW1iZXJzLCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlXG4gICAqL1xuICBjaGVja0xhbWJlcnQoY29vcmRpbmF0ZXM6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICBjb25zdCBsYW1iZXJ0UHJvamVjdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ3Byb2plY3Rpb25zJykgfHwgW107XG4gICAgbGFtYmVydFByb2plY3Rpb25zLmZvckVhY2goKHByb2plY3Rpb24pID0+IHtcbiAgICAgIGxldCBtb2RpZmllZFByb2ogPSB0aGlzLnByb2plY3Rpb25zJC52YWx1ZTtcbiAgICAgIGNvbnN0IGV4dGVudCA9IHByb2plY3Rpb24uZXh0ZW50O1xuICAgICAgY29uc3QgY29kZSA9IHByb2plY3Rpb24uY29kZS5tYXRjaCgvXFxkKy8pO1xuICAgICAgY29uc3QgY3VycmVudEV4dGVudFdHUyA9IG9scHJvai50cmFuc2Zvcm1FeHRlbnQoXG4gICAgICAgIGV4dGVudCxcbiAgICAgICAgcHJvamVjdGlvbi5jb2RlLFxuICAgICAgICB0aGlzLmRlZmF1bHRQcm9qLmNvZGVcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIGNvb3JkaW5hdGVzWzBdIDwgY3VycmVudEV4dGVudFdHU1swXSB8fFxuICAgICAgICBjb29yZGluYXRlc1swXSA+IGN1cnJlbnRFeHRlbnRXR1NbMl0gfHxcbiAgICAgICAgY29vcmRpbmF0ZXNbMV0gPCBjdXJyZW50RXh0ZW50V0dTWzFdIHx8XG4gICAgICAgIGNvb3JkaW5hdGVzWzFdID4gY3VycmVudEV4dGVudFdHU1szXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaW5MYW1iZXJ0Mltjb2RlXSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pbnB1dFByb2ouYWxpYXMgPT09IHByb2plY3Rpb24uYWxpYXMpIHtcbiAgICAgICAgICB0aGlzLmlucHV0UHJvaiA9IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlWzBdO1xuICAgICAgICB9XG4gICAgICAgIG1vZGlmaWVkUHJvaiA9IG1vZGlmaWVkUHJvai5maWx0ZXIoKHApID0+IHAuYWxpYXMgIT09IHByb2plY3Rpb24uYWxpYXMpO1xuICAgICAgICB0aGlzLnByb2plY3Rpb25zJC5uZXh0KG1vZGlmaWVkUHJvaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuaW5MYW1iZXJ0Mltjb2RlXSkge1xuICAgICAgICAgIHRoaXMucHJvamVjdGlvbnMkLm5leHQobW9kaWZpZWRQcm9qLmNvbmNhdChwcm9qZWN0aW9uKSk7XG4gICAgICAgICAgdGhpcy5pbkxhbWJlcnQyW2NvZGVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtY29vcmRpbmF0ZXNfX2Nvb3JkaW5hdGVzLWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtY29vcmRpbmF0ZXNfX2Nvb3JkaW5hdGVzLWNvbnRhaW5lcl9faW5uZXJcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJ1bml0czsgZWxzZSBlbHNlQmxvY2tcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICA8bWF0LWxhYmVsPnt7XG4gICAgICAgICdpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMubG9uJyB8IHRyYW5zbGF0ZVxuICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAjdGV4dEFyZWFcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgcm93cz1cIjFcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5sb24nXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICBcIlxuICAgICAgICBbdmFsdWVdPVwiY29vcmRpbmF0ZXNbMF1cIlxuICAgICAgPjwvdGV4dGFyZWE+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICN0ZXh0QXJlYVxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICByb3dzPVwiMVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5lc3QnXG4gICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbdmFsdWVdPVwiY29vcmRpbmF0ZXNbMF1cIlxuICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cInVuaXRzOyBlbHNlIGVsc2VCbG9jazJcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICA8bWF0LWxhYmVsPnt7XG4gICAgICAgICdpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMubGF0JyB8IHRyYW5zbGF0ZVxuICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAjdGV4dEFyZWFcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgcm93cz1cIjFcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5sYXQnXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICBcIlxuICAgICAgICBbdmFsdWVdPVwiY29vcmRpbmF0ZXNbMV1cIlxuICAgICAgPjwvdGV4dGFyZWE+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jazI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAjdGV4dEFyZWFcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgcm93cz1cIjFcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICdpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMubm9yZCdcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICBcIlxuICAgICAgICAgIFt2YWx1ZV09XCJjb29yZGluYXRlc1sxXVwiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5jb3B5J1xuICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICBcIlxuICAgICAgY2xhc3M9XCJpZ28tZm9ybS1idXR0b24tZ3JvdXAgYWR2YW5jZWQtY29vcmRpbmF0ZXNfX2NvcHktY29vcmRpbmF0ZXNcIlxuICAgICAgKGNsaWNrKT1cImNvcHlUZXh0VG9DbGlwYm9hcmQoKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxmb3JtIGNsYXNzPVwiaWdvLWZvcm0gYWR2YW5jZWQtY29vcmRpbmF0ZXNfX2Zvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtY29vcmRpbmF0ZXNfX2Nvb3JkaW5hdGVzLWNvbnRhaW5lcl9faW5uZXJcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgICAnaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLmNvb3JkU3lzdGVtJ1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwiaW5wdXRQcm9qXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHByb2plY3Rpb24gb2YgcHJvamVjdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInByb2plY3Rpb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgcHJvamVjdGlvbi50cmFuc2xhdGVkVmFsdWUgfHwgcHJvamVjdGlvbi5hbGlhcyB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtY29vcmRpbmF0ZXNfX2Nvb3JkaW5hdGVzLWNvbnRhaW5lcl9faW5uZXJcIj5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgIGNsYXNzPVwiY2VudGVyLXRvZ2dsZSBtYXQtdHlwb2dyYXBoeVwiXG4gICAgICAgIFtjaGVja2VkXT1cImNlbnRlclwiXG4gICAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcbiAgICAgICAgKGNoYW5nZSk9XCJkaXNwbGF5Q2VudGVyKCRldmVudC5jaGVja2VkKVwiXG4gICAgICA+XG4gICAgICAgIHt7XG4gICAgICAgICAgJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5jZW50ZXInXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICB9fVxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG5cbiAgPHAgY2xhc3M9XCJpZ28tem9vbSBtYXQtdHlwb2dyYXBoeVwiPlxuICAgIHt7XG4gICAgICAnaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLnpvb20nIHwgdHJhbnNsYXRlXG4gICAgfX1cbiAgICB7eyBtYXAudmlld0NvbnRyb2xsZXIuZ2V0Wm9vbSgpIH19XG4gIDwvcD5cbiAgPHAgY2xhc3M9XCJpZ28tem9vbSBtYXQtdHlwb2dyYXBoeVwiPlxuICAgIHt7XG4gICAgICAnaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLnNjYWxlJyB8IHRyYW5zbGF0ZVxuICAgIH19XG4gICAge3sgZm9ybWF0dGVkU2NhbGUkIHwgYXN5bmMgfX1cbiAgPC9wPlxuICA8cCBjbGFzcz1cImlnby16b29tIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAge3tcbiAgICAgICdpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMucmVzb2x1dGlvbidcbiAgICAgICAgfCB0cmFuc2xhdGVcbiAgICB9fVxuICAgIHt7IG1hcC52aWV3Q29udHJvbGxlci5nZXRSZXNvbHV0aW9uKCkgfCBudW1iZXI6ICcxLjAtMCcgfX1cbiAgPC9wPlxuPC9kaXY+XG4iXX0=
|