@provoly/dashboard 0.18.5 → 0.18.6
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/dataset/style/_o-pry-dataset-card.scss +0 -1
- package/dataset/style/_o-pry-dataset-detail.scss +4 -0
- package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +3 -3
- package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +3 -3
- package/esm2022/dataset/components/dataset.component.mjs +3 -3
- package/esm2022/dataset/style/css.component.mjs +2 -2
- package/esm2022/filters/date/date-filter.component.mjs +8 -4
- package/esm2022/filters/list/list-filter.component.mjs +4 -3
- package/esm2022/filters/number/number-filter.component.mjs +3 -3
- package/esm2022/filters/text/text-filter.component.mjs +3 -3
- package/esm2022/lib/core/store/search/search.effects.mjs +2 -2
- package/esm2022/lib/dashboard/filter/base-filter.component.mjs +4 -1
- package/esm2022/lib/dashboard/item-utils.mjs +1 -60
- package/esm2022/lib/dashboard/store/dashboard.effects.mjs +3 -4
- package/esm2022/presentation/components/presentation.component.mjs +1 -3
- package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +39 -38
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +12 -12
- package/esm2022/widgets/widget-map/pipe/widget-map-geometry-fields-for.pipe.mjs +3 -3
- package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +262 -216
- package/fesm2022/provoly-dashboard-admin.mjs +2 -2
- package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-dataset.mjs +6 -6
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-date.mjs +7 -3
- package/fesm2022/provoly-dashboard-filters-date.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-list.mjs +3 -2
- package/fesm2022/provoly-dashboard-filters-list.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-number.mjs +2 -2
- package/fesm2022/provoly-dashboard-filters-number.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-text.mjs +2 -2
- package/fesm2022/provoly-dashboard-filters-text.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +0 -2
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +377 -331
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +34 -90
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/filters/date/date-filter.component.d.ts +1 -0
- package/lib/dashboard/filter/base-filter.component.d.ts +4 -2
- package/lib/dashboard/item-utils.d.ts +0 -8
- package/lib/dashboard/store/dashboard.effects.d.ts +0 -3
- package/package.json +7 -7
- package/styles/components/_a-table.scss +1 -1
- package/styles/components/_m-filter.scss +23 -23
- package/styles/components/_m-form-label-field.scss +6 -0
- package/styles-theme/components-theme/_m-filter.theme.scss +19 -4
- package/widgets/widget-map/utils/widget-map.utils.d.ts +23 -17
|
@@ -12,7 +12,7 @@ import VectorTile from 'ol/source/VectorTile';
|
|
|
12
12
|
import { Circle, Fill, Stroke, Style, Text } from 'ol/style';
|
|
13
13
|
import CircleStyle from 'ol/style/Circle';
|
|
14
14
|
import WMTSTileGrid from 'ol/tilegrid/WMTS';
|
|
15
|
-
import {
|
|
15
|
+
import { WidgetMapUtils } from '../utils/widget-map.utils';
|
|
16
16
|
import * as i0 from "@angular/core";
|
|
17
17
|
export class WidgetMapLayerService {
|
|
18
18
|
constructor() {
|
|
@@ -68,12 +68,12 @@ export class WidgetMapLayerService {
|
|
|
68
68
|
},
|
|
69
69
|
heatmap: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
70
70
|
const heatmap = new Heatmap({
|
|
71
|
-
minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
|
|
72
|
-
maxZoom: layer.maxZoom ?? DEFAULT_ZOOM_MAX,
|
|
71
|
+
minZoom: layer.minZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MIN,
|
|
72
|
+
maxZoom: layer.maxZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MAX,
|
|
73
73
|
opacity: (layer.opacity ?? 100) / 100,
|
|
74
74
|
source: new Vector({ attributions: [layer.attribution ?? ''] }),
|
|
75
|
-
blur: (layer.radius ?? DEFAULT_HEATMAP_RADIUS) / 2,
|
|
76
|
-
radius: layer.radius ?? DEFAULT_HEATMAP_RADIUS,
|
|
75
|
+
blur: (layer.radius ?? WidgetMapUtils.DEFAULT_HEATMAP_RADIUS) / 2,
|
|
76
|
+
radius: layer.radius ?? WidgetMapUtils.DEFAULT_HEATMAP_RADIUS,
|
|
77
77
|
weight: (feature) => {
|
|
78
78
|
const value = ItemUtils.getAttributeCalculatedValue(feature, attributesForClass[feature.get('oClass')].intensityAttribute);
|
|
79
79
|
const atScale = (value - range.min) / (range.max - range.min);
|
|
@@ -83,32 +83,32 @@ export class WidgetMapLayerService {
|
|
|
83
83
|
layerClassesId.forEach((classId) => {
|
|
84
84
|
(resultSet.items[classId] || [])
|
|
85
85
|
.filter((item) => {
|
|
86
|
-
const location =
|
|
86
|
+
const location = WidgetMapUtils.readGeometry(map.getView().getProjection(), item, 'point', attributesForClass[classId].locationAttribute);
|
|
87
87
|
return !!location;
|
|
88
88
|
})
|
|
89
89
|
.forEach((item) => {
|
|
90
90
|
heatmap
|
|
91
91
|
.getSource()
|
|
92
|
-
?.addFeature(getFeatureFromItem(item, 'heatpoint', attributesForClass[item.oClass].locationAttribute));
|
|
92
|
+
?.addFeature(WidgetMapUtils.getFeatureFromItem(map.getView().getProjection(), item, 'heatpoint', attributesForClass[item.oClass].locationAttribute));
|
|
93
93
|
});
|
|
94
94
|
});
|
|
95
95
|
return heatmap;
|
|
96
96
|
},
|
|
97
97
|
marker: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
98
98
|
const vectorLayer = new VectorLayer({
|
|
99
|
-
minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
|
|
100
|
-
maxZoom: layer.maxZoom ?? DEFAULT_ZOOM_MAX,
|
|
99
|
+
minZoom: layer.minZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MIN,
|
|
100
|
+
maxZoom: layer.maxZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MAX,
|
|
101
101
|
opacity: (layer.opacity ?? 100) / 100,
|
|
102
102
|
source: new VectorSource({ attributions: [layer.attribution ?? ''] })
|
|
103
103
|
});
|
|
104
104
|
layerClassesId.forEach((classId) => {
|
|
105
105
|
(resultSet.items[classId] || [])
|
|
106
106
|
.filter((item) => {
|
|
107
|
-
const location =
|
|
107
|
+
const location = WidgetMapUtils.readGeometry(map.getView().getProjection(), item, 'point', attributesForClass[item.oClass].locationAttribute);
|
|
108
108
|
return !!location;
|
|
109
109
|
})
|
|
110
110
|
.forEach(async (item) => {
|
|
111
|
-
const itemFeature = getFeatureFromItem(item, 'marker', attributesForClass[item.oClass].locationAttribute, itemStyles[item.id]?.classic, itemStyles[item.id]?.bordered);
|
|
111
|
+
const itemFeature = WidgetMapUtils.getFeatureFromItem(map.getView().getProjection(), item, 'marker', attributesForClass[item.oClass].locationAttribute, itemStyles[item.id]?.classic, itemStyles[item.id]?.bordered);
|
|
112
112
|
itemFeature.setStyle(itemFeature.get('classicStyle'));
|
|
113
113
|
vectorLayer.getSource()?.addFeature(itemFeature);
|
|
114
114
|
});
|
|
@@ -116,37 +116,38 @@ export class WidgetMapLayerService {
|
|
|
116
116
|
return this.makeClustered(vectorLayer, layer);
|
|
117
117
|
},
|
|
118
118
|
point: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
119
|
-
return this.layerFromGeoJsonGeometry(layer, layerClassesId, resultSet, attributesForClass, 'point');
|
|
119
|
+
return this.layerFromGeoJsonGeometry(map.getView().getProjection(), layer, layerClassesId, resultSet, attributesForClass, 'point');
|
|
120
120
|
},
|
|
121
121
|
line: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
122
|
-
return this.layerFromGeoJsonGeometry(layer, layerClassesId, resultSet, attributesForClass, 'line');
|
|
122
|
+
return this.layerFromGeoJsonGeometry(map.getView().getProjection(), layer, layerClassesId, resultSet, attributesForClass, 'line');
|
|
123
123
|
},
|
|
124
124
|
'multi-line': (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
125
|
-
return this.layerFromGeoJsonGeometry(layer, layerClassesId, resultSet, attributesForClass, 'multi-line');
|
|
125
|
+
return this.layerFromGeoJsonGeometry(map.getView().getProjection(), layer, layerClassesId, resultSet, attributesForClass, 'multi-line');
|
|
126
126
|
},
|
|
127
127
|
polygon: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
128
|
-
return this.layerFromGeoJsonGeometry(layer, layerClassesId, resultSet, attributesForClass, 'polygon');
|
|
128
|
+
return this.layerFromGeoJsonGeometry(map.getView().getProjection(), layer, layerClassesId, resultSet, attributesForClass, 'polygon');
|
|
129
129
|
},
|
|
130
130
|
'multi-polygon': (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
131
|
-
return this.layerFromGeoJsonGeometry(layer, layerClassesId, resultSet, attributesForClass, 'multi-polygon');
|
|
131
|
+
return this.layerFromGeoJsonGeometry(map.getView().getProjection(), layer, layerClassesId, resultSet, attributesForClass, 'multi-polygon');
|
|
132
132
|
},
|
|
133
133
|
bubble: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
134
134
|
const bubbleLayer = new VectorLayer({
|
|
135
|
-
minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
|
|
136
|
-
maxZoom: layer.maxZoom ?? DEFAULT_ZOOM_MAX,
|
|
135
|
+
minZoom: layer.minZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MIN,
|
|
136
|
+
maxZoom: layer.maxZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MAX,
|
|
137
137
|
opacity: (layer.opacity ?? 100) / 100,
|
|
138
138
|
source: new VectorSource({ attributions: [layer.attribution ?? ''] })
|
|
139
139
|
});
|
|
140
140
|
layerClassesId.forEach((classId) => {
|
|
141
141
|
(resultSet.items[classId] || [])
|
|
142
142
|
.filter((item) => {
|
|
143
|
-
const location =
|
|
143
|
+
const location = WidgetMapUtils.readGeometry(map.getView().getProjection(), item, 'point', attributesForClass[item.oClass].locationAttribute);
|
|
144
144
|
return !!location;
|
|
145
145
|
})
|
|
146
146
|
.forEach((item) => {
|
|
147
147
|
const value = ItemUtils.getAttributeCalculatedValue(item, attributesForClass[item.oClass].intensityAttribute);
|
|
148
148
|
const atScale = (value - range.min) / (range.max - range.min);
|
|
149
|
-
const itemFeature = getCircleFeatureFromItem(item, attributesForClass[item.oClass].locationAttribute, (layer.intensityAsc ? atScale : 1 - atScale) *
|
|
149
|
+
const itemFeature = WidgetMapUtils.getCircleFeatureFromItem(map.getView().getProjection(), item, attributesForClass[item.oClass].locationAttribute, (layer.intensityAsc ? atScale : 1 - atScale) *
|
|
150
|
+
(layer.radiusFactor ?? WidgetMapUtils.DEFAULT_RADIUS_INTENSITY_FACTOR), this.circleStyle, this.selectedCircleStyle);
|
|
150
151
|
itemFeature.setStyle(itemFeature.get('classicStyle'));
|
|
151
152
|
bubbleLayer.getSource()?.addFeature(itemFeature);
|
|
152
153
|
});
|
|
@@ -155,16 +156,16 @@ export class WidgetMapLayerService {
|
|
|
155
156
|
},
|
|
156
157
|
relation: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
157
158
|
return new VectorLayer({
|
|
158
|
-
minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
|
|
159
|
-
maxZoom: layer.maxZoom ?? DEFAULT_ZOOM_MAX,
|
|
159
|
+
minZoom: layer.minZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MIN,
|
|
160
|
+
maxZoom: layer.maxZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MAX,
|
|
160
161
|
opacity: (layer.opacity ?? 100) / 100,
|
|
161
162
|
source: new VectorSource({ attributions: [layer.attribution ?? ''] })
|
|
162
163
|
});
|
|
163
164
|
},
|
|
164
165
|
wms: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
165
166
|
const impl = new Tile({
|
|
166
|
-
minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
|
|
167
|
-
maxZoom: layer.maxZoom ?? DEFAULT_ZOOM_MAX,
|
|
167
|
+
minZoom: layer.minZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MIN,
|
|
168
|
+
maxZoom: layer.maxZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MAX,
|
|
168
169
|
opacity: (layer.opacity ?? 100) / 100,
|
|
169
170
|
source: new TileWMS({
|
|
170
171
|
attributions: [layer.attribution ?? ''],
|
|
@@ -192,8 +193,8 @@ export class WidgetMapLayerService {
|
|
|
192
193
|
matrixIds[z] = z;
|
|
193
194
|
}
|
|
194
195
|
return new Tile({
|
|
195
|
-
minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
|
|
196
|
-
maxZoom: layer.maxZoom ?? DEFAULT_ZOOM_MAX,
|
|
196
|
+
minZoom: layer.minZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MIN,
|
|
197
|
+
maxZoom: layer.maxZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MAX,
|
|
197
198
|
opacity: (layer.opacity ?? 100) / 100,
|
|
198
199
|
source: new WMTS({
|
|
199
200
|
attributions: [layer.attribution ?? ''],
|
|
@@ -220,8 +221,8 @@ export class WidgetMapLayerService {
|
|
|
220
221
|
},
|
|
221
222
|
featurelayer: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
222
223
|
return new VectorLayer({
|
|
223
|
-
minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
|
|
224
|
-
maxZoom: layer.maxZoom ?? DEFAULT_ZOOM_MAX,
|
|
224
|
+
minZoom: layer.minZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MIN,
|
|
225
|
+
maxZoom: layer.maxZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MAX,
|
|
225
226
|
opacity: (layer.opacity ?? 100) / 100,
|
|
226
227
|
source: new VectorSource({
|
|
227
228
|
attributions: [layer.attribution ?? ''],
|
|
@@ -232,8 +233,8 @@ export class WidgetMapLayerService {
|
|
|
232
233
|
},
|
|
233
234
|
vectortile: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
234
235
|
return new VectorTileLayer({
|
|
235
|
-
minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
|
|
236
|
-
maxZoom: layer.maxZoom ?? DEFAULT_ZOOM_MAX,
|
|
236
|
+
minZoom: layer.minZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MIN,
|
|
237
|
+
maxZoom: layer.maxZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MAX,
|
|
237
238
|
opacity: (layer.opacity ?? 100) / 100,
|
|
238
239
|
source: new VectorTile({
|
|
239
240
|
attributions: [layer.attribution ?? ''],
|
|
@@ -244,8 +245,8 @@ export class WidgetMapLayerService {
|
|
|
244
245
|
},
|
|
245
246
|
rastertile: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
|
|
246
247
|
return new Tile({
|
|
247
|
-
minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
|
|
248
|
-
maxZoom: layer.maxZoom ?? DEFAULT_ZOOM_MAX,
|
|
248
|
+
minZoom: layer.minZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MIN,
|
|
249
|
+
maxZoom: layer.maxZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MAX,
|
|
249
250
|
opacity: (layer.opacity ?? 100) / 100,
|
|
250
251
|
source: new XYZ({
|
|
251
252
|
url: layer.url,
|
|
@@ -261,10 +262,10 @@ export class WidgetMapLayerService {
|
|
|
261
262
|
get implementationList() {
|
|
262
263
|
return Object.keys(this.layersImplementation).filter((implementation) => implementation !== 'geoserver');
|
|
263
264
|
}
|
|
264
|
-
layerFromGeoJsonGeometry(layer, layerClassesId, resultSet, attributesForClass, type) {
|
|
265
|
+
layerFromGeoJsonGeometry(projection, layer, layerClassesId, resultSet, attributesForClass, type) {
|
|
265
266
|
const vectorLayer = new VectorLayer({
|
|
266
|
-
minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
|
|
267
|
-
maxZoom: layer.maxZoom ?? DEFAULT_ZOOM_MAX,
|
|
267
|
+
minZoom: layer.minZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MIN,
|
|
268
|
+
maxZoom: layer.maxZoom ?? WidgetMapUtils.DEFAULT_ZOOM_MAX,
|
|
268
269
|
opacity: (layer.opacity ?? 100) / 100,
|
|
269
270
|
source: new VectorSource({ attributions: [layer.attribution ?? ''] })
|
|
270
271
|
});
|
|
@@ -272,14 +273,14 @@ export class WidgetMapLayerService {
|
|
|
272
273
|
(resultSet.items[classId] || [])
|
|
273
274
|
.map((item) => ({
|
|
274
275
|
item,
|
|
275
|
-
location:
|
|
276
|
+
location: WidgetMapUtils.readGeometry(projection, item, type, attributesForClass[item.oClass].locationAttribute)
|
|
276
277
|
}))
|
|
277
278
|
.filter(({ location }) => !!location)
|
|
278
279
|
.forEach(async (subItem) => {
|
|
279
280
|
const itemFeature = new Feature({
|
|
280
281
|
...subItem.item,
|
|
281
282
|
type,
|
|
282
|
-
geometry: subItem.location,
|
|
283
|
+
geometry: subItem.location ?? undefined,
|
|
283
284
|
classicStyle: type === 'point' ? this.pointStyle : this.circleStyle,
|
|
284
285
|
selectedStyle: type === 'point' ? this.selectedPointStyle : this.selectedCircleStyle
|
|
285
286
|
});
|
|
@@ -353,4 +354,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
|
|
|
353
354
|
providedIn: 'root'
|
|
354
355
|
}]
|
|
355
356
|
}] });
|
|
356
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC1sYXllci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsU0FBUyxFQUNULFNBQVMsRUFlVixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQU8sTUFBTSxJQUFJLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxlQUFlLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0QsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUNMLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IsZ0JB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Z3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIEZpZWxkVHlwZSxcbiAgSXRlbVV0aWxzLFxuICBNYXBBdXRvTGF5ZXJPcHRpb25zLFxuICBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zLFxuICBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMsXG4gIE1hcFJhc3RlclRpbGVMYXllck9wdGlvbnMsXG4gIE1hcFZlY3RvclRpbGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldFJlbGF0aW9uTGF5ZXJPcHRpb25zLFxuICBNYXBXTVNMYXllckxheWVyT3B0aW9ucyxcbiAgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zLFxuICBQcnlHZW9BdXRoU2VydmljZSxcbiAgUmVzdWx0U2V0XG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBGZWF0dXJlLCBNYXAgfSBmcm9tICdvbCc7XG5pbXBvcnQgeyBnZXRUb3BMZWZ0LCBnZXRXaWR0aCB9IGZyb20gJ29sL2V4dGVudCc7XG5pbXBvcnQgeyBHZW9KU09OLCBNVlQgfSBmcm9tICdvbC9mb3JtYXQnO1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdvbC9nZW9tJztcbmltcG9ydCB7IEhlYXRtYXAsIFRpbGUgfSBmcm9tICdvbC9sYXllcic7XG5pbXBvcnQgQmFzZUxheWVyIGZyb20gJ29sL2xheWVyL0Jhc2UnO1xuaW1wb3J0IFZlY3RvckxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3Rvcic7XG5pbXBvcnQgVmVjdG9yVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3RvclRpbGUnO1xuaW1wb3J0IHsgQ2x1c3RlciwgVGlsZVdNUywgVmVjdG9yLCBXTVRTLCBYWVogfSBmcm9tICdvbC9zb3VyY2UnO1xuaW1wb3J0IFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcbmltcG9ydCBWZWN0b3JUaWxlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3JUaWxlJztcbmltcG9ydCB7IENpcmNsZSwgRmlsbCwgU3Ryb2tlLCBTdHlsZSwgVGV4dCB9IGZyb20gJ29sL3N0eWxlJztcbmltcG9ydCBDaXJjbGVTdHlsZSBmcm9tICdvbC9zdHlsZS9DaXJjbGUnO1xuaW1wb3J0IFdNVFNUaWxlR3JpZCBmcm9tICdvbC90aWxlZ3JpZC9XTVRTJztcbmltcG9ydCB7XG4gIERFRkFVTFRfSEVBVE1BUF9SQURJVVMsXG4gIERFRkFVTFRfUkFESVVTX0lOVEVOU0lUWV9GQUNUT1IsXG4gIERFRkFVTFRfWk9PTV9NQVgsXG4gIERFRkFVTFRfWk9PTV9NSU4sXG4gIGdldENpcmNsZUZlYXR1cmVGcm9tSXRlbSxcbiAgZ2V0RmVhdHVyZUZyb21JdGVtXG59IGZyb20gJy4uL3V0aWxzL3dpZGdldC1tYXAudXRpbHMnO1xuXG5leHBvcnQgdHlwZSBBdHRyaWJ1dGVzRm9yQ2xhc3MgPSB7XG4gIFtrZXk6IHN0cmluZ106IHtcbiAgICBpbnRlbnNpdHlBdHRyaWJ1dGU6IEF0dHJpYnV0ZTtcbiAgICBsb2NhdGlvbkF0dHJpYnV0ZTogQXR0cmlidXRlO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgSXRlbVN0eWxlcyA9IHsgW2lkOiBzdHJpbmddOiB7IGNsYXNzaWM6IFN0eWxlOyBib3JkZXJlZDogU3R5bGUgfSB9O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRNYXBMYXllclNlcnZpY2Uge1xuICBzdHlsZUNhY2hlOiBhbnkgPSB7fTtcblxuICBjaXJjbGVTdHlsZSA9IG5ldyBTdHlsZSh7XG4gICAgZmlsbDogbmV3IEZpbGwoe1xuICAgICAgY29sb3I6ICdyZ2JhKDM3LDg5LDE2MywwLjI0KSdcbiAgICB9KSxcbiAgICBzdHJva2U6IG5ldyBTdHJva2Uoe1xuICAgICAgY29sb3I6ICdyZ2IoMzcsODksMTYzKScsXG4gICAgICB3aWR0aDogMlxuICAgIH0pXG4gIH0pO1xuICBzZWxlY3RlZENpcmNsZVN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICBmaWxsOiBuZXcgRmlsbCh7XG4gICAgICBjb2xvcjogJ3JnYmEoMzcsMTYzLDU4LDAuMjQpJ1xuICAgIH0pLFxuICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7XG4gICAgICBjb2xvcjogJ3JnYigzNywxNjMsNTgpJyxcbiAgICAgIHdpZHRoOiAyXG4gICAgfSlcbiAgfSk7XG5cbiAgcG9pbnRTdHlsZSA9IG5ldyBTdHlsZSh7XG4gICAgaW1hZ2U6IG5ldyBDaXJjbGUoe1xuICAgICAgZmlsbDogbmV3IEZpbGwoeyBjb2xvcjogJ3JnYmEoMzcsODksMTYzLDAuMjQpJyB9KSxcbiAgICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7IGNvbG9yOiAncmdiKDM3LDg5LDE2MyknLCB3aWR0aDogMiB9KSxcbiAgICAgIHJhZGl1czogMTBcbiAgICB9KVxuICB9KTtcbiAgc2VsZWN0ZWRQb2ludFN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICBpbWFnZTogbmV3IENpcmNsZSh7XG4gICAgICBmaWxsOiBuZXcgRmlsbCh7IGNvbG9yOiAncmdiYSgzNywxNjMsNTgsMC4yNCknIH0pLFxuICAgICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHsgY29sb3I6ICdyZ2IoMzcsMTYzLDU4KScsIHdpZHRoOiAyIH0pLFxuICAgICAgcmFkaXVzOiAxMFxuICAgIH0pXG4gIH0pO1xuICBnZW9BdXRoU2VydmljZT86IFByeUdlb0F1dGhTZXJ2aWNlO1xuXG4gIHdpdGhHZW9BdXRoKGdlb0F1dGhTZXJ2aWNlOiBQcnlHZW9BdXRoU2VydmljZSkge1xuICAgIHRoaXMuZ2VvQXV0aFNlcnZpY2UgPSBnZW9BdXRoU2VydmljZTtcbiAgfVxuXG4gIGdldCBpbXBsZW1lbnRhdGlvbkxpc3QoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubGF5ZXJzSW1wbGVtZW50YXRpb24pLmZpbHRlcigoaW1wbGVtZW50YXRpb24pID0+IGltcGxlbWVudGF0aW9uICE9PSAnZ2Vvc2VydmVyJyk7XG4gIH1cblxuICBkb250TmVlZExvY2F0aW9uID0gWydyZWxhdGlvbicsICd3bXMnLCAnd210cycsICdnZW9zZXJ2ZXInLCAnZmVhdHVyZWxheWVyJywgJ3ZlY3RvcnRpbGUnLCAncmFzdGVydGlsZSddO1xuICBkb250TmVlZEludGVuc2l0eSA9IFtcbiAgICAuLi50aGlzLmRvbnROZWVkTG9jYXRpb24sXG4gICAgJ21hcmtlcicsXG4gICAgJ3BvaW50JyxcbiAgICAnbGluZScsXG4gICAgJ3BvbHlnb24nLFxuICAgICdtdWx0aS1saW5lJyxcbiAgICAnbXVsdGktcG9seWdvbicsXG4gICAgJ2F1dG8nXG4gIF07XG5cbiAgbGF5ZXJzSW1wbGVtZW50YXRpb24gPSB7XG4gICAgYXV0bzogKFxuICAgICAgbGF5ZXI6IE1hcEF1dG9MYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyc0ltcGxlbWVudGF0aW9uW1dpZGdldE1hcExheWVyU2VydmljZS50cmFuc2xhdGVGaWVsZFR5cGVUb0xheWVyVHlwZShsYXllci5zdWJUeXBlKV0oXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbGF5ZXIsXG4gICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgICAgbGF5ZXJDbGFzc2VzSWQsXG4gICAgICAgIHJlc3VsdFNldCxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGl0ZW1TdHlsZXMsXG4gICAgICAgIG1hcFxuICAgICAgKSBhcyBCYXNlTGF5ZXI7XG4gICAgfSxcbiAgICBoZWF0bWFwOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaGVhdG1hcCA9IG5ldyBIZWF0bWFwKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFZlY3Rvcih7IGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSB9KSxcbiAgICAgICAgYmx1cjogKGxheWVyLnJhZGl1cyA/PyBERUZBVUxUX0hFQVRNQVBfUkFESVVTKSAvIDIsXG4gICAgICAgIHJhZGl1czogbGF5ZXIucmFkaXVzID8/IERFRkFVTFRfSEVBVE1BUF9SQURJVVMsXG4gICAgICAgIHdlaWdodDogKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gSXRlbVV0aWxzLmdldEF0dHJpYnV0ZUNhbGN1bGF0ZWRWYWx1ZShcbiAgICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbZmVhdHVyZS5nZXQoJ29DbGFzcycpIGFzIHN0cmluZ10uaW50ZW5zaXR5QXR0cmlidXRlXG4gICAgICAgICAgKSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgYXRTY2FsZSA9ICh2YWx1ZSAtIHJhbmdlLm1pbikgLyAocmFuZ2UubWF4IC0gcmFuZ2UubWluKTtcbiAgICAgICAgICByZXR1cm4gbGF5ZXIuaW50ZW5zaXR5QXNjID8gYXRTY2FsZSA6IDEgLSBhdFNjYWxlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbGF5ZXJDbGFzc2VzSWQuZm9yRWFjaCgoY2xhc3NJZCkgPT4ge1xuICAgICAgICAocmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gSXRlbVV0aWxzLnJlYWRHZW9tZXRyeShpdGVtLCAncG9pbnQnLCBhdHRyaWJ1dGVzRm9yQ2xhc3NbY2xhc3NJZF0ubG9jYXRpb25BdHRyaWJ1dGUpO1xuICAgICAgICAgICAgcmV0dXJuICEhbG9jYXRpb247XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaGVhdG1hcFxuICAgICAgICAgICAgICAuZ2V0U291cmNlKClcbiAgICAgICAgICAgICAgPy5hZGRGZWF0dXJlKGdldEZlYXR1cmVGcm9tSXRlbShpdGVtLCAnaGVhdHBvaW50JywgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5sb2NhdGlvbkF0dHJpYnV0ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBoZWF0bWFwIGFzIEJhc2VMYXllcjtcbiAgICB9LFxuICAgIG1hcmtlcjogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgdmVjdG9yTGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVmVjdG9yU291cmNlKHsgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddIH0pXG4gICAgICB9KTtcblxuICAgICAgbGF5ZXJDbGFzc2VzSWQuZm9yRWFjaCgoY2xhc3NJZCkgPT4ge1xuICAgICAgICAocmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gSXRlbVV0aWxzLnJlYWRHZW9tZXRyeShpdGVtLCAncG9pbnQnLCBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlKTtcbiAgICAgICAgICAgIHJldHVybiAhIWxvY2F0aW9uO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZvckVhY2goYXN5bmMgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1GZWF0dXJlID0gZ2V0RmVhdHVyZUZyb21JdGVtKFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAnbWFya2VyJyxcbiAgICAgICAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5sb2NhdGlvbkF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgaXRlbVN0eWxlc1tpdGVtLmlkXT8uY2xhc3NpYyxcbiAgICAgICAgICAgICAgaXRlbVN0eWxlc1tpdGVtLmlkXT8uYm9yZGVyZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpdGVtRmVhdHVyZS5zZXRTdHlsZShpdGVtRmVhdHVyZS5nZXQoJ2NsYXNzaWNTdHlsZScpKTtcbiAgICAgICAgICAgIHZlY3RvckxheWVyLmdldFNvdXJjZSgpPy5hZGRGZWF0dXJlKGl0ZW1GZWF0dXJlKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5tYWtlQ2x1c3RlcmVkKHZlY3RvckxheWVyLCBsYXllcik7XG4gICAgfSxcbiAgICBwb2ludDogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJGcm9tR2VvSnNvbkdlb21ldHJ5KGxheWVyLCBsYXllckNsYXNzZXNJZCwgcmVzdWx0U2V0LCBhdHRyaWJ1dGVzRm9yQ2xhc3MsICdwb2ludCcpO1xuICAgIH0sXG4gICAgbGluZTogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJGcm9tR2VvSnNvbkdlb21ldHJ5KGxheWVyLCBsYXllckNsYXNzZXNJZCwgcmVzdWx0U2V0LCBhdHRyaWJ1dGVzRm9yQ2xhc3MsICdsaW5lJyk7XG4gICAgfSxcbiAgICAnbXVsdGktbGluZSc6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShsYXllciwgbGF5ZXJDbGFzc2VzSWQsIHJlc3VsdFNldCwgYXR0cmlidXRlc0ZvckNsYXNzLCAnbXVsdGktbGluZScpO1xuICAgIH0sXG4gICAgcG9seWdvbjogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJGcm9tR2VvSnNvbkdlb21ldHJ5KGxheWVyLCBsYXllckNsYXNzZXNJZCwgcmVzdWx0U2V0LCBhdHRyaWJ1dGVzRm9yQ2xhc3MsICdwb2x5Z29uJyk7XG4gICAgfSxcbiAgICAnbXVsdGktcG9seWdvbic6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShsYXllciwgbGF5ZXJDbGFzc2VzSWQsIHJlc3VsdFNldCwgYXR0cmlidXRlc0ZvckNsYXNzLCAnbXVsdGktcG9seWdvbicpO1xuICAgIH0sXG4gICAgYnViYmxlOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBidWJibGVMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2UoeyBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10gfSlcbiAgICAgIH0pO1xuXG4gICAgICBsYXllckNsYXNzZXNJZC5mb3JFYWNoKChjbGFzc0lkKSA9PiB7XG4gICAgICAgIChyZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0gfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBJdGVtVXRpbHMucmVhZEdlb21ldHJ5KGl0ZW0sICdwb2ludCcsIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10ubG9jYXRpb25BdHRyaWJ1dGUpO1xuICAgICAgICAgICAgcmV0dXJuICEhbG9jYXRpb247XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlQ2FsY3VsYXRlZFZhbHVlKFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmludGVuc2l0eUF0dHJpYnV0ZVxuICAgICAgICAgICAgKSBhcyBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCBhdFNjYWxlID0gKHZhbHVlIC0gcmFuZ2UubWluKSAvIChyYW5nZS5tYXggLSByYW5nZS5taW4pO1xuICAgICAgICAgICAgY29uc3QgaXRlbUZlYXR1cmUgPSBnZXRDaXJjbGVGZWF0dXJlRnJvbUl0ZW0oXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10ubG9jYXRpb25BdHRyaWJ1dGUsXG4gICAgICAgICAgICAgIChsYXllci5pbnRlbnNpdHlBc2MgPyBhdFNjYWxlIDogMSAtIGF0U2NhbGUpICogKGxheWVyLnJhZGl1c0ZhY3RvciA/PyBERUZBVUxUX1JBRElVU19JTlRFTlNJVFlfRkFDVE9SKSxcbiAgICAgICAgICAgICAgdGhpcy5jaXJjbGVTdHlsZSxcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENpcmNsZVN0eWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaXRlbUZlYXR1cmUuc2V0U3R5bGUoaXRlbUZlYXR1cmUuZ2V0KCdjbGFzc2ljU3R5bGUnKSk7XG4gICAgICAgICAgICBidWJibGVMYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShpdGVtRmVhdHVyZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJ1YmJsZUxheWVyO1xuICAgIH0sXG4gICAgcmVsYXRpb246IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRSZWxhdGlvbkxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2UoeyBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10gfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgd21zOiAoXG4gICAgICBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGltcGwgPSBuZXcgVGlsZSh7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBUaWxlV01TKHtcbiAgICAgICAgICBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10sXG4gICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgIHVybDogbGF5ZXIudXJsLFxuICAgICAgICAgIHRpbGVMb2FkRnVuY3Rpb246ICh0aWxlOiBhbnksIHN0cjogc3RyaW5nKSA9PiB0aGlzLmdlb0F1dGhTZXJ2aWNlPy5jdXN0b21Mb2FkZXIodGlsZSwgc3RyKSxcbiAgICAgICAgICBwYXJhbXM6IHsgTEFZRVJTOiBsYXllci5wYXJhbUxheWVyLCBUSUxFRDogbGF5ZXIucGFyYW1UaWxlZCwgLi4uKGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzID8/IHt9KSB9XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIGltcGwuc2V0KCd1cmwnLCBsYXllci51cmwpO1xuICAgICAgaW1wbC5zZXQoJ3BhcmFtTGF5ZXInLCBsYXllci5wYXJhbUxheWVyKTtcbiAgICAgIGltcGwuc2V0KCdvQ2xhc3MnLCBsYXllci5vQ2xhc3MpO1xuICAgICAgaW1wbC5zZXQoJ2dldEZlYXR1cmVJbmZvQWRkaXRpb25hbFBhcmFtZXRlcnMnLCBsYXllci5nZXRGZWF0dXJlSW5mb0FkZGl0aW9uYWxQYXJhbWV0ZXJzID8/IHt9KTtcbiAgICAgIHJldHVybiBpbXBsO1xuICAgIH0sXG4gICAgd210czogKFxuICAgICAgbGF5ZXI6IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgcHJvamVjdGlvbiA9IG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpO1xuICAgICAgY29uc3QgcHJvamVjdGlvbkV4dGVudCA9IHByb2plY3Rpb24uZ2V0RXh0ZW50KCk7XG4gICAgICBjb25zdCBzaXplID0gZ2V0V2lkdGgocHJvamVjdGlvbkV4dGVudCkgLyAyNTY7XG4gICAgICBjb25zdCByZXNvbHV0aW9ucyA9IG5ldyBBcnJheSgxOSk7XG4gICAgICBjb25zdCBtYXRyaXhJZHMgPSBuZXcgQXJyYXkoMTkpO1xuICAgICAgZm9yIChsZXQgeiA9IDA7IHogPCAxOTsgKyt6KSB7XG4gICAgICAgIC8vIGdlbmVyYXRlIHJlc29sdXRpb25zIGFuZCBtYXRyaXhJZHMgYXJyYXlzIGZvciB0aGlzIFdNVFNcbiAgICAgICAgcmVzb2x1dGlvbnNbel0gPSBzaXplIC8gTWF0aC5wb3coMiwgeik7XG4gICAgICAgIG1hdHJpeElkc1t6XSA9IHo7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRpbGUoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgV01UUyh7XG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddLFxuICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcbiAgICAgICAgICB1cmw6IGxheWVyLnVybCxcbiAgICAgICAgICBsYXllcjogbGF5ZXIucGFyYW1MYXllcixcbiAgICAgICAgICBtYXRyaXhTZXQ6IGxheWVyLm1hdHJpeFNldCxcbiAgICAgICAgICBwcm9qZWN0aW9uLFxuICAgICAgICAgIHRpbGVHcmlkOiBuZXcgV01UU1RpbGVHcmlkKHtcbiAgICAgICAgICAgIG9yaWdpbjogZ2V0VG9wTGVmdChwcm9qZWN0aW9uRXh0ZW50KSxcbiAgICAgICAgICAgIHJlc29sdXRpb25zOiByZXNvbHV0aW9ucyxcbiAgICAgICAgICAgIG1hdHJpeElkczogbWF0cml4SWRzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3R5bGU6IGxheWVyLnN0eWxlXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdlb3NlcnZlcjogKFxuICAgICAgbGF5ZXI6IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaW1wbCA9IHRoaXMubGF5ZXJzSW1wbGVtZW50YXRpb25bJ3dtcyddKFxuICAgICAgICB7IC4uLmxheWVyLCB0eXBlOiAnd21zJywgb0NsYXNzOiBsYXllci5vQ2xhc3MgfSxcbiAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaXRlbVN0eWxlcyxcbiAgICAgICAgbWFwXG4gICAgICApO1xuICAgICAgaW1wbC5zZXQoJ3RpdGxlJywgbGF5ZXIudGl0bGUpO1xuICAgICAgaW1wbC5zZXQoJ29DbGFzcycsIGxheWVyLm9DbGFzcyk7XG4gICAgICBpbXBsLnNldCgnZGF0YXNvdXJjZUlkJywgbGF5ZXIuZGF0YXNvdXJjZUlkKTtcbiAgICAgIHJldHVybiBpbXBsO1xuICAgIH0sXG4gICAgZmVhdHVyZWxheWVyOiAoXG4gICAgICBsYXllcjogTWFwRmVhdHVyZUxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2Uoe1xuICAgICAgICAgIGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSxcbiAgICAgICAgICBmb3JtYXQ6IG5ldyBHZW9KU09OKCksXG4gICAgICAgICAgdXJsOiBsYXllci51cmxcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdmVjdG9ydGlsZTogKFxuICAgICAgbGF5ZXI6IE1hcFZlY3RvclRpbGVMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBuZXcgVmVjdG9yVGlsZUxheWVyKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFZlY3RvclRpbGUoe1xuICAgICAgICAgIGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSxcbiAgICAgICAgICBmb3JtYXQ6IG5ldyBNVlQoKSxcbiAgICAgICAgICB1cmw6IGxheWVyLnVybFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICByYXN0ZXJ0aWxlOiAoXG4gICAgICBsYXllcjogTWFwUmFzdGVyVGlsZUxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBUaWxlKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFhZWih7XG4gICAgICAgICAgdXJsOiBsYXllci51cmwsXG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBsYXllckZyb21HZW9Kc29uR2VvbWV0cnkoXG4gICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgdHlwZTogJ3BvaW50JyB8ICdsaW5lJyB8ICdtdWx0aS1saW5lJyB8ICdwb2x5Z29uJyB8ICdtdWx0aS1wb2x5Z29uJ1xuICApIHtcbiAgICBjb25zdCB2ZWN0b3JMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgc291cmNlOiBuZXcgVmVjdG9yU291cmNlKHsgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddIH0pXG4gICAgfSk7XG5cbiAgICBsYXllckNsYXNzZXNJZC5mb3JFYWNoKChjbGFzc0lkKSA9PiB7XG4gICAgICAocmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdIHx8IFtdKVxuICAgICAgICAubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgbG9jYXRpb246IEl0ZW1VdGlscy5yZWFkR2VvbWV0cnkoaXRlbSwgdHlwZSwgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5sb2NhdGlvbkF0dHJpYnV0ZSlcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKHsgbG9jYXRpb24gfSkgPT4gISFsb2NhdGlvbilcbiAgICAgICAgLmZvckVhY2goYXN5bmMgKHN1Ykl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtRmVhdHVyZSA9IG5ldyBGZWF0dXJlKHtcbiAgICAgICAgICAgIC4uLnN1Ykl0ZW0uaXRlbSxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBnZW9tZXRyeTogc3ViSXRlbS5sb2NhdGlvbixcbiAgICAgICAgICAgIGNsYXNzaWNTdHlsZTogdHlwZSA9PT0gJ3BvaW50JyA/IHRoaXMucG9pbnRTdHlsZSA6IHRoaXMuY2lyY2xlU3R5bGUsXG4gICAgICAgICAgICBzZWxlY3RlZFN0eWxlOiB0eXBlID09PSAncG9pbnQnID8gdGhpcy5zZWxlY3RlZFBvaW50U3R5bGUgOiB0aGlzLnNlbGVjdGVkQ2lyY2xlU3R5bGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpdGVtRmVhdHVyZS5zZXRTdHlsZShpdGVtRmVhdHVyZS5nZXQoJ2NsYXNzaWNTdHlsZScpKTtcbiAgICAgICAgICB2ZWN0b3JMYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShpdGVtRmVhdHVyZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMubWFrZUNsdXN0ZXJlZCh2ZWN0b3JMYXllciwgbGF5ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlQ2x1c3RlcmVkKGxheWVyOiBCYXNlTGF5ZXIsIGxheWVyT3B0aW9uczogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgaWYgKCFbJ21hcmtlcicsICdidWJibGUnXS5pbmNsdWRlcyhsYXllck9wdGlvbnMudHlwZSkgfHwgISgnY2x1c3RlcmVkJyBpbiBsYXllck9wdGlvbnMgJiYgbGF5ZXJPcHRpb25zLmNsdXN0ZXJlZCkpIHtcbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9XG4gICAgLy8gQ2x1c3RlcmluZyBzb3VyY2VcbiAgICBjb25zdCB2ZWN0b3JMYXllciA9IGxheWVyIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZTxHZW9tZXRyeT4+O1xuICAgIHZlY3RvckxheWVyLnNldFNvdXJjZShcbiAgICAgIG5ldyBDbHVzdGVyKHtcbiAgICAgICAgZGlzdGFuY2U6IGxheWVyT3B0aW9ucy5jbHVzdGVyRGlzdGFuY2UsXG4gICAgICAgIG1pbkRpc3RhbmNlOiAxMCxcbiAgICAgICAgc291cmNlOiB2ZWN0b3JMYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2VcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHZlY3RvckxheWVyLnNldFN0eWxlKChmZWF0dXJlKSA9PiB7XG4gICAgICBjb25zdCBzaXplID0gZmVhdHVyZS5nZXQoJ2ZlYXR1cmVzJykubGVuZ3RoO1xuICAgICAgaWYgKHNpemUgPiAxKSB7XG4gICAgICAgIGxldCBzdHlsZSA9IHRoaXMuc3R5bGVDYWNoZVtzaXplXTtcbiAgICAgICAgaWYgKCFzdHlsZSkge1xuICAgICAgICAgIHN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICAgICAgICAgIGltYWdlOiBuZXcgQ2lyY2xlU3R5bGUoe1xuICAgICAgICAgICAgICByYWRpdXM6IDEwLFxuICAgICAgICAgICAgICBzdHJva2U6IG5ldyBTdHJva2Uoe1xuICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZidcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGZpbGw6IG5ldyBGaWxsKHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJyMzMzk5Q0MnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRleHQ6IG5ldyBUZXh0KHsgdGV4dDogYCR7c2l6ZX1gIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zdHlsZUNhY2hlW3NpemVdID0gc3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNpemUgPT09IDEgPyBmZWF0dXJlLmdldCgnZmVhdHVyZXMnKVswXS5nZXQoJ2NsYXNzaWNTdHlsZScpIDogbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2xhdGVGaWVsZFR5cGVUb0xheWVyVHlwZShzdWJUeXBlOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHN1YlR5cGUpIHtcbiAgICAgIGNhc2UgRmllbGRUeXBlLlBPSU5UOlxuICAgICAgICByZXR1cm4gJ21hcmtlcic7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MSU5FOlxuICAgICAgICByZXR1cm4gJ2xpbmUnO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuUE9MWUdPTjpcbiAgICAgICAgcmV0dXJuICdwb2x5Z29uJztcbiAgICAgIGNhc2UgRmllbGRUeXBlLk1VTFRJTElORTpcbiAgICAgICAgcmV0dXJuICdtdWx0aS1saW5lJztcbiAgICAgIGNhc2UgRmllbGRUeXBlLk1VTFRJUE9MWUdPTjpcbiAgICAgICAgcmV0dXJuICdtdWx0aS1wb2x5Z29uJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUud2Fybihgd3JvbmcgdHlwZSAke3N1YlR5cGV9IGZvciBhdXRvIG9wdGlvbnNgKTtcbiAgICAgICAgcmV0dXJuICdtYXJrZXInO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC1sYXllci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsU0FBUyxFQUNULFNBQVMsRUFlVixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQU8sTUFBTSxJQUFJLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxlQUFlLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0QsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztB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QU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDM0U7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxPQUFlO1FBQ2xELFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxTQUFTLENBQUMsS0FBSztnQkFDbEIsT0FBTyxRQUFRLENBQUM7WUFDbEIsS0FBSyxTQUFTLENBQUMsSUFBSTtnQkFDakIsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxTQUFTLENBQUMsT0FBTztnQkFDcEIsT0FBTyxTQUFTLENBQUM7WUFDbkIsS0FBSyxTQUFTLENBQUMsU0FBUztnQkFDdEIsT0FBTyxZQUFZLENBQUM7WUFDdEIsS0FBSyxTQUFTLENBQUMsWUFBWTtnQkFDekIsT0FBTyxlQUFlLENBQUM7WUFDekI7Z0JBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLE9BQU8sbUJBQW1CLENBQUMsQ0FBQztnQkFDdkQsT0FBTyxRQUFRLENBQUM7U0FDbkI7SUFDSCxDQUFDOzhHQXJrQlUscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgRmllbGRUeXBlLFxuICBJdGVtVXRpbHMsXG4gIE1hcEF1dG9MYXllck9wdGlvbnMsXG4gIE1hcEZlYXR1cmVMYXllck9wdGlvbnMsXG4gIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyxcbiAgTWFwUmFzdGVyVGlsZUxheWVyT3B0aW9ucyxcbiAgTWFwVmVjdG9yVGlsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0UmVsYXRpb25MYXllck9wdGlvbnMsXG4gIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zLFxuICBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMsXG4gIFByeUdlb0F1dGhTZXJ2aWNlLFxuICBSZXN1bHRTZXRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcCB9IGZyb20gJ29sJztcbmltcG9ydCB7IGdldFRvcExlZnQsIGdldFdpZHRoIH0gZnJvbSAnb2wvZXh0ZW50JztcbmltcG9ydCB7IEdlb0pTT04sIE1WVCB9IGZyb20gJ29sL2Zvcm1hdCc7XG5pbXBvcnQgeyBHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgSGVhdG1hcCwgVGlsZSB9IGZyb20gJ29sL2xheWVyJztcbmltcG9ydCBCYXNlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvQmFzZSc7XG5pbXBvcnQgVmVjdG9yTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCBWZWN0b3JUaWxlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yVGlsZSc7XG5pbXBvcnQgeyBDbHVzdGVyLCBUaWxlV01TLCBWZWN0b3IsIFdNVFMsIFhZWiB9IGZyb20gJ29sL3NvdXJjZSc7XG5pbXBvcnQgVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IFZlY3RvclRpbGUgZnJvbSAnb2wvc291cmNlL1ZlY3RvclRpbGUnO1xuaW1wb3J0IHsgQ2lyY2xlLCBGaWxsLCBTdHJva2UsIFN0eWxlLCBUZXh0IH0gZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IENpcmNsZVN0eWxlIGZyb20gJ29sL3N0eWxlL0NpcmNsZSc7XG5pbXBvcnQgV01UU1RpbGVHcmlkIGZyb20gJ29sL3RpbGVncmlkL1dNVFMnO1xuaW1wb3J0IHsgUHJvamVjdGlvbkxpa2UgfSBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IFdpZGdldE1hcFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvd2lkZ2V0LW1hcC51dGlscyc7XG5cbmV4cG9ydCB0eXBlIEF0dHJpYnV0ZXNGb3JDbGFzcyA9IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIGludGVuc2l0eUF0dHJpYnV0ZTogQXR0cmlidXRlO1xuICAgIGxvY2F0aW9uQXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtU3R5bGVzID0geyBbaWQ6IHN0cmluZ106IHsgY2xhc3NpYzogU3R5bGU7IGJvcmRlcmVkOiBTdHlsZSB9IH07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldE1hcExheWVyU2VydmljZSB7XG4gIHN0eWxlQ2FjaGU6IGFueSA9IHt9O1xuXG4gIGNpcmNsZVN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICBmaWxsOiBuZXcgRmlsbCh7XG4gICAgICBjb2xvcjogJ3JnYmEoMzcsODksMTYzLDAuMjQpJ1xuICAgIH0pLFxuICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7XG4gICAgICBjb2xvcjogJ3JnYigzNyw4OSwxNjMpJyxcbiAgICAgIHdpZHRoOiAyXG4gICAgfSlcbiAgfSk7XG4gIHNlbGVjdGVkQ2lyY2xlU3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgIGZpbGw6IG5ldyBGaWxsKHtcbiAgICAgIGNvbG9yOiAncmdiYSgzNywxNjMsNTgsMC4yNCknXG4gICAgfSksXG4gICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHtcbiAgICAgIGNvbG9yOiAncmdiKDM3LDE2Myw1OCknLFxuICAgICAgd2lkdGg6IDJcbiAgICB9KVxuICB9KTtcblxuICBwb2ludFN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICBpbWFnZTogbmV3IENpcmNsZSh7XG4gICAgICBmaWxsOiBuZXcgRmlsbCh7IGNvbG9yOiAncmdiYSgzNyw4OSwxNjMsMC4yNCknIH0pLFxuICAgICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHsgY29sb3I6ICdyZ2IoMzcsODksMTYzKScsIHdpZHRoOiAyIH0pLFxuICAgICAgcmFkaXVzOiAxMFxuICAgIH0pXG4gIH0pO1xuICBzZWxlY3RlZFBvaW50U3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgIGltYWdlOiBuZXcgQ2lyY2xlKHtcbiAgICAgIGZpbGw6IG5ldyBGaWxsKHsgY29sb3I6ICdyZ2JhKDM3LDE2Myw1OCwwLjI0KScgfSksXG4gICAgICBzdHJva2U6IG5ldyBTdHJva2UoeyBjb2xvcjogJ3JnYigzNywxNjMsNTgpJywgd2lkdGg6IDIgfSksXG4gICAgICByYWRpdXM6IDEwXG4gICAgfSlcbiAgfSk7XG4gIGdlb0F1dGhTZXJ2aWNlPzogUHJ5R2VvQXV0aFNlcnZpY2U7XG5cbiAgd2l0aEdlb0F1dGgoZ2VvQXV0aFNlcnZpY2U6IFByeUdlb0F1dGhTZXJ2aWNlKSB7XG4gICAgdGhpcy5nZW9BdXRoU2VydmljZSA9IGdlb0F1dGhTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0IGltcGxlbWVudGF0aW9uTGlzdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5sYXllcnNJbXBsZW1lbnRhdGlvbikuZmlsdGVyKChpbXBsZW1lbnRhdGlvbikgPT4gaW1wbGVtZW50YXRpb24gIT09ICdnZW9zZXJ2ZXInKTtcbiAgfVxuXG4gIGRvbnROZWVkTG9jYXRpb24gPSBbJ3JlbGF0aW9uJywgJ3dtcycsICd3bXRzJywgJ2dlb3NlcnZlcicsICdmZWF0dXJlbGF5ZXInLCAndmVjdG9ydGlsZScsICdyYXN0ZXJ0aWxlJ107XG4gIGRvbnROZWVkSW50ZW5zaXR5ID0gW1xuICAgIC4uLnRoaXMuZG9udE5lZWRMb2NhdGlvbixcbiAgICAnbWFya2VyJyxcbiAgICAncG9pbnQnLFxuICAgICdsaW5lJyxcbiAgICAncG9seWdvbicsXG4gICAgJ211bHRpLWxpbmUnLFxuICAgICdtdWx0aS1wb2x5Z29uJyxcbiAgICAnYXV0bydcbiAgXTtcblxuICBsYXllcnNJbXBsZW1lbnRhdGlvbiA9IHtcbiAgICBhdXRvOiAoXG4gICAgICBsYXllcjogTWFwQXV0b0xheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJzSW1wbGVtZW50YXRpb25bV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLnRyYW5zbGF0ZUZpZWxkVHlwZVRvTGF5ZXJUeXBlKGxheWVyLnN1YlR5cGUpXShcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBsYXllcixcbiAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaXRlbVN0eWxlcyxcbiAgICAgICAgbWFwXG4gICAgICApIGFzIEJhc2VMYXllcjtcbiAgICB9LFxuICAgIGhlYXRtYXA6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBoZWF0bWFwID0gbmV3IEhlYXRtYXAoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVmVjdG9yKHsgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddIH0pLFxuICAgICAgICBibHVyOiAobGF5ZXIucmFkaXVzID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfSEVBVE1BUF9SQURJVVMpIC8gMixcbiAgICAgICAgcmFkaXVzOiBsYXllci5yYWRpdXMgPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9IRUFUTUFQX1JBRElVUyxcbiAgICAgICAgd2VpZ2h0OiAoZmVhdHVyZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlQ2FsY3VsYXRlZFZhbHVlKFxuICAgICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzc1tmZWF0dXJlLmdldCgnb0NsYXNzJykgYXMgc3RyaW5nXS5pbnRlbnNpdHlBdHRyaWJ1dGVcbiAgICAgICAgICApIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBhdFNjYWxlID0gKHZhbHVlIC0gcmFuZ2UubWluKSAvIChyYW5nZS5tYXggLSByYW5nZS5taW4pO1xuICAgICAgICAgIHJldHVybiBsYXllci5pbnRlbnNpdHlBc2MgPyBhdFNjYWxlIDogMSAtIGF0U2NhbGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBsYXllckNsYXNzZXNJZC5mb3JFYWNoKChjbGFzc0lkKSA9PiB7XG4gICAgICAgIChyZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0gfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBXaWRnZXRNYXBVdGlscy5yZWFkR2VvbWV0cnkoXG4gICAgICAgICAgICAgIG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAncG9pbnQnLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbY2xhc3NJZF0ubG9jYXRpb25BdHRyaWJ1dGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gISFsb2NhdGlvbjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBoZWF0bWFwXG4gICAgICAgICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAgICAgICA/LmFkZEZlYXR1cmUoXG4gICAgICAgICAgICAgICAgV2lkZ2V0TWFwVXRpbHMuZ2V0RmVhdHVyZUZyb21JdGVtKFxuICAgICAgICAgICAgICAgICAgbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCksXG4gICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgJ2hlYXRwb2ludCcsXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBoZWF0bWFwIGFzIEJhc2VMYXllcjtcbiAgICB9LFxuICAgIG1hcmtlcjogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgdmVjdG9yTGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVmVjdG9yU291cmNlKHsgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddIH0pXG4gICAgICB9KTtcblxuICAgICAgbGF5ZXJDbGFzc2VzSWQuZm9yRWFjaCgoY2xhc3NJZCkgPT4ge1xuICAgICAgICAocmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gV2lkZ2V0TWFwVXRpbHMucmVhZEdlb21ldHJ5KFxuICAgICAgICAgICAgICBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKSxcbiAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgJ3BvaW50JyxcbiAgICAgICAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5sb2NhdGlvbkF0dHJpYnV0ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiAhIWxvY2F0aW9uO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZvckVhY2goYXN5bmMgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1GZWF0dXJlID0gV2lkZ2V0TWFwVXRpbHMuZ2V0RmVhdHVyZUZyb21JdGVtKFxuICAgICAgICAgICAgICBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKSxcbiAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgJ21hcmtlcicsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10ubG9jYXRpb25BdHRyaWJ1dGUsXG4gICAgICAgICAgICAgIGl0ZW1TdHlsZXNbaXRlbS5pZF0/LmNsYXNzaWMsXG4gICAgICAgICAgICAgIGl0ZW1TdHlsZXNbaXRlbS5pZF0/LmJvcmRlcmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaXRlbUZlYXR1cmUuc2V0U3R5bGUoaXRlbUZlYXR1cmUuZ2V0KCdjbGFzc2ljU3R5bGUnKSk7XG4gICAgICAgICAgICB2ZWN0b3JMYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShpdGVtRmVhdHVyZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRoaXMubWFrZUNsdXN0ZXJlZCh2ZWN0b3JMYXllciwgbGF5ZXIpO1xuICAgIH0sXG4gICAgcG9pbnQ6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShcbiAgICAgICAgbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCksXG4gICAgICAgIGxheWVyLFxuICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICAgICdwb2ludCdcbiAgICAgICk7XG4gICAgfSxcbiAgICBsaW5lOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5sYXllckZyb21HZW9Kc29uR2VvbWV0cnkoXG4gICAgICAgIG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLFxuICAgICAgICBsYXllcixcbiAgICAgICAgbGF5ZXJDbGFzc2VzSWQsXG4gICAgICAgIHJlc3VsdFNldCxcbiAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgICAnbGluZSdcbiAgICAgICk7XG4gICAgfSxcbiAgICAnbXVsdGktbGluZSc6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShcbiAgICAgICAgbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCksXG4gICAgICAgIGxheWVyLFxuICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICAgICdtdWx0aS1saW5lJ1xuICAgICAgKTtcbiAgICB9LFxuICAgIHBvbHlnb246IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShcbiAgICAgICAgbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCksXG4gICAgICAgIGxheWVyLFxuICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICAgICdwb2x5Z29uJ1xuICAgICAgKTtcbiAgICB9LFxuICAgICdtdWx0aS1wb2x5Z29uJzogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJGcm9tR2VvSnNvbkdlb21ldHJ5KFxuICAgICAgICBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKSxcbiAgICAgICAgbGF5ZXIsXG4gICAgICAgIGxheWVyQ2xhc3Nlc0lkLFxuICAgICAgICByZXN1bHRTZXQsXG4gICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgICAgJ211bHRpLXBvbHlnb24nXG4gICAgICApO1xuICAgIH0sXG4gICAgYnViYmxlOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBidWJibGVMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2UoeyBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10gfSlcbiAgICAgIH0pO1xuXG4gICAgICBsYXllckNsYXNzZXNJZC5mb3JFYWNoKChjbGFzc0lkKSA9PiB7XG4gICAgICAgIChyZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0gfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBXaWRnZXRNYXBVdGlscy5yZWFkR2VvbWV0cnkoXG4gICAgICAgICAgICAgIG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAncG9pbnQnLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuICEhbG9jYXRpb247XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlQ2FsY3VsYXRlZFZhbHVlKFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmludGVuc2l0eUF0dHJpYnV0ZVxuICAgICAgICAgICAgKSBhcyBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCBhdFNjYWxlID0gKHZhbHVlIC0gcmFuZ2UubWluKSAvIChyYW5nZS5tYXggLSByYW5nZS5taW4pO1xuICAgICAgICAgICAgY29uc3QgaXRlbUZlYXR1cmUgPSBXaWRnZXRNYXBVdGlscy5nZXRDaXJjbGVGZWF0dXJlRnJvbUl0ZW0oXG4gICAgICAgICAgICAgIG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlLFxuICAgICAgICAgICAgICAobGF5ZXIuaW50ZW5zaXR5QXNjID8gYXRTY2FsZSA6IDEgLSBhdFNjYWxlKSAqXG4gICAgICAgICAgICAgICAgKGxheWVyLnJhZGl1c0ZhY3RvciA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1JBRElVU19JTlRFTlNJVFlfRkFDVE9SKSxcbiAgICAgICAgICAgICAgdGhpcy5jaXJjbGVTdHlsZSxcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENpcmNsZVN0eWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaXRlbUZlYXR1cmUuc2V0U3R5bGUoaXRlbUZlYXR1cmUuZ2V0KCdjbGFzc2ljU3R5bGUnKSk7XG4gICAgICAgICAgICBidWJibGVMYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShpdGVtRmVhdHVyZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJ1YmJsZUxheWVyO1xuICAgIH0sXG4gICAgcmVsYXRpb246IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRSZWxhdGlvbkxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2UoeyBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10gfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgd21zOiAoXG4gICAgICBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGltcGwgPSBuZXcgVGlsZSh7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBUaWxlV01TKHtcbiAgICAgICAgICBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10sXG4gICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgIHVybDogbGF5ZXIudXJsLFxuICAgICAgICAgIHRpbGVMb2FkRnVuY3Rpb246ICh0aWxlOiBhbnksIHN0cjogc3RyaW5nKSA9PiB0aGlzLmdlb0F1dGhTZXJ2aWNlPy5jdXN0b21Mb2FkZXIodGlsZSwgc3RyKSxcbiAgICAgICAgICBwYXJhbXM6IHsgTEFZRVJTOiBsYXllci5wYXJhbUxheWVyLCBUSUxFRDogbGF5ZXIucGFyYW1UaWxlZCwgLi4uKGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzID8/IHt9KSB9XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIGltcGwuc2V0KCd1cmwnLCBsYXllci51cmwpO1xuICAgICAgaW1wbC5zZXQoJ3BhcmFtTGF5ZXInLCBsYXllci5wYXJhbUxheWVyKTtcbiAgICAgIGltcGwuc2V0KCdvQ2xhc3MnLCBsYXllci5vQ2xhc3MpO1xuICAgICAgaW1wbC5zZXQoJ2dldEZlYXR1cmVJbmZvQWRkaXRpb25hbFBhcmFtZXRlcnMnLCBsYXllci5nZXRGZWF0dXJlSW5mb0FkZGl0aW9uYWxQYXJhbWV0ZXJzID8/IHt9KTtcbiAgICAgIHJldHVybiBpbXBsO1xuICAgIH0sXG4gICAgd210czogKFxuICAgICAgbGF5ZXI6IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgcHJvamVjdGlvbiA9IG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpO1xuICAgICAgY29uc3QgcHJvamVjdGlvbkV4dGVudCA9IHByb2plY3Rpb24uZ2V0RXh0ZW50KCk7XG4gICAgICBjb25zdCBzaXplID0gZ2V0V2lkdGgocHJvamVjdGlvbkV4dGVudCkgLyAyNTY7XG4gICAgICBjb25zdCByZXNvbHV0aW9ucyA9IG5ldyBBcnJheSgxOSk7XG4gICAgICBjb25zdCBtYXRyaXhJZHMgPSBuZXcgQXJyYXkoMTkpO1xuICAgICAgZm9yIChsZXQgeiA9IDA7IHogPCAxOTsgKyt6KSB7XG4gICAgICAgIC8vIGdlbmVyYXRlIHJlc29sdXRpb25zIGFuZCBtYXRyaXhJZHMgYXJyYXlzIGZvciB0aGlzIFdNVFNcbiAgICAgICAgcmVzb2x1dGlvbnNbel0gPSBzaXplIC8gTWF0aC5wb3coMiwgeik7XG4gICAgICAgIG1hdHJpeElkc1t6XSA9IHo7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRpbGUoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgV01UUyh7XG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddLFxuICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcbiAgICAgICAgICB1cmw6IGxheWVyLnVybCxcbiAgICAgICAgICBsYXllcjogbGF5ZXIucGFyYW1MYXllcixcbiAgICAgICAgICBtYXRyaXhTZXQ6IGxheWVyLm1hdHJpeFNldCxcbiAgICAgICAgICBwcm9qZWN0aW9uLFxuICAgICAgICAgIHRpbGVHcmlkOiBuZXcgV01UU1RpbGVHcmlkKHtcbiAgICAgICAgICAgIG9yaWdpbjogZ2V0VG9wTGVmdChwcm9qZWN0aW9uRXh0ZW50KSxcbiAgICAgICAgICAgIHJlc29sdXRpb25zOiByZXNvbHV0aW9ucyxcbiAgICAgICAgICAgIG1hdHJpeElkczogbWF0cml4SWRzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3R5bGU6IGxheWVyLnN0eWxlXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdlb3NlcnZlcjogKFxuICAgICAgbGF5ZXI6IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaW1wbCA9IHRoaXMubGF5ZXJzSW1wbGVtZW50YXRpb25bJ3dtcyddKFxuICAgICAgICB7IC4uLmxheWVyLCB0eXBlOiAnd21zJywgb0NsYXNzOiBsYXllci5vQ2xhc3MgfSxcbiAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaXRlbVN0eWxlcyxcbiAgICAgICAgbWFwXG4gICAgICApO1xuICAgICAgaW1wbC5zZXQoJ3RpdGxlJywgbGF5ZXIudGl0bGUpO1xuICAgICAgaW1wbC5zZXQoJ29DbGFzcycsIGxheWVyLm9DbGFzcyk7XG4gICAgICBpbXBsLnNldCgnZGF0YXNvdXJjZUlkJywgbGF5ZXIuZGF0YXNvdXJjZUlkKTtcbiAgICAgIHJldHVybiBpbXBsO1xuICAgIH0sXG4gICAgZmVhdHVyZWxheWVyOiAoXG4gICAgICBsYXllcjogTWFwRmVhdHVyZUxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gV2lkZ2V0TWFwVXRpbHMuREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2Uoe1xuICAgICAgICAgIGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSxcbiAgICAgICAgICBmb3JtYXQ6IG5ldyBHZW9KU09OKCksXG4gICAgICAgICAgdXJsOiBsYXllci51cmxcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdmVjdG9ydGlsZTogKFxuICAgICAgbGF5ZXI6IE1hcFZlY3RvclRpbGVMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBuZXcgVmVjdG9yVGlsZUxheWVyKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFZlY3RvclRpbGUoe1xuICAgICAgICAgIGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSxcbiAgICAgICAgICBmb3JtYXQ6IG5ldyBNVlQoKSxcbiAgICAgICAgICB1cmw6IGxheWVyLnVybFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICByYXN0ZXJ0aWxlOiAoXG4gICAgICBsYXllcjogTWFwUmFzdGVyVGlsZUxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBUaWxlKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBXaWRnZXRNYXBVdGlscy5ERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFhZWih7XG4gICAgICAgICAgdXJsOiBsYXllci51cmwsXG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBsYXllckZyb21HZW9Kc29uR2VvbWV0cnkoXG4gICAgcHJvamVjdGlvbjogUHJvamVjdGlvbkxpa2UsXG4gICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgdHlwZTogJ3BvaW50JyB8ICdsaW5lJyB8ICdtdWx0aS1saW5lJyB8ICdwb2x5Z29uJyB8ICdtdWx0aS1wb2x5Z29uJ1xuICApIHtcbiAgICBjb25zdCB2ZWN0b3JMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NSU4sXG4gICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IFdpZGdldE1hcFV0aWxzLkRFRkFVTFRfWk9PTV9NQVgsXG4gICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgc291cmNlOiBuZXcgVmVjdG9yU291cmNlKHsgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddIH0pXG4gICAgfSk7XG5cbiAgICBsYXllckNsYXNzZXNJZC5mb3JFYWNoKChjbGFzc0lkKSA9PiB7XG4gICAgICAocmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdIHx8IFtdKVxuICAgICAgICAubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgbG9jYXRpb246IFdpZGdldE1hcFV0aWxzLnJlYWRHZW9tZXRyeShcbiAgICAgICAgICAgIHByb2plY3Rpb24sXG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10ubG9jYXRpb25BdHRyaWJ1dGVcbiAgICAgICAgICApXG4gICAgICAgIH0pKVxuICAgICAgICAuZmlsdGVyKCh7IGxvY2F0aW9uIH0pID0+ICEhbG9jYXRpb24pXG4gICAgICAgIC5mb3JFYWNoKGFzeW5jIChzdWJJdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbUZlYXR1cmUgPSBuZXcgRmVhdHVyZSh7XG4gICAgICAgICAgICAuLi5zdWJJdGVtLml0ZW0sXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgZ2VvbWV0cnk6IHN1Ykl0ZW0ubG9jYXRpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgY2xhc3NpY1N0eWxlOiB0eXBlID09PSAncG9pbnQnID8gdGhpcy5wb2ludFN0eWxlIDogdGhpcy5jaXJjbGVTdHlsZSxcbiAgICAgICAgICAgIHNlbGVjdGVkU3R5bGU6IHR5cGUgPT09ICdwb2ludCcgPyB0aGlzLnNlbGVjdGVkUG9pbnRTdHlsZSA6IHRoaXMuc2VsZWN0ZWRDaXJjbGVTdHlsZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGl0ZW1GZWF0dXJlLnNldFN0eWxlKGl0ZW1GZWF0dXJlLmdldCgnY2xhc3NpY1N0eWxlJykpO1xuICAgICAgICAgIHZlY3RvckxheWVyLmdldFNvdXJjZSgpPy5hZGRGZWF0dXJlKGl0ZW1GZWF0dXJlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5tYWtlQ2x1c3RlcmVkKHZlY3RvckxheWVyLCBsYXllcik7XG4gIH1cblxuICBwcml2YXRlIG1ha2VDbHVzdGVyZWQobGF5ZXI6IEJhc2VMYXllciwgbGF5ZXJPcHRpb25zOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBpZiAoIVsnbWFya2VyJywgJ2J1YmJsZSddLmluY2x1ZGVzKGxheWVyT3B0aW9ucy50eXBlKSB8fCAhKCdjbHVzdGVyZWQnIGluIGxheWVyT3B0aW9ucyAmJiBsYXllck9wdGlvbnMuY2x1c3RlcmVkKSkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICAvLyBDbHVzdGVyaW5nIHNvdXJjZVxuICAgIGNvbnN0IHZlY3RvckxheWVyID0gbGF5ZXIgYXMgVmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPEdlb21ldHJ5Pj47XG4gICAgdmVjdG9yTGF5ZXIuc2V0U291cmNlKFxuICAgICAgbmV3IENsdXN0ZXIoe1xuICAgICAgICBkaXN0YW5jZTogbGF5ZXJPcHRpb25zLmNsdXN0ZXJEaXN0YW5jZSxcbiAgICAgICAgbWluRGlzdGFuY2U6IDEwLFxuICAgICAgICBzb3VyY2U6IHZlY3RvckxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdmVjdG9yTGF5ZXIuc2V0U3R5bGUoKGZlYXR1cmUpID0+IHtcbiAgICAgIGNvbnN0IHNpemUgPSBmZWF0dXJlLmdldCgnZmVhdHVyZXMnKS5sZW5ndGg7XG4gICAgICBpZiAoc2l6ZSA+IDEpIHtcbiAgICAgICAgbGV0IHN0eWxlID0gdGhpcy5zdHlsZUNhY2hlW3NpemVdO1xuICAgICAgICBpZiAoIXN0eWxlKSB7XG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgICAgICAgICAgaW1hZ2U6IG5ldyBDaXJjbGVTdHlsZSh7XG4gICAgICAgICAgICAgIHJhZGl1czogMTAsXG4gICAgICAgICAgICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7XG4gICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJ1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZmlsbDogbmV3IEZpbGwoe1xuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzMzOTlDQydcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGV4dDogbmV3IFRleHQoeyB0ZXh0OiBgJHtzaXplfWAgfSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnN0eWxlQ2FjaGVbc2l6ZV0gPSBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2l6ZSA9PT0gMSA/IGZlYXR1cmUuZ2V0KCdmZWF0dXJlcycpWzBdLmdldCgnY2xhc3NpY1N0eWxlJykgOiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgc3RhdGljIHRyYW5zbGF0ZUZpZWxkVHlwZVRvTGF5ZXJUeXBlKHN1YlR5cGU6IHN0cmluZykge1xuICAgIHN3aXRjaCAoc3ViVHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuUE9JTlQ6XG4gICAgICAgIHJldHVybiAnbWFya2VyJztcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxJTkU6XG4gICAgICAgIHJldHVybiAnbGluZSc7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5QT0xZR09OOlxuICAgICAgICByZXR1cm4gJ3BvbHlnb24nO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuTVVMVElMSU5FOlxuICAgICAgICByZXR1cm4gJ211bHRpLWxpbmUnO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuTVVMVElQT0xZR09OOlxuICAgICAgICByZXR1cm4gJ211bHRpLXBvbHlnb24nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGB3cm9uZyB0eXBlICR7c3ViVHlwZX0gZm9yIGF1dG8gb3B0aW9uc2ApO1xuICAgICAgICByZXR1cm4gJ21hcmtlcic7XG4gICAgfVxuICB9XG59XG4iXX0=
|