@bluehalo/ngx-leaflet 18.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGES.md +89 -0
- package/LICENSE +22 -0
- package/README.md +728 -0
- package/esm2022/bluehalo-ngx-leaflet.mjs +5 -0
- package/esm2022/lib/core/leaflet.directive.mjs +330 -0
- package/esm2022/lib/core/leaflet.directive.wrapper.mjs +12 -0
- package/esm2022/lib/core/leaflet.util.mjs +20 -0
- package/esm2022/lib/layers/base/leaflet-baselayers.directive.mjs +113 -0
- package/esm2022/lib/layers/control/leaflet-control-layers-changes.model.mjs +11 -0
- package/esm2022/lib/layers/control/leaflet-control-layers-config.model.mjs +7 -0
- package/esm2022/lib/layers/control/leaflet-control-layers.directive.mjs +100 -0
- package/esm2022/lib/layers/control/leaflet-control-layers.wrapper.mjs +58 -0
- package/esm2022/lib/layers/leaflet-layer.directive.mjs +78 -0
- package/esm2022/lib/layers/leaflet-layers.directive.mjs +83 -0
- package/esm2022/lib/layers/leaflet-tile-layer-definition.model.mjs +53 -0
- package/esm2022/lib/leaflet.module.mjs +40 -0
- package/esm2022/public-api.mjs +13 -0
- package/fesm2022/bluehalo-ngx-leaflet.mjs +880 -0
- package/fesm2022/bluehalo-ngx-leaflet.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/core/leaflet.directive.d.ts +94 -0
- package/lib/core/leaflet.directive.wrapper.d.ts +8 -0
- package/lib/core/leaflet.util.d.ts +7 -0
- package/lib/layers/base/leaflet-baselayers.directive.d.ts +45 -0
- package/lib/layers/control/leaflet-control-layers-changes.model.d.ts +6 -0
- package/lib/layers/control/leaflet-control-layers-config.model.d.ts +9 -0
- package/lib/layers/control/leaflet-control-layers.directive.d.ts +35 -0
- package/lib/layers/control/leaflet-control-layers.wrapper.d.ts +14 -0
- package/lib/layers/leaflet-layer.directive.d.ts +30 -0
- package/lib/layers/leaflet-layers.directive.d.ts +41 -0
- package/lib/layers/leaflet-tile-layer-definition.model.d.ts +33 -0
- package/lib/leaflet.module.d.ts +11 -0
- package/package.json +34 -0
- package/public-api.d.ts +12 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmx1ZWhhbG8tbmd4LWxlYWZsZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGVhZmxldC9zcmMvYmx1ZWhhbG8tbmd4LWxlYWZsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
|
+
import { latLng, map } from 'leaflet';
|
|
3
|
+
import { LeafletUtil } from './leaflet.util';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class LeafletDirective {
|
|
6
|
+
constructor(element, zone) {
|
|
7
|
+
this.element = element;
|
|
8
|
+
this.zone = zone;
|
|
9
|
+
this.DEFAULT_ZOOM = 1;
|
|
10
|
+
this.DEFAULT_CENTER = latLng(38.907192, -77.036871);
|
|
11
|
+
this.DEFAULT_FPZ_OPTIONS = {};
|
|
12
|
+
this.fitBoundsOptions = this.DEFAULT_FPZ_OPTIONS;
|
|
13
|
+
this.panOptions = this.DEFAULT_FPZ_OPTIONS;
|
|
14
|
+
this.zoomOptions = this.DEFAULT_FPZ_OPTIONS;
|
|
15
|
+
this.zoomPanOptions = this.DEFAULT_FPZ_OPTIONS;
|
|
16
|
+
// Default configuration
|
|
17
|
+
this.options = {};
|
|
18
|
+
// Configure callback function for the map
|
|
19
|
+
this.mapReady = new EventEmitter();
|
|
20
|
+
this.zoomChange = new EventEmitter();
|
|
21
|
+
this.centerChange = new EventEmitter();
|
|
22
|
+
// Mouse Map Events
|
|
23
|
+
this.onClick = new EventEmitter();
|
|
24
|
+
this.onDoubleClick = new EventEmitter();
|
|
25
|
+
this.onMouseDown = new EventEmitter();
|
|
26
|
+
this.onMouseUp = new EventEmitter();
|
|
27
|
+
this.onMouseMove = new EventEmitter();
|
|
28
|
+
this.onMouseOver = new EventEmitter();
|
|
29
|
+
this.onMouseOut = new EventEmitter();
|
|
30
|
+
// Map Move Events
|
|
31
|
+
this.onMapMove = new EventEmitter();
|
|
32
|
+
this.onMapMoveStart = new EventEmitter();
|
|
33
|
+
this.onMapMoveEnd = new EventEmitter();
|
|
34
|
+
// Map Zoom Events
|
|
35
|
+
this.onMapZoom = new EventEmitter();
|
|
36
|
+
this.onMapZoomStart = new EventEmitter();
|
|
37
|
+
this.onMapZoomEnd = new EventEmitter();
|
|
38
|
+
// Nothing here
|
|
39
|
+
}
|
|
40
|
+
ngOnInit() {
|
|
41
|
+
// Create the map outside of angular so the various map events don't trigger change detection
|
|
42
|
+
this.zone.runOutsideAngular(() => {
|
|
43
|
+
// Create the map with some reasonable defaults
|
|
44
|
+
this.map = map(this.element.nativeElement, this.options);
|
|
45
|
+
this.addMapEventListeners();
|
|
46
|
+
});
|
|
47
|
+
// Only setView if there is a center/zoom
|
|
48
|
+
if (null != this.center && null != this.zoom) {
|
|
49
|
+
this.setView(this.center, this.zoom);
|
|
50
|
+
}
|
|
51
|
+
// Set up all the initial settings
|
|
52
|
+
if (null != this.fitBounds) {
|
|
53
|
+
this.setFitBounds(this.fitBounds);
|
|
54
|
+
}
|
|
55
|
+
if (null != this.maxBounds) {
|
|
56
|
+
this.setMaxBounds(this.maxBounds);
|
|
57
|
+
}
|
|
58
|
+
if (null != this.minZoom) {
|
|
59
|
+
this.setMinZoom(this.minZoom);
|
|
60
|
+
}
|
|
61
|
+
if (null != this.maxZoom) {
|
|
62
|
+
this.setMaxZoom(this.maxZoom);
|
|
63
|
+
}
|
|
64
|
+
this.doResize();
|
|
65
|
+
// Fire map ready event
|
|
66
|
+
this.mapReady.emit(this.map);
|
|
67
|
+
}
|
|
68
|
+
ngOnChanges(changes) {
|
|
69
|
+
/*
|
|
70
|
+
* The following code is to address an issue with our (basic) implementation of
|
|
71
|
+
* zooming and panning. From our testing, it seems that a pan operation followed
|
|
72
|
+
* by a zoom operation in the same thread will interfere with eachother. The zoom
|
|
73
|
+
* operation interrupts/cancels the pan, resulting in a final center point that is
|
|
74
|
+
* inaccurate. The solution seems to be to either separate them with a timeout or
|
|
75
|
+
* to collapse them into a setView call.
|
|
76
|
+
*/
|
|
77
|
+
// Zooming and Panning
|
|
78
|
+
if (changes['zoom'] && changes['center'] && null != this.zoom && null != this.center) {
|
|
79
|
+
this.setView(changes['center'].currentValue, changes['zoom'].currentValue);
|
|
80
|
+
}
|
|
81
|
+
// Set the zoom level
|
|
82
|
+
else if (changes['zoom']) {
|
|
83
|
+
this.setZoom(changes['zoom'].currentValue);
|
|
84
|
+
}
|
|
85
|
+
// Set the map center
|
|
86
|
+
else if (changes['center']) {
|
|
87
|
+
this.setCenter(changes['center'].currentValue);
|
|
88
|
+
}
|
|
89
|
+
// Other options
|
|
90
|
+
if (changes['fitBounds']) {
|
|
91
|
+
this.setFitBounds(changes['fitBounds'].currentValue);
|
|
92
|
+
}
|
|
93
|
+
if (changes['maxBounds']) {
|
|
94
|
+
this.setMaxBounds(changes['maxBounds'].currentValue);
|
|
95
|
+
}
|
|
96
|
+
if (changes['minZoom']) {
|
|
97
|
+
this.setMinZoom(changes['minZoom'].currentValue);
|
|
98
|
+
}
|
|
99
|
+
if (changes['maxZoom']) {
|
|
100
|
+
this.setMaxZoom(changes['maxZoom'].currentValue);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
ngOnDestroy() {
|
|
104
|
+
// If this directive is destroyed, the map is too
|
|
105
|
+
if (null != this.map) {
|
|
106
|
+
this.map.remove();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
getMap() {
|
|
110
|
+
return this.map;
|
|
111
|
+
}
|
|
112
|
+
onResize() {
|
|
113
|
+
this.delayResize();
|
|
114
|
+
}
|
|
115
|
+
addMapEventListeners() {
|
|
116
|
+
const registerEventHandler = (eventName, handler) => {
|
|
117
|
+
this.map.on(eventName, handler);
|
|
118
|
+
};
|
|
119
|
+
// Add all the pass-through mouse event handlers
|
|
120
|
+
registerEventHandler('click', (e) => LeafletUtil.handleEvent(this.zone, this.onClick, e));
|
|
121
|
+
registerEventHandler('dblclick', (e) => LeafletUtil.handleEvent(this.zone, this.onDoubleClick, e));
|
|
122
|
+
registerEventHandler('mousedown', (e) => LeafletUtil.handleEvent(this.zone, this.onMouseDown, e));
|
|
123
|
+
registerEventHandler('mouseup', (e) => LeafletUtil.handleEvent(this.zone, this.onMouseUp, e));
|
|
124
|
+
registerEventHandler('mouseover', (e) => LeafletUtil.handleEvent(this.zone, this.onMouseOver, e));
|
|
125
|
+
registerEventHandler('mouseout', (e) => LeafletUtil.handleEvent(this.zone, this.onMouseOut, e));
|
|
126
|
+
registerEventHandler('mousemove', (e) => LeafletUtil.handleEvent(this.zone, this.onMouseMove, e));
|
|
127
|
+
registerEventHandler('zoomstart', (e) => LeafletUtil.handleEvent(this.zone, this.onMapZoomStart, e));
|
|
128
|
+
registerEventHandler('zoom', (e) => LeafletUtil.handleEvent(this.zone, this.onMapZoom, e));
|
|
129
|
+
registerEventHandler('zoomend', (e) => LeafletUtil.handleEvent(this.zone, this.onMapZoomEnd, e));
|
|
130
|
+
registerEventHandler('movestart', (e) => LeafletUtil.handleEvent(this.zone, this.onMapMoveStart, e));
|
|
131
|
+
registerEventHandler('move', (e) => LeafletUtil.handleEvent(this.zone, this.onMapMove, e));
|
|
132
|
+
registerEventHandler('moveend', (e) => LeafletUtil.handleEvent(this.zone, this.onMapMoveEnd, e));
|
|
133
|
+
// Update any things for which we provide output bindings
|
|
134
|
+
const outputUpdateHandler = () => {
|
|
135
|
+
const zoom = this.map.getZoom();
|
|
136
|
+
if (zoom !== this.zoom) {
|
|
137
|
+
this.zoom = zoom;
|
|
138
|
+
LeafletUtil.handleEvent(this.zone, this.zoomChange, zoom);
|
|
139
|
+
}
|
|
140
|
+
const center = this.map.getCenter();
|
|
141
|
+
if (null != center || null != this.center) {
|
|
142
|
+
if (((null == center || null == this.center) && center !== this.center)
|
|
143
|
+
|| (center.lat !== this.center.lat || center.lng !== this.center.lng)) {
|
|
144
|
+
this.center = center;
|
|
145
|
+
LeafletUtil.handleEvent(this.zone, this.centerChange, center);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
registerEventHandler('moveend', outputUpdateHandler);
|
|
150
|
+
registerEventHandler('zoomend', outputUpdateHandler);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Resize the map to fit it's parent container
|
|
154
|
+
*/
|
|
155
|
+
doResize() {
|
|
156
|
+
// Run this outside of angular so the map events stay outside of angular
|
|
157
|
+
this.zone.runOutsideAngular(() => {
|
|
158
|
+
// Invalidate the map size to trigger it to update itself
|
|
159
|
+
if (null != this.map) {
|
|
160
|
+
this.map.invalidateSize({});
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Manage a delayed resize of the component
|
|
166
|
+
*/
|
|
167
|
+
delayResize() {
|
|
168
|
+
if (null != this.resizeTimer) {
|
|
169
|
+
clearTimeout(this.resizeTimer);
|
|
170
|
+
}
|
|
171
|
+
this.resizeTimer = setTimeout(this.doResize.bind(this), 200);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Set the view (center/zoom) all at once
|
|
175
|
+
* @param center The new center
|
|
176
|
+
* @param zoom The new zoom level
|
|
177
|
+
*/
|
|
178
|
+
setView(center, zoom) {
|
|
179
|
+
if (null != this.map && null != center && null != zoom) {
|
|
180
|
+
this.map.setView(center, zoom, this.zoomPanOptions);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Set the map zoom level
|
|
185
|
+
* @param zoom the new zoom level for the map
|
|
186
|
+
*/
|
|
187
|
+
setZoom(zoom) {
|
|
188
|
+
if (null != this.map && null != zoom) {
|
|
189
|
+
this.map.setZoom(zoom, this.zoomOptions);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Set the center of the map
|
|
194
|
+
* @param center the center point
|
|
195
|
+
*/
|
|
196
|
+
setCenter(center) {
|
|
197
|
+
if (null != this.map && null != center) {
|
|
198
|
+
this.map.panTo(center, this.panOptions);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Fit the map to the bounds
|
|
203
|
+
* @param latLngBounds the boundary to set
|
|
204
|
+
*/
|
|
205
|
+
setFitBounds(latLngBounds) {
|
|
206
|
+
if (null != this.map && null != latLngBounds) {
|
|
207
|
+
this.map.fitBounds(latLngBounds, this.fitBoundsOptions);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Set the map's max bounds
|
|
212
|
+
* @param latLngBounds the boundary to set
|
|
213
|
+
*/
|
|
214
|
+
setMaxBounds(latLngBounds) {
|
|
215
|
+
if (null != this.map && null != latLngBounds) {
|
|
216
|
+
this.map.setMaxBounds(latLngBounds);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Set the map's min zoom
|
|
221
|
+
* @param number the new min zoom
|
|
222
|
+
*/
|
|
223
|
+
setMinZoom(zoom) {
|
|
224
|
+
if (null != this.map && null != zoom) {
|
|
225
|
+
this.map.setMinZoom(zoom);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Set the map's min zoom
|
|
230
|
+
* @param number the new min zoom
|
|
231
|
+
*/
|
|
232
|
+
setMaxZoom(zoom) {
|
|
233
|
+
if (null != this.map && null != zoom) {
|
|
234
|
+
this.map.setMaxZoom(zoom);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: LeafletDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
238
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.1", type: LeafletDirective, selector: "[leaflet]", inputs: { fitBoundsOptions: ["leafletFitBoundsOptions", "fitBoundsOptions"], panOptions: ["leafletPanOptions", "panOptions"], zoomOptions: ["leafletZoomOptions", "zoomOptions"], zoomPanOptions: ["leafletZoomPanOptions", "zoomPanOptions"], options: ["leafletOptions", "options"], zoom: ["leafletZoom", "zoom"], center: ["leafletCenter", "center"], fitBounds: ["leafletFitBounds", "fitBounds"], maxBounds: ["leafletMaxBounds", "maxBounds"], minZoom: ["leafletMinZoom", "minZoom"], maxZoom: ["leafletMaxZoom", "maxZoom"] }, outputs: { mapReady: "leafletMapReady", zoomChange: "leafletZoomChange", centerChange: "leafletCenterChange", onClick: "leafletClick", onDoubleClick: "leafletDoubleClick", onMouseDown: "leafletMouseDown", onMouseUp: "leafletMouseUp", onMouseMove: "leafletMouseMove", onMouseOver: "leafletMouseOver", onMouseOut: "leafletMouseOut", onMapMove: "leafletMapMove", onMapMoveStart: "leafletMapMoveStart", onMapMoveEnd: "leafletMapMoveEnd", onMapZoom: "leafletMapZoom", onMapZoomStart: "leafletMapZoomStart", onMapZoomEnd: "leafletMapZoomEnd" }, host: { listeners: { "window:resize": "onResize()" } }, usesOnChanges: true, ngImport: i0 }); }
|
|
239
|
+
}
|
|
240
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: LeafletDirective, decorators: [{
|
|
241
|
+
type: Directive,
|
|
242
|
+
args: [{
|
|
243
|
+
selector: '[leaflet]'
|
|
244
|
+
}]
|
|
245
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { fitBoundsOptions: [{
|
|
246
|
+
type: Input,
|
|
247
|
+
args: ['leafletFitBoundsOptions']
|
|
248
|
+
}], panOptions: [{
|
|
249
|
+
type: Input,
|
|
250
|
+
args: ['leafletPanOptions']
|
|
251
|
+
}], zoomOptions: [{
|
|
252
|
+
type: Input,
|
|
253
|
+
args: ['leafletZoomOptions']
|
|
254
|
+
}], zoomPanOptions: [{
|
|
255
|
+
type: Input,
|
|
256
|
+
args: ['leafletZoomPanOptions']
|
|
257
|
+
}], options: [{
|
|
258
|
+
type: Input,
|
|
259
|
+
args: ['leafletOptions']
|
|
260
|
+
}], mapReady: [{
|
|
261
|
+
type: Output,
|
|
262
|
+
args: ['leafletMapReady']
|
|
263
|
+
}], zoom: [{
|
|
264
|
+
type: Input,
|
|
265
|
+
args: ['leafletZoom']
|
|
266
|
+
}], zoomChange: [{
|
|
267
|
+
type: Output,
|
|
268
|
+
args: ['leafletZoomChange']
|
|
269
|
+
}], center: [{
|
|
270
|
+
type: Input,
|
|
271
|
+
args: ['leafletCenter']
|
|
272
|
+
}], centerChange: [{
|
|
273
|
+
type: Output,
|
|
274
|
+
args: ['leafletCenterChange']
|
|
275
|
+
}], fitBounds: [{
|
|
276
|
+
type: Input,
|
|
277
|
+
args: ['leafletFitBounds']
|
|
278
|
+
}], maxBounds: [{
|
|
279
|
+
type: Input,
|
|
280
|
+
args: ['leafletMaxBounds']
|
|
281
|
+
}], minZoom: [{
|
|
282
|
+
type: Input,
|
|
283
|
+
args: ['leafletMinZoom']
|
|
284
|
+
}], maxZoom: [{
|
|
285
|
+
type: Input,
|
|
286
|
+
args: ['leafletMaxZoom']
|
|
287
|
+
}], onClick: [{
|
|
288
|
+
type: Output,
|
|
289
|
+
args: ['leafletClick']
|
|
290
|
+
}], onDoubleClick: [{
|
|
291
|
+
type: Output,
|
|
292
|
+
args: ['leafletDoubleClick']
|
|
293
|
+
}], onMouseDown: [{
|
|
294
|
+
type: Output,
|
|
295
|
+
args: ['leafletMouseDown']
|
|
296
|
+
}], onMouseUp: [{
|
|
297
|
+
type: Output,
|
|
298
|
+
args: ['leafletMouseUp']
|
|
299
|
+
}], onMouseMove: [{
|
|
300
|
+
type: Output,
|
|
301
|
+
args: ['leafletMouseMove']
|
|
302
|
+
}], onMouseOver: [{
|
|
303
|
+
type: Output,
|
|
304
|
+
args: ['leafletMouseOver']
|
|
305
|
+
}], onMouseOut: [{
|
|
306
|
+
type: Output,
|
|
307
|
+
args: ['leafletMouseOut']
|
|
308
|
+
}], onMapMove: [{
|
|
309
|
+
type: Output,
|
|
310
|
+
args: ['leafletMapMove']
|
|
311
|
+
}], onMapMoveStart: [{
|
|
312
|
+
type: Output,
|
|
313
|
+
args: ['leafletMapMoveStart']
|
|
314
|
+
}], onMapMoveEnd: [{
|
|
315
|
+
type: Output,
|
|
316
|
+
args: ['leafletMapMoveEnd']
|
|
317
|
+
}], onMapZoom: [{
|
|
318
|
+
type: Output,
|
|
319
|
+
args: ['leafletMapZoom']
|
|
320
|
+
}], onMapZoomStart: [{
|
|
321
|
+
type: Output,
|
|
322
|
+
args: ['leafletMapZoomStart']
|
|
323
|
+
}], onMapZoomEnd: [{
|
|
324
|
+
type: Output,
|
|
325
|
+
args: ['leafletMapZoomEnd']
|
|
326
|
+
}], onResize: [{
|
|
327
|
+
type: HostListener,
|
|
328
|
+
args: ['window:resize', []]
|
|
329
|
+
}] } });
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGVhZmxldC9zcmMvbGliL2NvcmUvbGVhZmxldC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0MsTUFBTSxFQUV0RyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUF5RCxHQUFHLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBRTlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLN0MsTUFBTSxPQUFPLGdCQUFnQjtJQWdFNUIsWUFBb0IsT0FBbUIsRUFBVSxJQUFZO1FBQXpDLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBN0RwRCxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFPQSxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDbEQsZUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNyQyxnQkFBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNwQyxtQkFBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUcxRSx3QkFBd0I7UUFDQyxZQUFPLEdBQWUsRUFBRSxDQUFDO1FBRWxELDBDQUEwQztRQUNmLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSWpDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBSXRDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQWV6RSxtQkFBbUI7UUFDSyxZQUFPLEdB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QjtnQkFDQyxVQUFVO3NCQUFwQyxNQUFNO3VCQUFDLGlCQUFpQjtnQkFHQyxTQUFTO3NCQUFsQyxNQUFNO3VCQUFDLGdCQUFnQjtnQkFDTyxjQUFjO3NCQUE1QyxNQUFNO3VCQUFDLHFCQUFxQjtnQkFDQSxZQUFZO3NCQUF4QyxNQUFNO3VCQUFDLG1CQUFtQjtnQkFHRCxTQUFTO3NCQUFsQyxNQUFNO3VCQUFDLGdCQUFnQjtnQkFDTyxjQUFjO3NCQUE1QyxNQUFNO3VCQUFDLHFCQUFxQjtnQkFDQSxZQUFZO3NCQUF4QyxNQUFNO3VCQUFDLG1CQUFtQjtnQkFzRzNCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCxcblx0U2ltcGxlQ2hhbmdlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBsYXRMbmcsIExhdExuZywgTGF0TG5nQm91bmRzLCBMZWFmbGV0RXZlbnQsIExlYWZsZXRNb3VzZUV2ZW50LCBtYXAsIE1hcCwgTWFwT3B0aW9ucyB9IGZyb20gJ2xlYWZsZXQnO1xuXG5pbXBvcnQgeyBMZWFmbGV0VXRpbCB9IGZyb20gJy4vbGVhZmxldC51dGlsJztcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnW2xlYWZsZXRdJ1xufSlcbmV4cG9ydCBjbGFzcyBMZWFmbGV0RGlyZWN0aXZlXG5cdGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB7XG5cblx0cmVhZG9ubHkgREVGQVVMVF9aT09NID0gMTtcblx0cmVhZG9ubHkgREVGQVVMVF9DRU5URVIgPSBsYXRMbmcoMzguOTA3MTkyLCAtNzcuMDM2ODcxKTtcblx0cmVhZG9ubHkgREVGQVVMVF9GUFpfT1BUSU9OUyA9IHt9O1xuXG5cdHJlc2l6ZVRpbWVyOiBhbnk7XG5cblx0Ly8gUmVmZXJlbmNlIHRvIHRoZSBwcmltYXJ5IG1hcCBvYmplY3Rcblx0bWFwOiBNYXA7XG5cblx0QElucHV0KCdsZWFmbGV0Rml0Qm91bmRzT3B0aW9ucycpIGZpdEJvdW5kc09wdGlvbnMgPSB0aGlzLkRFRkFVTFRfRlBaX09QVElPTlM7XG5cdEBJbnB1dCgnbGVhZmxldFBhbk9wdGlvbnMnKSBwYW5PcHRpb25zID0gdGhpcy5ERUZBVUxUX0ZQWl9PUFRJT05TO1xuXHRASW5wdXQoJ2xlYWZsZXRab29tT3B0aW9ucycpIHpvb21PcHRpb25zID0gdGhpcy5ERUZBVUxUX0ZQWl9PUFRJT05TO1xuXHRASW5wdXQoJ2xlYWZsZXRab29tUGFuT3B0aW9ucycpIHpvb21QYW5PcHRpb25zID0gdGhpcy5ERUZBVUxUX0ZQWl9PUFRJT05TO1xuXG5cblx0Ly8gRGVmYXVsdCBjb25maWd1cmF0aW9uXG5cdEBJbnB1dCgnbGVhZmxldE9wdGlvbnMnKSBvcHRpb25zOiBNYXBPcHRpb25zID0ge307XG5cblx0Ly8gQ29uZmlndXJlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgbWFwXG5cdEBPdXRwdXQoJ2xlYWZsZXRNYXBSZWFkeScpIG1hcFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxNYXA+KCk7XG5cblx0Ly8gWm9vbSBsZXZlbCBmb3IgdGhlIG1hcFxuXHRASW5wdXQoJ2xlYWZsZXRab29tJykgem9vbTogbnVtYmVyO1xuXHRAT3V0cHV0KCdsZWFmbGV0Wm9vbUNoYW5nZScpIHpvb21DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuXHQvLyBDZW50ZXIgb2YgdGhlIG1hcFxuXHRASW5wdXQoJ2xlYWZsZXRDZW50ZXInKSBjZW50ZXI6IExhdExuZztcblx0QE91dHB1dCgnbGVhZmxldENlbnRlckNoYW5nZScpIGNlbnRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TGF0TG5nPigpO1xuXG5cdC8vIFNldCBmaXQgYm91bmRzIGZvciBtYXBcblx0QElucHV0KCdsZWFmbGV0Rml0Qm91bmRzJykgZml0Qm91bmRzOiBMYXRMbmdCb3VuZHM7XG5cblx0Ly8gU2V0IHRoZSBtYXggYm91bmRzIGZvciB0aGUgbWFwXG5cdEBJbnB1dCgnbGVhZmxldE1heEJvdW5kcycpIG1heEJvdW5kczogTGF0TG5nQm91bmRzO1xuXG5cdC8vIFNldCB0aGUgbWluIHpvb20gZm9yIHRoZSBtYXBcblx0QElucHV0KCdsZWFmbGV0TWluWm9vbScpIG1pblpvb206IG51bWJlcjtcblxuXHQvLyBTZXQgdGhlIG1heCB6b29tIGZvciB0aGUgbWFwXG5cdEBJbnB1dCgnbGVhZmxldE1heFpvb20nKSBtYXhab29tOiBudW1iZXI7XG5cblxuXHQvLyBNb3VzZSBNYXAgRXZlbnRzXG5cdEBPdXRwdXQoJ2xlYWZsZXRDbGljaycpIG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPExlYWZsZXRNb3VzZUV2ZW50PigpO1xuXHRAT3V0cHV0KCdsZWFmbGV0RG91YmxlQ2xpY2snKSBvbkRvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0TW91c2VFdmVudD4oKTtcblx0QE91dHB1dCgnbGVhZmxldE1vdXNlRG93bicpIG9uTW91c2VEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0TW91c2VFdmVudD4oKTtcblx0QE91dHB1dCgnbGVhZmxldE1vdXNlVXAnKSBvbk1vdXNlVXAgPSBuZXcgRXZlbnRFbWl0dGVyPExlYWZsZXRNb3VzZUV2ZW50PigpO1xuXHRAT3V0cHV0KCdsZWFmbGV0TW91c2VNb3ZlJykgb25Nb3VzZU1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPExlYWZsZXRNb3VzZUV2ZW50PigpO1xuXHRAT3V0cHV0KCdsZWFmbGV0TW91c2VPdmVyJykgb25Nb3VzZU92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPExlYWZsZXRNb3VzZUV2ZW50PigpO1xuXHRAT3V0cHV0KCdsZWFmbGV0TW91c2VPdXQnKSBvbk1vdXNlT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0TW91c2VFdmVudD4oKTtcblxuXHQvLyBNYXAgTW92ZSBFdmVudHNcblx0QE91dHB1dCgnbGVhZmxldE1hcE1vdmUnKSBvbk1hcE1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPExlYWZsZXRFdmVudD4oKTtcblx0QE91dHB1dCgnbGVhZmxldE1hcE1vdmVTdGFydCcpIG9uTWFwTW92ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0RXZlbnQ+KCk7XG5cdEBPdXRwdXQoJ2xlYWZsZXRNYXBNb3ZlRW5kJykgb25NYXBNb3ZlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0RXZlbnQ+KCk7XG5cblx0Ly8gTWFwIFpvb20gRXZlbnRzXG5cdEBPdXRwdXQoJ2xlYWZsZXRNYXBab29tJykgb25NYXBab29tID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0RXZlbnQ+KCk7XG5cdEBPdXRwdXQoJ2xlYWZsZXRNYXBab29tU3RhcnQnKSBvbk1hcFpvb21TdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8TGVhZmxldEV2ZW50PigpO1xuXHRAT3V0cHV0KCdsZWFmbGV0TWFwWm9vbUVuZCcpIG9uTWFwWm9vbUVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8TGVhZmxldEV2ZW50PigpO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHtcblx0XHQvLyBOb3RoaW5nIGhlcmVcblx0fVxuXG5cdG5nT25Jbml0KCkge1xuXG5cdFx0Ly8gQ3JlYXRlIHRoZSBtYXAgb3V0c2lkZSBvZiBhbmd1bGFyIHNvIHRoZSB2YXJpb3VzIG1hcCBldmVudHMgZG9uJ3QgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG5cdFx0dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBtYXAgd2l0aCBzb21lIHJlYXNvbmFibGUgZGVmYXVsdHNcblx0XHRcdHRoaXMubWFwID0gbWFwKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLm9wdGlvbnMpO1xuXHRcdFx0dGhpcy5hZGRNYXBFdmVudExpc3RlbmVycygpO1xuXG5cdFx0fSk7XG5cblx0XHQvLyBPbmx5IHNldFZpZXcgaWYgdGhlcmUgaXMgYSBjZW50ZXIvem9vbVxuXHRcdGlmIChudWxsICE9IHRoaXMuY2VudGVyICYmIG51bGwgIT0gdGhpcy56b29tKSB7XG5cdFx0XHR0aGlzLnNldFZpZXcodGhpcy5jZW50ZXIsIHRoaXMuem9vbSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHVwIGFsbCB0aGUgaW5pdGlhbCBzZXR0aW5nc1xuXHRcdGlmIChudWxsICE9IHRoaXMuZml0Qm91bmRzKSB7XG5cdFx0XHR0aGlzLnNldEZpdEJvdW5kcyh0aGlzLmZpdEJvdW5kcyk7XG5cdFx0fVxuXG5cdFx0aWYgKG51bGwgIT0gdGhpcy5tYXhCb3VuZHMpIHtcblx0XHRcdHRoaXMuc2V0TWF4Qm91bmRzKHRoaXMubWF4Qm91bmRzKTtcblx0XHR9XG5cblx0XHRpZiAobnVsbCAhPSB0aGlzLm1pblpvb20pIHtcblx0XHRcdHRoaXMuc2V0TWluWm9vbSh0aGlzLm1pblpvb20pO1xuXHRcdH1cblxuXHRcdGlmIChudWxsICE9IHRoaXMubWF4Wm9vbSkge1xuXHRcdFx0dGhpcy5zZXRNYXhab29tKHRoaXMubWF4Wm9vbSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kb1Jlc2l6ZSgpO1xuXG5cdFx0Ly8gRmlyZSBtYXAgcmVhZHkgZXZlbnRcblx0XHR0aGlzLm1hcFJlYWR5LmVtaXQodGhpcy5tYXApO1xuXG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KSB7XG5cblx0XHQvKlxuXHRcdCAqIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB0byBhZGRyZXNzIGFuIGlzc3VlIHdpdGggb3VyIChiYXNpYykgaW1wbGVtZW50YXRpb24gb2Zcblx0XHQgKiB6b29taW5nIGFuZCBwYW5uaW5nLiBGcm9tIG91ciB0ZXN0aW5nLCBpdCBzZWVtcyB0aGF0IGEgcGFuIG9wZXJhdGlvbiBmb2xsb3dlZFxuXHRcdCAqIGJ5IGEgem9vbSBvcGVyYXRpb24gaW4gdGhlIHNhbWUgdGhyZWFkIHdpbGwgaW50ZXJmZXJlIHdpdGggZWFjaG90aGVyLiBUaGUgem9vbVxuXHRcdCAqIG9wZXJhdGlvbiBpbnRlcnJ1cHRzL2NhbmNlbHMgdGhlIHBhbiwgcmVzdWx0aW5nIGluIGEgZmluYWwgY2VudGVyIHBvaW50IHRoYXQgaXNcblx0XHQgKiBpbmFjY3VyYXRlLiBUaGUgc29sdXRpb24gc2VlbXMgdG8gYmUgdG8gZWl0aGVyIHNlcGFyYXRlIHRoZW0gd2l0aCBhIHRpbWVvdXQgb3Jcblx0XHQgICogdG8gY29sbGFwc2UgdGhlbSBpbnRvIGEgc2V0VmlldyBjYWxsLlxuXHRcdCAqL1xuXG5cdFx0Ly8gWm9vbWluZyBhbmQgUGFubmluZ1xuXHRcdGlmIChjaGFuZ2VzWyd6b29tJ10gJiYgY2hhbmdlc1snY2VudGVyJ10gJiYgbnVsbCAhPSB0aGlzLnpvb20gJiYgbnVsbCAhPSB0aGlzLmNlbnRlcikge1xuXHRcdFx0dGhpcy5zZXRWaWV3KGNoYW5nZXNbJ2NlbnRlciddLmN1cnJlbnRWYWx1ZSwgY2hhbmdlc1snem9vbSddLmN1cnJlbnRWYWx1ZSk7XG5cdFx0fVxuXHRcdC8vIFNldCB0aGUgem9vbSBsZXZlbFxuXHRcdGVsc2UgaWYgKGNoYW5nZXNbJ3pvb20nXSkge1xuXHRcdFx0dGhpcy5zZXRab29tKGNoYW5nZXNbJ3pvb20nXS5jdXJyZW50VmFsdWUpO1xuXHRcdH1cblx0XHQvLyBTZXQgdGhlIG1hcCBjZW50ZXJcblx0XHRlbHNlIGlmIChjaGFuZ2VzWydjZW50ZXInXSkge1xuXHRcdFx0dGhpcy5zZXRDZW50ZXIoY2hhbmdlc1snY2VudGVyJ10uY3VycmVudFZhbHVlKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBvcHRpb25zXG5cdFx0aWYgKGNoYW5nZXNbJ2ZpdEJvdW5kcyddKSB7XG5cdFx0XHR0aGlzLnNldEZpdEJvdW5kcyhjaGFuZ2VzWydmaXRCb3VuZHMnXS5jdXJyZW50VmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzWydtYXhCb3VuZHMnXSkge1xuXHRcdFx0dGhpcy5zZXRNYXhCb3VuZHMoY2hhbmdlc1snbWF4Qm91bmRzJ10uY3VycmVudFZhbHVlKTtcblx0XHR9XG5cblx0XHRpZiAoY2hhbmdlc1snbWluWm9vbSddKSB7XG5cdFx0XHR0aGlzLnNldE1pblpvb20oY2hhbmdlc1snbWluWm9vbSddLmN1cnJlbnRWYWx1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNoYW5nZXNbJ21heFpvb20nXSkge1xuXHRcdFx0dGhpcy5zZXRNYXhab29tKGNoYW5nZXNbJ21heFpvb20nXS5jdXJyZW50VmFsdWUpO1xuXHRcdH1cblxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0Ly8gSWYgdGhpcyBkaXJlY3RpdmUgaXMgZGVzdHJveWVkLCB0aGUgbWFwIGlzIHRvb1xuXHRcdGlmIChudWxsICE9IHRoaXMubWFwKSB7XG5cdFx0XHR0aGlzLm1hcC5yZW1vdmUoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWFwKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcDtcblx0fVxuXG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFtdKVxuXHRvblJlc2l6ZSgpIHtcblx0XHR0aGlzLmRlbGF5UmVzaXplKCk7XG5cdH1cblxuXHRwcml2YXRlIGFkZE1hcEV2ZW50TGlzdGVuZXJzKCkge1xuXG5cdFx0Y29uc3QgcmVnaXN0ZXJFdmVudEhhbmRsZXIgPSAoZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6IChlOiBMZWFmbGV0RXZlbnQpID0+IGFueSkgPT4ge1xuXHRcdFx0dGhpcy5tYXAub24oZXZlbnROYW1lLCBoYW5kbGVyKTtcblx0XHR9O1xuXG5cblx0XHQvLyBBZGQgYWxsIHRoZSBwYXNzLXRocm91Z2ggbW91c2UgZXZlbnQgaGFuZGxlcnNcblx0XHRyZWdpc3RlckV2ZW50SGFuZGxlcignY2xpY2snLCAoZTogTGVhZmxldE1vdXNlRXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbkNsaWNrLCBlKSk7XG5cdFx0cmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2RibGNsaWNrJywgKGU6IExlYWZsZXRNb3VzZUV2ZW50KSA9PiBMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMub25Eb3VibGVDbGljaywgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtb3VzZWRvd24nLCAoZTogTGVhZmxldE1vdXNlRXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbk1vdXNlRG93biwgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtb3VzZXVwJywgKGU6IExlYWZsZXRNb3VzZUV2ZW50KSA9PiBMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMub25Nb3VzZVVwLCBlKSk7XG5cdFx0cmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21vdXNlb3ZlcicsIChlOiBMZWFmbGV0TW91c2VFdmVudCkgPT4gTGVhZmxldFV0aWwuaGFuZGxlRXZlbnQodGhpcy56b25lLCB0aGlzLm9uTW91c2VPdmVyLCBlKSk7XG5cdFx0cmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21vdXNlb3V0JywgKGU6IExlYWZsZXRNb3VzZUV2ZW50KSA9PiBMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMub25Nb3VzZU91dCwgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtb3VzZW1vdmUnLCAoZTogTGVhZmxldE1vdXNlRXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbk1vdXNlTW92ZSwgZSkpO1xuXG5cdFx0cmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3pvb21zdGFydCcsIChlOiBMZWFmbGV0RXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbk1hcFpvb21TdGFydCwgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd6b29tJywgKGU6IExlYWZsZXRFdmVudCkgPT4gTGVhZmxldFV0aWwuaGFuZGxlRXZlbnQodGhpcy56b25lLCB0aGlzLm9uTWFwWm9vbSwgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd6b29tZW5kJywgKGU6IExlYWZsZXRFdmVudCkgPT4gTGVhZmxldFV0aWwuaGFuZGxlRXZlbnQodGhpcy56b25lLCB0aGlzLm9uTWFwWm9vbUVuZCwgZSkpO1xuXHRcdHJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtb3Zlc3RhcnQnLCAoZTogTGVhZmxldEV2ZW50KSA9PiBMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMub25NYXBNb3ZlU3RhcnQsIGUpKTtcblx0XHRyZWdpc3RlckV2ZW50SGFuZGxlcignbW92ZScsIChlOiBMZWFmbGV0RXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbk1hcE1vdmUsIGUpKTtcblx0XHRyZWdpc3RlckV2ZW50SGFuZGxlcignbW92ZWVuZCcsIChlOiBMZWFmbGV0RXZlbnQpID0+IExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy5vbk1hcE1vdmVFbmQsIGUpKTtcblxuXG5cdFx0Ly8gVXBkYXRlIGFueSB0aGluZ3MgZm9yIHdoaWNoIHdlIHByb3ZpZGUgb3V0cHV0IGJpbmRpbmdzXG5cdFx0Y29uc3Qgb3V0cHV0VXBkYXRlSGFuZGxlciA9ICgpID0+IHtcblx0XHRcdGNvbnN0IHpvb20gPSB0aGlzLm1hcC5nZXRab29tKCk7XG5cdFx0XHRpZiAoem9vbSAhPT0gdGhpcy56b29tKSB7XG5cdFx0XHRcdHRoaXMuem9vbSA9IHpvb207XG5cdFx0XHRcdExlYWZsZXRVdGlsLmhhbmRsZUV2ZW50KHRoaXMuem9uZSwgdGhpcy56b29tQ2hhbmdlLCB6b29tKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY2VudGVyID0gdGhpcy5tYXAuZ2V0Q2VudGVyKCk7XG5cdFx0XHRpZiAobnVsbCAhPSBjZW50ZXIgfHwgbnVsbCAhPSB0aGlzLmNlbnRlcikge1xuXG5cdFx0XHRcdGlmICgoKG51bGwgPT0gY2VudGVyIHx8IG51bGwgPT0gdGhpcy5jZW50ZXIpICYmIGNlbnRlciAhPT0gdGhpcy5jZW50ZXIpXG5cdFx0XHRcdFx0fHwgKGNlbnRlci5sYXQgIT09IHRoaXMuY2VudGVyLmxhdCB8fCBjZW50ZXIubG5nICE9PSB0aGlzLmNlbnRlci5sbmcpKSB7XG5cblx0XHRcdFx0XHR0aGlzLmNlbnRlciA9IGNlbnRlcjtcblx0XHRcdFx0XHRMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMuY2VudGVyQ2hhbmdlLCBjZW50ZXIpO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0cmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21vdmVlbmQnLCBvdXRwdXRVcGRhdGVIYW5kbGVyKTtcblx0XHRyZWdpc3RlckV2ZW50SGFuZGxlcignem9vbWVuZCcsIG91dHB1dFVwZGF0ZUhhbmRsZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2l6ZSB0aGUgbWFwIHRvIGZpdCBpdCdzIHBhcmVudCBjb250YWluZXJcblx0ICovXG5cdHByaXZhdGUgZG9SZXNpemUoKSB7XG5cblx0XHQvLyBSdW4gdGhpcyBvdXRzaWRlIG9mIGFuZ3VsYXIgc28gdGhlIG1hcCBldmVudHMgc3RheSBvdXRzaWRlIG9mIGFuZ3VsYXJcblx0XHR0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXG5cdFx0XHQvLyBJbnZhbGlkYXRlIHRoZSBtYXAgc2l6ZSB0byB0cmlnZ2VyIGl0IHRvIHVwZGF0ZSBpdHNlbGZcblx0XHRcdGlmIChudWxsICE9IHRoaXMubWFwKSB7XG5cdFx0XHRcdHRoaXMubWFwLmludmFsaWRhdGVTaXplKHt9KTtcblx0XHRcdH1cblxuXHRcdH0pO1xuXG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlIGEgZGVsYXllZCByZXNpemUgb2YgdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0cHJpdmF0ZSBkZWxheVJlc2l6ZSgpIHtcblx0XHRpZiAobnVsbCAhPSB0aGlzLnJlc2l6ZVRpbWVyKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lcik7XG5cdFx0fVxuXHRcdHRoaXMucmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuZG9SZXNpemUuYmluZCh0aGlzKSwgMjAwKTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlldyAoY2VudGVyL3pvb20pIGFsbCBhdCBvbmNlXG5cdCAqIEBwYXJhbSBjZW50ZXIgVGhlIG5ldyBjZW50ZXJcblx0ICogQHBhcmFtIHpvb20gVGhlIG5ldyB6b29tIGxldmVsXG5cdCAqL1xuXHRwcml2YXRlIHNldFZpZXcoY2VudGVyOiBMYXRMbmcsIHpvb206IG51bWJlcikge1xuXG5cdFx0aWYgKG51bGwgIT0gdGhpcy5tYXAgJiYgbnVsbCAhPSBjZW50ZXIgJiYgbnVsbCAhPSB6b29tKSB7XG5cdFx0XHR0aGlzLm1hcC5zZXRWaWV3KGNlbnRlciwgem9vbSwgdGhpcy56b29tUGFuT3B0aW9ucyk7XG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBtYXAgem9vbSBsZXZlbFxuXHQgKiBAcGFyYW0gem9vbSB0aGUgbmV3IHpvb20gbGV2ZWwgZm9yIHRoZSBtYXBcblx0ICovXG5cdHByaXZhdGUgc2V0Wm9vbSh6b29tOiBudW1iZXIpIHtcblxuXHRcdGlmIChudWxsICE9IHRoaXMubWFwICYmIG51bGwgIT0gem9vbSkge1xuXHRcdFx0dGhpcy5tYXAuc2V0Wm9vbSh6b29tLCB0aGlzLnpvb21PcHRpb25zKTtcblx0XHR9XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGNlbnRlciBvZiB0aGUgbWFwXG5cdCAqIEBwYXJhbSBjZW50ZXIgdGhlIGNlbnRlciBwb2ludFxuXHQgKi9cblx0cHJpdmF0ZSBzZXRDZW50ZXIoY2VudGVyOiBMYXRMbmcpIHtcblxuXHRcdGlmIChudWxsICE9IHRoaXMubWFwICYmIG51bGwgIT0gY2VudGVyKSB7XG5cdFx0XHR0aGlzLm1hcC5wYW5UbyhjZW50ZXIsIHRoaXMucGFuT3B0aW9ucyk7XG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogRml0IHRoZSBtYXAgdG8gdGhlIGJvdW5kc1xuXHQgKiBAcGFyYW0gbGF0TG5nQm91bmRzIHRoZSBib3VuZGFyeSB0byBzZXRcblx0ICovXG5cdHByaXZhdGUgc2V0Rml0Qm91bmRzKGxhdExuZ0JvdW5kczogTGF0TG5nQm91bmRzKSB7XG5cblx0XHRpZiAobnVsbCAhPSB0aGlzLm1hcCAmJiBudWxsICE9IGxhdExuZ0JvdW5kcykge1xuXHRcdFx0dGhpcy5tYXAuZml0Qm91bmRzKGxhdExuZ0JvdW5kcywgdGhpcy5maXRCb3VuZHNPcHRpb25zKTtcblx0XHR9XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIG1hcCdzIG1heCBib3VuZHNcblx0ICogQHBhcmFtIGxhdExuZ0JvdW5kcyB0aGUgYm91bmRhcnkgdG8gc2V0XG5cdCAqL1xuXHRwcml2YXRlIHNldE1heEJvdW5kcyhsYXRMbmdCb3VuZHM6IExhdExuZ0JvdW5kcykge1xuXG5cdFx0aWYgKG51bGwgIT0gdGhpcy5tYXAgJiYgbnVsbCAhPSBsYXRMbmdCb3VuZHMpIHtcblx0XHRcdHRoaXMubWFwLnNldE1heEJvdW5kcyhsYXRMbmdCb3VuZHMpO1xuXHRcdH1cblxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgbWFwJ3MgbWluIHpvb21cblx0ICogQHBhcmFtIG51bWJlciB0aGUgbmV3IG1pbiB6b29tXG5cdCAqL1xuXHRwcml2YXRlIHNldE1pblpvb20oem9vbTogbnVtYmVyKSB7XG5cblx0XHRpZiAobnVsbCAhPSB0aGlzLm1hcCAmJiBudWxsICE9IHpvb20pIHtcblx0XHRcdHRoaXMubWFwLnNldE1pblpvb20oem9vbSk7XG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBtYXAncyBtaW4gem9vbVxuXHQgKiBAcGFyYW0gbnVtYmVyIHRoZSBuZXcgbWluIHpvb21cblx0ICovXG5cdHByaXZhdGUgc2V0TWF4Wm9vbSh6b29tOiBudW1iZXIpIHtcblxuXHRcdGlmIChudWxsICE9IHRoaXMubWFwICYmIG51bGwgIT0gem9vbSkge1xuXHRcdFx0dGhpcy5tYXAuc2V0TWF4Wm9vbSh6b29tKTtcblx0XHR9XG5cblx0fVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export class LeafletDirectiveWrapper {
|
|
2
|
+
constructor(leafletDirective) {
|
|
3
|
+
this.leafletDirective = leafletDirective;
|
|
4
|
+
}
|
|
5
|
+
init() {
|
|
6
|
+
// Nothing for now
|
|
7
|
+
}
|
|
8
|
+
getMap() {
|
|
9
|
+
return this.leafletDirective.getMap();
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC5kaXJlY3RpdmUud3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1sZWFmbGV0L3NyYy9saWIvY29yZS9sZWFmbGV0LmRpcmVjdGl2ZS53cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sT0FBTyx1QkFBdUI7SUFLbkMsWUFBWSxnQkFBa0M7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJO1FBQ0gsa0JBQWtCO0lBQ25CLENBQUM7SUFFRCxNQUFNO1FBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdkMsQ0FBQztDQUVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGVhZmxldERpcmVjdGl2ZSB9IGZyb20gJy4vbGVhZmxldC5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBNYXAgfSBmcm9tICdsZWFmbGV0JztcblxuZXhwb3J0IGNsYXNzIExlYWZsZXREaXJlY3RpdmVXcmFwcGVyIHtcblxuXHQvLyBSZWZlcmVuY2UgdG8gdGhlIG1haW4gbGVhZmxldCBkaXJlY3RpdmVcblx0cHJvdGVjdGVkIGxlYWZsZXREaXJlY3RpdmU6IExlYWZsZXREaXJlY3RpdmU7XG5cblx0Y29uc3RydWN0b3IobGVhZmxldERpcmVjdGl2ZTogTGVhZmxldERpcmVjdGl2ZSkge1xuXHRcdHRoaXMubGVhZmxldERpcmVjdGl2ZSA9IGxlYWZsZXREaXJlY3RpdmU7XG5cdH1cblxuXHRpbml0KCkge1xuXHRcdC8vIE5vdGhpbmcgZm9yIG5vd1xuXHR9XG5cblx0Z2V0TWFwKCk6IE1hcCB7XG5cdFx0cmV0dXJuIHRoaXMubGVhZmxldERpcmVjdGl2ZS5nZXRNYXAoKTtcblx0fVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class LeafletUtil {
|
|
2
|
+
static mapToArray(map) {
|
|
3
|
+
const toReturn = [];
|
|
4
|
+
for (const k in map) {
|
|
5
|
+
if (map.hasOwnProperty(k)) {
|
|
6
|
+
toReturn.push(map[k]);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return toReturn;
|
|
10
|
+
}
|
|
11
|
+
static handleEvent(zone, eventEmitter, event) {
|
|
12
|
+
// Don't want to emit if there are no observers
|
|
13
|
+
if (0 < eventEmitter.observers.length) {
|
|
14
|
+
zone.run(() => {
|
|
15
|
+
eventEmitter.emit(event);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxlYWZsZXQvc3JjL2xpYi9jb3JlL2xlYWZsZXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sV0FBVztJQUV2QixNQUFNLENBQUMsVUFBVSxDQUFJLEdBQTJCO1FBQy9DLE1BQU0sUUFBUSxHQUFRLEVBQUUsQ0FBQztRQUV6QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7UUFDRixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUksSUFBWSxFQUFFLFlBQTZCLEVBQUUsS0FBUTtRQUUxRSwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDYixZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQztJQUVGLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBMZWFmbGV0VXRpbCB7XG5cblx0c3RhdGljIG1hcFRvQXJyYXk8VD4obWFwOiB7IFsga2V5OiBzdHJpbmcgXTogVCB9KTogVFtdIHtcblx0XHRjb25zdCB0b1JldHVybjogVFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGsgaW4gbWFwKSB7XG5cdFx0XHRpZiAobWFwLmhhc093blByb3BlcnR5KGspKSB7XG5cdFx0XHRcdHRvUmV0dXJuLnB1c2gobWFwW2tdKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdG9SZXR1cm47XG5cdH1cblxuXHRzdGF0aWMgaGFuZGxlRXZlbnQ8VD4oem9uZTogTmdab25lLCBldmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxUPiwgZXZlbnQ6IFQpIHtcblxuXHRcdC8vIERvbid0IHdhbnQgdG8gZW1pdCBpZiB0aGVyZSBhcmUgbm8gb2JzZXJ2ZXJzXG5cdFx0aWYgKDAgPCBldmVudEVtaXR0ZXIub2JzZXJ2ZXJzLmxlbmd0aCkge1xuXHRcdFx0em9uZS5ydW4oKCkgPT4ge1xuXHRcdFx0XHRldmVudEVtaXR0ZXIuZW1pdChldmVudCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0fVxufVxuIl19
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { Directive, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { LeafletUtil } from '../../core/leaflet.util';
|
|
3
|
+
import { LeafletDirectiveWrapper } from '../../core/leaflet.directive.wrapper';
|
|
4
|
+
import { LeafletControlLayersWrapper } from '../control/leaflet-control-layers.wrapper';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../core/leaflet.directive";
|
|
7
|
+
/**
|
|
8
|
+
* Baselayers directive
|
|
9
|
+
*
|
|
10
|
+
* This directive is provided as a convenient way to add baselayers to the map. The input accepts
|
|
11
|
+
* a key-value map of layer name -> layer. Mutable changed are detected. On changes, a differ is
|
|
12
|
+
* used to determine what changed so that layers are appropriately added or removed. This directive
|
|
13
|
+
* will also add the layers control so users can switch between available base layers.
|
|
14
|
+
*
|
|
15
|
+
* To specify which layer to show as the 'active' baselayer, you will want to add it to the map
|
|
16
|
+
* using the layers directive. Otherwise, the plugin will use the last one it sees.
|
|
17
|
+
*/
|
|
18
|
+
export class LeafletBaseLayersDirective {
|
|
19
|
+
// Set/get baseLayers
|
|
20
|
+
set baseLayers(v) {
|
|
21
|
+
this.baseLayersValue = v;
|
|
22
|
+
this.updateBaseLayers();
|
|
23
|
+
}
|
|
24
|
+
get baseLayers() {
|
|
25
|
+
return this.baseLayersValue;
|
|
26
|
+
}
|
|
27
|
+
constructor(leafletDirective, differs, zone) {
|
|
28
|
+
this.differs = differs;
|
|
29
|
+
this.zone = zone;
|
|
30
|
+
// Output for once the layers control is ready
|
|
31
|
+
this.layersControlReady = new EventEmitter();
|
|
32
|
+
this.leafletDirective = new LeafletDirectiveWrapper(leafletDirective);
|
|
33
|
+
this.controlLayers = new LeafletControlLayersWrapper(this.zone, this.layersControlReady);
|
|
34
|
+
this.baseLayersDiffer = this.differs.find({}).create();
|
|
35
|
+
}
|
|
36
|
+
ngOnDestroy() {
|
|
37
|
+
this.baseLayers = {};
|
|
38
|
+
if (null != this.controlLayers.getLayersControl()) {
|
|
39
|
+
this.controlLayers.getLayersControl().remove();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
ngOnInit() {
|
|
43
|
+
// Init the map
|
|
44
|
+
this.leafletDirective.init();
|
|
45
|
+
// Create the control outside angular to prevent events from triggering chnage detection
|
|
46
|
+
this.zone.runOutsideAngular(() => {
|
|
47
|
+
// Initially configure the controlLayers
|
|
48
|
+
this.controlLayers
|
|
49
|
+
.init({}, this.layersControlOptions)
|
|
50
|
+
.addTo(this.leafletDirective.getMap());
|
|
51
|
+
});
|
|
52
|
+
this.updateBaseLayers();
|
|
53
|
+
}
|
|
54
|
+
ngDoCheck() {
|
|
55
|
+
this.updateBaseLayers();
|
|
56
|
+
}
|
|
57
|
+
updateBaseLayers() {
|
|
58
|
+
const map = this.leafletDirective.getMap();
|
|
59
|
+
const layersControl = this.controlLayers.getLayersControl();
|
|
60
|
+
if (null != map && null != layersControl && null != this.baseLayersDiffer) {
|
|
61
|
+
const changes = this.baseLayersDiffer.diff(this.baseLayersValue);
|
|
62
|
+
const results = this.controlLayers.applyBaseLayerChanges(changes);
|
|
63
|
+
if (results.changed()) {
|
|
64
|
+
this.syncBaseLayer();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check the current base layer and change it to the new one if necessary
|
|
70
|
+
*/
|
|
71
|
+
syncBaseLayer() {
|
|
72
|
+
const map = this.leafletDirective.getMap();
|
|
73
|
+
const layers = LeafletUtil.mapToArray(this.baseLayers);
|
|
74
|
+
let foundLayer;
|
|
75
|
+
// Search all the layers in the map to see if we can find them in the baselayer array
|
|
76
|
+
map.eachLayer((l) => {
|
|
77
|
+
foundLayer = layers.find((bl) => (l === bl));
|
|
78
|
+
});
|
|
79
|
+
// Did we find the layer?
|
|
80
|
+
if (null != foundLayer) {
|
|
81
|
+
// Yes - set the baselayer to the one we found
|
|
82
|
+
this.baseLayer = foundLayer;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// No - set the baselayer to the first in the array and add it to the map
|
|
86
|
+
if (layers.length > 0) {
|
|
87
|
+
this.baseLayer = layers[0];
|
|
88
|
+
// Add layers outside of angular to prevent events from triggering change detection
|
|
89
|
+
this.zone.runOutsideAngular(() => {
|
|
90
|
+
this.baseLayer.addTo(map);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: LeafletBaseLayersDirective, deps: [{ token: i1.LeafletDirective }, { token: i0.KeyValueDiffers }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
96
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.1", type: LeafletBaseLayersDirective, selector: "[leafletBaseLayers]", inputs: { baseLayers: ["leafletBaseLayers", "baseLayers"], layersControlOptions: ["leafletLayersControlOptions", "layersControlOptions"] }, outputs: { layersControlReady: "leafletLayersControlReady" }, ngImport: i0 }); }
|
|
97
|
+
}
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: LeafletBaseLayersDirective, decorators: [{
|
|
99
|
+
type: Directive,
|
|
100
|
+
args: [{
|
|
101
|
+
selector: '[leafletBaseLayers]'
|
|
102
|
+
}]
|
|
103
|
+
}], ctorParameters: () => [{ type: i1.LeafletDirective }, { type: i0.KeyValueDiffers }, { type: i0.NgZone }], propDecorators: { baseLayers: [{
|
|
104
|
+
type: Input,
|
|
105
|
+
args: ['leafletBaseLayers']
|
|
106
|
+
}], layersControlOptions: [{
|
|
107
|
+
type: Input,
|
|
108
|
+
args: ['leafletLayersControlOptions']
|
|
109
|
+
}], layersControlReady: [{
|
|
110
|
+
type: Output,
|
|
111
|
+
args: ['leafletLayersControlReady']
|
|
112
|
+
}] } });
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC1iYXNlbGF5ZXJzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1sZWFmbGV0L3NyYy9saWIvbGF5ZXJzL2Jhc2UvbGVhZmxldC1iYXNlbGF5ZXJzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUFXLFlBQVksRUFBRSxLQUFLLEVBQy9CLE1BQU0sRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7OztBQUd4Rjs7Ozs7Ozs7OztHQVVHO0FBSUgsTUFBTSxPQUFPLDBCQUEwQjtJQVN0QyxxQkFBcUI7SUFDckIsSUFDSSxVQUFVLENBQUMsQ0FBNEI7UUFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFFekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksVUFBVTtRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM3QixDQUFDO0lBY0QsWUFBWSxnQkFBa0MsRUFBVSxPQUF3QixFQUFVLElBQVk7UUFBOUMsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBVHRHLDhDQUE4QztRQUNULHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBUzVGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGtC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LFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQztRQUNGLENBQUM7SUFFRixDQUFDOzhHQW5IVywwQkFBMEI7a0dBQTFCLDBCQUEwQjs7MkZBQTFCLDBCQUEwQjtrQkFIdEMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUscUJBQXFCO2lCQUMvQjt3SUFZSSxVQUFVO3NCQURiLEtBQUs7dUJBQUMsbUJBQW1CO2dCQVdZLG9CQUFvQjtzQkFBekQsS0FBSzt1QkFBQyw2QkFBNkI7Z0JBR0Msa0JBQWtCO3NCQUF0RCxNQUFNO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERpcmVjdGl2ZSwgRG9DaGVjaywgRXZlbnRFbWl0dGVyLCBJbnB1dCwgS2V5VmFsdWVEaWZmZXIsIEtleVZhbHVlRGlmZmVycywgTmdab25lLCBPbkRlc3Ryb3ksXG5cdE9uSW5pdCwgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb250cm9sLCBMYXllciB9IGZyb20gJ2xlYWZsZXQnO1xuXG5pbXBvcnQgeyBMZWFmbGV0VXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvbGVhZmxldC51dGlsJztcbmltcG9ydCB7IExlYWZsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9jb3JlL2xlYWZsZXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IExlYWZsZXREaXJlY3RpdmVXcmFwcGVyIH0gZnJvbSAnLi4vLi4vY29yZS9sZWFmbGV0LmRpcmVjdGl2ZS53cmFwcGVyJztcbmltcG9ydCB7IExlYWZsZXRDb250cm9sTGF5ZXJzV3JhcHBlciB9IGZyb20gJy4uL2NvbnRyb2wvbGVhZmxldC1jb250cm9sLWxheWVycy53cmFwcGVyJztcblxuXG4vKipcbiAqIEJhc2VsYXllcnMgZGlyZWN0aXZlXG4gKlxuICogVGhpcyBkaXJlY3RpdmUgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW50IHdheSB0byBhZGQgYmFzZWxheWVycyB0byB0aGUgbWFwLiBUaGUgaW5wdXQgYWNjZXB0c1xuICogYSBrZXktdmFsdWUgbWFwIG9mIGxheWVyIG5hbWUgLT4gbGF5ZXIuIE11dGFibGUgY2hhbmdlZCBhcmUgZGV0ZWN0ZWQuIE9uIGNoYW5nZXMsIGEgZGlmZmVyIGlzXG4gKiB1c2VkIHRvIGRldGVybWluZSB3aGF0IGNoYW5nZWQgc28gdGhhdCBsYXllcnMgYXJlIGFwcHJvcHJpYXRlbHkgYWRkZWQgb3IgcmVtb3ZlZC4gVGhpcyBkaXJlY3RpdmVcbiAqIHdpbGwgYWxzbyBhZGQgdGhlIGxheWVycyBjb250cm9sIHNvIHVzZXJzIGNhbiBzd2l0Y2ggYmV0d2VlbiBhdmFpbGFibGUgYmFzZSBsYXllcnMuXG4gKlxuICogVG8gc3BlY2lmeSB3aGljaCBsYXllciB0byBzaG93IGFzIHRoZSAnYWN0aXZlJyBiYXNlbGF5ZXIsIHlvdSB3aWxsIHdhbnQgdG8gYWRkIGl0IHRvIHRoZSBtYXBcbiAqIHVzaW5nIHRoZSBsYXllcnMgZGlyZWN0aXZlLiBPdGhlcndpc2UsIHRoZSBwbHVnaW4gd2lsbCB1c2UgdGhlIGxhc3Qgb25lIGl0IHNlZXMuXG4gKi9cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1tsZWFmbGV0QmFzZUxheWVyc10nXG59KVxuZXhwb3J0IGNsYXNzIExlYWZsZXRCYXNlTGF5ZXJzRGlyZWN0aXZlXG5cdGltcGxlbWVudHMgRG9DaGVjaywgT25EZXN0cm95LCBPbkluaXQge1xuXG5cdC8vIEJhc2UgTGF5ZXJzXG5cdGJhc2VMYXllcnNWYWx1ZTogeyBbbmFtZTogc3RyaW5nXTogTGF5ZXIgfTtcblxuXHQvLyBCYXNlIExheWVycyBNYXAgRGlmZmVyXG5cdGJhc2VMYXllcnNEaWZmZXI6IEtleVZhbHVlRGlmZmVyPHN0cmluZywgTGF5ZXI+O1xuXG5cdC8vIFNldC9nZXQgYmFzZUxheWVyc1xuXHRASW5wdXQoJ2xlYWZsZXRCYXNlTGF5ZXJzJylcblx0c2V0IGJhc2VMYXllcnModjogeyBbbmFtZTogc3RyaW5nXTogTGF5ZXIgfSkge1xuXHRcdHRoaXMuYmFzZUxheWVyc1ZhbHVlID0gdjtcblxuXHRcdHRoaXMudXBkYXRlQmFzZUxheWVycygpO1xuXHR9XG5cdGdldCBiYXNlTGF5ZXJzKCk6IHsgW25hbWU6IHN0cmluZ106IExheWVyIH0ge1xuXHRcdHJldHVybiB0aGlzLmJhc2VMYXllcnNWYWx1ZTtcblx0fVxuXG5cdC8vIENvbnRyb2wgT3B0aW9uc1xuXHRASW5wdXQoJ2xlYWZsZXRMYXllcnNDb250cm9sT3B0aW9ucycpIGxheWVyc0NvbnRyb2xPcHRpb25zOiBDb250cm9sLkxheWVyc09wdGlvbnM7XG5cblx0Ly8gT3V0cHV0IGZvciBvbmNlIHRoZSBsYXllcnMgY29udHJvbCBpcyByZWFkeVxuXHRAT3V0cHV0KCdsZWFmbGV0TGF5ZXJzQ29udHJvbFJlYWR5JykgbGF5ZXJzQ29udHJvbFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxDb250cm9sLkxheWVycz4oKTtcblxuXHQvLyBBY3RpdmUgQmFzZSBMYXllclxuXHRwcml2YXRlIGJhc2VMYXllcjogTGF5ZXI7XG5cblx0cHJpdmF0ZSBsZWFmbGV0RGlyZWN0aXZlOiBMZWFmbGV0RGlyZWN0aXZlV3JhcHBlcjtcblx0cHJpdmF0ZSBjb250cm9sTGF5ZXJzOiBMZWFmbGV0Q29udHJvbExheWVyc1dyYXBwZXI7XG5cblx0Y29uc3RydWN0b3IobGVhZmxldERpcmVjdGl2ZTogTGVhZmxldERpcmVjdGl2ZSwgcHJpdmF0ZSBkaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMsIHByaXZhdGUgem9uZTogTmdab25lKSB7XG5cdFx0dGhpcy5sZWFmbGV0RGlyZWN0aXZlID0gbmV3IExlYWZsZXREaXJlY3RpdmVXcmFwcGVyKGxlYWZsZXREaXJlY3RpdmUpO1xuXHRcdHRoaXMuY29udHJvbExheWVycyA9IG5ldyBMZWFmbGV0Q29udHJvbExheWVyc1dyYXBwZXIodGhpcy56b25lLCB0aGlzLmxheWVyc0NvbnRyb2xSZWFkeSk7XG5cdFx0dGhpcy5iYXNlTGF5ZXJzRGlmZmVyID0gdGhpcy5kaWZmZXJzLmZpbmQoe30pLmNyZWF0ZTxzdHJpbmcsIExheWVyPigpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5iYXNlTGF5ZXJzID0ge307XG5cdFx0aWYgKG51bGwgIT0gdGhpcy5jb250cm9sTGF5ZXJzLmdldExheWVyc0NvbnRyb2woKSkge1xuXHRcdFx0dGhpcy5jb250cm9sTGF5ZXJzLmdldExheWVyc0NvbnRyb2woKS5yZW1vdmUoKTtcblx0XHR9XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblxuXHRcdC8vIEluaXQgdGhlIG1hcFxuXHRcdHRoaXMubGVhZmxldERpcmVjdGl2ZS5pbml0KCk7XG5cblx0XHQvLyBDcmVhdGUgdGhlIGNvbnRyb2wgb3V0c2lkZSBhbmd1bGFyIHRvIHByZXZlbnQgZXZlbnRzIGZyb20gdHJpZ2dlcmluZyBjaG5hZ2UgZGV0ZWN0aW9uXG5cdFx0dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblxuXHRcdFx0Ly8gSW5pdGlhbGx5IGNvbmZpZ3VyZSB0aGUgY29udHJvbExheWVyc1xuXHRcdFx0dGhpcy5jb250cm9sTGF5ZXJzXG5cdFx0XHRcdC5pbml0KHt9LCB0aGlzLmxheWVyc0NvbnRyb2xPcHRpb25zKVxuXHRcdFx0XHQuYWRkVG8odGhpcy5sZWFmbGV0RGlyZWN0aXZlLmdldE1hcCgpKTtcblxuXHRcdH0pO1xuXG5cdFx0dGhpcy51cGRhdGVCYXNlTGF5ZXJzKCk7XG5cblx0fVxuXG5cdG5nRG9DaGVjaygpIHtcblx0XHR0aGlzLnVwZGF0ZUJhc2VMYXllcnMoKTtcblx0fVxuXG5cdHByb3RlY3RlZCB1cGRhdGVCYXNlTGF5ZXJzKCkge1xuXG5cdFx0Y29uc3QgbWFwID0gdGhpcy5sZWFmbGV0RGlyZWN0aXZlLmdldE1hcCgpO1xuXHRcdGNvbnN0IGxheWVyc0NvbnRyb2wgPSB0aGlzLmNvbnRyb2xMYXllcnMuZ2V0TGF5ZXJzQ29udHJvbCgpO1xuXG5cdFx0aWYgKG51bGwgIT0gbWFwICYmIG51bGwgIT0gbGF5ZXJzQ29udHJvbCAmJiBudWxsICE9IHRoaXMuYmFzZUxheWVyc0RpZmZlcikge1xuXHRcdFx0Y29uc3QgY2hhbmdlcyA9IHRoaXMuYmFzZUxheWVyc0RpZmZlci5kaWZmKHRoaXMuYmFzZUxheWVyc1ZhbHVlKTtcblx0XHRcdGNvbnN0IHJlc3VsdHMgPSB0aGlzLmNvbnRyb2xMYXllcnMuYXBwbHlCYXNlTGF5ZXJDaGFuZ2VzKGNoYW5nZXMpO1xuXG5cdFx0XHRpZiAocmVzdWx0cy5jaGFuZ2VkKCkpIHtcblx0XHRcdFx0dGhpcy5zeW5jQmFzZUxheWVyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgdGhlIGN1cnJlbnQgYmFzZSBsYXllciBhbmQgY2hhbmdlIGl0IHRvIHRoZSBuZXcgb25lIGlmIG5lY2Vzc2FyeVxuXHQgKi9cblx0cHJvdGVjdGVkIHN5bmNCYXNlTGF5ZXIoKSB7XG5cblx0XHRjb25zdCBtYXAgPSB0aGlzLmxlYWZsZXREaXJlY3RpdmUuZ2V0TWFwKCk7XG5cdFx0Y29uc3QgbGF5ZXJzID0gTGVhZmxldFV0aWwubWFwVG9BcnJheSh0aGlzLmJhc2VMYXllcnMpO1xuXHRcdGxldCBmb3VuZExheWVyOiBMYXllcjtcblxuXHRcdC8vIFNlYXJjaCBhbGwgdGhlIGxheWVycyBpbiB0aGUgbWFwIHRvIHNlZSBpZiB3ZSBjYW4gZmluZCB0aGVtIGluIHRoZSBiYXNlbGF5ZXIgYXJyYXlcblx0XHRtYXAuZWFjaExheWVyKChsOiBMYXllcikgPT4ge1xuXHRcdFx0Zm91bmRMYXllciA9IGxheWVycy5maW5kKChibCkgPT4gKGwgPT09IGJsKSk7XG5cdFx0fSk7XG5cblx0XHQvLyBEaWQgd2UgZmluZCB0aGUgbGF5ZXI/XG5cdFx0aWYgKG51bGwgIT0gZm91bmRMYXllcikge1xuXHRcdFx0Ly8gWWVzIC0gc2V0IHRoZSBiYXNlbGF5ZXIgdG8gdGhlIG9uZSB3ZSBmb3VuZFxuXHRcdFx0dGhpcy5iYXNlTGF5ZXIgPSBmb3VuZExheWVyO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdC8vIE5vIC0gc2V0IHRoZSBiYXNlbGF5ZXIgdG8gdGhlIGZpcnN0IGluIHRoZSBhcnJheSBhbmQgYWRkIGl0IHRvIHRoZSBtYXBcblx0XHRcdGlmIChsYXllcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aGlzLmJhc2VMYXllciA9IGxheWVyc1swXTtcblxuXHRcdFx0XHQvLyBBZGQgbGF5ZXJzIG91dHNpZGUgb2YgYW5ndWxhciB0byBwcmV2ZW50IGV2ZW50cyBmcm9tIHRyaWdnZXJpbmcgY2hhbmdlIGRldGVjdGlvblxuXHRcdFx0XHR0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmFzZUxheWVyLmFkZFRvKG1hcCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class LeafletControlLayersChanges {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.layersRemoved = 0;
|
|
4
|
+
this.layersChanged = 0;
|
|
5
|
+
this.layersAdded = 0;
|
|
6
|
+
}
|
|
7
|
+
changed() {
|
|
8
|
+
return !(this.layersRemoved === 0 && this.layersChanged === 0 && this.layersAdded === 0);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC1jb250cm9sLWxheWVycy1jaGFuZ2VzLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxlYWZsZXQvc3JjL2xpYi9sYXllcnMvY29udHJvbC9sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWNoYW5nZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLDJCQUEyQjtJQUF4QztRQUNDLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO0lBS3pCLENBQUM7SUFIQSxPQUFPO1FBQ04sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgTGVhZmxldENvbnRyb2xMYXllcnNDaGFuZ2VzIHtcblx0bGF5ZXJzUmVtb3ZlZDogbnVtYmVyID0gMDtcblx0bGF5ZXJzQ2hhbmdlZDogbnVtYmVyID0gMDtcblx0bGF5ZXJzQWRkZWQ6IG51bWJlciA9IDA7XG5cblx0Y2hhbmdlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISh0aGlzLmxheWVyc1JlbW92ZWQgPT09IDAgJiYgdGhpcy5sYXllcnNDaGFuZ2VkID09PSAwICYmIHRoaXMubGF5ZXJzQWRkZWQgPT09IDApO1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export class LeafletControlLayersConfig {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.baseLayers = {};
|
|
4
|
+
this.overlays = {};
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC1jb250cm9sLWxheWVycy1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGVhZmxldC9zcmMvbGliL2xheWVycy9jb250cm9sL2xlYWZsZXQtY29udHJvbC1sYXllcnMtY29uZmlnLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTywwQkFBMEI7SUFBdkM7UUFDQyxlQUFVLEdBQThCLEVBQUUsQ0FBQztRQUMzQyxhQUFRLEdBQThCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXllciB9IGZyb20gJ2xlYWZsZXQnO1xuXG5leHBvcnQgY2xhc3MgTGVhZmxldENvbnRyb2xMYXllcnNDb25maWcge1xuXHRiYXNlTGF5ZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBMYXllciB9ID0ge307XG5cdG92ZXJsYXlzOiB7IFtuYW1lOiBzdHJpbmddOiBMYXllciB9ID0ge307XG59XG4iXX0=
|