bbj-screen-widget 2.4.66 → 2.4.67
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/bbj-screen-widget.d.ts +34 -33
- package/bbj-screen-widget.metadata.json +1 -1
- package/bundles/bbj-screen-widget-core.umd.js +1 -1
- package/bundles/bbj-screen-widget-core.umd.js.map +1 -1
- package/bundles/bbj-screen-widget-core.umd.min.js +1 -1
- package/bundles/bbj-screen-widget-core.umd.min.js.map +1 -1
- package/bundles/bbj-screen-widget.umd.js +730 -353
- package/bundles/bbj-screen-widget.umd.js.map +1 -1
- package/bundles/bbj-screen-widget.umd.min.js +1 -1
- package/bundles/bbj-screen-widget.umd.min.js.map +1 -1
- package/esm2015/bbj-screen-widget.js +35 -34
- package/esm2015/core/service/baidu-map.service.js +2 -2
- package/esm2015/lib/custom-baidu-map/baidu-fence/baidu-fence.component.js +168 -88
- package/esm2015/lib/custom-baidu-map/baidu-lushu/baidu-lushu.component.js +222 -0
- package/esm2015/lib/custom-baidu-map/custom-baidu-map.component.js +2 -1
- package/esm2015/lib/custom-baidu-map/custom-baidu-map.module.js +6 -1
- package/fesm2015/bbj-screen-widget-core.js +1 -1
- package/fesm2015/bbj-screen-widget-core.js.map +1 -1
- package/fesm2015/bbj-screen-widget.js +385 -87
- package/fesm2015/bbj-screen-widget.js.map +1 -1
- package/lib/custom-baidu-map/baidu-fence/baidu-fence.component.d.ts +20 -2
- package/lib/custom-baidu-map/baidu-lushu/baidu-lushu.component.d.ts +31 -0
- package/package.json +1 -1
- package/src/assets/img/screen/car.png +0 -0
- package/src/assets/js/BMapGL/Lushu.js +815 -0
- package/src/assets/js/BMapGL/Lushu.min.js +1 -0
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { __awaiter, __decorate, __metadata, __param } from "tslib";
|
|
2
|
-
import { Component, EventEmitter } from '@angular/core';
|
|
2
|
+
import { Component, ElementRef, EventEmitter, NgZone, ViewChild } from '@angular/core';
|
|
3
3
|
import { BaseLayer } from '../base-layer';
|
|
4
4
|
import { Data, Method, Property, Widget, Event, Param } from 'bbj-widget-base';
|
|
5
5
|
import { Subject } from 'rxjs';
|
|
6
|
+
import { CustomBaiduMapComponent } from '../custom-baidu-map.component';
|
|
7
|
+
import { NzMessageService } from 'ng-zorro-antd/message';
|
|
6
8
|
const EARTH_RADIUS = 6371393;
|
|
7
9
|
const ɵ0 = { type: 'string', title: 'ID' };
|
|
8
10
|
let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(
|
|
11
|
+
constructor(parent, zone, message) {
|
|
12
|
+
super(parent, zone);
|
|
13
|
+
this.parent = parent;
|
|
14
|
+
this.zone = zone;
|
|
15
|
+
this.message = message;
|
|
11
16
|
// @Property('标签字体', { ui: { widget: 'myFont', visibleIf: { showLabel: [true] } } })
|
|
12
17
|
// textFont: any = {
|
|
13
18
|
// family: '',
|
|
@@ -24,11 +29,13 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
|
|
|
24
29
|
this.data = [
|
|
25
30
|
{
|
|
26
31
|
// name: '多边形',
|
|
32
|
+
id: '1',
|
|
27
33
|
type: 'polygon',
|
|
28
34
|
lnglat: '120.7,28;120.8,28;120.8,27.9;120.7,27.9',
|
|
29
35
|
},
|
|
30
36
|
{
|
|
31
37
|
// name: '圆形',
|
|
38
|
+
id: '2',
|
|
32
39
|
type: 'circle',
|
|
33
40
|
lnglat: '120.6,27.9',
|
|
34
41
|
radius: 5000,
|
|
@@ -44,7 +51,8 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
|
|
|
44
51
|
});
|
|
45
52
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
53
|
_super.ngOnInit.call(this);
|
|
47
|
-
|
|
54
|
+
yield this.parent.init$;
|
|
55
|
+
this.initSearch();
|
|
48
56
|
// this.startDraw();
|
|
49
57
|
});
|
|
50
58
|
}
|
|
@@ -74,27 +82,6 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
|
|
|
74
82
|
if (!r.radius || !r.lnglat) {
|
|
75
83
|
return;
|
|
76
84
|
}
|
|
77
|
-
// const radius = (r.radius * 180) / EARTH_RADIUS / Math.PI;
|
|
78
|
-
// // let radius = cradius / 90;
|
|
79
|
-
// let pointNum = 90;
|
|
80
|
-
// let startAngle = 0;
|
|
81
|
-
// let endAngle = Math.PI * 2;
|
|
82
|
-
// let points = [];
|
|
83
|
-
// const lnglat = r.lnglat.split(',');
|
|
84
|
-
// const lng = +lnglat[0];
|
|
85
|
-
// const lat = +lnglat[1];
|
|
86
|
-
// for (var i = 0; i <= pointNum; i++) {
|
|
87
|
-
// const angle = startAngle + ((endAngle - startAngle) * i) / pointNum;
|
|
88
|
-
// const x = lng + (radius * Math.cos(angle)) / Math.abs(Math.cos((lat * Math.PI) / 180));
|
|
89
|
-
// const y = lat + radius * Math.sin(angle);
|
|
90
|
-
// points.push([x, y]);
|
|
91
|
-
// }
|
|
92
|
-
// data.push({
|
|
93
|
-
// geometry: {
|
|
94
|
-
// type: 'Polygon',
|
|
95
|
-
// coordinates: [points],
|
|
96
|
-
// },
|
|
97
|
-
// });
|
|
98
85
|
let pointsCount = 90;
|
|
99
86
|
const radius = r.radius;
|
|
100
87
|
const lnglat = r.lnglat.split(',');
|
|
@@ -128,14 +115,18 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
|
|
|
128
115
|
if (!r.lnglat) {
|
|
129
116
|
return;
|
|
130
117
|
}
|
|
131
|
-
const coordinates = r.lnglat.split(';').map((r) => {
|
|
118
|
+
// const coordinates = r.lnglat.split(';').map((r) => {
|
|
119
|
+
// const lnglat = r.split(',');
|
|
120
|
+
// return [+lnglat[0], +lnglat[1]];
|
|
121
|
+
// });
|
|
122
|
+
const coordinates = r.lnglat.split('\n').map((r) => r.split(';').map((r) => {
|
|
132
123
|
const lnglat = r.split(',');
|
|
133
124
|
return [+lnglat[0], +lnglat[1]];
|
|
134
|
-
});
|
|
125
|
+
}));
|
|
135
126
|
data.push({
|
|
136
127
|
geometry: {
|
|
137
128
|
type: 'Polygon',
|
|
138
|
-
coordinates:
|
|
129
|
+
coordinates: coordinates,
|
|
139
130
|
},
|
|
140
131
|
});
|
|
141
132
|
}
|
|
@@ -157,20 +148,40 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
|
|
|
157
148
|
lnglat: `${lnglat.lng},${lnglat.lat}`,
|
|
158
149
|
radius: radius,
|
|
159
150
|
};
|
|
151
|
+
// this.tempOverlay.forEach((r) => {
|
|
152
|
+
// this.parent.map.removeOverlay(r);
|
|
153
|
+
// });
|
|
160
154
|
this.create.emit(data);
|
|
155
|
+
this.editOverlay = null;
|
|
161
156
|
}
|
|
162
157
|
else {
|
|
163
158
|
const points = e.target.overlay.getPoints();
|
|
164
159
|
if (!this.data) {
|
|
165
160
|
this.data = [];
|
|
166
161
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
162
|
+
let data;
|
|
163
|
+
if (points.length && Array.isArray(points[0])) {
|
|
164
|
+
data = {
|
|
165
|
+
type: 'polygon',
|
|
166
|
+
lnglat: points.map((ps) => ps.map((p) => `${p.latLng.lng},${p.latLng.lat}`).join(';')).join('\n'),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
data = {
|
|
171
|
+
type: 'polygon',
|
|
172
|
+
lnglat: points.map((p) => `${p.latLng.lng},${p.latLng.lat}`).join(';'),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
171
175
|
this.create.emit(data);
|
|
172
176
|
}
|
|
173
177
|
});
|
|
178
|
+
this.scene.addEventListener(OperateEventType.CANCEL, (e) => {
|
|
179
|
+
console.log(e);
|
|
180
|
+
if (this.editOverlay) {
|
|
181
|
+
this.parent.map.removeOverlay(this.editOverlay);
|
|
182
|
+
this.editOverlay = null;
|
|
183
|
+
}
|
|
184
|
+
});
|
|
174
185
|
}
|
|
175
186
|
switch (type) {
|
|
176
187
|
case 'polygon':
|
|
@@ -214,52 +225,15 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
|
|
|
214
225
|
this.circle.open();
|
|
215
226
|
break;
|
|
216
227
|
}
|
|
217
|
-
// this.stopDraw();
|
|
218
|
-
// this.editData = [];
|
|
219
|
-
// this.editLayer = new mapvgl.IconLayer({
|
|
220
|
-
// width: 20 / 2,
|
|
221
|
-
// height: 30.6 / 2,
|
|
222
|
-
// offset: [0, -30.6 / 2 / 2],
|
|
223
|
-
// icon: 'assets/img/screen/marker.png',
|
|
224
|
-
// enablePicked: true, // 是否可以拾取
|
|
225
|
-
// selectedIndex: -1, // 选中项
|
|
226
|
-
// selectedColor: '#ff0000', // 选中项颜色
|
|
227
|
-
// autoSelect: true, // 根据鼠标位置来自动设置选中项
|
|
228
|
-
// onRightClick: (e) => {
|
|
229
|
-
// console.log('right click', e);
|
|
230
|
-
// this.editData.splice(e.dataIndex, 1);
|
|
231
|
-
// this.updateEditData();
|
|
232
|
-
// },
|
|
233
|
-
// });
|
|
234
|
-
// this.parent.addLayer(this.editLayer);
|
|
235
|
-
// this.editLineLayer = new mapvgl.SimpleLineLayer({
|
|
236
|
-
// color: 'rgba(50, 50, 200, 1)',
|
|
237
|
-
// blend: 'lighter',
|
|
238
|
-
// data: [
|
|
239
|
-
// {
|
|
240
|
-
// geometry: {
|
|
241
|
-
// type: 'LineString',
|
|
242
|
-
// coordinates: [
|
|
243
|
-
// [116.394191, 39.91334],
|
|
244
|
-
// [116.417259, 39.913672],
|
|
245
|
-
// ],
|
|
246
|
-
// },
|
|
247
|
-
// },
|
|
248
|
-
// ],
|
|
249
|
-
// });
|
|
250
|
-
// this.parent.addLayer(this.editLineLayer);
|
|
251
|
-
// this.parent.mapClick.pipe(takeUntil(this.stopEdit$)).subscribe((point) => {
|
|
252
|
-
// this.editData.push([point.lng, point.lat]);
|
|
253
|
-
// // this.editData.push({
|
|
254
|
-
// // geometry: {
|
|
255
|
-
// // type: 'Point',
|
|
256
|
-
// // coordinates: [point.lng, point.lat],
|
|
257
|
-
// // },
|
|
258
|
-
// // });
|
|
259
|
-
// this.updateEditData();
|
|
260
|
-
// });
|
|
261
228
|
});
|
|
262
229
|
}
|
|
230
|
+
getOptions() {
|
|
231
|
+
return {
|
|
232
|
+
fillColor: this.fillColor,
|
|
233
|
+
strokeWeight: this.lineWidth,
|
|
234
|
+
strokeColor: this.lineColor,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
263
237
|
updateEditData() {
|
|
264
238
|
if (this.editLayer) {
|
|
265
239
|
this.editLayer.setData(this.editData.map((r) => ({ geometry: { type: 'Point', coordinates: r } })));
|
|
@@ -302,24 +276,120 @@ let BaiduFenceComponent = class BaiduFenceComponent extends BaseLayer {
|
|
|
302
276
|
// this.editData = null;
|
|
303
277
|
}
|
|
304
278
|
search() {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
279
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
280
|
+
// 如果正在绘制多边形围栏,获取地名边界并绘制
|
|
281
|
+
const { PolygonEdit } = yield import('bmap-draw');
|
|
282
|
+
if (this.areaName) {
|
|
283
|
+
const boundary = new BMapGL.Boundary();
|
|
284
|
+
// 百度地图 Geocoder.getLocation 回调签名:(results, status)
|
|
285
|
+
boundary.get(this.areaName, (results) => {
|
|
286
|
+
console.log('边界坐标数组:', results);
|
|
287
|
+
// 检查状态是否成功
|
|
288
|
+
if (results && results.boundaries && results.boundaries.length) {
|
|
289
|
+
this.stopDraw();
|
|
290
|
+
if (!this.polygonEdit) {
|
|
291
|
+
this.polygonEdit = new PolygonEdit(this.scene);
|
|
292
|
+
}
|
|
293
|
+
const points = results.boundaries.map((boundary) => boundary.split(';').map((p) => {
|
|
294
|
+
const [lng, lat] = p.split(',');
|
|
295
|
+
return new BMapGL.Point(Number(lng), Number(lat));
|
|
296
|
+
}));
|
|
297
|
+
const overlay = new BMapGL.Polygon(points, this.getOptions());
|
|
298
|
+
console.log(overlay);
|
|
299
|
+
this.editOverlay = overlay;
|
|
300
|
+
this.parent.map.addOverlay(overlay);
|
|
301
|
+
this.parent.map.setViewport([].concat.apply([], points));
|
|
302
|
+
this.polygonEdit.edit(overlay);
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
this.message.error('行政区域不存在');
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
initSearch() {
|
|
312
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
313
|
+
const { PolygonEdit, CircleEdit } = yield import('bmap-draw');
|
|
314
|
+
const ac = new BMapGL.Autocomplete({
|
|
315
|
+
input: this.suggest.nativeElement,
|
|
316
|
+
location: this.parent.map,
|
|
317
|
+
});
|
|
318
|
+
ac.addEventListener('onconfirm', (e) => {
|
|
319
|
+
// 鼠标点击下拉列表后的事件
|
|
320
|
+
const value = e.item.value;
|
|
321
|
+
console.log(e);
|
|
322
|
+
// 如果正在绘制圆形围栏
|
|
323
|
+
if (this.circle) {
|
|
324
|
+
if (!this.circleEdit) {
|
|
325
|
+
this.circleEdit = new CircleEdit(this.scene);
|
|
326
|
+
}
|
|
327
|
+
const center = new BMapGL.Point(value.location.lng, value.location.lat);
|
|
328
|
+
this.parent.map.centerAndZoom(center, 16);
|
|
329
|
+
const overlay = new BMapGL.Circle(center, 300, this.getOptions());
|
|
330
|
+
this.editOverlay = overlay;
|
|
331
|
+
this.parent.map.addOverlay(overlay);
|
|
332
|
+
this.circleEdit.open(overlay);
|
|
333
|
+
this.searchText = null;
|
|
334
|
+
}
|
|
335
|
+
});
|
|
312
336
|
});
|
|
313
|
-
|
|
337
|
+
}
|
|
338
|
+
moveToView(id) {
|
|
339
|
+
if (!this.data || !id) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
const data = this.data.find((r) => r.id === id);
|
|
343
|
+
if (!data) {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
if (data.type === 'circle') {
|
|
347
|
+
const [lng, lat] = data.lnglat.split(',');
|
|
348
|
+
const centerLng = Number(lng);
|
|
349
|
+
const centerLat = Number(lat);
|
|
350
|
+
const radius = Number(data.radius);
|
|
351
|
+
// 转换中心点纬度为弧度
|
|
352
|
+
const centerLatRad = (centerLat * Math.PI) / 180;
|
|
353
|
+
// 计算经度方向的偏移(弧度)
|
|
354
|
+
const deltaLngRad = radius / (EARTH_RADIUS * Math.cos(centerLatRad));
|
|
355
|
+
// 计算纬度方向的偏移(弧度)
|
|
356
|
+
const deltaLatRad = radius / EARTH_RADIUS;
|
|
357
|
+
// 转换为角度偏移
|
|
358
|
+
const deltaLng = (deltaLngRad * 180) / Math.PI;
|
|
359
|
+
const deltaLat = (deltaLatRad * 180) / Math.PI;
|
|
360
|
+
// 计算圆形的四个边界点(上、下、左、右)
|
|
361
|
+
const points = [
|
|
362
|
+
new BMapGL.Point(centerLng, centerLat + deltaLat),
|
|
363
|
+
new BMapGL.Point(centerLng, centerLat - deltaLat),
|
|
364
|
+
new BMapGL.Point(centerLng - deltaLng, centerLat),
|
|
365
|
+
new BMapGL.Point(centerLng + deltaLng, centerLat),
|
|
366
|
+
];
|
|
367
|
+
// 使用 setViewport 方法调整视图,使整个圆形可见
|
|
368
|
+
this.parent.map.setViewport(points);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
this.parent.map.setViewport(data.lnglat.split(/[;\n\r]+/).map((p) => {
|
|
372
|
+
const [lng, lat] = p.split(',');
|
|
373
|
+
return new BMapGL.Point(Number(lng), Number(lat));
|
|
374
|
+
}));
|
|
375
|
+
}
|
|
314
376
|
}
|
|
315
377
|
};
|
|
316
378
|
BaiduFenceComponent.decorators = [
|
|
317
379
|
{ type: Component, args: [{
|
|
318
380
|
selector: 'sc-baidu-fence',
|
|
319
|
-
template: "<ng-container *ngIf=\"showDrawButton\">\n <button nz-button (click)=\"startDraw('polygon')\">\u7ED8\u5236\u591A\u8FB9\u5F62</button>\n <button nz-button (click)=\"startDraw('circle')\">\u7ED8\u5236\u5706\u5F62</button>\n <button nz-button (click)=\"stopDraw()\">\u7ED3\u675F\u7ED8\u5236</button>\n</ng-container>\n\n<!-- <input type=\"text\" placeholder=\"\u8BF7\u8F93\u5165\u5730\u70B9\" [(ngModel)]=\"searchText\" />\n<button nz-button (click)=\"search()\">\u67E5\u8BE2</button> -->\n",
|
|
320
|
-
styles: [":host{position:absolute;display:block;left:0;top:0;z-index:100;padding:12px;pointer-events:auto}button{transition:none}"]
|
|
381
|
+
template: "<ng-container *ngIf=\"showDrawButton\">\n <button nz-button (click)=\"startDraw('polygon')\">\u7ED8\u5236\u591A\u8FB9\u5F62</button>\n <button nz-button (click)=\"startDraw('circle')\">\u7ED8\u5236\u5706\u5F62</button>\n <button nz-button (click)=\"stopDraw()\">\u7ED3\u675F\u7ED8\u5236</button>\n <button nz-button (click)=\"moveToView('1')\">\u79FB\u52A8\u5230\u4E2D\u5FC31</button>\n <button nz-button (click)=\"moveToView('2')\">\u79FB\u52A8\u5230\u4E2D\u5FC32</button>\n</ng-container>\n<input\n nz-input\n [ngClass]=\"{ hidden: !circle?.isOpen }\"\n #suggest\n type=\"text\"\n [(ngModel)]=\"searchText\"\n placeholder=\"\u8BF7\u8F93\u5165\u4E2D\u5FC3\u70B9\u4F4D\u7F6E\"\n class=\"input\"\n/>\n<ng-container *ngIf=\"polygon?.isOpen\">\n <input nz-input type=\"text\" placeholder=\"\u8BF7\u8F93\u5165\u884C\u653F\u533A\u540D\u79F0\" [(ngModel)]=\"areaName\" class=\"input\" />\n <button nz-button (click)=\"search()\" style=\"margin-left: 12px\">\u786E\u8BA4</button>\n</ng-container>\n<!-- <input type=\"text\" placeholder=\"\u8BF7\u8F93\u5165\u5730\u70B9\" [(ngModel)]=\"searchText\" />\n<button nz-button (click)=\"search()\">\u67E5\u8BE2</button> -->\n",
|
|
382
|
+
styles: [":host{position:absolute;display:block;left:0;top:0;z-index:100;padding:12px;pointer-events:auto}button{transition:none}.hidden{display:none}.input{width:300px;margin-left:12px}"]
|
|
321
383
|
},] }
|
|
322
384
|
];
|
|
385
|
+
BaiduFenceComponent.ctorParameters = () => [
|
|
386
|
+
{ type: CustomBaiduMapComponent },
|
|
387
|
+
{ type: NgZone },
|
|
388
|
+
{ type: NzMessageService }
|
|
389
|
+
];
|
|
390
|
+
BaiduFenceComponent.propDecorators = {
|
|
391
|
+
suggest: [{ type: ViewChild, args: ['suggest',] }]
|
|
392
|
+
};
|
|
323
393
|
__decorate([
|
|
324
394
|
Property('线条宽度', {
|
|
325
395
|
ui: { widget: 'myRange', min: 1, max: 40, step: 1 },
|
|
@@ -391,14 +461,24 @@ __decorate([
|
|
|
391
461
|
__metadata("design:paramtypes", []),
|
|
392
462
|
__metadata("design:returntype", void 0)
|
|
393
463
|
], BaiduFenceComponent.prototype, "stopDraw", null);
|
|
464
|
+
__decorate([
|
|
465
|
+
Method('移动到中心'),
|
|
466
|
+
__param(0, Param('id')),
|
|
467
|
+
__metadata("design:type", Function),
|
|
468
|
+
__metadata("design:paramtypes", [String]),
|
|
469
|
+
__metadata("design:returntype", void 0)
|
|
470
|
+
], BaiduFenceComponent.prototype, "moveToView", null);
|
|
394
471
|
BaiduFenceComponent = __decorate([
|
|
395
472
|
Widget('电子围栏', {
|
|
396
473
|
group: 'component',
|
|
397
474
|
image: '',
|
|
398
475
|
icon: '',
|
|
399
476
|
hidden: true,
|
|
400
|
-
})
|
|
477
|
+
}),
|
|
478
|
+
__metadata("design:paramtypes", [CustomBaiduMapComponent,
|
|
479
|
+
NgZone,
|
|
480
|
+
NzMessageService])
|
|
401
481
|
], BaiduFenceComponent);
|
|
402
482
|
export { BaiduFenceComponent };
|
|
403
483
|
export { ɵ0 };
|
|
404
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFpZHUtZmVuY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2NyZWVuLXdpZGdldC9zcmMvbGliL2N1c3RvbS1iYWlkdS1tYXAvYmFpZHUtZmVuY2UvYmFpZHUtZmVuY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSy9CLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQztXQTRDbkIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7SUFoQzVCLG1CQUFtQixTQUFuQixtQkFBb0IsU0FBUSxTQUFTOzs7UUFDaEQsb0ZBQW9GO1FBQ3BGLG9CQUFvQjtRQUNwQixnQkFBZ0I7UUFDaEIsc0JBQXNCO1FBQ3RCLHNCQUFzQjtRQUN0QixjQUFjO1FBQ2QsY0FBYztRQUNkLG1CQUFtQjtRQUNuQixLQUFLO1FBSUwsY0FBUyxHQUFHLENBQUMsQ0FBQztRQU9kLGNBQVMsR0FBRyxtQkFBbUIsQ0FBQztRQU9oQyxjQUFTLEdBQUcseUJBQXlCLENBQUM7UUFFdEMsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFVdEIsU0FBSSxHQUFVO1lBQ1o7Z0JBQ0UsZUFBZTtnQkFDZixJQUFJLEVBQUUsU0FBUztnQkFDZixNQUFNLEVBQUUseUNBQXlDO2FBQ2xEO1lBQ0Q7Z0JBQ0UsY0FBYztnQkFDZCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxNQUFNLEVB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LElBQUk7S0FDYixDQUFDO0dBQ1csbUJBQW1CLENBeVcvQjtTQXpXWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VMYXllciB9IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHsgRGF0YSwgTWV0aG9kLCBQcm9wZXJ0eSwgV2lkZ2V0LCBFdmVudCwgUGFyYW0gfSBmcm9tICdiYmotd2lkZ2V0LWJhc2UnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRHJhd1NjZW5lLCBSZWN0RHJhdyB9IGZyb20gJ2JtYXAtZHJhdyc7XG5kZWNsYXJlIGNvbnN0IG1hcHZnbDtcbmRlY2xhcmUgY29uc3QgQk1hcEdMO1xuY29uc3QgRUFSVEhfUkFESVVTID0gNjM3MTM5MztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NjLWJhaWR1LWZlbmNlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JhaWR1LWZlbmNlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmFpZHUtZmVuY2UuY29tcG9uZW50Lmxlc3MnXSxcbn0pXG5AV2lkZ2V0KCfnlLXlrZDlm7TmoI8nLCB7XG4gIGdyb3VwOiAnY29tcG9uZW50JyxcbiAgaW1hZ2U6ICcnLFxuICBpY29uOiAnJyxcbiAgaGlkZGVuOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBCYWlkdUZlbmNlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUxheWVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyBAUHJvcGVydHkoJ+agh+etvuWtl+S9kycsIHsgdWk6IHsgd2lkZ2V0OiAnbXlGb250JywgdmlzaWJsZUlmOiB7IHNob3dMYWJlbDogW3RydWVdIH0gfSB9KVxuICAvLyB0ZXh0Rm9udDogYW55ID0ge1xuICAvLyAgIGZhbWlseTogJycsXG4gIC8vICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgLy8gICB3ZWlnaHQ6ICdub3JtYWwnLFxuICAvLyAgIHNpemU6IDE2LFxuICAvLyAgIHNwYWNlOiAwLFxuICAvLyAgIGxpbmVIZWlnaHQ6IDAsXG4gIC8vIH07XG4gIEBQcm9wZXJ0eSgn57q/5p2h5a695bqmJywge1xuICAgIHVpOiB7IHdpZGdldDogJ215UmFuZ2UnLCBtaW46IDEsIG1heDogNDAsIHN0ZXA6IDEgfSxcbiAgfSlcbiAgbGluZVdpZHRoID0gMjtcbiAgQFByb3BlcnR5KCfnur/mnaHpopzoibInLCB7XG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgdWk6IHtcbiAgICAgIHdpZGdldDogJ215Q29sb3InLFxuICAgIH0sXG4gIH0pXG4gIGxpbmVDb2xvciA9ICdyZ2IoNTAsIDEzMywgMjU1KSc7XG4gIEBQcm9wZXJ0eSgn5aGr5YWF6aKc6ImyJywge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIHVpOiB7XG4gICAgICB3aWRnZXQ6ICdteUNvbG9yJyxcbiAgICB9LFxuICB9KVxuICBmaWxsQ29sb3IgPSAncmdiYSgyNDgsIDIzMSwgMjgsIDAuMiknO1xuICBAUHJvcGVydHkoJ+aYvuekuue7mOWItuaMiemSricsIHsgdHlwZTogJ2Jvb2xlYW4nIH0pXG4gIHNob3dEcmF3QnV0dG9uID0gdHJ1ZTtcbiAgQERhdGEoe1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGlkOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ0lEJyB9LFxuICAgICAgLy8gbmFtZTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICflm7TmoI/lkI3np7AnIH0sXG4gICAgICB0eXBlOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+WbtOagj+exu+WeiycgfSxcbiAgICAgIGxuZ2xhdDogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICfnu4/nuqzluqYnIH0sXG4gICAgICByYWRpdXM6IHsgdHlwZTogJ251bWJlcicsIHRpdGxlOiAn5Y2K5b6EJyB9LFxuICAgIH0sXG4gIH0pXG4gIGRhdGE6IGFueVtdID0gW1xuICAgIHtcbiAgICAgIC8vIG5hbWU6ICflpJrovrnlvaInLFxuICAgICAgdHlwZTogJ3BvbHlnb24nLFxuICAgICAgbG5nbGF0OiAnMTIwLjcsMjg7MTIwLjgsMjg7MTIwLjgsMjcuOTsxMjAuNywyNy45JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIG5hbWU6ICflnIblvaInLFxuICAgICAgdHlwZTogJ2NpcmNsZScsXG4gICAgICBsbmdsYXQ6ICcxMjAuNiwyNy45JyxcbiAgICAgIHJhZGl1czogNTAwMCxcbiAgICB9LFxuICBdO1xuICBARXZlbnQoJ+aWsOWinuWbtOagjycsIHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdHlwZTogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICflm7TmoI/nsbvlnosnIH0sXG4gICAgICAgIGxuZ2xhdDogeyB0eXBlOiAnc3RyaW5nJywgdGl0bGU6ICfnu4/nuqzluqYnIH0sXG4gICAgICAgIHJhZGl1czogeyB0eXBlOiAnbnVtYmVyJywgdGl0bGU6ICfljYrlvoQnIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pXG4gIGNyZWF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBsYXllcjogYW55O1xuICB0ZXh0TGF5ZXI6IGFueTtcbiAgZWRpdExheWVyOiBhbnk7XG4gIGVkaXREYXRhID0gW107XG4gIHN0b3BFZGl0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGVkaXRMaW5lTGF5ZXI6IGFueTtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBwb2x5Z29uOiBhbnk7XG4gIGNpcmNsZTogYW55O1xuICBzY2VuZTogYW55O1xuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIC8vIGF3YWl0IHRoaXMucGFyZW50LmluaXQkO1xuICAgIC8vIHRoaXMuc3RhcnREcmF3KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuc3RvcERyYXcoKTtcbiAgICB0aGlzLnNjZW5lPy5jbGVhckRhdGEoKTtcbiAgfVxuXG4gIGNyZWF0ZUxheWVycygpOiBhbnlbXSB7XG4gICAgdGhpcy5sYXllciA9IG5ldyBtYXB2Z2wuUG9seWdvbkxheWVyKHtcbiAgICAgIHJlbmRlck9yZGVyOiAtMSxcbiAgICAgIGxpbmVDb2xvcjogdGhpcy5saW5lQ29sb3IsXG4gICAgICBsaW5lV2lkdGg6IHRoaXMubGluZVdpZHRoLFxuICAgICAgZmlsbENvbG9yOiB0aGlzLmZpbGxDb2xvcixcbiAgICB9KTtcbiAgICAvLyB0aGlzLnRleHRMYXllciA9IG5ldyBtYXB2Z2wuVGV4dExheWVyKHtcbiAgICAvLyAgIHJlbmRlck9yZGVyOiAtMSxcbiAgICAvLyAgIC4uLnRoaXMuZ2V0VGV4dE9wdGlvbnModGhpcy50ZXh0Rm9udCksXG4gICAgLy8gfSk7XG4gICAgcmV0dXJuIFt0aGlzLmxheWVyXTtcbiAgfVxuICB1cGRhdGVEYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICB0aGlzLmRhdGEuZm9yRWFjaCgocikgPT4ge1xuICAgICAgaWYgKHIudHlwZSA9PT0gJ2NpcmNsZScpIHtcbiAgICAgICAgaWYgKCFyLnJhZGl1cyB8fCAhci5sbmdsYXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgcmFkaXVzID0gKHIucmFkaXVzICogMTgwKSAvIEVBUlRIX1JBRElVUyAvIE1hdGguUEk7XG4gICAgICAgIC8vIC8vIGxldCByYWRpdXMgPSBjcmFkaXVzIC8gOTA7XG4gICAgICAgIC8vIGxldCBwb2ludE51bSA9IDkwO1xuICAgICAgICAvLyBsZXQgc3RhcnRBbmdsZSA9IDA7XG4gICAgICAgIC8vIGxldCBlbmRBbmdsZSA9IE1hdGguUEkgKiAyO1xuICAgICAgICAvLyBsZXQgcG9pbnRzID0gW107XG4gICAgICAgIC8vIGNvbnN0IGxuZ2xhdCA9IHIubG5nbGF0LnNwbGl0KCcsJyk7XG4gICAgICAgIC8vIGNvbnN0IGxuZyA9ICtsbmdsYXRbMF07XG4gICAgICAgIC8vIGNvbnN0IGxhdCA9ICtsbmdsYXRbMV07XG4gICAgICAgIC8vIGZvciAodmFyIGkgPSAwOyBpIDw9IHBvaW50TnVtOyBpKyspIHtcbiAgICAgICAgLy8gICBjb25zdCBhbmdsZSA9IHN0YXJ0QW5nbGUgKyAoKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSkgKiBpKSAvIHBvaW50TnVtO1xuICAgICAgICAvLyAgIGNvbnN0IHggPSBsbmcgKyAocmFkaXVzICogTWF0aC5jb3MoYW5nbGUpKSAvIE1hdGguYWJzKE1hdGguY29zKChsYXQgKiBNYXRoLlBJKSAvIDE4MCkpO1xuICAgICAgICAvLyAgIGNvbnN0IHkgPSBsYXQgKyByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgIC8vICAgcG9pbnRzLnB1c2goW3gsIHldKTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBkYXRhLnB1c2goe1xuICAgICAgICAvLyAgIGdlb21ldHJ5OiB7XG4gICAgICAgIC8vICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICAgIC8vICAgICBjb29yZGluYXRlczogW3BvaW50c10sXG4gICAgICAgIC8vICAgfSxcbiAgICAgICAgLy8gfSk7XG4gICAgICAgIGxldCBwb2ludHNDb3VudCA9IDkwO1xuICAgICAgICBjb25zdCByYWRpdXMgPSByLnJhZGl1cztcbiAgICAgICAgY29uc3QgbG5nbGF0ID0gci5sbmdsYXQuc3BsaXQoJywnKTtcbiAgICAgICAgY29uc3QgY2VudGVyTG5nID0gK2xuZ2xhdFswXTtcbiAgICAgICAgY29uc3QgY2VudGVyTGF0ID0gK2xuZ2xhdFsxXTtcbiAgICAgICAgLy8g6L2s5o2i5Lit5b+D54K557qs5bqm5Li65byn5bqmXG4gICAgICAgIGNvbnN0IGNlbnRlckxhdFJhZCA9IChjZW50ZXJMYXQgKiBNYXRoLlBJKSAvIDE4MDtcbiAgICAgICAgLy8g5a2Y5YKo6L2o6L+554K555qE5pWw57uEXG4gICAgICAgIGNvbnN0IHRyYWplY3RvcnkgPSBbXTtcblxuICAgICAgICAvLyDpgY3ljoYgMH4zNjDCsO+8jOeUn+aIkOetiemXtOmalOeahOeCuVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAvLyDorqHnrpflvZPliY3ngrnnmoTmlrnkvY3op5LvvIjlvKfluqbvvInvvJrku44wwrDliLAzNjDCsO+8jOWdh+WIhnBvaW50c0NvdW505Lu9XG4gICAgICAgICAgY29uc3QgYW5nbGVSYWQgPSAoKChpICogMzYwKSAvIHBvaW50c0NvdW50KSAqIE1hdGguUEkpIC8gMTgwO1xuXG4gICAgICAgICAgLy8g6K6h566X5b2T5YmN54K555u45a+55LqO5Lit5b+D54K555qE57uP57qs5bqm5aKe6YeP77yI5byn5bqm77yJXG4gICAgICAgICAgY29uc3QgZGVsdGFMYXRSYWQgPSAocmFkaXVzICogTWF0aC5jb3MoYW5nbGVSYWQpKSAvIEVBUlRIX1JBRElVUztcbiAgICAgICAgICBjb25zdCBkZWx0YUxuZ1JhZCA9IChyYWRpdXMgKiBNYXRoLnNpbihhbmdsZVJhZCkpIC8gKEVBUlRIX1JBRElVUyAqIE1hdGguY29zKGNlbnRlckxhdFJhZCkpO1xuXG4gICAgICAgICAgLy8g6L2s5o2i5Li66KeS5bqm77yM5bm26K6h566X5paw5Z2Q5qCHXG4gICAgICAgICAgY29uc3QgbmV3TGF0ID0gY2VudGVyTGF0ICsgKGRlbHRhTGF0UmFkICogMTgwKSAvIE1hdGguUEk7XG4gICAgICAgICAgY29uc3QgbmV3TG5nID0gY2VudGVyTG5nICsgKGRlbHRhTG5nUmFkICogMTgwKSAvIE1hdGguUEk7XG5cbiAgICAgICAgICAvLyDmt7vliqDliLDovajov7nmlbDnu4TvvIjkv53nlZk25L2N5bCP5pWw77yM57uP57qs5bqm5bi46KeE57K+5bqm77yJXG4gICAgICAgICAgdHJhamVjdG9yeS5wdXNoKFtwYXJzZUZsb2F0KG5ld0xuZy50b0ZpeGVkKDYpKSwgcGFyc2VGbG9hdChuZXdMYXQudG9GaXhlZCg2KSldKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICAgICAgICBjb29yZGluYXRlczogW3RyYWplY3RvcnldLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFyLmxuZ2xhdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IHIubG5nbGF0LnNwbGl0KCc7JykubWFwKChyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG5nbGF0ID0gci5zcGxpdCgnLCcpO1xuICAgICAgICAgIHJldHVybiBbK2xuZ2xhdFswXSwgK2xuZ2xhdFsxXV07XG4gICAgICAgIH0pO1xuICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICAgICAgICBjb29yZGluYXRlczogW2Nvb3JkaW5hdGVzXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubGF5ZXIuc2V0RGF0YShkYXRhKTtcbiAgfVxuXG4gIEBNZXRob2QoJ+W8gOWni+e7mOWIticpXG4gIGFzeW5jIHN0YXJ0RHJhdyhcbiAgICBAUGFyYW0oJ+exu+WeiycsIHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgZW51bTogW1xuICAgICAgICB7IGxhYmVsOiAn5aSa6L655b2iJywgdmFsdWU6ICdwb2x5Z29uJyB9LFxuICAgICAgICB7IGxhYmVsOiAn5ZyG5b2iJywgdmFsdWU6ICdjaXJjbGUnIH0sXG4gICAgICBdLFxuICAgIH0pXG4gICAgdHlwZTogc3RyaW5nLFxuICApIHtcbiAgICBjb25zdCB7IERyYXdTY2VuZSwgUG9seWdvbkRyYXcsIENpcmNsZURyYXcsIE9wZXJhdGVFdmVudFR5cGUgfSA9IGF3YWl0IGltcG9ydCgnYm1hcC1kcmF3Jyk7XG4gICAgaWYgKCF0aGlzLnNjZW5lKSB7XG4gICAgICB0aGlzLnNjZW5lID0gbmV3IERyYXdTY2VuZSh0aGlzLnBhcmVudC5tYXAsIHsgbm9MaW1pdDogdHJ1ZSB9KTtcblxuICAgICAgdGhpcy5zY2VuZS5hZGRFdmVudExpc3RlbmVyKE9wZXJhdGVFdmVudFR5cGUuQ09NUExFVEUsIChlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICBpZiAoZS50YXJnZXQub3ZlcmxheS5yYWRpdXMpIHtcbiAgICAgICAgICBjb25zdCByYWRpdXMgPSBlLnRhcmdldC5vdmVybGF5LnJhZGl1cztcbiAgICAgICAgICBjb25zdCBsbmdsYXQgPSBlLnRhcmdldC5vdmVybGF5LmxhdExuZztcbiAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgdHlwZTogJ2NpcmNsZScsXG4gICAgICAgICAgICBsbmdsYXQ6IGAke2xuZ2xhdC5sbmd9LCR7bG5nbGF0LmxhdH1gLFxuICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZS5lbWl0KGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBvaW50cyA9IGUudGFyZ2V0Lm92ZXJsYXkuZ2V0UG9pbnRzKCk7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgdHlwZTogJ3BvbHlnb24nLFxuICAgICAgICAgICAgbG5nbGF0OiBwb2ludHMubWFwKChwKSA9PiBgJHtwLmxhdExuZy5sbmd9LCR7cC5sYXRMbmcubGF0fWApLmpvaW4oJzsnKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY3JlYXRlLmVtaXQoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgICAgICBpZiAoIXRoaXMucG9seWdvbikge1xuICAgICAgICAgIHRoaXMucG9seWdvbiA9IG5ldyBQb2x5Z29uRHJhdyh0aGlzLnNjZW5lLCB7XG4gICAgICAgICAgICBhdXRvVmlld3BvcnQ6IHRydWUsIC8vIOaYr+WQpuiHquWKqOiwg+aVtOinhumHjlxuICAgICAgICAgICAgaGlkZVRpcDogZmFsc2UsIC8vIOmakOiXj+e7mOWItuaPkOekulxuICAgICAgICAgICAgaXNTZXJpZXM6IHRydWUsIC8vIOaYr+WQpuW8gOWQr+aJuemHj+e7mOWItlxuICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgYmFzZU9wdHM6IHtcbiAgICAgICAgICAgICAgZmlsbENvbG9yOiB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgICAgICAgc3Ryb2tlV2VpZ2h0OiB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgICAgICAgc3Ryb2tlQ29sb3I6IHRoaXMubGluZUNvbG9yLFxuICAgICAgICAgICAgICAvLyBzdHJva2VPcGFjaXR5OiAxLFxuICAgICAgICAgICAgICAvLyBmaWxsT3BhY2l0eTogMC4yLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvbHlnb24ub3BlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NpcmNsZSc6XG4gICAgICAgIGlmICghdGhpcy5jaXJjbGUpIHtcbiAgICAgICAgICB0aGlzLmNpcmNsZSA9IG5ldyBDaXJjbGVEcmF3KHRoaXMuc2NlbmUsIHtcbiAgICAgICAgICAgIGF1dG9WaWV3cG9ydDogdHJ1ZSwgLy8g5piv5ZCm6Ieq5Yqo6LCD5pW06KeG6YeOXG4gICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgICBpc1NlcmllczogdHJ1ZSwgLy8g5piv5ZCm5byA5ZCv5om56YeP57uY5Yi2XG4gICAgICAgICAgICAvLyBsYWJlbE9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8vICAgYm9yZGVyUmFkaXVzOiAnMnB4JyxcbiAgICAgICAgICAgIC8vICAgYmFja2dyb3VuZDogJyNiNWQzZmInLFxuICAgICAgICAgICAgLy8gICBib3JkZXI6ICcxcHggc29saWQgI2I1ZDNmYicsXG4gICAgICAgICAgICAvLyAgIGNvbG9yOiAnIzMzMycsXG4gICAgICAgICAgICAvLyAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgICAgICAgICAvLyAgIGxldHRlclNwYWNpbmc6ICcwJyxcbiAgICAgICAgICAgIC8vICAgcGFkZGluZzogJzVweCcsXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgYmFzZU9wdHM6IHtcbiAgICAgICAgICAgICAgZmlsbENvbG9yOiB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgICAgICAgc3Ryb2tlV2VpZ2h0OiB0aGlzLmxpbmVXaWR0aCxcbiAgICAgICAgICAgICAgc3Ryb2tlQ29sb3I6IHRoaXMubGluZUNvbG9yLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNpcmNsZS5vcGVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIHRoaXMuc3RvcERyYXcoKTtcbiAgICAvLyB0aGlzLmVkaXREYXRhID0gW107XG4gICAgLy8gdGhpcy5lZGl0TGF5ZXIgPSBuZXcgbWFwdmdsLkljb25MYXllcih7XG4gICAgLy8gICB3aWR0aDogMjAgLyAyLFxuICAgIC8vICAgaGVpZ2h0OiAzMC42IC8gMixcbiAgICAvLyAgIG9mZnNldDogWzAsIC0zMC42IC8gMiAvIDJdLFxuICAgIC8vICAgaWNvbjogJ2Fzc2V0cy9pbWcvc2NyZWVuL21hcmtlci5wbmcnLFxuICAgIC8vICAgZW5hYmxlUGlja2VkOiB0cnVlLCAvLyDmmK/lkKblj6/ku6Xmi77lj5ZcbiAgICAvLyAgIHNlbGVjdGVkSW5kZXg6IC0xLCAvLyDpgInkuK3poblcbiAgICAvLyAgIHNlbGVjdGVkQ29sb3I6ICcjZmYwMDAwJywgLy8g6YCJ5Lit6aG56aKc6ImyXG4gICAgLy8gICBhdXRvU2VsZWN0OiB0cnVlLCAvLyDmoLnmja7pvKDmoIfkvY3nva7mnaXoh6rliqjorr7nva7pgInkuK3poblcbiAgICAvLyAgIG9uUmlnaHRDbGljazogKGUpID0+IHtcbiAgICAvLyAgICAgY29uc29sZS5sb2coJ3JpZ2h0IGNsaWNrJywgZSk7XG4gICAgLy8gICAgIHRoaXMuZWRpdERhdGEuc3BsaWNlKGUuZGF0YUluZGV4LCAxKTtcbiAgICAvLyAgICAgdGhpcy51cGRhdGVFZGl0RGF0YSgpO1xuICAgIC8vICAgfSxcbiAgICAvLyB9KTtcbiAgICAvLyB0aGlzLnBhcmVudC5hZGRMYXllcih0aGlzLmVkaXRMYXllcik7XG4gICAgLy8gdGhpcy5lZGl0TGluZUxheWVyID0gbmV3IG1hcHZnbC5TaW1wbGVMaW5lTGF5ZXIoe1xuICAgIC8vICAgY29sb3I6ICdyZ2JhKDUwLCA1MCwgMjAwLCAxKScsXG4gICAgLy8gICBibGVuZDogJ2xpZ2h0ZXInLFxuICAgIC8vICAgZGF0YTogW1xuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgZ2VvbWV0cnk6IHtcbiAgICAvLyAgICAgICAgIHR5cGU6ICdMaW5lU3RyaW5nJyxcbiAgICAvLyAgICAgICAgIGNvb3JkaW5hdGVzOiBbXG4gICAgLy8gICAgICAgICAgIFsxMTYuMzk0MTkxLCAzOS45MTMzNF0sXG4gICAgLy8gICAgICAgICAgIFsxMTYuNDE3MjU5LCAzOS45MTM2NzJdLFxuICAgIC8vICAgICAgICAgXSxcbiAgICAvLyAgICAgICB9LFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgXSxcbiAgICAvLyB9KTtcbiAgICAvLyB0aGlzLnBhcmVudC5hZGRMYXllcih0aGlzLmVkaXRMaW5lTGF5ZXIpO1xuICAgIC8vIHRoaXMucGFyZW50Lm1hcENsaWNrLnBpcGUodGFrZVVudGlsKHRoaXMuc3RvcEVkaXQkKSkuc3Vic2NyaWJlKChwb2ludCkgPT4ge1xuICAgIC8vICAgdGhpcy5lZGl0RGF0YS5wdXNoKFtwb2ludC5sbmcsIHBvaW50LmxhdF0pO1xuICAgIC8vICAgLy8gdGhpcy5lZGl0RGF0YS5wdXNoKHtcbiAgICAvLyAgIC8vICAgZ2VvbWV0cnk6IHtcbiAgICAvLyAgIC8vICAgICB0eXBlOiAnUG9pbnQnLFxuICAgIC8vICAgLy8gICAgIGNvb3JkaW5hdGVzOiBbcG9pbnQubG5nLCBwb2ludC5sYXRdLFxuICAgIC8vICAgLy8gICB9LFxuICAgIC8vICAgLy8gfSk7XG4gICAgLy8gICB0aGlzLnVwZGF0ZUVkaXREYXRhKCk7XG4gICAgLy8gfSk7XG4gIH1cblxuICB1cGRhdGVFZGl0RGF0YSgpIHtcbiAgICBpZiAodGhpcy5lZGl0TGF5ZXIpIHtcbiAgICAgIHRoaXMuZWRpdExheWVyLnNldERhdGEodGhpcy5lZGl0RGF0YS5tYXAoKHIpID0+ICh7IGdlb21ldHJ5OiB7IHR5cGU6ICdQb2ludCcsIGNvb3JkaW5hdGVzOiByIH0gfSkpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZWRpdExpbmVMYXllcikge1xuICAgICAgdGhpcy5lZGl0TGluZUxheWVyLnNldERhdGEoW1xuICAgICAgICB7XG4gICAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6ICdMaW5lU3RyaW5nJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmVkaXREYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBATWV0aG9kKCfnu5PmnZ/nu5jliLYnKVxuICBzdG9wRHJhdygpIHtcbiAgICB0aGlzLnNjZW5lPy5jbG9zZSgpO1xuICAgIC8vIHRoaXMuc3RvcEVkaXQkLm5leHQoKTtcbiAgICAvLyBpZiAodGhpcy5lZGl0TGF5ZXIpIHtcbiAgICAvLyAgIHRoaXMucGFyZW50LnJlbW92ZUxheWVyKHRoaXMuZWRpdExheWVyKTtcbiAgICAvLyAgIHRoaXMuZWRpdExheWVyID0gbnVsbDtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHRoaXMuZWRpdExpbmVMYXllcikge1xuICAgIC8vICAgdGhpcy5wYXJlbnQucmVtb3ZlTGF5ZXIodGhpcy5lZGl0TGluZUxheWVyKTtcbiAgICAvLyAgIHRoaXMuZWRpdExpbmVMYXllciA9IG51bGw7XG4gICAgLy8gfVxuICAgIC8vIGlmICh0aGlzLmVkaXREYXRhPy5sZW5ndGggPj0gMykge1xuICAgIC8vICAgaWYgKCF0aGlzLmRhdGEpIHtcbiAgICAvLyAgICAgdGhpcy5kYXRhID0gW107XG4gICAgLy8gICB9XG4gICAgLy8gICBjb25zdCBkYXRhID0ge1xuICAgIC8vICAgICB0eXBlOiAncG9seWdvbicsXG4gICAgLy8gICAgIGxuZ2xhdDogdGhpcy5lZGl0RGF0YS5tYXAoKHIpID0+IHIuam9pbignLCcpKS5qb2luKCc7JyksXG4gICAgLy8gICB9O1xuICAgIC8vICAgdGhpcy5kYXRhLnB1c2goZGF0YSk7XG4gICAgLy8gICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICAvLyAgIHRoaXMuY3JlYXRlLmVtaXQoZGF0YSk7XG4gICAgLy8gfVxuICAgIC8vIHRoaXMuZWRpdERhdGEgPSBudWxsO1xuICB9XG5cbiAgc2VhcmNoKCkge1xuICAgIGlmICghdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgfVxuICAgIHZhciBsb2NhbCA9IG5ldyBCTWFwR0wuTG9jYWxTZWFyY2godGhpcy5wYXJlbnQubWFwLCB7XG4gICAgICAvL+aZuuiDveaQnOe0olxuICAgICAgb25TZWFyY2hDb21wbGV0ZTogKHJlcykgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXMsIGxvY2FsKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgbG9jYWwuc2VhcmNoKHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cbn1cbiJdfQ==
|
|
484
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFpZHUtZmVuY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2NyZWVuLXdpZGdldC9zcmMvbGliL2N1c3RvbS1iYWlkdS1tYXAvYmFpZHUtZmVuY2UvYmFpZHUtZmVuY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3pELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQztXQTRDbkIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7SUFoQzVCLG1CQUFtQixTQUFuQixtQkFBb0IsU0FBUSxTQUFTO0lBaUZoRCxZQUNZLE1BQStCLEVBQy9CLElBQVksRUFDZCxPQUF5QjtRQUVqQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBSlYsV0FBTSxHQUFOLE1BQU0sQ0FBeUI7UUFDL0IsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNkLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBbkZuQyxvRkFBb0Y7UUFDcEYsb0JBQW9CO1FBQ3BCLGdCQUFnQjtRQUNoQixzQkFBc0I7UUFDdEIsc0JBQXNCO1FBQ3RC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WSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgTmdab25lLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlTGF5ZXIgfSBmcm9tICcuLi9iYXNlLWxheWVyJztcbmltcG9ydCB7IERhdGEsIE1ldGhvZCwgUHJvcGVydHksIFdpZGdldCwgRXZlbnQsIFBhcmFtIH0gZnJvbSAnYmJqLXdpZGdldC1iYXNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERyYXdTY2VuZSwgUmVjdERyYXcgfSBmcm9tICdibWFwLWRyYXcnO1xuaW1wb3J0IHsgQ3VzdG9tQmFpZHVNYXBDb21wb25lbnQgfSBmcm9tICcuLi9jdXN0b20tYmFpZHUtbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9tZXNzYWdlJztcbmRlY2xhcmUgY29uc3QgbWFwdmdsO1xuZGVjbGFyZSBjb25zdCBCTWFwR0w7XG5jb25zdCBFQVJUSF9SQURJVVMgPSA2MzcxMzkzO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2MtYmFpZHUtZmVuY2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFpZHUtZmVuY2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9iYWlkdS1mZW5jZS5jb21wb25lbnQubGVzcyddLFxufSlcbkBXaWRnZXQoJ+eUteWtkOWbtOagjycsIHtcbiAgZ3JvdXA6ICdjb21wb25lbnQnLFxuICBpbWFnZTogJycsXG4gIGljb246ICcnLFxuICBoaWRkZW46IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEJhaWR1RmVuY2VDb21wb25lbnQgZXh0ZW5kcyBCYXNlTGF5ZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vIEBQcm9wZXJ0eSgn5qCH562+5a2X5L2TJywgeyB1aTogeyB3aWRnZXQ6ICdteUZvbnQnLCB2aXNpYmxlSWY6IHsgc2hvd0xhYmVsOiBbdHJ1ZV0gfSB9IH0pXG4gIC8vIHRleHRGb250OiBhbnkgPSB7XG4gIC8vICAgZmFtaWx5OiAnJyxcbiAgLy8gICBjb2xvcjogJyMwMDAwMDAnLFxuICAvLyAgIHdlaWdodDogJ25vcm1hbCcsXG4gIC8vICAgc2l6ZTogMTYsXG4gIC8vICAgc3BhY2U6IDAsXG4gIC8vICAgbGluZUhlaWdodDogMCxcbiAgLy8gfTtcbiAgQFByb3BlcnR5KCfnur/mnaHlrr3luqYnLCB7XG4gICAgdWk6IHsgd2lkZ2V0OiAnbXlSYW5nZScsIG1pbjogMSwgbWF4OiA0MCwgc3RlcDogMSB9LFxuICB9KVxuICBsaW5lV2lkdGggPSAyO1xuICBAUHJvcGVydHkoJ+e6v+adoeminOiJsicsIHtcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB1aToge1xuICAgICAgd2lkZ2V0OiAnbXlDb2xvcicsXG4gICAgfSxcbiAgfSlcbiAgbGluZUNvbG9yID0gJ3JnYig1MCwgMTMzLCAyNTUpJztcbiAgQFByb3BlcnR5KCfloavlhYXpopzoibInLCB7XG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgdWk6IHtcbiAgICAgIHdpZGdldDogJ215Q29sb3InLFxuICAgIH0sXG4gIH0pXG4gIGZpbGxDb2xvciA9ICdyZ2JhKDI0OCwgMjMxLCAyOCwgMC4yKSc7XG4gIEBQcm9wZXJ0eSgn5pi+56S657uY5Yi25oyJ6ZKuJywgeyB0eXBlOiAnYm9vbGVhbicgfSlcbiAgc2hvd0RyYXdCdXR0b24gPSB0cnVlO1xuICBARGF0YSh7XG4gICAgcHJvcGVydGllczoge1xuICAgICAgaWQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAnSUQnIH0sXG4gICAgICAvLyBuYW1lOiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+WbtOagj+WQjeensCcgfSxcbiAgICAgIHR5cGU6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAn5Zu05qCP57G75Z6LJyB9LFxuICAgICAgbG5nbGF0OiB7IHR5cGU6ICdzdHJpbmcnLCB0aXRsZTogJ+e7j+e6rOW6picgfSxcbiAgICAgIHJhZGl1czogeyB0eXBlOiAnbnVtYmVyJywgdGl0bGU6ICfljYrlvoQnIH0sXG4gICAgfSxcbiAgfSlcbiAgZGF0YTogYW55W10gPSBbXG4gICAge1xuICAgICAgLy8gbmFtZTogJ+Wkmui+ueW9oicsXG4gICAgICBpZDogJzEnLFxuICAgICAgdHlwZTogJ3BvbHlnb24nLFxuICAgICAgbG5nbGF0OiAnMTIwLjcsMjg7MTIwLjgsMjg7MTIwLjgsMjcuOTsxMjAuNywyNy45JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIG5hbWU6ICflnIblvaInLFxuICAgICAgaWQ6ICcyJyxcbiAgICAgIHR5cGU6ICdjaXJjbGUnLFxuICAgICAgbG5nbGF0OiAnMTIwLjYsMjcuOScsXG4gICAgICByYWRpdXM6IDUwMDAsXG4gICAgfSxcbiAgXTtcbiAgQEV2ZW50KCfmlrDlop7lm7TmoI8nLCB7XG4gICAgcGFyYW1zOiB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR5cGU6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAn5Zu05qCP57G75Z6LJyB9LFxuICAgICAgICBsbmdsYXQ6IHsgdHlwZTogJ3N0cmluZycsIHRpdGxlOiAn57uP57qs5bqmJyB9LFxuICAgICAgICByYWRpdXM6IHsgdHlwZTogJ251bWJlcicsIHRpdGxlOiAn5Y2K5b6EJyB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KVxuICBjcmVhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgbGF5ZXI6IGFueTtcbiAgdGV4dExheWVyOiBhbnk7XG4gIGVkaXRMYXllcjogYW55O1xuICBlZGl0RGF0YSA9IFtdO1xuICBzdG9wRWRpdCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBlZGl0TGluZUxheWVyOiBhbnk7XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgYXJlYU5hbWU6IHN0cmluZztcbiAgcG9seWdvbjogYW55O1xuICBjaXJjbGU6IGFueTtcbiAgc2NlbmU6IGFueTtcbiAgY2lyY2xlRWRpdDogYW55O1xuICBAVmlld0NoaWxkKCdzdWdnZXN0JylcbiAgc3VnZ2VzdDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgcG9seWdvbkVkaXQ6IGFueTtcbiAgZWRpdE92ZXJsYXk6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcGFyZW50OiBDdXN0b21CYWlkdU1hcENvbXBvbmVudCxcbiAgICBwcm90ZWN0ZWQgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgbWVzc2FnZTogTnpNZXNzYWdlU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIocGFyZW50LCB6b25lKTtcbiAgfVxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGF3YWl0IHRoaXMucGFyZW50LmluaXQkO1xuICAgIHRoaXMuaW5pdFNlYXJjaCgpO1xuICAgIC8vIHRoaXMuc3RhcnREcmF3KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuc3RvcERyYXcoKTtcbiAgICB0aGlzLnNjZW5lPy5jbGVhckRhdGEoKTtcbiAgfVxuXG4gIGNyZWF0ZUxheWVycygpOiBhbnlbXSB7XG4gICAgdGhpcy5sYXllciA9IG5ldyBtYXB2Z2wuUG9seWdvbkxheWVyKHtcbiAgICAgIHJlbmRlck9yZGVyOiAtMSxcbiAgICAgIGxpbmVDb2xvcjogdGhpcy5saW5lQ29sb3IsXG4gICAgICBsaW5lV2lkdGg6IHRoaXMubGluZVdpZHRoLFxuICAgICAgZmlsbENvbG9yOiB0aGlzLmZpbGxDb2xvcixcbiAgICB9KTtcbiAgICAvLyB0aGlzLnRleHRMYXllciA9IG5ldyBtYXB2Z2wuVGV4dExheWVyKHtcbiAgICAvLyAgIHJlbmRlck9yZGVyOiAtMSxcbiAgICAvLyAgIC4uLnRoaXMuZ2V0VGV4dE9wdGlvbnModGhpcy50ZXh0Rm9udCksXG4gICAgLy8gfSk7XG4gICAgcmV0dXJuIFt0aGlzLmxheWVyXTtcbiAgfVxuICB1cGRhdGVEYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICB0aGlzLmRhdGEuZm9yRWFjaCgocikgPT4ge1xuICAgICAgaWYgKHIudHlwZSA9PT0gJ2NpcmNsZScpIHtcbiAgICAgICAgaWYgKCFyLnJhZGl1cyB8fCAhci5sbmdsYXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBvaW50c0NvdW50ID0gOTA7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHIucmFkaXVzO1xuICAgICAgICBjb25zdCBsbmdsYXQgPSByLmxuZ2xhdC5zcGxpdCgnLCcpO1xuICAgICAgICBjb25zdCBjZW50ZXJMbmcgPSArbG5nbGF0WzBdO1xuICAgICAgICBjb25zdCBjZW50ZXJMYXQgPSArbG5nbGF0WzFdO1xuICAgICAgICAvLyDovazmjaLkuK3lv4PngrnnuqzluqbkuLrlvKfluqZcbiAgICAgICAgY29uc3QgY2VudGVyTGF0UmFkID0gKGNlbnRlckxhdCAqIE1hdGguUEkpIC8gMTgwO1xuICAgICAgICAvLyDlrZjlgqjovajov7nngrnnmoTmlbDnu4RcbiAgICAgICAgY29uc3QgdHJhamVjdG9yeSA9IFtdO1xuXG4gICAgICAgIC8vIOmBjeWOhiAwfjM2MMKw77yM55Sf5oiQ562J6Ze06ZqU55qE54K5XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzQ291bnQ7IGkrKykge1xuICAgICAgICAgIC8vIOiuoeeul+W9k+WJjeeCueeahOaWueS9jeinku+8iOW8p+W6pu+8ie+8muS7jjDCsOWIsDM2MMKw77yM5Z2H5YiGcG9pbnRzQ291bnTku71cbiAgICAgICAgICBjb25zdCBhbmdsZVJhZCA9ICgoKGkgKiAzNjApIC8gcG9pbnRzQ291bnQpICogTWF0aC5QSSkgLyAxODA7XG5cbiAgICAgICAgICAvLyDorqHnrpflvZPliY3ngrnnm7jlr7nkuo7kuK3lv4PngrnnmoTnu4/nuqzluqblop7ph4/vvIjlvKfluqbvvIlcbiAgICAgICAgICBjb25zdCBkZWx0YUxhdFJhZCA9IChyYWRpdXMgKiBNYXRoLmNvcyhhbmdsZVJhZCkpIC8gRUFSVEhfUkFESVVTO1xuICAgICAgICAgIGNvbnN0IGRlbHRhTG5nUmFkID0gKHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlUmFkKSkgLyAoRUFSVEhfUkFESVVTICogTWF0aC5jb3MoY2VudGVyTGF0UmFkKSk7XG5cbiAgICAgICAgICAvLyDovazmjaLkuLrop5LluqbvvIzlubborqHnrpfmlrDlnZDmoIdcbiAgICAgICAgICBjb25zdCBuZXdMYXQgPSBjZW50ZXJMYXQgKyAoZGVsdGFMYXRSYWQgKiAxODApIC8gTWF0aC5QSTtcbiAgICAgICAgICBjb25zdCBuZXdMbmcgPSBjZW50ZXJMbmcgKyAoZGVsdGFMbmdSYWQgKiAxODApIC8gTWF0aC5QSTtcblxuICAgICAgICAgIC8vIOa3u+WKoOWIsOi9qOi/ueaVsOe7hO+8iOS/neeVmTbkvY3lsI/mlbDvvIznu4/nuqzluqbluLjop4Tnsr7luqbvvIlcbiAgICAgICAgICB0cmFqZWN0b3J5LnB1c2goW3BhcnNlRmxvYXQobmV3TG5nLnRvRml4ZWQoNikpLCBwYXJzZUZsb2F0KG5ld0xhdC50b0ZpeGVkKDYpKV0pO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbdHJhamVjdG9yeV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXIubG5nbGF0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IGNvb3JkaW5hdGVzID0gci5sbmdsYXQuc3BsaXQoJzsnKS5tYXAoKHIpID0+IHtcbiAgICAgICAgLy8gICBjb25zdCBsbmdsYXQgPSByLnNwbGl0KCcsJyk7XG4gICAgICAgIC8vICAgcmV0dXJuIFsrbG5nbGF0WzBdLCArbG5nbGF0WzFdXTtcbiAgICAgICAgLy8gfSk7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gci5sbmdsYXQuc3BsaXQoJ1xcbicpLm1hcCgocikgPT5cbiAgICAgICAgICByLnNwbGl0KCc7JykubWFwKChyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsbmdsYXQgPSByLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICByZXR1cm4gWytsbmdsYXRbMF0sICtsbmdsYXRbMV1dO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmxheWVyLnNldERhdGEoZGF0YSk7XG4gIH1cblxuICBATWV0aG9kKCflvIDlp4vnu5jliLYnKVxuICBhc3luYyBzdGFydERyYXcoXG4gICAgQFBhcmFtKCfnsbvlnosnLCB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGVudW06IFtcbiAgICAgICAgeyBsYWJlbDogJ+Wkmui+ueW9oicsIHZhbHVlOiAncG9seWdvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ+WchuW9oicsIHZhbHVlOiAnY2lyY2xlJyB9LFxuICAgICAgXSxcbiAgICB9KVxuICAgIHR5cGU6IHN0cmluZyxcbiAgKSB7XG4gICAgY29uc3QgeyBEcmF3U2NlbmUsIFBvbHlnb25EcmF3LCBDaXJjbGVEcmF3LCBPcGVyYXRlRXZlbnRUeXBlIH0gPSBhd2FpdCBpbXBvcnQoJ2JtYXAtZHJhdycpO1xuICAgIGlmICghdGhpcy5zY2VuZSkge1xuICAgICAgdGhpcy5zY2VuZSA9IG5ldyBEcmF3U2NlbmUodGhpcy5wYXJlbnQubWFwLCB7IG5vTGltaXQ6IHRydWUgfSk7XG5cbiAgICAgIHRoaXMuc2NlbmUuYWRkRXZlbnRMaXN0ZW5lcihPcGVyYXRlRXZlbnRUeXBlLkNPTVBMRVRFLCAoZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgaWYgKGUudGFyZ2V0Lm92ZXJsYXkucmFkaXVzKSB7XG4gICAgICAgICAgY29uc3QgcmFkaXVzID0gZS50YXJnZXQub3ZlcmxheS5yYWRpdXM7XG4gICAgICAgICAgY29uc3QgbG5nbGF0ID0gZS50YXJnZXQub3ZlcmxheS5sYXRMbmc7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdjaXJjbGUnLFxuICAgICAgICAgICAgbG5nbGF0OiBgJHtsbmdsYXQubG5nfSwke2xuZ2xhdC5sYXR9YCxcbiAgICAgICAgICAgIHJhZGl1czogcmFkaXVzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gdGhpcy50ZW1wT3ZlcmxheS5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgICAgLy8gICB0aGlzLnBhcmVudC5tYXAucmVtb3ZlT3ZlcmxheShyKTtcbiAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZS5lbWl0KGRhdGEpO1xuICAgICAgICAgIHRoaXMuZWRpdE92ZXJsYXkgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBvaW50cyA9IGUudGFyZ2V0Lm92ZXJsYXkuZ2V0UG9pbnRzKCk7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZGF0YTogYW55O1xuICAgICAgICAgIGlmIChwb2ludHMubGVuZ3RoICYmIEFycmF5LmlzQXJyYXkocG9pbnRzWzBdKSkge1xuICAgICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3BvbHlnb24nLFxuICAgICAgICAgICAgICBsbmdsYXQ6IHBvaW50cy5tYXAoKHBzKSA9PiBwcy5tYXAoKHApID0+IGAke3AubGF0TG5nLmxuZ30sJHtwLmxhdExuZy5sYXR9YCkuam9pbignOycpKS5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdwb2x5Z29uJyxcbiAgICAgICAgICAgICAgbG5nbGF0OiBwb2ludHMubWFwKChwKSA9PiBgJHtwLmxhdExuZy5sbmd9LCR7cC5sYXRMbmcubGF0fWApLmpvaW4oJzsnKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jcmVhdGUuZW1pdChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnNjZW5lLmFkZEV2ZW50TGlzdGVuZXIoT3BlcmF0ZUV2ZW50VHlwZS5DQU5DRUwsIChlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICBpZiAodGhpcy5lZGl0T3ZlcmxheSkge1xuICAgICAgICAgIHRoaXMucGFyZW50Lm1hcC5yZW1vdmVPdmVybGF5KHRoaXMuZWRpdE92ZXJsYXkpO1xuICAgICAgICAgIHRoaXMuZWRpdE92ZXJsYXkgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgICAgaWYgKCF0aGlzLnBvbHlnb24pIHtcbiAgICAgICAgICB0aGlzLnBvbHlnb24gPSBuZXcgUG9seWdvbkRyYXcodGhpcy5zY2VuZSwge1xuICAgICAgICAgICAgYXV0b1ZpZXdwb3J0OiB0cnVlLCAvLyDmmK/lkKboh6rliqjosIPmlbTop4bph45cbiAgICAgICAgICAgIGhpZGVUaXA6IGZhbHNlLCAvLyDpmpDol4/nu5jliLbmj5DnpLpcbiAgICAgICAgICAgIGlzU2VyaWVzOiB0cnVlLCAvLyDmmK/lkKblvIDlkK/mibnph4/nu5jliLZcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICAgIGJhc2VPcHRzOiB7XG4gICAgICAgICAgICAgIGZpbGxDb2xvcjogdGhpcy5maWxsQ29sb3IsXG4gICAgICAgICAgICAgIHN0cm9rZVdlaWdodDogdGhpcy5saW5lV2lkdGgsXG4gICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgICAgICAgLy8gc3Ryb2tlT3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgLy8gZmlsbE9wYWNpdHk6IDAuMixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb2x5Z29uLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjaXJjbGUnOlxuICAgICAgICBpZiAoIXRoaXMuY2lyY2xlKSB7XG4gICAgICAgICAgdGhpcy5jaXJjbGUgPSBuZXcgQ2lyY2xlRHJhdyh0aGlzLnNjZW5lLCB7XG4gICAgICAgICAgICBhdXRvVmlld3BvcnQ6IHRydWUsIC8vIOaYr+WQpuiHquWKqOiwg+aVtOinhumHjlxuICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgaXNTZXJpZXM6IHRydWUsIC8vIOaYr+WQpuW8gOWQr+aJuemHj+e7mOWItlxuICAgICAgICAgICAgLy8gbGFiZWxPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyAgIGJvcmRlclJhZGl1czogJzJweCcsXG4gICAgICAgICAgICAvLyAgIGJhY2tncm91bmQ6ICcjYjVkM2ZiJyxcbiAgICAgICAgICAgIC8vICAgYm9yZGVyOiAnMXB4IHNvbGlkICNiNWQzZmInLFxuICAgICAgICAgICAgLy8gICBjb2xvcjogJyMzMzMnLFxuICAgICAgICAgICAgLy8gICBmb250U2l6ZTogJzEycHgnLFxuICAgICAgICAgICAgLy8gICBsZXR0ZXJTcGFjaW5nOiAnMCcsXG4gICAgICAgICAgICAvLyAgIHBhZGRpbmc6ICc1cHgnLFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIGJhc2VPcHRzOiB7XG4gICAgICAgICAgICAgIGZpbGxDb2xvcjogdGhpcy5maWxsQ29sb3IsXG4gICAgICAgICAgICAgIHN0cm9rZVdlaWdodDogdGhpcy5saW5lV2lkdGgsXG4gICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmxpbmVDb2xvcixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaXJjbGUub3BlbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXRPcHRpb25zKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmaWxsQ29sb3I6IHRoaXMuZmlsbENvbG9yLFxuICAgICAgc3Ryb2tlV2VpZ2h0OiB0aGlzLmxpbmVXaWR0aCxcbiAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmxpbmVDb2xvcixcbiAgICB9O1xuICB9XG4gIHVwZGF0ZUVkaXREYXRhKCkge1xuICAgIGlmICh0aGlzLmVkaXRMYXllcikge1xuICAgICAgdGhpcy5lZGl0TGF5ZXIuc2V0RGF0YSh0aGlzLmVkaXREYXRhLm1hcCgocikgPT4gKHsgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IHIgfSB9KSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0TGluZUxheWVyKSB7XG4gICAgICB0aGlzLmVkaXRMaW5lTGF5ZXIuc2V0RGF0YShbXG4gICAgICAgIHtcbiAgICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ0xpbmVTdHJpbmcnLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuZWRpdERhdGEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxuXG4gIEBNZXRob2QoJ+e7k+adn+e7mOWIticpXG4gIHN0b3BEcmF3KCkge1xuICAgIHRoaXMuc2NlbmU/LmNsb3NlKCk7XG4gICAgLy8gdGhpcy5zdG9wRWRpdCQubmV4dCgpO1xuICAgIC8vIGlmICh0aGlzLmVkaXRMYXllcikge1xuICAgIC8vICAgdGhpcy5wYXJlbnQucmVtb3ZlTGF5ZXIodGhpcy5lZGl0TGF5ZXIpO1xuICAgIC8vICAgdGhpcy5lZGl0TGF5ZXIgPSBudWxsO1xuICAgIC8vIH1cbiAgICAvLyBpZiAodGhpcy5lZGl0TGluZUxheWVyKSB7XG4gICAgLy8gICB0aGlzLnBhcmVudC5yZW1vdmVMYXllcih0aGlzLmVkaXRMaW5lTGF5ZXIpO1xuICAgIC8vICAgdGhpcy5lZGl0TGluZUxheWVyID0gbnVsbDtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHRoaXMuZWRpdERhdGE/Lmxlbmd0aCA+PSAzKSB7XG4gICAgLy8gICBpZiAoIXRoaXMuZGF0YSkge1xuICAgIC8vICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGNvbnN0IGRhdGEgPSB7XG4gICAgLy8gICAgIHR5cGU6ICdwb2x5Z29uJyxcbiAgICAvLyAgICAgbG5nbGF0OiB0aGlzLmVkaXREYXRhLm1hcCgocikgPT4gci5qb2luKCcsJykpLmpvaW4oJzsnKSxcbiAgICAvLyAgIH07XG4gICAgLy8gICB0aGlzLmRhdGEucHVzaChkYXRhKTtcbiAgICAvLyAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgIC8vICAgdGhpcy5jcmVhdGUuZW1pdChkYXRhKTtcbiAgICAvLyB9XG4gICAgLy8gdGhpcy5lZGl0RGF0YSA9IG51bGw7XG4gIH1cblxuICBhc3luYyBzZWFyY2goKSB7XG4gICAgLy8g5aaC5p6c5q2j5Zyo57uY5Yi25aSa6L655b2i5Zu05qCP77yM6I635Y+W5Zyw5ZCN6L6555WM5bm257uY5Yi2XG4gICAgY29uc3QgeyBQb2x5Z29uRWRpdCB9ID0gYXdhaXQgaW1wb3J0KCdibWFwLWRyYXcnKTtcbiAgICBpZiAodGhpcy5hcmVhTmFtZSkge1xuICAgICAgY29uc3QgYm91bmRhcnkgPSBuZXcgQk1hcEdMLkJvdW5kYXJ5KCk7XG4gICAgICAvLyDnmb7luqblnLDlm74gR2VvY29kZXIuZ2V0TG9jYXRpb24g5Zue6LCD562+5ZCN77yaKHJlc3VsdHMsIHN0YXR1cylcbiAgICAgIGJvdW5kYXJ5LmdldCh0aGlzLmFyZWFOYW1lLCAocmVzdWx0cykgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygn6L6555WM5Z2Q5qCH5pWw57uE77yaJywgcmVzdWx0cyk7XG4gICAgICAgIC8vIOajgOafpeeKtuaAgeaYr+WQpuaIkOWKn1xuICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmJvdW5kYXJpZXMgJiYgcmVzdWx0cy5ib3VuZGFyaWVzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuc3RvcERyYXcoKTtcbiAgICAgICAgICBpZiAoIXRoaXMucG9seWdvbkVkaXQpIHtcbiAgICAgICAgICAgIHRoaXMucG9seWdvbkVkaXQgPSBuZXcgUG9seWdvbkVkaXQodGhpcy5zY2VuZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBvaW50cyA9IChyZXN1bHRzLmJvdW5kYXJpZXMgYXMgc3RyaW5nW10pLm1hcCgoYm91bmRhcnkpID0+XG4gICAgICAgICAgICBib3VuZGFyeS5zcGxpdCgnOycpLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBbbG5nLCBsYXRdID0gcC5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IEJNYXBHTC5Qb2ludChOdW1iZXIobG5nKSwgTnVtYmVyKGxhdCkpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBvdmVybGF5ID0gbmV3IEJNYXBHTC5Qb2x5Z29uKHBvaW50cywgdGhpcy5nZXRPcHRpb25zKCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKG92ZXJsYXkpO1xuICAgICAgICAgIHRoaXMuZWRpdE92ZXJsYXkgPSBvdmVybGF5O1xuICAgICAgICAgIHRoaXMucGFyZW50Lm1hcC5hZGRPdmVybGF5KG92ZXJsYXkpO1xuICAgICAgICAgIHRoaXMucGFyZW50Lm1hcC5zZXRWaWV3cG9ydChbXS5jb25jYXQuYXBwbHkoW10sIHBvaW50cykpO1xuICAgICAgICAgIHRoaXMucG9seWdvbkVkaXQuZWRpdChvdmVybGF5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2UuZXJyb3IoJ+ihjOaUv+WMuuWfn+S4jeWtmOWcqCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0U2VhcmNoKCkge1xuICAgIGNvbnN0IHsgUG9seWdvbkVkaXQsIENpcmNsZUVkaXQgfSA9IGF3YWl0IGltcG9ydCgnYm1hcC1kcmF3Jyk7XG4gICAgY29uc3QgYWMgPSBuZXcgQk1hcEdMLkF1dG9jb21wbGV0ZSh7XG4gICAgICBpbnB1dDogdGhpcy5zdWdnZXN0Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBsb2NhdGlvbjogdGhpcy5wYXJlbnQubWFwLFxuICAgIH0pO1xuICAgIGFjLmFkZEV2ZW50TGlzdGVuZXIoJ29uY29uZmlybScsIChlKSA9PiB7XG4gICAgICAvLyDpvKDmoIfngrnlh7vkuIvmi4nliJfooajlkI7nmoTkuovku7ZcbiAgICAgIGNvbnN0IHZhbHVlID0gZS5pdGVtLnZhbHVlO1xuICAgICAgY29uc29sZS5sb2coZSk7XG5cbiAgICAgIC8vIOWmguaenOato+WcqOe7mOWItuWchuW9ouWbtOagj1xuICAgICAgaWYgKHRoaXMuY2lyY2xlKSB7XG4gICAgICAgIGlmICghdGhpcy5jaXJjbGVFZGl0KSB7XG4gICAgICAgICAgdGhpcy5jaXJjbGVFZGl0ID0gbmV3IENpcmNsZUVkaXQodGhpcy5zY2VuZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VudGVyID0gbmV3IEJNYXBHTC5Qb2ludCh2YWx1ZS5sb2NhdGlvbi5sbmcsIHZhbHVlLmxvY2F0aW9uLmxhdCk7XG4gICAgICAgIHRoaXMucGFyZW50Lm1hcC5jZW50ZXJBbmRab29tKGNlbnRlciwgMTYpO1xuICAgICAgICBjb25zdCBvdmVybGF5ID0gbmV3IEJNYXBHTC5DaXJjbGUoY2VudGVyLCAzMDAsIHRoaXMuZ2V0T3B0aW9ucygpKTtcbiAgICAgICAgdGhpcy5lZGl0T3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgICAgIHRoaXMucGFyZW50Lm1hcC5hZGRPdmVybGF5KG92ZXJsYXkpO1xuICAgICAgICB0aGlzLmNpcmNsZUVkaXQub3BlbihvdmVybGF5KTtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEBNZXRob2QoJ+enu+WKqOWIsOS4reW/gycpXG4gIG1vdmVUb1ZpZXcoQFBhcmFtKCdpZCcpIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZGF0YSB8fCAhaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YS5maW5kKChyKSA9PiByLmlkID09PSBpZCk7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChkYXRhLnR5cGUgPT09ICdjaXJjbGUnKSB7XG4gICAgICBjb25zdCBbbG5nLCBsYXRdID0gZGF0YS5sbmdsYXQuc3BsaXQoJywnKTtcbiAgICAgIGNvbnN0IGNlbnRlckxuZyA9IE51bWJlcihsbmcpO1xuICAgICAgY29uc3QgY2VudGVyTGF0ID0gTnVtYmVyKGxhdCk7XG4gICAgICBjb25zdCByYWRpdXMgPSBOdW1iZXIoZGF0YS5yYWRpdXMpO1xuXG4gICAgICAvLyDovazmjaLkuK3lv4PngrnnuqzluqbkuLrlvKfluqZcbiAgICAgIGNvbnN0IGNlbnRlckxhdFJhZCA9IChjZW50ZXJMYXQgKiBNYXRoLlBJKSAvIDE4MDtcblxuICAgICAgLy8g6K6h566X57uP5bqm5pa55ZCR55qE5YGP56e777yI5byn5bqm77yJXG4gICAgICBjb25zdCBkZWx0YUxuZ1JhZCA9IHJhZGl1cyAvIChFQVJUSF9SQURJVVMgKiBNYXRoLmNvcyhjZW50ZXJMYXRSYWQpKTtcbiAgICAgIC8vIOiuoeeul+e6rOW6puaWueWQkeeahOWBj+enu++8iOW8p+W6pu+8iVxuICAgICAgY29uc3QgZGVsdGFMYXRSYWQgPSByYWRpdXMgLyBFQVJUSF9SQURJVVM7XG5cbiAgICAgIC8vIOi9rOaNouS4uuinkuW6puWBj+enu1xuICAgICAgY29uc3QgZGVsdGFMbmcgPSAoZGVsdGFMbmdSYWQgKiAxODApIC8gTWF0aC5QSTtcbiAgICAgIGNvbnN0IGRlbHRhTGF0ID0gKGRlbHRhTGF0UmFkICogMTgwKSAvIE1hdGguUEk7XG5cbiAgICAgIC8vIOiuoeeul+WchuW9oueahOWbm+S4qui+ueeVjOeCue+8iOS4iuOAgeS4i+OAgeW3puOAgeWPs++8iVxuICAgICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgICBuZXcgQk1hcEdMLlBvaW50KGNlbnRlckxuZywgY2VudGVyTGF0ICsgZGVsdGFMYXQpLCAvLyDkuIpcbiAgICAgICAgbmV3IEJNYXBHTC5Qb2ludChjZW50ZXJMbmcsIGNlbnRlckxhdCAtIGRlbHRhTGF0KSwgLy8g5LiLXG4gICAgICAgIG5ldyBCTWFwR0wuUG9pbnQoY2VudGVyTG5nIC0gZGVsdGFMbmcsIGNlbnRlckxhdCksIC8vIOW3plxuICAgICAgICBuZXcgQk1hcEdMLlBvaW50KGNlbnRlckxuZyArIGRlbHRhTG5nLCBjZW50ZXJMYXQpLCAvLyDlj7NcbiAgICAgIF07XG5cbiAgICAgIC8vIOS9v+eUqCBzZXRWaWV3cG9ydCDmlrnms5XosIPmlbTop4blm77vvIzkvb/mlbTkuKrlnIblvaLlj6/op4FcbiAgICAgIHRoaXMucGFyZW50Lm1hcC5zZXRWaWV3cG9ydChwb2ludHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcmVudC5tYXAuc2V0Vmlld3BvcnQoXG4gICAgICAgIGRhdGEubG5nbGF0LnNwbGl0KC9bO1xcblxccl0rLykubWFwKChwKSA9PiB7XG4gICAgICAgICAgY29uc3QgW2xuZywgbGF0XSA9IHAuc3BsaXQoJywnKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEJNYXBHTC5Qb2ludChOdW1iZXIobG5nKSwgTnVtYmVyKGxhdCkpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|