axidio-styleguide-library1-v2 0.2.25 → 0.2.27

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.
@@ -114,6 +114,9 @@ export class GroupChartComponent extends ComponentUniqueId {
114
114
  var alternate_text = false;
115
115
  var short_tick_length = 4;
116
116
  var long_tick_length = 16;
117
+ /**
118
+ * longer tick length needed for weekly charts
119
+ */
117
120
  var short_tick_length_bg = 5;
118
121
  var long_tick_length_bg = 30;
119
122
  var leftAndRightSpaces = 50;
@@ -125,6 +128,9 @@ export class GroupChartComponent extends ComponentUniqueId {
125
128
  data = this.chartData.data;
126
129
  metaData = this.chartData.metaData;
127
130
  lineData = this.chartData.lineData;
131
+ // if (lineData || this.chartData.targetLineData) {
132
+ // rightSvgWidth = 60;
133
+ // }
128
134
  if (!metaData.colorAboveTarget) {
129
135
  metaData['colorAboveTarget'] = metaData.colors;
130
136
  }
@@ -161,10 +167,16 @@ export class GroupChartComponent extends ComponentUniqueId {
161
167
  else
162
168
  width = this.chartData.data.length * 160;
163
169
  }
170
+ // if (this.chartData.data.length > 8) {
171
+ // width = this.chartData.data.length * 140;
172
+ // }
164
173
  var height = parseInt(verticalstackedcontainer.style('height')) *
165
174
  (self.chartConfiguration.svgHeight / 100) -
166
175
  margin.top -
167
176
  margin.bottom;
177
+ /**
178
+ * entire height used in weekly charts as x axis needed to be displayed at the bottom of the chart
179
+ */
168
180
  if (this.chartConfiguration.isFullScreen != undefined &&
169
181
  this.chartConfiguration.isFullScreen) {
170
182
  height =
@@ -186,15 +198,30 @@ export class GroupChartComponent extends ComponentUniqueId {
186
198
  margin.bottom -
187
199
  100;
188
200
  }
201
+ /**
202
+ * for hiding header
203
+ * used by weekly charts
204
+ */
189
205
  if (this.chartConfiguration.isHeaderVisible != undefined)
190
206
  this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
207
+ /**
208
+ * for hiding legends
209
+ * used by weekly charts
210
+ */
191
211
  if (this.chartConfiguration.legendVisible != undefined) {
192
212
  this.legendVisible = this.chartConfiguration.legendVisible;
193
213
  }
214
+ /**
215
+ * for removing background color so that it can take parents color
216
+ *
217
+ */
194
218
  if (this.chartConfiguration.isTransparentBackground != undefined) {
195
219
  this.isTransparentBackground =
196
220
  this.chartConfiguration.isTransparentBackground;
197
221
  }
222
+ /**
223
+ * format data values based on configuration received
224
+ */
198
225
  if (this.chartConfiguration.textFormatter != undefined) {
199
226
  formatFromBackend = ChartHelper.dataValueFormatter(this.chartConfiguration.textFormatter);
200
227
  formatForHugeNumbers = ChartHelper.dataValueFormatter('.2s');
@@ -207,6 +234,7 @@ export class GroupChartComponent extends ComponentUniqueId {
207
234
  .style('height', height)
208
235
  .style('overflow-x', 'hidden')
209
236
  .style('padding-left', `${margin.left}px`)
237
+ // .call(ChartHelper.responsivefy)
210
238
  .style('padding-right', `${rightSvgWidth}px`)
211
239
  .style('margin-left', '15px');
212
240
  var svgYAxisLeft = outerContainer
@@ -234,8 +262,10 @@ export class GroupChartComponent extends ComponentUniqueId {
234
262
  .style('overflow-x', 'auto');
235
263
  var svg = innerContainer
236
264
  .append('svg')
265
+ // .attr('id', self.uniqueId)
237
266
  .attr('width', width - rightSvgWidth)
238
267
  .attr('height', height + margin.top + margin.bottom + 30)
268
+ // .call(ChartHelper.responsivefy)
239
269
  .append('g')
240
270
  .attr('transform', 'translate(' + 0 + ',' + margin.top + ')');
241
271
  var subgroups = keyList;
@@ -244,6 +274,9 @@ export class GroupChartComponent extends ComponentUniqueId {
244
274
  return d.name;
245
275
  })
246
276
  .keys();
277
+ /**
278
+ * x axis range made similar to line chart or vertical stack so that all the charts will get aligned with each other.
279
+ */
247
280
  if (this.chartConfiguration.isMultiChartGridLine != undefined) {
248
281
  x = d3
249
282
  .scaleBand()
@@ -261,11 +294,27 @@ export class GroupChartComponent extends ComponentUniqueId {
261
294
  .range([leftAndRightSpaces, width - rightSvgWidth - leftAndRightSpaces])
262
295
  .padding([0.3]);
263
296
  }
297
+ // x.bandwidth(96);
264
298
  var xScaleFromOrigin = d3
265
299
  .scaleBand()
266
300
  .domain(groups)
267
301
  .range([0, width - rightSvgWidth]);
302
+ // .padding([0.2]);
303
+ /**
304
+ * draw second x axis on top
305
+ */
306
+ // if (self.chartConfiguration.showXaxisTop) {
307
+ // svg
308
+ // .append('g')
309
+ // .attr('class', 'lib-line-axis-text lib-line-x-axis-text x-axis')
310
+ // .attr('style', self.chartConfiguration.xAxisCustomTextStyles)
311
+ // .call(d3.axisBottom(x).tickSize(0));
312
+ // }
313
+ // d3.svg.axis().scale(x).orient('bottom').ticks(1).innerTickSize(-height);
268
314
  if (this.chartConfiguration.isMultiChartGridLine == undefined) {
315
+ /**
316
+ * normal ticks for all dashboard charts
317
+ */
269
318
  svg
270
319
  .append('g')
271
320
  .attr('class', 'x1 axis1')
@@ -278,7 +327,7 @@ export class GroupChartComponent extends ComponentUniqueId {
278
327
  .selectAll('g.x1.axis1 g.tick text')
279
328
  .attr('class', 'lib-xaxis-labels-texts-drilldown')
280
329
  .style('fill', 'var(--chart-text-color)')
281
- .attr('y', 32);
330
+ .attr('y', 32); // Increase distance from bars (default is ~9)
282
331
  }
283
332
  else {
284
333
  svg
@@ -286,14 +335,32 @@ export class GroupChartComponent extends ComponentUniqueId {
286
335
  .attr('class', 'lib-xaxis-labels-texts-drilldown')
287
336
  .style('fill', 'var(--chart-text-color)');
288
337
  }
338
+ // .attr('y', function () {
339
+ // if (alternate_text) {
340
+ // alternate_text = false;
341
+ // return long_tick_length + 1;
342
+ // } else {
343
+ // alternate_text = true;
344
+ // return short_tick_length + 1;
345
+ // }
346
+ // });
289
347
  }
290
348
  else {
349
+ /**
350
+ * bigger ticks for weekly charts and more space from x axis to labels
351
+ */
352
+ /**
353
+ * draw x axis
354
+ */
291
355
  svg
292
356
  .append('g')
293
357
  .attr('class', 'x1 axis1')
294
358
  .attr('transform', 'translate(0,' + height + ')')
295
359
  .call(d3.axisBottom(x).tickSize(0))
296
360
  .call((g) => g.select('.domain').attr('fill', 'none'));
361
+ /**
362
+ * tick line size in alternate fashion
363
+ */
297
364
  svg.selectAll('g.x1.axis1 g.tick line').attr('y2', function () {
298
365
  if (alternate_text &&
299
366
  self.chartConfiguration.isNoAlternateXaxisText == undefined) {
@@ -305,7 +372,14 @@ export class GroupChartComponent extends ComponentUniqueId {
305
372
  return short_tick_length_bg - 4;
306
373
  }
307
374
  });
375
+ /**
376
+ * reset the flag so that values can be shown in same alternate fashion
377
+ */
308
378
  alternate_text = false;
379
+ /**
380
+ * print x-axis label texts
381
+ * used by weekly charts
382
+ */
309
383
  svg
310
384
  .selectAll('g.x1.axis1 g.tick text')
311
385
  .attr('class', 'lib-xaxis-labels-texts-weeklycharts')
@@ -354,6 +428,7 @@ export class GroupChartComponent extends ComponentUniqueId {
354
428
  return '';
355
429
  });
356
430
  }
431
+ /**y scale for left y axis */
357
432
  var y = d3.scaleLinear().rangeRound([height, 0]);
358
433
  var maxValue = d3.max(data, (d) => d3.max(keyList, (key) => +d[key]));
359
434
  if (maxValue == 0) {
@@ -364,7 +439,27 @@ export class GroupChartComponent extends ComponentUniqueId {
364
439
  maxValue = 100;
365
440
  }
366
441
  }
442
+ if (self.chartConfiguration.yAxisGrid) {
443
+ // svg
444
+ // .append('g')
445
+ // .attr('class', 'grid')
446
+ // .call(
447
+ // d3
448
+ // .axisLeft(y)
449
+ // .ticks(self.chartConfiguration.numberOfYTicks)
450
+ // .tickSize(-width)
451
+ // .tickFormat('')
452
+ // )
453
+ // // .style('stroke-dasharray', '5 5')
454
+ // .style('color', '#B9B9B9')
455
+ // .style('opacity', '0.5')
456
+ // .call((g) => g.select('.domain').remove());
457
+ }
367
458
  if (this.chartConfiguration.customYscale) {
459
+ /**
460
+ * increase y-scale so that values wont cross or exceed out of range
461
+ * used in weekly charts
462
+ */
368
463
  maxValue = maxValue * this.chartConfiguration.customYscale;
369
464
  }
370
465
  if (this.chartData.targetLineData &&
@@ -402,6 +497,10 @@ export class GroupChartComponent extends ComponentUniqueId {
402
497
  .tickSize(0)
403
498
  .tickFormat(self.chartConfiguration.yLineAxisLabelFomatter);
404
499
  }
500
+ /**
501
+ * show x-axis grid between labels
502
+ * used by weekly charts
503
+ */
405
504
  if (self.chartConfiguration.isXgridBetweenLabels) {
406
505
  svg
407
506
  .append('g')
@@ -413,6 +512,9 @@ export class GroupChartComponent extends ComponentUniqueId {
413
512
  .call((g) => g.select('.domain').remove());
414
513
  }
415
514
  if (this.chartConfiguration.yAxisGrid) {
515
+ /**
516
+ * draw y axis
517
+ */
416
518
  svg
417
519
  .append('g')
418
520
  .call(d3
@@ -436,12 +538,22 @@ export class GroupChartComponent extends ComponentUniqueId {
436
538
  xSubgroup.range([0, x.bandwidth()]);
437
539
  }
438
540
  else {
541
+ /**
542
+ * used to make grouped bars with lesser width as we are not using padding for width
543
+ * used by weekly charts
544
+ */
439
545
  xSubgroup.range([0, x.bandwidth()]);
440
546
  }
547
+ // if (this.chartConfiguration.isDrilldownChart) {
548
+ // }
441
549
  var color = d3
442
550
  .scaleOrdinal()
443
551
  .domain(subgroups)
444
552
  .range(Object.values(metaData.colors));
553
+ // var colorAboveTarget = d3
554
+ // .scaleOrdinal()
555
+ // .domain(subgroups)
556
+ // .range(Object.values(metaData.colorAboveTarget));
445
557
  var state = svg
446
558
  .append('g')
447
559
  .selectAll('.state')
@@ -456,8 +568,10 @@ export class GroupChartComponent extends ComponentUniqueId {
456
568
  .data(function (d) {
457
569
  let newList = [];
458
570
  subgroups.map(function (key) {
571
+ // if (key !== "group") {
459
572
  let obj = { key: key, value: d[key], name: d.name };
460
573
  newList.push(obj);
574
+ // }
461
575
  });
462
576
  return newList;
463
577
  })
@@ -470,6 +584,7 @@ export class GroupChartComponent extends ComponentUniqueId {
470
584
  !metaData.barWithoutClick.length ||
471
585
  (!metaData.barWithoutClick.includes(d?.name) &&
472
586
  !metaData.barWithoutClick.includes(d?.key)))
587
+ // self.handleClick(d.data.name);
473
588
  self.handleClick(d);
474
589
  }
475
590
  })
@@ -486,12 +601,14 @@ export class GroupChartComponent extends ComponentUniqueId {
486
601
  0 + (x.bandwidth() - 200) / 2,
487
602
  x.bandwidth() - (x.bandwidth() - 200) / 2,
488
603
  ]);
604
+ // .padding(0.05);
489
605
  }
490
606
  else
491
607
  tempScale.range([
492
608
  0 + (x.bandwidth() - 300) / 2,
493
609
  x.bandwidth() - (x.bandwidth() - 300) / 2,
494
610
  ]);
611
+ // .padding(0.05);
495
612
  }
496
613
  else
497
614
  tempScale.range([
@@ -510,6 +627,7 @@ export class GroupChartComponent extends ComponentUniqueId {
510
627
  })
511
628
  .attr('width', function (d) {
512
629
  if (self.chartConfiguration.isDrilldownChart) {
630
+ // var tempScale;
513
631
  data.map((indiv) => {
514
632
  if (indiv.name == d.name) {
515
633
  let keys = Object.keys(indiv).filter((temp, i) => i != 0);
@@ -522,12 +640,14 @@ export class GroupChartComponent extends ComponentUniqueId {
522
640
  0 + (x.bandwidth() - 200) / 2,
523
641
  x.bandwidth() - (x.bandwidth() - 200) / 2,
524
642
  ]);
643
+ // .padding(0.05);
525
644
  }
526
645
  else
527
646
  tempScale.range([
528
647
  0 + (x.bandwidth() - 300) / 2,
529
648
  x.bandwidth() - (x.bandwidth() - 300) / 2,
530
649
  ]);
650
+ // .padding(0.05);
531
651
  }
532
652
  else
533
653
  tempScale.range([
@@ -549,6 +669,7 @@ export class GroupChartComponent extends ComponentUniqueId {
549
669
  return height - y(d.value);
550
670
  return height - y(0);
551
671
  })
672
+ // .style('cursor', 'pointer')
552
673
  .style('cursor', function (d) {
553
674
  if (metaData.hasDrillDown && !isria)
554
675
  return 'pointer';
@@ -563,6 +684,9 @@ export class GroupChartComponent extends ComponentUniqueId {
563
684
  return self.chartData.metaData.colorAboveTarget[d.key];
564
685
  return self.chartData.metaData.colors[d.key];
565
686
  });
687
+ /**
688
+ * display angled texts on the bars
689
+ */
566
690
  if (this.chartConfiguration.textsOnBar != undefined && !this.isZoomedOut) {
567
691
  state
568
692
  .selectAll('text')
@@ -623,12 +747,14 @@ export class GroupChartComponent extends ComponentUniqueId {
623
747
  0 + (x.bandwidth() - 200) / 2,
624
748
  x.bandwidth() - (x.bandwidth() - 200) / 2,
625
749
  ]);
750
+ // .padding(0.05);
626
751
  }
627
752
  else
628
753
  tempScale.range([
629
754
  0 + (x.bandwidth() - 300) / 2,
630
755
  x.bandwidth() - (x.bandwidth() - 300) / 2,
631
756
  ]);
757
+ // .padding(0.05);
632
758
  }
633
759
  else
634
760
  tempScale.range([
@@ -638,9 +764,16 @@ export class GroupChartComponent extends ComponentUniqueId {
638
764
  }
639
765
  }
640
766
  });
767
+ /**
768
+ * if set, then all texts ll be horizontal
769
+ */
641
770
  if (self.chartConfiguration.textAlwaysHorizontal) {
642
771
  return ('translate(' + xSubgroup(d.key) + ',' + (y(d.value) - 3) + ')');
643
772
  }
773
+ /**
774
+ * rotate texts having more than one digits
775
+ */
776
+ // if (d.value > 9)
644
777
  if (!isNaN(tempScale(d.key)))
645
778
  return ('translate(' +
646
779
  (tempScale(d.key) + tempScale.bandwidth() * 0.55) +
@@ -648,6 +781,14 @@ export class GroupChartComponent extends ComponentUniqueId {
648
781
  (y(0) - 10) +
649
782
  ') rotate(270)');
650
783
  return 'translate(0,0)';
784
+ // else
785
+ // return (
786
+ // 'translate(' +
787
+ // (tempScale(d.key) + tempScale.bandwidth() / 2) +
788
+ // ',' +
789
+ // y(0) +
790
+ // ')'
791
+ // );
651
792
  })
652
793
  .on('click', function (d) {
653
794
  if (!metaData.barWithoutClick ||
@@ -676,6 +817,7 @@ export class GroupChartComponent extends ComponentUniqueId {
676
817
  svg
677
818
  .append('foreignObject')
678
819
  .attr('x', function () {
820
+ // var tempScale;
679
821
  var elementsCounter;
680
822
  data.map((indiv) => {
681
823
  if (indiv.name == d.name) {
@@ -689,12 +831,14 @@ export class GroupChartComponent extends ComponentUniqueId {
689
831
  0 + (x.bandwidth() - 200) / 2,
690
832
  x.bandwidth() - (x.bandwidth() - 200) / 2,
691
833
  ]);
834
+ // .padding(0.05);
692
835
  }
693
836
  else
694
837
  tempScale.range([
695
838
  0 + (x.bandwidth() - 300) / 2,
696
839
  x.bandwidth() - (x.bandwidth() - 300) / 2,
697
840
  ]);
841
+ // .padding(0.05);
698
842
  }
699
843
  else
700
844
  tempScale.range([
@@ -724,6 +868,7 @@ export class GroupChartComponent extends ComponentUniqueId {
724
868
  return d.class;
725
869
  })
726
870
  .attr('width', function () {
871
+ // var tempScale;
727
872
  data.map((indiv) => {
728
873
  if (indiv.name == d.name) {
729
874
  let keys = Object.keys(indiv).filter((temp, i) => i != 0);
@@ -735,12 +880,14 @@ export class GroupChartComponent extends ComponentUniqueId {
735
880
  0 + (x.bandwidth() - 200) / 2,
736
881
  x.bandwidth() - (x.bandwidth() - 200) / 2,
737
882
  ]);
883
+ // .padding(0.05);
738
884
  }
739
885
  else
740
886
  tempScale.range([
741
887
  0 + (x.bandwidth() - 300) / 2,
742
888
  x.bandwidth() - (x.bandwidth() - 300) / 2,
743
889
  ]);
890
+ // .padding(0.05);
744
891
  }
745
892
  else
746
893
  tempScale.range([
@@ -827,18 +974,35 @@ export class GroupChartComponent extends ComponentUniqueId {
827
974
  .attr('transform', 'translate(0,0)')
828
975
  .call(y)
829
976
  .style('display', 'none');
977
+ /**
978
+ * hide x axis labels
979
+ * config is there for future use
980
+ * used by weekly charts
981
+ */
830
982
  if (this.chartConfiguration.isXaxisLabelHidden != undefined &&
831
983
  this.chartConfiguration.isXaxisLabelHidden) {
832
984
  d3.selectAll('g.lib-line-x-axis-text > g > text').attr('class', 'lib-display-hidden');
833
985
  }
986
+ /**
987
+ * hide y axis labels
988
+ * used by weekly charts
989
+ */
834
990
  if (this.chartConfiguration.isYaxisLabelHidden != undefined &&
835
991
  this.chartConfiguration.isYaxisLabelHidden) {
836
992
  d3.selectAll('.yaxis-dashed > g > text').attr('class', 'lib-display-hidden');
837
993
  }
994
+ /**
995
+ * hide y axis labels
996
+ * config is there for future use
997
+ */
838
998
  if (this.chartConfiguration.isYaxisHidden != undefined &&
839
999
  this.chartConfiguration.isYaxisHidden) {
840
1000
  d3.selectAll('.yaxis-dashed').attr('class', 'lib-display-hidden');
841
1001
  }
1002
+ /**
1003
+ * dashed y axis
1004
+ * used by weekly charts
1005
+ */
842
1006
  if (this.chartConfiguration.isYaxisDashed != undefined &&
843
1007
  this.chartConfiguration.isYaxisDashed) {
844
1008
  d3.selectAll('.yaxis-dashed')
@@ -855,11 +1019,17 @@ export class GroupChartComponent extends ComponentUniqueId {
855
1019
  .call(yLineAxis);
856
1020
  }
857
1021
  }
1022
+ /**
1023
+ * used to display y label
1024
+ */
858
1025
  if (this.isZoomedOut) {
859
1026
  svg
860
1027
  .selectAll('.lib-xaxis-labels-texts-drilldown')
861
1028
  .attr('class', 'lib-display-hidden');
862
1029
  }
1030
+ /**
1031
+ * used to write y labels based on configuration
1032
+ */
863
1033
  if (metaData.yLabel) {
864
1034
  svgYAxisLeft
865
1035
  .append('text')
@@ -878,6 +1048,9 @@ export class GroupChartComponent extends ComponentUniqueId {
878
1048
  .text(metaData.yLabel);
879
1049
  }
880
1050
  else {
1051
+ /**
1052
+ * used by weekly charts
1053
+ */
881
1054
  svg
882
1055
  .selectAll('.lib-axis-group-label')
883
1056
  .attr('class', 'lib-ylabel-weeklyCharts')
@@ -918,6 +1091,13 @@ export class GroupChartComponent extends ComponentUniqueId {
918
1091
  .attr('y2', yZero)
919
1092
  .style('stroke-dasharray', '5 5')
920
1093
  .style('stroke', this.chartData.targetLineData.color);
1094
+ // svgYAxisRight
1095
+ // .append('line')
1096
+ // .attr('x1', 0)
1097
+ // .attr('x2', rightSvgWidth)
1098
+ // .attr('y1', yZero)
1099
+ // .attr('y2', yZero)
1100
+ // .style('stroke', this.chartData.targetLineData.color);
921
1101
  svgYAxisRight
922
1102
  .append('foreignObject')
923
1103
  .attr('transform', 'translate(' + 0 + ',' + (yZero - 30) + ')')
@@ -945,6 +1125,13 @@ export class GroupChartComponent extends ComponentUniqueId {
945
1125
  });
946
1126
  }
947
1127
  if (this.chartConfiguration.isDrilldownChart) {
1128
+ /**
1129
+ * used by drilldown charts
1130
+ */
1131
+ // svg
1132
+ // .selectAll('.lib-axis-group-label')
1133
+ // .attr('class', 'lib-ylabel-drilldowncharts')
1134
+ // .text(metaData.yLabel.toLowerCase());
948
1135
  svg.selectAll('g.x1.axis1 g.tick line').style('display', 'none');
949
1136
  }
950
1137
  if (metaData.lineyLabel) {
@@ -1059,4 +1246,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1059
1246
  }], headerMenuclickEvent: [{
1060
1247
  type: Output
1061
1248
  }] } });
1062
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2dyb3VwLWNoYXJ0L2dyb3VwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ncm91cC1jaGFydC9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBRSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUFRbEQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGlCQUFpQjtJQXNFdEQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQTlEQSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyQyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3pELG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLDRCQUF1QixHQUFZLEtBQUssQ0FBQztRQUN6Qyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0IsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFekIseUJBQW9CLEdBQVE7WUFDMUIsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFF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QUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQzFELElBQUksSUFBSSxDQUFDO3dCQUNULFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQ3BDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztvQ0FDcEQsU0FBUyxDQUFDLEtBQUssQ0FBQzt3Q0FDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3Q0FDN0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7cUNBQzFDLENBQUMsQ0FBQztnQ0FDTCxDQUFDOztvQ0FDQyxTQUFTLENBQUMsS0FBSyxDQUFDO3dDQUNkLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3dDQUM3QixDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztxQ0FDMUMsQ0FBQyxDQUFDOzRCQUNQLENBQUM7O2dDQUNDLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0NBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FB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TSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUMxRCxJQUFJLElBQUksQ0FBQzt3QkFDVCxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbEUsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7NEJBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO2dDQUNwQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7b0NBQ3BELFNBQVMsQ0FBQyxLQUFLLENBQUM7d0NBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7d0NBQzdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3FDQUMxQyxDQUFDLENBQUM7Z0NBQ0wsQ0FBQzs7b0NBQ0MsU0FBUyxDQUFDLEtBQUssQ0FBQzt3Q0FDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3Q0FDN0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7cUNBQzFDLENBQUMsQ0FBQzs0QkFDUCxDQUFDOztnQ0FDQyxTQUFTLENBQUMsS0FBSyxDQUFDO29DQUNkLENBQUMsR0FBRyxDQUFDLENBQUMs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QUFpQixpQkFHWixpQkFBaUIsQ0FBQyxJQUFJO3dEQUluQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsRCxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdwQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIiAgaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uSW5pdCxcclxuICAgIFZpZXdDaGlsZCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbiAgaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG4gIGltcG9ydCBDaGFydEhlbHBlciBmcm9tICcuLi9jaGFydC1oZWxwZXInO1xyXG4gIGltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcclxuICBpbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbiAgaW1wb3J0IEhlYWRlckNvbmZpZ0hlbHBlciBmcm9tICcuLi9oZWFkZXItY29uZmlnJztcclxuXHJcbiAgQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1ncm91cC1jaGFydCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JvdXAtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZ3JvdXAtY2hhcnQuY29tcG9uZW50Lmxlc3MnLCAnLi4vY29tbW9uLXN0eWxlcy5sZXNzJ10sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIH0pXHJcbiAgZXhwb3J0IGNsYXNzIEdyb3VwQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRVbmlxdWVJZCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICAgIEBWaWV3Q2hpbGQoJ2dyb3VwY2hhcnRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgICBjb250YWluZXJFbHQhOiBFbGVtZW50UmVmO1xyXG4gICAgXHJcbiAgICAgIEBWaWV3Q2hpbGQoJ2dyb3VwY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgICAgZ3JvdXBjb250YWluZXJFbHQhOiBFbGVtZW50UmVmO1xyXG4gICAgXHJcbiAgICAgIEBJbnB1dCgpIGNoYXJ0RGF0YTogYW55O1xyXG4gICAgICBASW5wdXQoKSBjdXN0b21DaGFydENvbmZpZ3VyYXRpb246IGFueTtcclxuICAgICAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgICAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICAgIGlzSGVhZGVyVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAgIGxlZ2VuZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb246IGFueSA9IHt9O1xyXG4gICAgICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XHJcbiAgICBcclxuICAgICAgZGVmYXVsdENvbmZpZ3VyYXRpb246IGFueSA9IHtcclxuICAgICAgICBtYXJnaW46IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiA0MCB9LFxyXG4gICAgICAgIGxhYmVsRm9ybWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgICAgIHN2Z0hlaWdodDogNzAsXHJcbiAgICAgICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICAgICAgbGVnZW5kSnVzdGlmaWVkOiB0cnVlLFxyXG4gICAgICAgIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICAgICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgICAgIGxpbmVHcmFwaENvbG9yOiAnI0Y2RDI4MycsXHJcbiAgICAgICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICAgICAgc2hvd1ZhbHVlczogdHJ1ZSxcclxuICAgICAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICAgICAgICB4QXhpc0dyaWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgICAgIGxlZ2VuZFZpc2libGU6IHRydWUsXHJcbiAgICAgICAgaXNIZWFkZXJWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQ6IHVuZGVmaW5lZCxcclxuICAgICAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIGlzRnVsbFNjcmVlbjogdW5kZWZpbmVkLFxyXG4gICAgICAgIGN1c3RvbVlzY2FsZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRleHRzT25CYXI6IHVuZGVmaW5lZCxcclxuICAgICAgICBpc1hheGlzTGFiZWxIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgICAgICBpc1lheGlzTGFiZWxIaWRkZW46IGZhbHNlLFxyXG4gICAgICAgIGlzWWF4aXNIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgICAgICBpc1lheGlzRGFzaGVkOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGV4dEZvcm1hdHRlcjogdW5kZWZpbmVkLFxyXG4gICAgICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICBpc1hncmlkQmV0d2VlbkxhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICAgIGhpZGVMZWdlbmRPblRvcDogdHJ1ZSxcclxuICAgICAgICBpc1hheGlzQ29sb3I6ICcjOTk5OTk5JyxcclxuICAgICAgICBsYWJlbE92ZXJsYXBNaW5vckZpeDogdHJ1ZSxcclxuICAgICAgICBub0hvdmVyRWZmZWN0OiB0cnVlLFxyXG4gICAgICAgIG5vSG92ZXJEaXNwbGF5RGF0YTogdHJ1ZSxcclxuICAgICAgICBzaG93WGF4aXNUb3A6IHRydWUsXHJcbiAgICAgICAgZGlzcGxheVlheGlzTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICAgICAgeExhYmVsc09uU2FtZUxpbmU6IHVuZGVmaW5lZCxcclxuICAgICAgICB0ZXh0QWx3YXlzSG9yaXpvbnRhbDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGxlZ2VuZEF0VG9wUmlnaHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICBpc0RyaWxsZG93bkNoYXJ0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgZGlzcGxheVRpdGxlT25Ub3A6IHVuZGVmaW5lZCxcclxuICAgICAgICBpc1RvZ2dsZVZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgICAgICBpc1RpdGxlSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICAgICAgaXNEaXNwbGF5QmFyRGV0YWlsc0F0Qm90dG9tOiB1bmRlZmluZWQsXHJcbiAgICAgICAgaG93bWFueUJhckRldGFpbHNUb0Rpc3BsYXk6IDAsXHJcbiAgICAgICAgYmFyVmF1bGVDb2xvcjogdW5kZWZpbmVkLFxyXG4gICAgICB9O1xyXG4gICAgXHJcbiAgICAgIHVuaXF1ZUlkOiBhbnkgPSB0aGlzLmdldFVuaXF1ZUlkKCk7XHJcbiAgICAgIGlzWm9vbWVkT3V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIGlzREQxT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICBpc0REMk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIFxyXG4gICAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICB9XHJcbiAgICBcclxuICAgICAgb25SZXNpemVkKGV2ZW50OiBSZXNpemVkRXZlbnQpIHtcclxuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2V0VGltZW91dChcclxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZDMuc2VsZWN0KCcjJyArIHNlbGYudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICBzZWxmLmluaXRpYWxpemVncm91cENoYXJ0KCk7XHJcbiAgICAgICAgICB9LmJpbmQoc2VsZiksXHJcbiAgICAgICAgICAxMFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXNab29tZWRPdXQgPSBpc1pvb21PdXQ7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZWQoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIGhhbmRsZVpvb21pblpvb21vdXRDbGljayh7IGlzWm9vbU91dCwgZXZlbnQgfSkge1xyXG4gICAgICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCk7XHJcbiAgICAgIH1cclxuICAgICAgbmdPbkluaXQoKSB7fVxyXG4gICAgICBpc0xlZ2VuZFZpc2libGUoKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5jaGFydERhdGEgJiZcclxuICAgICAgICAgIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyAmJlxyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JzKS5sZW5ndGggPiAxXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGtlZXBPcmRlciA9IChhLCBiKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAgIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICByZXR1cm4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24/LmhlYWRlck1lbnVPcHRpb25zPy5zb21lKG9wdGlvbiA9PiBvcHRpb24uaWQgPT09ICdlZGl0QWxlcnQnKTtcclxufVxyXG4gICAgICBpbml0aWFsaXplZ3JvdXBDaGFydCgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBbXTtcclxuICAgICAgICBsZXQgbWV0YURhdGE6IGFueSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGtleUxpc3QgPSBudWxsO1xyXG4gICAgICAgIGxldCBsaW5lRGF0YSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGNvbG9yTWFwID0ge307XHJcbiAgICAgICAgdmFyIGZvcm1hdEZyb21CYWNrZW5kO1xyXG4gICAgICAgIHZhciBmb3JtYXRGb3JIdWdlTnVtYmVycztcclxuXHJcbiAgIGxldCBpc3JpYSA9IHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXHJcblxyXG4gICAgXHJcbiAgICAgICAgdmFyIHg6IGFueTtcclxuICAgIFxyXG4gICAgICAgIHZhciBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBzaG9ydF90aWNrX2xlbmd0aCA9IDQ7XHJcbiAgICAgICAgdmFyIGxvbmdfdGlja19sZW5ndGggPSAxNjtcclxuICAgICAgICB2YXIgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgICAgIHZhciBsb25nX3RpY2tfbGVuZ3RoX2JnID0gMzA7XHJcbiAgICAgICAgdmFyIGxlZnRBbmRSaWdodFNwYWNlcyA9IDUwO1xyXG4gICAgICAgIHZhciByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICAgICAgdmFyIHRlbXBTY2FsZTtcclxuICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25baV0gPSBDaGFydEhlbHBlci5nZXRWYWx1ZUJ5Q29uZmlndXJhdGlvblR5cGUoXHJcbiAgICAgICAgICAgIGksXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gICAgICAgIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgICAgICAgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgICAgIG1ldGFEYXRhWydjb2xvckFib3ZlVGFyZ2V0J10gPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbG9yTWFwID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAgICAgIGtleUxpc3QgPSBtZXRhRGF0YS5rZXlMaXN0O1xyXG4gICAgXHJcbiAgICAgICAgdmFyIGNoYXJ0Q29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIHZhciB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QoXHJcbiAgICAgICAgICB0aGlzLmdyb3VwY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnRcclxuICAgICAgICApO1xyXG4gICAgICAgIHZhciBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcbiAgICAgICAgdmFyIHdpZHRoID1cclxuICAgICAgICAgIHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDMwICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgICAgIHdpZHRoID1cclxuICAgICAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGExXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNjBcclxuICAgICAgICAgICAgICAgIDogd2lkdGhcclxuICAgICAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTFcclxuICAgICAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNjBcclxuICAgICAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDA7XHJcbiAgICBcclxuICAgICAgICAgIHdpZHRoID1cclxuICAgICAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICAgICAgPyB3aWR0aFxyXG4gICAgICAgICAgICAgIDogdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiA0MDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJlxyXG4gICAgICAgICAgd2lkdGggPCB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMCAmJlxyXG4gICAgICAgICAgdGhpcy5pc1pvb21lZE91dFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgd2lkdGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGEyICYmXHJcbiAgICAgICAgICAgIHdpZHRoIDwgdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAyNTBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMjUwO1xyXG4gICAgICAgICAgfSBlbHNlIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAxNjA7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgdmFyIGhlaWdodCA9XHJcbiAgICAgICAgICBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSAqXHJcbiAgICAgICAgICAgIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgLyAxMDApIC1cclxuICAgICAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICAgICAgbWFyZ2luLmJvdHRvbTtcclxuICAgIFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaGVpZ2h0ID1cclxuICAgICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ICE9IDcwXHJcbiAgICAgICAgICAgICAgPyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcclxuICAgICAgICAgICAgICA6IHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0ICYmICF0aGlzLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICAgICAgICBoZWlnaHQgPVxyXG4gICAgICAgICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgICAgICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgICAgICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgICAgICAgICAxMzA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICAgICAgICBoZWlnaHQgPVxyXG4gICAgICAgICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgICAgICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgICAgICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgICAgICAgICAxMDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZTtcclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMubGVnZW5kVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZFZpc2libGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPVxyXG4gICAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBmb3JtYXRGcm9tQmFja2VuZCA9IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcihcclxuICAgICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGZvcm1hdEZvckh1Z2VOdW1iZXJzID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKCcuMnMnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG91dGVyQ29udGFpbmVyID0gY2hhcnRDb250YWluZXJcclxuICAgICAgICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAgICAgICAuYXR0cignaWQnLCBzZWxmLnVuaXF1ZUlkKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ291dGVyLWNvbnRhaW5lcicpXHJcbiAgICAgICAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAgICAgLnN0eWxlKCdoZWlnaHQnLCBoZWlnaHQpXHJcbiAgICBcclxuICAgICAgICAgIC5zdHlsZSgnb3ZlcmZsb3cteCcsICdoaWRkZW4nKVxyXG4gICAgICAgICAgLnN0eWxlKCdwYWRkaW5nLWxlZnQnLCBgJHttYXJnaW4ubGVmdH1weGApXHJcbiAgICBcclxuICAgICAgICAgIC5zdHlsZSgncGFkZGluZy1yaWdodCcsIGAke3JpZ2h0U3ZnV2lkdGh9cHhgKVxyXG4gICAgICAgICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsJzE1cHgnKTtcclxuICAgICAgICB2YXIgc3ZnWUF4aXNMZWZ0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCAnMTAwJylcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAgICAgICAuc3R5bGUoJ2xlZnQnLCAnMCcpXHJcbiAgICAgICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgKG1hcmdpbi5sZWZ0ICsgMTUpICsgJywnICsgbWFyZ2luLnRvcCArICcpJyk7XHJcbiAgICBcclxuICAgICAgICB2YXIgc3ZnWUF4aXNSaWdodCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAgICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAgICAgICAuc3R5bGUoJ3JpZ2h0JywgJzEycHgnKVxyXG4gICAgICAgICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknKTtcclxuICAgIFxyXG4gICAgICAgIHZhciBpbm5lckNvbnRhaW5lciA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAgICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2lubmVyLWNvbnRhaW5lcicpXHJcbiAgICAgICAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtcclxuICAgIFxyXG4gICAgICAgIHZhciBzdmcgPSBpbm5lckNvbnRhaW5lclxyXG4gICAgICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aClcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDMwKVxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIHN1Ymdyb3VwczogYW55ID0ga2V5TGlzdDtcclxuICAgIFxyXG4gICAgICAgIHZhciBncm91cHMgPSBkM1xyXG4gICAgICAgICAgLm1hcChkYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5uYW1lO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5rZXlzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgeCA9IGQzXHJcbiAgICAgICAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAgICAgICAucmFuZ2VSb3VuZChbd2lkdGgsIDBdKVxyXG4gICAgICAgICAgICAuYWxpZ24oMC41KVxyXG4gICAgICAgICAgICAucGFkZGluZyhbMC41XSlcclxuICAgICAgICAgICAgLmRvbWFpbihcclxuICAgICAgICAgICAgICBkYXRhLm1hcChmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZC5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeCA9IGQzXHJcbiAgICAgICAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAgICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgICAgICAgLnJhbmdlKFtsZWZ0QW5kUmlnaHRTcGFjZXMsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aCAtIGxlZnRBbmRSaWdodFNwYWNlc10pXHJcbiAgICAgICAgICAgIC5wYWRkaW5nKFswLjNdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHhTY2FsZUZyb21PcmlnaW4gPSBkM1xyXG4gICAgICAgICAgLnNjYWxlQmFuZCgpXHJcbiAgICAgICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgICAgIC5yYW5nZShbMCwgd2lkdGggLSByaWdodFN2Z1dpZHRoXSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpKVxyXG4gICAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIW1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3knLCAzMik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSlcclxuICAgICAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG4gICAgICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLmF0dHIoJ3kyJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgJiZcclxuICAgICAgICAgICAgICBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0ID09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoX2JnIC0gNztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnIC0gNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgICAgICAuYXR0cigneScsIHNob3J0X3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHZhciBpc1ZhbHVlVG9CZUlnbm9yZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBpbmRpdi5uYW1lLnRvTG93ZXJDYXNlKCkgPT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICAgICAgICAgICBpbmRpdlttZXRhRGF0YS5rZXlMaXN0WzBdXSA9PSAtMVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlzVmFsdWVUb0JlSWdub3JlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgICAgIC5hdHRyKCd5JywgbG9uZ190aWNrX2xlbmd0aF9iZylcclxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnY3VycmVudENvbG9yJylcclxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJyksIGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgeSA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSk7XHJcbiAgICAgICAgdmFyIG1heFZhbHVlID0gZDMubWF4KGRhdGEsIChkKSA9PiBkMy5tYXgoa2V5TGlzdCwgKGtleSkgPT4gK2Rba2V5XSkpO1xyXG4gICAgICAgIGlmIChtYXhWYWx1ZSA9PSAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgICAgICAgICAgbWF4VmFsdWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1heFZhbHVlID0gMTAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlKSB7XHJcbiAgICAgICAgICBtYXhWYWx1ZSA9IG1heFZhbHVlICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgbWF4VmFsdWUgPCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIG1heFZhbHVlID1cclxuICAgICAgICAgICAgbWF4VmFsdWUgPCAxMCAmJiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgPCAxMFxyXG4gICAgICAgICAgICAgID8gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgM1xyXG4gICAgICAgICAgICAgIDogdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHkuZG9tYWluKFswLCBtYXhWYWx1ZV0pLm5pY2UoKTtcclxuICAgICAgICBsZXQgbGluZVlzY2FsZTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAobGluZURhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgbGV0IG1heExpbmVWYWx1ZSA9IGQzLm1heChsaW5lRGF0YSwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICtkLnZhbHVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICBcclxuICAgICAgICAgIG1heExpbmVWYWx1ZSA9IG1heExpbmVWYWx1ZSAqIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuICAgIFxyXG4gICAgICAgICAgbGV0IG1pbkxpbmVWYWx1ZSA9IGQzLm1pbihsaW5lRGF0YSwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICtkLnZhbHVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAobWF4TGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlID0gbWluTGluZVZhbHVlIC0gMztcclxuICAgICAgICAgIGlmIChtaW5MaW5lVmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgIG1pbkxpbmVWYWx1ZSA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsaW5lWXNjYWxlID0gZDNcclxuICAgICAgICAgICAgLnNjYWxlTGluZWFyKClcclxuICAgICAgICAgICAgLmRvbWFpbihbbWluTGluZVZhbHVlLCBtYXhMaW5lVmFsdWVdKVxyXG4gICAgICAgICAgICAucmFuZ2UoW2hlaWdodCwgbWluTGluZVZhbHVlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB5TGluZUF4aXM7XHJcbiAgICAgICAgaWYgKGxpbmVZc2NhbGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgeUxpbmVBeGlzID0gZDNcclxuICAgICAgICAgICAgLmF4aXNSaWdodChsaW5lWXNjYWxlKVxyXG4gICAgICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgICAgICAudGlja0Zvcm1hdChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55TGluZUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWGdyaWRCZXR3ZWVuTGFiZWxzKSB7XHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgnICsgeC5iYW5kd2lkdGgoKSAvIDIgKyAnLCcgKyBoZWlnaHQgKyAnKSdcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKC1oZWlnaHQpLnRpY2tGb3JtYXQoJycpKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yLCAjOTk5OTk5KScpXHJcbiAgICAgICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSB7XHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAgIC5jYWxsKFxyXG4gICAgICAgICAgICAgIGQzXHJcbiAgICAgICAgICAgICAgICAuYXhpc0xlZnQoeSlcclxuICAgICAgICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgICAgICAgIC50aWNrU2l6ZSgtd2lkdGgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAgICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHN2Z1xyXG4gICAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgICAgLmNhbGwoZDMuYXhpc0xlZnQoeSkudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJyNCOUI5QjknKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMC41JylcclxuICAgICAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHZhciB4U3ViZ3JvdXAgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oc3ViZ3JvdXBzKTtcclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeFN1Ymdyb3VwLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb2xvciA9IGQzXHJcbiAgICAgICAgICAuc2NhbGVPcmRpbmFsKClcclxuICAgICAgICAgIC5kb21haW4oc3ViZ3JvdXBzKVxyXG4gICAgICAgICAgLnJhbmdlKE9iamVjdC52YWx1ZXMobWV0YURhdGEuY29sb3JzKSk7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gc3ZnXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy5zdGF0ZScpXHJcbiAgICAgICAgICAuZGF0YShkYXRhKVxyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAndHJhbnNsYXRlKCcgKyB4KGQubmFtZSkgKyAnLDApJztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHN0YXRlXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgICAgIC5kYXRhKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdMaXN0OiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgc3ViZ3JvdXBzLm1hcChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0geyBrZXk6IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH07XHJcbiAgICAgICAgICAgICAgbmV3TGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3TGlzdDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgLmFwcGVuZCgncmVjdCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYmFycycpXHJcbiAgICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgaWYgKGQua2V5ICE9ICdUYXJnZXQnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmXHJcbiAgICAgICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGVtcFNjYWxlKGQua2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geFN1Ymdyb3VwKGQua2V5KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB5KGQudmFsdWUpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7ICAgIFxyXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgdGVtcDtcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRlbXBTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geFN1Ymdyb3VwLmJhbmR3aWR0aCgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoZC52YWx1ZSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkLnZhbHVlKSByZXR1cm4gaGVpZ2h0IC0geShkLnZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLnN0eWxlKCdjdXJzb3InLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duICYmICFpc3JpYSkgcmV0dXJuICdwb2ludGVyJztcclxuICAgICAgICAgICAgZWxzZSByZXR1cm4gJ2RlZmF1bHQnO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGQudmFsdWUgJiZcclxuICAgICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgICAgIGQudmFsdWUgPj0gcGFyc2VJbnQoc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSAmJlxyXG4gICAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0W2Qua2V5XTtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dHNPbkJhciAhPSB1bmRlZmluZWQgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgICAgIHN0YXRlXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAgICAgICAuZGF0YShmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGxldCBuZXdMaXN0OiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgICBzdWJncm91cHMubWFwKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHsga2V5OiBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9O1xyXG4gICAgICAgICAgICAgICAgbmV3TGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xpc3Q7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kYXRhLWxhYmVscy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkLmtleSAmJiBkLnZhbHVlXHJcbiAgICAgICAgICAgICAgICA/IGQua2V5Lmxlbmd0aCA+IDIwXHJcbiAgICAgICAgICAgICAgICAgID8gZC5rZXkuc3Vic3RyaW5nKDAsIDE3KSArICcuLi4nXHJcbiAgICAgICAgICAgICAgICAgIDogZC5rZXlcclxuICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICcjMDAwJztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICdib2xkJylcclxuICAgICAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxOTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAnMThweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gJzEwcHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuICcxNHB4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcxNHB4JztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgdGVtcDtcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnRleHRBbHdheXNIb3Jpem9udGFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgKyB4U3ViZ3JvdXAoZC5rZXkpICsgJywnICsgKHkoZC52YWx1ZSkgLSAzKSArICcpJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCFpc05hTih0ZW1wU2NhbGUoZC5rZXkpKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgICAgICh0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpICogMC41NSkgK1xyXG4gICAgICAgICAgICAgICAgICAnLCcgK1xyXG4gICAgICAgICAgICAgICAgICAoeSgwKSAtIDEwKSArXHJcbiAgICAgICAgICAgICAgICAgICcpIHJvdGF0ZSgyNzApJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLDApJztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmXHJcbiAgICAgICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKCFpc3JpYSkge1xyXG4gICAgICAgICAgICAgIHN0YXRlLnNlbGVjdEFsbCgnLmxpYi1kYXRhLWxhYmVscy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgICAgICAgICAgLm9uKCdtb3VzZW91dCcsIGhhbmRsZU1vdXNlT3V0KVxyXG4gICAgICAgICAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCB8fCAoXHJcbiAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyID09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3AgPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNyaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAgICAgICAub24oJ21vdXNlb3V0JywgaGFuZGxlTW91c2VPdXQpXHJcbiAgICAgICAgICAgIC5vbignbW91c2VvdmVyJywgaGFuZGxlTW91c2VPdmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlTW91c2VPdmVyKGQsIGkpIHtcclxuICAgICAgICAgIHN2Zy5zZWxlY3RBbGwoJy5saWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICB2YXIgZWxlbWVudHNDb3VudGVyO1xyXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50c0NvdW50ZXIgPSBrZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICB4KGQubmFtZSkgKyB0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMiAtIDkwXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICB4KGQubmFtZSkgK1xyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUoZC5rZXkpIC1cclxuICAgICAgICAgICAgICAgICAgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArXHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiB4KGQubmFtZSkgKyB0ZW1wU2NhbGUoZC5rZXkpIC0gKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB5KGQudmFsdWUpIC0gMyAtIDQwO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cignZHknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGQuY2xhc3M7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIGZ1bmN0aW9uICgpIHtcclxuICAgIFxyXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gJzE4MHB4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAndGl0bGUnKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlID8gbWV0YURhdGEuZGF0YVR5cGUgOiAnJztcclxuICAgICAgICAgICAgICBpZiAoIXNlbGYuaXNab29tZWRPdXQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkZXNpcmVkVGV4dCA9XHJcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JyArIGQubmFtZSArICc8L3NwYW4+JztcclxuICAgICAgICAgICAgICAgIGRlc2lyZWRUZXh0ICs9XHJcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPjxzcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICBkLnZhbHVlICtcclxuICAgICAgICAgICAgICAgICAgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgK1xyXG4gICAgICAgICAgICAgICAgICAnPC9zcGFuPic7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzaXJlZFRleHQ7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wS2V5ID1cclxuICAgICAgICAgICAgICAgICAgZC5uYW1lLmxlbmd0aCA8PSA4ID8gZC5uYW1lIDogZC5uYW1lLnN1YnN0cmluZygwLCA1KSArICcuLi4nO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRlc2lyZWRUZXh0ID1cclxuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4nICtcclxuICAgICAgICAgICAgICAgICAgdGVtcEtleSArXHJcbiAgICAgICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgICAgIGQudmFsdWUgK1xyXG4gICAgICAgICAgICAgICAgICBkYXRhVHlwZSArXHJcbiAgICAgICAgICAgICAgICAgICc8L3NwYW4+JztcclxuICAgICAgICAgICAgICAgIGRlc2lyZWRUZXh0ICs9XHJcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPicgKyBkLm5hbWUgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzaXJlZFRleHQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlTW91c2VPdXQoZCwgaSkge1xyXG4gICAgICAgICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAneDIgYXhpczInKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgICAgLnN0eWxlKCdjb2xvcicsICcjMDAwJylcclxuICAgIFxyXG4gICAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGVGcm9tT3JpZ2luKS50aWNrU2l6ZSgwKSlcclxuICAgICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuICAgICAgICBzdmcuc2VsZWN0QWxsKCdnLngyLmF4aXMyIGcudGljayB0ZXh0Jykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAgICAgLmNhbGwoeSlcclxuICAgICAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAgICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgICAgIC5jYWxsKFxyXG4gICAgICAgICAgICBkM1xyXG4gICAgICAgICAgICAgIC5heGlzTGVmdCh5KVxyXG4gICAgICAgICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgICAgICAudGlja0Zvcm1hdChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgICAgIC5jYWxsKHkpXHJcbiAgICAgICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZDMuc2VsZWN0QWxsKCdnLmxpYi1saW5lLXgtYXhpcy10ZXh0ID4gZyA+IHRleHQnKS5hdHRyKFxyXG4gICAgICAgICAgICAnY2xhc3MnLFxyXG4gICAgICAgICAgICAnbGliLWRpc3BsYXktaGlkZGVuJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQgPiBnID4gdGV4dCcpLmF0dHIoXHJcbiAgICAgICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgICAgICdsaWItZGlzcGxheS1oaWRkZW4nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWQgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAgICAgLnN0eWxlKCdjb2xvcicsICcjOTk5OTk5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaW5lRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAobGluZURhdGEgJiYgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc2hvd0xpbmVDaGFydEF4aXMpIHtcclxuICAgICAgICAgICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dDEnKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsMCknKVxyXG4gICAgICAgICAgICAgIC5jYWxsKHlMaW5lQXhpcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgICAgICAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMScpXHJcbiAgICAgICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAgICAgICAuYXR0cigneScsIDAgLSBtYXJnaW4ubGVmdCAvIDIgLSAzMClcclxuICAgICAgICAgICAgLmF0dHIoJ3gnLCAwIC0gaGVpZ2h0IC8gMilcclxuICAgICAgICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAgICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgICAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICdzbWFsbGVyJylcclxuICAgICAgICAgICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlsYWJlbC13ZWVrbHlDaGFydHMnKVxyXG4gICAgICAgICAgICAgIC50ZXh0KG1ldGFEYXRhLnlMYWJlbC50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgICBmdW5jdGlvbiBpc0Fjcm9ueW0obGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgICAgICAobGFiZWwgPT09IGxhYmVsLnRvVXBwZXJDYXNlKCkgJiYgL1tBLVpdLy50ZXN0KGxhYmVsKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHhMYWJlbFRleHQgPSBtZXRhRGF0YS54TGFiZWw7XHJcbiAgICAgIGNvbnN0IGlzQWNyID0gaXNBY3JvbnltKHhMYWJlbFRleHQucmVwbGFjZSgvW15BLVphLXpdL2csICcnKSk7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpXHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi14bGFiZWwtZHJpbGxkb3duY2hhcnRzJztcclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi14bGFiZWwtd2Vla2x5Q2hhcnRzJztcclxuICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCc7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgICAndHJhbnNsYXRlKCcgKyB3aWR0aCAvIDIgKyAnICwnICsgKGhlaWdodCArIG1hcmdpbi50b3AgKyAyMCkgKyAnKSdcclxuICAgICAgICApXHJcbiAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLnRleHQoaXNBY3IgPyB4TGFiZWxUZXh0LnRvVXBwZXJDYXNlKCkgOiB4TGFiZWxUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgLnN0eWxlKCd0ZXh0LXRyYW5zZm9ybScsIGlzQWNyID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgICAgICAgIGNvbnN0IHlaZXJvID0geSh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAgICAgICAuYXR0cigneDEnLCAwKVxyXG4gICAgICAgICAgICAuYXR0cigneDInLCB3aWR0aClcclxuICAgICAgICAgICAgLmF0dHIoJ3kxJywgeVplcm8pXHJcbiAgICAgICAgICAgIC5hdHRyKCd5MicsIHlaZXJvKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcik7XHJcbiAgICAgICAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArICh5WmVybyAtIDMwKSArICcpJylcclxuICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRhVHlwZVRlbXAgPSAnJztcclxuICAgICAgICAgICAgICBsZXQgdGFyZ2V0TGluZU5hbWUgPSAndGFyZ2V0JztcclxuICAgICAgICAgICAgICBpZiAobWV0YURhdGEuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlVGVtcCA9IG1ldGFEYXRhLmRhdGFUeXBlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0TGluZU5hbWUgPSBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgYDxkaXY+JHt0YXJnZXRMaW5lTmFtZX08L2Rpdj5gICtcclxuICAgICAgICAgICAgICAgICc8ZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICtcclxuICAgICAgICAgICAgICAgICcnICtcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlVGVtcCArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+J1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhLmxpbmV5TGFiZWwpIHtcclxuICAgICAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBsaWItbGluZS1heGlzJylcclxuICAgICAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKSByb3RhdGUoOTApJylcclxuICAgICAgICAgICAgLmF0dHIoJ3knLCAwIC0gMTAwKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIDAgKyAxMDApXHJcbiAgICAgICAgICAgIC5hdHRyKCdkeScsICc1ZW0nKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAgICAgICAudGV4dChtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpbmVEYXRhKSB7XHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgICAgICAgIC5kYXR1bShsaW5lRGF0YSlcclxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXHJcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2UnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEuNSlcclxuICAgICAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgICAgJ2QnLFxyXG4gICAgICAgICAgICAgIGQzXHJcbiAgICAgICAgICAgICAgICAubGluZSgpXHJcbiAgICAgICAgICAgICAgICAueChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnkoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgXHJcbiAgICAgICAgICB2YXIgZG90ID0gc3ZnXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ215Q2lyY2xlcycpXHJcbiAgICAgICAgICAgIC5kYXRhKGxpbmVEYXRhKVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmXHJcbiAgICAgICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIFxyXG4gICAgICAgICAgZG90XHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXHJcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2UnLCAnbm9uZScpXHJcbiAgICAgICAgICAgIC5hdHRyKCdjeCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cignY3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICdwb2ludGVyJylcclxuICAgICAgICAgICAgLmF0dHIoJ3InLCAzKTtcclxuICAgIFxyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKSB7XHJcbiAgICAgICAgICAgIGRvdFxyXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdkb3QnKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdjb2xvcicsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdzdHlsZScsICdmb250LXNpemU6ICcgKyAnLjg1ZW0nKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2R5JywgJy0xZW0nKVxyXG4gICAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBcclxuICAgICAgaGFuZGxlQ2xpY2soZDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biB8fCBkPy50b2dnbGVGcm9tKVxyXG4gICAgICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgICAgIH1cclxuICAgICAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICAgICAgfVxyXG4gICAgICBoYW5kbGVERDFDbGljayhldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXNERDFPcGVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzREQyT3BlbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGhhbmRsZUREMkNsaWNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc0REMk9wZW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNERDFPcGVuID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZXZlbnQpO1xyXG4gICAgICB9ICBcclxuICB9IiwiPGRpdlxyXG4gICNncm91cGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnKTtcIlxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG5cclxuPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12M1xyXG4gICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgKGNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbik9XCJoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPlxyXG48L2Rpdj5cclxuXHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjFcclxuICBbdGl0bGVdPVwiY2hhcnREYXRhLm1ldGFEYXRhLnRpdGxlXCJcclxuICBbaGFzRHJpbGxEb3duXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd25cIlxyXG4gIFtpc0VkaXRFbmFibGVkXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5pc0VkaXRFbmFibGVkXCJcclxuICBbbWVudU9wdGlvbnNdPVwiY2hhcnRDb25maWd1cmF0aW9uLmhlYWRlck1lbnVPcHRpb25zXCJcclxuICBbaXNyaWFdPVwiY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXCJcclxuICBbc2VsZWN0ZWRLcGlUb29sdG9wXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zZWxlY3RlZEtwaVRvb2x0b3BcIlxyXG4gIChtZW51T3B0aW9uQ2xpY2tFdmVudCk9XCJoYW5kbGVIZWFkZXJNZW51Q2xpY2soJGV2ZW50KVwiXHJcbiAgW2lzQWxlcnRFbmFibGVkXT1cImlzQWxlcnRFbmFibGVkXCJcclxuICAqbmdJZj1cImlzSGVhZGVyVmlzaWJsZVwiXHJcbj48L2xpYi1jaGFydC1oZWFkZXItdjE+XHJcblxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cImdyb3VwY2hhcnRjb250YWluZXJcIlxyXG4gICAgI2dyb3VwY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2Z1wiXHJcbiAgPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19
1249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2dyb3VwLWNoYXJ0L2dyb3VwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ncm91cC1jaGFydC9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBRSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUFRbEQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGlCQUFpQjtJQXNFdEQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQTlEQSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyQyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3pELG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLDRCQUF1QixHQUFZLEtBQUssQ0FBQztRQUN6Qyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0IsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFekIseUJBQW9CLEdBQVE7WUFDMUIsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFF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QkFDekIsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQzFELElBQUksSUFBSSxDQUFDO3dCQUNULFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQ3BDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztvQ0FDcEQsU0FBUyxDQUFDLEtBQUssQ0FBQzt3Q0FDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3Q0FDN0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7cUNBQzFDLENBQUMsQ0FBQztvQ0FDSCxrQkFBa0I7Z0NBQ3BCLENBQUM7O29DQUNDLFNBQVMsQ0FBQyxLQUFLLENBQUM7d0NBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7d0NBQzdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3FDQUMxQyxD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XG4gICAgT25Jbml0LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIElucHV0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuICBpbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbiAgaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gJy4uL2NoYXJ0LWhlbHBlcic7XHJcbiAgaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG4gIGltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuICBpbXBvcnQgSGVhZGVyQ29uZmlnSGVscGVyIGZyb20gJy4uL2hlYWRlci1jb25maWcnO1xyXG5cclxuICBAQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWdyb3VwLWNoYXJ0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9ncm91cC1jaGFydC5jb21wb25lbnQubGVzcycsICcuLi9jb21tb24tc3R5bGVzLmxlc3MnXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgfSlcclxuICBleHBvcnQgY2xhc3MgR3JvdXBDaGFydENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgICAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICAgIGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcbiAgICBcclxuICAgICAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgICBncm91cGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcbiAgICBcclxuICAgICAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgICAgIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gICAgICBAT3V0cHV0KCkgY2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgICAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgbGVnZW5kVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgICAgIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cztcclxuICAgIFxyXG4gICAgICBkZWZhdWx0Q29uZmlndXJhdGlvbjogYW55ID0ge1xyXG4gICAgICAgIG1hcmdpbjogeyB0b3A6IDIwLCByaWdodDogMjAsIGJvdHRvbTogMjAsIGxlZnQ6IDQwIH0sXHJcbiAgICAgICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICAgICAgc3ZnSGVpZ2h0OiA3MCxcclxuICAgICAgICBudW1iZXJPZllUaWNrczogNSxcclxuICAgICAgICBsZWdlbmRKdXN0aWZpZWQ6IHRydWUsXHJcbiAgICAgICAgeUxpbmVBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgICAgICB5QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICAgICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgICAgICBzaG93TGluZUNoYXJ0QXhpczogdHJ1ZSxcclxuICAgICAgICBzaG93VmFsdWVzOiB0cnVlLFxyXG4gICAgICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgICAgIHhBeGlzR3JpZDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHlBeGlzR3JpZDogZmFsc2UsXHJcbiAgICAgICAgbGVnZW5kVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgICAgICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGlzTXVsdGlDaGFydEdyaWRMaW5lOiB1bmRlZmluZWQsXHJcbiAgICAgICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICAgICAgY3VzdG9tWXNjYWxlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGV4dHNPbkJhcjogdW5kZWZpbmVkLFxyXG4gICAgICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgICAgIGlzWWF4aXNMYWJlbEhpZGRlbjogZmFsc2UsXHJcbiAgICAgICAgaXNZYXhpc0hpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgICAgIGlzWWF4aXNEYXNoZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICB0ZXh0Rm9ybWF0dGVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgaXNOb0FsdGVybmF0ZVhheGlzVGV4dDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgaGlkZUxlZ2VuZE9uVG9wOiB0cnVlLFxyXG4gICAgICAgIGlzWGF4aXNDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgICAgIGxhYmVsT3ZlcmxhcE1pbm9yRml4OiB0cnVlLFxyXG4gICAgICAgIG5vSG92ZXJFZmZlY3Q6IHRydWUsXHJcbiAgICAgICAgbm9Ib3ZlckRpc3BsYXlEYXRhOiB0cnVlLFxyXG4gICAgICAgIHNob3dYYXhpc1RvcDogdHJ1ZSxcclxuICAgICAgICBkaXNwbGF5WWF4aXNMYWJlbHM6IHVuZGVmaW5lZCxcclxuICAgICAgICB4TGFiZWxzT25TYW1lTGluZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRleHRBbHdheXNIb3Jpem9udGFsOiB1bmRlZmluZWQsXHJcbiAgICAgICAgbGVnZW5kQXRUb3BSaWdodDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHVuZGVmaW5lZCxcclxuICAgICAgICBkaXNwbGF5VGl0bGVPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgICAgIGlzVGl0bGVIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgICAgICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b206IHVuZGVmaW5lZCxcclxuICAgICAgICBob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheTogMCxcclxuICAgICAgICBiYXJWYXVsZUNvbG9yOiB1bmRlZmluZWQsXHJcbiAgICAgIH07XHJcbiAgICBcclxuICAgICAgdW5pcXVlSWQ6IGFueSA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICAgICAgaXNab29tZWRPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgaXNERDFPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIGlzREQyT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgIH1cclxuICAgIFxyXG4gICAgICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCkge1xyXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkMy5zZWxlY3QoJyMnICsgc2VsZi51bmlxdWVJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWdyb3VwQ2hhcnQoKTtcclxuICAgICAgICAgIH0uYmluZChzZWxmKSxcclxuICAgICAgICAgIDEwXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc1pvb21lZE91dCA9IGlzWm9vbU91dDtcclxuICAgICAgICB0aGlzLm9uUmVzaXplZChldmVudCk7XHJcbiAgICAgIH1cclxuICAgICAgaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKHsgaXNab29tT3V0LCBldmVudCB9KSB7XHJcbiAgICAgICAgdGhpcy5pc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICBuZ09uSW5pdCgpIHt9XHJcbiAgICAgIGlzTGVnZW5kVmlzaWJsZSgpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSAmJlxyXG4gICAgICAgICAgdGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JzICYmXHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMpLmxlbmd0aCA+IDFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAga2VlcE9yZGVyID0gKGEsIGIpID0+IHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgICAgZ2V0IGlzQWxlcnRFbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbj8uaGVhZGVyTWVudU9wdGlvbnM/LnNvbWUob3B0aW9uID0+IG9wdGlvbi5pZCA9PT0gJ2VkaXRBbGVydCcpO1xyXG59XHJcbiAgICAgIGluaXRpYWxpemVncm91cENoYXJ0KCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBsZXQgZGF0YSA9IFtdO1xyXG4gICAgICAgIGxldCBtZXRhRGF0YTogYW55ID0gbnVsbDtcclxuICAgICAgICBsZXQga2V5TGlzdCA9IG51bGw7XHJcbiAgICAgICAgbGV0IGxpbmVEYXRhID0gbnVsbDtcclxuICAgICAgICBsZXQgY29sb3JNYXAgPSB7fTtcclxuICAgICAgICB2YXIgZm9ybWF0RnJvbUJhY2tlbmQ7XHJcbiAgICAgICAgdmFyIGZvcm1hdEZvckh1Z2VOdW1iZXJzO1xyXG5cclxuICAgbGV0IGlzcmlhID0gdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcclxuXHJcbiAgICBcclxuICAgICAgICB2YXIgeDogYW55O1xyXG4gICAgXHJcbiAgICAgICAgdmFyIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHNob3J0X3RpY2tfbGVuZ3RoID0gNDtcclxuICAgICAgICB2YXIgbG9uZ190aWNrX2xlbmd0aCA9IDE2O1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGxvbmdlciB0aWNrIGxlbmd0aCBuZWVkZWQgZm9yIHdlZWtseSBjaGFydHNcclxuICAgICAgICAgKi9cclxuICAgICAgICB2YXIgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgICAgIHZhciBsb25nX3RpY2tfbGVuZ3RoX2JnID0gMzA7XHJcbiAgICAgICAgdmFyIGxlZnRBbmRSaWdodFNwYWNlcyA9IDUwO1xyXG4gICAgICAgIHZhciByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICAgICAgdmFyIHRlbXBTY2FsZTtcclxuICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25baV0gPSBDaGFydEhlbHBlci5nZXRWYWx1ZUJ5Q29uZmlndXJhdGlvblR5cGUoXHJcbiAgICAgICAgICAgIGksXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gICAgICAgIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgICAgICAgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuICAgIFxyXG4gICAgICAgIC8vIGlmIChsaW5lRGF0YSB8fCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICAgIC8vICAgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgICAgIG1ldGFEYXRhWydjb2xvckFib3ZlVGFyZ2V0J10gPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbG9yTWFwID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAgICAgIGtleUxpc3QgPSBtZXRhRGF0YS5rZXlMaXN0O1xyXG4gICAgXHJcbiAgICAgICAgdmFyIGNoYXJ0Q29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIHZhciB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QoXHJcbiAgICAgICAgICB0aGlzLmdyb3VwY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnRcclxuICAgICAgICApO1xyXG4gICAgICAgIHZhciBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcbiAgICAgICAgdmFyIHdpZHRoID1cclxuICAgICAgICAgIHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDMwICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgICAgIHdpZHRoID1cclxuICAgICAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGExXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNjBcclxuICAgICAgICAgICAgICAgIDogd2lkdGhcclxuICAgICAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTFcclxuICAgICAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNjBcclxuICAgICAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDA7XHJcbiAgICBcclxuICAgICAgICAgIHdpZHRoID1cclxuICAgICAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICAgICAgPyB3aWR0aFxyXG4gICAgICAgICAgICAgIDogdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiA0MDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJlxyXG4gICAgICAgICAgd2lkdGggPCB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMCAmJlxyXG4gICAgICAgICAgdGhpcy5pc1pvb21lZE91dFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgd2lkdGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGEyICYmXHJcbiAgICAgICAgICAgIHdpZHRoIDwgdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAyNTBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMjUwO1xyXG4gICAgICAgICAgfSBlbHNlIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAxNjA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDgpIHtcclxuICAgICAgICAvLyAgIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAxNDA7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgXHJcbiAgICAgICAgdmFyIGhlaWdodCA9XHJcbiAgICAgICAgICBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSAqXHJcbiAgICAgICAgICAgIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgLyAxMDApIC1cclxuICAgICAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICAgICAgbWFyZ2luLmJvdHRvbTtcclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGVudGlyZSBoZWlnaHQgdXNlZCBpbiB3ZWVrbHkgY2hhcnRzIGFzIHggYXhpcyBuZWVkZWQgdG8gYmUgZGlzcGxheWVkIGF0IHRoZSBib3R0b20gb2YgdGhlIGNoYXJ0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBoZWlnaHQgPVxyXG4gICAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgIT0gNzBcclxuICAgICAgICAgICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFxyXG4gICAgICAgICAgICAgIDogcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiYgIXRoaXMuaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9XHJcbiAgICAgICAgICAgICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgLVxyXG4gICAgICAgICAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICAgICAgICAgIG1hcmdpbi5ib3R0b20gLVxyXG4gICAgICAgICAgICAgIDEzMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9XHJcbiAgICAgICAgICAgICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgLVxyXG4gICAgICAgICAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICAgICAgICAgIG1hcmdpbi5ib3R0b20gLVxyXG4gICAgICAgICAgICAgIDEwMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBmb3IgaGlkaW5nIGhlYWRlclxyXG4gICAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGU7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogZm9yIGhpZGluZyBsZWdlbmRzXHJcbiAgICAgICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZFZpc2libGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmxlZ2VuZFZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGZvciByZW1vdmluZyBiYWNrZ3JvdW5kIGNvbG9yIHNvIHRoYXQgaXQgY2FuIHRha2UgcGFyZW50cyBjb2xvclxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9XHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBmb3JtYXQgZGF0YSB2YWx1ZXMgYmFzZWQgb24gY29uZmlndXJhdGlvbiByZWNlaXZlZFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgZm9ybWF0RnJvbUJhY2tlbmQgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoXHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBmb3JtYXRGb3JIdWdlTnVtYmVycyA9IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcignLjJzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvdXRlckNvbnRhaW5lciA9IGNoYXJ0Q29udGFpbmVyXHJcbiAgICAgICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAgICAgLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdvdXRlci1jb250YWluZXInKVxyXG4gICAgICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgICAgIC5zdHlsZSgnaGVpZ2h0JywgaGVpZ2h0KVxyXG4gICAgXHJcbiAgICAgICAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnaGlkZGVuJylcclxuICAgICAgICAgIC5zdHlsZSgncGFkZGluZy1sZWZ0JywgYCR7bWFyZ2luLmxlZnR9cHhgKVxyXG4gICAgICAgICAgLy8gLmNhbGwoQ2hhcnRIZWxwZXIucmVzcG9uc2l2ZWZ5KVxyXG4gICAgXHJcbiAgICAgICAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgICAgICAgIC5zdHlsZSgnbWFyZ2luLWxlZnQnLCcxNXB4Jyk7XHJcbiAgICAgICAgdmFyIHN2Z1lBeGlzTGVmdCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAgICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCcpXHJcbiAgICAgICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAxMClcclxuICAgICAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAgICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgICAgICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIChtYXJnaW4ubGVmdCArIDE1KSArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG4gICAgXHJcbiAgICAgICAgdmFyIHN2Z1lBeGlzUmlnaHQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAxMClcclxuICAgICAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAgICAgLnN0eWxlKCdyaWdodCcsICcxMnB4JylcclxuICAgICAgICAgIC5zdHlsZSgnei1pbmRleCcsIDEpXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgbWFyZ2luLnRvcCArICcpJyk7XHJcbiAgICBcclxuICAgICAgICB2YXIgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdpbm5lci1jb250YWluZXInKVxyXG4gICAgICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgICAgIC5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJyk7XHJcbiAgICBcclxuICAgICAgICB2YXIgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAgICAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgICAgICAvLyAuYXR0cignaWQnLCBzZWxmLnVuaXF1ZUlkKVxyXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGggLSByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMzApXHJcbiAgICAgICAgICAvLyAuY2FsbChDaGFydEhlbHBlci5yZXNwb25zaXZlZnkpXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgbWFyZ2luLnRvcCArICcpJyk7XHJcbiAgICBcclxuICAgICAgICB2YXIgc3ViZ3JvdXBzOiBhbnkgPSBrZXlMaXN0O1xyXG4gICAgXHJcbiAgICAgICAgdmFyIGdyb3VwcyA9IGQzXHJcbiAgICAgICAgICAubWFwKGRhdGEsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkLm5hbWU7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmtleXMoKTtcclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHggYXhpcyByYW5nZSBtYWRlIHNpbWlsYXIgdG8gbGluZSBjaGFydCBvciB2ZXJ0aWNhbCBzdGFjayBzbyB0aGF0IGFsbCB0aGUgY2hhcnRzIHdpbGwgZ2V0IGFsaWduZWQgd2l0aCBlYWNoIG90aGVyLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHggPSBkM1xyXG4gICAgICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAgICAgLnJhbmdlUm91bmQoW3dpZHRoLCAwXSlcclxuICAgICAgICAgICAgLmFsaWduKDAuNSlcclxuICAgICAgICAgICAgLnBhZGRpbmcoWzAuNV0pXHJcbiAgICAgICAgICAgIC5kb21haW4oXHJcbiAgICAgICAgICAgICAgZGF0YS5tYXAoZnVuY3Rpb24gKGQ6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGQubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHggPSBkM1xyXG4gICAgICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAgICAgLmRvbWFpbihncm91cHMpXHJcbiAgICAgICAgICAgIC5yYW5nZShbbGVmdEFuZFJpZ2h0U3BhY2VzLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGggLSBsZWZ0QW5kUmlnaHRTcGFjZXNdKVxyXG4gICAgICAgICAgICAucGFkZGluZyhbMC4zXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHguYmFuZHdpZHRoKDk2KTtcclxuICAgICAgICB2YXIgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAgIC5kb21haW4oZ3JvdXBzKVxyXG4gICAgICAgICAgLnJhbmdlKFswLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGhdKTtcclxuICAgICAgICAvLyAucGFkZGluZyhbMC4yXSk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogZHJhdyBzZWNvbmQgeCBheGlzIG9uIHRvcFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93WGF4aXNUb3ApIHtcclxuICAgICAgICAvLyAgIHN2Z1xyXG4gICAgICAgIC8vICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAvLyAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1saW5lLWF4aXMtdGV4dCBsaWItbGluZS14LWF4aXMtdGV4dCB4LWF4aXMnKVxyXG4gICAgICAgIC8vICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgLy8gICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvLyBkMy5zdmcuYXhpcygpLnNjYWxlKHgpLm9yaWVudCgnYm90dG9tJykudGlja3MoMSkuaW5uZXJUaWNrU2l6ZSgtaGVpZ2h0KTtcclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIG5vcm1hbCB0aWNrcyBmb3IgYWxsIGRhc2hib2FyZCBjaGFydHNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpKVxyXG4gICAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3ViZ3JvdXBzLmxlbmd0aCA+IDEgJiYgIW1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3knLCAzMik7IC8vIEluY3JlYXNlIGRpc3RhbmNlIGZyb20gYmFycyAoZGVmYXVsdCBpcyB+OSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAuYXR0cigneScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIC8vICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgICAgICAvLyAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aCArIDE7XHJcbiAgICAgICAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aCArIDE7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIGJpZ2dlciB0aWNrcyBmb3Igd2Vla2x5IGNoYXJ0cyBhbmQgbW9yZSBzcGFjZSBmcm9tIHggYXhpcyB0byBsYWJlbHNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBkcmF3IHggYXhpc1xyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSlcclxuICAgICAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiB0aWNrIGxpbmUgc2l6ZSBpbiBhbHRlcm5hdGUgZmFzaGlvblxyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuYXR0cigneTInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCAmJlxyXG4gICAgICAgICAgICAgIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTm9BbHRlcm5hdGVYYXhpc1RleHQgPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmcgLSA3O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmcgLSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogcmVzZXQgdGhlIGZsYWcgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIHNob3duIGluIHNhbWUgYWx0ZXJuYXRlIGZhc2hpb25cclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogcHJpbnQgeC1heGlzIGxhYmVsIHRleHRzXHJcbiAgICAgICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgICAgICAuYXR0cigneScsIHNob3J0X3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHZhciBpc1ZhbHVlVG9CZUlnbm9yZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBpbmRpdi5uYW1lLnRvTG93ZXJDYXNlKCkgPT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICAgICAgICAgICBpbmRpdlttZXRhRGF0YS5rZXlMaXN0WzBdXSA9PSAtMVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlzVmFsdWVUb0JlSWdub3JlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoMCwgZC5pbmRleE9mKCcgJykpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgICAgIC5hdHRyKCd5JywgbG9uZ190aWNrX2xlbmd0aF9iZylcclxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnY3VycmVudENvbG9yJylcclxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJyksIGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKip5IHNjYWxlIGZvciBsZWZ0IHkgYXhpcyAqL1xyXG4gICAgICAgIHZhciB5ID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZVJvdW5kKFtoZWlnaHQsIDBdKTtcclxuICAgICAgICB2YXIgbWF4VmFsdWUgPSBkMy5tYXgoZGF0YSwgKGQpID0+IGQzLm1heChrZXlMaXN0LCAoa2V5KSA9PiArZFtrZXldKSk7XHJcbiAgICAgICAgaWYgKG1heFZhbHVlID09IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICAgICAgICBtYXhWYWx1ZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDIwO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWF4VmFsdWUgPSAxMDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgICAgICAgIC8vIHN2Z1xyXG4gICAgICAgICAgLy8gICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC8vICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAgICAgLy8gICAuY2FsbChcclxuICAgICAgICAgIC8vICAgICBkM1xyXG4gICAgICAgICAgLy8gICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgICAgICAvLyAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAvLyAgICAgICAudGlja1NpemUoLXdpZHRoKVxyXG4gICAgICAgICAgLy8gICAgICAgLnRpY2tGb3JtYXQoJycpXHJcbiAgICAgICAgICAvLyAgIClcclxuICAgICAgICAgIC8vICAgLy8gLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgICAgICAvLyAgIC5zdHlsZSgnY29sb3InLCAnI0I5QjlCOScpXHJcbiAgICAgICAgICAvLyAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAgICAgLy8gICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogaW5jcmVhc2UgeS1zY2FsZSBzbyB0aGF0IHZhbHVlcyB3b250IGNyb3NzIG9yIGV4Y2VlZCBvdXQgb2YgcmFuZ2VcclxuICAgICAgICAgICAqIHVzZWQgaW4gd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBtYXhWYWx1ZSA9IG1heFZhbHVlICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgbWF4VmFsdWUgPCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIG1heFZhbHVlID1cclxuICAgICAgICAgICAgbWF4VmFsdWUgPCAxMCAmJiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgPCAxMFxyXG4gICAgICAgICAgICAgID8gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgM1xyXG4gICAgICAgICAgICAgIDogdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHkuZG9tYWluKFswLCBtYXhWYWx1ZV0pLm5pY2UoKTtcclxuICAgICAgICBsZXQgbGluZVlzY2FsZTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAobGluZURhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgbGV0IG1heExpbmVWYWx1ZSA9IGQzLm1heChsaW5lRGF0YSwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICtkLnZhbHVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICBcclxuICAgICAgICAgIG1heExpbmVWYWx1ZSA9IG1heExpbmVWYWx1ZSAqIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuICAgIFxyXG4gICAgICAgICAgbGV0IG1pbkxpbmVWYWx1ZSA9IGQzLm1pbihsaW5lRGF0YSwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICtkLnZhbHVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAobWF4TGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlID0gbWluTGluZVZhbHVlIC0gMztcclxuICAgICAgICAgIGlmIChtaW5MaW5lVmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgIG1pbkxpbmVWYWx1ZSA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsaW5lWXNjYWxlID0gZDNcclxuICAgICAgICAgICAgLnNjYWxlTGluZWFyKClcclxuICAgICAgICAgICAgLmRvbWFpbihbbWluTGluZVZhbHVlLCBtYXhMaW5lVmFsdWVdKVxyXG4gICAgICAgICAgICAucmFuZ2UoW2hlaWdodCwgbWluTGluZVZhbHVlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB5TGluZUF4aXM7XHJcbiAgICAgICAgaWYgKGxpbmVZc2NhbGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgeUxpbmVBeGlzID0gZDNcclxuICAgICAgICAgICAgLmF4aXNSaWdodChsaW5lWXNjYWxlKVxyXG4gICAgICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgICAgICAudGlja0Zvcm1hdChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55TGluZUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogc2hvdyB4LWF4aXMgZ3JpZCBiZXR3ZWVuIGxhYmVsc1xyXG4gICAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hncmlkQmV0d2VlbkxhYmVscykge1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZ3JpZCcpXHJcbiAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArIHguYmFuZHdpZHRoKCkgLyAyICsgJywnICsgaGVpZ2h0ICsgJyknXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciwgIzk5OTk5OSknKVxyXG4gICAgICAgICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzR3JpZCkge1xyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBkcmF3IHkgYXhpc1xyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAgIC5jYWxsKFxyXG4gICAgICAgICAgICAgIGQzXHJcbiAgICAgICAgICAgICAgICAuYXhpc0xlZnQoeSlcclxuICAgICAgICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgICAgICAgIC50aWNrU2l6ZSgtd2lkdGgpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAgICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHN2Z1xyXG4gICAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgICAgLmNhbGwoZDMuYXhpc0xlZnQoeSkudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJyNCOUI5QjknKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMC41JylcclxuICAgICAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHZhciB4U3ViZ3JvdXAgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oc3ViZ3JvdXBzKTtcclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiB1c2VkIHRvIG1ha2UgZ3JvdXBlZCBiYXJzIHdpdGggbGVzc2VyIHdpZHRoIGFzIHdlIGFyZSBub3QgdXNpbmcgcGFkZGluZyBmb3Igd2lkdGhcclxuICAgICAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgIFxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB2YXIgY29sb3IgPSBkM1xyXG4gICAgICAgICAgLnNjYWxlT3JkaW5hbCgpXHJcbiAgICAgICAgICAuZG9tYWluKHN1Ymdyb3VwcylcclxuICAgICAgICAgIC5yYW5nZShPYmplY3QudmFsdWVzKG1ldGFEYXRhLmNvbG9ycykpO1xyXG4gICAgICAgIC8vIHZhciBjb2xvckFib3ZlVGFyZ2V0ID0gZDNcclxuICAgICAgICAvLyAgIC5zY2FsZU9yZGluYWwoKVxyXG4gICAgICAgIC8vICAgLmRvbWFpbihzdWJncm91cHMpXHJcbiAgICAgICAgLy8gICAucmFuZ2UoT2JqZWN0LnZhbHVlcyhtZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0KSk7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gc3ZnXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy5zdGF0ZScpXHJcbiAgICAgICAgICAuZGF0YShkYXRhKVxyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAndHJhbnNsYXRlKCcgKyB4KGQubmFtZSkgKyAnLDApJztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHN0YXRlXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgICAgIC5kYXRhKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdMaXN0OiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgc3ViZ3JvdXBzLm1hcChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKGtleSAhPT0gXCJncm91cFwiKSB7XHJcbiAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0geyBrZXk6IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH07XHJcbiAgICAgICAgICAgICAgbmV3TGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0xpc3Q7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2JhcnMnKVxyXG4gICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGlmIChkLmtleSAhPSAnVGFyZ2V0Jykge1xyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHxcclxuICAgICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgICAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5uYW1lKSAmJlxyXG4gICAgICAgICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLy8gc2VsZi5oYW5kbGVDbGljayhkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGVtcFNjYWxlKGQua2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geFN1Ymdyb3VwKGQua2V5KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB5KGQudmFsdWUpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgICAgICAgICAgLy8gdmFyIHRlbXBTY2FsZTtcclxuICAgIFxyXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgdGVtcDtcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRlbXBTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geFN1Ymdyb3VwLmJhbmR3aWR0aCgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoZC52YWx1ZSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkLnZhbHVlKSByZXR1cm4gaGVpZ2h0IC0geShkLnZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLy8gLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpXHJcbiAgICAgICAgICAuc3R5bGUoJ2N1cnNvcicsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24gJiYgIWlzcmlhKSByZXR1cm4gJ3BvaW50ZXInO1xyXG4gICAgICAgICAgICBlbHNlIHJldHVybiAnZGVmYXVsdCc7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgZC52YWx1ZSAmJlxyXG4gICAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICAgICAgZC52YWx1ZSA+PSBwYXJzZUludChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpICYmXHJcbiAgICAgICAgICAgICAgc2VsZi5jaGFydERhdGEubWV0YURhdGEuY29sb3JBYm92ZVRhcmdldFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRbZC5rZXldO1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydERhdGEubWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogZGlzcGxheSBhbmdsZWQgdGV4dHMgb24gdGhlIGJhcnNcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dHNPbkJhciAhPSB1bmRlZmluZWQgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgICAgIHN0YXRlXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAgICAgICAuZGF0YShmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGxldCBuZXdMaXN0OiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgICBzdWJncm91cHMubWFwKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHsga2V5OiBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9O1xyXG4gICAgICAgICAgICAgICAgbmV3TGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xpc3Q7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kYXRhLWxhYmVscy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkLmtleSAmJiBkLnZhbHVlXHJcbiAgICAgICAgICAgICAgICA/IGQua2V5Lmxlbmd0aCA+IDIwXHJcbiAgICAgICAgICAgICAgICAgID8gZC5rZXkuc3Vic3RyaW5nKDAsIDE3KSArICcuLi4nXHJcbiAgICAgICAgICAgICAgICAgIDogZC5rZXlcclxuICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICcjMDAwJztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICdib2xkJylcclxuICAgICAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxOTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAnMThweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQwMCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gJzEwcHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuICcxNHB4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcxNHB4JztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgdGVtcDtcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICogaWYgc2V0LCB0aGVuIGFsbCB0ZXh0cyBsbCBiZSBob3Jpem9udGFsXHJcbiAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnRleHRBbHdheXNIb3Jpem9udGFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgKyB4U3ViZ3JvdXAoZC5rZXkpICsgJywnICsgKHkoZC52YWx1ZSkgLSAzKSArICcpJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICogcm90YXRlIHRleHRzIGhhdmluZyBtb3JlIHRoYW4gb25lIGRpZ2l0c1xyXG4gICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgIC8vIGlmIChkLnZhbHVlID4gOSlcclxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKHRlbXBTY2FsZShkLmtleSkpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgnICtcclxuICAgICAgICAgICAgICAgICAgKHRlbXBTY2FsZShkLmtleSkgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKiAwLjU1KSArXHJcbiAgICAgICAgICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICAgICAgICAgICh5KDApIC0gMTApICtcclxuICAgICAgICAgICAgICAgICAgJykgcm90YXRlKDI3MCknXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHJldHVybiAndHJhbnNsYXRlKDAsMCknO1xyXG4gICAgICAgICAgICAgIC8vIGVsc2VcclxuICAgICAgICAgICAgICAvLyAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgLy8gICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgLy8gICAgICh0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMikgK1xyXG4gICAgICAgICAgICAgIC8vICAgICAnLCcgK1xyXG4gICAgICAgICAgICAgIC8vICAgICB5KDApICtcclxuICAgICAgICAgICAgICAvLyAgICAgJyknXHJcbiAgICAgICAgICAgICAgLy8gICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrIHx8XHJcbiAgICAgICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiZcclxuICAgICAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5rZXkpKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoIWlzcmlhKSB7XHJcbiAgICAgICAgICAgICAgc3RhdGUuc2VsZWN0QWxsKCcubGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgICAgICAgICAub24oJ21vdXNlb3V0JywgaGFuZGxlTW91c2VPdXQpXHJcbiAgICAgICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsIGhhbmRsZU1vdXNlT3Zlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wIHx8IChcclxuICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCA9PSB1bmRlZmluZWRcclxuICAgICAgICApKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3JpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVcclxuICAgICAgICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgICAgICAgIC5vbignbW91c2VvdXQnLCBoYW5kbGVNb3VzZU91dClcclxuICAgICAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU92ZXIoZCwgaSkge1xyXG4gICAgICAgICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIC8vIHZhciB0ZW1wU2NhbGU7XHJcbiAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzQ291bnRlcjtcclxuICAgICAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPSAwKTtcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudHNDb3VudGVyID0ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgeChkLm5hbWUpICsgdGVtcFNjYWxlKGQua2V5KSArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDIgLSA5MFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgeChkLm5hbWUpICtcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlKGQua2V5KSAtXHJcbiAgICAgICAgICAgICAgICAgICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyKSAvIDIgK1xyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSByZXR1cm4geChkLm5hbWUpICsgdGVtcFNjYWxlKGQua2V5KSAtICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyKSAvIDIgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geShkLnZhbHVlKSAtIDMgLSA0MDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkLmNsYXNzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cignd2lkdGgnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgLy8gdmFyIHRlbXBTY2FsZTtcclxuICAgIFxyXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gJzE4MHB4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAndGl0bGUnKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlID8gbWV0YURhdGEuZGF0YVR5cGUgOiAnJztcclxuICAgICAgICAgICAgICBpZiAoIXNlbGYuaXNab29tZWRPdXQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkZXNpcmVkVGV4dCA9XHJcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JyArIGQubmFtZSArICc8L3NwYW4+JztcclxuICAgICAgICAgICAgICAgIGRlc2lyZWRUZXh0ICs9XHJcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPjxzcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICBkLnZhbHVlICtcclxuICAgICAgICAgICAgICAgICAgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgK1xyXG4gICAgICAgICAgICAgICAgICAnPC9zcGFuPic7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzaXJlZFRleHQ7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wS2V5ID1cclxuICAgICAgICAgICAgICAgICAgZC5uYW1lLmxlbmd0aCA8PSA4ID8gZC5uYW1lIDogZC5uYW1lLnN1YnN0cmluZygwLCA1KSArICcuLi4nO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRlc2lyZWRUZXh0ID1cclxuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4nICtcclxuICAgICAgICAgICAgICAgICAgdGVtcEtleSArXHJcbiAgICAgICAgICAgICAgICAgICc6JyArXHJcbiAgICAgICAgICAgICAgICAgIGQudmFsdWUgK1xyXG4gICAgICAgICAgICAgICAgICBkYXRhVHlwZSArXHJcbiAgICAgICAgICAgICAgICAgICc8L3NwYW4+JztcclxuICAgICAgICAgICAgICAgIGRlc2lyZWRUZXh0ICs9XHJcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRpdGxlLWJhci12YWx1ZVwiPicgKyBkLm5hbWUgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzaXJlZFRleHQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlTW91c2VPdXQoZCwgaSkge1xyXG4gICAgICAgICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAneDIgYXhpczInKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgICAgLnN0eWxlKCdjb2xvcicsICcjMDAwJylcclxuICAgIFxyXG4gICAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGVGcm9tT3JpZ2luKS50aWNrU2l6ZSgwKSlcclxuICAgICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuICAgICAgICBzdmcuc2VsZWN0QWxsKCdnLngyLmF4aXMyIGcudGljayB0ZXh0Jykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAgICAgLmNhbGwoeSlcclxuICAgICAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAgICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgICAgIC5jYWxsKFxyXG4gICAgICAgICAgICBkM1xyXG4gICAgICAgICAgICAgIC5heGlzTGVmdCh5KVxyXG4gICAgICAgICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgICAgICAudGlja0Zvcm1hdChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgICAgIC5jYWxsKHkpXHJcbiAgICAgICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGhpZGUgeCBheGlzIGxhYmVsc1xyXG4gICAgICAgICAqIGNvbmZpZyBpcyB0aGVyZSBmb3IgZnV0dXJlIHVzZVxyXG4gICAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZDMuc2VsZWN0QWxsKCdnLmxpYi1saW5lLXgtYXhpcy10ZXh0ID4gZyA+IHRleHQnKS5hdHRyKFxyXG4gICAgICAgICAgICAnY2xhc3MnLFxyXG4gICAgICAgICAgICAnbGliLWRpc3BsYXktaGlkZGVuJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogaGlkZSB5IGF4aXMgbGFiZWxzXHJcbiAgICAgICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQgPiBnID4gdGV4dCcpLmF0dHIoXHJcbiAgICAgICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgICAgICdsaWItZGlzcGxheS1oaWRkZW4nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBoaWRlIHkgYXhpcyBsYWJlbHNcclxuICAgICAgICAgKiBjb25maWcgaXMgdGhlcmUgZm9yIGZ1dHVyZSB1c2VcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGRhc2hlZCB5IGF4aXNcclxuICAgICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0Rhc2hlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJylcclxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgICAgICAgIC5zdHlsZSgnY29sb3InLCAnIzk5OTk5OScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGluZURhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgaWYgKGxpbmVEYXRhICYmIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnNob3dMaW5lQ2hhcnRBeGlzKSB7XHJcbiAgICAgICAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQxJylcclxuICAgICAgICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLDApJylcclxuICAgICAgICAgICAgICAuY2FsbCh5TGluZUF4aXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiB1c2VkIHRvIGRpc3BsYXkgeSBsYWJlbFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHVzZWQgdG8gd3JpdGUgeSBsYWJlbHMgYmFzZWQgb24gY29uZmlndXJhdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChtZXRhRGF0YS55TGFiZWwpIHtcclxuICAgICAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJylcclxuICAgICAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoLTkwKScpXHJcbiAgICAgICAgICAgIC5hdHRyKCd5JywgMCAtIG1hcmdpbi5sZWZ0IC8gMiAtIDMwKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgICAgICAgICAuYXR0cignZHknLCAnMWVtJylcclxuICAgICAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgICAgICAgICAuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwnKVxyXG4gICAgICAgICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAgICAgICAgIC50ZXh0KG1ldGFEYXRhLnlMYWJlbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgICAuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwnKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWxhYmVsLXdlZWtseUNoYXJ0cycpXHJcbiAgICAgICAgICAgICAgLnRleHQobWV0YURhdGEueUxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobWV0YURhdGEueExhYmVsKSB7XHJcbiAgICAgIGZ1bmN0aW9uIGlzQWNyb255bShsYWJlbCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAobGFiZWwubGVuZ3RoIDw9IDQgJiYgL15bQS1aXSskLy50ZXN0KGxhYmVsKSkgfHxcclxuICAgICAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgeExhYmVsVGV4dCA9IG1ldGFEYXRhLnhMYWJlbDtcclxuICAgICAgY29uc3QgaXNBY3IgPSBpc0Fjcm9ueW0oeExhYmVsVGV4dC5yZXBsYWNlKC9bXkEtWmEtel0vZywgJycpKTtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydClcclxuICAgICAgICAgICAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLXhsYWJlbC1kcmlsbGRvd25jaGFydHMnO1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLXhsYWJlbC13ZWVrbHlDaGFydHMnO1xyXG4gICAgICAgICAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsJztcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAndHJhbnNmb3JtJyxcclxuICAgICAgICAgICd0cmFuc2xhdGUoJyArIHdpZHRoIC8gMiArICcgLCcgKyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIDIwKSArICcpJ1xyXG4gICAgICAgIClcclxuICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAudGV4dChpc0FjciA/IHhMYWJlbFRleHQudG9VcHBlckNhc2UoKSA6IHhMYWJlbFRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3IgPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpO1xyXG4gICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICAgICAgY29uc3QgeVplcm8gPSB5KHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCk7XHJcbiAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgICAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgICAgICAgIC5hdHRyKCd4MicsIHdpZHRoKVxyXG4gICAgICAgICAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgICAgICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgICAgIC8vIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAgIC8vICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgICAvLyAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgICAgICAvLyAgIC5hdHRyKCd4MicsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgICAgICAvLyAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAgICAgLy8gICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgICAgIC8vICAgLnN0eWxlKCdzdHJva2UnLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcik7XHJcbiAgICAgICAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArICh5WmVybyAtIDMwKSArICcpJylcclxuICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIGxldCBkYXRhVHlwZVRlbXAgPSAnJztcclxuICAgICAgICAgICAgICBsZXQgdGFyZ2V0TGluZU5hbWUgPSAndGFyZ2V0JztcclxuICAgICAgICAgICAgICBpZiAobWV0YURhdGEuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlVGVtcCA9IG1ldGFEYXRhLmRhdGFUeXBlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0TGluZU5hbWUgPSBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgYDxkaXY+JHt0YXJnZXRMaW5lTmFtZX08L2Rpdj5gICtcclxuICAgICAgICAgICAgICAgICc8ZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICtcclxuICAgICAgICAgICAgICAgICcnICtcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlVGVtcCArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+J1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiB1c2VkIGJ5IGRyaWxsZG93biBjaGFydHNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgLy8gc3ZnXHJcbiAgICAgICAgICAvLyAgIC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgICAvLyAgIC5hdHRyKCdjbGFzcycsICdsaWIteWxhYmVsLWRyaWxsZG93bmNoYXJ0cycpXHJcbiAgICAgICAgICAvLyAgIC50ZXh0KG1ldGFEYXRhLnlMYWJlbC50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhRGF0YS5saW5leUxhYmVsKSB7XHJcbiAgICAgICAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCkgcm90YXRlKDkwKScpXHJcbiAgICAgICAgICAgIC5hdHRyKCd5JywgMCAtIDEwMClcclxuICAgICAgICAgICAgLmF0dHIoJ3gnLCAwICsgMTAwKVxyXG4gICAgICAgICAgICAuYXR0cignZHknLCAnNWVtJylcclxuICAgICAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICdzbWFsbGVyJylcclxuICAgICAgICAgICAgLnRleHQobWV0YURhdGEubGluZXlMYWJlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaW5lRGF0YSkge1xyXG4gICAgICAgICAgc3ZnXHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAgICAgICAuZGF0dW0obGluZURhdGEpXHJcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxLjUpXHJcbiAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICdkJyxcclxuICAgICAgICAgICAgICBkM1xyXG4gICAgICAgICAgICAgICAgLmxpbmUoKVxyXG4gICAgICAgICAgICAgICAgLngoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC55KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgIFxyXG4gICAgICAgICAgdmFyIGRvdCA9IHN2Z1xyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgICAgICAgICAuZGF0YShsaW5lRGF0YSlcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHxcclxuICAgICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgICAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5uYW1lKSAmJlxyXG4gICAgICAgICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICBcclxuICAgICAgICAgIGRvdFxyXG4gICAgICAgICAgICAuYXBwZW5kKCdjaXJjbGUnKVxyXG4gICAgICAgICAgICAuYXR0cignZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAgICAgICAuYXR0cignY3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoJ2N5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbGluZVlzY2FsZShkLnZhbHVlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpXHJcbiAgICAgICAgICAgIC5hdHRyKCdyJywgMyk7XHJcbiAgICBcclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICAgICAgICBkb3RcclxuICAgICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgICAgICAgICAuYXR0cignY29sb3InLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAgICAgICAuYXR0cignc3R5bGUnLCAnZm9udC1zaXplOiAnICsgJy44NWVtJylcclxuICAgICAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGluZVlzY2FsZShkLnZhbHVlKTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdkeScsICctMWVtJylcclxuICAgICAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxhYmVsRm9ybWF0dGVyKGQudmFsdWUpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXHJcbiAgICAgIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gfHwgZD8udG9nZ2xlRnJvbSlcclxuICAgICAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGQpO1xyXG4gICAgICB9XHJcbiAgICAgIGhhbmRsZUhlYWRlck1lbnVDbGljayhpZCkge1xyXG4gICAgICAgIHRoaXMuaGVhZGVyTWVudWNsaWNrRXZlbnQuZW1pdChpZCk7XHJcbiAgICAgIH1cclxuICAgICAgaGFuZGxlREQxQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmlzREQxT3BlbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc0REMk9wZW4gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBoYW5kbGVERDJDbGljayhldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXNERDJPcGVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzREQxT3BlbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbihldmVudCkge1xyXG4gICAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICAgICAgfSAgXHJcbiAgfSIsIjxkaXZcclxuICAjZ3JvdXBjb250YWluZXJcclxuICBjbGFzcz1cImxpYi1jaGFydC13cmFwcGVyXCJcclxuICBbbmdDbGFzc109XCJ7ICdsaWItbm8tYmFja2dyb3VuZCc6IGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kIH1cIlxyXG4gIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2FyZC1iZyk7XCJcclxuICAocmVzaXplZCk9XCJvblJlc2l6ZWQoJGV2ZW50KVwiXHJcbj5cclxuXHJcbjxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjJcclxuICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgIChjbGlja0V2ZW50KT1cImhhbmRsZUNsaWNrKCRldmVudClcIlxyXG4gID48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgKHpvb21Jblpvb21PdXRDbGljayk9XCJoYW5kbGVab29taW5ab29tb3V0Q2xpY2soJGV2ZW50KVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mz5cclxuPC9kaXY+XHJcblxyXG4gIDxsaWItY2hhcnQtaGVhZGVyLXYxXHJcbiAgW3RpdGxlXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS50aXRsZVwiXHJcbiAgW2hhc0RyaWxsRG93bl09XCJjaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duXCJcclxuICBbaXNFZGl0RW5hYmxlZF09XCJjaGFydERhdGEubWV0YURhdGEuaXNFZGl0RW5hYmxlZFwiXHJcbiAgW21lbnVPcHRpb25zXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5oZWFkZXJNZW51T3B0aW9uc1wiXHJcbiAgW2lzcmlhXT1cImN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVwiXHJcbiAgW3NlbGVjdGVkS3BpVG9vbHRvcF09XCJjaGFydENvbmZpZ3VyYXRpb24uc2VsZWN0ZWRLcGlUb29sdG9wXCJcclxuICAobWVudU9wdGlvbkNsaWNrRXZlbnQpPVwiaGFuZGxlSGVhZGVyTWVudUNsaWNrKCRldmVudClcIlxyXG4gIFtpc0FsZXJ0RW5hYmxlZF09XCJpc0FsZXJ0RW5hYmxlZFwiXHJcbiAgKm5nSWY9XCJpc0hlYWRlclZpc2libGVcIlxyXG4+PC9saWItY2hhcnQtaGVhZGVyLXYxPlxyXG5cclxuICA8ZGl2XHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcIlxyXG4gICAgaWQ9XCJncm91cGNoYXJ0Y29udGFpbmVyXCJcclxuICAgICNncm91cGNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmdcIlxyXG4gID48L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==