axidio-styleguide-library1-v2 0.2.6 → 0.2.8
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.
|
@@ -16,8 +16,8 @@ export class GuageChartComponent extends ComponentUniqueId {
|
|
|
16
16
|
this.chartConfiguration = {};
|
|
17
17
|
this.dataType = '';
|
|
18
18
|
this.datatype_status = false;
|
|
19
|
-
this.isHeaderVisible = true;
|
|
20
19
|
this.uniqueId = this.getUniqueId();
|
|
20
|
+
this.isHeaderVisible = true;
|
|
21
21
|
this.defaultConfiguration = {
|
|
22
22
|
margin: { top: 40, right: 20, bottom: 20, left: 20 },
|
|
23
23
|
minAngle: -90,
|
|
@@ -49,189 +49,320 @@ export class GuageChartComponent extends ComponentUniqueId {
|
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
51
|
get isAlertEnabled() {
|
|
52
|
-
return this.chartConfiguration?.headerMenuOptions?.some(
|
|
52
|
+
return this.chartConfiguration?.headerMenuOptions?.some(option => option.id === 'editAlert');
|
|
53
53
|
}
|
|
54
|
-
ngOnInit() { }
|
|
55
54
|
ngOnChanges() {
|
|
56
|
-
this
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
this.redrawChart();
|
|
55
|
+
let self = this;
|
|
56
|
+
d3.select('#' + self.uniqueId).remove();
|
|
57
|
+
this.initializeLineChart();
|
|
60
58
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
this.
|
|
59
|
+
onResized(event) {
|
|
60
|
+
let self = this;
|
|
61
|
+
d3.select('#' + self.uniqueId).remove();
|
|
62
|
+
this.initializeLineChart();
|
|
65
63
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
ngOnInit() { }
|
|
65
|
+
initializeLineChart() {
|
|
66
|
+
var self = this;
|
|
67
|
+
let data = [];
|
|
68
|
+
let metaData = null;
|
|
69
|
+
let colorMaps = [];
|
|
70
|
+
let angleValue = [];
|
|
71
|
+
let data_ready = [];
|
|
72
|
+
let labelArray = [];
|
|
73
|
+
let colorType = null;
|
|
74
|
+
let isria = this.customChartConfiguration.isRia;
|
|
75
|
+
for (var i in this.defaultConfiguration) {
|
|
76
|
+
this.chartConfiguration[i] = ChartHelper.getValueByConfigurationType(i, this.defaultConfiguration, this.customChartConfiguration);
|
|
69
77
|
}
|
|
70
|
-
|
|
71
|
-
|
|
78
|
+
data = this.chartData.data;
|
|
79
|
+
metaData = this.chartData.metaData;
|
|
80
|
+
colorType = metaData.colorType;
|
|
81
|
+
if (colorType == 'low') {
|
|
82
|
+
colorMaps = this.chartConfiguration.low_colorMap;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
colorMaps = this.chartConfiguration.high_colorMap;
|
|
72
86
|
}
|
|
73
|
-
const metaData = this.chartData.metaData;
|
|
74
87
|
if (metaData.dataType) {
|
|
75
|
-
this.dataType = metaData.dataType
|
|
76
|
-
this.
|
|
88
|
+
this.dataType = metaData.dataType;
|
|
89
|
+
if (this.dataType == 'USD') {
|
|
90
|
+
this.datatype_status = true;
|
|
91
|
+
this.dataType = '$ ';
|
|
92
|
+
}
|
|
77
93
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
this.drawLabels(svg, radius, labelArray, range, metaData);
|
|
96
|
-
this.drawCenterTexts(svg, radius, metaData);
|
|
97
|
-
this.alignSvg(svg, chartContainer, margin);
|
|
98
|
-
}
|
|
99
|
-
createSvg(chartContainer, width, height) {
|
|
100
|
-
return chartContainer
|
|
94
|
+
data.map(function (dataUnit, i) {
|
|
95
|
+
if (i < data.length - 1) {
|
|
96
|
+
let diff = data[i + 1] - data[i];
|
|
97
|
+
data_ready.push(diff);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
var chartContainer = d3.select(this.containerElt.nativeElement);
|
|
101
|
+
var guagecontainer = d3.select(this.guagecontainerElt.nativeElement);
|
|
102
|
+
var margin = this.chartConfiguration.margin;
|
|
103
|
+
var width = parseInt(chartContainer.style('width')) - margin.left - margin.right;
|
|
104
|
+
var height = parseInt(guagecontainer.style('height')) -
|
|
105
|
+
margin.top -
|
|
106
|
+
margin.bottom -
|
|
107
|
+
56; //chart header height
|
|
108
|
+
if (this.chartConfiguration.isHeaderVisible != undefined)
|
|
109
|
+
this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
|
|
110
|
+
var svg = chartContainer
|
|
101
111
|
.append('svg')
|
|
102
|
-
.attr('id',
|
|
103
|
-
.attr('width', width)
|
|
104
|
-
.attr('height', height)
|
|
112
|
+
.attr('id', self.uniqueId)
|
|
113
|
+
.attr('width', width + margin.left + margin.right)
|
|
114
|
+
.attr('height', height + margin.top + margin.bottom)
|
|
105
115
|
.call(ChartHelper.responsivefy)
|
|
106
116
|
.append('g');
|
|
107
|
-
|
|
108
|
-
adjustForScreenAndDrilldown(radius) {
|
|
117
|
+
var radius = Math.min(width, height) / 2;
|
|
109
118
|
if (this.chartConfiguration.isDrilldownChart) {
|
|
110
119
|
this.chartConfiguration.currentValueWidthScaleFactor += 40;
|
|
111
120
|
this.chartConfiguration.currentValueHeightScaleFactor += 20;
|
|
112
121
|
}
|
|
113
|
-
else
|
|
114
|
-
|
|
115
|
-
|
|
122
|
+
else {
|
|
123
|
+
if (window.innerWidth > 1400) {
|
|
124
|
+
this.chartConfiguration.currentValueHeightScaleFactor += 15;
|
|
125
|
+
this.chartConfiguration.currentValueWidthScaleFactor *= 2;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
let topTextPosition = radius / 2 - 10;
|
|
129
|
+
let midTextPosition = topTextPosition + this.chartConfiguration.currentValueHeightScaleFactor;
|
|
130
|
+
let bottomTextPosition = midTextPosition + this.chartConfiguration.currentValueHeightScaleFactor;
|
|
131
|
+
var data_length = data.length;
|
|
132
|
+
function deg2rad(deg) {
|
|
133
|
+
return (deg * Math.PI) / 180;
|
|
116
134
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
135
|
+
let tempArray = [];
|
|
136
|
+
let total = 0;
|
|
137
|
+
data_ready.map(function (unit) {
|
|
138
|
+
total += unit;
|
|
139
|
+
});
|
|
140
|
+
data_ready.map(function (unit, i) {
|
|
141
|
+
var angle = (unit / total) * 180;
|
|
142
|
+
if (i === 0) {
|
|
143
|
+
tempArray.push(angle);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
let currentAngle = tempArray[i - 1] + angle;
|
|
147
|
+
tempArray.push(currentAngle);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
angleValue = tempArray;
|
|
151
|
+
var arc = d3
|
|
133
152
|
.arc()
|
|
134
|
-
.innerRadius(radius -
|
|
153
|
+
.innerRadius(radius -
|
|
154
|
+
self.chartConfiguration.ringWidth -
|
|
155
|
+
self.chartConfiguration.ringInset)
|
|
135
156
|
.outerRadius(radius)
|
|
136
|
-
.startAngle((
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
157
|
+
.startAngle(function (d, i) {
|
|
158
|
+
var ratio;
|
|
159
|
+
if (i === 0) {
|
|
160
|
+
ratio = self.chartConfiguration.minAngle;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
ratio = self.chartConfiguration.minAngle + angleValue[i - 1];
|
|
164
|
+
}
|
|
165
|
+
return deg2rad(ratio);
|
|
166
|
+
})
|
|
167
|
+
.endAngle(function (d, i) {
|
|
168
|
+
var ratio;
|
|
169
|
+
if (i === data_ready.length - 1) {
|
|
170
|
+
ratio = self.chartConfiguration.maxAngle;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
ratio = self.chartConfiguration.minAngle + angleValue[i];
|
|
174
|
+
}
|
|
175
|
+
return deg2rad(ratio);
|
|
176
|
+
});
|
|
177
|
+
function centerTranslation() {
|
|
178
|
+
return 'translate(' + radius + ',' + radius + ')';
|
|
179
|
+
}
|
|
180
|
+
var centerTx = centerTranslation();
|
|
181
|
+
var tickData = d3
|
|
182
|
+
.range(self.chartConfiguration.majorTicks)
|
|
183
|
+
.map(function (i) {
|
|
184
|
+
return 1 / self.chartConfiguration.majorTicks;
|
|
185
|
+
});
|
|
186
|
+
var arcs = svg.append('g').attr('class', 'arc').attr('transform', centerTx);
|
|
141
187
|
arcs
|
|
142
188
|
.selectAll('path')
|
|
143
189
|
.data(data_ready)
|
|
144
190
|
.enter()
|
|
145
191
|
.append('path')
|
|
146
|
-
.
|
|
147
|
-
.
|
|
148
|
-
|
|
149
|
-
.on('click', (event, d) => {
|
|
150
|
-
if (metaData.hasDrillDown && metaData.currentValue > 0) {
|
|
151
|
-
this.handleClick(this.getRange(d, data_ready, metaData));
|
|
192
|
+
.on('click', function (d) {
|
|
193
|
+
if (!metaData.hasDrillDown || metaData.currentValue == 0) {
|
|
194
|
+
return;
|
|
152
195
|
}
|
|
196
|
+
let range = getRange(d);
|
|
197
|
+
self.handleClick(range);
|
|
198
|
+
})
|
|
199
|
+
.attr('fill', function (d, i) {
|
|
200
|
+
return colorMaps[i];
|
|
201
|
+
})
|
|
202
|
+
.attr('id', function (d, i) {
|
|
203
|
+
return colorMaps[i];
|
|
204
|
+
})
|
|
205
|
+
.attr('d', arc)
|
|
206
|
+
// .style('cursor', 'pointer');
|
|
207
|
+
.style('cursor', function (d) {
|
|
208
|
+
if (metaData.currentValue > 0 && metaData.hasDrillDown && !isria)
|
|
209
|
+
return 'pointer';
|
|
210
|
+
else
|
|
211
|
+
return 'default';
|
|
153
212
|
});
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
213
|
+
let getRange = function (d) {
|
|
214
|
+
let index = data_ready.indexOf(d);
|
|
215
|
+
return data[0] + ' and ' + data[data.length - 1];
|
|
216
|
+
};
|
|
217
|
+
let pointerHeadLength = Math.round(radius * self.chartConfiguration.pointerHeadLengthPercent);
|
|
218
|
+
var lineData = [
|
|
219
|
+
[self.chartConfiguration.pointerWidth / 2, 0],
|
|
159
220
|
[0, -pointerHeadLength],
|
|
160
|
-
[-(
|
|
161
|
-
[0,
|
|
162
|
-
[
|
|
221
|
+
[-(self.chartConfiguration.pointerWidth / 2), 0],
|
|
222
|
+
[0, self.chartConfiguration.pointerTailLength],
|
|
223
|
+
[self.chartConfiguration.pointerWidth / 2, 0],
|
|
163
224
|
];
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const range = data[data.length - 1] - data[0];
|
|
167
|
-
const pointerAngle = this.chartConfiguration.minAngle + (pointerValue / range) * 180;
|
|
168
|
-
svg
|
|
225
|
+
var pointerLine = d3.line();
|
|
226
|
+
var pg = svg
|
|
169
227
|
.append('g')
|
|
170
228
|
.data([lineData])
|
|
171
229
|
.attr('class', 'pointer')
|
|
172
|
-
.attr('transform',
|
|
173
|
-
|
|
230
|
+
.attr('transform', centerTx);
|
|
231
|
+
var pointerValue = metaData.currentValue - data[0];
|
|
232
|
+
var range = data[data_length - 1] - data[0];
|
|
233
|
+
var pointerAngle = self.chartConfiguration.minAngle + (pointerValue / range) * 180;
|
|
234
|
+
pg.append('path')
|
|
174
235
|
.attr('d', pointerLine)
|
|
175
|
-
.attr('fill',
|
|
176
|
-
.attr('transform',
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
236
|
+
.attr('fill', self.chartConfiguration.pointerColor)
|
|
237
|
+
.attr('transform', 'rotate(' +
|
|
238
|
+
pointerAngle +
|
|
239
|
+
') translate(0,' +
|
|
240
|
+
(-radius + self.chartConfiguration.ringWidth + pointerHeadLength) +
|
|
241
|
+
')');
|
|
242
|
+
var lg = svg.append('g').attr('class', 'label').attr('transform', centerTx);
|
|
243
|
+
let labelArrayTemp = [{ name: data[0], value: 0 }];
|
|
244
|
+
let count = 0;
|
|
245
|
+
data_ready.map(function (dataUnit, i) {
|
|
246
|
+
count += dataUnit;
|
|
247
|
+
let temp = { name: data[i + 1], value: count };
|
|
248
|
+
labelArrayTemp.push(temp);
|
|
249
|
+
});
|
|
250
|
+
labelArray = labelArrayTemp;
|
|
251
|
+
lg.selectAll('.bubble')
|
|
182
252
|
.data(labelArray)
|
|
183
253
|
.enter()
|
|
184
254
|
.append('g')
|
|
185
|
-
.attr('transform', (d)
|
|
186
|
-
|
|
187
|
-
return
|
|
188
|
-
|
|
189
|
-
|
|
255
|
+
.attr('transform', function (d) {
|
|
256
|
+
var newAngle = self.chartConfiguration.minAngle + (d.value / range) * 180;
|
|
257
|
+
return ('rotate(' +
|
|
258
|
+
newAngle +
|
|
259
|
+
') translate(0,' +
|
|
260
|
+
(self.chartConfiguration.labelInset - radius - 20) +
|
|
261
|
+
')');
|
|
262
|
+
})
|
|
263
|
+
.append('g')
|
|
264
|
+
.attr('transform', function (d, i) {
|
|
265
|
+
var newAngle = self.chartConfiguration.minAngle + (d.value / range) * 180;
|
|
266
|
+
if (i == 0 && self.chartConfiguration.isValueLableAdjust) {
|
|
267
|
+
return 'rotate(' + (0 - newAngle) + ') translate(-27,0)';
|
|
268
|
+
}
|
|
269
|
+
if (i == labelArray.length - 1 &&
|
|
270
|
+
self.chartConfiguration.isValueLableAdjust) {
|
|
271
|
+
return 'rotate(' + (0 - newAngle) + ') translate(-15,0)';
|
|
272
|
+
}
|
|
273
|
+
return 'rotate(' + (0 - newAngle) + ') translate(-17,0)';
|
|
274
|
+
})
|
|
190
275
|
.append('text')
|
|
276
|
+
.attr('style', function (d) {
|
|
277
|
+
if (window.innerWidth < 1400)
|
|
278
|
+
return 'font-size: ' + '12px' + '; font-weight:' + '600;';
|
|
279
|
+
else
|
|
280
|
+
return 'font-size: ' + '14px' + '; font-weight:' + '600;';
|
|
281
|
+
})
|
|
191
282
|
.attr('fill', 'var(--chart-text-color)')
|
|
192
|
-
.
|
|
193
|
-
.
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
283
|
+
.text(function (d) {
|
|
284
|
+
if (metaData.dataType) {
|
|
285
|
+
return d.name + metaData.dataType;
|
|
286
|
+
}
|
|
287
|
+
return d.name;
|
|
288
|
+
});
|
|
197
289
|
svg
|
|
198
290
|
.append('foreignObject')
|
|
199
|
-
.attr('transform',
|
|
200
|
-
|
|
291
|
+
.attr('transform', 'translate(' +
|
|
292
|
+
(radius - this.chartConfiguration.currentValueWidthScaleFactor / 2) +
|
|
293
|
+
',' +
|
|
294
|
+
topTextPosition +
|
|
295
|
+
')')
|
|
296
|
+
.attr('width', this.chartConfiguration.currentValueWidthScaleFactor + 8)
|
|
201
297
|
.attr('height', this.chartConfiguration.currentValueHeightScaleFactor)
|
|
202
298
|
.append('xhtml:div')
|
|
203
299
|
.attr('class', 'value-display')
|
|
204
|
-
.
|
|
300
|
+
.style('height', this.chartConfiguration.currentValueHeightScaleFactor + 10 + 'px')
|
|
301
|
+
.style('font-size', function () {
|
|
302
|
+
if (window.innerWidth > 1500) {
|
|
303
|
+
self.chartConfiguration.currentValueHeightScaleFactor - 25 + 'px';
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
self.chartConfiguration.currentValueHeightScaleFactor - 15 + 'px';
|
|
307
|
+
}
|
|
308
|
+
})
|
|
309
|
+
.html(metaData.currentValue + metaData.dataType);
|
|
205
310
|
if (metaData.status) {
|
|
311
|
+
let widthTemp = metaData.status.length > 4 ? 210 : 120;
|
|
206
312
|
svg
|
|
207
313
|
.append('foreignObject')
|
|
208
|
-
.attr('transform',
|
|
209
|
-
.attr('width',
|
|
314
|
+
.attr('transform', 'translate(' + (radius - widthTemp / 2) + ',' + midTextPosition + ')')
|
|
315
|
+
.attr('width', widthTemp)
|
|
316
|
+
.attr('height', this.chartConfiguration.currentValueHeightScaleFactor + 10)
|
|
210
317
|
.append('xhtml:div')
|
|
211
318
|
.attr('class', 'status-display')
|
|
319
|
+
.style('font-size', this.chartConfiguration.currentValueHeightScaleFactor - 25 + 'px')
|
|
212
320
|
.html(metaData.status);
|
|
213
321
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
322
|
+
svg
|
|
323
|
+
.append('foreignObject')
|
|
324
|
+
.attr('transform', 'translate(' + (radius - 105) + ',' + bottomTextPosition + ')')
|
|
325
|
+
.attr('width', 210)
|
|
326
|
+
.attr('height', this.chartConfiguration.currentValueHeightScaleFactor)
|
|
327
|
+
.append('xhtml:div')
|
|
328
|
+
.attr('class', 'daterange-display')
|
|
329
|
+
.style('font-size', function () {
|
|
330
|
+
if (self.chartConfiguration.isDrilldownChart) {
|
|
331
|
+
{
|
|
332
|
+
if (window.innerWidth < 1400)
|
|
333
|
+
return '14px';
|
|
334
|
+
else
|
|
335
|
+
return '18px';
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
if (window.innerWidth < 1400)
|
|
340
|
+
return '14px';
|
|
341
|
+
else
|
|
342
|
+
return '18px';
|
|
343
|
+
}
|
|
344
|
+
})
|
|
345
|
+
.html(function () {
|
|
346
|
+
var desiredSize;
|
|
347
|
+
if (window.innerWidth < 1400)
|
|
348
|
+
desiredSize = '14px';
|
|
349
|
+
else
|
|
350
|
+
desiredSize = '18px';
|
|
351
|
+
if (metaData.dateRange)
|
|
352
|
+
return ('<span class="marginright-3"><i class="fa fa-calendar"></i></span><span> ' +
|
|
353
|
+
metaData.dateRange +
|
|
354
|
+
'</span>');
|
|
355
|
+
else
|
|
356
|
+
return '';
|
|
357
|
+
});
|
|
358
|
+
var containerMidWidth = parseInt(chartContainer.style('width')) / 2;
|
|
359
|
+
var nodeHalfWidth = svg.node().getBoundingClientRect().width / 2;
|
|
360
|
+
var updatedStartingPoint = containerMidWidth - nodeHalfWidth;
|
|
361
|
+
svg.attr('transform', 'translate(' +
|
|
362
|
+
(updatedStartingPoint + margin.left) +
|
|
363
|
+
',' +
|
|
364
|
+
margin.top +
|
|
365
|
+
')');
|
|
235
366
|
}
|
|
236
367
|
handleClick(d) {
|
|
237
368
|
this.clickEvent.emit(d);
|
|
@@ -260,4 +391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
260
391
|
}], headerMenuclickEvent: [{
|
|
261
392
|
type: Output
|
|
262
393
|
}] } });
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhZ2UtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2d1YWdlLWNoYXJ0L2d1YWdlLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ndWFnZS1jaGFydC9ndWFnZS1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQVFsRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsaUJBQWlCO0lBNkN4RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBeENBLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFekQsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsYUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVyQix5QkFBb0IsR0FBRztZQUM5QixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVB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QyxDQUFNO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxFQUFPO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQzsrR0F6U1UsbUJBQW1CO21HQUFuQixtQkFBbUIseWdCQ3ZCaEMsc2dDQVlNOzs0RkRXTyxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGlCQUdaLGlCQUFpQixDQUFDLElBQUk7d0RBR2UsWUFBWTtzQkFBL0QsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0gsaUJBQWlCO3NCQUEvRCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0IHsgUmVzaXplZEV2ZW50IH0gZnJvbSAnYW5ndWxhci1yZXNpemUtZXZlbnQnO1xyXG5pbXBvcnQgSGVhZGVyQ29uZmlnSGVscGVyIGZyb20gJy4uL2hlYWRlci1jb25maWcnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZ3VhZ2UtY2hhcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ndWFnZS1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3VhZ2UtY2hhcnQuY29tcG9uZW50Lmxlc3MnLCAnLi4vY29tbW9uLXN0eWxlcy5sZXNzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEd1YWdlQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRVbmlxdWVJZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBAVmlld0NoaWxkKCdndWFnZWNoYXJ0Y29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdndWFnZWNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIGd1YWdlY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgY2hhcnRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuICBkYXRhVHlwZTogc3RyaW5nID0gJyc7XHJcbiAgZGF0YXR5cGVfc3RhdHVzID0gZmFsc2U7XHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICB1bmlxdWVJZCA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuXHJcbiAgcmVhZG9ubHkgZGVmYXVsdENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICBtYXJnaW46IHsgdG9wOiA0MCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiAyMCB9LFxyXG4gICAgbWluQW5nbGU6IC05MCxcclxuICAgIG1heEFuZ2xlOiA5MCxcclxuICAgIHJpbmdJbnNldDogMjAsXHJcbiAgICByaW5nV2lkdGg6IDIwLFxyXG4gICAgbWFqb3JUaWNrczogMyxcclxuICAgIHN2Z0hlaWdodDogODAsXHJcbiAgICBsb3dfY29sb3JNYXA6IFsnIzQzQ0MwMCcsICcjRkZFRjBDJywgJyNGRjRFMEMnXSxcclxuICAgIGhpZ2hfY29sb3JNYXA6IFsnI0ZGNEUwQycsICcjRkZFRjBDJywgJyM0M0NDMDAnXSxcclxuICAgIGlzSGVhZGVyVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgcG9pbnRlcldpZHRoOiAxMCxcclxuICAgIHBvaW50ZXJUYWlsTGVuZ3RoOiA1LFxyXG4gICAgcG9pbnRlckhlYWRMZW5ndGhQZXJjZW50OiAwLjcsXHJcbiAgICBsYWJlbEluc2V0OiAxMCxcclxuICAgIGxlZ2VuZEp1c3RpZmllZDogZmFsc2UsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHVuZGVmaW5lZCxcclxuICAgIHJpbmdTY2FsZUZhY3RvcjogMCxcclxuICAgIHRleHRzQXRDZW50ZXJTY2FsZUZhY3RvcjogMCxcclxuICAgIGN1cnJlbnRWYWx1ZVdpZHRoU2NhbGVGYWN0b3I6IDYwLFxyXG4gICAgY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3I6IDMwLFxyXG4gICAgcG9pbnRlckNvbG9yOiAnIzY4Njg2OCcsXHJcbiAgICBpc1RvZ2dsZVZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIHNlbGVjdGVkS3BpVG9vbHRvcDogdW5kZWZpbmVkLFxyXG4gICAgaXNWYWx1ZUxhYmxlQWRqdXN0OiB1bmRlZmluZWQsXHJcbiAgICBpc1RpdGxlSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBbGVydEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24/LmhlYWRlck1lbnVPcHRpb25zPy5zb21lKChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gJ2VkaXRBbGVydCcpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVkcmF3Q2hhcnQoKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChfOiBSZXNpemVkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMucmVkcmF3Q2hhcnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVkcmF3Q2hhcnQoKTogdm9pZCB7XHJcbiAgICBkMy5zZWxlY3QoYCMke3RoaXMudW5pcXVlSWR9YCkucmVtb3ZlKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVDaGFydENvbmZpZygpO1xyXG4gICAgdGhpcy5kcmF3R2F1Z2VDaGFydCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplQ2hhcnRDb25maWcoKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uW2tleV0gPSBDaGFydEhlbHBlci5nZXRWYWx1ZUJ5Q29uZmlndXJhdGlvblR5cGUoXHJcbiAgICAgICAga2V5LFxyXG4gICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWV0YURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YTtcclxuICAgIGlmIChtZXRhRGF0YS5kYXRhVHlwZSkge1xyXG4gICAgICB0aGlzLmRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgPT09ICdVU0QnID8gJyQgJyA6IG1ldGFEYXRhLmRhdGFUeXBlO1xyXG4gICAgICB0aGlzLmRhdGF0eXBlX3N0YXR1cyA9IG1ldGFEYXRhLmRhdGFUeXBlID09PSAnVVNEJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZHJhd0dhdWdlQ2hhcnQoKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGRhdGEsIG1ldGFEYXRhIH0gPSB0aGlzLmNoYXJ0RGF0YTtcclxuICAgIGNvbnN0IGNvbG9yTWFwcyA9XHJcbiAgICAgIG1ldGFEYXRhLmNvbG9yVHlwZSA9PT0gJ2xvdydcclxuICAgICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxvd19jb2xvck1hcFxyXG4gICAgICAgIDogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaGlnaF9jb2xvck1hcDtcclxuXHJcbiAgICBjb25zdCBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IGd1YWdlY29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuZ3VhZ2Vjb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICBjb25zdCBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcblxyXG4gICAgY29uc3Qgd2lkdGggPSBwYXJzZUludChjaGFydENvbnRhaW5lci5zdHlsZSgnd2lkdGgnKSkgLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcclxuICAgIGNvbnN0IGhlaWdodCA9XHJcbiAgICAgIHBhcnNlSW50KGd1YWdlY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbSAtIDU2O1xyXG5cclxuICAgIGNvbnN0IHN2ZyA9IHRoaXMuY3JlYXRlU3ZnKGNoYXJ0Q29udGFpbmVyLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIGNvbnN0IHJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMjtcclxuXHJcbiAgICB0aGlzLmFkanVzdEZvclNjcmVlbkFuZERyaWxsZG93bihyYWRpdXMpO1xyXG5cclxuICAgIGNvbnN0IHsgZGF0YV9yZWFkeSwgYW5nbGVWYWx1ZSwgbGFiZWxBcnJheSwgcmFuZ2UgfSA9IHRoaXMucHJlcGFyZUdhdWdlRGF0YShkYXRhKTtcclxuXHJcbiAgICB0aGlzLmRyYXdBcmNzKHN2ZywgZGF0YV9yZWFkeSwgYW5nbGVWYWx1ZSwgcmFkaXVzLCBjb2xvck1hcHMsIG1ldGFEYXRhKTtcclxuICAgIHRoaXMuZHJhd1BvaW50ZXIoc3ZnLCByYWRpdXMsIGRhdGEsIG1ldGFEYXRhKTtcclxuICAgIHRoaXMuZHJhd0xhYmVscyhzdmcsIHJhZGl1cywgbGFiZWxBcnJheSwgcmFuZ2UsIG1ldGFEYXRhKTtcclxuICAgIHRoaXMuZHJhd0NlbnRlclRleHRzKHN2ZywgcmFkaXVzLCBtZXRhRGF0YSk7XHJcbiAgICB0aGlzLmFsaWduU3ZnKHN2ZywgY2hhcnRDb250YWluZXIsIG1hcmdpbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVN2ZyhjaGFydENvbnRhaW5lcjogYW55LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIGNoYXJ0Q29udGFpbmVyXHJcbiAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgIC5hdHRyKCdpZCcsIHRoaXMudW5pcXVlSWQpXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIHdpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0KVxyXG4gICAgICAuY2FsbChDaGFydEhlbHBlci5yZXNwb25zaXZlZnkpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRqdXN0Rm9yU2NyZWVuQW5kRHJpbGxkb3duKHJhZGl1czogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVXaWR0aFNjYWxlRmFjdG9yICs9IDQwO1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVIZWlnaHRTY2FsZUZhY3RvciArPSAyMDtcclxuICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPiAxNDAwKSB7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yICs9IDE1O1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVXaWR0aFNjYWxlRmFjdG9yICo9IDI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVHYXVnZURhdGEoZGF0YTogbnVtYmVyW10pIHtcclxuICAgIGNvbnN0IGRhdGFfcmVhZHkgPSBkYXRhLnNsaWNlKDEpLm1hcCgoZCwgaSkgPT4gZCAtIGRhdGFbaV0pO1xyXG4gICAgY29uc3QgdG90YWwgPSBkYXRhX3JlYWR5LnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xyXG5cclxuICAgIGNvbnN0IGFuZ2xlVmFsdWUgPSBkYXRhX3JlYWR5Lm1hcChcclxuICAgICAgKChzdW0pID0+ICh1bml0OiBudW1iZXIpID0+IChzdW0gKz0gKHVuaXQgLyB0b3RhbCkgKiAxODApKSgwKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBsYWJlbEFycmF5ID0gW3sgbmFtZTogZGF0YVswXSwgdmFsdWU6IDAgfV07XHJcbiAgICBkYXRhX3JlYWR5LnJlZHVjZSgoYWNjLCB2YWwsIGkpID0+IHtcclxuICAgICAgY29uc3QgbmV4dCA9IGFjYyArIHZhbDtcclxuICAgICAgbGFiZWxBcnJheS5wdXNoKHsgbmFtZTogZGF0YVtpICsgMV0sIHZhbHVlOiBuZXh0IH0pO1xyXG4gICAgICByZXR1cm4gbmV4dDtcclxuICAgIH0sIDApO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdIC0gZGF0YVswXTtcclxuICAgIHJldHVybiB7IGRhdGFfcmVhZHksIGFuZ2xlVmFsdWUsIGxhYmVsQXJyYXksIHJhbmdlIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRyYXdBcmNzKHN2ZzogYW55LCBkYXRhX3JlYWR5OiBhbnlbXSwgYW5nbGVWYWx1ZTogbnVtYmVyW10sIHJhZGl1czogbnVtYmVyLCBjb2xvck1hcHM6IHN0cmluZ1tdLCBtZXRhRGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBhcmMgPSBkM1xyXG4gICAgICAuYXJjKClcclxuICAgICAgLmlubmVyUmFkaXVzKHJhZGl1cyAtIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnJpbmdXaWR0aCAtIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnJpbmdJbnNldClcclxuICAgICAgLm91dGVyUmFkaXVzKHJhZGl1cylcclxuICAgICAgLnN0YXJ0QW5nbGUoKF86IGFueSwgaTogbnVtYmVyKSA9PlxyXG4gICAgICAgIHRoaXMuZGVnMnJhZChpID09PSAwID8gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWluQW5nbGUgOiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5taW5BbmdsZSArIGFuZ2xlVmFsdWVbaSAtIDFdKVxyXG4gICAgICApXHJcbiAgICAgIC5lbmRBbmdsZSgoXzogYW55LCBpOiBudW1iZXIpID0+XHJcbiAgICAgICAgdGhpcy5kZWcycmFkKFxyXG4gICAgICAgICAgaSA9PT0gZGF0YV9yZWFkeS5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgID8gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWF4QW5nbGVcclxuICAgICAgICAgICAgOiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5taW5BbmdsZSArIGFuZ2xlVmFsdWVbaV1cclxuICAgICAgICApXHJcbiAgICAgICk7XHJcblxyXG4gICAgY29uc3QgYXJjcyA9IHN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdhcmMnKS5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7cmFkaXVzfSwke3JhZGl1c30pYCk7XHJcblxyXG4gICAgYXJjc1xyXG4gICAgICAuc2VsZWN0QWxsKCdwYXRoJylcclxuICAgICAgLmRhdGEoZGF0YV9yZWFkeSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgKF8sIGkpID0+IGNvbG9yTWFwc1tpXSlcclxuICAgICAgLmF0dHIoJ2QnLCBhcmMpXHJcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgKCkgPT5cclxuICAgICAgICBtZXRhRGF0YS5jdXJyZW50VmFsdWUgPiAwICYmIG1ldGFEYXRhLmhhc0RyaWxsRG93biA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J1xyXG4gICAgICApXHJcbiAgICAgIC5vbignY2xpY2snLCAoZXZlbnQ6IGFueSwgZDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93biAmJiBtZXRhRGF0YS5jdXJyZW50VmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKHRoaXMuZ2V0UmFuZ2UoZCwgZGF0YV9yZWFkeSwgbWV0YURhdGEpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkcmF3UG9pbnRlcihzdmc6IGFueSwgcmFkaXVzOiBudW1iZXIsIGRhdGE6IG51bWJlcltdLCBtZXRhRGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBwb2ludGVySGVhZExlbmd0aCA9IE1hdGgucm91bmQocmFkaXVzICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ucG9pbnRlckhlYWRMZW5ndGhQZXJjZW50KTtcclxuICAgIGNvbnN0IGxpbmVEYXRhID0gW1xyXG4gICAgICBbdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ucG9pbnRlcldpZHRoIC8gMiwgMF0sXHJcbiAgICAgIFswLCAtcG9pbnRlckhlYWRMZW5ndGhdLFxyXG4gICAgICBbLSh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5wb2ludGVyV2lkdGggLyAyKSwgMF0sXHJcbiAgICAgIFswLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5wb2ludGVyVGFpbExlbmd0aF0sXHJcbiAgICAgIFt0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5wb2ludGVyV2lkdGggLyAyLCAwXSxcclxuICAgIF07XHJcbiAgICBjb25zdCBwb2ludGVyTGluZSA9IGQzLmxpbmUoKTtcclxuICAgIGNvbnN0IHBvaW50ZXJWYWx1ZSA9IG1ldGFEYXRhLmN1cnJlbnRWYWx1ZSAtIGRhdGFbMF07XHJcbiAgICBjb25zdCByYW5nZSA9IGRhdGFbZGF0YS5sZW5ndGggLSAxXSAtIGRhdGFbMF07XHJcbiAgICBjb25zdCBwb2ludGVyQW5nbGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5taW5BbmdsZSArIChwb2ludGVyVmFsdWUgLyByYW5nZSkgKiAxODA7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuZGF0YShbbGluZURhdGFdKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAncG9pbnRlcicpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7cmFkaXVzfSwke3JhZGl1c30pYClcclxuICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgIC5hdHRyKCdkJywgcG9pbnRlckxpbmUpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ucG9pbnRlckNvbG9yKVxyXG4gICAgICAuYXR0cihcclxuICAgICAgICAndHJhbnNmb3JtJyxcclxuICAgICAgICBgcm90YXRlKCR7cG9pbnRlckFuZ2xlfSkgdHJhbnNsYXRlKDAsJHtcclxuICAgICAgICAgIC1yYWRpdXMgKyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5yaW5nV2lkdGggKyBwb2ludGVySGVhZExlbmd0aFxyXG4gICAgICAgIH0pYFxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkcmF3TGFiZWxzKHN2ZzogYW55LCByYWRpdXM6IG51bWJlciwgbGFiZWxBcnJheTogYW55W10sIHJhbmdlOiBudW1iZXIsIG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxnID0gc3ZnLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2xhYmVsJykuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3JhZGl1c30sJHtyYWRpdXN9KWApO1xyXG5cclxuICAgIGNvbnN0IGxhYmVsR3JvdXBzID0gbGdcclxuICAgICAgLnNlbGVjdEFsbCgnLmJ1YmJsZScpXHJcbiAgICAgIC5kYXRhKGxhYmVsQXJyYXkpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQpID0+IHtcclxuICAgICAgICBjb25zdCBhbmdsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1pbkFuZ2xlICsgKGQudmFsdWUgLyByYW5nZSkgKiAxODA7XHJcbiAgICAgICAgcmV0dXJuIGByb3RhdGUoJHthbmdsZX0pIHRyYW5zbGF0ZSgwLCR7dGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxJbnNldCAtIHJhZGl1cyAtIDIwfSlgO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBsYWJlbEdyb3Vwc1xyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCA/ICcxMnB4JyA6ICcxNHB4JylcclxuICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICc2MDAnKVxyXG4gICAgICAudGV4dCgoZCkgPT4gYCR7ZC5uYW1lfSR7bWV0YURhdGEuZGF0YVR5cGUgfHwgJyd9YCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRyYXdDZW50ZXJUZXh0cyhzdmc6IGFueSwgcmFkaXVzOiBudW1iZXIsIG1ldGFEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtyYWRpdXMgLSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVXaWR0aFNjYWxlRmFjdG9yIC8gMn0sJHtyYWRpdXMgLyAyIC0gMTB9KWApXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1cnJlbnRWYWx1ZVdpZHRoU2NhbGVGYWN0b3IpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVIZWlnaHRTY2FsZUZhY3RvcilcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3ZhbHVlLWRpc3BsYXknKVxyXG4gICAgICAuaHRtbChgJHttZXRhRGF0YS5jdXJyZW50VmFsdWV9JHttZXRhRGF0YS5kYXRhVHlwZSB8fCAnJ31gKTtcclxuXHJcbiAgICBpZiAobWV0YURhdGEuc3RhdHVzKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7cmFkaXVzIC0gNjB9LCR7cmFkaXVzIC8gMiArIDIwfSlgKVxyXG4gICAgICAgIC5hdHRyKCd3aWR0aCcsIDEyMClcclxuICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdzdGF0dXMtZGlzcGxheScpXHJcbiAgICAgICAgLmh0bWwobWV0YURhdGEuc3RhdHVzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWV0YURhdGEuZGF0ZVJhbmdlKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7cmFkaXVzIC0gMTA1fSwke3JhZGl1cyAvIDIgKyA1MH0pYClcclxuICAgICAgICAuYXR0cignd2lkdGgnLCAyMTApXHJcbiAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZGF0ZXJhbmdlLWRpc3BsYXknKVxyXG4gICAgICAgIC5odG1sKFxyXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwibWFyZ2lucmlnaHQtM1wiPjxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIj48L2k+PC9zcGFuPiR7bWV0YURhdGEuZGF0ZVJhbmdlfWBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhbGlnblN2Zyhzdmc6IGFueSwgY2hhcnRDb250YWluZXI6IGFueSwgbWFyZ2luOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lck1pZCA9IHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAvIDI7XHJcbiAgICBjb25zdCBub2RlSGFsZiA9IHN2Zy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyAyO1xyXG4gICAgc3ZnLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtjb250YWluZXJNaWQgLSBub2RlSGFsZiArIG1hcmdpbi5sZWZ0fSwke21hcmdpbi50b3B9KWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSYW5nZShkOiBhbnksIGRhdGFfcmVhZHk6IGFueVtdLCBtZXRhRGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gICAgcmV0dXJuIGAke2RhdGFbMF19IGFuZCAke2RhdGFbZGF0YS5sZW5ndGggLSAxXX1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWcycmFkKGRlZzogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoZGVnICogTWF0aC5QSSkgLyAxODA7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDbGljayhkOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVhZGVyTWVudWNsaWNrRXZlbnQuZW1pdChpZCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2d1YWdlY29udGFpbmVyIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFsdFwiICpuZ0lmPVwiIWlzSGVhZGVyVmlzaWJsZVwiPlxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjIgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIiBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjbGlja0V2ZW50KT1cImhhbmRsZUNsaWNrKCRldmVudClcIj48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcbiAgPC9kaXY+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjEgW3RpdGxlXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS50aXRsZVwiIFtoYXNEcmlsbERvd25dPVwiY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93blwiXHJcbiAgICBbaXNFZGl0RW5hYmxlZF09XCJjaGFydERhdGEubWV0YURhdGEuaXNFZGl0RW5hYmxlZFwiIFtpc3JpYV09XCJjdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcIiBbbWVudU9wdGlvbnNdPVwiY2hhcnRDb25maWd1cmF0aW9uLmhlYWRlck1lbnVPcHRpb25zXCJcclxuICAgIFtzZWxlY3RlZEtwaVRvb2x0b3BdPVwiY2hhcnRDb25maWd1cmF0aW9uLnNlbGVjdGVkS3BpVG9vbHRvcFwiIChtZW51T3B0aW9uQ2xpY2tFdmVudCk9XCJoYW5kbGVIZWFkZXJNZW51Q2xpY2soJGV2ZW50KVwiXHJcbiAgICBbaXNBbGVydEVuYWJsZWRdPVwiaXNBbGVydEVuYWJsZWRcIiAqbmdJZj1cImlzSGVhZGVyVmlzaWJsZVwiPjwvbGliLWNoYXJ0LWhlYWRlci12MT5cclxuICA8ZGl2IFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiIGlkPVwiZ3VhZ2VjaGFydGNvbnRhaW5lclwiICNndWFnZWNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmcgZ3VhZ2Vjb250YWluZXJcIj48L2Rpdj5cclxuPC9kaXY+Il19
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhZ2UtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2d1YWdlLWNoYXJ0L2d1YWdlLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ndWFnZS1jaGFydC9ndWFnZS1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQVFsRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsaUJBQWlCO0lBK0N4RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBdkNBLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekQsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsYUFBUSxHQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUVoQyx5QkFBb0IsR0FBUTtZQUMxQixNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVB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WCxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbEQsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tICcuLi9jaGFydC1oZWxwZXInO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1ndWFnZS1jaGFydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2d1YWdlLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ndWFnZS1jaGFydC5jb21wb25lbnQubGVzcycsICcuLi9jb21tb24tc3R5bGVzLmxlc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3VhZ2VDaGFydENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdndWFnZWNoYXJ0Y29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBjb250YWluZXJFbHQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCdndWFnZWNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZ3VhZ2Vjb250YWluZXJFbHQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoKSBjaGFydERhdGE6IGFueTtcclxuICBASW5wdXQoKSBjdXN0b21DaGFydENvbmZpZ3VyYXRpb246IGFueTtcclxuICBAT3V0cHV0KCkgY2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBoZWFkZXJNZW51Y2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgZGF0YVR5cGU6IGFueSA9ICcnO1xyXG4gIGRhdGF0eXBlX3N0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHVuaXF1ZUlkOiBhbnkgPSB0aGlzLmdldFVuaXF1ZUlkKCk7XHJcbiAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgZGVmYXVsdENvbmZpZ3VyYXRpb246IGFueSA9IHtcclxuICAgIG1hcmdpbjogeyB0b3A6IDQwLCByaWdodDogMjAsIGJvdHRvbTogMjAsIGxlZnQ6IDIwIH0sXHJcbiAgICBtaW5BbmdsZTogLTkwLFxyXG4gICAgbWF4QW5nbGU6IDkwLFxyXG4gICAgcmluZ0luc2V0OiAyMCxcclxuICAgIHJpbmdXaWR0aDogMjAsXHJcbiAgICBtYWpvclRpY2tzOiAzLFxyXG4gICAgc3ZnSGVpZ2h0OiA4MCxcclxuICAgIGxvd19jb2xvck1hcDogWycjNDNDQzAwJywgJyNGRkVGMEMnLCAnI0ZGNEUwQyddLFxyXG4gICAgaGlnaF9jb2xvck1hcDogWycjRkY0RTBDJywgJyNGRkVGMEMnLCAnIzQzQ0MwMCddLFxyXG4gICAgaXNIZWFkZXJWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBwb2ludGVyV2lkdGg6IDEwLFxyXG4gICAgcG9pbnRlclRhaWxMZW5ndGg6IDUsXHJcbiAgICBwb2ludGVySGVhZExlbmd0aFBlcmNlbnQ6IDAuNyxcclxuICAgIGxhYmVsSW5zZXQ6IDEwLFxyXG4gICAgbGVnZW5kSnVzdGlmaWVkOiBmYWxzZSxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgaXNEcmlsbGRvd25DaGFydDogdW5kZWZpbmVkLFxyXG4gICAgcmluZ1NjYWxlRmFjdG9yOiAwLFxyXG4gICAgdGV4dHNBdENlbnRlclNjYWxlRmFjdG9yOiAwLFxyXG4gICAgY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvcjogNjAsXHJcbiAgICBjdXJyZW50VmFsdWVIZWlnaHRTY2FsZUZhY3RvcjogMzAsXHJcbiAgICBwb2ludGVyQ29sb3I6ICcjNjg2ODY4JyxcclxuICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgc2VsZWN0ZWRLcGlUb29sdG9wOiB1bmRlZmluZWQsXHJcbiAgICBpc1ZhbHVlTGFibGVBZGp1c3Q6IHVuZGVmaW5lZCxcclxuICAgIGlzVGl0bGVIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICByZXR1cm4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24/LmhlYWRlck1lbnVPcHRpb25zPy5zb21lKG9wdGlvbiA9PiBvcHRpb24uaWQgPT09ICdlZGl0QWxlcnQnKTtcclxufVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgIGQzLnNlbGVjdCgnIycgKyBzZWxmLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUxpbmVDaGFydCgpO1xyXG4gIH1cclxuICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCkge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgZDMuc2VsZWN0KCcjJyArIHNlbGYudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplTGluZUNoYXJ0KCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgaW5pdGlhbGl6ZUxpbmVDaGFydCgpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIGxldCBkYXRhID0gW107XHJcbiAgICBsZXQgbWV0YURhdGE6IGFueSA9IG51bGw7XHJcbiAgICBsZXQgY29sb3JNYXBzID0gW107XHJcbiAgICBsZXQgYW5nbGVWYWx1ZSA9IFtdO1xyXG4gICAgbGV0IGRhdGFfcmVhZHk6IGFueSA9IFtdO1xyXG4gICAgbGV0IGxhYmVsQXJyYXk6IGFueSA9IFtdO1xyXG4gICAgbGV0IGNvbG9yVHlwZSA9IG51bGw7XHJcblxyXG4gICBsZXQgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVxyXG5cclxuICAgIGZvciAodmFyIGkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltpXSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBpLFxyXG4gICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkYXRhID0gdGhpcy5jaGFydERhdGEuZGF0YTtcclxuICAgIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcblxyXG4gICAgY29sb3JUeXBlID0gbWV0YURhdGEuY29sb3JUeXBlO1xyXG4gICAgaWYgKGNvbG9yVHlwZSA9PSAnbG93Jykge1xyXG4gICAgICBjb2xvck1hcHMgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sb3dfY29sb3JNYXA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb2xvck1hcHMgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5oaWdoX2NvbG9yTWFwO1xyXG4gICAgfVxyXG4gICAgaWYgKG1ldGFEYXRhLmRhdGFUeXBlKSB7XHJcbiAgICAgIHRoaXMuZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZTtcclxuICAgICAgaWYgKHRoaXMuZGF0YVR5cGUgPT0gJ1VTRCcpIHtcclxuICAgICAgICB0aGlzLmRhdGF0eXBlX3N0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kYXRhVHlwZSA9ICckICc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkYXRhLm1hcChmdW5jdGlvbiAoZGF0YVVuaXQsIGkpIHtcclxuICAgICAgaWYgKGkgPCBkYXRhLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICBsZXQgZGlmZiA9IGRhdGFbaSArIDFdIC0gZGF0YVtpXTtcclxuICAgICAgICBkYXRhX3JlYWR5LnB1c2goZGlmZik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHZhciBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIHZhciBndWFnZWNvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmd1YWdlY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdmFyIG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuICAgIHZhciB3aWR0aCA9XHJcbiAgICAgIHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xyXG5cclxuICAgIHZhciBoZWlnaHQgPVxyXG4gICAgICBwYXJzZUludChndWFnZWNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgbWFyZ2luLnRvcCAtXHJcbiAgICAgIG1hcmdpbi5ib3R0b20gLVxyXG4gICAgICA1NjsgLy9jaGFydCBoZWFkZXIgaGVpZ2h0XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG5cclxuICAgIHZhciBzdmcgPSBjaGFydENvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignaWQnLCBzZWxmLnVuaXF1ZUlkKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCB3aWR0aCArIG1hcmdpbi5sZWZ0ICsgbWFyZ2luLnJpZ2h0KVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAgIC5jYWxsKENoYXJ0SGVscGVyLnJlc3BvbnNpdmVmeSlcclxuICAgICAgLmFwcGVuZCgnZycpO1xyXG5cclxuICAgIHZhciByYWRpdXMgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDI7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvciArPSA0MDtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3IgKz0gMjA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxNDAwKSB7XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3IgKz0gMTU7XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvciAqPSAyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgdG9wVGV4dFBvc2l0aW9uID0gcmFkaXVzIC8gMiAtIDEwO1xyXG4gICAgbGV0IG1pZFRleHRQb3NpdGlvbiA9XHJcbiAgICAgIHRvcFRleHRQb3NpdGlvbiArIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yO1xyXG4gICAgbGV0IGJvdHRvbVRleHRQb3NpdGlvbiA9XHJcbiAgICAgIG1pZFRleHRQb3NpdGlvbiArIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yO1xyXG4gICAgdmFyIGRhdGFfbGVuZ3RoID0gZGF0YS5sZW5ndGg7XHJcblxyXG4gICAgZnVuY3Rpb24gZGVnMnJhZChkZWcpIHtcclxuICAgICAgcmV0dXJuIChkZWcgKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgIH1cclxuICAgIGxldCB0ZW1wQXJyYXk6IGFueSA9IFtdO1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGRhdGFfcmVhZHkubWFwKGZ1bmN0aW9uICh1bml0KSB7XHJcbiAgICAgIHRvdGFsICs9IHVuaXQ7XHJcbiAgICB9KTtcclxuICAgIGRhdGFfcmVhZHkubWFwKGZ1bmN0aW9uICh1bml0LCBpKSB7XHJcbiAgICAgIHZhciBhbmdsZSA9ICh1bml0IC8gdG90YWwpICogMTgwO1xyXG4gICAgICBpZiAoaSA9PT0gMCkge1xyXG4gICAgICAgIHRlbXBBcnJheS5wdXNoKGFuZ2xlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgY3VycmVudEFuZ2xlID0gdGVtcEFycmF5W2kgLSAxXSArIGFuZ2xlO1xyXG4gICAgICAgIHRlbXBBcnJheS5wdXNoKGN1cnJlbnRBbmdsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgYW5nbGVWYWx1ZSA9IHRlbXBBcnJheTtcclxuXHJcbiAgICB2YXIgYXJjID0gZDNcclxuICAgICAgLmFyYygpXHJcbiAgICAgIC5pbm5lclJhZGl1cyhcclxuICAgICAgICByYWRpdXMgLVxyXG4gICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ucmluZ1dpZHRoIC1cclxuICAgICAgICAgIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnJpbmdJbnNldFxyXG4gICAgICApXHJcbiAgICAgIC5vdXRlclJhZGl1cyhyYWRpdXMpXHJcbiAgICAgIC5zdGFydEFuZ2xlKGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgdmFyIHJhdGlvO1xyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICByYXRpbyA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm1pbkFuZ2xlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByYXRpbyA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm1pbkFuZ2xlICsgYW5nbGVWYWx1ZVtpIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWcycmFkKHJhdGlvKTtcclxuICAgICAgfSlcclxuICAgICAgLmVuZEFuZ2xlKGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgdmFyIHJhdGlvO1xyXG4gICAgICAgIGlmIChpID09PSBkYXRhX3JlYWR5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgIHJhdGlvID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWF4QW5nbGU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJhdGlvID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWluQW5nbGUgKyBhbmdsZVZhbHVlW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVnMnJhZChyYXRpbyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNlbnRlclRyYW5zbGF0aW9uKCkge1xyXG4gICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgcmFkaXVzICsgJywnICsgcmFkaXVzICsgJyknO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjZW50ZXJUeCA9IGNlbnRlclRyYW5zbGF0aW9uKCk7XHJcbiAgICB2YXIgdGlja0RhdGEgPSBkM1xyXG4gICAgICAucmFuZ2Uoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWFqb3JUaWNrcylcclxuICAgICAgLm1hcChmdW5jdGlvbiAoaSkge1xyXG4gICAgICAgIHJldHVybiAxIC8gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWFqb3JUaWNrcztcclxuICAgICAgfSk7XHJcblxyXG4gICAgdmFyIGFyY3MgPSBzdmcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnYXJjJykuYXR0cigndHJhbnNmb3JtJywgY2VudGVyVHgpO1xyXG5cclxuICAgIGFyY3NcclxuICAgICAgLnNlbGVjdEFsbCgncGF0aCcpXHJcbiAgICAgIC5kYXRhKGRhdGFfcmVhZHkpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhLmhhc0RyaWxsRG93biB8fCBtZXRhRGF0YS5jdXJyZW50VmFsdWUgPT0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmFuZ2UgPSBnZXRSYW5nZShkKTtcclxuICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKHJhbmdlKTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgIHJldHVybiBjb2xvck1hcHNbaV07XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCdpZCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yTWFwc1tpXTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ2QnLCBhcmMpXHJcbiAgICAgIC8vIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKTtcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChtZXRhRGF0YS5jdXJyZW50VmFsdWUgPiAwICYmIG1ldGFEYXRhLmhhc0RyaWxsRG93biAmJiAhaXNyaWEpXHJcbiAgICAgICAgICByZXR1cm4gJ3BvaW50ZXInO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuICdkZWZhdWx0JztcclxuICAgICAgfSk7XHJcblxyXG4gICAgbGV0IGdldFJhbmdlID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgbGV0IGluZGV4ID0gZGF0YV9yZWFkeS5pbmRleE9mKGQpO1xyXG4gICAgICByZXR1cm4gZGF0YVswXSArICcgYW5kICcgKyBkYXRhW2RhdGEubGVuZ3RoIC0gMV07XHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBwb2ludGVySGVhZExlbmd0aCA9IE1hdGgucm91bmQoXHJcbiAgICAgIHJhZGl1cyAqIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnBvaW50ZXJIZWFkTGVuZ3RoUGVyY2VudFxyXG4gICAgKTtcclxuXHJcbiAgICB2YXIgbGluZURhdGEgPSBbXHJcbiAgICAgIFtzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5wb2ludGVyV2lkdGggLyAyLCAwXSxcclxuICAgICAgWzAsIC1wb2ludGVySGVhZExlbmd0aF0sXHJcbiAgICAgIFstKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnBvaW50ZXJXaWR0aCAvIDIpLCAwXSxcclxuICAgICAgWzAsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnBvaW50ZXJUYWlsTGVuZ3RoXSxcclxuICAgICAgW3NlbGYuY2hhcnRDb25maWd1cmF0aW9uLnBvaW50ZXJXaWR0aCAvIDIsIDBdLFxyXG4gICAgXTtcclxuXHJcbiAgICB2YXIgcG9pbnRlckxpbmUgPSBkMy5saW5lKCk7XHJcbiAgICB2YXIgcGcgPSBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5kYXRhKFtsaW5lRGF0YV0pXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdwb2ludGVyJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGNlbnRlclR4KTtcclxuXHJcbiAgICB2YXIgcG9pbnRlclZhbHVlID0gbWV0YURhdGEuY3VycmVudFZhbHVlIC0gZGF0YVswXTtcclxuICAgIHZhciByYW5nZSA9IGRhdGFbZGF0YV9sZW5ndGggLSAxXSAtIGRhdGFbMF07XHJcbiAgICB2YXIgcG9pbnRlckFuZ2xlID1cclxuICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWluQW5nbGUgKyAocG9pbnRlclZhbHVlIC8gcmFuZ2UpICogMTgwO1xyXG4gICAgcGcuYXBwZW5kKCdwYXRoJylcclxuICAgICAgLmF0dHIoJ2QnLCBwb2ludGVyTGluZSlcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5wb2ludGVyQ29sb3IpXHJcbiAgICAgIC5hdHRyKFxyXG4gICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICdyb3RhdGUoJyArXHJcbiAgICAgICAgICBwb2ludGVyQW5nbGUgK1xyXG4gICAgICAgICAgJykgdHJhbnNsYXRlKDAsJyArXHJcbiAgICAgICAgICAoLXJhZGl1cyArIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnJpbmdXaWR0aCArIHBvaW50ZXJIZWFkTGVuZ3RoKSArXHJcbiAgICAgICAgICAnKSdcclxuICAgICAgKTtcclxuXHJcbiAgICB2YXIgbGcgPSBzdmcuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnbGFiZWwnKS5hdHRyKCd0cmFuc2Zvcm0nLCBjZW50ZXJUeCk7XHJcbiAgICBsZXQgbGFiZWxBcnJheVRlbXAgPSBbeyBuYW1lOiBkYXRhWzBdLCB2YWx1ZTogMCB9XTtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICBkYXRhX3JlYWR5Lm1hcChmdW5jdGlvbiAoZGF0YVVuaXQsIGkpIHtcclxuICAgICAgY291bnQgKz0gZGF0YVVuaXQ7XHJcbiAgICAgIGxldCB0ZW1wID0geyBuYW1lOiBkYXRhW2kgKyAxXSwgdmFsdWU6IGNvdW50IH07XHJcbiAgICAgIGxhYmVsQXJyYXlUZW1wLnB1c2godGVtcCk7XHJcbiAgICB9KTtcclxuICAgIGxhYmVsQXJyYXkgPSBsYWJlbEFycmF5VGVtcDtcclxuXHJcbiAgICBsZy5zZWxlY3RBbGwoJy5idWJibGUnKVxyXG4gICAgICAuZGF0YShsYWJlbEFycmF5KVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgdmFyIG5ld0FuZ2xlID1cclxuICAgICAgICAgIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm1pbkFuZ2xlICsgKGQudmFsdWUgLyByYW5nZSkgKiAxODA7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICdyb3RhdGUoJyArXHJcbiAgICAgICAgICBuZXdBbmdsZSArXHJcbiAgICAgICAgICAnKSB0cmFuc2xhdGUoMCwnICtcclxuICAgICAgICAgIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5sYWJlbEluc2V0IC0gcmFkaXVzIC0gMjApICtcclxuICAgICAgICAgICcpJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICB2YXIgbmV3QW5nbGUgPVxyXG4gICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubWluQW5nbGUgKyAoZC52YWx1ZSAvIHJhbmdlKSAqIDE4MDtcclxuICAgICAgICBpZiAoaSA9PSAwICYmIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzVmFsdWVMYWJsZUFkanVzdCkge1xyXG4gICAgICAgICAgcmV0dXJuICdyb3RhdGUoJyArICgwIC0gbmV3QW5nbGUpICsgJykgdHJhbnNsYXRlKC0yNywwKSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGkgPT0gbGFiZWxBcnJheS5sZW5ndGggLSAxICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1ZhbHVlTGFibGVBZGp1c3RcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiAncm90YXRlKCcgKyAoMCAtIG5ld0FuZ2xlKSArICcpIHRyYW5zbGF0ZSgtMTUsMCknO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ3JvdGF0ZSgnICsgKDAgLSBuZXdBbmdsZSkgKyAnKSB0cmFuc2xhdGUoLTE3LDApJztcclxuICAgICAgfSlcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMClcclxuICAgICAgICAgIHJldHVybiAnZm9udC1zaXplOiAnICsgJzEycHgnICsgJzsgZm9udC13ZWlnaHQ6JyArICc2MDA7JztcclxuICAgICAgICBlbHNlIHJldHVybiAnZm9udC1zaXplOiAnICsgJzE0cHgnICsgJzsgZm9udC13ZWlnaHQ6JyArICc2MDA7JztcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChtZXRhRGF0YS5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGQubmFtZSArIG1ldGFEYXRhLmRhdGFUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZC5uYW1lO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKFxyXG4gICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAocmFkaXVzIC0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvciAvIDIpICtcclxuICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICB0b3BUZXh0UG9zaXRpb24gK1xyXG4gICAgICAgICAgJyknXHJcbiAgICAgIClcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlV2lkdGhTY2FsZUZhY3RvciArIDgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVIZWlnaHRTY2FsZUZhY3RvcilcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3ZhbHVlLWRpc3BsYXknKVxyXG4gICAgICAuc3R5bGUoXHJcbiAgICAgICAgJ2hlaWdodCcsXHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3IgKyAxMCArICdweCdcclxuICAgICAgKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxNTAwKSB7XHJcbiAgICAgICAgICBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVIZWlnaHRTY2FsZUZhY3RvciAtIDI1ICsgJ3B4JztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3IgLSAxNSArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuaHRtbChtZXRhRGF0YS5jdXJyZW50VmFsdWUgKyBtZXRhRGF0YS5kYXRhVHlwZSk7XHJcbiAgICBpZiAobWV0YURhdGEuc3RhdHVzKSB7XHJcbiAgICAgIGxldCB3aWR0aFRlbXAgPSBtZXRhRGF0YS5zdGF0dXMubGVuZ3RoID4gNCA/IDIxMCA6IDEyMDtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAndHJhbnNmb3JtJyxcclxuICAgICAgICAgICd0cmFuc2xhdGUoJyArIChyYWRpdXMgLSB3aWR0aFRlbXAgLyAyKSArICcsJyArIG1pZFRleHRQb3NpdGlvbiArICcpJ1xyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cignd2lkdGgnLCB3aWR0aFRlbXApXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAnaGVpZ2h0JyxcclxuICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1cnJlbnRWYWx1ZUhlaWdodFNjYWxlRmFjdG9yICsgMTBcclxuICAgICAgICApXHJcbiAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnc3RhdHVzLWRpc3BsYXknKVxyXG4gICAgICAgIC5zdHlsZShcclxuICAgICAgICAgICdmb250LXNpemUnLFxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlSGVpZ2h0U2NhbGVGYWN0b3IgLSAyNSArICdweCdcclxuICAgICAgICApXHJcbiAgICAgICAgLmh0bWwobWV0YURhdGEuc3RhdHVzKTtcclxuICAgIH1cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoXHJcbiAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgJ3RyYW5zbGF0ZSgnICsgKHJhZGl1cyAtIDEwNSkgKyAnLCcgKyBib3R0b21UZXh0UG9zaXRpb24gKyAnKSdcclxuICAgICAgKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCAyMTApXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWVIZWlnaHRTY2FsZUZhY3RvcilcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2RhdGVyYW5nZS1kaXNwbGF5JylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCkgcmV0dXJuICcxNHB4JztcclxuICAgICAgICAgICAgZWxzZSByZXR1cm4gJzE4cHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDAwKSByZXR1cm4gJzE0cHgnO1xyXG4gICAgICAgICAgZWxzZSByZXR1cm4gJzE4cHgnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBkZXNpcmVkU2l6ZTtcclxuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDAwKSBkZXNpcmVkU2l6ZSA9ICcxNHB4JztcclxuICAgICAgICBlbHNlIGRlc2lyZWRTaXplID0gJzE4cHgnO1xyXG4gICAgICAgIGlmIChtZXRhRGF0YS5kYXRlUmFuZ2UpXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtYXJnaW5yaWdodC0zXCI+PGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiPjwvaT48L3NwYW4+PHNwYW4+ICcgK1xyXG4gICAgICAgICAgICBtZXRhRGF0YS5kYXRlUmFuZ2UgK1xyXG4gICAgICAgICAgICAnPC9zcGFuPidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gJyc7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHZhciBjb250YWluZXJNaWRXaWR0aCA9IHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAvIDI7XHJcbiAgICB2YXIgbm9kZUhhbGZXaWR0aCA9IHN2Zy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyAyO1xyXG4gICAgdmFyIHVwZGF0ZWRTdGFydGluZ1BvaW50ID0gY29udGFpbmVyTWlkV2lkdGggLSBub2RlSGFsZldpZHRoO1xyXG5cclxuICAgIHN2Zy5hdHRyKFxyXG4gICAgICAndHJhbnNmb3JtJyxcclxuICAgICAgJ3RyYW5zbGF0ZSgnICtcclxuICAgICAgICAodXBkYXRlZFN0YXJ0aW5nUG9pbnQgKyBtYXJnaW4ubGVmdCkgK1xyXG4gICAgICAgICcsJyArXHJcbiAgICAgICAgbWFyZ2luLnRvcCArXHJcbiAgICAgICAgJyknXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KSB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICB9XHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkKSB7XHJcbiAgICB0aGlzLmhlYWRlck1lbnVjbGlja0V2ZW50LmVtaXQoaWQpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNndWFnZWNvbnRhaW5lciBjbGFzcz1cImxpYi1jaGFydC13cmFwcGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnKTtcIlxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYyIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCIgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCI+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG4gIDwvZGl2PlxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYxIFt0aXRsZV09XCJjaGFydERhdGEubWV0YURhdGEudGl0bGVcIiBbaGFzRHJpbGxEb3duXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd25cIlxyXG4gICAgW2lzRWRpdEVuYWJsZWRdPVwiY2hhcnREYXRhLm1ldGFEYXRhLmlzRWRpdEVuYWJsZWRcIiBbaXNyaWFdPVwiY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXCIgW21lbnVPcHRpb25zXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5oZWFkZXJNZW51T3B0aW9uc1wiXHJcbiAgICBbc2VsZWN0ZWRLcGlUb29sdG9wXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zZWxlY3RlZEtwaVRvb2x0b3BcIiAobWVudU9wdGlvbkNsaWNrRXZlbnQpPVwiaGFuZGxlSGVhZGVyTWVudUNsaWNrKCRldmVudClcIlxyXG4gICAgW2lzQWxlcnRFbmFibGVkXT1cImlzQWxlcnRFbmFibGVkXCIgKm5nSWY9XCJpc0hlYWRlclZpc2libGVcIj48L2xpYi1jaGFydC1oZWFkZXItdjE+XHJcbiAgPGRpdiBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcIiBpZD1cImd1YWdlY2hhcnRjb250YWluZXJcIiAjZ3VhZ2VjaGFydGNvbnRhaW5lclxyXG4gICAgY2xhc3M9XCJsaWItY2hhcnQtc3ZnIGd1YWdlY29udGFpbmVyXCI+PC9kaXY+XHJcbjwvZGl2PiJdfQ==
|