@smarterplan/ngx-smarterplan-locations 0.3.4 → 0.4.2

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.
Files changed (82) hide show
  1. package/esm2022/lib/components/carousel/carousel.component.mjs +30 -0
  2. package/esm2022/lib/components/chevron/chevron.component.mjs +18 -0
  3. package/esm2022/lib/components/detail-location/detail-location.component.mjs +183 -0
  4. package/{esm2020 → esm2022}/lib/components/form-location/form-location.component.mjs +254 -237
  5. package/esm2022/lib/components/images/images.component.mjs +120 -0
  6. package/esm2022/lib/components/locations/locations.component.mjs +157 -0
  7. package/esm2022/lib/components/locations/map/map-popup/map-popup.component.mjs +72 -0
  8. package/esm2022/lib/components/locations/map/map.component.mjs +92 -0
  9. package/esm2022/lib/components/plan-legend/plan-legend.component.mjs +49 -0
  10. package/esm2022/lib/components/plans/calibration/calibration.component.mjs +494 -0
  11. package/esm2022/lib/components/plans/edit-plan/edit-plan.component.mjs +350 -0
  12. package/{esm2020 → esm2022}/lib/components/plans/plans.component.mjs +243 -225
  13. package/esm2022/lib/components/tab-navigation/tab-navigation.component.mjs +43 -0
  14. package/esm2022/lib/components/visits/visits.component.mjs +294 -0
  15. package/esm2022/lib/components/zones/add-audio-zone/add-audio-zone.component.mjs +250 -0
  16. package/esm2022/lib/components/zones/add-zone/add-zone.component.mjs +333 -0
  17. package/esm2022/lib/components/zones/add-zone/selection/selection.component.mjs +81 -0
  18. package/esm2022/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.mjs +518 -0
  19. package/esm2022/lib/components/zones/zones.component.mjs +291 -0
  20. package/{esm2020 → esm2022}/lib/helper.service.mjs +133 -133
  21. package/esm2022/lib/ngx-smarterplan-location-routing.module.mjs +50 -0
  22. package/esm2022/lib/ngx-smarterplan-locations.module.mjs +124 -0
  23. package/esm2022/lib/ngx-smarterplan-locations.service.mjs +15 -0
  24. package/esm2022/lib/pipes/count-audio-sweeps.pipe.mjs +29 -0
  25. package/esm2022/lib/radio-button/radio-button.component.mjs +28 -0
  26. package/{esm2020 → esm2022}/public-api.mjs +8 -8
  27. package/{esm2020 → esm2022}/smarterplan-ngx-smarterplan-locations.mjs +4 -4
  28. package/{fesm2020 → fesm2022}/smarterplan-ngx-smarterplan-locations.mjs +3959 -3738
  29. package/fesm2022/smarterplan-ngx-smarterplan-locations.mjs.map +1 -0
  30. package/index.d.ts +5 -5
  31. package/lib/components/carousel/carousel.component.d.ts +12 -12
  32. package/lib/components/chevron/chevron.component.d.ts +9 -9
  33. package/lib/components/detail-location/detail-location.component.d.ts +55 -55
  34. package/lib/components/form-location/form-location.component.d.ts +45 -45
  35. package/lib/components/images/images.component.d.ts +33 -33
  36. package/lib/components/locations/locations.component.d.ts +51 -51
  37. package/lib/components/locations/map/map-popup/map-popup.component.d.ts +22 -22
  38. package/lib/components/locations/map/map.component.d.ts +21 -22
  39. package/lib/components/plan-legend/plan-legend.component.d.ts +14 -14
  40. package/lib/components/plans/calibration/calibration.component.d.ts +140 -140
  41. package/lib/components/plans/edit-plan/edit-plan.component.d.ts +55 -55
  42. package/lib/components/plans/plans.component.d.ts +63 -63
  43. package/lib/components/tab-navigation/tab-navigation.component.d.ts +13 -13
  44. package/lib/components/visits/visits.component.d.ts +63 -63
  45. package/lib/components/zones/add-audio-zone/add-audio-zone.component.d.ts +63 -63
  46. package/lib/components/zones/add-zone/add-zone.component.d.ts +69 -69
  47. package/lib/components/zones/add-zone/selection/selection.component.d.ts +44 -44
  48. package/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.d.ts +107 -107
  49. package/lib/components/zones/zones.component.d.ts +73 -73
  50. package/lib/helper.service.d.ts +53 -53
  51. package/lib/ngx-smarterplan-location-routing.module.d.ts +7 -7
  52. package/lib/ngx-smarterplan-locations.module.d.ts +36 -36
  53. package/lib/ngx-smarterplan-locations.service.d.ts +6 -6
  54. package/lib/pipes/count-audio-sweeps.pipe.d.ts +10 -10
  55. package/lib/radio-button/radio-button.component.d.ts +12 -12
  56. package/package.json +13 -19
  57. package/public-api.d.ts +4 -4
  58. package/esm2020/lib/components/carousel/carousel.component.mjs +0 -28
  59. package/esm2020/lib/components/chevron/chevron.component.mjs +0 -18
  60. package/esm2020/lib/components/detail-location/detail-location.component.mjs +0 -168
  61. package/esm2020/lib/components/images/images.component.mjs +0 -107
  62. package/esm2020/lib/components/locations/locations.component.mjs +0 -145
  63. package/esm2020/lib/components/locations/map/map-popup/map-popup.component.mjs +0 -66
  64. package/esm2020/lib/components/locations/map/map.component.mjs +0 -91
  65. package/esm2020/lib/components/plan-legend/plan-legend.component.mjs +0 -47
  66. package/esm2020/lib/components/plans/calibration/calibration.component.mjs +0 -468
  67. package/esm2020/lib/components/plans/edit-plan/edit-plan.component.mjs +0 -324
  68. package/esm2020/lib/components/tab-navigation/tab-navigation.component.mjs +0 -41
  69. package/esm2020/lib/components/visits/visits.component.mjs +0 -275
  70. package/esm2020/lib/components/zones/add-audio-zone/add-audio-zone.component.mjs +0 -230
  71. package/esm2020/lib/components/zones/add-zone/add-zone.component.mjs +0 -315
  72. package/esm2020/lib/components/zones/add-zone/selection/selection.component.mjs +0 -77
  73. package/esm2020/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.mjs +0 -502
  74. package/esm2020/lib/components/zones/zones.component.mjs +0 -268
  75. package/esm2020/lib/ngx-smarterplan-location-routing.module.mjs +0 -49
  76. package/esm2020/lib/ngx-smarterplan-locations.module.mjs +0 -123
  77. package/esm2020/lib/ngx-smarterplan-locations.service.mjs +0 -14
  78. package/esm2020/lib/pipes/count-audio-sweeps.pipe.mjs +0 -27
  79. package/esm2020/lib/radio-button/radio-button.component.mjs +0 -26
  80. package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs +0 -3983
  81. package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs.map +0 -1
  82. package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs.map +0 -1
@@ -1,324 +0,0 @@
1
- import { Component, HostListener, ViewChild } from '@angular/core';
2
- import { getDocument } from "pdfjs-dist";
3
- import { downloadFileAsObject } from '@smarterplan/ngx-smarterplan-core';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@smarterplan/ngx-smarterplan-core";
6
- import * as i2 from "@angular/router";
7
- import * as i3 from "@ng-bootstrap/ng-bootstrap";
8
- import * as i4 from "@ngx-translate/core";
9
- import * as i5 from "@angular/common";
10
- import * as i6 from "../../tab-navigation/tab-navigation.component";
11
- import * as i7 from "../../zones/add-zone/add-zone.component";
12
- export class EditPlanComponent {
13
- constructor(planService, route, router, modalService, zoneService, visitService, spaceService, translate, ngZone) {
14
- this.planService = planService;
15
- this.route = route;
16
- this.router = router;
17
- this.modalService = modalService;
18
- this.zoneService = zoneService;
19
- this.visitService = visitService;
20
- this.spaceService = spaceService;
21
- this.translate = translate;
22
- this.ngZone = ngZone;
23
- this.loading = false;
24
- this.isNewZone = false;
25
- /**
26
- * Options for svgEditor
27
- */
28
- this.config = {
29
- noStorageOnLoad: true,
30
- forceStorage: true,
31
- // imgPath: "/assets/editor/images/",
32
- // extPath: "/assets/editor/extensions/",
33
- // langPath: "/assets/editor/locale/",
34
- // canvgPath: "/assets/editor/canvg/",
35
- // jspdfPath: "/assets/editor/jspdf/",
36
- // jGraduatePath: "/assets/editor/jgraduate/images/",
37
- // extIconsPath: "/assets/editor/extensions/",
38
- // stylesheets: [
39
- // "/assets/editor/jgraduate/css/jGraduate.css",
40
- // "/assets/editor/spinbtn/jQuery.SpinButton.css",
41
- // "/assets/editor/jgraduate/css/jPicker.css",
42
- // "/assets/editor/svg-editor.css",
43
- // ],
44
- dimensions: [10000, 10000],
45
- showlayers: true,
46
- noDefaultExtensions: true,
47
- basePath: "/assets/editor/",
48
- customExportImage: true,
49
- extensions: [
50
- "ext-connector",
51
- // "ext-eyedropper",
52
- // "ext-grid",
53
- // "ext-markers",
54
- // "ext-overview_window",
55
- // "ext-spi-library",
56
- // "ext-spi-icon",
57
- "ext-sp-zone",
58
- // "ext-arrows",
59
- // "ext-sp-css",
60
- // "ext-placemark",
61
- ],
62
- };
63
- this.menuItems = [];
64
- this.chosenPlan = this.planService.getChosenPlan();
65
- }
66
- async ngOnInit() {
67
- this.editorUrl = "/assets/editor/main.html";
68
- this.spaceID = this.route.snapshot.queryParams.spaceID;
69
- this.currentSpace = await this.spaceService.getSpace(this.spaceID);
70
- this.setupMenuItems();
71
- if (this.spaceID && !this.planService.getChosenPlan()) {
72
- this.router.navigate([
73
- "/dashboard/localisation",
74
- this.spaceID,
75
- "plans",
76
- ]);
77
- }
78
- else if (!this.spaceID && !this.planService.getChosenPlan()) {
79
- this.router.navigate(["/dashboard/localisation"]);
80
- }
81
- }
82
- setupMenuItems() {
83
- this.menuItems = [
84
- { label: "Locations", url: "/localisation" },
85
- {
86
- label: this.currentSpace.name,
87
- url: `/localisation/${this.spaceID}`,
88
- },
89
- {
90
- label: "Plans",
91
- url: `/localisation/${this.currentSpace.id}/plans`,
92
- },
93
- {
94
- label: "Edit",
95
- url: `/localisation/${this.currentSpace.id}/plan-edit?spaceID=${this.currentSpace.id}`,
96
- },
97
- ];
98
- }
99
- async switchAction(event) {
100
- if (event.origin === window.location.origin) {
101
- switch (event.data.message) {
102
- case "save":
103
- this.onSave(event.data.redirect);
104
- break;
105
- case "close":
106
- this.onCancel();
107
- break;
108
- case "new-zone":
109
- const modalReference = this.modalService.open(this.loadingModal);
110
- const svg = unescape(encodeURIComponent(this.svgEditor.svgCanvas.getSvgString()));
111
- const base64 = `data:image/svg+xml;base64,${window.btoa(svg)}`;
112
- const currentSpace = await this.spaceService.getSpace(this.spaceID);
113
- this.images360 = await this.visitService.loadImagesForSpace(currentSpace);
114
- this.editedPlan = { ...this.chosenPlan };
115
- this.editedPlan.filepath = base64;
116
- this.newZoneData = event.data.zoneData;
117
- if (this.newZoneData.elements.length === 0) {
118
- modalReference.close();
119
- alert(this.translate.instant("edition.no-zone"));
120
- break;
121
- }
122
- this.zones = await this.zoneService.getZonesBySpace(this.spaceID);
123
- // this.zones = sortAlphabeticallyOnName(this.zones);
124
- // console.log("zones", this.zones);
125
- // this.editedZone = this.zones.find(
126
- // (z) => z.name === this.newZoneData.name,
127
- // );
128
- this.resetNavigations();
129
- modalReference.close();
130
- this.modalService.open(this.dialogZone);
131
- break;
132
- default:
133
- break;
134
- }
135
- }
136
- }
137
- async resetNavigations() {
138
- this.navigations = [];
139
- const defaultZone = this.zones.find((zone) => !zone.parentID);
140
- if (defaultZone.sweepIDs.length > 0) {
141
- this.navigations = defaultZone.sweepIDs;
142
- }
143
- }
144
- async onLoad(svgEditor) {
145
- if (svgEditor.contentWindow.SvgEditor) {
146
- this.svgEditorIframe = svgEditor;
147
- this.svgEditor = new svgEditor.contentWindow.SvgEditor();
148
- await this.svgEditor.init();
149
- await this.svgEditor.setConfig(this.config, {
150
- allowInitialUserOverride: true,
151
- });
152
- if (this.chosenPlan && this.chosenPlan.extension === "svg") {
153
- this.loadSvg();
154
- }
155
- if (this.chosenPlan && this.chosenPlan.extension === "pdf") {
156
- this.loadPdf();
157
- }
158
- if (!this.chosenPlan.calibration || !this.chosenPlan.isModified) {
159
- setTimeout(() => {
160
- this.svgEditorIframe.contentWindow.postMessage({ action: "disable-zone" }, "*");
161
- }, 1000);
162
- }
163
- this.svgEditor.svgCanvas.setMode('ext-panning');
164
- this.svgEditor.bottomPanel.changeZoom(50);
165
- }
166
- }
167
- async onSave(redirect) {
168
- const imgBlob = await new Blob([this.svgEditor.svgCanvas.getSvgString()], {
169
- type: "image/svg+xml",
170
- });
171
- const [name] = this.chosenPlan.name.split(".");
172
- const imgFile = new File([imgBlob], `${name}-edited.svg`, {
173
- type: "image/svg+xml",
174
- lastModified: Date.now(),
175
- });
176
- this.planService.setPlanFileCache(imgFile);
177
- if (this.chosenPlan.isModified) {
178
- this.ngZone.run(() => this.modalService.open(this.dialog));
179
- }
180
- else {
181
- this.ngZone.run(() => this.router.navigate([
182
- "/dashboard/localisation",
183
- this.spaceID,
184
- "plans",
185
- ]));
186
- }
187
- }
188
- async updateSvg() {
189
- const newUrl = await this.planService.updatePlanFile();
190
- await this.planService.updatePlan({
191
- id: this.chosenPlan.id,
192
- annexe: newUrl,
193
- });
194
- this.planService.setPlanFileCache(null);
195
- this.ngZone.run(() => this.router.navigate([
196
- "/dashboard/localisation",
197
- this.spaceID,
198
- "plans",
199
- ]));
200
- }
201
- async newSvg() {
202
- this.ngZone.run(() => this.router.navigate([
203
- "/dashboard/localisation",
204
- this.spaceID,
205
- "plans",
206
- ]));
207
- }
208
- async onCancel() {
209
- if (window.confirm(this.translate.instant("edition.cancel-alert"))) {
210
- this.ngZone.run(() => this.router.navigate([
211
- "/dashboard/localisation",
212
- this.spaceID,
213
- "plans",
214
- ]));
215
- alert(this.translate.instant("edition.cancel"));
216
- }
217
- }
218
- async loadSvg() {
219
- const svgRequest = await downloadFileAsObject(this.chosenPlan.annexe);
220
- if (svgRequest) {
221
- const svgBlob = await svgRequest.Body;
222
- const reader = new FileReader();
223
- reader.onloadend = () => {
224
- this.svgEditor.loadFromDataURI(reader.result);
225
- };
226
- reader.readAsDataURL(svgBlob);
227
- }
228
- }
229
- async loadPdf() {
230
- this.svgEditorIframe.contentWindow.postMessage({ action: "disable-zone" }, "*");
231
- const canvas = document.querySelector("#canvas4pdf");
232
- const context = canvas.getContext("2d");
233
- const pdfjs = await import("pdfjs-dist/build/pdf");
234
- const pdfjsWorker = await import("pdfjs-dist/build/pdf.worker.entry");
235
- pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;
236
- const pdf = await getDocument(this.chosenPlan.filepath).promise;
237
- const page = await pdf.getPage(1);
238
- const viewPortParameters = { scale: 1.5 };
239
- const viewport = page.getViewport(viewPortParameters);
240
- this.svgEditor.svgCanvas.setResolution(viewport.width, viewport.height);
241
- canvas.height = viewport.height;
242
- canvas.width = viewport.width;
243
- const renderContext = {
244
- canvasContext: context,
245
- viewport,
246
- };
247
- const renderTask = page.render(renderContext).promise;
248
- renderTask.then(() => {
249
- const newImage = this.svgEditor.svgCanvas.addSVGElementFromJson({
250
- element: "image",
251
- attr: {
252
- x: 0,
253
- y: 0,
254
- width: viewport.width,
255
- height: viewport.height,
256
- id: this.svgEditor.svgCanvas.getNextId(),
257
- style: "pointer-events:inherit",
258
- },
259
- });
260
- this.svgEditor.svgCanvas.setHref(newImage, canvas.toDataURL("image/png"));
261
- this.svgEditor.svgCanvas.renameCurrentLayer(this.translate.instant("edition.plan-base"));
262
- this.svgEditor.svgCanvas.createLayer(this.translate.instant("edition.personalization"));
263
- });
264
- }
265
- async onLoadImg(img) {
266
- this.svgEditorIframe.contentWindow.postMessage({ action: "disable-zone" }, "*");
267
- const imgRequest = await downloadFileAsObject(this.chosenPlan.annexe);
268
- if (imgRequest) {
269
- const imgBlob = await imgRequest.Body;
270
- const imgWidth = img.naturalWidth;
271
- const imgHeight = img.naturalHeight;
272
- // await this.svgEditor.setConfig({
273
- // dimensions: [imgWidth, imgHeight],
274
- // });
275
- this.svgEditor.svgCanvas.setResolution(imgWidth, imgHeight);
276
- const reader = new FileReader();
277
- reader.onloadend = () => {
278
- const newImage = this.svgEditor.svgCanvas.addSVGElementFromJson({
279
- element: "image",
280
- attr: {
281
- x: 0,
282
- y: 0,
283
- width: imgWidth,
284
- height: imgHeight,
285
- id: this.svgEditor.svgCanvas.getNextId(),
286
- style: "pointer-events:inherit",
287
- },
288
- });
289
- this.svgEditor.svgCanvas.setHref(newImage, reader.result);
290
- this.svgEditor.svgCanvas.renameCurrentLayer(this.translate.instant("edition.plan-base"));
291
- this.svgEditor.svgCanvas.createLayer(this.translate.instant("edition.personalization"));
292
- };
293
- reader.readAsDataURL(imgBlob);
294
- }
295
- }
296
- onNewZone(event) {
297
- this.isNewZone = false;
298
- if (event) {
299
- this.svgEditorIframe.contentWindow.postMessage({ action: "rename-layer", name: event }, "*");
300
- }
301
- else {
302
- this.svgEditorIframe.contentWindow.postMessage({ action: "cancel-layer" }, "*");
303
- }
304
- }
305
- }
306
- EditPlanComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditPlanComponent, deps: [{ token: i1.PlanService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.NgbModal }, { token: i1.ZoneService }, { token: i1.VisitService }, { token: i1.SpaceService }, { token: i4.TranslateService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
307
- EditPlanComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EditPlanComponent, selector: "lib-edit-plan", host: { listeners: { "window:message": "switchAction($event)" } }, viewQueries: [{ propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }, { propertyName: "dialogZone", first: true, predicate: ["dialogZone"], descendants: true }, { propertyName: "loadingModal", first: true, predicate: ["preparing"], descendants: true }], ngImport: i0, template: "<div class=\"row mt-3\">\r\n <div class=\"col\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems'></lib-tab-navigation>\r\n </div>\r\n </div>\r\n</div>\r\n<lib-add-zone *ngIf=\"isNewZone\" [images360]=\"images360\" [spaceID]=\"spaceID\" [navigationIDs]=\"navigations\"\r\n [zoneEdit]=\"editedZone\" [zones]=\"zones\" (updatedZone)=\"onNewZone($event)\" [chosenPlan]=\"editedPlan\"\r\n [newZoneDataFromEditor]=\"newZoneData\"></lib-add-zone>\r\n<iframe *ngIf=\"editorUrl\" #svgEditor [src]=\"editorUrl | safeUrl\" frameborder=\"0\"\r\n style=\"height:100%;width:100%;min-height:550px;max-height:750px\" (load)=\"onLoad(svgEditor)\"></iframe>\r\n<!-- chosenPlan && -->\r\n<!-- ./../../../../../../assets/svgeditor/index.html -->\r\n\r\n<img #imgPng *ngIf=\"chosenPlan && chosenPlan.extension !== 'svg' && svgEditor\" [src]=\"chosenPlan.filepath\"\r\n (load)=\"onLoadImg(imgPng)\" style=\"display: none;\">\r\n\r\n<canvas id=\"canvas4pdf\" style=\"display: none;\"></canvas>\r\n\r\n<ng-template #dialog let-modal>\r\n\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">{{'Submit' | translate}}</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n {{'save plan edited' | translate}}\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"newSvg();modal.close('Close click')\">{{'Yes' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"updateSvg();modal.close('Close click')\">{{'No' |\r\n translate}}</button>\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<ng-template #dialogZone let-modal>\r\n\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">{{'Submit' | translate}}</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n {{'confirm.new-zone-from-plan' | translate}}\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-outline-dark\"\r\n (click)=\"isNewZone = true;modal.close('Close click')\">{{'Validate' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"modal.close('Close click')\">{{'Cancel' |\r\n translate}}</button>\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<ng-template #preparing let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">{{'Processing' | translate}}</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</ng-template>", styles: ["app-add-zone{position:absolute;top:0;left:0;background-color:#fff;width:100%;height:100%;padding:30px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { kind: "component", type: i7.AddZoneComponent, selector: "lib-add-zone", inputs: ["zoneEdit", "spaceID", "images360", "navigationIDs", "zones", "newZoneDataFromEditor", "chosenPlan", "isMuseumVisit", "defaultZone"], outputs: ["updatedZone"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.SafeUrlPipe, name: "safeUrl" }] });
308
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EditPlanComponent, decorators: [{
309
- type: Component,
310
- args: [{ selector: 'lib-edit-plan', template: "<div class=\"row mt-3\">\r\n <div class=\"col\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems'></lib-tab-navigation>\r\n </div>\r\n </div>\r\n</div>\r\n<lib-add-zone *ngIf=\"isNewZone\" [images360]=\"images360\" [spaceID]=\"spaceID\" [navigationIDs]=\"navigations\"\r\n [zoneEdit]=\"editedZone\" [zones]=\"zones\" (updatedZone)=\"onNewZone($event)\" [chosenPlan]=\"editedPlan\"\r\n [newZoneDataFromEditor]=\"newZoneData\"></lib-add-zone>\r\n<iframe *ngIf=\"editorUrl\" #svgEditor [src]=\"editorUrl | safeUrl\" frameborder=\"0\"\r\n style=\"height:100%;width:100%;min-height:550px;max-height:750px\" (load)=\"onLoad(svgEditor)\"></iframe>\r\n<!-- chosenPlan && -->\r\n<!-- ./../../../../../../assets/svgeditor/index.html -->\r\n\r\n<img #imgPng *ngIf=\"chosenPlan && chosenPlan.extension !== 'svg' && svgEditor\" [src]=\"chosenPlan.filepath\"\r\n (load)=\"onLoadImg(imgPng)\" style=\"display: none;\">\r\n\r\n<canvas id=\"canvas4pdf\" style=\"display: none;\"></canvas>\r\n\r\n<ng-template #dialog let-modal>\r\n\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">{{'Submit' | translate}}</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n {{'save plan edited' | translate}}\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"newSvg();modal.close('Close click')\">{{'Yes' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"updateSvg();modal.close('Close click')\">{{'No' |\r\n translate}}</button>\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<ng-template #dialogZone let-modal>\r\n\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">{{'Submit' | translate}}</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n {{'confirm.new-zone-from-plan' | translate}}\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-outline-dark\"\r\n (click)=\"isNewZone = true;modal.close('Close click')\">{{'Validate' |\r\n translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-dark\" (click)=\"modal.close('Close click')\">{{'Cancel' |\r\n translate}}</button>\r\n </div>\r\n\r\n</ng-template>\r\n\r\n<ng-template #preparing let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">{{'Processing' | translate}}</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modal.dismiss('Cross click')\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</ng-template>", styles: ["app-add-zone{position:absolute;top:0;left:0;background-color:#fff;width:100%;height:100%;padding:30px}\n"] }]
311
- }], ctorParameters: function () { return [{ type: i1.PlanService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.NgbModal }, { type: i1.ZoneService }, { type: i1.VisitService }, { type: i1.SpaceService }, { type: i4.TranslateService }, { type: i0.NgZone }]; }, propDecorators: { dialog: [{
312
- type: ViewChild,
313
- args: ["dialog"]
314
- }], dialogZone: [{
315
- type: ViewChild,
316
- args: ["dialogZone"]
317
- }], loadingModal: [{
318
- type: ViewChild,
319
- args: ["preparing"]
320
- }], switchAction: [{
321
- type: HostListener,
322
- args: ["window:message", ["$event"]]
323
- }] } });
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1wbGFuLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5zL2VkaXQtcGxhbi9lZGl0LXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvcGxhbnMvZWRpdC1wbGFuL2VkaXQtcGxhbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBa0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSW5GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekMsT0FBTyxFQUErRyxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7Ozs7QUFPdEwsTUFBTSxPQUFPLGlCQUFpQjtJQThFMUIsWUFDWSxXQUF3QixFQUN4QixLQUFxQixFQUNyQixNQUFjLEVBQ2QsWUFBc0IsRUFDdEIsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsU0FBMkIsRUFDM0IsTUFBYztRQVJkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBekUxQixZQUFPLEdBQVksS0FBSyxDQUFDO1FBVXpCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFXM0I7O1dBRUc7UUFDSyxXQUFNLEdBQVE7WUFDbEIsZUFBZSxFQUFFLElBQUk7WUFDckIsWUFBWSxFQUFFLElBQUk7WUFDbEIscUNBQXFDO1lBQ3JDLHlDQUF5QztZQUN6QyxzQ0FBc0M7WUFDdEMsc0NBQXNDO1lBQ3RDLHNDQUFzQztZQUN0QyxxREFBcUQ7WUFDckQsOENBQThDO1lBQzlDLGlCQUFpQjtZQUNqQixvREFBb0Q7WUFDcEQsc0RBQXNEO1lBQ3RELGtEQUFrRDtZQUNsRCx1Q0FBdUM7WUFDdkMsS0FBSztZQUNMLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDMUIsVUFBVSxFQUFFLElBQUk7WUFDaEIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsVUFBVSxFQUFFO2dCQUNSLGVBQWU7Z0JBQ2Ysb0JBQW9CO2dCQUNwQixjQUFjO2dCQUNkLGlCQUFpQjtnQkFDakIseUJBQXlCO2dCQUN6QixxQkFBcUI7Z0JBQ3JCLGtCQUFrQjtnQkFDbEIsYUFBYTtnQkFDYixnQkFBZ0I7Z0JBQ2hCLGdCQUFnQjtnQkFDaEIsbUJBQW1CO2FBQ3RCO1NBQ0osQ0FBQztRQUlGLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFhdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsMEJBQTBCLENBQUM7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ2pCLHlCQUF5QjtnQkFDekIsSUFBSSxDQUFDLE9BQU87Z0JBQ1osT0FBTzthQUNWLENBQUMsQ0FBQztTQUNOO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2IsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUU7WUFDNUM7Z0JBQ0ksS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSTtnQkFDN0IsR0FBRyxFQUFFLGlCQUFpQixJQUFJLENBQUMsT0FBTyxFQUFFO2FBQ3ZDO1lBQ0Q7Z0JBQ0ksS0FBSyxFQUFFLE9BQU87Z0JBQ2QsR0FBRyxFQUFFLGlCQUFpQixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUTthQUNyRDtZQUNEO2dCQUNJLEtBQUssRUFBRSxNQUFNO2dCQUNiLEdBQUcsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLHNCQUFzQixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRTthQUN6RjtTQUNKLENBQUM7SUFDTixDQUFDO0lBR0QsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLO1FBQ3BCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN6QyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUN4QixLQUFLLE1BQU07b0JBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqQyxNQUFNO2dCQUNWLEtBQUssT0FBTztvQkFDUixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLE1BQU07Z0JBQ1YsS0FBSyxVQUFVO29CQUNYLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN6QyxJQUFJLENBQUMsWUFBWSxDQUNwQixDQUFDO29CQUNGLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FDaEIsa0JBQWtCLENBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQzFDLENBQ0osQ0FBQztvQkFFRixNQUFNLE1BQU0sR0FBRyw2QkFBNkIsTUFBTSxDQUFDLElBQUksQ0FDbkQsR0FBRyxDQUNOLEVBQUUsQ0FBQztvQkFDSixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUNqRCxJQUFJLENBQUMsT0FBTyxDQUNmLENBQUM7b0JBRUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQ3ZELFlBQVksQ0FDZixDQUFDO29CQUVGLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUN2QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQ3hDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzt3QkFDakQsTUFBTTtxQkFDVDtvQkFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQy9DLElBQUksQ0FBQyxPQUFPLENBQ2YsQ0FBQztvQkFDRixxREFBcUQ7b0JBQ3JELG9DQUFvQztvQkFDcEMscUNBQXFDO29CQUNyQywrQ0FBK0M7b0JBQy9DLEtBQUs7b0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ3hCLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUV4QyxNQUFNO2dCQUVWO29CQUNJLE1BQU07YUFDYjtTQUNKO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0I7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztTQUMzQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVM7UUFDbEIsSUFBSSxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRTtZQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztZQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUV6RCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN4Qyx3QkFBd0IsRUFBRSxJQUFJO2FBQ2pDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNsQjtZQUNELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNsQjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFO2dCQUM3RCxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDMUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEVBQzFCLEdBQUcsQ0FDTixDQUFDO2dCQUNOLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNaO1lBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtTQUM1QztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQWlCO1FBQzFCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQzFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsRUFDekM7WUFDSSxJQUFJLEVBQUUsZUFBZTtTQUN4QixDQUNKLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUFTLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLGFBQWEsRUFBRTtZQUM1RCxJQUFJLEVBQUUsZUFBZTtZQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtTQUMzQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzVDO2FBQU07WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ2pCLHlCQUF5QjtnQkFDekIsSUFBSSxDQUFDLE9BQU87Z0JBQ1osT0FBTzthQUNWLENBQUMsQ0FBQyxDQUFDO1NBQ1g7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDWCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkQsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUM5QixFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sRUFBRSxNQUFNO1NBQ2pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ2pCLHlCQUF5QjtZQUN6QixJQUFJLENBQUMsT0FBTztZQUNaLE9BQU87U0FDVixDQUFDLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTTtRQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNqQix5QkFBeUI7WUFDekIsSUFBSSxDQUFDLE9BQU87WUFDWixPQUFPO1NBQ1YsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDVixJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDakIseUJBQXlCO2dCQUN6QixJQUFJLENBQUMsT0FBTztnQkFDWixPQUFPO2FBQ1YsQ0FBQyxDQUFDLENBQUM7WUFDUixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1NBQ25EO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1QsTUFBTSxVQUFVLEdBQVEsTUFBTSxvQkFBb0IsQ0FDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQ3pCLENBQUM7UUFDRixJQUFJLFVBQVUsRUFBRTtZQUNaLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQztZQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDMUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEVBQzFCLEdBQUcsQ0FDTixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDakMsYUFBYSxDQUNLLENBQUM7UUFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQTZCLENBQUM7UUFFcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBRXRFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBRWxELE1BQU0sR0FBRyxHQUFxQixNQUFNLFdBQVcsQ0FDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQzNCLENBQUMsT0FBTyxDQUFDO1FBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4RSxNQUFNLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDaEMsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzlCLE1BQU0sYUFBYSxHQUFHO1lBQ2xCLGFBQWEsRUFBRSxPQUFPO1lBQ3RCLFFBQVE7U0FDWCxDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdEQsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUM7Z0JBQzVELE9BQU8sRUFBRSxPQUFPO2dCQUNoQixJQUFJLEVBQUU7b0JBQ0YsQ0FBQyxFQUFFLENBQUM7b0JBQ0osQ0FBQyxFQUFFLENBQUM7b0JBQ0osS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNyQixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07b0JBQ3ZCLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7b0JBQ3hDLEtBQUssRUFBRSx3QkFBd0I7aUJBQ2xDO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUM1QixRQUFRLEVBQ1IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FDaEMsQ0FBQztZQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN6RixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1FBQzVGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBUTtRQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQzFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxFQUMxQixHQUFHLENBQ04sQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFRLE1BQU0sb0JBQW9CLENBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUN6QixDQUFDO1FBQ0YsSUFBSSxVQUFVLEVBQUU7WUFDWixNQUFNLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDdEMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQztZQUNsQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO1lBQ3BDLG1DQUFtQztZQUNuQyx5Q0FBeUM7WUFDekMsTUFBTTtZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFNUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRTtnQkFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQzNEO29CQUNJLE9BQU8sRUFBRSxPQUFPO29CQUNoQixJQUFJLEVBQUU7d0JBQ0YsQ0FBQyxFQUFFLENBQUM7d0JBQ0osQ0FBQyxFQUFFLENBQUM7d0JBQ0osS0FBSyxFQUFFLFFBQVE7d0JBQ2YsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7d0JBQ3hDLEtBQUssRUFBRSx3QkFBd0I7cUJBQ2xDO2lCQUNKLENBQ0osQ0FBQztnQkFDRixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2dCQUN6RixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1lBQzVGLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQUs7UUFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDMUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFDdkMsR0FBRyxDQUNOLENBQUM7U0FDTDthQUFNO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUMxQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsRUFDMUIsR0FBRyxDQUNOLENBQUM7U0FDTDtJQUNMLENBQUM7OytHQXJaUSxpQkFBaUI7bUdBQWpCLGlCQUFpQixpWkNiOUIsODBHQTRFYzs0RkQvREQsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNJLGVBQWU7K1NBTUosTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUVNLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFFQyxZQUFZO3NCQUFuQyxTQUFTO3VCQUFDLFdBQVc7Z0JBeUhoQixZQUFZO3NCQURqQixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIE5nWm9uZSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcInBkZmpzLWRpc3RcIjtcclxuaW1wb3J0IHsgUERGRG9jdW1lbnRQcm94eSB9IGZyb20gXCJuZzItcGRmLXZpZXdlclwiO1xyXG5pbXBvcnQgeyBab25lLCBQbGFuLCBTcGFjZSwgTWVudUl0ZW0sIFBsYW5TZXJ2aWNlLCBab25lU2VydmljZSwgVmlzaXRTZXJ2aWNlLCBTcGFjZVNlcnZpY2UsIHNvcnRBbHBoYWJldGljYWxseU9uTmFtZSwgZG93bmxvYWRGaWxlQXNPYmplY3QgfSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1lZGl0LXBsYW4nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtcGxhbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0LXBsYW4uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRWRpdFBsYW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJkaWFsb2dcIikgZGlhbG9nITogYW55O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJkaWFsb2dab25lXCIpIGRpYWxvZ1pvbmUhOiBhbnk7XHJcblxyXG4gICAgQFZpZXdDaGlsZChcInByZXBhcmluZ1wiKSBsb2FkaW5nTW9kYWw6IGFueTtcclxuXHJcbiAgICBzcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gICAgY2hvc2VuUGxhbjogUGxhbjtcclxuXHJcbiAgICBlZGl0ZWRQbGFuOiBQbGFuO1xyXG5cclxuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBzdmdFZGl0b3I7XHJcblxyXG4gICAgc3ZnRWRpdG9ySWZyYW1lO1xyXG5cclxuICAgIG5hdmlnYXRpb25zOiBzdHJpbmdbXTtcclxuXHJcbiAgICB6b25lczogWm9uZVtdO1xyXG5cclxuICAgIGlzTmV3Wm9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIG5ld1pvbmVEYXRhO1xyXG5cclxuICAgIGVkaXRvclVybDtcclxuXHJcbiAgICBlZGl0ZWRab25lOiBab25lO1xyXG5cclxuICAgIGltYWdlczM2MDtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcHRpb25zIGZvciBzdmdFZGl0b3JcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjb25maWc6IGFueSA9IHtcclxuICAgICAgICBub1N0b3JhZ2VPbkxvYWQ6IHRydWUsXHJcbiAgICAgICAgZm9yY2VTdG9yYWdlOiB0cnVlLFxyXG4gICAgICAgIC8vIGltZ1BhdGg6IFwiL2Fzc2V0cy9lZGl0b3IvaW1hZ2VzL1wiLFxyXG4gICAgICAgIC8vIGV4dFBhdGg6IFwiL2Fzc2V0cy9lZGl0b3IvZXh0ZW5zaW9ucy9cIixcclxuICAgICAgICAvLyBsYW5nUGF0aDogXCIvYXNzZXRzL2VkaXRvci9sb2NhbGUvXCIsXHJcbiAgICAgICAgLy8gY2FudmdQYXRoOiBcIi9hc3NldHMvZWRpdG9yL2NhbnZnL1wiLFxyXG4gICAgICAgIC8vIGpzcGRmUGF0aDogXCIvYXNzZXRzL2VkaXRvci9qc3BkZi9cIixcclxuICAgICAgICAvLyBqR3JhZHVhdGVQYXRoOiBcIi9hc3NldHMvZWRpdG9yL2pncmFkdWF0ZS9pbWFnZXMvXCIsXHJcbiAgICAgICAgLy8gZXh0SWNvbnNQYXRoOiBcIi9hc3NldHMvZWRpdG9yL2V4dGVuc2lvbnMvXCIsXHJcbiAgICAgICAgLy8gc3R5bGVzaGVldHM6IFtcclxuICAgICAgICAvLyAgICAgXCIvYXNzZXRzL2VkaXRvci9qZ3JhZHVhdGUvY3NzL2pHcmFkdWF0ZS5jc3NcIixcclxuICAgICAgICAvLyAgICAgXCIvYXNzZXRzL2VkaXRvci9zcGluYnRuL2pRdWVyeS5TcGluQnV0dG9uLmNzc1wiLFxyXG4gICAgICAgIC8vICAgICBcIi9hc3NldHMvZWRpdG9yL2pncmFkdWF0ZS9jc3MvalBpY2tlci5jc3NcIixcclxuICAgICAgICAvLyAgICAgXCIvYXNzZXRzL2VkaXRvci9zdmctZWRpdG9yLmNzc1wiLFxyXG4gICAgICAgIC8vIF0sXHJcbiAgICAgICAgZGltZW5zaW9uczogWzEwMDAwLCAxMDAwMF0sXHJcbiAgICAgICAgc2hvd2xheWVyczogdHJ1ZSxcclxuICAgICAgICBub0RlZmF1bHRFeHRlbnNpb25zOiB0cnVlLFxyXG4gICAgICAgIGJhc2VQYXRoOiBcIi9hc3NldHMvZWRpdG9yL1wiLFxyXG4gICAgICAgIGN1c3RvbUV4cG9ydEltYWdlOiB0cnVlLFxyXG4gICAgICAgIGV4dGVuc2lvbnM6IFtcclxuICAgICAgICAgICAgXCJleHQtY29ubmVjdG9yXCIsXHJcbiAgICAgICAgICAgIC8vIFwiZXh0LWV5ZWRyb3BwZXJcIixcclxuICAgICAgICAgICAgLy8gXCJleHQtZ3JpZFwiLFxyXG4gICAgICAgICAgICAvLyBcImV4dC1tYXJrZXJzXCIsXHJcbiAgICAgICAgICAgIC8vIFwiZXh0LW92ZXJ2aWV3X3dpbmRvd1wiLFxyXG4gICAgICAgICAgICAvLyBcImV4dC1zcGktbGlicmFyeVwiLFxyXG4gICAgICAgICAgICAvLyBcImV4dC1zcGktaWNvblwiLFxyXG4gICAgICAgICAgICBcImV4dC1zcC16b25lXCIsXHJcbiAgICAgICAgICAgIC8vIFwiZXh0LWFycm93c1wiLFxyXG4gICAgICAgICAgICAvLyBcImV4dC1zcC1jc3NcIixcclxuICAgICAgICAgICAgLy8gXCJleHQtcGxhY2VtYXJrXCIsXHJcbiAgICAgICAgXSxcclxuICAgIH07XHJcblxyXG4gICAgY3VycmVudFNwYWNlOiBTcGFjZTtcclxuXHJcbiAgICBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHBsYW5TZXJ2aWNlOiBQbGFuU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHZpc2l0U2VydmljZTogVmlzaXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc3BhY2VTZXJ2aWNlOiBTcGFjZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuY2hvc2VuUGxhbiA9IHRoaXMucGxhblNlcnZpY2UuZ2V0Q2hvc2VuUGxhbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yVXJsID0gXCIvYXNzZXRzL2VkaXRvci9tYWluLmh0bWxcIjtcclxuICAgICAgICB0aGlzLnNwYWNlSUQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnNwYWNlSUQ7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3BhY2UgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5nZXRTcGFjZSh0aGlzLnNwYWNlSUQpO1xyXG4gICAgICAgIHRoaXMuc2V0dXBNZW51SXRlbXMoKTtcclxuICAgICAgICBpZiAodGhpcy5zcGFjZUlEICYmICF0aGlzLnBsYW5TZXJ2aWNlLmdldENob3NlblBsYW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXHJcbiAgICAgICAgICAgICAgICBcIi9kYXNoYm9hcmQvbG9jYWxpc2F0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICBcInBsYW5zXCIsXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc3BhY2VJRCAmJiAhdGhpcy5wbGFuU2VydmljZS5nZXRDaG9zZW5QbGFuKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2Rhc2hib2FyZC9sb2NhbGlzYXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXR1cE1lbnVJdGVtcygpIHtcclxuICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IFtcclxuICAgICAgICAgICAgeyBsYWJlbDogXCJMb2NhdGlvbnNcIiwgdXJsOiBcIi9sb2NhbGlzYXRpb25cIiB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5jdXJyZW50U3BhY2UubmFtZSxcclxuICAgICAgICAgICAgICAgIHVybDogYC9sb2NhbGlzYXRpb24vJHt0aGlzLnNwYWNlSUR9YCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiUGxhbnNcIixcclxuICAgICAgICAgICAgICAgIHVybDogYC9sb2NhbGlzYXRpb24vJHt0aGlzLmN1cnJlbnRTcGFjZS5pZH0vcGxhbnNgLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJFZGl0XCIsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGAvbG9jYWxpc2F0aW9uLyR7dGhpcy5jdXJyZW50U3BhY2UuaWR9L3BsYW4tZWRpdD9zcGFjZUlEPSR7dGhpcy5jdXJyZW50U3BhY2UuaWR9YCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6bWVzc2FnZVwiLCBbXCIkZXZlbnRcIl0pXHJcbiAgICBhc3luYyBzd2l0Y2hBY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQub3JpZ2luID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQuZGF0YS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwic2F2ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TYXZlKGV2ZW50LmRhdGEucmVkaXJlY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImNsb3NlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIm5ldy16b25lXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kYWxSZWZlcmVuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2ZyA9IHVuZXNjYXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN2Z0VkaXRvci5zdmdDYW52YXMuZ2V0U3ZnU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJHt3aW5kb3cuYnRvYShcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ZnLFxyXG4gICAgICAgICAgICAgICAgICAgICl9YDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2UgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5nZXRTcGFjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VzMzYwID0gYXdhaXQgdGhpcy52aXNpdFNlcnZpY2UubG9hZEltYWdlc0ZvclNwYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0ZWRQbGFuID0geyAuLi50aGlzLmNob3NlblBsYW4gfTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRlZFBsYW4uZmlsZXBhdGggPSBiYXNlNjQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdab25lRGF0YSA9IGV2ZW50LmRhdGEuem9uZURhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmV3Wm9uZURhdGEuZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsUmVmZXJlbmNlLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJlZGl0aW9uLm5vLXpvbmVcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnpvbmVzID0gc29ydEFscGhhYmV0aWNhbGx5T25OYW1lKHRoaXMuem9uZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiem9uZXNcIiwgdGhpcy56b25lcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5lZGl0ZWRab25lID0gdGhpcy56b25lcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAoeikgPT4gei5uYW1lID09PSB0aGlzLm5ld1pvbmVEYXRhLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbFJlZmVyZW5jZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dab25lKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXNldE5hdmlnYXRpb25zKCkge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbnMgPSBbXTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0Wm9uZSA9IHRoaXMuem9uZXMuZmluZCgoem9uZSkgPT4gIXpvbmUucGFyZW50SUQpO1xyXG4gICAgICAgIGlmIChkZWZhdWx0Wm9uZS5zd2VlcElEcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbnMgPSBkZWZhdWx0Wm9uZS5zd2VlcElEcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25Mb2FkKHN2Z0VkaXRvcikge1xyXG4gICAgICAgIGlmIChzdmdFZGl0b3IuY29udGVudFdpbmRvdy5TdmdFZGl0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5zdmdFZGl0b3JJZnJhbWUgPSBzdmdFZGl0b3I7XHJcbiAgICAgICAgICAgIHRoaXMuc3ZnRWRpdG9yID0gbmV3IHN2Z0VkaXRvci5jb250ZW50V2luZG93LlN2Z0VkaXRvcigpO1xyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zdmdFZGl0b3IuaW5pdCgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN2Z0VkaXRvci5zZXRDb25maWcodGhpcy5jb25maWcsIHtcclxuICAgICAgICAgICAgICAgIGFsbG93SW5pdGlhbFVzZXJPdmVycmlkZTogdHJ1ZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jaG9zZW5QbGFuICYmIHRoaXMuY2hvc2VuUGxhbi5leHRlbnNpb24gPT09IFwic3ZnXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFN2ZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNob3NlblBsYW4gJiYgdGhpcy5jaG9zZW5QbGFuLmV4dGVuc2lvbiA9PT0gXCJwZGZcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUGRmKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNob3NlblBsYW4uY2FsaWJyYXRpb24gfHwgIXRoaXMuY2hvc2VuUGxhbi5pc01vZGlmaWVkKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN2Z0VkaXRvcklmcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFjdGlvbjogXCJkaXNhYmxlLXpvbmVcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIipcIixcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3ZnRWRpdG9yLnN2Z0NhbnZhcy5zZXRNb2RlKCdleHQtcGFubmluZycpO1xyXG4gICAgICAgICAgICB0aGlzLnN2Z0VkaXRvci5ib3R0b21QYW5lbC5jaGFuZ2Vab29tKDUwKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblNhdmUocmVkaXJlY3Q6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBpbWdCbG9iID0gYXdhaXQgbmV3IEJsb2IoXHJcbiAgICAgICAgICAgIFt0aGlzLnN2Z0VkaXRvci5zdmdDYW52YXMuZ2V0U3ZnU3RyaW5nKCldLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcImltYWdlL3N2Zyt4bWxcIixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IFtuYW1lXSA9IHRoaXMuY2hvc2VuUGxhbi5uYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBjb25zdCBpbWdGaWxlOiBGaWxlID0gbmV3IEZpbGUoW2ltZ0Jsb2JdLCBgJHtuYW1lfS1lZGl0ZWQuc3ZnYCwge1xyXG4gICAgICAgICAgICB0eXBlOiBcImltYWdlL3N2Zyt4bWxcIixcclxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBEYXRlLm5vdygpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucGxhblNlcnZpY2Uuc2V0UGxhbkZpbGVDYWNoZShpbWdGaWxlKTtcclxuICAgICAgICBpZiAodGhpcy5jaG9zZW5QbGFuLmlzTW9kaWZpZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuZGlhbG9nKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXHJcbiAgICAgICAgICAgICAgICAgICAgXCIvZGFzaGJvYXJkL2xvY2FsaXNhdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgICAgICBcInBsYW5zXCIsXHJcbiAgICAgICAgICAgICAgICBdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZVN2ZygpIHtcclxuICAgICAgICBjb25zdCBuZXdVcmwgPSBhd2FpdCB0aGlzLnBsYW5TZXJ2aWNlLnVwZGF0ZVBsYW5GaWxlKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wbGFuU2VydmljZS51cGRhdGVQbGFuKHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuY2hvc2VuUGxhbi5pZCxcclxuICAgICAgICAgICAgYW5uZXhlOiBuZXdVcmwsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wbGFuU2VydmljZS5zZXRQbGFuRmlsZUNhY2hlKG51bGwpO1xyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PlxyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXHJcbiAgICAgICAgICAgICAgICBcIi9kYXNoYm9hcmQvbG9jYWxpc2F0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICBcInBsYW5zXCIsXHJcbiAgICAgICAgICAgIF0pKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBuZXdTdmcoKSB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcclxuICAgICAgICAgICAgICAgIFwiL2Rhc2hib2FyZC9sb2NhbGlzYXRpb25cIixcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgIFwicGxhbnNcIixcclxuICAgICAgICAgICAgXSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQ2FuY2VsKCkge1xyXG4gICAgICAgIGlmICh3aW5kb3cuY29uZmlybSh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiZWRpdGlvbi5jYW5jZWwtYWxlcnRcIikpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1xyXG4gICAgICAgICAgICAgICAgICAgIFwiL2Rhc2hib2FyZC9sb2NhbGlzYXRpb25cIixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJwbGFuc1wiLFxyXG4gICAgICAgICAgICAgICAgXSkpO1xyXG4gICAgICAgICAgICBhbGVydCh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiZWRpdGlvbi5jYW5jZWxcIikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkU3ZnKCkge1xyXG4gICAgICAgIGNvbnN0IHN2Z1JlcXVlc3Q6IGFueSA9IGF3YWl0IGRvd25sb2FkRmlsZUFzT2JqZWN0KFxyXG4gICAgICAgICAgICB0aGlzLmNob3NlblBsYW4uYW5uZXhlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHN2Z1JlcXVlc3QpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ZnQmxvYiA9IGF3YWl0IHN2Z1JlcXVlc3QuQm9keTtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3ZnRWRpdG9yLmxvYWRGcm9tRGF0YVVSSShyZWFkZXIucmVzdWx0KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoc3ZnQmxvYik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRQZGYoKSB7XHJcbiAgICAgICAgdGhpcy5zdmdFZGl0b3JJZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShcclxuICAgICAgICAgICAgeyBhY3Rpb246IFwiZGlzYWJsZS16b25lXCIgfSxcclxuICAgICAgICAgICAgXCIqXCIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICBcIiNjYW52YXM0cGRmXCIsXHJcbiAgICAgICAgKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcblxyXG4gICAgICAgIGNvbnN0IHBkZmpzID0gYXdhaXQgaW1wb3J0KFwicGRmanMtZGlzdC9idWlsZC9wZGZcIik7XHJcbiAgICAgICAgY29uc3QgcGRmanNXb3JrZXIgPSBhd2FpdCBpbXBvcnQoXCJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIuZW50cnlcIik7XHJcblxyXG4gICAgICAgIHBkZmpzLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjID0gcGRmanNXb3JrZXI7XHJcblxyXG4gICAgICAgIGNvbnN0IHBkZjogUERGRG9jdW1lbnRQcm94eSA9IGF3YWl0IGdldERvY3VtZW50KFxyXG4gICAgICAgICAgICB0aGlzLmNob3NlblBsYW4uZmlsZXBhdGgsXHJcbiAgICAgICAgKS5wcm9taXNlO1xyXG4gICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBwZGYuZ2V0UGFnZSgxKTtcclxuXHJcbiAgICAgICAgY29uc3Qgdmlld1BvcnRQYXJhbWV0ZXJzID0geyBzY2FsZTogMS41IH07XHJcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHZpZXdQb3J0UGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5zdmdFZGl0b3Iuc3ZnQ2FudmFzLnNldFJlc29sdXRpb24odmlld3BvcnQud2lkdGgsIHZpZXdwb3J0LmhlaWdodCk7XHJcblxyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7XHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyQ29udGV4dCA9IHtcclxuICAgICAgICAgICAgY2FudmFzQ29udGV4dDogY29udGV4dCxcclxuICAgICAgICAgICAgdmlld3BvcnQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCByZW5kZXJUYXNrID0gcGFnZS5yZW5kZXIocmVuZGVyQ29udGV4dCkucHJvbWlzZTtcclxuICAgICAgICByZW5kZXJUYXNrLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdJbWFnZSA9IHRoaXMuc3ZnRWRpdG9yLnN2Z0NhbnZhcy5hZGRTVkdFbGVtZW50RnJvbUpzb24oe1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogXCJpbWFnZVwiLFxyXG4gICAgICAgICAgICAgICAgYXR0cjoge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogdmlld3BvcnQud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB2aWV3cG9ydC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuc3ZnRWRpdG9yLnN2Z0NhbnZhcy5nZXROZXh0SWQoKSxcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogXCJwb2ludGVyLWV2ZW50czppbmhlcml0XCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zdmdFZGl0b3Iuc3ZnQ2FudmFzLnNldEhyZWYoXHJcbiAgICAgICAgICAgICAgICBuZXdJbWFnZSxcclxuICAgICAgICAgICAgICAgIGNhbnZhcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIiksXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN2Z0VkaXRvci5zdmdDYW52YXMucmVuYW1lQ3VycmVudExheWVyKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJlZGl0aW9uLnBsYW4tYmFzZVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3ZnRWRpdG9yLnN2Z0NhbnZhcy5jcmVhdGVMYXllcih0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiZWRpdGlvbi5wZXJzb25hbGl6YXRpb25cIikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uTG9hZEltZyhpbWc6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc3ZnRWRpdG9ySWZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoXHJcbiAgICAgICAgICAgIHsgYWN0aW9uOiBcImRpc2FibGUtem9uZVwiIH0sXHJcbiAgICAgICAgICAgIFwiKlwiLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgaW1nUmVxdWVzdDogYW55ID0gYXdhaXQgZG93bmxvYWRGaWxlQXNPYmplY3QoXHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuUGxhbi5hbm5leGUsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW1nUmVxdWVzdCkge1xyXG4gICAgICAgICAgICBjb25zdCBpbWdCbG9iID0gYXdhaXQgaW1nUmVxdWVzdC5Cb2R5O1xyXG4gICAgICAgICAgICBjb25zdCBpbWdXaWR0aCA9IGltZy5uYXR1cmFsV2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGltZ0hlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0O1xyXG4gICAgICAgICAgICAvLyBhd2FpdCB0aGlzLnN2Z0VkaXRvci5zZXRDb25maWcoe1xyXG4gICAgICAgICAgICAvLyAgICAgZGltZW5zaW9uczogW2ltZ1dpZHRoLCBpbWdIZWlnaHRdLFxyXG4gICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgdGhpcy5zdmdFZGl0b3Iuc3ZnQ2FudmFzLnNldFJlc29sdXRpb24oaW1nV2lkdGgsIGltZ0hlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SW1hZ2UgPSB0aGlzLnN2Z0VkaXRvci5zdmdDYW52YXMuYWRkU1ZHRWxlbWVudEZyb21Kc29uKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogXCJpbWFnZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpbWdXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaW1nSGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuc3ZnRWRpdG9yLnN2Z0NhbnZhcy5nZXROZXh0SWQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBcInBvaW50ZXItZXZlbnRzOmluaGVyaXRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3ZnRWRpdG9yLnN2Z0NhbnZhcy5zZXRIcmVmKG5ld0ltYWdlLCByZWFkZXIucmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3ZnRWRpdG9yLnN2Z0NhbnZhcy5yZW5hbWVDdXJyZW50TGF5ZXIodGhpcy50cmFuc2xhdGUuaW5zdGFudChcImVkaXRpb24ucGxhbi1iYXNlXCIpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3ZnRWRpdG9yLnN2Z0NhbnZhcy5jcmVhdGVMYXllcih0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiZWRpdGlvbi5wZXJzb25hbGl6YXRpb25cIikpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpbWdCbG9iKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25OZXdab25lKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc05ld1pvbmUgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdmdFZGl0b3JJZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShcclxuICAgICAgICAgICAgICAgIHsgYWN0aW9uOiBcInJlbmFtZS1sYXllclwiLCBuYW1lOiBldmVudCB9LFxyXG4gICAgICAgICAgICAgICAgXCIqXCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdmdFZGl0b3JJZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShcclxuICAgICAgICAgICAgICAgIHsgYWN0aW9uOiBcImNhbmNlbC1sYXllclwiIH0sXHJcbiAgICAgICAgICAgICAgICBcIipcIixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3cgbXQtM1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTNcIj5cclxuICAgICAgICAgICAgPGxpYi10YWItbmF2aWdhdGlvbiBbbWVudUl0ZW1zXT0nbWVudUl0ZW1zJz48L2xpYi10YWItbmF2aWdhdGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGxpYi1hZGQtem9uZSAqbmdJZj1cImlzTmV3Wm9uZVwiIFtpbWFnZXMzNjBdPVwiaW1hZ2VzMzYwXCIgW3NwYWNlSURdPVwic3BhY2VJRFwiIFtuYXZpZ2F0aW9uSURzXT1cIm5hdmlnYXRpb25zXCJcclxuICAgIFt6b25lRWRpdF09XCJlZGl0ZWRab25lXCIgW3pvbmVzXT1cInpvbmVzXCIgKHVwZGF0ZWRab25lKT1cIm9uTmV3Wm9uZSgkZXZlbnQpXCIgW2Nob3NlblBsYW5dPVwiZWRpdGVkUGxhblwiXHJcbiAgICBbbmV3Wm9uZURhdGFGcm9tRWRpdG9yXT1cIm5ld1pvbmVEYXRhXCI+PC9saWItYWRkLXpvbmU+XHJcbjxpZnJhbWUgKm5nSWY9XCJlZGl0b3JVcmxcIiAjc3ZnRWRpdG9yIFtzcmNdPVwiZWRpdG9yVXJsIHwgc2FmZVVybFwiIGZyYW1lYm9yZGVyPVwiMFwiXHJcbiAgICBzdHlsZT1cImhlaWdodDoxMDAlO3dpZHRoOjEwMCU7bWluLWhlaWdodDo1NTBweDttYXgtaGVpZ2h0Ojc1MHB4XCIgKGxvYWQpPVwib25Mb2FkKHN2Z0VkaXRvcilcIj48L2lmcmFtZT5cclxuPCEtLSBjaG9zZW5QbGFuICYmIC0tPlxyXG48IS0tIC4vLi4vLi4vLi4vLi4vLi4vLi4vYXNzZXRzL3N2Z2VkaXRvci9pbmRleC5odG1sIC0tPlxyXG5cclxuPGltZyAjaW1nUG5nICpuZ0lmPVwiY2hvc2VuUGxhbiAmJiBjaG9zZW5QbGFuLmV4dGVuc2lvbiAhPT0gJ3N2ZycgJiYgc3ZnRWRpdG9yXCIgW3NyY109XCJjaG9zZW5QbGFuLmZpbGVwYXRoXCJcclxuICAgIChsb2FkKT1cIm9uTG9hZEltZyhpbWdQbmcpXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG5cclxuPGNhbnZhcyBpZD1cImNhbnZhczRwZGZcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9jYW52YXM+XHJcblxyXG48bmctdGVtcGxhdGUgI2RpYWxvZyBsZXQtbW9kYWw+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+e3snU3VibWl0JyB8IHRyYW5zbGF0ZX19PC9oND5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoJ0Nyb3NzIGNsaWNrJylcIj5cclxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICB7eydzYXZlIHBsYW4gZWRpdGVkJyB8IHRyYW5zbGF0ZX19XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kYXJrXCIgKGNsaWNrKT1cIm5ld1N2ZygpO21vZGFsLmNsb3NlKCdDbG9zZSBjbGljaycpXCI+e3snWWVzJyB8XHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGFya1wiIChjbGljayk9XCJ1cGRhdGVTdmcoKTttb2RhbC5jbG9zZSgnQ2xvc2UgY2xpY2snKVwiPnt7J05vJyB8XHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ1pvbmUgbGV0LW1vZGFsPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPnt7J1N1Ym1pdCcgfCB0cmFuc2xhdGV9fTwvaDQ+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKCdDcm9zcyBjbGljaycpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAge3snY29uZmlybS5uZXctem9uZS1mcm9tLXBsYW4nIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhcmtcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiaXNOZXdab25lID0gdHJ1ZTttb2RhbC5jbG9zZSgnQ2xvc2UgY2xpY2snKVwiPnt7J1ZhbGlkYXRlJyB8XHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGFya1wiIChjbGljayk9XCJtb2RhbC5jbG9zZSgnQ2xvc2UgY2xpY2snKVwiPnt7J0NhbmNlbCcgfFxyXG4gICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNwcmVwYXJpbmcgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+e3snUHJvY2Vzc2luZycgfCB0cmFuc2xhdGV9fTwvaDQ+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKCdDcm9zcyBjbGljaycpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvbmctdGVtcGxhdGU+Il19
@@ -1,41 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/router";
4
- import * as i2 from "@angular/common";
5
- import * as i3 from "@ngx-translate/core";
6
- export class TabNavigationComponent {
7
- constructor(router) {
8
- this.router = router;
9
- this.onGoBack = new EventEmitter();
10
- this.menuItems = [];
11
- }
12
- onClick(url, parameter, index) {
13
- if (index === this.menuItems.length - 1) {
14
- return;
15
- }
16
- if (url) {
17
- const newURL = `/dashboard${url}`;
18
- if (this.router.url !== newURL) {
19
- console.log('new url', newURL);
20
- this.router.navigate([newURL]);
21
- }
22
- else {
23
- this.onGoBack.emit(parameter);
24
- }
25
- }
26
- else {
27
- this.onGoBack.emit(parameter);
28
- }
29
- }
30
- }
31
- TabNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TabNavigationComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
32
- TabNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TabNavigationComponent, selector: "lib-tab-navigation", inputs: { menuItems: "menuItems" }, outputs: { onGoBack: "onGoBack" }, ngImport: i0, template: "<span class=\"menu\">\r\n <span *ngFor=\"let item of menuItems; let index = index;\">\r\n <span class=\"item\" [ngClass]=\"{'current':index === menuItems.length - 1}\"\r\n (click)=\"onClick(item.url,item.back, index)\">{{item.label | translate}}</span> <span\r\n *ngIf=\"index !== menuItems.length - 1\" class=\"separator\">></span>\r\n </span>\r\n</span>\r\n", styles: [".item{font-size:1.35em;color:var(--smarterplan-primary);cursor:pointer}.current{color:var(--smarterplan-primary)!important;cursor:default!important;text-decoration:none!important}.separator{font-size:1.4em;margin-left:10px;margin-right:10px;color:var(--smarterplan-primary)}.item:hover{text-decoration:underline}.menu{margin-top:15px;margin-bottom:20px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TabNavigationComponent, decorators: [{
34
- type: Component,
35
- args: [{ selector: 'lib-tab-navigation', template: "<span class=\"menu\">\r\n <span *ngFor=\"let item of menuItems; let index = index;\">\r\n <span class=\"item\" [ngClass]=\"{'current':index === menuItems.length - 1}\"\r\n (click)=\"onClick(item.url,item.back, index)\">{{item.label | translate}}</span> <span\r\n *ngIf=\"index !== menuItems.length - 1\" class=\"separator\">></span>\r\n </span>\r\n</span>\r\n", styles: [".item{font-size:1.35em;color:var(--smarterplan-primary);cursor:pointer}.current{color:var(--smarterplan-primary)!important;cursor:default!important;text-decoration:none!important}.separator{font-size:1.4em;margin-left:10px;margin-right:10px;color:var(--smarterplan-primary)}.item:hover{text-decoration:underline}.menu{margin-top:15px;margin-bottom:20px}\n"] }]
36
- }], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { onGoBack: [{
37
- type: Output
38
- }], menuItems: [{
39
- type: Input
40
- }] } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hdmlnYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvdGFiLW5hdmlnYXRpb24vdGFiLW5hdmlnYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvdGFiLW5hdmlnYXRpb24vdGFiLW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFTL0UsTUFBTSxPQUFPLHNCQUFzQjtJQU0vQixZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUp4QixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVyQyxjQUFTLEdBQWUsRUFBRSxDQUFDO0lBRUUsQ0FBQztJQUV2QyxPQUFPLENBQUMsR0FBVyxFQUFFLFNBQWMsRUFBRSxLQUFhO1FBQzlDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLEdBQUcsRUFBRTtZQUNMLE1BQU0sTUFBTSxHQUFHLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUU7Z0JBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDbEM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDakM7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDOztvSEF2QlEsc0JBQXNCO3dHQUF0QixzQkFBc0IsaUlDVG5DLDRZQU9BOzRGREVhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDSSxvQkFBb0I7NkZBTXBCLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUUsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi10YWItbmF2aWdhdGlvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFiLW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFiLW5hdmlnYXRpb24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFiTmF2aWdhdGlvbkNvbXBvbmVudCB7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uR29CYWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIEBJbnB1dCgpIG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHsgfVxyXG5cclxuICAgIG9uQ2xpY2sodXJsOiBzdHJpbmcsIHBhcmFtZXRlcjogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLm1lbnVJdGVtcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdVUkwgPSBgL2Rhc2hib2FyZCR7dXJsfWA7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJvdXRlci51cmwgIT09IG5ld1VSTCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ25ldyB1cmwnLCBuZXdVUkwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW25ld1VSTF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkdvQmFjay5lbWl0KHBhcmFtZXRlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9uR29CYWNrLmVtaXQocGFyYW1ldGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIjxzcGFuIGNsYXNzPVwibWVudVwiPlxyXG4gICAgPHNwYW4gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudUl0ZW1zOyBsZXQgaW5kZXggPSBpbmRleDtcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW1cIiBbbmdDbGFzc109XCJ7J2N1cnJlbnQnOmluZGV4ID09PSBtZW51SXRlbXMubGVuZ3RoIC0gMX1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25DbGljayhpdGVtLnVybCxpdGVtLmJhY2ssIGluZGV4KVwiPnt7aXRlbS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9zcGFuPiA8c3BhblxyXG4gICAgICAgICAgICAqbmdJZj1cImluZGV4ICE9PSBtZW51SXRlbXMubGVuZ3RoIC0gMVwiIGNsYXNzPVwic2VwYXJhdG9yXCI+Pjwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuPC9zcGFuPlxyXG4iXX0=