@smarterplan/ngx-smarterplan-locations 0.2.22 → 0.2.24

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 (59) hide show
  1. package/esm2020/lib/components/carousel/carousel.component.mjs +27 -27
  2. package/esm2020/lib/components/chevron/chevron.component.mjs +17 -17
  3. package/esm2020/lib/components/detail-location/detail-location.component.mjs +154 -154
  4. package/esm2020/lib/components/form-location/form-location.component.mjs +237 -237
  5. package/esm2020/lib/components/images/images.component.mjs +90 -90
  6. package/esm2020/lib/components/locations/locations.component.mjs +141 -141
  7. package/esm2020/lib/components/locations/map/map-popup/map-popup.component.mjs +65 -65
  8. package/esm2020/lib/components/locations/map/map.component.mjs +90 -90
  9. package/esm2020/lib/components/plan-legend/plan-legend.component.mjs +47 -47
  10. package/esm2020/lib/components/plans/calibration/calibration.component.mjs +468 -468
  11. package/esm2020/lib/components/plans/edit-plan/edit-plan.component.mjs +324 -324
  12. package/esm2020/lib/components/plans/plans.component.mjs +210 -210
  13. package/esm2020/lib/components/tab-navigation/tab-navigation.component.mjs +41 -41
  14. package/esm2020/lib/components/visits/visits.component.mjs +235 -235
  15. package/esm2020/lib/components/zones/add-audio-zone/add-audio-zone.component.mjs +230 -230
  16. package/esm2020/lib/components/zones/add-zone/add-zone.component.mjs +296 -294
  17. package/esm2020/lib/components/zones/add-zone/selection/selection.component.mjs +76 -76
  18. package/esm2020/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.mjs +414 -414
  19. package/esm2020/lib/components/zones/zones.component.mjs +242 -236
  20. package/esm2020/lib/helper.service.mjs +134 -134
  21. package/esm2020/lib/ngx-smarterplan-location-routing.module.mjs +49 -49
  22. package/esm2020/lib/ngx-smarterplan-locations.module.mjs +125 -125
  23. package/esm2020/lib/ngx-smarterplan-locations.service.mjs +13 -13
  24. package/esm2020/lib/pipes/count-audio-sweeps.pipe.mjs +27 -27
  25. package/esm2020/lib/radio-button/radio-button.component.mjs +26 -26
  26. package/esm2020/public-api.mjs +8 -8
  27. package/esm2020/smarterplan-ngx-smarterplan-locations.mjs +4 -4
  28. package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs +3680 -3672
  29. package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs.map +1 -1
  30. package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs +3524 -3516
  31. package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs.map +1 -1
  32. package/lib/components/carousel/carousel.component.d.ts +12 -12
  33. package/lib/components/chevron/chevron.component.d.ts +9 -9
  34. package/lib/components/detail-location/detail-location.component.d.ts +51 -51
  35. package/lib/components/form-location/form-location.component.d.ts +45 -45
  36. package/lib/components/images/images.component.d.ts +28 -28
  37. package/lib/components/locations/locations.component.d.ts +50 -50
  38. package/lib/components/locations/map/map-popup/map-popup.component.d.ts +22 -22
  39. package/lib/components/locations/map/map.component.d.ts +22 -22
  40. package/lib/components/plan-legend/plan-legend.component.d.ts +14 -14
  41. package/lib/components/plans/calibration/calibration.component.d.ts +140 -140
  42. package/lib/components/plans/edit-plan/edit-plan.component.d.ts +55 -55
  43. package/lib/components/plans/plans.component.d.ts +59 -59
  44. package/lib/components/tab-navigation/tab-navigation.component.d.ts +13 -13
  45. package/lib/components/visits/visits.component.d.ts +51 -51
  46. package/lib/components/zones/add-audio-zone/add-audio-zone.component.d.ts +63 -63
  47. package/lib/components/zones/add-zone/add-zone.component.d.ts +67 -67
  48. package/lib/components/zones/add-zone/selection/selection.component.d.ts +44 -44
  49. package/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.d.ts +96 -96
  50. package/lib/components/zones/zones.component.d.ts +67 -67
  51. package/lib/helper.service.d.ts +53 -53
  52. package/lib/ngx-smarterplan-location-routing.module.d.ts +7 -7
  53. package/lib/ngx-smarterplan-locations.module.d.ts +36 -36
  54. package/lib/ngx-smarterplan-locations.service.d.ts +6 -6
  55. package/lib/pipes/count-audio-sweeps.pipe.d.ts +10 -10
  56. package/lib/radio-button/radio-button.component.d.ts +12 -12
  57. package/package.json +1 -1
  58. package/public-api.d.ts +4 -4
  59. package/smarterplan-ngx-smarterplan-locations.d.ts +5 -5
@@ -1,154 +1,154 @@
1
- import { Component } from '@angular/core';
2
- import { SpaceStatus } from '@smarterplan/ngx-smarterplan-core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/router";
5
- import * as i2 from "@smarterplan/ngx-smarterplan-core";
6
- import * as i3 from "@ngx-translate/core";
7
- import * as i4 from "../tab-navigation/tab-navigation.component";
8
- import * as i5 from "../form-location/form-location.component";
9
- import * as i6 from "@angular/common";
10
- import * as i7 from "ngx-clipboard";
11
- import * as i8 from "@ng-bootstrap/ng-bootstrap";
12
- import * as i9 from "@angular/forms";
13
- export class DetailLocationComponent {
14
- constructor(route, spaceService, router, userService, translate, navigatorService) {
15
- this.route = route;
16
- this.spaceService = spaceService;
17
- this.router = router;
18
- this.userService = userService;
19
- this.translate = translate;
20
- this.navigatorService = navigatorService;
21
- this.isEditing = false;
22
- this.menuItems = [];
23
- this.isValidatingDpe = false;
24
- this.gettingData = false;
25
- }
26
- async ngOnInit() {
27
- this.id = this.route.snapshot.paramMap.get("id");
28
- this.navigatorService.locationIDChange.next(this.id); // Send update for the location filter bar
29
- this.space = await this.spaceService.getSpace(this.id);
30
- this.setupMenuItems();
31
- this.setGuestLink();
32
- this.setCanArchive();
33
- }
34
- setupMenuItems() {
35
- this.menuItems = [
36
- { label: "Locations", url: "/localisation" },
37
- {
38
- label: this.space.name,
39
- url: `/localisation/${this.space.id}`,
40
- },
41
- ];
42
- if (this.isEditing) {
43
- this.menuItems.push({ label: "Edit" });
44
- }
45
- else {
46
- this.menuItems.push({ label: "Information" });
47
- }
48
- }
49
- onEdit() {
50
- this.isEditing = true;
51
- this.setupMenuItems();
52
- }
53
- onReturn() {
54
- // this.locationService.back()
55
- this.router.navigate(["dashboard/localisation"]);
56
- }
57
- reset() {
58
- this.isEditing = false;
59
- this.setupMenuItems();
60
- }
61
- async onArchive() {
62
- const message = this.translate.instant("confirm.archiveSpace");
63
- if (window.confirm(message)) {
64
- await this.spaceService.softDeleteSpace(this.id);
65
- this.onReturn();
66
- }
67
- }
68
- onFormChange(event) {
69
- this.isEditing = false;
70
- if (event) {
71
- this.space = event;
72
- }
73
- this.setupMenuItems();
74
- }
75
- onDpeValidate() {
76
- this.isValidatingDpe = true;
77
- this.parsedMetadata = JSON.parse(this.space.metadata);
78
- this.parsedMetadata = this.parsedMetadata.filter((result) => result.geo_adresse);
79
- }
80
- onSelectChange(selectedResult) {
81
- for (const result of this.parsedMetadata) {
82
- if (result !== selectedResult && result.selected) {
83
- result.selected = false;
84
- }
85
- }
86
- this.selectedDpeResult = selectedResult;
87
- }
88
- async onSaveResult() {
89
- if (this.selectedDpeResult) {
90
- const input = {
91
- id: this.space.id,
92
- constructionYear: this.selectedDpeResult.annee_construction,
93
- classEnergyConsumption: this.selectedDpeResult.classe_consommation_energie,
94
- classGes: this.selectedDpeResult.classe_estimation_ges,
95
- status: SpaceStatus.DPE_VALIDATED,
96
- };
97
- const updatedLoc = await this.spaceService.updateSpace(input);
98
- this.space = updatedLoc;
99
- this.isValidatingDpe = false;
100
- }
101
- }
102
- onCancel() {
103
- this.isValidatingDpe = false;
104
- }
105
- async onErase() {
106
- await this.spaceService.updateSpace({
107
- id: this.space.id,
108
- status: SpaceStatus.DPE_VALIDATED,
109
- });
110
- this.space.status = SpaceStatus.DPE_VALIDATED;
111
- this.isValidatingDpe = false;
112
- }
113
- async onGetDpeData() {
114
- this.gettingData = true;
115
- await this.spaceService.updateSpace({
116
- id: this.space.id,
117
- status: SpaceStatus.DPE_FETCH,
118
- });
119
- // force update of location
120
- setTimeout(async () => {
121
- this.space = await this.spaceService.getSpace(this.space.id);
122
- this.gettingData = false;
123
- }, 1500);
124
- }
125
- setGuestLink() {
126
- if (this.space.guestLink) {
127
- const { origin } = document.location;
128
- this.guestLink = `${origin}/${this.space.guestLink}`;
129
- setTimeout(() => {
130
- const hyperlink = document.querySelector("#linkHref");
131
- const message = this.translate.instant("confirm.followLink");
132
- hyperlink.addEventListener("click", async () => {
133
- if (window.confirm(message)) {
134
- window.location.href = this.guestLink;
135
- await this.userService.logoutCurrentAndSignOutAuth();
136
- this.router.navigate(["auth"]);
137
- }
138
- });
139
- }, 0);
140
- }
141
- }
142
- async setCanArchive() {
143
- this.canArchive = this.userService.isSPAdmin()
144
- ? true
145
- : await this.spaceService.canArchiveSpace(this.id);
146
- }
147
- }
148
- DetailLocationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: DetailLocationComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.SpaceService }, { token: i1.Router }, { token: i2.BaseUserService }, { token: i3.TranslateService }, { token: i2.NavigatorService }], target: i0.ɵɵFactoryTarget.Component });
149
- DetailLocationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: DetailLocationComponent, selector: "lib-detail-location", ngImport: i0, template: "<div class=\"container-fluid\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"reset()\"></lib-tab-navigation>\n </div>\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onReturn()\">{{'Back to locations' |\n translate}}</button>\n <div class=\"row\" *ngIf=\"!isEditing && space\">\n <div class=\"col-md-5\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{space.name}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{space.addresses}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Construction year' | translate}}:\n {{space.constructionYear ?\n space.constructionYear : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Latitude' | translate}}:\n {{space.latitude ?\n space.latitude : \"No data\" | translate}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Longitude' | translate}}: {{space.longitude ?\n space.longitude : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate}}: {{space.level | translate\n }} </li>\n <li class=\"list-group-item bg-transparent\">{{'Energy Class' | translate}}:\n {{space.classEnergyConsumption ?\n space.classEnergyConsumption : \"No data\" | translate}}\n <button *ngIf=\"space.status !== 'DPE_TO_VALIDATE'\"\n class=\"btn btn-outline-primary rounded-pill no-lowercase ms-5\" (click)=\"onGetDpeData()\">\n {{'Get data from API DPE' | translate}}</button>\n <a class=\"bg-transparent ms-5\" *ngIf=\"space.status === 'DPE_TO_VALIDATE'\"\n (click)=\"onDpeValidate()\" style=\"cursor: pointer;\">\n <span class=\"iconify\" data-icon=\"mdi:alert-circle-check\" style=\"color: #f19c80;\" data-width=\"25\"\n data-height=\"25\"></span>\n {{'DPE data found. Click to validate' | translate}}\n </a>\n </li>\n <li class=\"list-group-item bg-transparent\">{{'Greenhouse gas emission Class' | translate}}:\n {{space.classGes ? space.classGes : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Shareable Guest Link' | translate}}:\n <div style=\"display: inline;\" *ngIf=\"guestLink\">\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\n <div ngxClipboard [cbContent]=\"guestLink\" [style.cursor]=\"'pointer'\"\n style=\"margin-left: 5px; max-width: 20px; display: inline;\" ngbTooltip=\"Copied!\"\n triggers=\"click:blur\">\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\n data-height=\"20\"></span>\n </div>\n </div>\n <p *ngIf=\"!guestLink\" style=\"display: inline;\">{{'No link' | translate }}</p>\n <p *ngIf=\"!guestLink\"><small>({{'Generate link from a VISITOR mission'|translate}})</small>\n </p>\n </li>\n\n </ul>\n <div class=\"d-flex justify-content-center\" *ngIf=\"gettingData\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <hr>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onEdit()\" data-testid=\"location-edit-btn\">{{'Edit' |\n translate}}</button>\n <div class=\"tooltip-wrapper\" ngbTooltip=\"{{!canArchive ? ('Contact SmarterPlan' | translate) : ('Archive location and related data' | translate)}}\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onArchive()\" [disabled]=\"!canArchive\">\n {{'Archive' | translate}}</button>\n </div>\n </div>\n\n\n </div>\n <div class=\"col-md-7\" *ngIf=\"isValidatingDpe\">\n <h6>{{'Most relevant results for' | translate}} : \n <b>diagnostics de performance \u00E9nerg\u00E9tique (DPE) des b\u00E2timents tertiaires</b></h6>\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">{{'Apply to location' | translate}}</th>\n <th scope=\"col\">{{'Address' | translate}}</th>\n <th scope=\"col\">{{'Activity sector' | translate}}</th>\n <th scope=\"col\">{{'Construction year' | translate}}</th>\n <th scope=\"col\">{{'Energy Class' | translate}}</th>\n <th scope=\"col\">{{'Greenhouse gas emission Class' | translate}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let result of parsedMetadata; index as i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td><input class=\"checkbox-apply\" type=\"checkbox\" [(ngModel)]=\"result.selected\"\n (change)=\"onSelectChange(result)\"></td>\n <td>{{result.geo_adresse}}</td>\n <td>{{result.secteur_activite}}</td>\n <td>{{ result.annee_construction }}</td>\n <td>{{ result.classe_consommation_energie }}</td>\n <td>{{ result.classe_estimation_ges }}</td>\n </tr>\n </tbody>\n </table>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSaveResult()\"\n [disabled]=\"!selectedDpeResult\">{{'Save selected' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onErase()\">\n {{'No match (erase data)' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onCancel()\">\n {{'Cancel' | translate}}</button>\n </div>\n </div>\n <lib-form-location *ngIf=\"isEditing\" [location]=\"space\" (onChange)=\"onFormChange($event)\"></lib-form-location>\n</div>\n", styles: [""], components: [{ type: i4.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { type: i5.FormLocationComponent, selector: "lib-form-location", inputs: ["location"], outputs: ["onChange"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ClipboardDirective, selector: "[ngxClipboard]", inputs: ["ngxClipboard", "container", "cbContent", "cbSuccessMsg"], outputs: ["cbOnSuccess", "cbOnError"] }, { type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "translate": i3.TranslatePipe } });
150
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: DetailLocationComponent, decorators: [{
151
- type: Component,
152
- args: [{ selector: 'lib-detail-location', template: "<div class=\"container-fluid\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"reset()\"></lib-tab-navigation>\n </div>\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onReturn()\">{{'Back to locations' |\n translate}}</button>\n <div class=\"row\" *ngIf=\"!isEditing && space\">\n <div class=\"col-md-5\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{space.name}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{space.addresses}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Construction year' | translate}}:\n {{space.constructionYear ?\n space.constructionYear : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Latitude' | translate}}:\n {{space.latitude ?\n space.latitude : \"No data\" | translate}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Longitude' | translate}}: {{space.longitude ?\n space.longitude : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate}}: {{space.level | translate\n }} </li>\n <li class=\"list-group-item bg-transparent\">{{'Energy Class' | translate}}:\n {{space.classEnergyConsumption ?\n space.classEnergyConsumption : \"No data\" | translate}}\n <button *ngIf=\"space.status !== 'DPE_TO_VALIDATE'\"\n class=\"btn btn-outline-primary rounded-pill no-lowercase ms-5\" (click)=\"onGetDpeData()\">\n {{'Get data from API DPE' | translate}}</button>\n <a class=\"bg-transparent ms-5\" *ngIf=\"space.status === 'DPE_TO_VALIDATE'\"\n (click)=\"onDpeValidate()\" style=\"cursor: pointer;\">\n <span class=\"iconify\" data-icon=\"mdi:alert-circle-check\" style=\"color: #f19c80;\" data-width=\"25\"\n data-height=\"25\"></span>\n {{'DPE data found. Click to validate' | translate}}\n </a>\n </li>\n <li class=\"list-group-item bg-transparent\">{{'Greenhouse gas emission Class' | translate}}:\n {{space.classGes ? space.classGes : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Shareable Guest Link' | translate}}:\n <div style=\"display: inline;\" *ngIf=\"guestLink\">\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\n <div ngxClipboard [cbContent]=\"guestLink\" [style.cursor]=\"'pointer'\"\n style=\"margin-left: 5px; max-width: 20px; display: inline;\" ngbTooltip=\"Copied!\"\n triggers=\"click:blur\">\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\n data-height=\"20\"></span>\n </div>\n </div>\n <p *ngIf=\"!guestLink\" style=\"display: inline;\">{{'No link' | translate }}</p>\n <p *ngIf=\"!guestLink\"><small>({{'Generate link from a VISITOR mission'|translate}})</small>\n </p>\n </li>\n\n </ul>\n <div class=\"d-flex justify-content-center\" *ngIf=\"gettingData\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <hr>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onEdit()\" data-testid=\"location-edit-btn\">{{'Edit' |\n translate}}</button>\n <div class=\"tooltip-wrapper\" ngbTooltip=\"{{!canArchive ? ('Contact SmarterPlan' | translate) : ('Archive location and related data' | translate)}}\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onArchive()\" [disabled]=\"!canArchive\">\n {{'Archive' | translate}}</button>\n </div>\n </div>\n\n\n </div>\n <div class=\"col-md-7\" *ngIf=\"isValidatingDpe\">\n <h6>{{'Most relevant results for' | translate}} : \n <b>diagnostics de performance \u00E9nerg\u00E9tique (DPE) des b\u00E2timents tertiaires</b></h6>\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">{{'Apply to location' | translate}}</th>\n <th scope=\"col\">{{'Address' | translate}}</th>\n <th scope=\"col\">{{'Activity sector' | translate}}</th>\n <th scope=\"col\">{{'Construction year' | translate}}</th>\n <th scope=\"col\">{{'Energy Class' | translate}}</th>\n <th scope=\"col\">{{'Greenhouse gas emission Class' | translate}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let result of parsedMetadata; index as i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td><input class=\"checkbox-apply\" type=\"checkbox\" [(ngModel)]=\"result.selected\"\n (change)=\"onSelectChange(result)\"></td>\n <td>{{result.geo_adresse}}</td>\n <td>{{result.secteur_activite}}</td>\n <td>{{ result.annee_construction }}</td>\n <td>{{ result.classe_consommation_energie }}</td>\n <td>{{ result.classe_estimation_ges }}</td>\n </tr>\n </tbody>\n </table>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSaveResult()\"\n [disabled]=\"!selectedDpeResult\">{{'Save selected' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onErase()\">\n {{'No match (erase data)' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onCancel()\">\n {{'Cancel' | translate}}</button>\n </div>\n </div>\n <lib-form-location *ngIf=\"isEditing\" [location]=\"space\" (onChange)=\"onFormChange($event)\"></lib-form-location>\n</div>\n", styles: [""] }]
153
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.SpaceService }, { type: i1.Router }, { type: i2.BaseUserService }, { type: i3.TranslateService }, { type: i2.NavigatorService }]; } });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLWxvY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2RldGFpbC1sb2NhdGlvbi9kZXRhaWwtbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZGV0YWlsLWxvY2F0aW9uL2RldGFpbC1sb2NhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSWxELE9BQU8sRUFBNkQsV0FBVyxFQUFTLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7O0FBT2xJLE1BQU0sT0FBTyx1QkFBdUI7SUFpQ2hDLFlBQ1ksS0FBcUIsRUFDckIsWUFBMEIsRUFDMUIsTUFBYyxFQUNkLFdBQTRCLEVBQzVCLFNBQTJCLEVBQzNCLGdCQUFrQztRQUxsQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFqQzlDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFNbEIsY0FBUyxHQUFlLEVBQUUsQ0FBQztRQUUzQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUl4QixnQkFBVyxHQUFHLEtBQUssQ0FBQztJQXNCakIsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1YsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFR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QUM7cUJBQ2xDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1Q7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDZixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFO1lBQzFDLENBQUMsQ0FBQyxJQUFJO1lBQ04sQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7O29IQXRMUSx1QkFBdUI7d0dBQXZCLHVCQUF1QiwyRENYcEMsbzFOQTRHQTsyRkRqR2EsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1lbnVJdGVtLCBTcGFjZVNlcnZpY2UsIEJhc2VVc2VyU2VydmljZSwgTmF2aWdhdG9yU2VydmljZSwgU3BhY2VTdGF0dXMsIFNwYWNlIH0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRldGFpbC1sb2NhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWwtbG9jYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kZXRhaWwtbG9jYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEZXRhaWxMb2NhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBzcGFjZTogU3BhY2U7XG5cbiAgICBlZGl0Rm9ybTogRm9ybUdyb3VwO1xuXG4gICAgaXNFZGl0aW5nID0gZmFsc2U7XG5cbiAgICBpbWFnZVRvVXBsb2FkOiBGaWxlO1xuXG4gICAgaWQ6IHN0cmluZztcblxuICAgIG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuXG4gICAgaXNWYWxpZGF0aW5nRHBlID0gZmFsc2U7XG5cbiAgICBzZWxlY3RlZERwZVJlc3VsdDogYW55O1xuXG4gICAgZ2V0dGluZ0RhdGEgPSBmYWxzZTtcblxuICAgIHBhcnNlZE1ldGFkYXRhOiB7XG4gICAgICAgIGdlb19hZHJlc3NlOiBzdHJpbmc7XG4gICAgICAgIHNlY3RldXJfYWN0aXZpdGU6IHN0cmluZztcbiAgICAgICAgYW5uZWVfY29uc3RydWN0aW9uOiBzdHJpbmc7XG4gICAgICAgIGNsYXNzZV9jb25zb21tYXRpb25fZW5lcmdpZTogc3RyaW5nO1xuICAgICAgICBjbGFzc2VfZXN0aW1hdGlvbl9nZXM6IHN0cmluZztcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgfVtdO1xuXG4gICAgZ3Vlc3RMaW5rOiBzdHJpbmc7XG5cbiAgICBjYW5BcmNoaXZlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHNwYWNlU2VydmljZTogU3BhY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRvclNlcnZpY2U6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcImlkXCIpO1xuICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UubG9jYXRpb25JRENoYW5nZS5uZXh0KHRoaXMuaWQpOyAvLyBTZW5kIHVwZGF0ZSBmb3IgdGhlIGxvY2F0aW9uIGZpbHRlciBiYXJcbiAgICAgICAgdGhpcy5zcGFjZSA9IGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLmdldFNwYWNlKHRoaXMuaWQpO1xuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgICAgIHRoaXMuc2V0R3Vlc3RMaW5rKCk7XG4gICAgICAgIHRoaXMuc2V0Q2FuQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIHNldHVwTWVudUl0ZW1zKCkge1xuICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IFtcbiAgICAgICAgICAgIHsgbGFiZWw6IFwiTG9jYXRpb25zXCIsIHVybDogXCIvbG9jYWxpc2F0aW9uXCIgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5zcGFjZS5uYW1lLFxuICAgICAgICAgICAgICAgIHVybDogYC9sb2NhbGlzYXRpb24vJHt0aGlzLnNwYWNlLmlkfWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGluZykge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMucHVzaCh7IGxhYmVsOiBcIkVkaXRcIiB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnB1c2goeyBsYWJlbDogXCJJbmZvcm1hdGlvblwiIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25FZGl0KCkge1xuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dXBNZW51SXRlbXMoKTtcbiAgICB9XG5cbiAgICBvblJldHVybigpIHtcbiAgICAgICAgLy8gdGhpcy5sb2NhdGlvblNlcnZpY2UuYmFjaygpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImRhc2hib2FyZC9sb2NhbGlzYXRpb25cIl0pO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25BcmNoaXZlKCkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uYXJjaGl2ZVNwYWNlXCIpO1xuICAgICAgICBpZiAod2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLnNvZnREZWxldGVTcGFjZSh0aGlzLmlkKTtcbiAgICAgICAgICAgIHRoaXMub25SZXR1cm4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRm9ybUNoYW5nZShldmVudDogU3BhY2UpIHtcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gZXZlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXR1cE1lbnVJdGVtcygpO1xuICAgIH1cblxuICAgIG9uRHBlVmFsaWRhdGUoKSB7XG4gICAgICAgIHRoaXMuaXNWYWxpZGF0aW5nRHBlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wYXJzZWRNZXRhZGF0YSA9IEpTT04ucGFyc2UodGhpcy5zcGFjZS5tZXRhZGF0YSk7XG4gICAgICAgIHRoaXMucGFyc2VkTWV0YWRhdGEgPSB0aGlzLnBhcnNlZE1ldGFkYXRhLmZpbHRlcihcbiAgICAgICAgICAgIChyZXN1bHQpID0+IHJlc3VsdC5nZW9fYWRyZXNzZSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdENoYW5nZShzZWxlY3RlZFJlc3VsdDogYW55KSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHRoaXMucGFyc2VkTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHNlbGVjdGVkUmVzdWx0ICYmIHJlc3VsdC5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREcGVSZXN1bHQgPSBzZWxlY3RlZFJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBvblNhdmVSZXN1bHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRHBlUmVzdWx0KSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5zcGFjZS5pZCxcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rpb25ZZWFyOiB0aGlzLnNlbGVjdGVkRHBlUmVzdWx0LmFubmVlX2NvbnN0cnVjdGlvbixcbiAgICAgICAgICAgICAgICBjbGFzc0VuZXJneUNvbnN1bXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRHBlUmVzdWx0LmNsYXNzZV9jb25zb21tYXRpb25fZW5lcmdpZSxcbiAgICAgICAgICAgICAgICBjbGFzc0dlczogdGhpcy5zZWxlY3RlZERwZVJlc3VsdC5jbGFzc2VfZXN0aW1hdGlvbl9nZXMsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBTcGFjZVN0YXR1cy5EUEVfVkFMSURBVEVELFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRMb2MgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZShpbnB1dCk7XG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gdXBkYXRlZExvYztcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0aW5nRHBlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdEcGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkVyYXNlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XG4gICAgICAgICAgICBpZDogdGhpcy5zcGFjZS5pZCxcbiAgICAgICAgICAgIHN0YXR1czogU3BhY2VTdGF0dXMuRFBFX1ZBTElEQVRFRCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3BhY2Uuc3RhdHVzID0gU3BhY2VTdGF0dXMuRFBFX1ZBTElEQVRFRDtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdEcGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkdldERwZURhdGEoKSB7XG4gICAgICAgIHRoaXMuZ2V0dGluZ0RhdGEgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XG4gICAgICAgICAgICBpZDogdGhpcy5zcGFjZS5pZCxcbiAgICAgICAgICAgIHN0YXR1czogU3BhY2VTdGF0dXMuRFBFX0ZFVENILFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBmb3JjZSB1cGRhdGUgb2YgbG9jYXRpb25cbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0U3BhY2UodGhpcy5zcGFjZS5pZCk7XG4gICAgICAgICAgICB0aGlzLmdldHRpbmdEYXRhID0gZmFsc2U7XG4gICAgICAgIH0sIDE1MDApO1xuICAgIH1cblxuICAgIHNldEd1ZXN0TGluaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc3BhY2UuZ3Vlc3RMaW5rKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9yaWdpbiB9ID0gZG9jdW1lbnQubG9jYXRpb247XG4gICAgICAgICAgICB0aGlzLmd1ZXN0TGluayA9IGAke29yaWdpbn0vJHt0aGlzLnNwYWNlLmd1ZXN0TGlua31gO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaHlwZXJsaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICAgXCIjbGlua0hyZWZcIixcbiAgICAgICAgICAgICAgICApIGFzIEhUTUxMaW5rRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uZm9sbG93TGlua1wiKTtcbiAgICAgICAgICAgICAgICBoeXBlcmxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuZ3Vlc3RMaW5rO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5sb2dvdXRDdXJyZW50QW5kU2lnbk91dEF1dGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImF1dGhcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHNldENhbkFyY2hpdmUoKSB7XG4gICAgICAgIHRoaXMuY2FuQXJjaGl2ZSA9IHRoaXMudXNlclNlcnZpY2UuaXNTUEFkbWluKClcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5jYW5BcmNoaXZlU3BhY2UodGhpcy5pZCk7XG4gICAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgPGRpdiBjbGFzcz1cIm0tM1wiPlxuICAgICAgICA8bGliLXRhYi1uYXZpZ2F0aW9uIFttZW51SXRlbXNdPSdtZW51SXRlbXMnIChvbkdvQmFjayk9XCJyZXNldCgpXCI+PC9saWItdGFiLW5hdmlnYXRpb24+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0zXCIgKGNsaWNrKT1cIm9uUmV0dXJuKClcIj57eydCYWNrIHRvIGxvY2F0aW9ucycgfFxuICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFpc0VkaXRpbmcgJiYgc3BhY2VcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydOYW1lJyB8IHRyYW5zbGF0ZX19OiB7e3NwYWNlLm5hbWV9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlfX06IHt7c3BhY2UuYWRkcmVzc2VzfX0gPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydDb25zdHJ1Y3Rpb24geWVhcicgfCB0cmFuc2xhdGV9fTpcbiAgICAgICAgICAgICAgICAgICAge3tzcGFjZS5jb25zdHJ1Y3Rpb25ZZWFyID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLmNvbnN0cnVjdGlvblllYXIgOiBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19IDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snTGF0aXR1ZGUnIHwgdHJhbnNsYXRlfX06XG4gICAgICAgICAgICAgICAgICAgIHt7c3BhY2UubGF0aXR1ZGUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UubGF0aXR1ZGUgOiBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydMb25naXR1ZGUnIHwgdHJhbnNsYXRlfX06IHt7c3BhY2UubG9uZ2l0dWRlID9cbiAgICAgICAgICAgICAgICAgICAgc3BhY2UubG9uZ2l0dWRlIDogXCJObyBkYXRhXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FjY2VzcyBsZXZlbCcgfCB0cmFuc2xhdGV9fToge3tzcGFjZS5sZXZlbCB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICB9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0VuZXJneSBDbGFzcycgfCB0cmFuc2xhdGV9fTpcbiAgICAgICAgICAgICAgICAgICAge3tzcGFjZS5jbGFzc0VuZXJneUNvbnN1bXB0aW9uID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLmNsYXNzRW5lcmd5Q29uc3VtcHRpb24gOiBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzcGFjZS5zdGF0dXMgIT09ICdEUEVfVE9fVkFMSURBVEUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG5vLWxvd2VyY2FzZSBtcy01XCIgKGNsaWNrKT1cIm9uR2V0RHBlRGF0YSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eydHZXQgZGF0YSBmcm9tIEFQSSBEUEUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJiZy10cmFuc3BhcmVudCBtcy01XCIgKm5nSWY9XCJzcGFjZS5zdGF0dXMgPT09ICdEUEVfVE9fVkFMSURBVEUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRwZVZhbGlkYXRlKClcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbmlmeVwiIGRhdGEtaWNvbj1cIm1kaTphbGVydC1jaXJjbGUtY2hlY2tcIiBzdHlsZT1cImNvbG9yOiAjZjE5YzgwO1wiIGRhdGEtd2lkdGg9XCIyNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1oZWlnaHQ9XCIyNVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0RQRSBkYXRhIGZvdW5kLiBDbGljayB0byB2YWxpZGF0ZScgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydHcmVlbmhvdXNlIGdhcyBlbWlzc2lvbiBDbGFzcycgfCB0cmFuc2xhdGV9fTpcbiAgICAgICAgICAgICAgICAgICAge3tzcGFjZS5jbGFzc0dlcyA/IHNwYWNlLmNsYXNzR2VzIDogXCJObyBkYXRhXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J1NoYXJlYWJsZSBHdWVzdCBMaW5rJyB8IHRyYW5zbGF0ZX19OlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lO1wiICpuZ0lmPVwiZ3Vlc3RMaW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD1cImxpbmtIcmVmXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3snVHJ5IHRoZSBsaW5rJyB8IHRyYW5zbGF0ZSB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmd4Q2xpcGJvYXJkIFtjYkNvbnRlbnRdPVwiZ3Vlc3RMaW5rXCIgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDsgbWF4LXdpZHRoOiAyMHB4OyBkaXNwbGF5OiBpbmxpbmU7XCIgbmdiVG9vbHRpcD1cIkNvcGllZCFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiY2xpY2s6Ymx1clwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbmlmeVwiIGRhdGEtaWNvbj1cIm1kaTpjb250ZW50LWNvcHlcIiBkYXRhLWlubGluZT1cImZhbHNlXCIgZGF0YS13aWR0aD1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1oZWlnaHQ9XCIyMFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhZ3Vlc3RMaW5rXCIgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmU7XCI+e3snTm8gbGluaycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiIWd1ZXN0TGlua1wiPjxzbWFsbD4oe3snR2VuZXJhdGUgbGluayBmcm9tIGEgVklTSVRPUiBtaXNzaW9uJ3x0cmFuc2xhdGV9fSk8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwiZ2V0dGluZ0RhdGFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGhyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtM1wiIChjbGljayk9XCJvbkVkaXQoKVwiIGRhdGEtdGVzdGlkPVwibG9jYXRpb24tZWRpdC1idG5cIj57eydFZGl0JyB8XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtd3JhcHBlclwiIG5nYlRvb2x0aXA9XCJ7eyFjYW5BcmNoaXZlID8gKCdDb250YWN0IFNtYXJ0ZXJQbGFuJyB8IHRyYW5zbGF0ZSkgOiAoJ0FyY2hpdmUgbG9jYXRpb24gYW5kIHJlbGF0ZWQgZGF0YScgfCB0cmFuc2xhdGUpfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbFwiIChjbGljayk9XCJvbkFyY2hpdmUoKVwiIFtkaXNhYmxlZF09XCIhY2FuQXJjaGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3snQXJjaGl2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03XCIgKm5nSWY9XCJpc1ZhbGlkYXRpbmdEcGVcIj5cbiAgICAgICAgICAgIDxoNj57eydNb3N0IHJlbGV2YW50IHJlc3VsdHMgZm9yJyB8IHRyYW5zbGF0ZX19IDogXG4gICAgICAgICAgICAgICAgPGI+ZGlhZ25vc3RpY3MgZGUgcGVyZm9ybWFuY2Ugw6luZXJnw6l0aXF1ZSAoRFBFKSBkZXMgYsOidGltZW50cyB0ZXJ0aWFpcmVzPC9iPjwvaDY+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj4jPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0FwcGx5IHRvIGxvY2F0aW9uJyB8IHRyYW5zbGF0ZX19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snQWN0aXZpdHkgc2VjdG9yJyB8IHRyYW5zbGF0ZX19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0NvbnN0cnVjdGlvbiB5ZWFyJyB8IHRyYW5zbGF0ZX19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0VuZXJneSBDbGFzcycgfCB0cmFuc2xhdGV9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydHcmVlbmhvdXNlIGdhcyBlbWlzc2lvbiBDbGFzcycgfCB0cmFuc2xhdGV9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcmVzdWx0IG9mIHBhcnNlZE1ldGFkYXRhOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57eyBpICsgMSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IGNsYXNzPVwiY2hlY2tib3gtYXBwbHlcIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInJlc3VsdC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RDaGFuZ2UocmVzdWx0KVwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyZXN1bHQuZ2VvX2FkcmVzc2V9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyZXN1bHQuc2VjdGV1cl9hY3Rpdml0ZX19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByZXN1bHQuYW5uZWVfY29uc3RydWN0aW9uIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByZXN1bHQuY2xhc3NlX2NvbnNvbW1hdGlvbl9lbmVyZ2llIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByZXN1bHQuY2xhc3NlX2VzdGltYXRpb25fZ2VzIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvblNhdmVSZXN1bHQoKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZERwZVJlc3VsdFwiPnt7J1NhdmUgc2VsZWN0ZWQnIHxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uRXJhc2UoKVwiPlxuICAgICAgICAgICAgICAgIHt7J05vIG1hdGNoIChlcmFzZSBkYXRhKScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5cbiAgICAgICAgICAgICAgICB7eydDYW5jZWwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGxpYi1mb3JtLWxvY2F0aW9uICpuZ0lmPVwiaXNFZGl0aW5nXCIgW2xvY2F0aW9uXT1cInNwYWNlXCIgKG9uQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgkZXZlbnQpXCI+PC9saWItZm9ybS1sb2NhdGlvbj5cbjwvZGl2PlxuIl19
1
+ import { Component } from '@angular/core';
2
+ import { SpaceStatus } from '@smarterplan/ngx-smarterplan-core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/router";
5
+ import * as i2 from "@smarterplan/ngx-smarterplan-core";
6
+ import * as i3 from "@ngx-translate/core";
7
+ import * as i4 from "../tab-navigation/tab-navigation.component";
8
+ import * as i5 from "../form-location/form-location.component";
9
+ import * as i6 from "@angular/common";
10
+ import * as i7 from "ngx-clipboard";
11
+ import * as i8 from "@ng-bootstrap/ng-bootstrap";
12
+ import * as i9 from "@angular/forms";
13
+ export class DetailLocationComponent {
14
+ constructor(route, spaceService, router, userService, translate, navigatorService) {
15
+ this.route = route;
16
+ this.spaceService = spaceService;
17
+ this.router = router;
18
+ this.userService = userService;
19
+ this.translate = translate;
20
+ this.navigatorService = navigatorService;
21
+ this.isEditing = false;
22
+ this.menuItems = [];
23
+ this.isValidatingDpe = false;
24
+ this.gettingData = false;
25
+ }
26
+ async ngOnInit() {
27
+ this.id = this.route.snapshot.paramMap.get("id");
28
+ this.navigatorService.locationIDChange.next(this.id); // Send update for the location filter bar
29
+ this.space = await this.spaceService.getSpace(this.id);
30
+ this.setupMenuItems();
31
+ this.setGuestLink();
32
+ this.setCanArchive();
33
+ }
34
+ setupMenuItems() {
35
+ this.menuItems = [
36
+ { label: "Locations", url: "/localisation" },
37
+ {
38
+ label: this.space.name,
39
+ url: `/localisation/${this.space.id}`,
40
+ },
41
+ ];
42
+ if (this.isEditing) {
43
+ this.menuItems.push({ label: "Edit" });
44
+ }
45
+ else {
46
+ this.menuItems.push({ label: "Information" });
47
+ }
48
+ }
49
+ onEdit() {
50
+ this.isEditing = true;
51
+ this.setupMenuItems();
52
+ }
53
+ onReturn() {
54
+ // this.locationService.back()
55
+ this.router.navigate(["dashboard/localisation"]);
56
+ }
57
+ reset() {
58
+ this.isEditing = false;
59
+ this.setupMenuItems();
60
+ }
61
+ async onArchive() {
62
+ const message = this.translate.instant("confirm.archiveSpace");
63
+ if (window.confirm(message)) {
64
+ await this.spaceService.softDeleteSpace(this.id);
65
+ this.onReturn();
66
+ }
67
+ }
68
+ onFormChange(event) {
69
+ this.isEditing = false;
70
+ if (event) {
71
+ this.space = event;
72
+ }
73
+ this.setupMenuItems();
74
+ }
75
+ onDpeValidate() {
76
+ this.isValidatingDpe = true;
77
+ this.parsedMetadata = JSON.parse(this.space.metadata);
78
+ this.parsedMetadata = this.parsedMetadata.filter((result) => result.geo_adresse);
79
+ }
80
+ onSelectChange(selectedResult) {
81
+ for (const result of this.parsedMetadata) {
82
+ if (result !== selectedResult && result.selected) {
83
+ result.selected = false;
84
+ }
85
+ }
86
+ this.selectedDpeResult = selectedResult;
87
+ }
88
+ async onSaveResult() {
89
+ if (this.selectedDpeResult) {
90
+ const input = {
91
+ id: this.space.id,
92
+ constructionYear: this.selectedDpeResult.annee_construction,
93
+ classEnergyConsumption: this.selectedDpeResult.classe_consommation_energie,
94
+ classGes: this.selectedDpeResult.classe_estimation_ges,
95
+ status: SpaceStatus.DPE_VALIDATED,
96
+ };
97
+ const updatedLoc = await this.spaceService.updateSpace(input);
98
+ this.space = updatedLoc;
99
+ this.isValidatingDpe = false;
100
+ }
101
+ }
102
+ onCancel() {
103
+ this.isValidatingDpe = false;
104
+ }
105
+ async onErase() {
106
+ await this.spaceService.updateSpace({
107
+ id: this.space.id,
108
+ status: SpaceStatus.DPE_VALIDATED,
109
+ });
110
+ this.space.status = SpaceStatus.DPE_VALIDATED;
111
+ this.isValidatingDpe = false;
112
+ }
113
+ async onGetDpeData() {
114
+ this.gettingData = true;
115
+ await this.spaceService.updateSpace({
116
+ id: this.space.id,
117
+ status: SpaceStatus.DPE_FETCH,
118
+ });
119
+ // force update of location
120
+ setTimeout(async () => {
121
+ this.space = await this.spaceService.getSpace(this.space.id);
122
+ this.gettingData = false;
123
+ }, 1500);
124
+ }
125
+ setGuestLink() {
126
+ if (this.space.guestLink) {
127
+ const { origin } = document.location;
128
+ this.guestLink = `${origin}/${this.space.guestLink}`;
129
+ setTimeout(() => {
130
+ const hyperlink = document.querySelector("#linkHref");
131
+ const message = this.translate.instant("confirm.followLink");
132
+ hyperlink.addEventListener("click", async () => {
133
+ if (window.confirm(message)) {
134
+ window.location.href = this.guestLink;
135
+ await this.userService.logoutCurrentAndSignOutAuth();
136
+ this.router.navigate(["auth"]);
137
+ }
138
+ });
139
+ }, 0);
140
+ }
141
+ }
142
+ async setCanArchive() {
143
+ this.canArchive = this.userService.isSPAdmin()
144
+ ? true
145
+ : await this.spaceService.canArchiveSpace(this.id);
146
+ }
147
+ }
148
+ DetailLocationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: DetailLocationComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.SpaceService }, { token: i1.Router }, { token: i2.BaseUserService }, { token: i3.TranslateService }, { token: i2.NavigatorService }], target: i0.ɵɵFactoryTarget.Component });
149
+ DetailLocationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: DetailLocationComponent, selector: "lib-detail-location", ngImport: i0, template: "<div class=\"container-fluid\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"reset()\"></lib-tab-navigation>\r\n </div>\r\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onReturn()\">{{'Back to locations' |\r\n translate}}</button>\r\n <div class=\"row\" *ngIf=\"!isEditing && space\">\r\n <div class=\"col-md-5\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{space.name}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{space.addresses}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Construction year' | translate}}:\r\n {{space.constructionYear ?\r\n space.constructionYear : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Latitude' | translate}}:\r\n {{space.latitude ?\r\n space.latitude : \"No data\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Longitude' | translate}}: {{space.longitude ?\r\n space.longitude : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate}}: {{space.level | translate\r\n }} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Energy Class' | translate}}:\r\n {{space.classEnergyConsumption ?\r\n space.classEnergyConsumption : \"No data\" | translate}}\r\n <button *ngIf=\"space.status !== 'DPE_TO_VALIDATE'\"\r\n class=\"btn btn-outline-primary rounded-pill no-lowercase ms-5\" (click)=\"onGetDpeData()\">\r\n {{'Get data from API DPE' | translate}}</button>\r\n <a class=\"bg-transparent ms-5\" *ngIf=\"space.status === 'DPE_TO_VALIDATE'\"\r\n (click)=\"onDpeValidate()\" style=\"cursor: pointer;\">\r\n <span class=\"iconify\" data-icon=\"mdi:alert-circle-check\" style=\"color: #f19c80;\" data-width=\"25\"\r\n data-height=\"25\"></span>\r\n {{'DPE data found. Click to validate' | translate}}\r\n </a>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Greenhouse gas emission Class' | translate}}:\r\n {{space.classGes ? space.classGes : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Shareable Guest Link' | translate}}:\r\n <div style=\"display: inline;\" *ngIf=\"guestLink\">\r\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\r\n <div ngxClipboard [cbContent]=\"guestLink\" [style.cursor]=\"'pointer'\"\r\n style=\"margin-left: 5px; max-width: 20px; display: inline;\" ngbTooltip=\"Copied!\"\r\n triggers=\"click:blur\">\r\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\r\n data-height=\"20\"></span>\r\n </div>\r\n </div>\r\n <p *ngIf=\"!guestLink\" style=\"display: inline;\">{{'No link' | translate }}</p>\r\n <p *ngIf=\"!guestLink\"><small>({{'Generate link from a VISITOR mission'|translate}})</small>\r\n </p>\r\n </li>\r\n\r\n </ul>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"gettingData\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n </div>\r\n <hr>\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onEdit()\" data-testid=\"location-edit-btn\">{{'Edit' |\r\n translate}}</button>\r\n <div class=\"tooltip-wrapper\" ngbTooltip=\"{{!canArchive ? ('Contact SmarterPlan' | translate) : ('Archive location and related data' | translate)}}\">\r\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onArchive()\" [disabled]=\"!canArchive\">\r\n {{'Archive' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"col-md-7\" *ngIf=\"isValidatingDpe\">\r\n <h6>{{'Most relevant results for' | translate}} : \r\n <b>diagnostics de performance \u00E9nerg\u00E9tique (DPE) des b\u00E2timents tertiaires</b></h6>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">#</th>\r\n <th scope=\"col\">{{'Apply to location' | translate}}</th>\r\n <th scope=\"col\">{{'Address' | translate}}</th>\r\n <th scope=\"col\">{{'Activity sector' | translate}}</th>\r\n <th scope=\"col\">{{'Construction year' | translate}}</th>\r\n <th scope=\"col\">{{'Energy Class' | translate}}</th>\r\n <th scope=\"col\">{{'Greenhouse gas emission Class' | translate}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let result of parsedMetadata; index as i\">\r\n <th scope=\"row\">{{ i + 1 }}</th>\r\n <td><input class=\"checkbox-apply\" type=\"checkbox\" [(ngModel)]=\"result.selected\"\r\n (change)=\"onSelectChange(result)\"></td>\r\n <td>{{result.geo_adresse}}</td>\r\n <td>{{result.secteur_activite}}</td>\r\n <td>{{ result.annee_construction }}</td>\r\n <td>{{ result.classe_consommation_energie }}</td>\r\n <td>{{ result.classe_estimation_ges }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSaveResult()\"\r\n [disabled]=\"!selectedDpeResult\">{{'Save selected' |\r\n translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onErase()\">\r\n {{'No match (erase data)' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onCancel()\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n </div>\r\n <lib-form-location *ngIf=\"isEditing\" [location]=\"space\" (onChange)=\"onFormChange($event)\"></lib-form-location>\r\n</div>\r\n", styles: [""], components: [{ type: i4.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { type: i5.FormLocationComponent, selector: "lib-form-location", inputs: ["location"], outputs: ["onChange"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ClipboardDirective, selector: "[ngxClipboard]", inputs: ["ngxClipboard", "container", "cbContent", "cbSuccessMsg"], outputs: ["cbOnSuccess", "cbOnError"] }, { type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "translate": i3.TranslatePipe } });
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: DetailLocationComponent, decorators: [{
151
+ type: Component,
152
+ args: [{ selector: 'lib-detail-location', template: "<div class=\"container-fluid\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"reset()\"></lib-tab-navigation>\r\n </div>\r\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onReturn()\">{{'Back to locations' |\r\n translate}}</button>\r\n <div class=\"row\" *ngIf=\"!isEditing && space\">\r\n <div class=\"col-md-5\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{space.name}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{space.addresses}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Construction year' | translate}}:\r\n {{space.constructionYear ?\r\n space.constructionYear : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Latitude' | translate}}:\r\n {{space.latitude ?\r\n space.latitude : \"No data\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Longitude' | translate}}: {{space.longitude ?\r\n space.longitude : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate}}: {{space.level | translate\r\n }} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Energy Class' | translate}}:\r\n {{space.classEnergyConsumption ?\r\n space.classEnergyConsumption : \"No data\" | translate}}\r\n <button *ngIf=\"space.status !== 'DPE_TO_VALIDATE'\"\r\n class=\"btn btn-outline-primary rounded-pill no-lowercase ms-5\" (click)=\"onGetDpeData()\">\r\n {{'Get data from API DPE' | translate}}</button>\r\n <a class=\"bg-transparent ms-5\" *ngIf=\"space.status === 'DPE_TO_VALIDATE'\"\r\n (click)=\"onDpeValidate()\" style=\"cursor: pointer;\">\r\n <span class=\"iconify\" data-icon=\"mdi:alert-circle-check\" style=\"color: #f19c80;\" data-width=\"25\"\r\n data-height=\"25\"></span>\r\n {{'DPE data found. Click to validate' | translate}}\r\n </a>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Greenhouse gas emission Class' | translate}}:\r\n {{space.classGes ? space.classGes : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Shareable Guest Link' | translate}}:\r\n <div style=\"display: inline;\" *ngIf=\"guestLink\">\r\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\r\n <div ngxClipboard [cbContent]=\"guestLink\" [style.cursor]=\"'pointer'\"\r\n style=\"margin-left: 5px; max-width: 20px; display: inline;\" ngbTooltip=\"Copied!\"\r\n triggers=\"click:blur\">\r\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\r\n data-height=\"20\"></span>\r\n </div>\r\n </div>\r\n <p *ngIf=\"!guestLink\" style=\"display: inline;\">{{'No link' | translate }}</p>\r\n <p *ngIf=\"!guestLink\"><small>({{'Generate link from a VISITOR mission'|translate}})</small>\r\n </p>\r\n </li>\r\n\r\n </ul>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"gettingData\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n </div>\r\n <hr>\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onEdit()\" data-testid=\"location-edit-btn\">{{'Edit' |\r\n translate}}</button>\r\n <div class=\"tooltip-wrapper\" ngbTooltip=\"{{!canArchive ? ('Contact SmarterPlan' | translate) : ('Archive location and related data' | translate)}}\">\r\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onArchive()\" [disabled]=\"!canArchive\">\r\n {{'Archive' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"col-md-7\" *ngIf=\"isValidatingDpe\">\r\n <h6>{{'Most relevant results for' | translate}} : \r\n <b>diagnostics de performance \u00E9nerg\u00E9tique (DPE) des b\u00E2timents tertiaires</b></h6>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">#</th>\r\n <th scope=\"col\">{{'Apply to location' | translate}}</th>\r\n <th scope=\"col\">{{'Address' | translate}}</th>\r\n <th scope=\"col\">{{'Activity sector' | translate}}</th>\r\n <th scope=\"col\">{{'Construction year' | translate}}</th>\r\n <th scope=\"col\">{{'Energy Class' | translate}}</th>\r\n <th scope=\"col\">{{'Greenhouse gas emission Class' | translate}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let result of parsedMetadata; index as i\">\r\n <th scope=\"row\">{{ i + 1 }}</th>\r\n <td><input class=\"checkbox-apply\" type=\"checkbox\" [(ngModel)]=\"result.selected\"\r\n (change)=\"onSelectChange(result)\"></td>\r\n <td>{{result.geo_adresse}}</td>\r\n <td>{{result.secteur_activite}}</td>\r\n <td>{{ result.annee_construction }}</td>\r\n <td>{{ result.classe_consommation_energie }}</td>\r\n <td>{{ result.classe_estimation_ges }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSaveResult()\"\r\n [disabled]=\"!selectedDpeResult\">{{'Save selected' |\r\n translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onErase()\">\r\n {{'No match (erase data)' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onCancel()\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n </div>\r\n <lib-form-location *ngIf=\"isEditing\" [location]=\"space\" (onChange)=\"onFormChange($event)\"></lib-form-location>\r\n</div>\r\n", styles: [""] }]
153
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.SpaceService }, { type: i1.Router }, { type: i2.BaseUserService }, { type: i3.TranslateService }, { type: i2.NavigatorService }]; } });
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLWxvY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2RldGFpbC1sb2NhdGlvbi9kZXRhaWwtbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZGV0YWlsLWxvY2F0aW9uL2RldGFpbC1sb2NhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSWxELE9BQU8sRUFBNkQsV0FBVyxFQUFTLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7O0FBT2xJLE1BQU0sT0FBTyx1QkFBdUI7SUFpQ2hDLFlBQ1ksS0FBcUIsRUFDckIsWUFBMEIsRUFDMUIsTUFBYyxFQUNkLFdBQTRCLEVBQzVCLFNBQTJCLEVBQzNCLGdCQUFrQztRQUxsQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFqQzlDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFNbEIsY0FBUyxHQUFlLEVBQUUsQ0FBQztRQUUzQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUl4QixnQkFBVyxHQUFHLEtBQUssQ0FBQztJQXNCakIsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1YsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFR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QUM7cUJBQ2xDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1Q7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDZixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFO1lBQzFDLENBQUMsQ0FBQyxJQUFJO1lBQ04sQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7O29IQXRMUSx1QkFBdUI7d0dBQXZCLHVCQUF1QiwyRENYcEMsNGlPQTRHQTsyRkRqR2EsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1lbnVJdGVtLCBTcGFjZVNlcnZpY2UsIEJhc2VVc2VyU2VydmljZSwgTmF2aWdhdG9yU2VydmljZSwgU3BhY2VTdGF0dXMsIFNwYWNlIH0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRldGFpbC1sb2NhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXRhaWwtbG9jYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kZXRhaWwtbG9jYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEZXRhaWxMb2NhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBzcGFjZTogU3BhY2U7XG5cbiAgICBlZGl0Rm9ybTogRm9ybUdyb3VwO1xuXG4gICAgaXNFZGl0aW5nID0gZmFsc2U7XG5cbiAgICBpbWFnZVRvVXBsb2FkOiBGaWxlO1xuXG4gICAgaWQ6IHN0cmluZztcblxuICAgIG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuXG4gICAgaXNWYWxpZGF0aW5nRHBlID0gZmFsc2U7XG5cbiAgICBzZWxlY3RlZERwZVJlc3VsdDogYW55O1xuXG4gICAgZ2V0dGluZ0RhdGEgPSBmYWxzZTtcblxuICAgIHBhcnNlZE1ldGFkYXRhOiB7XG4gICAgICAgIGdlb19hZHJlc3NlOiBzdHJpbmc7XG4gICAgICAgIHNlY3RldXJfYWN0aXZpdGU6IHN0cmluZztcbiAgICAgICAgYW5uZWVfY29uc3RydWN0aW9uOiBzdHJpbmc7XG4gICAgICAgIGNsYXNzZV9jb25zb21tYXRpb25fZW5lcmdpZTogc3RyaW5nO1xuICAgICAgICBjbGFzc2VfZXN0aW1hdGlvbl9nZXM6IHN0cmluZztcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgfVtdO1xuXG4gICAgZ3Vlc3RMaW5rOiBzdHJpbmc7XG5cbiAgICBjYW5BcmNoaXZlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHNwYWNlU2VydmljZTogU3BhY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRvclNlcnZpY2U6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChcImlkXCIpO1xuICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UubG9jYXRpb25JRENoYW5nZS5uZXh0KHRoaXMuaWQpOyAvLyBTZW5kIHVwZGF0ZSBmb3IgdGhlIGxvY2F0aW9uIGZpbHRlciBiYXJcbiAgICAgICAgdGhpcy5zcGFjZSA9IGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLmdldFNwYWNlKHRoaXMuaWQpO1xuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgICAgIHRoaXMuc2V0R3Vlc3RMaW5rKCk7XG4gICAgICAgIHRoaXMuc2V0Q2FuQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIHNldHVwTWVudUl0ZW1zKCkge1xuICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IFtcbiAgICAgICAgICAgIHsgbGFiZWw6IFwiTG9jYXRpb25zXCIsIHVybDogXCIvbG9jYWxpc2F0aW9uXCIgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5zcGFjZS5uYW1lLFxuICAgICAgICAgICAgICAgIHVybDogYC9sb2NhbGlzYXRpb24vJHt0aGlzLnNwYWNlLmlkfWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGluZykge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMucHVzaCh7IGxhYmVsOiBcIkVkaXRcIiB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnB1c2goeyBsYWJlbDogXCJJbmZvcm1hdGlvblwiIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25FZGl0KCkge1xuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dXBNZW51SXRlbXMoKTtcbiAgICB9XG5cbiAgICBvblJldHVybigpIHtcbiAgICAgICAgLy8gdGhpcy5sb2NhdGlvblNlcnZpY2UuYmFjaygpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImRhc2hib2FyZC9sb2NhbGlzYXRpb25cIl0pO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25BcmNoaXZlKCkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uYXJjaGl2ZVNwYWNlXCIpO1xuICAgICAgICBpZiAod2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLnNvZnREZWxldGVTcGFjZSh0aGlzLmlkKTtcbiAgICAgICAgICAgIHRoaXMub25SZXR1cm4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRm9ybUNoYW5nZShldmVudDogU3BhY2UpIHtcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gZXZlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXR1cE1lbnVJdGVtcygpO1xuICAgIH1cblxuICAgIG9uRHBlVmFsaWRhdGUoKSB7XG4gICAgICAgIHRoaXMuaXNWYWxpZGF0aW5nRHBlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wYXJzZWRNZXRhZGF0YSA9IEpTT04ucGFyc2UodGhpcy5zcGFjZS5tZXRhZGF0YSk7XG4gICAgICAgIHRoaXMucGFyc2VkTWV0YWRhdGEgPSB0aGlzLnBhcnNlZE1ldGFkYXRhLmZpbHRlcihcbiAgICAgICAgICAgIChyZXN1bHQpID0+IHJlc3VsdC5nZW9fYWRyZXNzZSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdENoYW5nZShzZWxlY3RlZFJlc3VsdDogYW55KSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHRoaXMucGFyc2VkTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHNlbGVjdGVkUmVzdWx0ICYmIHJlc3VsdC5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREcGVSZXN1bHQgPSBzZWxlY3RlZFJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBvblNhdmVSZXN1bHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRHBlUmVzdWx0KSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5zcGFjZS5pZCxcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rpb25ZZWFyOiB0aGlzLnNlbGVjdGVkRHBlUmVzdWx0LmFubmVlX2NvbnN0cnVjdGlvbixcbiAgICAgICAgICAgICAgICBjbGFzc0VuZXJneUNvbnN1bXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRHBlUmVzdWx0LmNsYXNzZV9jb25zb21tYXRpb25fZW5lcmdpZSxcbiAgICAgICAgICAgICAgICBjbGFzc0dlczogdGhpcy5zZWxlY3RlZERwZVJlc3VsdC5jbGFzc2VfZXN0aW1hdGlvbl9nZXMsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBTcGFjZVN0YXR1cy5EUEVfVkFMSURBVEVELFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRMb2MgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZShpbnB1dCk7XG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gdXBkYXRlZExvYztcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0aW5nRHBlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdEcGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkVyYXNlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XG4gICAgICAgICAgICBpZDogdGhpcy5zcGFjZS5pZCxcbiAgICAgICAgICAgIHN0YXR1czogU3BhY2VTdGF0dXMuRFBFX1ZBTElEQVRFRCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3BhY2Uuc3RhdHVzID0gU3BhY2VTdGF0dXMuRFBFX1ZBTElEQVRFRDtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdEcGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkdldERwZURhdGEoKSB7XG4gICAgICAgIHRoaXMuZ2V0dGluZ0RhdGEgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XG4gICAgICAgICAgICBpZDogdGhpcy5zcGFjZS5pZCxcbiAgICAgICAgICAgIHN0YXR1czogU3BhY2VTdGF0dXMuRFBFX0ZFVENILFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBmb3JjZSB1cGRhdGUgb2YgbG9jYXRpb25cbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0U3BhY2UodGhpcy5zcGFjZS5pZCk7XG4gICAgICAgICAgICB0aGlzLmdldHRpbmdEYXRhID0gZmFsc2U7XG4gICAgICAgIH0sIDE1MDApO1xuICAgIH1cblxuICAgIHNldEd1ZXN0TGluaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc3BhY2UuZ3Vlc3RMaW5rKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9yaWdpbiB9ID0gZG9jdW1lbnQubG9jYXRpb247XG4gICAgICAgICAgICB0aGlzLmd1ZXN0TGluayA9IGAke29yaWdpbn0vJHt0aGlzLnNwYWNlLmd1ZXN0TGlua31gO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaHlwZXJsaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICAgXCIjbGlua0hyZWZcIixcbiAgICAgICAgICAgICAgICApIGFzIEhUTUxMaW5rRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uZm9sbG93TGlua1wiKTtcbiAgICAgICAgICAgICAgICBoeXBlcmxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuZ3Vlc3RMaW5rO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5sb2dvdXRDdXJyZW50QW5kU2lnbk91dEF1dGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImF1dGhcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHNldENhbkFyY2hpdmUoKSB7XG4gICAgICAgIHRoaXMuY2FuQXJjaGl2ZSA9IHRoaXMudXNlclNlcnZpY2UuaXNTUEFkbWluKClcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5jYW5BcmNoaXZlU3BhY2UodGhpcy5pZCk7XG4gICAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibS0zXCI+XHJcbiAgICAgICAgPGxpYi10YWItbmF2aWdhdGlvbiBbbWVudUl0ZW1zXT0nbWVudUl0ZW1zJyAob25Hb0JhY2spPVwicmVzZXQoKVwiPjwvbGliLXRhYi1uYXZpZ2F0aW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTNcIiAoY2xpY2spPVwib25SZXR1cm4oKVwiPnt7J0JhY2sgdG8gbG9jYXRpb25zJyB8XHJcbiAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFpc0VkaXRpbmcgJiYgc3BhY2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydOYW1lJyB8IHRyYW5zbGF0ZX19OiB7e3NwYWNlLm5hbWV9fSA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fToge3tzcGFjZS5hZGRyZXNzZXN9fSA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQ29uc3RydWN0aW9uIHllYXInIHwgdHJhbnNsYXRlfX06XHJcbiAgICAgICAgICAgICAgICAgICAge3tzcGFjZS5jb25zdHJ1Y3Rpb25ZZWFyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UuY29uc3RydWN0aW9uWWVhciA6IFwiTm8gZGF0YVwiIHwgdHJhbnNsYXRlfX0gPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0xhdGl0dWRlJyB8IHRyYW5zbGF0ZX19OlxyXG4gICAgICAgICAgICAgICAgICAgIHt7c3BhY2UubGF0aXR1ZGUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS5sYXRpdHVkZSA6IFwiTm8gZGF0YVwiIHwgdHJhbnNsYXRlfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snTG9uZ2l0dWRlJyB8IHRyYW5zbGF0ZX19OiB7e3NwYWNlLmxvbmdpdHVkZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgc3BhY2UubG9uZ2l0dWRlIDogXCJObyBkYXRhXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWNjZXNzIGxldmVsJyB8IHRyYW5zbGF0ZX19OiB7e3NwYWNlLmxldmVsIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0VuZXJneSBDbGFzcycgfCB0cmFuc2xhdGV9fTpcclxuICAgICAgICAgICAgICAgICAgICB7e3NwYWNlLmNsYXNzRW5lcmd5Q29uc3VtcHRpb24gP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS5jbGFzc0VuZXJneUNvbnN1bXB0aW9uIDogXCJObyBkYXRhXCIgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzcGFjZS5zdGF0dXMgIT09ICdEUEVfVE9fVkFMSURBVEUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbm8tbG93ZXJjYXNlIG1zLTVcIiAoY2xpY2spPVwib25HZXREcGVEYXRhKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snR2V0IGRhdGEgZnJvbSBBUEkgRFBFJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJiZy10cmFuc3BhcmVudCBtcy01XCIgKm5nSWY9XCJzcGFjZS5zdGF0dXMgPT09ICdEUEVfVE9fVkFMSURBVEUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRHBlVmFsaWRhdGUoKVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25pZnlcIiBkYXRhLWljb249XCJtZGk6YWxlcnQtY2lyY2xlLWNoZWNrXCIgc3R5bGU9XCJjb2xvcjogI2YxOWM4MDtcIiBkYXRhLXdpZHRoPVwiMjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1oZWlnaHQ9XCIyNVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snRFBFIGRhdGEgZm91bmQuIENsaWNrIHRvIHZhbGlkYXRlJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0dyZWVuaG91c2UgZ2FzIGVtaXNzaW9uIENsYXNzJyB8IHRyYW5zbGF0ZX19OlxyXG4gICAgICAgICAgICAgICAgICAgIHt7c3BhY2UuY2xhc3NHZXMgPyBzcGFjZS5jbGFzc0dlcyA6IFwiTm8gZGF0YVwiIHwgdHJhbnNsYXRlfX0gPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J1NoYXJlYWJsZSBHdWVzdCBMaW5rJyB8IHRyYW5zbGF0ZX19OlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmU7XCIgKm5nSWY9XCJndWVzdExpbmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9XCJsaW5rSHJlZlwiIHRhcmdldD1cIl9ibGFua1wiPnt7J1RyeSB0aGUgbGluaycgfCB0cmFuc2xhdGUgfX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmd4Q2xpcGJvYXJkIFtjYkNvbnRlbnRdPVwiZ3Vlc3RMaW5rXCIgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogNXB4OyBtYXgtd2lkdGg6IDIwcHg7IGRpc3BsYXk6IGlubGluZTtcIiBuZ2JUb29sdGlwPVwiQ29waWVkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cImNsaWNrOmJsdXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbmlmeVwiIGRhdGEtaWNvbj1cIm1kaTpjb250ZW50LWNvcHlcIiBkYXRhLWlubGluZT1cImZhbHNlXCIgZGF0YS13aWR0aD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWhlaWdodD1cIjIwXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiFndWVzdExpbmtcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZTtcIj57eydObyBsaW5rJyB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIiFndWVzdExpbmtcIj48c21hbGw+KHt7J0dlbmVyYXRlIGxpbmsgZnJvbSBhIFZJU0lUT1IgbWlzc2lvbid8dHJhbnNsYXRlfX0pPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJnZXR0aW5nRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyXCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGhyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTNcIiAoY2xpY2spPVwib25FZGl0KClcIiBkYXRhLXRlc3RpZD1cImxvY2F0aW9uLWVkaXQtYnRuXCI+e3snRWRpdCcgfFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcC13cmFwcGVyXCIgbmdiVG9vbHRpcD1cInt7IWNhbkFyY2hpdmUgPyAoJ0NvbnRhY3QgU21hcnRlclBsYW4nIHwgdHJhbnNsYXRlKSA6ICgnQXJjaGl2ZSBsb2NhdGlvbiBhbmQgcmVsYXRlZCBkYXRhJyB8IHRyYW5zbGF0ZSl9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGxcIiAoY2xpY2spPVwib25BcmNoaXZlKClcIiBbZGlzYWJsZWRdPVwiIWNhbkFyY2hpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snQXJjaGl2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03XCIgKm5nSWY9XCJpc1ZhbGlkYXRpbmdEcGVcIj5cclxuICAgICAgICAgICAgPGg2Pnt7J01vc3QgcmVsZXZhbnQgcmVzdWx0cyBmb3InIHwgdHJhbnNsYXRlfX0gOiBcclxuICAgICAgICAgICAgICAgIDxiPmRpYWdub3N0aWNzIGRlIHBlcmZvcm1hbmNlIMOpbmVyZ8OpdGlxdWUgKERQRSkgZGVzIGLDonRpbWVudHMgdGVydGlhaXJlczwvYj48L2g2PlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj4jPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snQXBwbHkgdG8gbG9jYXRpb24nIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydBZGRyZXNzJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snQWN0aXZpdHkgc2VjdG9yJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snQ29uc3RydWN0aW9uIHllYXInIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydFbmVyZ3kgQ2xhc3MnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydHcmVlbmhvdXNlIGdhcyBlbWlzc2lvbiBDbGFzcycgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByZXN1bHQgb2YgcGFyc2VkTWV0YWRhdGE7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwicm93XCI+e3sgaSArIDEgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IGNsYXNzPVwiY2hlY2tib3gtYXBwbHlcIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInJlc3VsdC5zZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZShyZXN1bHQpXCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmVzdWx0Lmdlb19hZHJlc3NlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyZXN1bHQuc2VjdGV1cl9hY3Rpdml0ZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHJlc3VsdC5hbm5lZV9jb25zdHJ1Y3Rpb24gfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcmVzdWx0LmNsYXNzZV9jb25zb21tYXRpb25fZW5lcmdpZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByZXN1bHQuY2xhc3NlX2VzdGltYXRpb25fZ2VzIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uU2F2ZVJlc3VsdCgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWREcGVSZXN1bHRcIj57eydTYXZlIHNlbGVjdGVkJyB8XHJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwib25FcmFzZSgpXCI+XHJcbiAgICAgICAgICAgICAgICB7eydObyBtYXRjaCAoZXJhc2UgZGF0YSknIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICAgIHt7J0NhbmNlbCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bGliLWZvcm0tbG9jYXRpb24gKm5nSWY9XCJpc0VkaXRpbmdcIiBbbG9jYXRpb25dPVwic3BhY2VcIiAob25DaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKCRldmVudClcIj48L2xpYi1mb3JtLWxvY2F0aW9uPlxyXG48L2Rpdj5cclxuIl19