@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,268 +0,0 @@
1
- import { Component, EventEmitter, Output } from '@angular/core';
2
- import { wait, showScanPointsOnPlanInDiv, SpModule } from '@smarterplan/ngx-smarterplan-core';
3
- import panzoom from "panzoom";
4
- import { Subject, takeUntil } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/router";
7
- import * as i2 from "@smarterplan/ngx-smarterplan-core";
8
- import * as i3 from "@ngx-translate/core";
9
- import * as i4 from "@angular/common";
10
- import * as i5 from "../tab-navigation/tab-navigation.component";
11
- import * as i6 from "../chevron/chevron.component";
12
- import * as i7 from "./add-zone/add-zone.component";
13
- import * as i8 from "./add-audio-zone/add-audio-zone.component";
14
- import * as i9 from "../plan-legend/plan-legend.component";
15
- import * as i10 from "../../pipes/count-audio-sweeps.pipe";
16
- export class ZonesComponent {
17
- constructor(route, zoneService, spaceService, visitService, navigationService, userService, planService, translate, navigatorService, router) {
18
- this.route = route;
19
- this.zoneService = zoneService;
20
- this.spaceService = spaceService;
21
- this.visitService = visitService;
22
- this.navigationService = navigationService;
23
- this.userService = userService;
24
- this.planService = planService;
25
- this.translate = translate;
26
- this.navigatorService = navigatorService;
27
- this.router = router;
28
- this.lotIndexDetails = -1;
29
- this.updatedZone = new EventEmitter();
30
- this.isEditingZone = false;
31
- this.carouselIsVisible = false;
32
- this.planIsVisible = false;
33
- this.loadingPlan = false;
34
- this.menuItems = [];
35
- this.isMuseumVisit = false;
36
- this.isMuseumModule = false;
37
- this.floorZones = [];
38
- this.zonesMap = new Map();
39
- this.floorDetails = -1;
40
- this.defaultShowing = false;
41
- this.isAddingAudioTrack = false;
42
- this.destroy$ = new Subject();
43
- // listen to the change of location via navigation bar dropdown
44
- this.navigatorService.locationIDChange
45
- .pipe(takeUntil(this.destroy$))
46
- .subscribe((spaceID) => {
47
- this.router.navigate(["dashboard/localisation", spaceID, "zones"]).catch(e => console.log(e.message));
48
- });
49
- this.route.params.subscribe((params) => {
50
- this.spaceID = params.id;
51
- this.resetZones().catch(e => console.log(e.message));
52
- });
53
- }
54
- async ngOnInit() {
55
- this.isMuseumModule = this.userService.getSpModule() === SpModule.MUSEUM;
56
- }
57
- ngOnDestroy() {
58
- this.destroy$.next(true);
59
- this.destroy$.complete();
60
- }
61
- setupMenuItems() {
62
- this.menuItems = [
63
- { label: "Locations", url: "/localisation" },
64
- {
65
- label: this.currentSpace.name,
66
- url: `/localisation/${this.spaceID}`,
67
- },
68
- {
69
- label: "Zones",
70
- url: `/localisation/${this.currentSpace.id}/zones`,
71
- },
72
- ];
73
- }
74
- onGoBack() {
75
- this.editCompleted(null);
76
- }
77
- ngOnChanges() {
78
- this.resetZones().catch(e => console.log(e.message));
79
- }
80
- async resetZones() {
81
- this.isMuseumVisit = false;
82
- this.currentSpace = await this.spaceService.getSpace(this.spaceID);
83
- this.setupMenuItems();
84
- this.allZones = await this.zoneService.getZonesBySpace(this.spaceID);
85
- this.defaultZone = this.allZones.find((zone) => zone.layer && zone.layer.name === "BUILDING" && zone.sweepIDs);
86
- this.floorZones = this.allZones.filter((zone) => zone.layer && zone.layer.name === "FLOOR");
87
- // sort alphabetically
88
- this.floorZones.sort((a, b) => a.name.localeCompare(b.name));
89
- // we add only children zones that are not Floors
90
- if (!!this.defaultZone) {
91
- this.zonesMap.set(this.defaultZone.id, this.allZones.filter((zone) => zone.parentID === this.defaultZone.id && !this.floorZones.includes(zone)));
92
- }
93
- for (const floor of this.floorZones) {
94
- const zonesForFloor = this.allZones.filter((zone) => zone.parentID === floor.id);
95
- this.zonesMap.set(floor.id, zonesForFloor.sort((a, b) => a.name.localeCompare(b.name)));
96
- }
97
- this.resetNavigations();
98
- this.images360 = await this.visitService.loadImagesForSpace(this.currentSpace);
99
- this.plans = await this.planService.getPlansWithZonesForSpace(this.spaceID);
100
- this.plans = this.plans.filter((plan) => plan.isCurrentForZone);
101
- this.onPlansLoaded().catch(e => console.log(e.message));
102
- }
103
- resetNavigations() {
104
- this.navigations = [];
105
- const zonesWithSweeps = this.allZones.filter((zone) => zone.sweepIDs);
106
- this.navigations = [
107
- ...new Set(zonesWithSweeps.flatMap((zone) => zone.sweepIDs)),
108
- ];
109
- }
110
- async onPlansLoaded() {
111
- if (this.planIsVisible && this.currentZone) {
112
- this.preparePlan().catch(e => console.log(e.message));
113
- }
114
- }
115
- /**
116
- * onToggleDetail folds/unfolds details for a zone
117
- * @param index
118
- * @param zone
119
- */
120
- async onToggleDetail(index, zone) {
121
- this.lotIndexDetails = index === this.lotIndexDetails ? -1 : index;
122
- if (this.lotIndexDetails === -1) {
123
- this.currentZone = null;
124
- this.planIsVisible = false;
125
- return;
126
- }
127
- this.currentZone = zone;
128
- this.planIsVisible = true;
129
- if (!this.plans) {
130
- return; // wait until the plans are set
131
- }
132
- if (this.loadingPlan) {
133
- // another plan is already loading
134
- await wait(1000);
135
- }
136
- this.preparePlan().catch(e => console.log(e.message));
137
- }
138
- onToggleDetailFloor(index, floor) {
139
- this.defaultShowing = false;
140
- this.floorDetails = index === this.floorDetails ? -1 : index;
141
- if (this.floorDetails === -1) {
142
- this.currentZone = null;
143
- this.planIsVisible = false;
144
- return;
145
- }
146
- this.currentZone = floor;
147
- this.planIsVisible = true;
148
- if (!this.plans) {
149
- console.log("plans not ready");
150
- return; // wait until the plans are set
151
- }
152
- this.preparePlan().catch(e => console.log(e.message));
153
- }
154
- onToggleDefaultZone() {
155
- this.defaultShowing = !this.defaultShowing;
156
- this.currentZone = this.defaultShowing ? this.defaultZone : null;
157
- }
158
- async preparePlan() {
159
- this.loadingPlan = true;
160
- this.currentPlan = null;
161
- if (this.currentZone.virtual) {
162
- this.currentPlan = null;
163
- this.loadingPlan = false;
164
- return;
165
- }
166
- this.currentPlan = await this.planService.getCalibratedPlanForZone(this.currentZone);
167
- if (this.currentPlan) {
168
- const scans = await this.navigationService.getNavigationsForZone(this.currentZone);
169
- await this.showScanPointsOnPlan(scans);
170
- }
171
- this.loadingPlan = false;
172
- }
173
- toggleCarousel() {
174
- this.carouselIsVisible = true;
175
- }
176
- onEdit(zone) {
177
- this.zoneForEdit = zone;
178
- if (this.zoneForEdit.layer && this.zoneForEdit.layer.name === "AUDIO") {
179
- this.isAddingAudioTrack = true;
180
- }
181
- else {
182
- this.isEditingZone = true;
183
- }
184
- this.menuItems.push({
185
- label: `${zone.name}`,
186
- });
187
- }
188
- onAddLot() {
189
- this.isMuseumVisit = false;
190
- this.isEditingZone = true;
191
- this.menuItems.push({
192
- label: "New",
193
- });
194
- }
195
- onAddMuseumZone() {
196
- this.isMuseumVisit = true;
197
- this.isEditingZone = true;
198
- this.menuItems.push({
199
- label: "New Museum Itinerary",
200
- });
201
- }
202
- onAddAudioZone(parentZone) {
203
- this.parentZoneForAudio = parentZone;
204
- this.isAddingAudioTrack = true;
205
- this.menuItems.push({
206
- label: parentZone.name,
207
- });
208
- this.menuItems.push({
209
- label: "add-audio.add",
210
- });
211
- }
212
- async onDelete(zone) {
213
- const message = this.translate.instant("confirm.deleteZone");
214
- // eslint-disable-next-line no-alert
215
- if (window.confirm(message)) {
216
- const childrenZones = await this.zoneService.getZonesByParentZone(zone.id);
217
- await Promise.all(childrenZones.map(async (childZone) => {
218
- await this.zoneService.deleteZone(childZone.id);
219
- this.allZones.splice(this.allZones.indexOf(childZone), 1);
220
- }));
221
- await this.zoneService.deleteZone(zone.id);
222
- this.allZones.splice(this.allZones.indexOf(zone), 1);
223
- // remove current zone from its parent list
224
- if (zone.parentID && Array.from(this.zonesMap.keys()).includes(zone.parentID)) {
225
- const zonesForParent = this.zonesMap.get(zone.parentID);
226
- zonesForParent.splice(zonesForParent.indexOf(zone), 1);
227
- this.zonesMap.set(zone.parentID, zonesForParent);
228
- }
229
- // we send update of location in order to force update of list of zones in nav bar
230
- this.navigatorService.locationIDChange.next(this.spaceID);
231
- }
232
- }
233
- editCompleted(event) {
234
- this.lotIndexDetails = -1;
235
- this.currentPlan = null;
236
- this.isEditingZone = false;
237
- this.isAddingAudioTrack = false;
238
- this.zoneForEdit = null;
239
- this.planIsVisible = false;
240
- this.carouselIsVisible = false;
241
- this.setupMenuItems();
242
- if (event) {
243
- this.resetZones().catch(e => console.log(e.message));
244
- // we send update of location in order to force update of list of zones in nav bar
245
- this.navigatorService.locationIDChange.next(this.spaceID);
246
- }
247
- }
248
- async showScanPointsOnPlan(navigations) {
249
- if (this.currentPlan) {
250
- const divPlan = document.querySelector("#planDiv");
251
- await showScanPointsOnPlanInDiv(this.currentPlan, divPlan, navigations);
252
- panzoom(divPlan, {
253
- bounds: true,
254
- boundsPadding: 0,
255
- maxZoom: 3.5,
256
- });
257
- }
258
- }
259
- }
260
- ZonesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ZonesComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.ZoneService }, { token: i2.SpaceService }, { token: i2.VisitService }, { token: i2.NavigationService }, { token: i2.BaseUserService }, { token: i2.PlanService }, { token: i3.TranslateService }, { token: i2.NavigatorService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
261
- ZonesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ZonesComponent, selector: "lib-zones", outputs: { updatedZone: "updatedZone" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"container-fluid\" *ngIf=\"currentSpace\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\r\n </div>\r\n <div class=\"row\" *ngIf=\"!isEditingZone && !isAddingAudioTrack\">\r\n <div class=\"col-md-6\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item default-zone-line-item\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\" *ngIf=\"defaultZone\">\r\n {{defaultZone.name}}\r\n <div class=\"default-zone-label\">{{ \"whole space\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"defaultShowing\" (click)=\"onToggleDefaultZone()\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"defaultShowing\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}:\r\n {{defaultZone.layer ? defaultZone.layer.name : \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"defaultZone.surface\">\r\n {{'Surface' | translate}}, m<sup>2</sup>: {{defaultZone.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!defaultZone.virtual\">{{'Scan Points' | translate}}:\r\n {{defaultZone.sweepIDs ? defaultZone.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n </ul>\r\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\r\n <div *ngIf=\"pair.key == defaultZone.id\">\r\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-flush list-group-item-action\"\r\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n {{lot.name}}\r\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\"\r\n (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\r\n\r\n </div>\r\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\r\n translate}}: {{lot.layer ? lot.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">\r\n {{'Surface' | translate}},m<sup>2</sup>: {{lot.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\r\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">\r\n {{'Zone not visible in 3D visit' | translate}}</li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\r\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n\r\n <li class=\"list-group-item\" *ngFor=\"let floor of floorZones; index as index\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n {{floor.name}}\r\n <!-- <small>({{ lot.metadata ? ('Calibrated' | translate) : ('Not calibrated' | translate)}})</small> -->\r\n <div class=\"museum-label\" *ngIf=\"floor.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"index==floorDetails\"\r\n (click)=\"onToggleDetailFloor(index, floor)\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"index==floorDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: {{floor.layer ?\r\n floor.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.surface\">{{'Surface' | translate}}, m<sup>2</sup>:\r\n {{floor.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!floor.virtual\">{{'Scan Points' | translate}}:\r\n {{floor.sweepIDs ? floor.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.virtual\">{{'Zone not visible in 3D visit' |\r\n translate}}</li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onEdit(floor)\">{{'Edit' |\r\n translate}}</button>\r\n\r\n <!-- List of children zones -->\r\n\r\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\r\n <div *ngIf=\"pair.key == floor.id\">\r\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-flush list-group-item-action\"\r\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n <div><span *ngIf=\"lot.code_ref\">{{lot.code_ref}}_</span>{{lot.name}}</div>\r\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\"\r\n (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\r\n\r\n </div>\r\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\r\n translate}}: {{lot.layer ? lot.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">{{'Surface' | translate}},\r\n m<sup>2</sup>:\r\n {{lot.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\r\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual && lot.isMuseumVisitZone\">\r\n {{'Scan Points with audio' | translate}}: {{ lot | countAudioSweeps | async}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">\r\n {{'Zone not visible in 3D visit' | translate}}</li> dist\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\r\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n <div>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddLot()\">{{'Add zone' |\r\n translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddMuseumZone()\" *ngIf=\"isMuseumModule\">\r\n {{'Add museum itinerary' | translate}}</button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"planIsVisible\">\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loadingPlan\">\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 class=\"row\" style=\"overflow: hidden; flex-direction: column;\">\r\n <div *ngIf=\"currentPlan\">\r\n <lib-plan-legend [isAudioZone]=\"false\"></lib-plan-legend>\r\n <div class=\"planContainer\">\r\n <div class=\"mt-3 ms-3\" style=\"height: 500px; width: 100%;\" id=\"planDiv\"></div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!currentPlan && plans && !loadingPlan && currentZone\">\r\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"!currentZone.virtual && !currentZone.isMultipleFloorZone\">\r\n {{ 'Plan is not calibrated' | translate}}\r\n </div>\r\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.virtual\">\r\n {{ 'No scan points chosen' | translate}}\r\n </div>\r\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.isMultipleFloorZone\">\r\n {{ 'The zone is on several floors' | translate}}\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\" *ngIf=\"isEditingZone\">\r\n <lib-add-zone [zoneEdit]=\"zoneForEdit\" [spaceID]=\"spaceID\" [images360]=\"images360\" [navigationIDs]=\"navigations\"\r\n [zones]=\"allZones\" [defaultZone]=\"defaultZone\" (updatedZone)=\"editCompleted($event)\"\r\n [isMuseumVisit]=\"isMuseumVisit\"></lib-add-zone>\r\n </div>\r\n <div class=\"mb-3\" *ngIf=\"isAddingAudioTrack\">\r\n <lib-add-audio-zone [spaceID]=\"spaceID\" [defaultZone]=\"defaultZone\" [parentZone]=\"parentZoneForAudio\"\r\n [zones]=\"allZones\" [currentAudioZone]=\"zoneForEdit\" (updatedZone)=\"editCompleted($event)\"></lib-add-audio-zone>\r\n </div>\r\n</div>", styles: [".museum-label{background-color:#6f3974;font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}.default-zone-line-item{border-bottom-width:3px}.default-zone-label{background-color:var(--smarterplan-primary);font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}.planContainer{overflow:hidden;border-radius:6px;background-color:var(--smarterplan-secondary);height:500px}button{min-width:80px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { kind: "component", type: i6.ChevronComponent, selector: "lib-chevron", inputs: ["conditionShowing"] }, { kind: "component", type: i7.AddZoneComponent, selector: "lib-add-zone", inputs: ["zoneEdit", "spaceID", "images360", "navigationIDs", "zones", "newZoneDataFromEditor", "chosenPlan", "isMuseumVisit", "defaultZone"], outputs: ["updatedZone"] }, { kind: "component", type: i8.AddAudioZoneComponent, selector: "lib-add-audio-zone", inputs: ["spaceID", "defaultZone", "zones", "parentZone", "currentAudioZone"], outputs: ["updatedZone"] }, { kind: "component", type: i9.PlanLegendComponent, selector: "lib-plan-legend", inputs: ["isAudioZone"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i10.CountAudioSweepsPipe, name: "countAudioSweeps" }] });
262
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ZonesComponent, decorators: [{
263
- type: Component,
264
- args: [{ selector: 'lib-zones', template: "<div class=\"container-fluid\" *ngIf=\"currentSpace\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"onGoBack()\"></lib-tab-navigation>\r\n </div>\r\n <div class=\"row\" *ngIf=\"!isEditingZone && !isAddingAudioTrack\">\r\n <div class=\"col-md-6\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item default-zone-line-item\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\" *ngIf=\"defaultZone\">\r\n {{defaultZone.name}}\r\n <div class=\"default-zone-label\">{{ \"whole space\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"defaultShowing\" (click)=\"onToggleDefaultZone()\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"defaultShowing\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}:\r\n {{defaultZone.layer ? defaultZone.layer.name : \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"defaultZone.surface\">\r\n {{'Surface' | translate}}, m<sup>2</sup>: {{defaultZone.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!defaultZone.virtual\">{{'Scan Points' | translate}}:\r\n {{defaultZone.sweepIDs ? defaultZone.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n </ul>\r\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\r\n <div *ngIf=\"pair.key == defaultZone.id\">\r\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-flush list-group-item-action\"\r\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n {{lot.name}}\r\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\"\r\n (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\r\n\r\n </div>\r\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\r\n translate}}: {{lot.layer ? lot.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">\r\n {{'Surface' | translate}},m<sup>2</sup>: {{lot.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\r\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">\r\n {{'Zone not visible in 3D visit' | translate}}</li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\r\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n\r\n <li class=\"list-group-item\" *ngFor=\"let floor of floorZones; index as index\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n {{floor.name}}\r\n <!-- <small>({{ lot.metadata ? ('Calibrated' | translate) : ('Not calibrated' | translate)}})</small> -->\r\n <div class=\"museum-label\" *ngIf=\"floor.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"index==floorDetails\"\r\n (click)=\"onToggleDetailFloor(index, floor)\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"index==floorDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Type of zone' | translate}}: {{floor.layer ?\r\n floor.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.surface\">{{'Surface' | translate}}, m<sup>2</sup>:\r\n {{floor.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!floor.virtual\">{{'Scan Points' | translate}}:\r\n {{floor.sweepIDs ? floor.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"floor.virtual\">{{'Zone not visible in 3D visit' |\r\n translate}}</li>\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onEdit(floor)\">{{'Edit' |\r\n translate}}</button>\r\n\r\n <!-- List of children zones -->\r\n\r\n <div *ngFor=\"let pair of zonesMap | keyvalue\">\r\n <div *ngIf=\"pair.key == floor.id\">\r\n <h5 style=\"margin: 8px;\" *ngIf=\"pair.value.length > 0\">{{'Children zones'|translate}}</h5>\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-flush list-group-item-action\"\r\n *ngFor=\"let lot of pair.value; index as zoneIndex\">\r\n <div class=\"d-flex justify-content-between align-items-center zone-name\">\r\n <div><span *ngIf=\"lot.code_ref\">{{lot.code_ref}}_</span>{{lot.name}}</div>\r\n <div class=\"museum-label\" *ngIf=\"lot.isMuseumVisitZone\">{{ \"itinerary\" | translate }}</div>\r\n <lib-chevron [conditionShowing]=\"zoneIndex==lotIndexDetails\"\r\n (click)=\"onToggleDetail(zoneIndex, lot)\"></lib-chevron>\r\n\r\n </div>\r\n <div *ngIf=\"zoneIndex==lotIndexDetails\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.isMuseumVisitZone\">{{'Type of zone' |\r\n translate}}: {{lot.layer ? lot.layer.name :\r\n \"No type\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.surface\">{{'Surface' | translate}},\r\n m<sup>2</sup>:\r\n {{lot.surface }}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual\">{{'Scan Points' | translate}}:\r\n {{lot.sweepIDs ? lot.sweepIDs.length : \"No scan points\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"!lot.virtual && lot.isMuseumVisitZone\">\r\n {{'Scan Points with audio' | translate}}: {{ lot | countAudioSweeps | async}} </li>\r\n <li class=\"list-group-item bg-transparent\" *ngIf=\"lot.virtual\">\r\n {{'Zone not visible in 3D visit' | translate}}</li> dist\r\n </ul>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill me-2\"\r\n (click)=\"onEdit(lot)\">{{'Edit' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddAudioZone(lot)\"\r\n *ngIf=\"isMuseumModule\"> {{'add-audio.add' | translate}}</button>\r\n <button type=\"button\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"onDelete(lot)\">{{'Delete' | translate}}</button>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n <div>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddLot()\">{{'Add zone' |\r\n translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onAddMuseumZone()\" *ngIf=\"isMuseumModule\">\r\n {{'Add museum itinerary' | translate}}</button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"planIsVisible\">\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loadingPlan\">\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 class=\"row\" style=\"overflow: hidden; flex-direction: column;\">\r\n <div *ngIf=\"currentPlan\">\r\n <lib-plan-legend [isAudioZone]=\"false\"></lib-plan-legend>\r\n <div class=\"planContainer\">\r\n <div class=\"mt-3 ms-3\" style=\"height: 500px; width: 100%;\" id=\"planDiv\"></div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!currentPlan && plans && !loadingPlan && currentZone\">\r\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"!currentZone.virtual && !currentZone.isMultipleFloorZone\">\r\n {{ 'Plan is not calibrated' | translate}}\r\n </div>\r\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.virtual\">\r\n {{ 'No scan points chosen' | translate}}\r\n </div>\r\n <div class=\"mt-3 ms-3\" id=\"no-plan\" *ngIf=\"currentZone.isMultipleFloorZone\">\r\n {{ 'The zone is on several floors' | translate}}\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\" *ngIf=\"isEditingZone\">\r\n <lib-add-zone [zoneEdit]=\"zoneForEdit\" [spaceID]=\"spaceID\" [images360]=\"images360\" [navigationIDs]=\"navigations\"\r\n [zones]=\"allZones\" [defaultZone]=\"defaultZone\" (updatedZone)=\"editCompleted($event)\"\r\n [isMuseumVisit]=\"isMuseumVisit\"></lib-add-zone>\r\n </div>\r\n <div class=\"mb-3\" *ngIf=\"isAddingAudioTrack\">\r\n <lib-add-audio-zone [spaceID]=\"spaceID\" [defaultZone]=\"defaultZone\" [parentZone]=\"parentZoneForAudio\"\r\n [zones]=\"allZones\" [currentAudioZone]=\"zoneForEdit\" (updatedZone)=\"editCompleted($event)\"></lib-add-audio-zone>\r\n </div>\r\n</div>", styles: [".museum-label{background-color:#6f3974;font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}.default-zone-line-item{border-bottom-width:3px}.default-zone-label{background-color:var(--smarterplan-primary);font-size:.95rem;border-radius:10px;padding:5px 10px;color:#fff;text-transform:uppercase;margin-left:auto;margin-right:8px}.planContainer{overflow:hidden;border-radius:6px;background-color:var(--smarterplan-secondary);height:500px}button{min-width:80px}\n"] }]
265
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.ZoneService }, { type: i2.SpaceService }, { type: i2.VisitService }, { type: i2.NavigationService }, { type: i2.BaseUserService }, { type: i2.PlanService }, { type: i3.TranslateService }, { type: i2.NavigatorService }, { type: i1.Router }]; }, propDecorators: { updatedZone: [{
266
- type: Output
267
- }] } });
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvem9uZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvem9uZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hFLE9BQU8sRUFFOEMsSUFBSSxFQUFjLHlCQUF5QixFQUFxQixRQUFRLEVBQzVILE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFNMUMsTUFBTSxPQUFPLGNBQWM7SUF3RHZCLFlBQ1ksS0FBcUIsRUFDckIsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsaUJBQW9DLEVBQ3BDLFdBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLFNBQTJCLEVBQzNCLGdCQUFrQyxFQUNsQyxNQUFjO1FBVGQsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEUxQixvQkFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBSVgsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBTXBELGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBVXRCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQU10QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixjQUFTLEdBQWUsRUFBRSxDQUFDO1FBRTNCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBSXZCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFFeEIsYUFBUSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTFDLGlCQUFZLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFJMUIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBSTNCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBY3JCLCtEQUErRDtRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCO2FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRyxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzdFLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDYixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRTtZQUM1QztnQkFDSSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJO2dCQUM3QixHQUFHLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxPQUFPLEVBQUU7YUFDdkM7WUFDRDtnQkFDSSxLQUFLLEVBQUUsT0FBTztnQkFDZCxHQUFHLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRO2FBQ3JEO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNaLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDakMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQzFFLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNsQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLENBQ3RELENBQUM7UUFDRixzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RCxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsSjtRQUNELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ2IsS0FBSyxDQUFDLEVBQUUsRUFDUixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzdELENBQUM7U0FDTDtRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUN2RCxJQUFJLENBQUMsWUFBWSxDQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQ3pELElBQUksQ0FBQyxPQUFPLENBQ2YsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDZixHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMvRCxDQUFDO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhO1FBQ2YsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDdkQ7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBYSxFQUFFLElBQVU7UUFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNuRSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDYixPQUFPLENBQUMsK0JBQStCO1NBQzFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLGtDQUFrQztZQUNsQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQjtRQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsS0FBVztRQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzdELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMvQixPQUFPLENBQUMsK0JBQStCO1NBQzFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JFLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQzlELElBQUksQ0FBQyxXQUFXLENBQ25CLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQzVELElBQUksQ0FBQyxXQUFXLENBQ25CLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVU7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDbkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztTQUNsQzthQUFNO1lBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDN0I7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNoQixLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO1NBQ3hCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDaEIsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxzQkFBc0I7U0FDaEMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFnQjtRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDaEIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJO1NBQ3pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEtBQUssRUFBRSxlQUFlO1NBQ3pCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQVU7UUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM3RCxvQ0FBb0M7UUFDcEMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0UsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUNwRCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNKLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JELDJDQUEyQztZQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDM0UsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN4RCxjQUFjLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7YUFDcEQ7WUFDRCxrRkFBa0Y7WUFDbEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0Q7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDcEQsa0ZBQWtGO1lBQ2xGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzdEO0lBRUwsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxXQUF5QjtRQUNoRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQWdCLENBQUM7WUFDbEUsTUFBTSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN4RSxPQUFPLENBQUMsT0FBTyxFQUFFO2dCQUNiLE1BQU0sRUFBRSxJQUFJO2dCQUNaLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixPQUFPLEVBQUUsR0FBRzthQUNmLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQzs7NEdBbFVRLGNBQWM7Z0dBQWQsY0FBYywrR0NkM0IsNnNXQW9MTTs0RkR0S08sY0FBYztrQkFMMUIsU0FBUzsrQkFDSSxXQUFXO2dXQVVYLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIE1lbnVJdGVtLCBab25lU2VydmljZSwgU3BhY2VTZXJ2aWNlLCBWaXNpdFNlcnZpY2UsXHJcbiAgICBOYXZpZ2F0aW9uU2VydmljZSwgQmFzZVVzZXJTZXJ2aWNlLCBQbGFuU2VydmljZSwgd2FpdCwgTmF2aWdhdGlvbiwgc2hvd1NjYW5Qb2ludHNPblBsYW5JbkRpdiwgUGxhbiwgU3BhY2UsIFpvbmUsIFNwTW9kdWxlLCBOYXZpZ2F0b3JTZXJ2aWNlXHJcbn0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcclxuaW1wb3J0IHBhbnpvb20gZnJvbSBcInBhbnpvb21cIjtcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItem9uZXMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3pvbmVzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3pvbmVzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFpvbmVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBsb3RJbmRleERldGFpbHMgPSAtMTtcclxuXHJcbiAgICBjdXJyZW50U3BhY2U6IFNwYWNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSB1cGRhdGVkWm9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBwbGFuczogUGxhbltdO1xyXG5cclxuICAgIHpvbmVGb3JFZGl0OiBab25lO1xyXG5cclxuICAgIGlzRWRpdGluZ1pvbmUgPSBmYWxzZTtcclxuXHJcbiAgICBjYXB0dXJlRGF0ZTogbnVtYmVyO1xyXG5cclxuICAgIHNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgICBuYXZpZ2F0aW9uczogc3RyaW5nW107XHJcblxyXG4gICAgaW1hZ2VzMzYwOiBhbnlbXTtcclxuXHJcbiAgICBjYXJvdXNlbElzVmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIHBsYW5Jc1Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICBjdXJyZW50UGxhbjogUGxhbjtcclxuXHJcbiAgICBjdXJyZW50Wm9uZTogWm9uZTtcclxuXHJcbiAgICBsb2FkaW5nUGxhbiA9IGZhbHNlO1xyXG5cclxuICAgIG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIGlzTXVzZXVtVmlzaXQgPSBmYWxzZTtcclxuXHJcbiAgICBpc011c2V1bU1vZHVsZSA9IGZhbHNlO1xyXG5cclxuICAgIGFsbFpvbmVzOiBab25lW107XHJcblxyXG4gICAgZmxvb3Jab25lczogWm9uZVtdID0gW107XHJcblxyXG4gICAgem9uZXNNYXA6IE1hcDxzdHJpbmcsIFpvbmVbXT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgZmxvb3JEZXRhaWxzOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgICBkZWZhdWx0Wm9uZTogWm9uZTtcclxuXHJcbiAgICBkZWZhdWx0U2hvd2luZyA9IGZhbHNlO1xyXG5cclxuICAgIGlzQWRkaW5nQXVkaW9UcmFjayA9IGZhbHNlO1xyXG5cclxuICAgIHBhcmVudFpvbmVGb3JBdWRpbzogWm9uZTtcclxuXHJcbiAgICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBzcGFjZVNlcnZpY2U6IFNwYWNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHZpc2l0U2VydmljZTogVmlzaXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBsYW5TZXJ2aWNlOiBQbGFuU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5hdmlnYXRvclNlcnZpY2U6IE5hdmlnYXRvclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICkge1xyXG4gICAgICAgIC8vIGxpc3RlbiB0byB0aGUgY2hhbmdlIG9mIGxvY2F0aW9uIHZpYSBuYXZpZ2F0aW9uIGJhciBkcm9wZG93blxyXG4gICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5sb2NhdGlvbklEQ2hhbmdlXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3BhY2VJRCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiZGFzaGJvYXJkL2xvY2FsaXNhdGlvblwiLCBzcGFjZUlELCBcInpvbmVzXCJdKS5jYXRjaChlID0+IGNvbnNvbGUubG9nKGUubWVzc2FnZSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zcGFjZUlEID0gcGFyYW1zLmlkO1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0Wm9uZXMoKS5jYXRjaChlID0+IGNvbnNvbGUubG9nKGUubWVzc2FnZSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaXNNdXNldW1Nb2R1bGUgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFNwTW9kdWxlKCkgPT09IFNwTW9kdWxlLk1VU0VVTTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHVwTWVudUl0ZW1zKCkge1xyXG4gICAgICAgIHRoaXMubWVudUl0ZW1zID0gW1xyXG4gICAgICAgICAgICB7IGxhYmVsOiBcIkxvY2F0aW9uc1wiLCB1cmw6IFwiL2xvY2FsaXNhdGlvblwiIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmN1cnJlbnRTcGFjZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBgL2xvY2FsaXNhdGlvbi8ke3RoaXMuc3BhY2VJRH1gLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJab25lc1wiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBgL2xvY2FsaXNhdGlvbi8ke3RoaXMuY3VycmVudFNwYWNlLmlkfS96b25lc2AsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBvbkdvQmFjaygpIHtcclxuICAgICAgICB0aGlzLmVkaXRDb21wbGV0ZWQobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldFpvbmVzKCkuY2F0Y2goZSA9PiBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXNldFpvbmVzKCkge1xyXG4gICAgICAgIHRoaXMuaXNNdXNldW1WaXNpdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0U3BhY2UodGhpcy5zcGFjZUlEKTtcclxuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYWxsWm9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzQnlTcGFjZSh0aGlzLnNwYWNlSUQpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFpvbmUgPSB0aGlzLmFsbFpvbmVzLmZpbmQoXHJcbiAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJCVUlMRElOR1wiICYmIHpvbmUuc3dlZXBJRHMsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5mbG9vclpvbmVzID0gdGhpcy5hbGxab25lcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gc29ydCBhbHBoYWJldGljYWxseVxyXG4gICAgICAgIHRoaXMuZmxvb3Jab25lcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcclxuICAgICAgICAvLyB3ZSBhZGQgb25seSBjaGlsZHJlbiB6b25lcyB0aGF0IGFyZSBub3QgRmxvb3JzXHJcbiAgICAgICAgaWYgKCEhdGhpcy5kZWZhdWx0Wm9uZSkge1xyXG4gICAgICAgICAgdGhpcy56b25lc01hcC5zZXQodGhpcy5kZWZhdWx0Wm9uZS5pZCwgdGhpcy5hbGxab25lcy5maWx0ZXIoKHpvbmUpID0+IHpvbmUucGFyZW50SUQgPT09IHRoaXMuZGVmYXVsdFpvbmUuaWQgJiYgIXRoaXMuZmxvb3Jab25lcy5pbmNsdWRlcyh6b25lKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGZsb29yIG9mIHRoaXMuZmxvb3Jab25lcykge1xyXG4gICAgICAgICAgICBjb25zdCB6b25lc0ZvckZsb29yID0gdGhpcy5hbGxab25lcy5maWx0ZXIoKHpvbmUpID0+IHpvbmUucGFyZW50SUQgPT09IGZsb29yLmlkKTtcclxuICAgICAgICAgICAgdGhpcy56b25lc01hcC5zZXQoXHJcbiAgICAgICAgICAgICAgICBmbG9vci5pZCxcclxuICAgICAgICAgICAgICAgIHpvbmVzRm9yRmxvb3Iuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzZXROYXZpZ2F0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VzMzYwID0gYXdhaXQgdGhpcy52aXNpdFNlcnZpY2UubG9hZEltYWdlc0ZvclNwYWNlKFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucGxhbnMgPSBhd2FpdCB0aGlzLnBsYW5TZXJ2aWNlLmdldFBsYW5zV2l0aFpvbmVzRm9yU3BhY2UoXHJcbiAgICAgICAgICAgIHRoaXMuc3BhY2VJRCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucGxhbnMgPSB0aGlzLnBsYW5zLmZpbHRlcigocGxhbikgPT4gcGxhbi5pc0N1cnJlbnRGb3Jab25lKTtcclxuICAgICAgICB0aGlzLm9uUGxhbnNMb2FkZWQoKS5jYXRjaChlID0+IGNvbnNvbGUubG9nKGUubWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0TmF2aWdhdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9ucyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHpvbmVzV2l0aFN3ZWVwcyA9IHRoaXMuYWxsWm9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLnN3ZWVwSURzKTtcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25zID0gW1xyXG4gICAgICAgICAgICAuLi5uZXcgU2V0KHpvbmVzV2l0aFN3ZWVwcy5mbGF0TWFwKCh6b25lKSA9PiB6b25lLnN3ZWVwSURzKSksXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblBsYW5zTG9hZGVkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYW5Jc1Zpc2libGUgJiYgdGhpcy5jdXJyZW50Wm9uZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVQbGFuKCkuY2F0Y2goZT0+Y29uc29sZS5sb2coZS5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogb25Ub2dnbGVEZXRhaWwgZm9sZHMvdW5mb2xkcyBkZXRhaWxzIGZvciBhIHpvbmVcclxuICAgICAqIEBwYXJhbSBpbmRleFxyXG4gICAgICogQHBhcmFtIHpvbmVcclxuICAgICAqL1xyXG4gICAgYXN5bmMgb25Ub2dnbGVEZXRhaWwoaW5kZXg6IG51bWJlciwgem9uZTogWm9uZSkge1xyXG4gICAgICAgIHRoaXMubG90SW5kZXhEZXRhaWxzID0gaW5kZXggPT09IHRoaXMubG90SW5kZXhEZXRhaWxzID8gLTEgOiBpbmRleDtcclxuICAgICAgICBpZiAodGhpcy5sb3RJbmRleERldGFpbHMgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFpvbmUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnBsYW5Jc1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRab25lID0gem9uZTtcclxuICAgICAgICB0aGlzLnBsYW5Jc1Zpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy5wbGFucykge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIHdhaXQgdW50aWwgdGhlIHBsYW5zIGFyZSBzZXRcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZ1BsYW4pIHtcclxuICAgICAgICAgICAgLy8gYW5vdGhlciBwbGFuIGlzIGFscmVhZHkgbG9hZGluZ1xyXG4gICAgICAgICAgICBhd2FpdCB3YWl0KDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByZXBhcmVQbGFuKCkuY2F0Y2goZT0+Y29uc29sZS5sb2coZS5tZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ub2dnbGVEZXRhaWxGbG9vcihpbmRleDogbnVtYmVyLCBmbG9vcjogWm9uZSkge1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFNob3dpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZsb29yRGV0YWlscyA9IGluZGV4ID09PSB0aGlzLmZsb29yRGV0YWlscyA/IC0xIDogaW5kZXg7XHJcbiAgICAgICAgaWYgKHRoaXMuZmxvb3JEZXRhaWxzID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRab25lID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5wbGFuSXNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IGZsb29yO1xyXG4gICAgICAgIHRoaXMucGxhbklzVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBsYW5zKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicGxhbnMgbm90IHJlYWR5XCIpO1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIHdhaXQgdW50aWwgdGhlIHBsYW5zIGFyZSBzZXRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcmVwYXJlUGxhbigpLmNhdGNoKGUgPT4gY29uc29sZS5sb2coZS5tZXNzYWdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ub2dnbGVEZWZhdWx0Wm9uZSgpIHtcclxuICAgICAgICB0aGlzLmRlZmF1bHRTaG93aW5nID0gIXRoaXMuZGVmYXVsdFNob3dpbmc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IHRoaXMuZGVmYXVsdFNob3dpbmcgPyB0aGlzLmRlZmF1bHRab25lIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcmVwYXJlUGxhbigpIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdQbGFuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQbGFuID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Wm9uZS52aXJ0dWFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBsYW4gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdQbGFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGxhbiA9IGF3YWl0IHRoaXMucGxhblNlcnZpY2UuZ2V0Q2FsaWJyYXRlZFBsYW5Gb3Jab25lKFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRab25lLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBsYW4pIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NhbnMgPSBhd2FpdCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldE5hdmlnYXRpb25zRm9yWm9uZShcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFpvbmUsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1NjYW5Qb2ludHNPblBsYW4oc2NhbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRpbmdQbGFuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlQ2Fyb3VzZWwoKSB7XHJcbiAgICAgICAgdGhpcy5jYXJvdXNlbElzVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgb25FZGl0KHpvbmU6IFpvbmUpIHtcclxuICAgICAgICB0aGlzLnpvbmVGb3JFZGl0ID0gem9uZTtcclxuICAgICAgICBpZiAodGhpcy56b25lRm9yRWRpdC5sYXllciAmJiB0aGlzLnpvbmVGb3JFZGl0LmxheWVyLm5hbWUgPT09IFwiQVVESU9cIikge1xyXG4gICAgICAgICAgICB0aGlzLmlzQWRkaW5nQXVkaW9UcmFjayA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0VkaXRpbmdab25lID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWVudUl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICBsYWJlbDogYCR7em9uZS5uYW1lfWAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BZGRMb3QoKSB7XHJcbiAgICAgICAgdGhpcy5pc011c2V1bVZpc2l0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmdab25lID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgbGFiZWw6IFwiTmV3XCIsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BZGRNdXNldW1ab25lKCkge1xyXG4gICAgICAgIHRoaXMuaXNNdXNldW1WaXNpdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmdab25lID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgbGFiZWw6IFwiTmV3IE11c2V1bSBJdGluZXJhcnlcIixcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFkZEF1ZGlvWm9uZShwYXJlbnRab25lOiBab25lKSB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRab25lRm9yQXVkaW8gPSBwYXJlbnRab25lO1xyXG4gICAgICAgIHRoaXMuaXNBZGRpbmdBdWRpb1RyYWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgbGFiZWw6IHBhcmVudFpvbmUubmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgbGFiZWw6IFwiYWRkLWF1ZGlvLmFkZFwiLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRGVsZXRlKHpvbmU6IFpvbmUpIHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uZGVsZXRlWm9uZVwiKTtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYWxlcnRcclxuICAgICAgICBpZiAod2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW5ab25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVBhcmVudFpvbmUoem9uZS5pZCk7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNoaWxkcmVuWm9uZXMubWFwKGFzeW5jIChjaGlsZFpvbmUpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZGVsZXRlWm9uZShjaGlsZFpvbmUuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxab25lcy5zcGxpY2UodGhpcy5hbGxab25lcy5pbmRleE9mKGNoaWxkWm9uZSksIDEpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZGVsZXRlWm9uZSh6b25lLmlkKTtcclxuICAgICAgICAgICAgdGhpcy5hbGxab25lcy5zcGxpY2UodGhpcy5hbGxab25lcy5pbmRleE9mKHpvbmUpLCAxKTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIGN1cnJlbnQgem9uZSBmcm9tIGl0cyBwYXJlbnQgbGlzdFxyXG4gICAgICAgICAgICBpZiAoem9uZS5wYXJlbnRJRCAmJiBBcnJheS5mcm9tKHRoaXMuem9uZXNNYXAua2V5cygpKS5pbmNsdWRlcyh6b25lLnBhcmVudElEKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZXNGb3JQYXJlbnQgPSB0aGlzLnpvbmVzTWFwLmdldCh6b25lLnBhcmVudElEKTtcclxuICAgICAgICAgICAgICAgIHpvbmVzRm9yUGFyZW50LnNwbGljZSh6b25lc0ZvclBhcmVudC5pbmRleE9mKHpvbmUpLCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZXNNYXAuc2V0KHpvbmUucGFyZW50SUQsIHpvbmVzRm9yUGFyZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB3ZSBzZW5kIHVwZGF0ZSBvZiBsb2NhdGlvbiBpbiBvcmRlciB0byBmb3JjZSB1cGRhdGUgb2YgbGlzdCBvZiB6b25lcyBpbiBuYXYgYmFyXHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5sb2NhdGlvbklEQ2hhbmdlLm5leHQodGhpcy5zcGFjZUlEKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdENvbXBsZXRlZChldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5sb3RJbmRleERldGFpbHMgPSAtMTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQbGFuID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzRWRpdGluZ1pvbmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzQWRkaW5nQXVkaW9UcmFjayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuem9uZUZvckVkaXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucGxhbklzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxJc1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XHJcbiAgICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRab25lcygpLmNhdGNoKGU9PiBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpKTtcclxuICAgICAgICAgICAgLy8gd2Ugc2VuZCB1cGRhdGUgb2YgbG9jYXRpb24gaW4gb3JkZXIgdG8gZm9yY2UgdXBkYXRlIG9mIGxpc3Qgb2Ygem9uZXMgaW4gbmF2IGJhclxyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UubG9jYXRpb25JRENoYW5nZS5uZXh0KHRoaXMuc3BhY2VJRCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93U2NhblBvaW50c09uUGxhbihuYXZpZ2F0aW9uczogTmF2aWdhdGlvbltdKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBsYW4pIHtcclxuICAgICAgICAgICAgY29uc3QgZGl2UGxhbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcGxhbkRpdlwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgYXdhaXQgc2hvd1NjYW5Qb2ludHNPblBsYW5JbkRpdih0aGlzLmN1cnJlbnRQbGFuLCBkaXZQbGFuLCBuYXZpZ2F0aW9ucyk7XHJcbiAgICAgICAgICAgIHBhbnpvb20oZGl2UGxhbiwge1xyXG4gICAgICAgICAgICAgICAgYm91bmRzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgYm91bmRzUGFkZGluZzogMCxcclxuICAgICAgICAgICAgICAgIG1heFpvb206IDMuNSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCIgKm5nSWY9XCJjdXJyZW50U3BhY2VcIj5cclxuICA8ZGl2IGNsYXNzPVwibS0zXCI+XHJcbiAgICA8bGliLXRhYi1uYXZpZ2F0aW9uIFttZW51SXRlbXNdPSdtZW51SXRlbXMnIChvbkdvQmFjayk9XCJvbkdvQmFjaygpXCI+PC9saWItdGFiLW5hdmlnYXRpb24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIWlzRWRpdGluZ1pvbmUgJiYgIWlzQWRkaW5nQXVkaW9UcmFja1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBkZWZhdWx0LXpvbmUtbGluZS1pdGVtXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB6b25lLW5hbWVcIiAqbmdJZj1cImRlZmF1bHRab25lXCI+XHJcbiAgICAgICAgICAgIHt7ZGVmYXVsdFpvbmUubmFtZX19XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWZhdWx0LXpvbmUtbGFiZWxcIj57eyBcIndob2xlIHNwYWNlXCIgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgPGxpYi1jaGV2cm9uIFtjb25kaXRpb25TaG93aW5nXT1cImRlZmF1bHRTaG93aW5nXCIgKGNsaWNrKT1cIm9uVG9nZ2xlRGVmYXVsdFpvbmUoKVwiPjwvbGliLWNoZXZyb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkZWZhdWx0U2hvd2luZ1wiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydUeXBlIG9mIHpvbmUnIHwgdHJhbnNsYXRlfX06XHJcbiAgICAgICAgICAgICAgICB7e2RlZmF1bHRab25lLmxheWVyID8gZGVmYXVsdFpvbmUubGF5ZXIubmFtZSA6IFwiTm8gdHlwZVwiIHwgdHJhbnNsYXRlfX0gPC9saT5cclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImRlZmF1bHRab25lLnN1cmZhY2VcIj5cclxuICAgICAgICAgICAgICAgIHt7J1N1cmZhY2UnIHwgdHJhbnNsYXRlfX0sIG08c3VwPjI8L3N1cD46IHt7ZGVmYXVsdFpvbmUuc3VyZmFjZSB9fVxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCIhZGVmYXVsdFpvbmUudmlydHVhbFwiPnt7J1NjYW4gUG9pbnRzJyB8IHRyYW5zbGF0ZX19OlxyXG4gICAgICAgICAgICAgICAge3tkZWZhdWx0Wm9uZS5zd2VlcElEcyA/IGRlZmF1bHRab25lLnN3ZWVwSURzLmxlbmd0aCA6IFwiTm8gc2NhbiBwb2ludHNcIiB8IHRyYW5zbGF0ZX19IDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHBhaXIgb2Ygem9uZXNNYXAgfCBrZXl2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYWlyLmtleSA9PSBkZWZhdWx0Wm9uZS5pZFwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IHN0eWxlPVwibWFyZ2luOiA4cHg7XCIgKm5nSWY9XCJwYWlyLnZhbHVlLmxlbmd0aCA+IDBcIj57eydDaGlsZHJlbiB6b25lcyd8dHJhbnNsYXRlfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWZsdXNoIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsb3Qgb2YgcGFpci52YWx1ZTsgaW5kZXggYXMgem9uZUluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgem9uZS1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e2xvdC5uYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdXNldW0tbGFiZWxcIiAqbmdJZj1cImxvdC5pc011c2V1bVZpc2l0Wm9uZVwiPnt7IFwiaXRpbmVyYXJ5XCIgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaWItY2hldnJvbiBbY29uZGl0aW9uU2hvd2luZ109XCJ6b25lSW5kZXg9PWxvdEluZGV4RGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRvZ2dsZURldGFpbCh6b25lSW5kZXgsIGxvdClcIj48L2xpYi1jaGV2cm9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiem9uZUluZGV4PT1sb3RJbmRleERldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIiFsb3QuaXNNdXNldW1WaXNpdFpvbmVcIj57eydUeXBlIG9mIHpvbmUnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fToge3tsb3QubGF5ZXIgPyBsb3QubGF5ZXIubmFtZSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJObyB0eXBlXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImxvdC5zdXJmYWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3snU3VyZmFjZScgfCB0cmFuc2xhdGV9fSxtPHN1cD4yPC9zdXA+OiB7e2xvdC5zdXJmYWNlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiICpuZ0lmPVwiIWxvdC52aXJ0dWFsXCI+e3snU2NhbiBQb2ludHMnIHwgdHJhbnNsYXRlfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tsb3Quc3dlZXBJRHMgPyBsb3Quc3dlZXBJRHMubGVuZ3RoIDogXCJObyBzY2FuIHBvaW50c1wiIHwgdHJhbnNsYXRlfX0gPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCJsb3QudmlydHVhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7J1pvbmUgbm90IHZpc2libGUgaW4gM0QgdmlzaXQnIHwgdHJhbnNsYXRlfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FZGl0KGxvdClcIj57eydFZGl0JyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwib25BZGRBdWRpb1pvbmUobG90KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNdXNldW1Nb2R1bGVcIj4ge3snYWRkLWF1ZGlvLmFkZCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUobG90KVwiPnt7J0RlbGV0ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCIgKm5nRm9yPVwibGV0IGZsb29yIG9mIGZsb29yWm9uZXM7IGluZGV4IGFzIGluZGV4XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB6b25lLW5hbWVcIj5cclxuICAgICAgICAgICAge3tmbG9vci5uYW1lfX1cclxuICAgICAgICAgICAgPCEtLSA8c21hbGw+KHt7IGxvdC5tZXRhZGF0YSA/ICgnQ2FsaWJyYXRlZCcgfCB0cmFuc2xhdGUpIDogKCdOb3QgY2FsaWJyYXRlZCcgfCB0cmFuc2xhdGUpfX0pPC9zbWFsbD4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdXNldW0tbGFiZWxcIiAqbmdJZj1cImZsb29yLmlzTXVzZXVtVmlzaXRab25lXCI+e3sgXCJpdGluZXJhcnlcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8bGliLWNoZXZyb24gW2NvbmRpdGlvblNob3dpbmddPVwiaW5kZXg9PWZsb29yRGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlRGV0YWlsRmxvb3IoaW5kZXgsIGZsb29yKVwiPjwvbGliLWNoZXZyb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpbmRleD09Zmxvb3JEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J1R5cGUgb2Ygem9uZScgfCB0cmFuc2xhdGV9fToge3tmbG9vci5sYXllciA/XHJcbiAgICAgICAgICAgICAgICBmbG9vci5sYXllci5uYW1lIDpcclxuICAgICAgICAgICAgICAgIFwiTm8gdHlwZVwiIHwgdHJhbnNsYXRlfX0gPC9saT5cclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImZsb29yLnN1cmZhY2VcIj57eydTdXJmYWNlJyB8IHRyYW5zbGF0ZX19LCBtPHN1cD4yPC9zdXA+OlxyXG4gICAgICAgICAgICAgICAge3tmbG9vci5zdXJmYWNlIH19XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIiFmbG9vci52aXJ0dWFsXCI+e3snU2NhbiBQb2ludHMnIHwgdHJhbnNsYXRlfX06XHJcbiAgICAgICAgICAgICAgICB7e2Zsb29yLnN3ZWVwSURzID8gZmxvb3Iuc3dlZXBJRHMubGVuZ3RoIDogXCJObyBzY2FuIHBvaW50c1wiIHwgdHJhbnNsYXRlfX0gPC9saT5cclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImZsb29yLnZpcnR1YWxcIj57eydab25lIG5vdCB2aXNpYmxlIGluIDNEIHZpc2l0JyB8XHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwib25FZGl0KGZsb29yKVwiPnt7J0VkaXQnIHxcclxuICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBMaXN0IG9mIGNoaWxkcmVuIHpvbmVzIC0tPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFpciBvZiB6b25lc01hcCB8IGtleXZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhaXIua2V5ID09IGZsb29yLmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgc3R5bGU9XCJtYXJnaW46IDhweDtcIiAqbmdJZj1cInBhaXIudmFsdWUubGVuZ3RoID4gMFwiPnt7J0NoaWxkcmVuIHpvbmVzJ3x0cmFuc2xhdGV9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtZmx1c2ggbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxvdCBvZiBwYWlyLnZhbHVlOyBpbmRleCBhcyB6b25lSW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB6b25lLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHNwYW4gKm5nSWY9XCJsb3QuY29kZV9yZWZcIj57e2xvdC5jb2RlX3JlZn19Xzwvc3Bhbj57e2xvdC5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdXNldW0tbGFiZWxcIiAqbmdJZj1cImxvdC5pc011c2V1bVZpc2l0Wm9uZVwiPnt7IFwiaXRpbmVyYXJ5XCIgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaWItY2hldnJvbiBbY29uZGl0aW9uU2hvd2luZ109XCJ6b25lSW5kZXg9PWxvdEluZGV4RGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRvZ2dsZURldGFpbCh6b25lSW5kZXgsIGxvdClcIj48L2xpYi1jaGV2cm9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiem9uZUluZGV4PT1sb3RJbmRleERldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIiFsb3QuaXNNdXNldW1WaXNpdFpvbmVcIj57eydUeXBlIG9mIHpvbmUnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fToge3tsb3QubGF5ZXIgPyBsb3QubGF5ZXIubmFtZSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJObyB0eXBlXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImxvdC5zdXJmYWNlXCI+e3snU3VyZmFjZScgfCB0cmFuc2xhdGV9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtPHN1cD4yPC9zdXA+OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7bG90LnN1cmZhY2UgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCIgKm5nSWY9XCIhbG90LnZpcnR1YWxcIj57eydTY2FuIFBvaW50cycgfCB0cmFuc2xhdGV9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xvdC5zd2VlcElEcyA/IGxvdC5zd2VlcElEcy5sZW5ndGggOiBcIk5vIHNjYW4gcG9pbnRzXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cIiFsb3QudmlydHVhbCAmJiBsb3QuaXNNdXNldW1WaXNpdFpvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eydTY2FuIFBvaW50cyB3aXRoIGF1ZGlvJyB8IHRyYW5zbGF0ZX19OiB7eyBsb3QgfCBjb3VudEF1ZGlvU3dlZXBzIHwgYXN5bmN9fSA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIiAqbmdJZj1cImxvdC52aXJ0dWFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3snWm9uZSBub3QgdmlzaWJsZSBpbiAzRCB2aXNpdCcgfCB0cmFuc2xhdGV9fTwvbGk+ICBkaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXQobG90KVwiPnt7J0VkaXQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvbkFkZEF1ZGlvWm9uZShsb3QpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc011c2V1bU1vZHVsZVwiPiB7eydhZGQtYXVkaW8uYWRkJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZShsb3QpXCI+e3snRGVsZXRlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwib25BZGRMb3QoKVwiPnt7J0FkZCB6b25lJyB8XHJcbiAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvbkFkZE11c2V1bVpvbmUoKVwiICpuZ0lmPVwiaXNNdXNldW1Nb2R1bGVcIj5cclxuICAgICAgICAgIHt7J0FkZCBtdXNldW0gaXRpbmVyYXJ5JyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInBsYW5Jc1Zpc2libGVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJsb2FkaW5nUGxhblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm92ZXJmbG93OiBoaWRkZW47IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRQbGFuXCI+XHJcbiAgICAgICAgICA8bGliLXBsYW4tbGVnZW5kIFtpc0F1ZGlvWm9uZV09XCJmYWxzZVwiPjwvbGliLXBsYW4tbGVnZW5kPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBsYW5Db250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbXMtM1wiIHN0eWxlPVwiaGVpZ2h0OiA1MDBweDsgd2lkdGg6IDEwMCU7XCIgaWQ9XCJwbGFuRGl2XCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFjdXJyZW50UGxhbiAmJiBwbGFucyAmJiAhbG9hZGluZ1BsYW4gJiYgY3VycmVudFpvbmVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1zLTNcIiBpZD1cIm5vLXBsYW5cIiAqbmdJZj1cIiFjdXJyZW50Wm9uZS52aXJ0dWFsICYmICFjdXJyZW50Wm9uZS5pc011bHRpcGxlRmxvb3Jab25lXCI+XHJcbiAgICAgICAgICAgIHt7ICdQbGFuIGlzIG5vdCBjYWxpYnJhdGVkJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1zLTNcIiBpZD1cIm5vLXBsYW5cIiAqbmdJZj1cImN1cnJlbnRab25lLnZpcnR1YWxcIj5cclxuICAgICAgICAgICAge3sgJ05vIHNjYW4gcG9pbnRzIGNob3NlbicgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBtcy0zXCIgaWQ9XCJuby1wbGFuXCIgKm5nSWY9XCJjdXJyZW50Wm9uZS5pc011bHRpcGxlRmxvb3Jab25lXCI+XHJcbiAgICAgICAgICAgIHt7ICdUaGUgem9uZSBpcyBvbiBzZXZlcmFsIGZsb29ycycgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCJpc0VkaXRpbmdab25lXCI+XHJcbiAgICA8bGliLWFkZC16b25lIFt6b25lRWRpdF09XCJ6b25lRm9yRWRpdFwiIFtzcGFjZUlEXT1cInNwYWNlSURcIiBbaW1hZ2VzMzYwXT1cImltYWdlczM2MFwiIFtuYXZpZ2F0aW9uSURzXT1cIm5hdmlnYXRpb25zXCJcclxuICAgICAgW3pvbmVzXT1cImFsbFpvbmVzXCIgW2RlZmF1bHRab25lXT1cImRlZmF1bHRab25lXCIgKHVwZGF0ZWRab25lKT1cImVkaXRDb21wbGV0ZWQoJGV2ZW50KVwiXHJcbiAgICAgIFtpc011c2V1bVZpc2l0XT1cImlzTXVzZXVtVmlzaXRcIj48L2xpYi1hZGQtem9uZT5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwiaXNBZGRpbmdBdWRpb1RyYWNrXCI+XHJcbiAgICA8bGliLWFkZC1hdWRpby16b25lIFtzcGFjZUlEXT1cInNwYWNlSURcIiBbZGVmYXVsdFpvbmVdPVwiZGVmYXVsdFpvbmVcIiBbcGFyZW50Wm9uZV09XCJwYXJlbnRab25lRm9yQXVkaW9cIlxyXG4gICAgICBbem9uZXNdPVwiYWxsWm9uZXNcIiBbY3VycmVudEF1ZGlvWm9uZV09XCJ6b25lRm9yRWRpdFwiICh1cGRhdGVkWm9uZSk9XCJlZGl0Q29tcGxldGVkKCRldmVudClcIj48L2xpYi1hZGQtYXVkaW8tem9uZT5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
@@ -1,49 +0,0 @@
1
- import { NgModule } from "@angular/core";
2
- import { RouterModule } from "@angular/router";
3
- import { CalibrationComponent } from "./components/plans/calibration/calibration.component";
4
- import { DetailLocationComponent } from "./components/detail-location/detail-location.component";
5
- import { EditPlanComponent } from "./components/plans/edit-plan/edit-plan.component";
6
- import { ImagesComponent } from "./components/images/images.component";
7
- import { LocationsComponent } from "./components/locations/locations.component";
8
- import { PlansComponent } from "./components/plans/plans.component";
9
- import { VisitsComponent } from "./components/visits/visits.component";
10
- import { ZonesComponent } from "./components/zones/zones.component";
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/router";
13
- const routes = [
14
- {
15
- path: "",
16
- component: LocationsComponent,
17
- },
18
- {
19
- path: ":id",
20
- children: [
21
- { path: "", component: DetailLocationComponent },
22
- { path: "zones", component: ZonesComponent },
23
- { path: "visits", component: VisitsComponent },
24
- { path: "plans", component: PlansComponent },
25
- {
26
- path: "plan-calibration",
27
- component: CalibrationComponent,
28
- },
29
- {
30
- path: "plan-edit",
31
- component: EditPlanComponent,
32
- },
33
- { path: "images", component: ImagesComponent },
34
- ],
35
- },
36
- ];
37
- export class LocationsRoutingModule {
38
- }
39
- LocationsRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocationsRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
40
- LocationsRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: LocationsRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] });
41
- LocationsRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocationsRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] });
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocationsRoutingModule, decorators: [{
43
- type: NgModule,
44
- args: [{
45
- imports: [RouterModule.forChild(routes)],
46
- exports: [RouterModule],
47
- }]
48
- }] });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9uLXJvdXRpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL25neC1zbWFydGVycGxhbi1sb2NhdGlvbi1yb3V0aW5nLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBVSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQUVwRSxNQUFNLE1BQU0sR0FBVztJQUNuQjtRQUNJLElBQUksRUFBRSxFQUFFO1FBQ1IsU0FBUyxFQUFFLGtCQUFrQjtLQUNoQztJQUNEO1FBQ0ksSUFBSSxFQUFFLEtBQUs7UUFDWCxRQUFRLEVBQUU7WUFDTixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFO1lBQ2hELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO1lBQzVDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO1lBQzlDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO1lBQzVDO2dCQUNJLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLFNBQVMsRUFBRSxvQkFBb0I7YUFDbEM7WUFDRDtnQkFDSSxJQUFJLEVBQUUsV0FBVztnQkFDakIsU0FBUyxFQUFFLGlCQUFpQjthQUMvQjtZQUNELEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO1NBQ2pEO0tBQ0o7Q0FDRixDQUFDO0FBTUosTUFBTSxPQUFPLHNCQUFzQjs7b0hBQXRCLHNCQUFzQjtxSEFBdEIsc0JBQXNCLHdDQUZyQixZQUFZO3FIQUViLHNCQUFzQixZQUhyQixZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUM3QixZQUFZOzRGQUViLHNCQUFzQjtrQkFKbEMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZXMsIFJvdXRlck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQ2FsaWJyYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3BsYW5zL2NhbGlicmF0aW9uL2NhbGlicmF0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEZXRhaWxMb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvZGV0YWlsLWxvY2F0aW9uL2RldGFpbC1sb2NhdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRWRpdFBsYW5Db21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3BsYW5zL2VkaXQtcGxhbi9lZGl0LXBsYW4uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEltYWdlc0NvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvaW1hZ2VzL2ltYWdlcy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTG9jYXRpb25zQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9sb2NhdGlvbnMvbG9jYXRpb25zLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBQbGFuc0NvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGxhbnMvcGxhbnMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFZpc2l0c0NvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdmlzaXRzL3Zpc2l0cy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWm9uZXNDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3pvbmVzL3pvbmVzLmNvbXBvbmVudFwiO1xyXG5cclxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogXCJcIixcclxuICAgICAgICBjb21wb25lbnQ6IExvY2F0aW9uc0NvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogXCI6aWRcIixcclxuICAgICAgICBjaGlsZHJlbjogW1xyXG4gICAgICAgICAgICB7IHBhdGg6IFwiXCIsIGNvbXBvbmVudDogRGV0YWlsTG9jYXRpb25Db21wb25lbnQgfSxcclxuICAgICAgICAgICAgeyBwYXRoOiBcInpvbmVzXCIsIGNvbXBvbmVudDogWm9uZXNDb21wb25lbnQgfSxcclxuICAgICAgICAgICAgeyBwYXRoOiBcInZpc2l0c1wiLCBjb21wb25lbnQ6IFZpc2l0c0NvbXBvbmVudCB9LFxyXG4gICAgICAgICAgICB7IHBhdGg6IFwicGxhbnNcIiwgY29tcG9uZW50OiBQbGFuc0NvbXBvbmVudCB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYXRoOiBcInBsYW4tY2FsaWJyYXRpb25cIixcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogQ2FsaWJyYXRpb25Db21wb25lbnQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBhdGg6IFwicGxhbi1lZGl0XCIsXHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IEVkaXRQbGFuQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7IHBhdGg6IFwiaW1hZ2VzXCIsIGNvbXBvbmVudDogSW1hZ2VzQ29tcG9uZW50IH0sXHJcbiAgICAgICAgXSxcclxuICAgIH0sXHJcbiAgXTtcclxuICBcclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKV0sXHJcbiAgICBleHBvcnRzOiBbUm91dGVyTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2F0aW9uc1JvdXRpbmdNb2R1bGUgeyB9Il19
@@ -1,123 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { LocationsComponent } from './components/locations/locations.component';
3
- import { DetailLocationComponent } from './components/detail-location/detail-location.component';
4
- import { CalibrationComponent } from './components/plans/calibration/calibration.component';
5
- import { PlansComponent } from './components/plans/plans.component';
6
- import { VisitsComponent } from './components/visits/visits.component';
7
- import { ZonesComponent } from './components/zones/zones.component';
8
- import { ImagesComponent } from './components/images/images.component';
9
- import { EditPlanComponent } from './components/plans/edit-plan/edit-plan.component';
10
- import { LocationsRoutingModule } from './ngx-smarterplan-location-routing.module';
11
- import { FormsModule, ReactiveFormsModule } from '@angular/forms';
12
- import { TabNavigationComponent } from './components/tab-navigation/tab-navigation.component';
13
- import { MapComponent } from './components/locations/map/map.component';
14
- import { LeafletModule } from '@asymmetrik/ngx-leaflet';
15
- import { TranslateModule } from '@ngx-translate/core';
16
- import { MapPopupComponent } from './components/locations/map/map-popup/map-popup.component';
17
- import { CommonModule } from '@angular/common';
18
- import { FormLocationComponent } from './components/form-location/form-location.component';
19
- import { NgbAlertModule, NgbModule } from "@ng-bootstrap/ng-bootstrap";
20
- import { ClipboardModule } from "@angular/cdk/clipboard";
21
- import { ChevronComponent } from './components/chevron/chevron.component';
22
- import { AddZoneComponent } from './components/zones/add-zone/add-zone.component';
23
- import { SelectionComponent } from './components/zones/add-zone/selection/selection.component';
24
- import { CarouselComponent } from './components/carousel/carousel.component';
25
- import { NgxSmarterplanCoreModule } from '@smarterplan/ngx-smarterplan-core';
26
- import { PdfViewerModule } from 'ng2-pdf-viewer';
27
- import { SweepPlanSelectionComponent } from './components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component';
28
- import { AddAudioZoneComponent } from './components/zones/add-audio-zone/add-audio-zone.component';
29
- import { RadioButtonComponent } from './radio-button/radio-button.component';
30
- import { PlanLegendComponent } from './components/plan-legend/plan-legend.component';
31
- import { CountAudioSweepsPipe } from './pipes/count-audio-sweeps.pipe';
32
- import * as i0 from "@angular/core";
33
- import * as i1 from "@ngx-translate/core";
34
- export class NgxSmarterplanLocationsModule {
35
- }
36
- NgxSmarterplanLocationsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NgxSmarterplanLocationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
37
- NgxSmarterplanLocationsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: NgxSmarterplanLocationsModule, declarations: [LocationsComponent,
38
- DetailLocationComponent,
39
- CalibrationComponent,
40
- PlansComponent,
41
- VisitsComponent,
42
- ZonesComponent,
43
- ImagesComponent,
44
- EditPlanComponent,
45
- TabNavigationComponent,
46
- MapComponent,
47
- MapPopupComponent,
48
- FormLocationComponent,
49
- ChevronComponent,
50
- AddZoneComponent,
51
- SelectionComponent,
52
- CarouselComponent,
53
- SweepPlanSelectionComponent,
54
- AddAudioZoneComponent,
55
- RadioButtonComponent,
56
- PlanLegendComponent,
57
- CountAudioSweepsPipe], imports: [PdfViewerModule,
58
- ClipboardModule,
59
- NgbModule,
60
- NgbAlertModule,
61
- CommonModule, i1.TranslateModule, LeafletModule,
62
- FormsModule,
63
- ReactiveFormsModule,
64
- NgxSmarterplanCoreModule,
65
- LocationsRoutingModule], exports: [MapComponent, TabNavigationComponent] });
66
- NgxSmarterplanLocationsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NgxSmarterplanLocationsModule, imports: [PdfViewerModule,
67
- ClipboardModule,
68
- NgbModule,
69
- NgbAlertModule,
70
- CommonModule,
71
- TranslateModule.forChild({
72
- extend: true
73
- }),
74
- LeafletModule,
75
- FormsModule,
76
- ReactiveFormsModule,
77
- NgxSmarterplanCoreModule,
78
- LocationsRoutingModule] });
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NgxSmarterplanLocationsModule, decorators: [{
80
- type: NgModule,
81
- args: [{
82
- declarations: [
83
- LocationsComponent,
84
- DetailLocationComponent,
85
- CalibrationComponent,
86
- PlansComponent,
87
- VisitsComponent,
88
- ZonesComponent,
89
- ImagesComponent,
90
- EditPlanComponent,
91
- TabNavigationComponent,
92
- MapComponent,
93
- MapPopupComponent,
94
- FormLocationComponent,
95
- ChevronComponent,
96
- AddZoneComponent,
97
- SelectionComponent,
98
- CarouselComponent,
99
- SweepPlanSelectionComponent,
100
- AddAudioZoneComponent,
101
- RadioButtonComponent,
102
- PlanLegendComponent,
103
- CountAudioSweepsPipe,
104
- ],
105
- imports: [
106
- PdfViewerModule,
107
- ClipboardModule,
108
- NgbModule,
109
- NgbAlertModule,
110
- CommonModule,
111
- TranslateModule.forChild({
112
- extend: true
113
- }),
114
- LeafletModule,
115
- FormsModule,
116
- ReactiveFormsModule,
117
- NgxSmarterplanCoreModule,
118
- LocationsRoutingModule,
119
- ],
120
- exports: [MapComponent, TabNavigationComponent]
121
- }]
122
- }] });
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tbG9jYXRpb25zL3NyYy9saWIvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDckYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFN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Vzt3QkFDWCxtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3FCQUN2QjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLENBQUM7aUJBQ2hEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTG9jYXRpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2xvY2F0aW9ucy9sb2NhdGlvbnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGV0YWlsTG9jYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGV0YWlsLWxvY2F0aW9uL2RldGFpbC1sb2NhdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDYWxpYnJhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbGFucy9jYWxpYnJhdGlvbi9jYWxpYnJhdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQbGFuc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbGFucy9wbGFucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBWaXNpdHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdmlzaXRzL3Zpc2l0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBab25lc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy96b25lcy96b25lcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbWFnZXNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvaW1hZ2VzL2ltYWdlcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0UGxhbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wbGFucy9lZGl0LXBsYW4vZWRpdC1wbGFuLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvY2F0aW9uc1JvdXRpbmdNb2R1bGUgfSBmcm9tICcuL25neC1zbWFydGVycGxhbi1sb2NhdGlvbi1yb3V0aW5nLm1vZHVsZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUYWJOYXZpZ2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYi1uYXZpZ2F0aW9uL3RhYi1uYXZpZ2F0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hcENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9sb2NhdGlvbnMvbWFwL21hcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMZWFmbGV0TW9kdWxlIH0gZnJvbSAnQGFzeW1tZXRyaWsvbmd4LWxlYWZsZXQnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgTWFwUG9wdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbG9jYXRpb25zL21hcC9tYXAtcG9wdXAvbWFwLXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1Mb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9mb3JtLWxvY2F0aW9uL2Zvcm0tbG9jYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmdiQWxlcnRNb2R1bGUsIE5nYk1vZHVsZSB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQgeyBDbGlwYm9hcmRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NsaXBib2FyZFwiO1xyXG5pbXBvcnQgeyBDaGV2cm9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoZXZyb24vY2hldnJvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBZGRab25lQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3pvbmVzL2FkZC16b25lL2FkZC16b25lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy96b25lcy9hZGQtem9uZS9zZWxlY3Rpb24vc2VsZWN0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENhcm91c2VsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5neFNtYXJ0ZXJwbGFuQ29yZU1vZHVsZSB9IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcbmltcG9ydCB7IFBkZlZpZXdlck1vZHVsZSB9IGZyb20gJ25nMi1wZGYtdmlld2VyJztcclxuaW1wb3J0IHsgU3dlZXBQbGFuU2VsZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3pvbmVzL2FkZC16b25lL3N3ZWVwLXBsYW4tc2VsZWN0aW9uL3N3ZWVwLXBsYW4tc2VsZWN0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkZEF1ZGlvWm9uZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy96b25lcy9hZGQtYXVkaW8tem9uZS9hZGQtYXVkaW8tem9uZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSYWRpb0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vcmFkaW8tYnV0dG9uL3JhZGlvLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQbGFuTGVnZW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3BsYW4tbGVnZW5kL3BsYW4tbGVnZW5kLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvdW50QXVkaW9Td2VlcHNQaXBlIH0gZnJvbSAnLi9waXBlcy9jb3VudC1hdWRpby1zd2VlcHMucGlwZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgTG9jYXRpb25zQ29tcG9uZW50LFxyXG4gICAgRGV0YWlsTG9jYXRpb25Db21wb25lbnQsXHJcbiAgICBDYWxpYnJhdGlvbkNvbXBvbmVudCxcclxuICAgIFBsYW5zQ29tcG9uZW50LFxyXG4gICAgVmlzaXRzQ29tcG9uZW50LFxyXG4gICAgWm9uZXNDb21wb25lbnQsXHJcbiAgICBJbWFnZXNDb21wb25lbnQsXHJcbiAgICBFZGl0UGxhbkNvbXBvbmVudCxcclxuICAgIFRhYk5hdmlnYXRpb25Db21wb25lbnQsXHJcbiAgICBNYXBDb21wb25lbnQsXHJcbiAgICBNYXBQb3B1cENvbXBvbmVudCxcclxuICAgIEZvcm1Mb2NhdGlvbkNvbXBvbmVudCxcclxuICAgIENoZXZyb25Db21wb25lbnQsXHJcbiAgICBBZGRab25lQ29tcG9uZW50LFxyXG4gICAgU2VsZWN0aW9uQ29tcG9uZW50LFxyXG4gICAgQ2Fyb3VzZWxDb21wb25lbnQsXHJcbiAgICBTd2VlcFBsYW5TZWxlY3Rpb25Db21wb25lbnQsXHJcbiAgICBBZGRBdWRpb1pvbmVDb21wb25lbnQsXHJcbiAgICBSYWRpb0J1dHRvbkNvbXBvbmVudCxcclxuICAgIFBsYW5MZWdlbmRDb21wb25lbnQsXHJcbiAgICBDb3VudEF1ZGlvU3dlZXBzUGlwZSxcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIFBkZlZpZXdlck1vZHVsZSxcclxuICAgIENsaXBib2FyZE1vZHVsZSxcclxuICAgIE5nYk1vZHVsZSxcclxuICAgIE5nYkFsZXJ0TW9kdWxlLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLmZvckNoaWxkKHtcclxuICAgICAgZXh0ZW5kOiB0cnVlXHJcbiAgICB9KSxcclxuICAgIExlYWZsZXRNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBOZ3hTbWFydGVycGxhbkNvcmVNb2R1bGUsXHJcbiAgICBMb2NhdGlvbnNSb3V0aW5nTW9kdWxlLFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW01hcENvbXBvbmVudCwgVGFiTmF2aWdhdGlvbkNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFNtYXJ0ZXJwbGFuTG9jYXRpb25zTW9kdWxlIHsgfVxyXG4iXX0=