@metadev/lux 0.25.0 → 0.26.0

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 (51) hide show
  1. package/esm2020/lib/autocomplete/autocomplete.component.mjs +33 -34
  2. package/esm2020/lib/autocomplete-list/autocomplete-list.component.mjs +6 -6
  3. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +3 -3
  4. package/esm2020/lib/checkbox/checkbox.component.mjs +25 -25
  5. package/esm2020/lib/datetime/datetime.component.mjs +36 -36
  6. package/esm2020/lib/filter/filter.component.mjs +23 -23
  7. package/esm2020/lib/geolocation/geolocation.component.mjs +53 -53
  8. package/esm2020/lib/geolocation/geolocation.service.mjs +3 -3
  9. package/esm2020/lib/geolocation/openlayer-loader.service.mjs +3 -3
  10. package/esm2020/lib/input/input.component.mjs +40 -40
  11. package/esm2020/lib/input/regexp.service.mjs +3 -3
  12. package/esm2020/lib/lux.module.mjs +6 -10
  13. package/esm2020/lib/map/map.component.mjs +20 -21
  14. package/esm2020/lib/modal/modal-backdrop.mjs +3 -3
  15. package/esm2020/lib/modal/modal-config.mjs +3 -3
  16. package/esm2020/lib/modal/modal-ref.mjs +11 -11
  17. package/esm2020/lib/modal/modal-stack.mjs +3 -3
  18. package/esm2020/lib/modal/modal-window.mjs +14 -14
  19. package/esm2020/lib/modal/modal.service.mjs +3 -3
  20. package/esm2020/lib/pagination/pagination.component.mjs +27 -27
  21. package/esm2020/lib/radiogroup/radiogroup.component.mjs +20 -20
  22. package/esm2020/lib/select/select.component.mjs +3 -3
  23. package/esm2020/lib/tooltip/tooltip.component.mjs +3 -3
  24. package/esm2020/lib/tooltip/tooltip.directive.mjs +3 -3
  25. package/esm2020/lib/tooltip/tooltip.service.mjs +3 -3
  26. package/esm2020/lib/voice-recognition/voice-recognition.directive.mjs +3 -3
  27. package/fesm2015/metadev-lux.mjs +339 -344
  28. package/fesm2015/metadev-lux.mjs.map +1 -1
  29. package/fesm2020/metadev-lux.mjs +339 -344
  30. package/fesm2020/metadev-lux.mjs.map +1 -1
  31. package/lib/autocomplete/autocomplete.component.d.ts +1 -1
  32. package/lib/autocomplete-list/autocomplete-list.component.d.ts +1 -1
  33. package/lib/breadcrumb/breadcrumb.component.d.ts +1 -1
  34. package/lib/checkbox/checkbox.component.d.ts +1 -1
  35. package/lib/datasource.d.ts +2 -2
  36. package/lib/datetime/datetime.component.d.ts +1 -1
  37. package/lib/filter/filter.component.d.ts +1 -1
  38. package/lib/geolocation/geolocation.component.d.ts +1 -1
  39. package/lib/input/input.component.d.ts +1 -1
  40. package/lib/lux.module.d.ts +5 -6
  41. package/lib/map/map.component.d.ts +1 -1
  42. package/lib/modal/modal-backdrop.d.ts +1 -1
  43. package/lib/modal/modal-window.d.ts +1 -1
  44. package/lib/pagination/pagination.component.d.ts +1 -1
  45. package/lib/radiogroup/radiogroup.component.d.ts +1 -1
  46. package/lib/select/select.component.d.ts +1 -1
  47. package/lib/tooltip/placement.d.ts +1 -1
  48. package/lib/tooltip/tooltip.component.d.ts +1 -1
  49. package/lib/tooltip/tooltip.directive.d.ts +1 -1
  50. package/lib/voice-recognition/voice-recognition.directive.d.ts +1 -1
  51. package/package.json +4 -4
@@ -12,6 +12,53 @@ import * as i4 from "@angular/common";
12
12
  import * as i5 from "../autocomplete/autocomplete.component";
13
13
  import * as i6 from "../map/map.component";
14
14
  export class GeolocationComponent {
15
+ get className() {
16
+ return this.checkClassName();
17
+ }
18
+ set disabled(v) {
19
+ v = typeof v === 'string' && v !== 'false' ? true : v;
20
+ this._disabled = v;
21
+ }
22
+ get disabled() {
23
+ return this._disabled;
24
+ }
25
+ set required(v) {
26
+ this._required = v;
27
+ }
28
+ get required() {
29
+ return this._required;
30
+ }
31
+ set value(v) {
32
+ if (v === this._value) {
33
+ return; // prevent events when there is no changes
34
+ }
35
+ const initialAndEmpty = isInitialAndEmpty(this._value, v);
36
+ if (v &&
37
+ v.coordinates &&
38
+ v.coordinates.length === 2 &&
39
+ exists(v.coordinates[0] && exists(v.coordinates[1]))) {
40
+ this._value = v;
41
+ this.setLatitudeInControl(v.coordinates[1]);
42
+ this.setLongitudeInControl(v.coordinates[0]);
43
+ }
44
+ else if (!v) {
45
+ this._value = null;
46
+ this.setLatitudeInControl(null);
47
+ this.setLongitudeInControl(null);
48
+ }
49
+ else {
50
+ this._value = v;
51
+ // we don't set value in control if the value is not valid
52
+ // if we do, the content of the control changes and can erase what the user is typing
53
+ }
54
+ this.onChange(v);
55
+ if (!initialAndEmpty) {
56
+ this.valueChange.emit(v);
57
+ }
58
+ }
59
+ get value() {
60
+ return this._value;
61
+ }
15
62
  constructor(modalService, locationService) {
16
63
  this.modalService = modalService;
17
64
  this.locationService = locationService;
@@ -77,53 +124,6 @@ export class GeolocationComponent {
77
124
  this.onChange = (value) => { };
78
125
  this.onTouched = () => { };
79
126
  }
80
- get className() {
81
- return this.checkClassName();
82
- }
83
- set disabled(v) {
84
- v = typeof v === 'string' && v !== 'false' ? true : v;
85
- this._disabled = v;
86
- }
87
- get disabled() {
88
- return this._disabled;
89
- }
90
- set required(v) {
91
- this._required = v;
92
- }
93
- get required() {
94
- return this._required;
95
- }
96
- set value(v) {
97
- if (v === this._value) {
98
- return; // prevent events when there is no changes
99
- }
100
- const initialAndEmpty = isInitialAndEmpty(this._value, v);
101
- if (v &&
102
- v.coordinates &&
103
- v.coordinates.length === 2 &&
104
- exists(v.coordinates[0] && exists(v.coordinates[1]))) {
105
- this._value = v;
106
- this.setLatitudeInControl(v.coordinates[1]);
107
- this.setLongitudeInControl(v.coordinates[0]);
108
- }
109
- else if (!v) {
110
- this._value = null;
111
- this.setLatitudeInControl(null);
112
- this.setLongitudeInControl(null);
113
- }
114
- else {
115
- this._value = v;
116
- // we don't set value in control if the value is not valid
117
- // if we do, the content of the control changes and can erase what the user is typing
118
- }
119
- this.onChange(v);
120
- if (!initialAndEmpty) {
121
- this.valueChange.emit(v);
122
- }
123
- }
124
- get value() {
125
- return this._value;
126
- }
127
127
  // ControlValueAccessor Interface implementation
128
128
  writeValue(value) {
129
129
  this.value = value;
@@ -334,8 +334,8 @@ export class GeolocationComponent {
334
334
  }
335
335
  }
336
336
  GeolocationComponent.idCounter = 0;
337
- GeolocationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GeolocationComponent, deps: [{ token: i1.ModalService }, { token: i2.GeolocationService }], target: i0.ɵɵFactoryTarget.Component });
338
- GeolocationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: GeolocationComponent, selector: "lux-geolocation", inputs: { minLatitude: "minLatitude", maxLatitude: "maxLatitude", minLongitude: "minLongitude", maxLongitude: "maxLongitude", step: "step", zoom: "zoom", lang: "lang", inlineErrors: "inlineErrors", inputId: "inputId", ariaLabel: ["aria-label", "ariaLabel"], readonly: "readonly", disabled: "disabled", required: "required", value: "value" }, outputs: { valueChange: "valueChange", keyPress: "keyPress" }, providers: [
337
+ GeolocationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: GeolocationComponent, deps: [{ token: i1.ModalService }, { token: i2.GeolocationService }], target: i0.ɵɵFactoryTarget.Component });
338
+ GeolocationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: GeolocationComponent, selector: "lux-geolocation", inputs: { minLatitude: "minLatitude", maxLatitude: "maxLatitude", minLongitude: "minLongitude", maxLongitude: "maxLongitude", step: "step", zoom: "zoom", lang: "lang", inlineErrors: "inlineErrors", inputId: "inputId", ariaLabel: ["aria-label", "ariaLabel"], readonly: "readonly", disabled: "disabled", required: "required", value: "value" }, outputs: { valueChange: "valueChange", keyPress: "keyPress" }, providers: [
339
339
  {
340
340
  provide: NG_VALUE_ACCESSOR,
341
341
  multi: true,
@@ -346,8 +346,8 @@ GeolocationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
346
346
  multi: true,
347
347
  useExisting: forwardRef(() => GeolocationComponent)
348
348
  }
349
- ], viewQueries: [{ propertyName: "latitude", first: true, predicate: ["latitude"], descendants: true, static: true }, { propertyName: "longitude", first: true, predicate: ["longitude"], descendants: true, static: true }, { propertyName: "map", first: true, predicate: ["map"], descendants: true }], ngImport: i0, template: "<input\n #latitude\n class=\"rounded-left prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$latitude'\"\n [(ngModel)]=\"latitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLatitude !== undefined && minLatitude !== null\n ? minLatitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLatitude !== undefined && maxLatitude !== null\n ? maxLatitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lat\"\n (keyup)=\"onEventLatitude(latitude.value)\"\n (change)=\"onEventLatitude(latitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol monospace clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\">\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.north\n }}</span>\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue < 0\">{{\n i18n[lang].cardinalPoints.south\n }}</span>\n <span *ngIf=\"!isValidNumber(latitudeValue)\">-</span>\n</div>\n<input\n #longitude\n class=\"prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$longitude'\"\n [(ngModel)]=\"longitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLongitude !== undefined && minLongitude !== null\n ? minLongitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLongitude !== undefined && maxLongitude !== null\n ? maxLongitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lon\"\n (keyup)=\"onEventLongitude(longitude.value)\"\n (change)=\"onEventLongitude(longitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol monospace clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.east\n }}</span>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue < 0\">{{\n i18n[lang].cardinalPoints.west\n }}</span>\n <span *ngIf=\"!isValidNumber(longitudeValue)\">-</span>\n</div>\n<div\n [class]=\"\n disabled || readonly || !isClearable()\n ? 'clickable rounded-right postfix symbol'\n : 'clickable postfix symbol'\n \"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span class=\"icon-globe\"></span>\n</div>\n<button\n #clearButton\n *ngIf=\"!disabled && !readonly && isClearable()\"\n class=\"rounded-right postfix bordered icon icon-clear\"\n [id]=\"inputId + '$clear'\"\n type=\"button\"\n (click)=\"clear()\"\n aria-label=\"clear\"\n></button>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ i18n[lang].userErrors.required }}\n </div>\n <div *ngIf=\"lastErrors.minLatitude\">\n {{\n i18n[lang].userErrors.minLatitude.replace(\n '$minLatitude',\n lastErrors.minLatitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLatitude\">\n {{\n i18n[lang].userErrors.maxLatitude.replace(\n '$maxLatitude',\n lastErrors.maxLatitude.max\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.minLongitude\">\n {{\n i18n[lang].userErrors.minLongitude.replace(\n '$minLongitude',\n lastErrors.minLongitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLongitude\">\n {{\n i18n[lang].userErrors.maxLongitude.replace(\n '$maxLongitude',\n lastErrors.maxLongitude.max\n )\n }}\n </div>\n</div>\n\n<ng-template #modalMap let-modal>\n <div class=\"lux-modal-header\">\n <h4 class=\"modal-title default-font\" id=\"modal-basic-title\">{{ mapTitle }}</h4>\n <button\n type=\"button\"\n class=\"close\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss('Cross click')\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n </button>\n </div>\n <div class=\"lux-modal-body content\">\n <lux-autocomplete\n #searchBar\n [attr.aria-label]=\"i18n[lang].typeToSearch\"\n [placeholder]=\"i18n[lang].typeToSearch\"\n *ngIf=\"!disabled && !readonly\"\n [instance]=\"self\"\n [resolveLabelsFunction]=\"getLabels\"\n [populateFunction]=\"getData\"\n (valueChange)=\"onSearchLocationChanged(searchBar.value, map)\"\n ></lux-autocomplete>\n <div class=\"map-container\">\n <lux-map\n #map\n [center]=\"value\"\n [markerPoint]=\"value\"\n [zoom]=\"zoom\"\n [readonly]=\"readonly === true || disabled === true ? true : false\"\n ></lux-map>\n </div>\n </div>\n <div class=\"lux-modal-footer\">\n <button\n *ngIf=\"disabled || readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].closeAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].cancelAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-select\"\n (click)=\"modal.close(map.markerPoint.coordinates)\"\n >\n {{ i18n[lang].selectAction }}\n </button>\n </div>\n</ng-template>\n", styles: [":focus{z-index:1}input,select,textarea{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:0rem;margin:var(--lux-input-margin, 0rem);padding:0rem .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:#000;color:var(--lux-font-color, black)}:host{display:flex;align-items:stretch}.btn-select{color:#fff;background-color:#4242d1;margin-left:2rem}.btn-cancel{color:#fff;background-color:#c22929}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:#f1f1f1;background-color:var(--lux-disabled-color, #f1f1f1);border-color:#6d6d6d;border-color:var(--lux-disabled-border-color, #6d6d6d)}.icon,.icon-clear,.icon-globe{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;min-width:1rem;min-height:1rem;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.clickable{cursor:pointer}.icon-globe{background:url(/assets/img/globe.svg) no-repeat center;background:var(--lux-autocomplete-icon-globe, url(/assets/img/globe.svg) no-repeat center);background-size:1rem;height:100%}.icon-clear{width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-modal-body{padding:0}.map-container{height:45vh;height:var(--lux-geolocation-map-height, 45vh);width:90vw;width:var(--lux-geolocation-map-width, 90vw);max-width:100%}\n"], dependencies: [{ kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.AutocompleteComponent, selector: "lux-autocomplete", inputs: ["inputId", "disabled", "readonly", "label", "canAddNewValues", "keepOpenAfterDelete", "value", "dataSource", "required", "placeholder", "resolveLabelsFunction", "populateFunction", "instance"], outputs: ["valueChange", "dataSourceChange"] }, { kind: "component", type: i6.MapComponent, selector: "lux-map", inputs: ["mapId", "zoom", "center", "readonly", "markerCoordinates", "markerPoint"], outputs: ["valueChange"] }] });
350
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GeolocationComponent, decorators: [{
349
+ ], viewQueries: [{ propertyName: "latitude", first: true, predicate: ["latitude"], descendants: true, static: true }, { propertyName: "longitude", first: true, predicate: ["longitude"], descendants: true, static: true }, { propertyName: "map", first: true, predicate: ["map"], descendants: true }], ngImport: i0, template: "<input\n #latitude\n class=\"rounded-left prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$latitude'\"\n [(ngModel)]=\"latitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLatitude !== undefined && minLatitude !== null\n ? minLatitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLatitude !== undefined && maxLatitude !== null\n ? maxLatitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lat\"\n (keyup)=\"onEventLatitude(latitude.value)\"\n (change)=\"onEventLatitude(latitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol monospace clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\">\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.north\n }}</span>\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue < 0\">{{\n i18n[lang].cardinalPoints.south\n }}</span>\n <span *ngIf=\"!isValidNumber(latitudeValue)\">-</span>\n</div>\n<input\n #longitude\n class=\"prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$longitude'\"\n [(ngModel)]=\"longitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLongitude !== undefined && minLongitude !== null\n ? minLongitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLongitude !== undefined && maxLongitude !== null\n ? maxLongitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lon\"\n (keyup)=\"onEventLongitude(longitude.value)\"\n (change)=\"onEventLongitude(longitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol monospace clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.east\n }}</span>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue < 0\">{{\n i18n[lang].cardinalPoints.west\n }}</span>\n <span *ngIf=\"!isValidNumber(longitudeValue)\">-</span>\n</div>\n<div\n [class]=\"\n disabled || readonly || !isClearable()\n ? 'clickable rounded-right postfix symbol'\n : 'clickable postfix symbol'\n \"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span class=\"icon-globe\"></span>\n</div>\n<button\n #clearButton\n *ngIf=\"!disabled && !readonly && isClearable()\"\n class=\"rounded-right postfix bordered icon icon-clear\"\n [id]=\"inputId + '$clear'\"\n type=\"button\"\n (click)=\"clear()\"\n aria-label=\"clear\"\n></button>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ i18n[lang].userErrors.required }}\n </div>\n <div *ngIf=\"lastErrors.minLatitude\">\n {{\n i18n[lang].userErrors.minLatitude.replace(\n '$minLatitude',\n lastErrors.minLatitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLatitude\">\n {{\n i18n[lang].userErrors.maxLatitude.replace(\n '$maxLatitude',\n lastErrors.maxLatitude.max\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.minLongitude\">\n {{\n i18n[lang].userErrors.minLongitude.replace(\n '$minLongitude',\n lastErrors.minLongitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLongitude\">\n {{\n i18n[lang].userErrors.maxLongitude.replace(\n '$maxLongitude',\n lastErrors.maxLongitude.max\n )\n }}\n </div>\n</div>\n\n<ng-template #modalMap let-modal>\n <div class=\"lux-modal-header\">\n <h4 class=\"modal-title default-font\" id=\"modal-basic-title\">{{ mapTitle }}</h4>\n <button\n type=\"button\"\n class=\"close\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss('Cross click')\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n </button>\n </div>\n <div class=\"lux-modal-body content\">\n <lux-autocomplete\n #searchBar\n [attr.aria-label]=\"i18n[lang].typeToSearch\"\n [placeholder]=\"i18n[lang].typeToSearch\"\n *ngIf=\"!disabled && !readonly\"\n [instance]=\"self\"\n [resolveLabelsFunction]=\"getLabels\"\n [populateFunction]=\"getData\"\n (valueChange)=\"onSearchLocationChanged(searchBar.value, map)\"\n ></lux-autocomplete>\n <div class=\"map-container\">\n <lux-map\n #map\n [center]=\"value\"\n [markerPoint]=\"value\"\n [zoom]=\"zoom\"\n [readonly]=\"readonly === true || disabled === true ? true : false\"\n ></lux-map>\n </div>\n </div>\n <div class=\"lux-modal-footer\">\n <button\n *ngIf=\"disabled || readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].closeAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].cancelAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-select\"\n (click)=\"modal.close(map.markerPoint.coordinates)\"\n >\n {{ i18n[lang].selectAction }}\n </button>\n </div>\n</ng-template>\n", styles: [":focus{z-index:1}input,select,textarea{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:var(--lux-input-margin, 0rem);padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:var(--lux-alert-background, #fe2e2e);color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:var(--lux-symbol-background, default);font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:var(--lux-font-color, black)}:host{display:flex;align-items:stretch}.btn-select{color:#fff;background-color:#4242d1;margin-left:2rem}.btn-cancel{color:#fff;background-color:#c22929}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:var(--lux-disabled-color, #f1f1f1);border-color:var(--lux-disabled-border-color, #6d6d6d)}.icon,.icon-clear,.icon-globe{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;min-width:1rem;min-height:1rem;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.clickable{cursor:pointer}.icon-globe{background:var(--lux-autocomplete-icon-globe, url(/assets/img/globe.svg) no-repeat center);background-size:1rem;height:100%}.icon-clear{width:var(--lux-autocomplete-icon-width, 1.5rem);background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-modal-body{padding:0}.map-container{height:var(--lux-geolocation-map-height, 45vh);width:var(--lux-geolocation-map-width, 90vw);max-width:100%}\n"], dependencies: [{ kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.AutocompleteComponent, selector: "lux-autocomplete", inputs: ["inputId", "disabled", "readonly", "label", "canAddNewValues", "keepOpenAfterDelete", "value", "dataSource", "required", "placeholder", "resolveLabelsFunction", "populateFunction", "instance"], outputs: ["valueChange", "dataSourceChange"] }, { kind: "component", type: i6.MapComponent, selector: "lux-map", inputs: ["mapId", "zoom", "center", "readonly", "markerCoordinates", "markerPoint"], outputs: ["valueChange"] }] });
350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: GeolocationComponent, decorators: [{
351
351
  type: Component,
352
352
  args: [{ selector: 'lux-geolocation', providers: [
353
353
  {
@@ -360,7 +360,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
360
360
  multi: true,
361
361
  useExisting: forwardRef(() => GeolocationComponent)
362
362
  }
363
- ], template: "<input\n #latitude\n class=\"rounded-left prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$latitude'\"\n [(ngModel)]=\"latitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLatitude !== undefined && minLatitude !== null\n ? minLatitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLatitude !== undefined && maxLatitude !== null\n ? maxLatitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lat\"\n (keyup)=\"onEventLatitude(latitude.value)\"\n (change)=\"onEventLatitude(latitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol monospace clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\">\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.north\n }}</span>\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue < 0\">{{\n i18n[lang].cardinalPoints.south\n }}</span>\n <span *ngIf=\"!isValidNumber(latitudeValue)\">-</span>\n</div>\n<input\n #longitude\n class=\"prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$longitude'\"\n [(ngModel)]=\"longitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLongitude !== undefined && minLongitude !== null\n ? minLongitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLongitude !== undefined && maxLongitude !== null\n ? maxLongitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lon\"\n (keyup)=\"onEventLongitude(longitude.value)\"\n (change)=\"onEventLongitude(longitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol monospace clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.east\n }}</span>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue < 0\">{{\n i18n[lang].cardinalPoints.west\n }}</span>\n <span *ngIf=\"!isValidNumber(longitudeValue)\">-</span>\n</div>\n<div\n [class]=\"\n disabled || readonly || !isClearable()\n ? 'clickable rounded-right postfix symbol'\n : 'clickable postfix symbol'\n \"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span class=\"icon-globe\"></span>\n</div>\n<button\n #clearButton\n *ngIf=\"!disabled && !readonly && isClearable()\"\n class=\"rounded-right postfix bordered icon icon-clear\"\n [id]=\"inputId + '$clear'\"\n type=\"button\"\n (click)=\"clear()\"\n aria-label=\"clear\"\n></button>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ i18n[lang].userErrors.required }}\n </div>\n <div *ngIf=\"lastErrors.minLatitude\">\n {{\n i18n[lang].userErrors.minLatitude.replace(\n '$minLatitude',\n lastErrors.minLatitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLatitude\">\n {{\n i18n[lang].userErrors.maxLatitude.replace(\n '$maxLatitude',\n lastErrors.maxLatitude.max\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.minLongitude\">\n {{\n i18n[lang].userErrors.minLongitude.replace(\n '$minLongitude',\n lastErrors.minLongitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLongitude\">\n {{\n i18n[lang].userErrors.maxLongitude.replace(\n '$maxLongitude',\n lastErrors.maxLongitude.max\n )\n }}\n </div>\n</div>\n\n<ng-template #modalMap let-modal>\n <div class=\"lux-modal-header\">\n <h4 class=\"modal-title default-font\" id=\"modal-basic-title\">{{ mapTitle }}</h4>\n <button\n type=\"button\"\n class=\"close\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss('Cross click')\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n </button>\n </div>\n <div class=\"lux-modal-body content\">\n <lux-autocomplete\n #searchBar\n [attr.aria-label]=\"i18n[lang].typeToSearch\"\n [placeholder]=\"i18n[lang].typeToSearch\"\n *ngIf=\"!disabled && !readonly\"\n [instance]=\"self\"\n [resolveLabelsFunction]=\"getLabels\"\n [populateFunction]=\"getData\"\n (valueChange)=\"onSearchLocationChanged(searchBar.value, map)\"\n ></lux-autocomplete>\n <div class=\"map-container\">\n <lux-map\n #map\n [center]=\"value\"\n [markerPoint]=\"value\"\n [zoom]=\"zoom\"\n [readonly]=\"readonly === true || disabled === true ? true : false\"\n ></lux-map>\n </div>\n </div>\n <div class=\"lux-modal-footer\">\n <button\n *ngIf=\"disabled || readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].closeAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].cancelAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-select\"\n (click)=\"modal.close(map.markerPoint.coordinates)\"\n >\n {{ i18n[lang].selectAction }}\n </button>\n </div>\n</ng-template>\n", styles: [":focus{z-index:1}input,select,textarea{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:0rem;margin:var(--lux-input-margin, 0rem);padding:0rem .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:#000;color:var(--lux-font-color, black)}:host{display:flex;align-items:stretch}.btn-select{color:#fff;background-color:#4242d1;margin-left:2rem}.btn-cancel{color:#fff;background-color:#c22929}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:#f1f1f1;background-color:var(--lux-disabled-color, #f1f1f1);border-color:#6d6d6d;border-color:var(--lux-disabled-border-color, #6d6d6d)}.icon,.icon-clear,.icon-globe{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;min-width:1rem;min-height:1rem;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.clickable{cursor:pointer}.icon-globe{background:url(/assets/img/globe.svg) no-repeat center;background:var(--lux-autocomplete-icon-globe, url(/assets/img/globe.svg) no-repeat center);background-size:1rem;height:100%}.icon-clear{width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-modal-body{padding:0}.map-container{height:45vh;height:var(--lux-geolocation-map-height, 45vh);width:90vw;width:var(--lux-geolocation-map-width, 90vw);max-width:100%}\n"] }]
363
+ ], template: "<input\n #latitude\n class=\"rounded-left prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$latitude'\"\n [(ngModel)]=\"latitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLatitude !== undefined && minLatitude !== null\n ? minLatitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLatitude !== undefined && maxLatitude !== null\n ? maxLatitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lat\"\n (keyup)=\"onEventLatitude(latitude.value)\"\n (change)=\"onEventLatitude(latitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol monospace clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\">\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.north\n }}</span>\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue < 0\">{{\n i18n[lang].cardinalPoints.south\n }}</span>\n <span *ngIf=\"!isValidNumber(latitudeValue)\">-</span>\n</div>\n<input\n #longitude\n class=\"prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$longitude'\"\n [(ngModel)]=\"longitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLongitude !== undefined && minLongitude !== null\n ? minLongitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLongitude !== undefined && maxLongitude !== null\n ? maxLongitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lon\"\n (keyup)=\"onEventLongitude(longitude.value)\"\n (change)=\"onEventLongitude(longitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol monospace clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.east\n }}</span>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue < 0\">{{\n i18n[lang].cardinalPoints.west\n }}</span>\n <span *ngIf=\"!isValidNumber(longitudeValue)\">-</span>\n</div>\n<div\n [class]=\"\n disabled || readonly || !isClearable()\n ? 'clickable rounded-right postfix symbol'\n : 'clickable postfix symbol'\n \"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span class=\"icon-globe\"></span>\n</div>\n<button\n #clearButton\n *ngIf=\"!disabled && !readonly && isClearable()\"\n class=\"rounded-right postfix bordered icon icon-clear\"\n [id]=\"inputId + '$clear'\"\n type=\"button\"\n (click)=\"clear()\"\n aria-label=\"clear\"\n></button>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ i18n[lang].userErrors.required }}\n </div>\n <div *ngIf=\"lastErrors.minLatitude\">\n {{\n i18n[lang].userErrors.minLatitude.replace(\n '$minLatitude',\n lastErrors.minLatitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLatitude\">\n {{\n i18n[lang].userErrors.maxLatitude.replace(\n '$maxLatitude',\n lastErrors.maxLatitude.max\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.minLongitude\">\n {{\n i18n[lang].userErrors.minLongitude.replace(\n '$minLongitude',\n lastErrors.minLongitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLongitude\">\n {{\n i18n[lang].userErrors.maxLongitude.replace(\n '$maxLongitude',\n lastErrors.maxLongitude.max\n )\n }}\n </div>\n</div>\n\n<ng-template #modalMap let-modal>\n <div class=\"lux-modal-header\">\n <h4 class=\"modal-title default-font\" id=\"modal-basic-title\">{{ mapTitle }}</h4>\n <button\n type=\"button\"\n class=\"close\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss('Cross click')\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n </button>\n </div>\n <div class=\"lux-modal-body content\">\n <lux-autocomplete\n #searchBar\n [attr.aria-label]=\"i18n[lang].typeToSearch\"\n [placeholder]=\"i18n[lang].typeToSearch\"\n *ngIf=\"!disabled && !readonly\"\n [instance]=\"self\"\n [resolveLabelsFunction]=\"getLabels\"\n [populateFunction]=\"getData\"\n (valueChange)=\"onSearchLocationChanged(searchBar.value, map)\"\n ></lux-autocomplete>\n <div class=\"map-container\">\n <lux-map\n #map\n [center]=\"value\"\n [markerPoint]=\"value\"\n [zoom]=\"zoom\"\n [readonly]=\"readonly === true || disabled === true ? true : false\"\n ></lux-map>\n </div>\n </div>\n <div class=\"lux-modal-footer\">\n <button\n *ngIf=\"disabled || readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].closeAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].cancelAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-select\"\n (click)=\"modal.close(map.markerPoint.coordinates)\"\n >\n {{ i18n[lang].selectAction }}\n </button>\n </div>\n</ng-template>\n", styles: [":focus{z-index:1}input,select,textarea{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:var(--lux-input-margin, 0rem);padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:var(--lux-alert-background, #fe2e2e);color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:var(--lux-symbol-background, default);font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:var(--lux-font-color, black)}:host{display:flex;align-items:stretch}.btn-select{color:#fff;background-color:#4242d1;margin-left:2rem}.btn-cancel{color:#fff;background-color:#c22929}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:var(--lux-disabled-color, #f1f1f1);border-color:var(--lux-disabled-border-color, #6d6d6d)}.icon,.icon-clear,.icon-globe{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;min-width:1rem;min-height:1rem;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.clickable{cursor:pointer}.icon-globe{background:var(--lux-autocomplete-icon-globe, url(/assets/img/globe.svg) no-repeat center);background-size:1rem;height:100%}.icon-clear{width:var(--lux-autocomplete-icon-width, 1.5rem);background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-modal-body{padding:0}.map-container{height:var(--lux-geolocation-map-height, 45vh);width:var(--lux-geolocation-map-width, 90vw);max-width:100%}\n"] }]
364
364
  }], ctorParameters: function () { return [{ type: i1.ModalService }, { type: i2.GeolocationService }]; }, propDecorators: { latitude: [{
365
365
  type: ViewChild,
366
366
  args: ['latitude', { static: true }]
@@ -404,4 +404,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
404
404
  }], keyPress: [{
405
405
  type: Output
406
406
  }] } });
407
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsYUFBYSxFQUNiLGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2xCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7O0FBbUIzRCxNQUFNLE9BQU8sb0JBQW9CO0lBb0ovQixZQUNVLFlBQTBCLEVBQzNCLGVBQW1DO1FBRGxDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQS9JNUMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsZUFBVSxHQUE0QixJQUFJLENBQUM7UUFNM0Msa0JBQWEsR0FBWSxTQUFTLENBQUM7UUFDbkMsbUJBQWMsR0FBWSxTQUFTLENBQUM7UUFFcEMsa0JBQWEsR0FBRyxhQUFhLENBQUM7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ZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uL2RhdGFzb3VyY2UnO1xuaW1wb3J0IHtcbiAgZXhpc3RzLFxuICBoYXNWYWx1ZSxcbiAgaXNJbml0aWFsQW5kRW1wdHksXG4gIGlzVmFsaWROdW1iZXIsXG4gIHJvdW5kVG9NdWx0aXBsZU9mXG59IGZyb20gJy4uL2hlbHBlckZucyc7XG5pbXBvcnQgeyBsYW5ndWFnZURldGVjdG9yIH0gZnJvbSAnLi4vbGFuZyc7XG5pbXBvcnQgeyBHZW9Qb2ludCB9IGZyb20gJy4uL21hcC9nZW9wb2ludCc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEdlb2xvY2F0aW9uU2VydmljZSB9IGZyb20gJy4vZ2VvbG9jYXRpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x1eC1nZW9sb2NhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW9sb2NhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dlb2xvY2F0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHZW9sb2NhdGlvbkNvbXBvbmVudClcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdlb2xvY2F0aW9uQ29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBHZW9sb2NhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHN0YXRpYyBpZENvdW50ZXIgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoJ2xhdGl0dWRlJywgeyBzdGF0aWM6IHRydWUgfSkgbGF0aXR1ZGU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xvbmdpdHVkZScsIHsgc3RhdGljOiB0cnVlIH0pIGxvbmdpdHVkZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbWFwJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1hcD86IEVsZW1lbnRSZWY7XG5cbiAgdG91Y2hlZCA9IGZhbHNlO1xuICBkaXJ0eSA9IGZhbHNlO1xuICBsYXN0RXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW47XG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuO1xuICBwcml2YXRlIF92YWx1ZTogYW55O1xuXG4gIGxhdGl0dWRlVmFsdWU/OiBudW1iZXIgPSB1bmRlZmluZWQ7XG4gIGxvbmdpdHVkZVZhbHVlPzogbnVtYmVyID0gdW5kZWZpbmVkO1xuXG4gIGlzVmFsaWROdW1iZXIgPSBpc1ZhbGlkTnVtYmVyO1xuXG4gIGkxOG4gPSB7XG4gICAgZW46IHtcbiAgICAgIGxhdDogJ2xhdGl0dWRlJyxcbiAgICAgIGxvbjogJ2xvbmdpdHVkZScsXG4gICAgICBzZWxlY3RMb2NhdGlvbjogJ1NlbGVjdCBsb2NhdGlvbicsXG4gICAgICBsb2NhdGlvbjogJ0xvY2F0aW9uJyxcbiAgICAgIHNlbGVjdEFjdGlvbjogJ1NlbGVjdCcsXG4gICAgICBjYW5jZWxBY3Rpb246ICdDYW5jZWwnLFxuICAgICAgY2xvc2VBY3Rpb246ICdDbG9zZScsXG4gICAgICB0eXBlVG9TZWFyY2g6ICd0eXBlIHRvIHNlYXJjaCcsXG4gICAgICBjYXJkaW5hbFBvaW50czoge1xuICAgICAgICBub3J0aDogJ04nLFxuICAgICAgICBzb3V0aDogJ1MnLFxuICAgICAgICBlYXN0OiAnRScsXG4gICAgICAgIHdlc3Q6ICdXJ1xuICAgICAgfSxcbiAgICAgIHVzZXJFcnJvcnM6IHtcbiAgICAgICAgcmVxdWlyZWQ6ICdSZXF1aXJlZCBmaWVsZC4nLFxuICAgICAgICBtaW5MYXRpdHVkZTogJ01pbmltdW0gbGF0aXR1ZGUgaXMgJG1pbkxhdGl0dWRlLicsXG4gICAgICAgIG1heExhdGl0dWRlOiAnTWF4aW11bSBsYXRpdHVkZSBpcyAkbWF4TGF0aXR1ZGUuJyxcbiAgICAgICAgbWluTG9uZ2l0dWRlOiAnTWluaW11bSBsb25naXR1ZGUgaXMgJG1pbkxvbmdpdHVkZS4nLFxuICAgICAgICBtYXhMb25naXR1ZGU6ICdNYXhpbXVtIGxvbmdpdHVkZSBpcyAkbWF4TG9uZ2l0dWRlLidcbiAgICAgIH1cbiAgICB9LFxuICAgIGVzOiB7XG4gICAgICBsYXQ6ICdsYXRpdHVkJyxcbiAgICAgIGxvbjogJ2xvbmdpdHVkJyxcbiAgICAgIHNlbGVjdExvY2F0aW9uOiAnU2VsZWNjaW9uZSB1YmljYWNpw7NuJyxcbiAgICAgIGxvY2F0aW9uOiAnVWJpY2FjacOzbicsXG4gICAgICBzZWxlY3RBY3Rpb246ICdTZWxlY2Npb25hcicsXG4gICAgICBjYW5jZWxBY3Rpb246ICdDYW5jZWxhcicsXG4gICAgICBjbG9zZUFjdGlvbjogJ0NlcnJhcicsXG4gICAgICB0eXBlVG9TZWFyY2g6ICdlc2NyaWJlIHBhcmEgYnVzY2FyJyxcbiAgICAgIGNhcmRpbmFsUG9pbnRzOiB7XG4gICAgICAgIG5vcnRoOiAnTicsXG4gICAgICAgIHNvdXRoOiAnUycsXG4gICAgICAgIGVhc3Q6ICdFJyxcbiAgICAgICAgd2VzdDogJ08nXG4gICAgICB9LFxuICAgICAgdXNlckVycm9yczoge1xuICAgICAgICByZXF1aXJlZDogJ0VsIGNhbXBvIGVzIG9ibGlnYXRvcmlvLicsXG4gICAgICAgIG1pbkxhdGl0dWRlOiAnTGEgbGF0aXR1ZCBtw61uaW1hIGVzICRtaW5MYXRpdHVkZS4nLFxuICAgICAgICBtYXhMYXRpdHVkZTogJ0xhIGxhdGl0dWQgbcOheGltYSBlcyAkbWF4TGF0aXR1ZGUuJyxcbiAgICAgICAgbWluTG9uZ2l0dWRlOiAnTGEgbG9uZ2l0dWQgbcOtbmltYSBlcyAkbWluTG9uZ2l0dWRlLicsXG4gICAgICAgIG1heExvbmdpdHVkZTogJ0xhIGxvbmdpdHVkIG3DoXhpbWEgZXMgJG1heExvbmdpdHVkZS4nXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5MYXRpdHVkZTogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4TGF0aXR1ZGU6IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIG1pbkxvbmdpdHVkZTogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4TG9uZ2l0dWRlOiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGVwOiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB6b29tOiBudW1iZXI7XG5cbiAgZ2V0IGNsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNoZWNrQ2xhc3NOYW1lKCk7XG4gIH1cblxuICBASW5wdXQoKSBsYW5nID0gbGFuZ3VhZ2VEZXRlY3RvcigpO1xuICBASW5wdXQoKSBwdWJsaWMgaW5saW5lRXJyb3JzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbnB1dElkOiBzdHJpbmc7XG4gIEBJbnB1dCgnYXJpYS1sYWJlbCcpIHB1YmxpYyBhcmlhTGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIHJlYWRvbmx5OiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgc2V0IGRpc2FibGVkKHY6IHN0cmluZyB8IGJvb2xlYW4pIHtcbiAgICB2ID0gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYgIT09ICdmYWxzZScgPyB0cnVlIDogdjtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHY7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCk6IHN0cmluZyB8IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCByZXF1aXJlZCh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSB2O1xuICB9XG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodjogR2VvUG9pbnQpIHtcbiAgICBpZiAodiA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybjsgLy8gcHJldmVudCBldmVudHMgd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2VzXG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxBbmRFbXB0eSA9IGlzSW5pdGlhbEFuZEVtcHR5KHRoaXMuX3ZhbHVlLCB2KTtcbiAgICBpZiAoXG4gICAgICB2ICYmXG4gICAgICB2LmNvb3JkaW5hdGVzICYmXG4gICAgICB2LmNvb3JkaW5hdGVzLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgZXhpc3RzKHYuY29vcmRpbmF0ZXNbMF0gJiYgZXhpc3RzKHYuY29vcmRpbmF0ZXNbMV0pKVxuICAgICkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgdGhpcy5zZXRMYXRpdHVkZUluQ29udHJvbCh2LmNvb3JkaW5hdGVzWzFdKTtcbiAgICAgIHRoaXMuc2V0TG9uZ2l0dWRlSW5Db250cm9sKHYuY29vcmRpbmF0ZXNbMF0pO1xuICAgIH0gZWxzZSBpZiAoIXYpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMuc2V0TGF0aXR1ZGVJbkNvbnRyb2wobnVsbCk7XG4gICAgICB0aGlzLnNldExvbmdpdHVkZUluQ29udHJvbChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgLy8gd2UgZG9uJ3Qgc2V0IHZhbHVlIGluIGNvbnRyb2wgaWYgdGhlIHZhbHVlIGlzIG5vdCB2YWxpZFxuICAgICAgLy8gaWYgd2UgZG8sIHRoZSBjb250ZW50IG9mIHRoZSBjb250cm9sIGNoYW5nZXMgYW5kIGNhbiBlcmFzZSB3aGF0IHRoZSB1c2VyIGlzIHR5cGluZ1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlKHYpO1xuICAgIGlmICghaW5pdGlhbEFuZEVtcHR5KSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodik7XG4gICAgfVxuICB9XG4gIGdldCB2YWx1ZSgpOiBHZW9Qb2ludCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9Qb2ludD4oKTtcbiAgQE91dHB1dCgpIGtleVByZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xuXG4gIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpOiB2b2lkID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHB1YmxpYyBsb2NhdGlvblNlcnZpY2U6IEdlb2xvY2F0aW9uU2VydmljZVxuICApIHt9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50b3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG4gIC8vIEVuZCBvZiBDb250cm9sVmFsdWVBY2Nlc3NvciBJbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cblxuICBwcml2YXRlIHNldExhdGl0dWRlSW5Db250cm9sKGxhdGl0dWRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmxhdGl0dWRlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBsYXRpdHVkZTtcbiAgICB0aGlzLmxhdGl0dWRlVmFsdWUgPSBsYXRpdHVkZTtcbiAgfVxuICBwcml2YXRlIHNldExvbmdpdHVkZUluQ29udHJvbChsb25naXR1ZGU6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIHRoaXMubG9uZ2l0dWRlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBsb25naXR1ZGU7XG4gICAgdGhpcy5sb25naXR1ZGVWYWx1ZSA9IGxvbmdpdHVkZTtcbiAgfVxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnNldExhdGl0dWRlSW5Db250cm9sKG51bGwpO1xuICAgIHRoaXMuc2V0TG9uZ2l0dWRlSW5Db250cm9sKG51bGwpO1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICB9XG4gIGlzQ2xlYXJhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBpc1ZhbGlkTnVtYmVyKHRoaXMubGF0aXR1ZGVWYWx1ZSkgfHwgaXNWYWxpZE51bWJlcih0aGlzLmxvbmdpdHVkZVZhbHVlKVxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0b3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoKTogdm9pZCB7fVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgbGV0IHJlc3VsdDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5yZXF1aXJlZCAmJlxuICAgICAgIWhhc1ZhbHVlKHZhbHVlKSAmJlxuICAgICAgIWV4aXN0cyh0aGlzLmxhdGl0dWRlVmFsdWUpICYmXG4gICAgICAhZXhpc3RzKHRoaXMubG9uZ2l0dWRlVmFsdWUpXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQucmVxdWlyZWQgPSB7IHZhbHVlLCByZWFzb246ICdSZXF1aXJlZCBmaWVsZC4nIH07XG4gICAgfVxuICAgIGlmICghZXhpc3RzKHRoaXMubGF0aXR1ZGVWYWx1ZSkgJiYgZXhpc3RzKHRoaXMubG9uZ2l0dWRlVmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQuZXhpc3RzTGF0aXR1ZGUgPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICByZWFzb246ICdMYXRpdHVkZSBub3Qgc3BlY2lmaWVkLidcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChleGlzdHModGhpcy5sYXRpdHVkZVZhbHVlKSAmJiAhZXhpc3RzKHRoaXMubG9uZ2l0dWRlVmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQuZXhpc3RzTG9uZ2l0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgcmVhc29uOiAnTG9uZ2l0dWRlIG5vdCBzcGVjaWZpZWQuJ1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGV4aXN0cyh0aGlzLm1pbkxhdGl0dWRlKSAmJiB0aGlzLmxhdGl0dWRlVmFsdWUgPCB0aGlzLm1pbkxhdGl0dWRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWluTGF0aXR1ZGUgPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBtaW46IHRoaXMubWluTGF0aXR1ZGUsXG4gICAgICAgIHJlYXNvbjogYExhdGl0dWRlIGlzIGxvd2VyIHRoYW4gbWluaW11bSB2YWx1ZTogJHt0aGlzLm1pbkxhdGl0dWRlfS5gXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZXhpc3RzKHRoaXMubWF4TGF0aXR1ZGUpICYmIHRoaXMubGF0aXR1ZGVWYWx1ZSA+IHRoaXMubWF4TGF0aXR1ZGUpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5tYXhMYXRpdHVkZSA9IHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG1heDogdGhpcy5tYXhMYXRpdHVkZSxcbiAgICAgICAgcmVhc29uOiBgTGF0aXR1ZGUgaXMgaGlnaGVyIHRoYW4gbWF4aW11bSB2YWx1ZTogJHt0aGlzLm1heExhdGl0dWRlfS5gXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZXhpc3RzKHRoaXMubWluTG9uZ2l0dWRlKSAmJiB0aGlzLmxvbmdpdHVkZVZhbHVlIDwgdGhpcy5taW5Mb25naXR1ZGUpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5taW5Mb25naXR1ZGUgPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBtaW46IHRoaXMubWluTG9uZ2l0dWRlLFxuICAgICAgICByZWFzb246IGBMb25naXR1ZGUgaXMgbG93ZXIgdGhhbiBtaW5pbXVtIHZhbHVlOiAke3RoaXMubWluTG9uZ2l0dWRlfS5gXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZXhpc3RzKHRoaXMubWF4TG9uZ2l0dWRlKSAmJiB0aGlzLmxvbmdpdHVkZVZhbHVlID4gdGhpcy5tYXhMb25naXR1ZGUpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5tYXhMb25naXR1ZGUgPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBtYXg6IHRoaXMubWF4TG9uZ2l0dWRlLFxuICAgICAgICByZWFzb246IGBMb25naXR1ZGUgaXMgaGlnaGVyIHRoYW4gbWF4aW11bSB2YWx1ZTogJHt0aGlzLm1heExvbmdpdHVkZX0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5sYXN0RXJyb3JzID0gcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gRW5kIG9mIFZhbGlkYXRvciBpbnRlcmZhY2VcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0SWQgPSB0aGlzLmlucHV0SWRcbiAgICAgID8gdGhpcy5pbnB1dElkXG4gICAgICA6IGBnZW9sb2NhdGlvbiQke0dlb2xvY2F0aW9uQ29tcG9uZW50LmlkQ291bnRlcisrfWA7XG4gICAgdGhpcy5zZXRQYXR0ZXJucygpO1xuICB9XG5cbiAgcm91bmRUb1N0ZXBBbmRVcGRhdGVMYXRpdHVkZUFuZExvbmdpdHVkZShcbiAgICBuZXdMYXRpdHVkZUFuZExvbmdpdHVkZTogbnVtYmVyW11cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbmV3TGF0aXR1ZGUgPSByb3VuZFRvTXVsdGlwbGVPZihcbiAgICAgIG5ld0xhdGl0dWRlQW5kTG9uZ2l0dWRlWzFdLFxuICAgICAgdGhpcy5zdGVwXG4gICAgKTtcbiAgICBjb25zdCBuZXdMb25naXR1ZGUgPSByb3VuZFRvTXVsdGlwbGVPZihcbiAgICAgIG5ld0xhdGl0dWRlQW5kTG9uZ2l0dWRlWzBdLFxuICAgICAgdGhpcy5zdGVwXG4gICAgKTtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZXhpc3RzKG5ld0xhdGl0dWRlQW5kTG9uZ2l0dWRlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB7XG4gICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgY29vcmRpbmF0ZXM6IFtuZXdMb25naXR1ZGUsIG5ld0xhdGl0dWRlXVxuICAgIH07XG4gIH1cblxuICBvbkxvc3RGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuICBvbkV2ZW50TGF0aXR1ZGUobmV3TGF0aXR1ZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV3TGF0aXR1ZGVWYWx1ZSA9IGlzVmFsaWROdW1iZXIobmV3TGF0aXR1ZGUpID8gK25ld0xhdGl0dWRlIDogbnVsbDtcbiAgICBpZiAoXG4gICAgICAhKGV4aXN0cyh0aGlzLnZhbHVlKSAmJiBleGlzdHModGhpcy52YWx1ZS5jb29yZGluYXRlc1swXSkpICYmXG4gICAgICAhZXhpc3RzKG5ld0xhdGl0dWRlVmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtcbiAgICAgICAgICB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZS5jb29yZGluYXRlc1swXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuZXdMYXRpdHVkZVZhbHVlXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICB9XG4gIG9uRXZlbnRMb25naXR1ZGUobmV3TG9uZ2l0dWRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld0xvbmdpdHVkZVZhbHVlID0gaXNWYWxpZE51bWJlcihuZXdMb25naXR1ZGUpXG4gICAgICA/ICtuZXdMb25naXR1ZGVcbiAgICAgIDogbnVsbDtcbiAgICBpZiAoXG4gICAgICAhZXhpc3RzKG5ld0xvbmdpdHVkZVZhbHVlKSAmJlxuICAgICAgIShleGlzdHModGhpcy52YWx1ZSkgJiYgZXhpc3RzKHRoaXMuX3ZhbHVlLmNvb3JkaW5hdGVzWzFdKSlcbiAgICApIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0ge1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogW1xuICAgICAgICAgIG5ld0xvbmdpdHVkZVZhbHVlLFxuICAgICAgICAgIHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlLmNvb3JkaW5hdGVzWzFdIDogdW5kZWZpbmVkXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICB9XG4gIG9uS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmtleVByZXNzLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgY2hlY2tDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFxuICAgICAgPyB0aGlzLnJlYWRvbmx5XG4gICAgICAgID8gJ2Rpc2FibGVkIHJlYWRvbmx5J1xuICAgICAgICA6ICdkaXNhYmxlZCdcbiAgICAgIDogdGhpcy5yZWFkb25seVxuICAgICAgPyAncmVhZG9ubHknXG4gICAgICA6ICcnO1xuICB9XG5cbiAgb3Blbk1vZGFsTWFwKG1vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCkucmVzdWx0LnRoZW4oXG4gICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgIT09ICdjYW5jZWwnKSB7XG4gICAgICAgICAgdGhpcy5yb3VuZFRvU3RlcEFuZFVwZGF0ZUxhdGl0dWRlQW5kTG9uZ2l0dWRlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoXykgPT4ge31cbiAgICApO1xuICB9XG5cbiAgb25TZWFyY2hMb2NhdGlvbkNoYW5nZWQobmV3VmFsdWU6IEdlb1BvaW50LCBtYXA6IGFueSk6IHZvaWQge1xuICAgIG1hcC5tYXJrZXJQb2ludCA9IG5ld1ZhbHVlO1xuICAgIG1hcC5jZW50ZXIgPSBtYXAubWFya2VyUG9pbnQ7XG4gIH1cblxuICBnZXQgbWFwVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQgfHwgISF0aGlzLnJlYWRvbmx5XG4gICAgICA/IHRoaXMuaTE4blt0aGlzLmxhbmddLmxvY2F0aW9uXG4gICAgICA6IHRoaXMuaTE4blt0aGlzLmxhbmddLnNlbGVjdExvY2F0aW9uO1xuICB9XG5cbiAgZ2V0IHNlbGYoKTogR2VvbG9jYXRpb25Db21wb25lbnQge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0TGFiZWxzKFxuICAgIGluc3RhbmNlOiBHZW9sb2NhdGlvbkNvbXBvbmVudCxcbiAgICBrZXlzOiBHZW9Qb2ludFtdXG4gICk6IE9ic2VydmFibGU8RGF0YVNvdXJjZTxHZW9Qb2ludCwgc3RyaW5nPj4ge1xuICAgIHJldHVybiBpbnN0YW5jZS5sb2NhdGlvblNlcnZpY2UuZ2V0TGFiZWxzKGluc3RhbmNlLmxvY2F0aW9uU2VydmljZSwga2V5cyk7XG4gIH1cblxuICBnZXREYXRhKFxuICAgIGluc3RhbmNlOiBHZW9sb2NhdGlvbkNvbXBvbmVudCxcbiAgICBzZWFyY2g6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPERhdGFTb3VyY2U8R2VvUG9pbnQsIHN0cmluZz4+IHtcbiAgICByZXR1cm4gaW5zdGFuY2UubG9jYXRpb25TZXJ2aWNlLmdldERhdGEoaW5zdGFuY2UubG9jYXRpb25TZXJ2aWNlLCBzZWFyY2gpO1xuICB9XG5cbiAgc2V0UGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwID0gdGhpcy5zdGVwIHx8IDAuMDAwMDE7IC8vIDAuMDAwMDEgZGVncmVlcyA9IDEuMTEgbWV0ZXJzXG4gICAgdGhpcy56b29tID0gdGhpcy56b29tIHx8IDE4OyAvLyAoMzYwLzJeMTgpIGRlZ3JlZXMgfiAwLjAwMTM3IGRlZ3JlZXMgfiAxNTMgbWV0ZXJzXG4gICAgdGhpcy5taW5MYXRpdHVkZSA9IHRoaXMubWluTGF0aXR1ZGUgfHwgLTkwO1xuICAgIHRoaXMubWF4TGF0aXR1ZGUgPSB0aGlzLm1heExhdGl0dWRlIHx8ICs5MDtcbiAgICB0aGlzLm1pbkxvbmdpdHVkZSA9IHRoaXMubWluTG9uZ2l0dWRlIHx8IC0xODA7XG4gICAgdGhpcy5tYXhMb25naXR1ZGUgPSB0aGlzLm1heExvbmdpdHVkZSB8fCArMTgwO1xuICB9XG59XG4iLCI8aW5wdXRcbiAgI2xhdGl0dWRlXG4gIGNsYXNzPVwicm91bmRlZC1sZWZ0IHByZWZpeFwiXG4gIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICBbaWRdPVwiaW5wdXRJZCArICckbGF0aXR1ZGUnXCJcbiAgWyhuZ01vZGVsKV09XCJsYXRpdHVkZVZhbHVlXCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6IHVuZGVmaW5lZFwiXG4gIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID09PSB0cnVlID8gJ3RydWUnIDogdW5kZWZpbmVkXCJcbiAgW2F0dHIubWluXT1cIlxuICAgIG1pbkxhdGl0dWRlICE9PSB1bmRlZmluZWQgJiYgbWluTGF0aXR1ZGUgIT09IG51bGxcbiAgICAgID8gbWluTGF0aXR1ZGUudG9TdHJpbmcoKVxuICAgICAgOiB1bmRlZmluZWRcbiAgXCJcbiAgW2F0dHIubWF4XT1cIlxuICAgIG1heExhdGl0dWRlICE9PSB1bmRlZmluZWQgJiYgbWF4TGF0aXR1ZGUgIT09IG51bGxcbiAgICAgID8gbWF4TGF0aXR1ZGUudG9TdHJpbmcoKVxuICAgICAgOiB1bmRlZmluZWRcbiAgXCJcbiAgW2F0dHIuc3RlcF09XCJcbiAgICBzdGVwICE9PSB1bmRlZmluZWQgJiYgc3RlcCAhPT0gbnVsbCA/IHN0ZXAudG9TdHJpbmcoKSA6IHVuZGVmaW5lZFxuICBcIlxuICBbcGxhY2Vob2xkZXJdPVwiaTE4bltsYW5nXS5sYXRcIlxuICAoa2V5dXApPVwib25FdmVudExhdGl0dWRlKGxhdGl0dWRlLnZhbHVlKVwiXG4gIChjaGFuZ2UpPVwib25FdmVudExhdGl0dWRlKGxhdGl0dWRlLnZhbHVlKVwiXG4gIChrZXlwcmVzcyk9XCJvbktleVByZXNzKCRldmVudClcIlxuICAoYmx1cik9XCJvbkxvc3RGb2N1cygpXCJcbi8+XG48ZGl2XG4gIGNsYXNzPVwiaW5maXggc3ltYm9sIG1vbm9zcGFjZSBjbGlja2FibGVcIlxuICBbbmdDbGFzc109XCJjbGFzc05hbWVcIlxuICAoY2xpY2spPVwib3Blbk1vZGFsTWFwKG1vZGFsTWFwKVwiPlxuICA8c3BhbiAqbmdJZj1cImlzVmFsaWROdW1iZXIobGF0aXR1ZGVWYWx1ZSkgJiYgbGF0aXR1ZGVWYWx1ZSA+PSAwXCI+e3tcbiAgICBpMThuW2xhbmddLmNhcmRpbmFsUG9pbnRzLm5vcnRoXG4gIH19PC9zcGFuPlxuICA8c3BhbiAqbmdJZj1cImlzVmFsaWROdW1iZXIobGF0aXR1ZGVWYWx1ZSkgJiYgbGF0aXR1ZGVWYWx1ZSA8IDBcIj57e1xuICAgIGkxOG5bbGFuZ10uY2FyZGluYWxQb2ludHMuc291dGhcbiAgfX08L3NwYW4+XG4gIDxzcGFuICpuZ0lmPVwiIWlzVmFsaWROdW1iZXIobGF0aXR1ZGVWYWx1ZSlcIj4tPC9zcGFuPlxuPC9kaXY+XG48aW5wdXRcbiAgI2xvbmdpdHVkZVxuICBjbGFzcz1cInByZWZpeFwiXG4gIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICBbaWRdPVwiaW5wdXRJZCArICckbG9uZ2l0dWRlJ1wiXG4gIFsobmdNb2RlbCldPVwibG9uZ2l0dWRlVmFsdWVcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID09PSB0cnVlID8gJ3RydWUnIDogdW5kZWZpbmVkXCJcbiAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICBbYXR0ci5taW5dPVwiXG4gICAgbWluTG9uZ2l0dWRlICE9PSB1bmRlZmluZWQgJiYgbWluTG9uZ2l0dWRlICE9PSBudWxsXG4gICAgICA/IG1pbkxvbmdpdHVkZS50b1N0cmluZygpXG4gICAgICA6IHVuZGVmaW5lZFxuICBcIlxuICBbYXR0ci5tYXhdPVwiXG4gICAgbWF4TG9uZ2l0dWRlICE9PSB1bmRlZmluZWQgJiYgbWF4TG9uZ2l0dWRlICE9PSBudWxsXG4gICAgICA/IG1heExvbmdpdHVkZS50b1N0cmluZygpXG4gICAgICA6IHVuZGVmaW5lZFxuICBcIlxuICBbYXR0ci5zdGVwXT1cIlxuICAgIHN0ZXAgIT09IHVuZGVmaW5lZCAmJiBzdGVwICE9PSBudWxsID8gc3RlcC50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIFwiXG4gIFtwbGFjZWhvbGRlcl09XCJpMThuW2xhbmddLmxvblwiXG4gIChrZXl1cCk9XCJvbkV2ZW50TG9uZ2l0dWRlKGxvbmdpdHVkZS52YWx1ZSlcIlxuICAoY2hhbmdlKT1cIm9uRXZlbnRMb25naXR1ZGUobG9uZ2l0dWRlLnZhbHVlKVwiXG4gIChrZXlwcmVzcyk9XCJvbktleVByZXNzKCRldmVudClcIlxuICAoYmx1cik9XCJvbkxvc3RGb2N1cygpXCJcbi8+XG48ZGl2XG4gIGNsYXNzPVwiaW5maXggc3ltYm9sIG1vbm9zcGFjZSBjbGlja2FibGVcIlxuICBbbmdDbGFzc109XCJjbGFzc05hbWVcIlxuICAoY2xpY2spPVwib3Blbk1vZGFsTWFwKG1vZGFsTWFwKVwiXG4+XG4gIDxzcGFuICpuZ0lmPVwiaXNWYWxpZE51bWJlcihsb25naXR1ZGVWYWx1ZSkgJiYgbG9uZ2l0dWRlVmFsdWUgPj0gMFwiPnt7XG4gICAgaTE4bltsYW5nXS5jYXJkaW5hbFBvaW50cy5lYXN0XG4gIH19PC9zcGFuPlxuICA8c3BhbiAqbmdJZj1cImlzVmFsaWROdW1iZXIobG9uZ2l0dWRlVmFsdWUpICYmIGxvbmdpdHVkZVZhbHVlIDwgMFwiPnt7XG4gICAgaTE4bltsYW5nXS5jYXJkaW5hbFBvaW50cy53ZXN0XG4gIH19PC9zcGFuPlxuICA8c3BhbiAqbmdJZj1cIiFpc1ZhbGlkTnVtYmVyKGxvbmdpdHVkZVZhbHVlKVwiPi08L3NwYW4+XG48L2Rpdj5cbjxkaXZcbiAgW2NsYXNzXT1cIlxuICAgIGRpc2FibGVkIHx8IHJlYWRvbmx5IHx8ICFpc0NsZWFyYWJsZSgpXG4gICAgICA/ICdjbGlja2FibGUgcm91bmRlZC1yaWdodCBwb3N0Zml4IHN5bWJvbCdcbiAgICAgIDogJ2NsaWNrYWJsZSBwb3N0Zml4IHN5bWJvbCdcbiAgXCJcbiAgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCJcbiAgKGNsaWNrKT1cIm9wZW5Nb2RhbE1hcChtb2RhbE1hcClcIlxuPlxuICA8c3BhbiBjbGFzcz1cImljb24tZ2xvYmVcIj48L3NwYW4+XG48L2Rpdj5cbjxidXR0b25cbiAgI2NsZWFyQnV0dG9uXG4gICpuZ0lmPVwiIWRpc2FibGVkICYmICFyZWFkb25seSAmJiBpc0NsZWFyYWJsZSgpXCJcbiAgY2xhc3M9XCJyb3VuZGVkLXJpZ2h0IHBvc3RmaXggYm9yZGVyZWQgaWNvbiBpY29uLWNsZWFyXCJcbiAgW2lkXT1cImlucHV0SWQgKyAnJGNsZWFyJ1wiXG4gIHR5cGU9XCJidXR0b25cIlxuICAoY2xpY2spPVwiY2xlYXIoKVwiXG4gIGFyaWEtbGFiZWw9XCJjbGVhclwiXG4+PC9idXR0b24+XG5cbjxkaXYgKm5nSWY9XCJpbmxpbmVFcnJvcnMgJiYgbGFzdEVycm9ycyAmJiAoZGlydHkgfHwgdG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0XCI+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLnJlcXVpcmVkXCI+XG4gICAge3sgaTE4bltsYW5nXS51c2VyRXJyb3JzLnJlcXVpcmVkIH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwibGFzdEVycm9ycy5taW5MYXRpdHVkZVwiPlxuICAgIHt7XG4gICAgICBpMThuW2xhbmddLnVzZXJFcnJvcnMubWluTGF0aXR1ZGUucmVwbGFjZShcbiAgICAgICAgJyRtaW5MYXRpdHVkZScsXG4gICAgICAgIGxhc3RFcnJvcnMubWluTGF0aXR1ZGUubWluXG4gICAgICApXG4gICAgfX1cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLm1heExhdGl0dWRlXCI+XG4gICAge3tcbiAgICAgIGkxOG5bbGFuZ10udXNlckVycm9ycy5tYXhMYXRpdHVkZS5yZXBsYWNlKFxuICAgICAgICAnJG1heExhdGl0dWRlJyxcbiAgICAgICAgbGFzdEVycm9ycy5tYXhMYXRpdHVkZS5tYXhcbiAgICAgIClcbiAgICB9fVxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImxhc3RFcnJvcnMubWluTG9uZ2l0dWRlXCI+XG4gICAge3tcbiAgICAgIGkxOG5bbGFuZ10udXNlckVycm9ycy5taW5Mb25naXR1ZGUucmVwbGFjZShcbiAgICAgICAgJyRtaW5Mb25naXR1ZGUnLFxuICAgICAgICBsYXN0RXJyb3JzLm1pbkxvbmdpdHVkZS5taW5cbiAgICAgIClcbiAgICB9fVxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImxhc3RFcnJvcnMubWF4TG9uZ2l0dWRlXCI+XG4gICAge3tcbiAgICAgIGkxOG5bbGFuZ10udXNlckVycm9ycy5tYXhMb25naXR1ZGUucmVwbGFjZShcbiAgICAgICAgJyRtYXhMb25naXR1ZGUnLFxuICAgICAgICBsYXN0RXJyb3JzLm1heExvbmdpdHVkZS5tYXhcbiAgICAgIClcbiAgICB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21vZGFsTWFwIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cImx1eC1tb2RhbC1oZWFkZXJcIj5cbiAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZSBkZWZhdWx0LWZvbnRcIiBpZD1cIm1vZGFsLWJhc2ljLXRpdGxlXCI+e3sgbWFwVGl0bGUgfX08L2g0PlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJjbG9zZVwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoJ0Nyb3NzIGNsaWNrJylcIlxuICAgID5cbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPsOXPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImx1eC1tb2RhbC1ib2R5IGNvbnRlbnRcIj5cbiAgICA8bHV4LWF1dG9jb21wbGV0ZVxuICAgICAgI3NlYXJjaEJhclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpMThuW2xhbmddLnR5cGVUb1NlYXJjaFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiaTE4bltsYW5nXS50eXBlVG9TZWFyY2hcIlxuICAgICAgKm5nSWY9XCIhZGlzYWJsZWQgJiYgIXJlYWRvbmx5XCJcbiAgICAgIFtpbnN0YW5jZV09XCJzZWxmXCJcbiAgICAgIFtyZXNvbHZlTGFiZWxzRnVuY3Rpb25dPVwiZ2V0TGFiZWxzXCJcbiAgICAgIFtwb3B1bGF0ZUZ1bmN0aW9uXT1cImdldERhdGFcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uU2VhcmNoTG9jYXRpb25DaGFuZ2VkKHNlYXJjaEJhci52YWx1ZSwgbWFwKVwiXG4gICAgPjwvbHV4LWF1dG9jb21wbGV0ZT5cbiAgICA8ZGl2IGNsYXNzPVwibWFwLWNvbnRhaW5lclwiPlxuICAgICAgPGx1eC1tYXBcbiAgICAgICAgI21hcFxuICAgICAgICBbY2VudGVyXT1cInZhbHVlXCJcbiAgICAgICAgW21hcmtlclBvaW50XT1cInZhbHVlXCJcbiAgICAgICAgW3pvb21dPVwiem9vbVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSA9PT0gdHJ1ZSB8fCBkaXNhYmxlZCA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICA+PC9sdXgtbWFwPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImx1eC1tb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLWNhbmNlbFwiXG4gICAgICAoY2xpY2spPVwibW9kYWwuY2xvc2UoJ2NhbmNlbCcpXCJcbiAgICA+XG4gICAgICB7eyBpMThuW2xhbmddLmNsb3NlQWN0aW9uIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCIhZGlzYWJsZWQgJiYgIXJlYWRvbmx5XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLWNhbmNlbFwiXG4gICAgICAoY2xpY2spPVwibW9kYWwuY2xvc2UoJ2NhbmNlbCcpXCJcbiAgICA+XG4gICAgICB7eyBpMThuW2xhbmddLmNhbmNlbEFjdGlvbiB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiIWRpc2FibGVkICYmICFyZWFkb25seVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWxlY3RcIlxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKG1hcC5tYXJrZXJQb2ludC5jb29yZGluYXRlcylcIlxuICAgID5cbiAgICAgIHt7IGkxOG5bbGFuZ10uc2VsZWN0QWN0aW9uIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
407
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsYUFBYSxFQUNiLGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2xCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7O0FBbUIzRCxNQUFNLE9BQU8sb0JBQW9CO0lBa0YvQixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBUUQsSUFDSSxRQUFRLENBQUMsQ0FBbUI7UUFDOUIsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFB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bnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vZGF0YXNvdXJjZSc7XG5pbXBvcnQge1xuICBleGlzdHMsXG4gIGhhc1ZhbHVlLFxuICBpc0luaXRpYWxBbmRFbXB0eSxcbiAgaXNWYWxpZE51bWJlcixcbiAgcm91bmRUb011bHRpcGxlT2Zcbn0gZnJvbSAnLi4vaGVscGVyRm5zJztcbmltcG9ydCB7IGxhbmd1YWdlRGV0ZWN0b3IgfSBmcm9tICcuLi9sYW5nJztcbmltcG9ydCB7IEdlb1BvaW50IH0gZnJvbSAnLi4vbWFwL2dlb3BvaW50JztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VvbG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9nZW9sb2NhdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHV4LWdlb2xvY2F0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlb2xvY2F0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2VvbG9jYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdlb2xvY2F0aW9uQ29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR2VvbG9jYXRpb25Db21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEdlb2xvY2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc3RhdGljIGlkQ291bnRlciA9IDA7XG5cbiAgQFZpZXdDaGlsZCgnbGF0aXR1ZGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBsYXRpdHVkZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbG9uZ2l0dWRlJywgeyBzdGF0aWM6IHRydWUgfSkgbG9uZ2l0dWRlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtYXAnLCB7IHN0YXRpYzogZmFsc2UgfSkgbWFwPzogRWxlbWVudFJlZjtcblxuICB0b3VjaGVkID0gZmFsc2U7XG4gIGRpcnR5ID0gZmFsc2U7XG4gIGxhc3RFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9kaXNhYmxlZDogc3RyaW5nIHwgYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG5cbiAgbGF0aXR1ZGVWYWx1ZT86IG51bWJlciA9IHVuZGVmaW5lZDtcbiAgbG9uZ2l0dWRlVmFsdWU/OiBudW1iZXIgPSB1bmRlZmluZWQ7XG5cbiAgaXNWYWxpZE51bWJlciA9IGlzVmFsaWROdW1iZXI7XG5cbiAgaTE4biA9IHtcbiAgICBlbjoge1xuICAgICAgbGF0OiAnbGF0aXR1ZGUnLFxuICAgICAgbG9uOiAnbG9uZ2l0dWRlJyxcbiAgICAgIHNlbGVjdExvY2F0aW9uOiAnU2VsZWN0IGxvY2F0aW9uJyxcbiAgICAgIGxvY2F0aW9uOiAnTG9jYXRpb24nLFxuICAgICAgc2VsZWN0QWN0aW9uOiAnU2VsZWN0JyxcbiAgICAgIGNhbmNlbEFjdGlvbjogJ0NhbmNlbCcsXG4gICAgICBjbG9zZUFjdGlvbjogJ0Nsb3NlJyxcbiAgICAgIHR5cGVUb1NlYXJjaDogJ3R5cGUgdG8gc2VhcmNoJyxcbiAgICAgIGNhcmRpbmFsUG9pbnRzOiB7XG4gICAgICAgIG5vcnRoOiAnTicsXG4gICAgICAgIHNvdXRoOiAnUycsXG4gICAgICAgIGVhc3Q6ICdFJyxcbiAgICAgICAgd2VzdDogJ1cnXG4gICAgICB9LFxuICAgICAgdXNlckVycm9yczoge1xuICAgICAgICByZXF1aXJlZDogJ1JlcXVpcmVkIGZpZWxkLicsXG4gICAgICAgIG1pbkxhdGl0dWRlOiAnTWluaW11bSBsYXRpdHVkZSBpcyAkbWluTGF0aXR1ZGUuJyxcbiAgICAgICAgbWF4TGF0aXR1ZGU6ICdNYXhpbXVtIGxhdGl0dWRlIGlzICRtYXhMYXRpdHVkZS4nLFxuICAgICAgICBtaW5Mb25naXR1ZGU6ICdNaW5pbXVtIGxvbmdpdHVkZSBpcyAkbWluTG9uZ2l0dWRlLicsXG4gICAgICAgIG1heExvbmdpdHVkZTogJ01heGltdW0gbG9uZ2l0dWRlIGlzICRtYXhMb25naXR1ZGUuJ1xuICAgICAgfVxuICAgIH0sXG4gICAgZXM6IHtcbiAgICAgIGxhdDogJ2xhdGl0dWQnLFxuICAgICAgbG9uOiAnbG9uZ2l0dWQnLFxuICAgICAgc2VsZWN0TG9jYXRpb246ICdTZWxlY2Npb25lIHViaWNhY2nDs24nLFxuICAgICAgbG9jYXRpb246ICdVYmljYWNpw7NuJyxcbiAgICAgIHNlbGVjdEFjdGlvbjogJ1NlbGVjY2lvbmFyJyxcbiAgICAgIGNhbmNlbEFjdGlvbjogJ0NhbmNlbGFyJyxcbiAgICAgIGNsb3NlQWN0aW9uOiAnQ2VycmFyJyxcbiAgICAgIHR5cGVUb1NlYXJjaDogJ2VzY3JpYmUgcGFyYSBidXNjYXInLFxuICAgICAgY2FyZGluYWxQb2ludHM6IHtcbiAgICAgICAgbm9ydGg6ICdOJyxcbiAgICAgICAgc291dGg6ICdTJyxcbiAgICAgICAgZWFzdDogJ0UnLFxuICAgICAgICB3ZXN0OiAnTydcbiAgICAgIH0sXG4gICAgICB1c2VyRXJyb3JzOiB7XG4gICAgICAgIHJlcXVpcmVkOiAnRWwgY2FtcG8gZXMgb2JsaWdhdG9yaW8uJyxcbiAgICAgICAgbWluTGF0aXR1ZGU6ICdMYSBsYXRpdHVkIG3DrW5pbWEgZXMgJG1pbkxhdGl0dWRlLicsXG4gICAgICAgIG1heExhdGl0dWRlOiAnTGEgbGF0aXR1ZCBtw6F4aW1hIGVzICRtYXhMYXRpdHVkZS4nLFxuICAgICAgICBtaW5Mb25naXR1ZGU6ICdMYSBsb25naXR1ZCBtw61uaW1hIGVzICRtaW5Mb25naXR1ZGUuJyxcbiAgICAgICAgbWF4TG9uZ2l0dWRlOiAnTGEgbG9uZ2l0dWQgbcOheGltYSBlcyAkbWF4TG9uZ2l0dWRlLidcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1pbkxhdGl0dWRlOiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhMYXRpdHVkZTogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluTG9uZ2l0dWRlOiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhMb25naXR1ZGU6IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIHN0ZXA6IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIHpvb206IG51bWJlcjtcblxuICBnZXQgY2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tDbGFzc05hbWUoKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGxhbmcgPSBsYW5ndWFnZURldGVjdG9yKCk7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbmxpbmVFcnJvcnMgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGlucHV0SWQ6IHN0cmluZztcbiAgQElucHV0KCdhcmlhLWxhYmVsJykgcHVibGljIGFyaWFMYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgcmVhZG9ubHk6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodjogc3RyaW5nIHwgYm9vbGVhbikge1xuICAgIHYgPSB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdiAhPT0gJ2ZhbHNlJyA/IHRydWUgOiB2O1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdjtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogc3RyaW5nIHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJlcXVpcmVkKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IHY7XG4gIH1cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2OiBHZW9Qb2ludCkge1xuICAgIGlmICh2ID09PSB0aGlzLl92YWx1ZSkge1xuICAgICAgcmV0dXJuOyAvLyBwcmV2ZW50IGV2ZW50cyB3aGVuIHRoZXJlIGlzIG5vIGNoYW5nZXNcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbEFuZEVtcHR5ID0gaXNJbml0aWFsQW5kRW1wdHkodGhpcy5fdmFsdWUsIHYpO1xuICAgIGlmIChcbiAgICAgIHYgJiZcbiAgICAgIHYuY29vcmRpbmF0ZXMgJiZcbiAgICAgIHYuY29vcmRpbmF0ZXMubGVuZ3RoID09PSAyICYmXG4gICAgICBleGlzdHModi5jb29yZGluYXRlc1swXSAmJiBleGlzdHModi5jb29yZGluYXRlc1sxXSkpXG4gICAgKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgICB0aGlzLnNldExhdGl0dWRlSW5Db250cm9sKHYuY29vcmRpbmF0ZXNbMV0pO1xuICAgICAgdGhpcy5zZXRMb25naXR1ZGVJbkNvbnRyb2wodi5jb29yZGluYXRlc1swXSk7XG4gICAgfSBlbHNlIGlmICghdikge1xuICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5zZXRMYXRpdHVkZUluQ29udHJvbChudWxsKTtcbiAgICAgIHRoaXMuc2V0TG9uZ2l0dWRlSW5Db250cm9sKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgICAvLyB3ZSBkb24ndCBzZXQgdmFsdWUgaW4gY29udHJvbCBpZiB0aGUgdmFsdWUgaXMgbm90IHZhbGlkXG4gICAgICAvLyBpZiB3ZSBkbywgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbnRyb2wgY2hhbmdlcyBhbmQgY2FuIGVyYXNlIHdoYXQgdGhlIHVzZXIgaXMgdHlwaW5nXG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2Uodik7XG4gICAgaWYgKCFpbml0aWFsQW5kRW1wdHkpIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2KTtcbiAgICB9XG4gIH1cbiAgZ2V0IHZhbHVlKCk6IEdlb1BvaW50IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdlb1BvaW50PigpO1xuICBAT3V0cHV0KCkga2V5UHJlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgb25DaGFuZ2UgPSAodmFsdWU6IGFueSk6IHZvaWQgPT4ge307XG4gIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHVibGljIGxvY2F0aW9uU2VydmljZTogR2VvbG9jYXRpb25TZXJ2aWNlXG4gICkge31cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBJbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IG9uQ2hhbmdlO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgfVxuXG4gIG1hcmtBc1RvdWNoZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cbiAgLy8gRW5kIG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yIEludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuXG4gIHByaXZhdGUgc2V0TGF0aXR1ZGVJbkNvbnRyb2wobGF0aXR1ZGU6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIHRoaXMubGF0aXR1ZGUubmF0aXZlRWxlbWVudC52YWx1ZSA9IGxhdGl0dWRlO1xuICAgIHRoaXMubGF0aXR1ZGVWYWx1ZSA9IGxhdGl0dWRlO1xuICB9XG4gIHByaXZhdGUgc2V0TG9uZ2l0dWRlSW5Db250cm9sKGxvbmdpdHVkZTogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gdGhpcy5sb25naXR1ZGUubmF0aXZlRWxlbWVudC52YWx1ZSA9IGxvbmdpdHVkZTtcbiAgICB0aGlzLmxvbmdpdHVkZVZhbHVlID0gbG9uZ2l0dWRlO1xuICB9XG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0TGF0aXR1ZGVJbkNvbnRyb2wobnVsbCk7XG4gICAgdGhpcy5zZXRMb25naXR1ZGVJbkNvbnRyb2wobnVsbCk7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cbiAgaXNDbGVhcmFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzVmFsaWROdW1iZXIodGhpcy5sYXRpdHVkZVZhbHVlKSB8fCBpc1ZhbGlkTnVtYmVyKHRoaXMubG9uZ2l0dWRlVmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSgpOiB2b2lkIHt9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBsZXQgcmVzdWx0OiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnJlcXVpcmVkICYmXG4gICAgICAhaGFzVmFsdWUodmFsdWUpICYmXG4gICAgICAhZXhpc3RzKHRoaXMubGF0aXR1ZGVWYWx1ZSkgJiZcbiAgICAgICFleGlzdHModGhpcy5sb25naXR1ZGVWYWx1ZSlcbiAgICApIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5yZXF1aXJlZCA9IHsgdmFsdWUsIHJlYXNvbjogJ1JlcXVpcmVkIGZpZWxkLicgfTtcbiAgICB9XG4gICAgaWYgKCFleGlzdHModGhpcy5sYXRpdHVkZVZhbHVlKSAmJiBleGlzdHModGhpcy5sb25naXR1ZGVWYWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5leGlzdHNMYXRpdHVkZSA9IHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHJlYXNvbjogJ0xhdGl0dWRlIG5vdCBzcGVjaWZpZWQuJ1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGV4aXN0cyh0aGlzLmxhdGl0dWRlVmFsdWUpICYmICFleGlzdHModGhpcy5sb25naXR1ZGVWYWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5leGlzdHNMb25naXR1ZGUgPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICByZWFzb246ICdMb25naXR1ZGUgbm90IHNwZWNpZmllZC4nXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZXhpc3RzKHRoaXMubWluTGF0aXR1ZGUpICYmIHRoaXMubGF0aXR1ZGVWYWx1ZSA8IHRoaXMubWluTGF0aXR1ZGUpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5taW5MYXRpdHVkZSA9IHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG1pbjogdGhpcy5taW5MYXRpdHVkZSxcbiAgICAgICAgcmVhc29uOiBgTGF0aXR1ZGUgaXMgbG93ZXIgdGhhbiBtaW5pbXVtIHZhbHVlOiAke3RoaXMubWluTGF0aXR1ZGV9LmBcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChleGlzdHModGhpcy5tYXhMYXRpdHVkZSkgJiYgdGhpcy5sYXRpdHVkZVZhbHVlID4gdGhpcy5tYXhMYXRpdHVkZSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0Lm1heExhdGl0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWF4OiB0aGlzLm1heExhdGl0dWRlLFxuICAgICAgICByZWFzb246IGBMYXRpdHVkZSBpcyBoaWdoZXIgdGhhbiBtYXhpbXVtIHZhbHVlOiAke3RoaXMubWF4TGF0aXR1ZGV9LmBcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChleGlzdHModGhpcy5taW5Mb25naXR1ZGUpICYmIHRoaXMubG9uZ2l0dWRlVmFsdWUgPCB0aGlzLm1pbkxvbmdpdHVkZSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0Lm1pbkxvbmdpdHVkZSA9IHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG1pbjogdGhpcy5taW5Mb25naXR1ZGUsXG4gICAgICAgIHJlYXNvbjogYExvbmdpdHVkZSBpcyBsb3dlciB0aGFuIG1pbmltdW0gdmFsdWU6ICR7dGhpcy5taW5Mb25naXR1ZGV9LmBcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChleGlzdHModGhpcy5tYXhMb25naXR1ZGUpICYmIHRoaXMubG9uZ2l0dWRlVmFsdWUgPiB0aGlzLm1heExvbmdpdHVkZSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0Lm1heExvbmdpdHVkZSA9IHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG1heDogdGhpcy5tYXhMb25naXR1ZGUsXG4gICAgICAgIHJlYXNvbjogYExvbmdpdHVkZSBpcyBoaWdoZXIgdGhhbiBtYXhpbXVtIHZhbHVlOiAke3RoaXMubWF4TG9uZ2l0dWRlfS5gXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLmxhc3RFcnJvcnMgPSByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvLyBFbmQgb2YgVmFsaWRhdG9yIGludGVyZmFjZVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRJZCA9IHRoaXMuaW5wdXRJZFxuICAgICAgPyB0aGlzLmlucHV0SWRcbiAgICAgIDogYGdlb2xvY2F0aW9uJCR7R2VvbG9jYXRpb25Db21wb25lbnQuaWRDb3VudGVyKyt9YDtcbiAgICB0aGlzLnNldFBhdHRlcm5zKCk7XG4gIH1cblxuICByb3VuZFRvU3RlcEFuZFVwZGF0ZUxhdGl0dWRlQW5kTG9uZ2l0dWRlKFxuICAgIG5ld0xhdGl0dWRlQW5kTG9uZ2l0dWRlOiBudW1iZXJbXVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBuZXdMYXRpdHVkZSA9IHJvdW5kVG9NdWx0aXBsZU9mKFxuICAgICAgbmV3TGF0aXR1ZGVBbmRMb25naXR1ZGVbMV0sXG4gICAgICB0aGlzLnN0ZXBcbiAgICApO1xuICAgIGNvbnN0IG5ld0xvbmdpdHVkZSA9IHJvdW5kVG9NdWx0aXBsZU9mKFxuICAgICAgbmV3TGF0aXR1ZGVBbmRMb25naXR1ZGVbMF0sXG4gICAgICB0aGlzLnN0ZXBcbiAgICApO1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFleGlzdHMobmV3TGF0aXR1ZGVBbmRMb25naXR1ZGUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICBjb29yZGluYXRlczogW25ld0xvbmdpdHVkZSwgbmV3TGF0aXR1ZGVdXG4gICAgfTtcbiAgfVxuXG4gIG9uTG9zdEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICB9XG4gIG9uRXZlbnRMYXRpdHVkZShuZXdMYXRpdHVkZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdMYXRpdHVkZVZhbHVlID0gaXNWYWxpZE51bWJlcihuZXdMYXRpdHVkZSkgPyArbmV3TGF0aXR1ZGUgOiBudWxsO1xuICAgIGlmIChcbiAgICAgICEoZXhpc3RzKHRoaXMudmFsdWUpICYmIGV4aXN0cyh0aGlzLnZhbHVlLmNvb3JkaW5hdGVzWzBdKSkgJiZcbiAgICAgICFleGlzdHMobmV3TGF0aXR1ZGVWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0ge1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogW1xuICAgICAgICAgIHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlLmNvb3JkaW5hdGVzWzBdIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG5ld0xhdGl0dWRlVmFsdWVcbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgb25FdmVudExvbmdpdHVkZShuZXdMb25naXR1ZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV3TG9uZ2l0dWRlVmFsdWUgPSBpc1ZhbGlkTnVtYmVyKG5ld0xvbmdpdHVkZSlcbiAgICAgID8gK25ld0xvbmdpdHVkZVxuICAgICAgOiBudWxsO1xuICAgIGlmIChcbiAgICAgICFleGlzdHMobmV3TG9uZ2l0dWRlVmFsdWUpICYmXG4gICAgICAhKGV4aXN0cyh0aGlzLnZhbHVlKSAmJiBleGlzdHModGhpcy5fdmFsdWUuY29vcmRpbmF0ZXNbMV0pKVxuICAgICkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbXG4gICAgICAgICAgbmV3TG9uZ2l0dWRlVmFsdWUsXG4gICAgICAgICAgdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUuY29vcmRpbmF0ZXNbMV0gOiB1bmRlZmluZWRcbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMua2V5UHJlc3MuZW1pdChldmVudCk7XG4gIH1cblxuICBjaGVja0NsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkXG4gICAgICA/IHRoaXMucmVhZG9ubHlcbiAgICAgICAgPyAnZGlzYWJsZWQgcmVhZG9ubHknXG4gICAgICAgIDogJ2Rpc2FibGVkJ1xuICAgICAgOiB0aGlzLnJlYWRvbmx5XG4gICAgICA/ICdyZWFkb25seSdcbiAgICAgIDogJyc7XG4gIH1cblxuICBvcGVuTW9kYWxNYXAobW9kYWw6IFRlbXBsYXRlUmVmPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKG1vZGFsKS5yZXN1bHQudGhlbihcbiAgICAgIChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gJ2NhbmNlbCcpIHtcbiAgICAgICAgICB0aGlzLnJvdW5kVG9TdGVwQW5kVXBkYXRlTGF0aXR1ZGVBbmRMb25naXR1ZGUocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChfKSA9PiB7fVxuICAgICk7XG4gIH1cblxuICBvblNlYXJjaExvY2F0aW9uQ2hhbmdlZChuZXdWYWx1ZTogR2VvUG9pbnQsIG1hcDogYW55KTogdm9pZCB7XG4gICAgbWFwLm1hcmtlclBvaW50ID0gbmV3VmFsdWU7XG4gICAgbWFwLmNlbnRlciA9IG1hcC5tYXJrZXJQb2ludDtcbiAgfVxuXG4gIGdldCBtYXBUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCB8fCAhIXRoaXMucmVhZG9ubHlcbiAgICAgID8gdGhpcy5pMThuW3RoaXMubGFuZ10ubG9jYXRpb25cbiAgICAgIDogdGhpcy5pMThuW3RoaXMubGFuZ10uc2VsZWN0TG9jYXRpb247XG4gIH1cblxuICBnZXQgc2VsZigpOiBHZW9sb2NhdGlvbkNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXRMYWJlbHMoXG4gICAgaW5zdGFuY2U6IEdlb2xvY2F0aW9uQ29tcG9uZW50LFxuICAgIGtleXM6IEdlb1BvaW50W11cbiAgKTogT2JzZXJ2YWJsZTxEYXRhU291cmNlPEdlb1BvaW50LCBzdHJpbmc+PiB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmxvY2F0aW9uU2VydmljZS5nZXRMYWJlbHMoaW5zdGFuY2UubG9jYXRpb25TZXJ2aWNlLCBrZXlzKTtcbiAgfVxuXG4gIGdldERhdGEoXG4gICAgaW5zdGFuY2U6IEdlb2xvY2F0aW9uQ29tcG9uZW50LFxuICAgIHNlYXJjaDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8RGF0YVNvdXJjZTxHZW9Qb2ludCwgc3RyaW5nPj4ge1xuICAgIHJldHVybiBpbnN0YW5jZS5sb2NhdGlvblNlcnZpY2UuZ2V0RGF0YShpbnN0YW5jZS5sb2NhdGlvblNlcnZpY2UsIHNlYXJjaCk7XG4gIH1cblxuICBzZXRQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLnN0ZXAgPSB0aGlzLnN0ZXAgfHwgMC4wMDAwMTsgLy8gMC4wMDAwMSBkZWdyZWVzID0gMS4xMSBtZXRlcnNcbiAgICB0aGlzLnpvb20gPSB0aGlzLnpvb20gfHwgMTg7IC8vICgzNjAvMl4xOCkgZGVncmVlcyB+IDAuMDAxMzcgZGVncmVlcyB+IDE1MyBtZXRlcnNcbiAgICB0aGlzLm1pbkxhdGl0dWRlID0gdGhpcy5taW5MYXRpdHVkZSB8fCAtOTA7XG4gICAgdGhpcy5tYXhMYXRpdHVkZSA9IHRoaXMubWF4TGF0aXR1ZGUgfHwgKzkwO1xuICAgIHRoaXMubWluTG9uZ2l0dWRlID0gdGhpcy5taW5Mb25naXR1ZGUgfHwgLTE4MDtcbiAgICB0aGlzLm1heExvbmdpdHVkZSA9IHRoaXMubWF4TG9uZ2l0dWRlIHx8ICsxODA7XG4gIH1cbn1cbiIsIjxpbnB1dFxuICAjbGF0aXR1ZGVcbiAgY2xhc3M9XCJyb3VuZGVkLWxlZnQgcHJlZml4XCJcbiAgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIFtpZF09XCJpbnB1dElkICsgJyRsYXRpdHVkZSdcIlxuICBbKG5nTW9kZWwpXT1cImxhdGl0dWRlVmFsdWVcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID09PSB0cnVlID8gJ3RydWUnIDogdW5kZWZpbmVkXCJcbiAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICBbYXR0ci5taW5dPVwiXG4gICAgbWluTGF0aXR1ZGUgIT09IHVuZGVmaW5lZCAmJiBtaW5MYXRpdHVkZSAhPT0gbnVsbFxuICAgICAgPyBtaW5MYXRpdHVkZS50b1N0cmluZygpXG4gICAgICA6IHVuZGVmaW5lZFxuICBcIlxuICBbYXR0ci5tYXhdPVwiXG4gICAgbWF4TGF0aXR1ZGUgIT09IHVuZGVmaW5lZCAmJiBtYXhMYXRpdHVkZSAhPT0gbnVsbFxuICAgICAgPyBtYXhMYXRpdHVkZS50b1N0cmluZygpXG4gICAgICA6IHVuZGVmaW5lZFxuICBcIlxuICBbYXR0ci5zdGVwXT1cIlxuICAgIHN0ZXAgIT09IHVuZGVmaW5lZCAmJiBzdGVwICE9PSBudWxsID8gc3RlcC50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIFwiXG4gIFtwbGFjZWhvbGRlcl09XCJpMThuW2xhbmddLmxhdFwiXG4gIChrZXl1cCk9XCJvbkV2ZW50TGF0aXR1ZGUobGF0aXR1ZGUudmFsdWUpXCJcbiAgKGNoYW5nZSk9XCJvbkV2ZW50TGF0aXR1ZGUobGF0aXR1ZGUudmFsdWUpXCJcbiAgKGtleXByZXNzKT1cIm9uS2V5UHJlc3MoJGV2ZW50KVwiXG4gIChibHVyKT1cIm9uTG9zdEZvY3VzKClcIlxuLz5cbjxkaXZcbiAgY2xhc3M9XCJpbmZpeCBzeW1ib2wgbW9ub3NwYWNlIGNsaWNrYWJsZVwiXG4gIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiXG4gIChjbGljayk9XCJvcGVuTW9kYWxNYXAobW9kYWxNYXApXCI+XG4gIDxzcGFuICpuZ0lmPVwiaXNWYWxpZE51bWJlcihsYXRpdHVkZVZhbHVlKSAmJiBsYXRpdHVkZVZhbHVlID49IDBcIj57e1xuICAgIGkxOG5bbGFuZ10uY2FyZGluYWxQb2ludHMubm9ydGhcbiAgfX08L3NwYW4+XG4gIDxzcGFuICpuZ0lmPVwiaXNWYWxpZE51bWJlcihsYXRpdHVkZVZhbHVlKSAmJiBsYXRpdHVkZVZhbHVlIDwgMFwiPnt7XG4gICAgaTE4bltsYW5nXS5jYXJkaW5hbFBvaW50cy5zb3V0aFxuICB9fTwvc3Bhbj5cbiAgPHNwYW4gKm5nSWY9XCIhaXNWYWxpZE51bWJlcihsYXRpdHVkZVZhbHVlKVwiPi08L3NwYW4+XG48L2Rpdj5cbjxpbnB1dFxuICAjbG9uZ2l0dWRlXG4gIGNsYXNzPVwicHJlZml4XCJcbiAgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIFtpZF09XCJpbnB1dElkICsgJyRsb25naXR1ZGUnXCJcbiAgWyhuZ01vZGVsKV09XCJsb25naXR1ZGVWYWx1ZVwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA9PT0gdHJ1ZSA/ICd0cnVlJyA6IHVuZGVmaW5lZFwiXG4gIFthdHRyLm1pbl09XCJcbiAgICBtaW5Mb25naXR1ZGUgIT09IHVuZGVmaW5lZCAmJiBtaW5Mb25naXR1ZGUgIT09IG51bGxcbiAgICAgID8gbWluTG9uZ2l0dWRlLnRvU3RyaW5nKClcbiAgICAgIDogdW5kZWZpbmVkXG4gIFwiXG4gIFthdHRyLm1heF09XCJcbiAgICBtYXhMb25naXR1ZGUgIT09IHVuZGVmaW5lZCAmJiBtYXhMb25naXR1ZGUgIT09IG51bGxcbiAgICAgID8gbWF4TG9uZ2l0dWRlLnRvU3RyaW5nKClcbiAgICAgIDogdW5kZWZpbmVkXG4gIFwiXG4gIFthdHRyLnN0ZXBdPVwiXG4gICAgc3RlcCAhPT0gdW5kZWZpbmVkICYmIHN0ZXAgIT09IG51bGwgPyBzdGVwLnRvU3RyaW5nKCkgOiB1bmRlZmluZWRcbiAgXCJcbiAgW3BsYWNlaG9sZGVyXT1cImkxOG5bbGFuZ10ubG9uXCJcbiAgKGtleXVwKT1cIm9uRXZlbnRMb25naXR1ZGUobG9uZ2l0dWRlLnZhbHVlKVwiXG4gIChjaGFuZ2UpPVwib25FdmVudExvbmdpdHVkZShsb25naXR1ZGUudmFsdWUpXCJcbiAgKGtleXByZXNzKT1cIm9uS2V5UHJlc3MoJGV2ZW50KVwiXG4gIChibHVyKT1cIm9uTG9zdEZvY3VzKClcIlxuLz5cbjxkaXZcbiAgY2xhc3M9XCJpbmZpeCBzeW1ib2wgbW9ub3NwYWNlIGNsaWNrYWJsZVwiXG4gIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiXG4gIChjbGljayk9XCJvcGVuTW9kYWxNYXAobW9kYWxNYXApXCJcbj5cbiAgPHNwYW4gKm5nSWY9XCJpc1ZhbGlkTnVtYmVyKGxvbmdpdHVkZVZhbHVlKSAmJiBsb25naXR1ZGVWYWx1ZSA+PSAwXCI+e3tcbiAgICBpMThuW2xhbmddLmNhcmRpbmFsUG9pbnRzLmVhc3RcbiAgfX08L3NwYW4+XG4gIDxzcGFuICpuZ0lmPVwiaXNWYWxpZE51bWJlcihsb25naXR1ZGVWYWx1ZSkgJiYgbG9uZ2l0dWRlVmFsdWUgPCAwXCI+e3tcbiAgICBpMThuW2xhbmddLmNhcmRpbmFsUG9pbnRzLndlc3RcbiAgfX08L3NwYW4+XG4gIDxzcGFuICpuZ0lmPVwiIWlzVmFsaWROdW1iZXIobG9uZ2l0dWRlVmFsdWUpXCI+LTwvc3Bhbj5cbjwvZGl2PlxuPGRpdlxuICBbY2xhc3NdPVwiXG4gICAgZGlzYWJsZWQgfHwgcmVhZG9ubHkgfHwgIWlzQ2xlYXJhYmxlKClcbiAgICAgID8gJ2NsaWNrYWJsZSByb3VuZGVkLXJpZ2h0IHBvc3RmaXggc3ltYm9sJ1xuICAgICAgOiAnY2xpY2thYmxlIHBvc3RmaXggc3ltYm9sJ1xuICBcIlxuICBbbmdDbGFzc109XCJjbGFzc05hbWVcIlxuICAoY2xpY2spPVwib3Blbk1vZGFsTWFwKG1vZGFsTWFwKVwiXG4+XG4gIDxzcGFuIGNsYXNzPVwiaWNvbi1nbG9iZVwiPjwvc3Bhbj5cbjwvZGl2PlxuPGJ1dHRvblxuICAjY2xlYXJCdXR0b25cbiAgKm5nSWY9XCIhZGlzYWJsZWQgJiYgIXJlYWRvbmx5ICYmIGlzQ2xlYXJhYmxlKClcIlxuICBjbGFzcz1cInJvdW5kZWQtcmlnaHQgcG9zdGZpeCBib3JkZXJlZCBpY29uIGljb24tY2xlYXJcIlxuICBbaWRdPVwiaW5wdXRJZCArICckY2xlYXInXCJcbiAgdHlwZT1cImJ1dHRvblwiXG4gIChjbGljayk9XCJjbGVhcigpXCJcbiAgYXJpYS1sYWJlbD1cImNsZWFyXCJcbj48L2J1dHRvbj5cblxuPGRpdiAqbmdJZj1cImlubGluZUVycm9ycyAmJiBsYXN0RXJyb3JzICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiIGNsYXNzPVwiYWxlcnRcIj5cbiAgPGRpdiAqbmdJZj1cImxhc3RFcnJvcnMucmVxdWlyZWRcIj5cbiAgICB7eyBpMThuW2xhbmddLnVzZXJFcnJvcnMucmVxdWlyZWQgfX1cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLm1pbkxhdGl0dWRlXCI+XG4gICAge3tcbiAgICAgIGkxOG5bbGFuZ10udXNlckVycm9ycy5taW5MYXRpdHVkZS5yZXBsYWNlKFxuICAgICAgICAnJG1pbkxhdGl0dWRlJyxcbiAgICAgICAgbGFzdEVycm9ycy5taW5MYXRpdHVkZS5taW5cbiAgICAgIClcbiAgICB9fVxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImxhc3RFcnJvcnMubWF4TGF0aXR1ZGVcIj5cbiAgICB7e1xuICAgICAgaTE4bltsYW5nXS51c2VyRXJyb3JzLm1heExhdGl0dWRlLnJlcGxhY2UoXG4gICAgICAgICckbWF4TGF0aXR1ZGUnLFxuICAgICAgICBsYXN0RXJyb3JzLm1heExhdGl0dWRlLm1heFxuICAgICAgKVxuICAgIH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwibGFzdEVycm9ycy5taW5Mb25naXR1ZGVcIj5cbiAgICB7e1xuICAgICAgaTE4bltsYW5nXS51c2VyRXJyb3JzLm1pbkxvbmdpdHVkZS5yZXBsYWNlKFxuICAgICAgICAnJG1pbkxvbmdpdHVkZScsXG4gICAgICAgIGxhc3RFcnJvcnMubWluTG9uZ2l0dWRlLm1pblxuICAgICAgKVxuICAgIH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwibGFzdEVycm9ycy5tYXhMb25naXR1ZGVcIj5cbiAgICB7e1xuICAgICAgaTE4bltsYW5nXS51c2VyRXJyb3JzLm1heExvbmdpdHVkZS5yZXBsYWNlKFxuICAgICAgICAnJG1heExvbmdpdHVkZScsXG4gICAgICAgIGxhc3RFcnJvcnMubWF4TG9uZ2l0dWRlLm1heFxuICAgICAgKVxuICAgIH19XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWxNYXAgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibHV4LW1vZGFsLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlIGRlZmF1bHQtZm9udFwiIGlkPVwibW9kYWwtYmFzaWMtdGl0bGVcIj57eyBtYXBUaXRsZSB9fTwvaDQ+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImNsb3NlXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygnQ3Jvc3MgY2xpY2snKVwiXG4gICAgPlxuICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+w5c8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibHV4LW1vZGFsLWJvZHkgY29udGVudFwiPlxuICAgIDxsdXgtYXV0b2NvbXBsZXRlXG4gICAgICAjc2VhcmNoQmFyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImkxOG5bbGFuZ10udHlwZVRvU2VhcmNoXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJpMThuW2xhbmddLnR5cGVUb1NlYXJjaFwiXG4gICAgICAqbmdJZj1cIiFkaXNhYmxlZCAmJiAhcmVhZG9ubHlcIlxuICAgICAgW2luc3RhbmNlXT1cInNlbGZcIlxuICAgICAgW3Jlc29sdmVMYWJlbHNGdW5jdGlvbl09XCJnZXRMYWJlbHNcIlxuICAgICAgW3BvcHVsYXRlRnVuY3Rpb25dPVwiZ2V0RGF0YVwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25TZWFyY2hMb2NhdGlvbkNoYW5nZWQoc2VhcmNoQmFyLnZhbHVlLCBtYXApXCJcbiAgICA+PC9sdXgtYXV0b2NvbXBsZXRlPlxuICAgIDxkaXYgY2xhc3M9XCJtYXAtY29udGFpbmVyXCI+XG4gICAgICA8bHV4LW1hcFxuICAgICAgICAjbWFwXG4gICAgICAgIFtjZW50ZXJdPVwidmFsdWVcIlxuICAgICAgICBbbWFya2VyUG9pbnRdPVwidmFsdWVcIlxuICAgICAgICBbem9vbV09XCJ6b29tXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5ID09PSB0cnVlIHx8IGRpc2FibGVkID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICAgID48L2x1eC1tYXA+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibHV4LW1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tY2FuY2VsXCJcbiAgICAgIChjbGljayk9XCJtb2RhbC5jbG9zZSgnY2FuY2VsJylcIlxuICAgID5cbiAgICAgIHt7IGkxOG5bbGFuZ10uY2xvc2VBY3Rpb24gfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIiFkaXNhYmxlZCAmJiAhcmVhZG9ubHlcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tY2FuY2VsXCJcbiAgICAgIChjbGljayk9XCJtb2RhbC5jbG9zZSgnY2FuY2VsJylcIlxuICAgID5cbiAgICAgIHt7IGkxOG5bbGFuZ10uY2FuY2VsQWN0aW9uIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCIhZGlzYWJsZWQgJiYgIXJlYWRvbmx5XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLXNlbGVjdFwiXG4gICAgICAoY2xpY2spPVwibW9kYWwuY2xvc2UobWFwLm1hcmtlclBvaW50LmNvb3JkaW5hdGVzKVwiXG4gICAgPlxuICAgICAge3sgaTE4bltsYW5nXS5zZWxlY3RBY3Rpb24gfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -91,9 +91,9 @@ export class GeolocationService {
91
91
  : null;
92
92
  }
93
93
  }
94
- GeolocationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GeolocationService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
95
- GeolocationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GeolocationService, providedIn: 'root' });
96
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GeolocationService, decorators: [{
94
+ GeolocationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: GeolocationService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
95
+ GeolocationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: GeolocationService, providedIn: 'root' });
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: GeolocationService, decorators: [{
97
97
  type: Injectable,
98
98
  args: [{ providedIn: 'root' }]
99
99
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
@@ -19,9 +19,9 @@ export class OpenLayerLoaderService {
19
19
  return of(true);
20
20
  }
21
21
  }
22
- OpenLayerLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: OpenLayerLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
- OpenLayerLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: OpenLayerLoaderService, providedIn: 'root' });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: OpenLayerLoaderService, decorators: [{
22
+ OpenLayerLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: OpenLayerLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
+ OpenLayerLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: OpenLayerLoaderService, providedIn: 'root' });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: OpenLayerLoaderService, decorators: [{
25
25
  type: Injectable,
26
26
  args: [{ providedIn: 'root' }]
27
27
  }] });