@kando-env/kando-ui 1.2.121-alpha.3 → 1.2.121
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/lib/Widgets/Map/Map.js +163 -40
- package/lib/Widgets/Map/areas/AreaPolygon.js +2 -2
- package/lib/Widgets/Map/events/EventIndicator.js +46 -21
- package/lib/Widgets/Map/events/EventIndicatorHover.js +252 -0
- package/lib/Widgets/Map/events/EventPath.js +38 -16
- package/lib/Widgets/Map/events/EventPathHover.js +81 -0
- package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +117 -3
- package/lib/Widgets/Map/points/PointMarker.js +472 -10
- package/lib/Widgets/Map/points/PointMarkers.js +17 -24
- package/lib/i18n/en.json +4 -0
- package/lib/i18n/he.json +5 -0
- package/lib/macros/getVersion.js +2 -2
- package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +4 -1
- package/lib/pages/EventsPage/events/events_list/EventsList.js +8 -25
- package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +2 -2
- package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +2 -2
- package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +57 -0
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +12 -9
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +6 -8
- package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +1 -1
- package/lib/pages/SamplingsPage/SamplingProperties/style.module.scss +3 -0
- package/lib/pages/SamplingsPage/SamplingProperties/styles.js +27 -0
- package/package.json +1 -1
- package/lib/Widgets/Map/MapUtils.js +0 -102
- package/lib/Widgets/Map/events/Event.js +0 -69
- package/lib/Widgets/Map/events/EventUtils.js +0 -245
- package/lib/Widgets/Map/events/PointOfEvent.js +0 -142
- package/lib/Widgets/Map/events/PointsForSpecificEvent.js +0 -66
- package/lib/Widgets/Map/events/Snail.js +0 -60
- package/lib/Widgets/Map/points/PointUtils.js +0 -373
|
@@ -1,373 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.popupContent = exports.createSamplingIcons = exports.createObservationIconPoint = exports.createSamplingIconPoint = exports.markerBelongsToSource = exports.markerBelongsToSelectedSource = exports.belongsToSourceBackground = exports.selectedBackground = exports.combinedWWTPIcon = exports.combinedCollectorsIcon = exports.combinedPumpStationIcon = exports.combinedFactoryIcon = exports.standardBackground = exports.matchIconToPoint = exports.createManholePoint = exports.createBubblePoint = exports.isCollectorFocused = void 0;
|
|
9
|
-
|
|
10
|
-
var _lineChart = _interopRequireDefault(require("../../../assets/line-chart.svg"));
|
|
11
|
-
|
|
12
|
-
var _leaflet = _interopRequireDefault(require("leaflet"));
|
|
13
|
-
|
|
14
|
-
var _i18n = _interopRequireDefault(require("../../../utilities/i18n"));
|
|
15
|
-
|
|
16
|
-
var _blueCircle = _interopRequireDefault(require("../../../assets/point_icons/blue-circle.svg"));
|
|
17
|
-
|
|
18
|
-
var _samplingIcon = _interopRequireDefault(require("../../../assets/point_icons/sampling-icon.svg"));
|
|
19
|
-
|
|
20
|
-
var _pinkCircle = _interopRequireDefault(require("../../../assets/point_icons/pink-circle.svg"));
|
|
21
|
-
|
|
22
|
-
var _observationIcon = _interopRequireDefault(require("../../../assets/point_icons/observation-icon.svg"));
|
|
23
|
-
|
|
24
|
-
var _redPinRedShadow = _interopRequireDefault(require("../../../assets/point_icons/red-pin-red-shadow.png"));
|
|
25
|
-
|
|
26
|
-
var _whitePinRedShadow = _interopRequireDefault(require("../../../assets/point_icons/white-pin-red-shadow.png"));
|
|
27
|
-
|
|
28
|
-
var _whitePinBlackShadow = _interopRequireDefault(require("../../../assets/point_icons/white-pin-black-shadow.png"));
|
|
29
|
-
|
|
30
|
-
var _yellowCircle = _interopRequireDefault(require("../../../assets/point_icons/yellow-circle.svg"));
|
|
31
|
-
|
|
32
|
-
var _factoryIcon = _interopRequireDefault(require("../../../assets/point_icons/factory-icon.svg"));
|
|
33
|
-
|
|
34
|
-
var _greenCircle = _interopRequireDefault(require("../../../assets/point_icons/green-circle.svg"));
|
|
35
|
-
|
|
36
|
-
var _pumpStationIcon = _interopRequireDefault(require("../../../assets/point_icons/pump-station-icon.svg"));
|
|
37
|
-
|
|
38
|
-
var _pinWater = _interopRequireDefault(require("../../../assets/map/pin-water.svg"));
|
|
39
|
-
|
|
40
|
-
var _brightBlueCircle = _interopRequireDefault(require("../../../assets/point_icons/bright-blue-circle.svg"));
|
|
41
|
-
|
|
42
|
-
var _WWTPIcon = _interopRequireDefault(require("../../../assets/point_icons/WWTP-icon.svg"));
|
|
43
|
-
|
|
44
|
-
var _waterNoBackground = _interopRequireDefault(require("../../../assets/point_icons/water-no-background.svg"));
|
|
45
|
-
|
|
46
|
-
var _whitePoint = _interopRequireDefault(require("../../../assets/white-point.png"));
|
|
47
|
-
|
|
48
|
-
var isCollectorFocused = function isCollectorFocused(point, event) {
|
|
49
|
-
var _event$observations;
|
|
50
|
-
|
|
51
|
-
return (event === null || event === void 0 ? void 0 : (_event$observations = event.observations) === null || _event$observations === void 0 ? void 0 : _event$observations.length) === 1 && point.id === event.observations[0].point_id;
|
|
52
|
-
}; // iconSize: [width, height],
|
|
53
|
-
// IconAnchor: [(-right)(+left), (-down)(+up)]
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
exports.isCollectorFocused = isCollectorFocused;
|
|
57
|
-
|
|
58
|
-
var createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered) {
|
|
59
|
-
// @ts-ignore
|
|
60
|
-
matchIconToPoint(point) !== null && // @ts-ignore
|
|
61
|
-
matchIconToPoint(point).forEach(function (icon) {
|
|
62
|
-
var pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
63
|
-
icon: icon,
|
|
64
|
-
riseOnHover: false
|
|
65
|
-
}).addTo(map);
|
|
66
|
-
|
|
67
|
-
pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
|
|
68
|
-
pointCustomIcon['kando_object_id'] = point.id;
|
|
69
|
-
pointCustomIcon['kando_object'] = 'Point';
|
|
70
|
-
if (hovered) pointCustomIcon['kando_object'] = 'PointHovered';
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
if (point.relatedEventsAmount) {
|
|
74
|
-
var pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
75
|
-
icon: _leaflet.default.divIcon({
|
|
76
|
-
className: "\n ".concat(point.relatedEventsAmount >= 100 ? 'circle-events-amount circle-events-amount--tridigit' : 'circle-events-amount', " \n ").concat(point.relatedEventsAmount > 2 ? 'alert-color' : '', "\n "),
|
|
77
|
-
html: "<p>".concat(point.relatedEventsAmount, "</p>"),
|
|
78
|
-
iconAnchor: [-5, 42]
|
|
79
|
-
}),
|
|
80
|
-
riseOnHover: false
|
|
81
|
-
}).addTo(map);
|
|
82
|
-
|
|
83
|
-
pointCustomIcon['kando_object_id'] = point.id;
|
|
84
|
-
pointCustomIcon['kando_object'] = 'IconNumber';
|
|
85
|
-
if (hovered) pointCustomIcon['kando_object'] = 'IconNumberHovered';
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
exports.createBubblePoint = createBubblePoint;
|
|
90
|
-
|
|
91
|
-
var createManholePoint = function createManholePoint(markerLocation, point, map, hovered) {
|
|
92
|
-
var pointIcon = _leaflet.default.icon({
|
|
93
|
-
iconUrl: _whitePoint.default,
|
|
94
|
-
iconSize: [9, 9],
|
|
95
|
-
iconAnchor: [4.5, 4.5]
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
var manholeIcon = _leaflet.default.marker(markerLocation, {
|
|
99
|
-
icon: pointIcon,
|
|
100
|
-
riseOnHover: true
|
|
101
|
-
}).addTo(map);
|
|
102
|
-
|
|
103
|
-
manholeIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
|
|
104
|
-
manholeIcon['kando_object_id'] = point.id;
|
|
105
|
-
manholeIcon['kando_object'] = 'Point';
|
|
106
|
-
if (hovered) manholeIcon['kando_object'] = 'PointHovered';
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
exports.createManholePoint = createManholePoint;
|
|
110
|
-
|
|
111
|
-
var matchIconToPoint = function matchIconToPoint(point, event) {
|
|
112
|
-
switch (point.group.type) {
|
|
113
|
-
case 'Groups::Factory':
|
|
114
|
-
if (combinedFactoryIcon.length === 2) {
|
|
115
|
-
if (markerBelongsToSelectedSource(event, point)) {
|
|
116
|
-
combinedFactoryIcon.unshift(selectedBackground());
|
|
117
|
-
} else if (markerBelongsToSource(event, point)) {
|
|
118
|
-
combinedFactoryIcon.unshift(belongsToSourceBackground());
|
|
119
|
-
} else {
|
|
120
|
-
combinedFactoryIcon.unshift(standardBackground());
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return combinedFactoryIcon;
|
|
125
|
-
|
|
126
|
-
case 'Groups::PumpStation':
|
|
127
|
-
if (combinedPumpStationIcon.length === 2) {
|
|
128
|
-
if (markerBelongsToSelectedSource(event, point)) {
|
|
129
|
-
combinedPumpStationIcon.unshift(selectedBackground());
|
|
130
|
-
} else if (markerBelongsToSource(event, point)) {
|
|
131
|
-
combinedPumpStationIcon.unshift(belongsToSourceBackground());
|
|
132
|
-
} else {
|
|
133
|
-
combinedPumpStationIcon.unshift(standardBackground());
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return combinedPumpStationIcon;
|
|
138
|
-
|
|
139
|
-
case 'Groups::WastewaterTreatmentPlant':
|
|
140
|
-
if (combinedWWTPIcon.length === 2) {
|
|
141
|
-
if (markerBelongsToSelectedSource(event, point)) {
|
|
142
|
-
combinedWWTPIcon.unshift(selectedBackground());
|
|
143
|
-
} else if (markerBelongsToSource(event, point)) {
|
|
144
|
-
combinedWWTPIcon.unshift(belongsToSourceBackground());
|
|
145
|
-
} else {
|
|
146
|
-
combinedWWTPIcon.unshift(standardBackground());
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return combinedWWTPIcon;
|
|
151
|
-
|
|
152
|
-
case 'Groups::Collectors':
|
|
153
|
-
if (isCollectorFocused(point, event)) {
|
|
154
|
-
return [_leaflet.default.icon({
|
|
155
|
-
iconUrl: _redPinRedShadow.default,
|
|
156
|
-
iconSize: [62, 62],
|
|
157
|
-
iconAnchor: [30, 52]
|
|
158
|
-
}), _leaflet.default.icon({
|
|
159
|
-
iconUrl: _waterNoBackground.default,
|
|
160
|
-
iconSize: [46, 46],
|
|
161
|
-
iconAnchor: [22, 44],
|
|
162
|
-
popupAnchor: [0, -30]
|
|
163
|
-
})];
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return combinedCollectorsIcon;
|
|
167
|
-
|
|
168
|
-
default:
|
|
169
|
-
return null;
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
exports.matchIconToPoint = matchIconToPoint;
|
|
174
|
-
|
|
175
|
-
var standardBackground = function standardBackground() {
|
|
176
|
-
var secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
177
|
-
var third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
178
|
-
return _leaflet.default.icon({
|
|
179
|
-
iconUrl: _whitePinBlackShadow.default,
|
|
180
|
-
iconSize: secondary ? [20, 20] : [43, 46],
|
|
181
|
-
iconAnchor: secondary && third ? [-2, 19] : secondary ? [-2, 44] : [20, 42],
|
|
182
|
-
popupAnchor: [0, -30]
|
|
183
|
-
});
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
exports.standardBackground = standardBackground;
|
|
187
|
-
var combinedFactoryIcon = [_leaflet.default.icon({
|
|
188
|
-
iconUrl: _yellowCircle.default,
|
|
189
|
-
iconSize: [25, 24],
|
|
190
|
-
iconAnchor: [10.7, 33.7],
|
|
191
|
-
popupAnchor: [0, -30]
|
|
192
|
-
}), _leaflet.default.icon({
|
|
193
|
-
iconUrl: _factoryIcon.default,
|
|
194
|
-
iconSize: [15, 15],
|
|
195
|
-
iconAnchor: [5, 30],
|
|
196
|
-
popupAnchor: [0, -30]
|
|
197
|
-
})];
|
|
198
|
-
exports.combinedFactoryIcon = combinedFactoryIcon;
|
|
199
|
-
var combinedPumpStationIcon = [_leaflet.default.icon({
|
|
200
|
-
iconUrl: _greenCircle.default,
|
|
201
|
-
iconSize: [25, 24],
|
|
202
|
-
iconAnchor: [10.7, 33.7],
|
|
203
|
-
popupAnchor: [0, -30]
|
|
204
|
-
}), _leaflet.default.icon({
|
|
205
|
-
iconUrl: _pumpStationIcon.default,
|
|
206
|
-
iconSize: [20, 20],
|
|
207
|
-
iconAnchor: [7, 32],
|
|
208
|
-
popupAnchor: [0, -30]
|
|
209
|
-
})];
|
|
210
|
-
exports.combinedPumpStationIcon = combinedPumpStationIcon;
|
|
211
|
-
var combinedCollectorsIcon = [_leaflet.default.icon({
|
|
212
|
-
iconUrl: _pinWater.default,
|
|
213
|
-
iconSize: [45, 45],
|
|
214
|
-
iconAnchor: [25, 50],
|
|
215
|
-
popupAnchor: [0, -30]
|
|
216
|
-
})];
|
|
217
|
-
exports.combinedCollectorsIcon = combinedCollectorsIcon;
|
|
218
|
-
var combinedWWTPIcon = [_leaflet.default.icon({
|
|
219
|
-
iconUrl: _brightBlueCircle.default,
|
|
220
|
-
iconSize: [25, 25],
|
|
221
|
-
iconAnchor: [10.7, 33.7],
|
|
222
|
-
popupAnchor: [0, -30]
|
|
223
|
-
}), _leaflet.default.icon({
|
|
224
|
-
iconUrl: _WWTPIcon.default,
|
|
225
|
-
iconSize: [20, 20],
|
|
226
|
-
iconAnchor: [8, 31],
|
|
227
|
-
popupAnchor: [0, -30]
|
|
228
|
-
})];
|
|
229
|
-
exports.combinedWWTPIcon = combinedWWTPIcon;
|
|
230
|
-
|
|
231
|
-
var selectedBackground = function selectedBackground() {
|
|
232
|
-
return _leaflet.default.icon({
|
|
233
|
-
iconUrl: _redPinRedShadow.default,
|
|
234
|
-
iconSize: [67, 70],
|
|
235
|
-
iconAnchor: [32, 54],
|
|
236
|
-
popupAnchor: [0, -30]
|
|
237
|
-
});
|
|
238
|
-
};
|
|
239
|
-
|
|
240
|
-
exports.selectedBackground = selectedBackground;
|
|
241
|
-
|
|
242
|
-
var belongsToSourceBackground = function belongsToSourceBackground() {
|
|
243
|
-
return _leaflet.default.icon({
|
|
244
|
-
iconUrl: _whitePinRedShadow.default,
|
|
245
|
-
iconSize: [67, 70],
|
|
246
|
-
iconAnchor: [32, 54],
|
|
247
|
-
popupAnchor: [0, -30]
|
|
248
|
-
});
|
|
249
|
-
};
|
|
250
|
-
|
|
251
|
-
exports.belongsToSourceBackground = belongsToSourceBackground;
|
|
252
|
-
|
|
253
|
-
var markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
|
|
254
|
-
var source;
|
|
255
|
-
|
|
256
|
-
if (event !== null && event !== undefined) {
|
|
257
|
-
source = event.sources.filter(function (source) {
|
|
258
|
-
return source.point_id === point.id;
|
|
259
|
-
})[0];
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
return event !== null && source && event.selected_source === source.point_id;
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
exports.markerBelongsToSelectedSource = markerBelongsToSelectedSource;
|
|
266
|
-
|
|
267
|
-
var markerBelongsToSource = function markerBelongsToSource(event, point) {
|
|
268
|
-
if (event === undefined) return;
|
|
269
|
-
return event !== null && event.sources.filter(function (source) {
|
|
270
|
-
return source.point_id === point.id;
|
|
271
|
-
})[0];
|
|
272
|
-
};
|
|
273
|
-
|
|
274
|
-
exports.markerBelongsToSource = markerBelongsToSource;
|
|
275
|
-
|
|
276
|
-
var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered) {
|
|
277
|
-
// iconSize: [width, height],
|
|
278
|
-
// Icon Anchor: [(-right)(+left), (-down)(+up)]
|
|
279
|
-
var samplingIcon = [_leaflet.default.icon({
|
|
280
|
-
iconUrl: _blueCircle.default,
|
|
281
|
-
iconSize: secondaryIcon ? [10, 10] : [25, 24],
|
|
282
|
-
iconAnchor: secondaryIcon ? [-7, 15] : [10.7, 33.7],
|
|
283
|
-
popupAnchor: [0, -30]
|
|
284
|
-
}), _leaflet.default.icon({
|
|
285
|
-
iconUrl: _samplingIcon.default,
|
|
286
|
-
iconSize: secondaryIcon ? [7, 7] : [13, 15],
|
|
287
|
-
iconAnchor: secondaryIcon ? [-8, 13] : [5, 30],
|
|
288
|
-
popupAnchor: [0, -30]
|
|
289
|
-
})];
|
|
290
|
-
|
|
291
|
-
if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
|
|
292
|
-
samplingIcon.unshift(selectedBackground());
|
|
293
|
-
} else if (markerBelongsToSource(event, point) && !secondaryIcon) {
|
|
294
|
-
samplingIcon.unshift(belongsToSourceBackground());
|
|
295
|
-
} else {
|
|
296
|
-
samplingIcon.unshift(standardBackground(secondaryIcon, true));
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
samplingIcon.forEach(function (icon) {
|
|
300
|
-
var pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
301
|
-
icon: icon,
|
|
302
|
-
riseOnHover: false
|
|
303
|
-
}).addTo(map);
|
|
304
|
-
|
|
305
|
-
pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
|
|
306
|
-
pointCustomIcon['kando_object_id'] = point.id;
|
|
307
|
-
pointCustomIcon['kando_object'] = 'Sampling';
|
|
308
|
-
if (hovered) pointCustomIcon['kando_object'] = 'SamplingHovered';
|
|
309
|
-
});
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
exports.createSamplingIconPoint = createSamplingIconPoint;
|
|
313
|
-
|
|
314
|
-
var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered) {
|
|
315
|
-
// iconSize: [width, height],
|
|
316
|
-
// Icon Anchor: [(-right)(+left), (-down)(+up)]
|
|
317
|
-
var observationIcon = [_leaflet.default.icon({
|
|
318
|
-
iconUrl: _pinkCircle.default,
|
|
319
|
-
iconSize: secondaryIcon ? [10, 10] : [25, 24],
|
|
320
|
-
iconAnchor: secondaryIcon ? [-7, 40] : [10.7, 33.7],
|
|
321
|
-
popupAnchor: [0, -30]
|
|
322
|
-
}), _leaflet.default.icon({
|
|
323
|
-
iconUrl: _observationIcon.default,
|
|
324
|
-
iconSize: secondaryIcon ? [7, 7] : [13, 15],
|
|
325
|
-
iconAnchor: secondaryIcon ? [-8, 38] : [5, 30],
|
|
326
|
-
popupAnchor: [0, -30]
|
|
327
|
-
})];
|
|
328
|
-
|
|
329
|
-
if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
|
|
330
|
-
observationIcon.unshift(selectedBackground());
|
|
331
|
-
} else if (markerBelongsToSource(event, point) && !secondaryIcon) {
|
|
332
|
-
observationIcon.unshift(belongsToSourceBackground());
|
|
333
|
-
} else {
|
|
334
|
-
observationIcon.unshift(standardBackground(secondaryIcon));
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
observationIcon.forEach(function (icon) {
|
|
338
|
-
var pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
339
|
-
icon: icon,
|
|
340
|
-
riseOnHover: false
|
|
341
|
-
}).addTo(map);
|
|
342
|
-
|
|
343
|
-
pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
|
|
344
|
-
pointCustomIcon['kando_object_id'] = point.id;
|
|
345
|
-
pointCustomIcon['kando_object'] = 'Observation';
|
|
346
|
-
if (hovered) pointCustomIcon['kando_object'] = 'ObservationHovered';
|
|
347
|
-
});
|
|
348
|
-
};
|
|
349
|
-
|
|
350
|
-
exports.createObservationIconPoint = createObservationIconPoint;
|
|
351
|
-
|
|
352
|
-
var createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered) {
|
|
353
|
-
var sampledPointIds = event.samplings.map(function (s) {
|
|
354
|
-
return s.point_id;
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
if (event !== null && event.samplings.length !== 0 && sampledPointIds.includes(point.id)) {
|
|
358
|
-
createSamplingIconPoint(markerLocation, matchIconToPoint(point, event) !== null, map, point, event, hovered);
|
|
359
|
-
}
|
|
360
|
-
};
|
|
361
|
-
|
|
362
|
-
exports.createSamplingIcons = createSamplingIcons;
|
|
363
|
-
|
|
364
|
-
var popupContent = function popupContent(obs, point) {
|
|
365
|
-
if (obs === null) {
|
|
366
|
-
return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(point.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <hr/>\n \n <div id=\"sector\"></div>\n </div>\n </div>\n ");
|
|
367
|
-
} else {
|
|
368
|
-
return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(obs.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <div class=\"popup-content__severity\">\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.severity"), "</p>\n <span class=\"").concat('popup-content__severity--' + obs.severity, "\">\n <b class=\"popup-content__severity-b\">\n ").concat(_i18n.default.t("events_overview.severities.".concat(obs.severity)), "\n </b>\n </span>\n </div>\n \n <hr class=\"popup-content__hr\" />\n\n <div class=\"popup-content__discharge-time\">\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.first_seen"), ":</p>\n <span><b id=\"first-seen-popup\"></b></span>\n </div>\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.last_seen"), ":</p>\n <span><b id=\"last-seen-popup\"></b></span>\n </div> \n </div>\n </div>\n </div>\n ");
|
|
369
|
-
}
|
|
370
|
-
};
|
|
371
|
-
|
|
372
|
-
exports.popupContent = popupContent;
|
|
373
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRVdGlscy50cyJdLCJuYW1lcyI6WyJpc0NvbGxlY3RvckZvY3VzZWQiLCJwb2ludCIsImV2ZW50Iiwib2JzZXJ2YXRpb25zIiwibGVuZ3RoIiwiaWQiLCJwb2ludF9pZCIsImNyZWF0ZUJ1YmJsZVBvaW50IiwibWFya2VyTG9jYXRpb24iLCJtYXAiLCJob3ZlcmVkIiwibWF0Y2hJY29uVG9Qb2ludCIsImZvckVhY2giLCJpY29uIiwicG9pbnRDdXN0b21JY29uIiwiTCIsIm1hcmtlciIsInJpc2VPbkhvdmVyIiwiYWRkVG8iLCJiaW5kVG9vbHRpcCIsImdyb3VwIiwibmFtZSIsInNlY3Rvcl9uYW1lIiwicmVsYXRlZEV2ZW50c0Ftb3VudCIsImRpdkljb24iLCJjbGFzc05hbWUiLCJodG1sIiwiaWNvbkFuY2hvciIsImNyZWF0ZU1hbmhvbGVQb2ludCIsInBvaW50SWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsInR5cGUiLCJjb21iaW5lZEZhY3RvcnlJY29uIiwibWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UiLCJ1bnNoaWZ0Iiwic2VsZWN0ZWRCYWNrZ3JvdW5kIiwibWFya2VyQmVsb25nc1RvU291cmNlIiwiYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCIsInN0YW5kYXJkQmFja2dyb3VuZCIsImNvbWJpbmVkUHVtcFN0YXRpb25JY29uIiwiY29tYmluZWRXV1RQSWNvbiIsInJlZFBpblJlZFNoYWRvdyIsIndhdGVySWNvbk5vQmFja2dyb3VuZCIsInBvcHVwQW5jaG9yIiwiY29tYmluZWRDb2xsZWN0b3JzSWNvbiIsInNlY29uZGFyeSIsInRoaXJkIiwid2hpdGVQaW5CbGFja1NoYWRvdyIsInllbGxvd0NpcmNsZVVSTCIsInBsYW50SWNvblVSTCIsImdyZWVuQ2lyY2xlVVJMIiwicHVtcFN0YXRpb25JY29uVVJMIiwiY29sbGVjdG9ySWNvbiIsImJyaWdodEJsdWVDaXJjbGVVUkwiLCJXV1RQSWNvblVSTCIsIndoaXRlUGluUmVkU2hhZG93Iiwic291cmNlIiwidW5kZWZpbmVkIiwic291cmNlcyIsImZpbHRlciIsInNlbGVjdGVkX3NvdXJjZSIsImNyZWF0ZVNhbXBsaW5nSWNvblBvaW50Iiwic2Vjb25kYXJ5SWNvbiIsInNhbXBsaW5nSWNvbiIsImJsdWVDaXJjbGVVUkwiLCJzYW1wbGluZ0ljb25VUkwiLCJjcmVhdGVPYnNlcnZhdGlvbkljb25Qb2ludCIsIm9ic2VydmF0aW9uSWNvbiIsInBpbmtDaXJjbGVVUkwiLCJvYnNlcnZhdGlvbkljb25VUkwiLCJjcmVhdGVTYW1wbGluZ0ljb25zIiwic2FtcGxlZFBvaW50SWRzIiwic2FtcGxpbmdzIiwicyIsImluY2x1ZGVzIiwicG9wdXBDb250ZW50Iiwib2JzIiwiR3JhcGhJY29uIiwiaTE4biIsInQiLCJzZXZlcml0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQU9BOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQTs7QUFFTyxJQUFNQSxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQXFCLENBQUNDLEtBQUQsRUFBZ0JDLEtBQWhCLEVBQWtDO0FBQUE7O0FBQ2xFLFNBQ0UsQ0FBQUEsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCxtQ0FBQUEsS0FBSyxDQUFFQyxZQUFQLDRFQUFxQkMsTUFBckIsTUFBZ0MsQ0FBaEMsSUFDQUgsS0FBSyxDQUFDSSxFQUFOLEtBQWFILEtBQUssQ0FBQ0MsWUFBTixDQUFtQixDQUFuQixFQUFzQkcsUUFGckM7QUFJRCxDQUxNLEMsQ0FPUDtBQUNBOzs7OztBQUNPLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsQ0FDL0JDLGNBRCtCLEVBRS9CUCxLQUYrQixFQUcvQlEsR0FIK0IsRUFJL0JDLE9BSitCLEVBSzVCO0FBQ0g7QUFDQUMsRUFBQUEsZ0JBQWdCLENBQUNWLEtBQUQsQ0FB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K0hBRTREOUUsS0FBSyxDQUFDSSxFQUZsRSxpREFHNEIyRSxrQkFINUIsd0pBTTBEL0UsS0FBSyxDQUFDbUIsS0FBTixDQUFZQyxJQU50RTtBQWFELEdBZEQsTUFjTztBQUNMLCtIQUU0RDBELEdBQUcsQ0FBQzFFLEVBRmhFLGlEQUc0QjJFLGtCQUg1Qix3SkFPa0IvRSxLQUFLLENBQUNtQixLQUFOLENBQVlDLElBUDlCLG9KQVUyRDRELGNBQUtDLENBQUwsNEJBVjNELHlEQWNzQiw4QkFBOEJILEdBQUcsQ0FBQ0ksUUFkeEQsdUhBaUI4QkYsY0FBS0MsQ0FBTCxzQ0FDOEJILEdBQUcsQ0FBQ0ksUUFEbEMsRUFqQjlCLG1XQTRCK0RGLGNBQUtDLENBQUwsOEJBNUIvRCxnT0FrQytERCxjQUFLQyxDQUFMLDZCQWxDL0Q7QUEyQ0Q7QUFDRixDQTVETSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHcmFwaEljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2xpbmUtY2hhcnQuc3ZnJztcbmltcG9ydCBMLCB7IExhdExuZ1R1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgYmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBzYW1wbGluZ0ljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3NhbXBsaW5nLWljb24uc3ZnJztcbmltcG9ydCBwaW5rQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9waW5rLWNpcmNsZS5zdmcnO1xuaW1wb3J0IG9ic2VydmF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvb2JzZXJ2YXRpb24taWNvbi5zdmcnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHJlZFBpblJlZFNoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcmVkLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5CbGFja1NoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2hpdGUtcGluLWJsYWNrLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHllbGxvd0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMveWVsbG93LWNpcmNsZS5zdmcnO1xuaW1wb3J0IHBsYW50SWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvZmFjdG9yeS1pY29uLnN2Zyc7XG5pbXBvcnQgZ3JlZW5DaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2dyZWVuLWNpcmNsZS5zdmcnO1xuaW1wb3J0IHB1bXBTdGF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcHVtcC1zdGF0aW9uLWljb24uc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9tYXAvcGluLXdhdGVyLnN2Zyc7XG5pbXBvcnQgYnJpZ2h0Qmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYnJpZ2h0LWJsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgV1dUUEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL1dXVFAtaWNvbi5zdmcnO1xuaW1wb3J0IHdhdGVySWNvbk5vQmFja2dyb3VuZCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2F0ZXItbm8tYmFja2dyb3VuZC5zdmcnO1xuaW1wb3J0IHdoaXRlUG9pbnQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3doaXRlLXBvaW50LnBuZyc7XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3RvckZvY3VzZWQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50Py5vYnNlcnZhdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHBvaW50LmlkID09PSBldmVudC5vYnNlcnZhdGlvbnNbMF0ucG9pbnRfaWRcbiAgKTtcbn07XG5cbi8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4vLyBJY29uQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG5leHBvcnQgY29uc3QgY3JlYXRlQnViYmxlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICAvLyBAdHMtaWdub3JlXG4gIG1hdGNoSWNvblRvUG9pbnQocG9pbnQpICE9PSBudWxsICYmXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQpLmZvckVhY2goKGljb246IGFueSkgPT4ge1xuICAgICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgICAgfSkuYWRkVG8obWFwKTtcbiAgICAgIHBvaW50Q3VzdG9tSWNvbi5iaW5kVG9vbHRpcChcbiAgICAgICAgYCR7cG9pbnQuZ3JvdXAubmFtZX0gKCR7cG9pbnQuZ3JvdXAuc2VjdG9yX25hbWV9KWAsXG4gICAgICApO1xuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gICAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludEhvdmVyZWQnO1xuICAgIH0pO1xuXG4gIGlmIChwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50KSB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbiA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBMLmRpdkljb24oe1xuICAgICAgICBjbGFzc05hbWU6IGBcbiAgICAgICAgICAke1xuICAgICAgICAgICAgcG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+PSAxMDBcbiAgICAgICAgICAgICAgPyAnY2lyY2xlLWV2ZW50cy1hbW91bnQgY2lyY2xlLWV2ZW50cy1hbW91bnQtLXRyaWRpZ2l0J1xuICAgICAgICAgICAgICA6ICdjaXJjbGUtZXZlbnRzLWFtb3VudCdcbiAgICAgICAgICB9IFxuICAgICAgICAgICR7cG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+IDIgPyAnYWxlcnQtY29sb3InIDogJyd9XG4gICAgICAgICAgICBgLFxuICAgICAgICBodG1sOiBgPHA+JHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50fTwvcD5gLFxuICAgICAgICBpY29uQW5jaG9yOiBbLTUsIDQyXSxcbiAgICAgIH0pLFxuICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgIH0pLmFkZFRvKG1hcCk7XG5cbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVyJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVySG92ZXJlZCc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYW5ob2xlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICBsZXQgcG9pbnRJY29uID0gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBvaW50LFxuICAgIGljb25TaXplOiBbOSwgOV0sXG4gICAgaWNvbkFuY2hvcjogWzQuNSwgNC41XSxcbiAgfSk7XG4gIGxldCBtYW5ob2xlSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBwb2ludEljb24sXG4gICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gIH0pLmFkZFRvKG1hcCk7XG4gIG1hbmhvbGVJY29uLmJpbmRUb29sdGlwKGAke3BvaW50Lmdyb3VwLm5hbWV9ICgke3BvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lfSlgKTtcbiAgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIGlmIChob3ZlcmVkKSBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnRIb3ZlcmVkJztcbn07XG5cbmV4cG9ydCBjb25zdCBtYXRjaEljb25Ub1BvaW50ID0gKHBvaW50OiBJUG9pbnQsIGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgc3dpdGNoIChwb2ludC5ncm91cC50eXBlKSB7XG4gICAgY2FzZSAnR3JvdXBzOjpGYWN0b3J5JzpcbiAgICAgIGlmIChjb21iaW5lZEZhY3RvcnlJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZEZhY3RvcnlJY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6UHVtcFN0YXRpb24nOlxuICAgICAgaWYgKGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbjtcbiAgICBjYXNlICdHcm91cHM6Oldhc3Rld2F0ZXJUcmVhdG1lbnRQbGFudCc6XG4gICAgICBpZiAoY29tYmluZWRXV1RQSWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRXV1RQSWNvbjtcblxuICAgIGNhc2UgJ0dyb3Vwczo6Q29sbGVjdG9ycyc6XG4gICAgICBpZiAoaXNDb2xsZWN0b3JGb2N1c2VkKHBvaW50LCBldmVudCkpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgICAgICAgICAgaWNvblNpemU6IFs2MiwgNjJdLFxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzMwLCA1Ml0sXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogd2F0ZXJJY29uTm9CYWNrZ3JvdW5kLFxuICAgICAgICAgICAgaWNvblNpemU6IFs0NiwgNDZdLFxuXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMjIsIDQ0XSxcbiAgICAgICAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkQ29sbGVjdG9yc0ljb247XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzdGFuZGFyZEJhY2tncm91bmQgPSAoXG4gIHNlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICB0aGlyZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluQmxhY2tTaGFkb3csXG4gICAgaWNvblNpemU6IHNlY29uZGFyeSA/IFsyMCwgMjBdIDogWzQzLCA0Nl0sXG4gICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5ICYmIHRoaXJkID8gWy0yLCAxOV0gOiBzZWNvbmRhcnkgPyBbLTIsIDQ0XSA6IFsyMCwgNDJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRGYWN0b3J5SWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiB5ZWxsb3dDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFsyNSwgMjRdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHBsYW50SWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzE1LCAxNV0sXG4gICAgaWNvbkFuY2hvcjogWzUsIDMwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkUHVtcFN0YXRpb25JY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGdyZWVuQ2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMjUsIDI0XSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwdW1wU3RhdGlvbkljb25VUkwsXG4gICAgaWNvblNpemU6IFsyMCwgMjBdLFxuICAgIGljb25BbmNob3I6IFs3LCAzMl0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZENvbGxlY3RvcnNJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGNvbGxlY3Rvckljb24sXG4gICAgaWNvblNpemU6IFs0NSwgNDVdLFxuXG4gICAgaWNvbkFuY2hvcjogWzI1LCA1MF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZFdXVFBJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGJyaWdodEJsdWVDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFsyNSwgMjVdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IFdXVFBJY29uVVJMLFxuICAgIGljb25TaXplOiBbMjAsIDIwXSxcbiAgICBpY29uQW5jaG9yOiBbOCwgMzFdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFs2NywgNzBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFs2NywgNzBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc291cmNlO1xuXG4gIGlmIChldmVudCAhPT0gbnVsbCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc291cmNlID0gZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF07XG4gIH1cblxuICByZXR1cm4gZXZlbnQgIT09IG51bGwgJiYgc291cmNlICYmIGV2ZW50LnNlbGVjdGVkX3NvdXJjZSA9PT0gc291cmNlLnBvaW50X2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHJldHVybiAoXG4gICAgZXZlbnQgIT09IG51bGwgJiZcbiAgICBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4pID0+IHtcbiAgLy8gaWNvblNpemU6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgbGV0IHNhbXBsaW5nSWNvbiA9IFtcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogYmx1ZUNpcmNsZVVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzEwLCAxMF0gOiBbMjUsIDI0XSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDE1XSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogc2FtcGxpbmdJY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbNywgN10gOiBbMTMsIDE1XSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTgsIDEzXSA6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZChzZWNvbmRhcnlJY29uLCB0cnVlKSk7XG4gIH1cblxuICBzYW1wbGluZ0ljb24uZm9yRWFjaCgoaWNvbikgPT4ge1xuICAgIGxldCBwb2ludEN1c3RvbUljb246IGFueSA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBpY29uLFxuICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgIH0pLmFkZFRvKG1hcCk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKFxuICAgICAgYCR7cG9pbnQuZ3JvdXAubmFtZX0gKCR7cG9pbnQuZ3JvdXAuc2VjdG9yX25hbWV9KWAsXG4gICAgKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZyc7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnU2FtcGxpbmdIb3ZlcmVkJztcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICAvLyBpY29uU2l6ZTogW3dpZHRoLCBoZWlnaHRdLFxuICAvLyBJY29uIEFuY2hvcjogWygtcmlnaHQpKCtsZWZ0KSwgKC1kb3duKSgrdXApXVxuICBsZXQgb2JzZXJ2YXRpb25JY29uID0gW1xuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBwaW5rQ2lyY2xlVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMTAsIDEwXSA6IFsyNSwgMjRdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgNDBdIDogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBvYnNlcnZhdGlvbkljb25VUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFs3LCA3XSA6IFsxMywgMTVdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstOCwgMzhdIDogWzUsIDMwXSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgXTtcblxuICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKHNlY29uZGFyeUljb24pKTtcbiAgfVxuXG4gIG9ic2VydmF0aW9uSWNvbi5mb3JFYWNoKChpY29uKSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSkuYWRkVG8obWFwKTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoXG4gICAgICBgJHtwb2ludC5ncm91cC5uYW1lfSAoJHtwb2ludC5ncm91cC5zZWN0b3JfbmFtZX0pYCxcbiAgICApO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ09ic2VydmF0aW9uJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbkhvdmVyZWQnO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTYW1wbGluZ0ljb25zID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIGV2ZW50OiBJRXZlbnQsXG4gIHBvaW50OiBJUG9pbnQsXG4gIG1hcCxcbiAgaG92ZXJlZCxcbikgPT4ge1xuICBsZXQgc2FtcGxlZFBvaW50SWRzID0gZXZlbnQuc2FtcGxpbmdzLm1hcCgocykgPT4gcy5wb2ludF9pZCk7XG4gIGlmIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNhbXBsaW5ncy5sZW5ndGggIT09IDAgJiZcbiAgICBzYW1wbGVkUG9pbnRJZHMuaW5jbHVkZXMocG9pbnQuaWQpXG4gICkge1xuICAgIGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50KFxuICAgICAgbWFya2VyTG9jYXRpb24sXG4gICAgICBtYXRjaEljb25Ub1BvaW50KHBvaW50LCBldmVudCkgIT09IG51bGwsXG4gICAgICBtYXAsXG4gICAgICBwb2ludCxcbiAgICAgIGV2ZW50LFxuICAgICAgaG92ZXJlZCxcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdXBDb250ZW50ID0gKG9iczogYW55LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChvYnMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXBvcHVwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWdyYXBoLWljb24gcG9wdXAtZ3JhcGgtaWNvbi0ke3BvaW50LmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke3BvaW50Lmdyb3VwLm5hbWV9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxoci8+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtvYnMuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAubmFtZVxuICAgICAgICAgICAgICAgICAgICB9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdHlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cC1jb250ZW50X19zZXZlcml0eS0tJyArIG9icy5zZXZlcml0eVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXRpZXMuJHtvYnMuc2V2ZXJpdHl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwicG9wdXAtY29udGVudF9faHJcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19kaXNjaGFyZ2UtdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuZmlyc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwiZmlyc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3Lmxhc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwibGFzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9XG59O1xuIl19
|