@c8y/ngx-components 1021.75.8 → 1021.77.0

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.
Files changed (73) hide show
  1. package/branding/shared/supports-branding.service.d.ts.map +1 -1
  2. package/core/common/ApplicationOptions.d.ts +2 -2
  3. package/core/dashboard/widgets-dashboard.component.d.ts +4 -2
  4. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  5. package/core/login/login.component.d.ts.map +1 -1
  6. package/core/login/login.service.d.ts +1 -0
  7. package/core/login/login.service.d.ts.map +1 -1
  8. package/core/navigator/navigator-bottom/navigator-bottom.service.d.ts +3 -1
  9. package/core/navigator/navigator-bottom/navigator-bottom.service.d.ts.map +1 -1
  10. package/datapoint-explorer/view/datapoint-explorer.component.d.ts.map +1 -1
  11. package/echart/charts.component.d.ts.map +1 -1
  12. package/echart/models/datapoints-graph-widget.model.d.ts +10 -0
  13. package/echart/models/datapoints-graph-widget.model.d.ts.map +1 -1
  14. package/echart/services/chart-realtime.service.d.ts +2 -5
  15. package/echart/services/chart-realtime.service.d.ts.map +1 -1
  16. package/echart/services/echarts-options.service.d.ts +4 -13
  17. package/echart/services/echarts-options.service.d.ts.map +1 -1
  18. package/echart/services/y-axis.service.d.ts +1 -1
  19. package/echart/services/y-axis.service.d.ts.map +1 -1
  20. package/esm2022/branding/shared/supports-branding.service.mjs +6 -3
  21. package/esm2022/core/beta-feature/beta-preview-button.component.mjs +3 -3
  22. package/esm2022/core/beta-feature/beta-preview.component.mjs +3 -3
  23. package/esm2022/core/common/ApplicationOptions.mjs +1 -1
  24. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +9 -5
  25. package/esm2022/core/login/login.component.mjs +2 -1
  26. package/esm2022/core/login/login.service.mjs +5 -1
  27. package/esm2022/core/navigator/navigator-bottom/navigator-bottom.service.mjs +13 -6
  28. package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +4 -3
  29. package/esm2022/device-map/device-map.component.mjs +2 -2
  30. package/esm2022/echart/charts.component.mjs +8 -2
  31. package/esm2022/echart/models/datapoints-graph-widget.model.mjs +1 -1
  32. package/esm2022/echart/services/chart-realtime.service.mjs +1 -1
  33. package/esm2022/echart/services/echarts-options.service.mjs +23 -15
  34. package/esm2022/echart/services/y-axis.service.mjs +32 -1
  35. package/esm2022/map/cluster-map.component.mjs +6 -3
  36. package/esm2022/map/map-status.component.mjs +23 -5
  37. package/esm2022/map/map.model.mjs +5 -2
  38. package/esm2022/map/map.service.mjs +17 -1
  39. package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.mjs +4 -3
  40. package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +25 -6
  41. package/esm2022/widgets/implementations/map/map-widget.component.mjs +40 -11
  42. package/fesm2022/c8y-ngx-components-branding-shared.mjs +5 -2
  43. package/fesm2022/c8y-ngx-components-branding-shared.mjs.map +1 -1
  44. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +3 -2
  45. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  46. package/fesm2022/c8y-ngx-components-device-map.mjs +1 -1
  47. package/fesm2022/c8y-ngx-components-device-map.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  49. package/fesm2022/c8y-ngx-components-echart.mjs +60 -15
  50. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  51. package/fesm2022/c8y-ngx-components-map.mjs +47 -7
  52. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  53. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +3 -2
  54. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  55. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +67 -19
  56. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  57. package/fesm2022/c8y-ngx-components.mjs +26 -12
  58. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  59. package/locales/locales.pot +19 -7
  60. package/map/cluster-map.component.d.ts +2 -1
  61. package/map/cluster-map.component.d.ts.map +1 -1
  62. package/map/map-status.component.d.ts +7 -2
  63. package/map/map-status.component.d.ts.map +1 -1
  64. package/map/map.model.d.ts +1 -0
  65. package/map/map.model.d.ts.map +1 -1
  66. package/map/map.service.d.ts +1 -0
  67. package/map/map.service.d.ts.map +1 -1
  68. package/package.json +1 -1
  69. package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts.map +1 -1
  70. package/widgets/implementations/map/map-widget-config.component.d.ts +1 -0
  71. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
  72. package/widgets/implementations/map/map-widget.component.d.ts +10 -4
  73. package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
@@ -32,11 +32,12 @@ export class EchartsOptionsService {
32
32
  const yAxis = this.yAxisService.getYAxis(datapointsWithValues, {
33
33
  showSplitLines: showSplitLines.YAxis,
34
34
  mergeMatchingDatapoints: displayOptions.mergeMatchingDatapoints,
35
+ forceMergeDatapoints: displayOptions.forceMergeDatapoints,
35
36
  showLabelAndUnit: displayOptions.showLabelAndUnit
36
37
  });
37
- const leftAxis = yAxis.filter(yx => yx.position === 'left');
38
- const gridLeft = leftAxis.length ? leftAxis.length * this.yAxisService.Y_AXIS_OFFSET : 16;
39
- const rightAxis = yAxis.filter(yx => yx.position === 'right');
38
+ const leftAxis = Array.isArray(yAxis) ? yAxis.filter(yx => yx.position === 'left') : [];
39
+ const gridLeft = leftAxis.length ? leftAxis.length * this.yAxisService.Y_AXIS_OFFSET : 32;
40
+ const rightAxis = Array.isArray(yAxis) ? yAxis.filter(yx => yx.position === 'right') : [];
40
41
  const gridRight = rightAxis.length ? rightAxis.length * this.yAxisService.Y_AXIS_OFFSET : 16;
41
42
  let intervalInMs = this.calculateExtendedIntervalInMs(selectedTimeRange?.interval || timeRange.interval || 'hours', selectedTimeRange || timeRange);
42
43
  if (sliderZoomUsed) {
@@ -121,7 +122,7 @@ export class EchartsOptionsService {
121
122
  },
122
123
  yAxis,
123
124
  series: [
124
- ...this.getAggregatedSeries(aggregatedDatapoints || []).filter(series => series !== undefined),
125
+ ...this.getAggregatedSeries(aggregatedDatapoints || [], displayOptions).filter(series => series !== undefined),
125
126
  ...this.getChartSeries(datapointsWithValues, events, alarms, displayOptions)
126
127
  ]
127
128
  };
@@ -156,16 +157,16 @@ export class EchartsOptionsService {
156
157
  }
157
158
  return intervalInMs;
158
159
  }
159
- getAggregatedSeries(aggregatedDatapoints) {
160
+ getAggregatedSeries(aggregatedDatapoints, displayOptions) {
160
161
  const series = [];
161
162
  aggregatedDatapoints.forEach((dp, idx) => {
162
163
  const renderType = dp.renderType || 'min';
163
164
  if (renderType === 'area') {
164
- series.push(this.getSingleSeries(dp, 'min', idx, true, 'aggr'));
165
- series.push(this.getSingleSeries(dp, 'max', idx, true, 'aggr'));
165
+ series.push(this.getSingleSeries(dp, 'min', idx, true, displayOptions, 'aggr'));
166
+ series.push(this.getSingleSeries(dp, 'max', idx, true, displayOptions, 'aggr'));
166
167
  }
167
168
  else {
168
- series.push(this.getSingleSeries(dp, renderType, idx, false, 'aggr'));
169
+ series.push(this.getSingleSeries(dp, renderType, idx, false, displayOptions, 'aggr'));
169
170
  }
170
171
  });
171
172
  series.forEach((s) => {
@@ -191,7 +192,14 @@ export class EchartsOptionsService {
191
192
  * @param itemType - The item type.
192
193
  * @param id - The id of the device
193
194
  */
194
- getAlarmOrEventSeries(dp, renderType, isMinMaxChart = false, items = [], itemType = 'alarm', displayOptions = { displayMarkedLine: true, displayMarkedPoint: true }, id, idx, realtime) {
195
+ getAlarmOrEventSeries(dp, renderType, isMinMaxChart = false, items = [], itemType = 'alarm', displayOptions = {
196
+ displayMarkedLine: true,
197
+ displayMarkedPoint: true,
198
+ mergeMatchingDatapoints: false,
199
+ forceMergeDatapoints: false,
200
+ showLabelAndUnit: false,
201
+ showSlider: false
202
+ }, id, idx, realtime) {
195
203
  if (!items.length) {
196
204
  return [];
197
205
  }
@@ -488,11 +496,11 @@ export class EchartsOptionsService {
488
496
  datapointsWithValues.forEach((dp, idx) => {
489
497
  const renderType = dp.renderType || 'min';
490
498
  if (renderType === 'area') {
491
- series.push(this.getSingleSeries(dp, 'min', idx, true));
492
- series.push(this.getSingleSeries(dp, 'max', idx, true));
499
+ series.push(this.getSingleSeries(dp, 'min', idx, true, displayOptions));
500
+ series.push(this.getSingleSeries(dp, 'max', idx, true, displayOptions));
493
501
  }
494
502
  else {
495
- series.push(this.getSingleSeries(dp, renderType, idx, false));
503
+ series.push(this.getSingleSeries(dp, renderType, idx, false, displayOptions));
496
504
  }
497
505
  const newEventSeries = this.getAlarmOrEventSeries(dp, renderType, false, events, 'event', displayOptions, null, idx);
498
506
  const newAlarmSeries = this.getAlarmOrEventSeries(dp, renderType, false, alarms, 'alarm', displayOptions, null, idx);
@@ -768,7 +776,7 @@ export class EchartsOptionsService {
768
776
  }
769
777
  }, []);
770
778
  }
771
- getSingleSeries(dp, renderType, idx, isMinMaxChart = false, seriesType = '') {
779
+ getSingleSeries(dp, renderType, idx, isMinMaxChart = false, displayOptions, seriesType = '') {
772
780
  const datapointId = dp.__target?.id + dp.fragment + dp.series;
773
781
  return {
774
782
  datapointId,
@@ -783,7 +791,7 @@ export class EchartsOptionsService {
783
791
  data: Object.entries(dp.values).map(([dateString, values]) => {
784
792
  return [dateString, values[0][renderType]];
785
793
  }),
786
- yAxisIndex: idx,
794
+ ...(displayOptions.forceMergeDatapoints ? {} : { yAxisIndex: idx }),
787
795
  ...this.chartTypesService.getSeriesOptions(dp, isMinMaxChart, renderType)
788
796
  };
789
797
  }
@@ -870,4 +878,4 @@ export class EchartsOptionsService {
870
878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EchartsOptionsService, decorators: [{
871
879
  type: Injectable
872
880
  }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i2.YAxisService }, { type: i3.ChartTypesService }, { type: i4.AlarmSeverityToIconPipe }, { type: i4.AlarmSeverityToLabelPipe }, { type: i5.TranslateService }, { type: i6.Router }] });
873
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNoYXJ0cy1vcHRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY2hhcnQvc2VydmljZXMvZWNoYXJ0cy1vcHRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWF4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLFdBQVcsRUFBZ0MsTUFBTSxhQUFhLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXRELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRixPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBYXZELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQztBQUdqQyxNQUFNLE9BQU8scUJBQXFCO0lBS2hDLFlBQ1UsUUFBa0IsRUFDbEIsWUFBMEIsRUFDMUIsaUJBQW9DLEVBQ3BDLGdCQUF5QyxFQUN6QyxpQkFBMkMsRUFDM0MsU0FBMkIsRUFDM0IsTUFBYztRQU5kLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLHNC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Q0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUF1QixFQUFFLElBQWlCLEVBQUUsRUFBRTtZQUNsRSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUM3QyxJQUNFLEdBQUcsS0FBSyxJQUFJO29CQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDO3dCQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUNsRCxDQUFDO29CQUNELE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDOytHQXJoQ1UscUJBQXFCO21IQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHR5cGUgeyBFQ2hhcnRzT3B0aW9uLCBTZXJpZXNPcHRpb24gfSBmcm9tICdlY2hhcnRzJztcbmltcG9ydCB7IEVDaGFydHMgfSBmcm9tICdlY2hhcnRzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludENoYXJ0UmVuZGVyVHlwZSxcbiAgRHBXaXRoVmFsdWVzLFxuICBEYXRlU3RyaW5nLFxuICBEcFZhbHVlc0l0ZW0sXG4gIE1hcmtMaW5lRGF0YSxcbiAgTWFya1BvaW50RGF0YSxcbiAgU2VyaWVzRGF0YXBvaW50SW5mbyxcbiAgU2VyaWVzVmFsdWVcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFlBeGlzU2VydmljZSB9IGZyb20gJy4veS1heGlzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhcnRUeXBlc1NlcnZpY2UgfSBmcm9tICcuL2NoYXJ0LXR5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBDYWxsYmFja0RhdGFQYXJhbXMsIFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFjayB9IGZyb20gJ2VjaGFydHMvdHlwZXMvc3JjL3V0aWwvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBUb3BMZXZlbEZvcm1hdHRlclBhcmFtcyB9IGZyb20gJ2VjaGFydHMvdHlwZXMvc3JjL2NvbXBvbmVudC90b29sdGlwL1Rvb2x0aXBNb2RlbCc7XG5pbXBvcnQgeyBBbGFybVN0YXR1cywgSUFsYXJtLCBJRXZlbnQsIFNldmVyaXR5VHlwZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IElDT05TX01BUCB9IGZyb20gJy4uL21vZGVscy9zdmctaWNvbnMubW9kZWwnO1xuaW1wb3J0IHsgQ3VzdG9tU2VyaWVzT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9jaGFydC5tb2RlbCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWxhcm1TZXZlcml0eVRvSWNvblBpcGUsIEFsYXJtU2V2ZXJpdHlUb0xhYmVsUGlwZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm1zJztcbmltcG9ydCB7IEludGVydmFsLCBJTlRFUlZBTFMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbnR5cGUgVG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2sgPSAoXG4gIHBvaW50OiBbbnVtYmVyLCBudW1iZXJdLCAvLyBwb3NpdGlvbiBvZiBtb3VzZSBpbiBjaGFydCBbWCwgWV07IDAsMCBpcyB0b3AgbGVmdCBjb3JuZXJcbiAgXzogYW55LCAvLyB0b29sdGlwIGRhdGFcbiAgZG9tOiBIVE1MRWxlbWVudCB8IHVua25vd24sIC8vIHRvb2x0aXAgZWxlbWVudFxuICBfXzogYW55LCAvLyB2YWxpZCBvbmx5IHdoZW4gbW91c2UgaXMgb24gZ3JhcGhpYyBlbGVtZW50czsgbm90IHJlbGV2YW50IGluIG91ciBjYXNlXG4gIHNpemU6IHtcbiAgICBjb250ZW50U2l6ZTogW251bWJlciwgbnVtYmVyXTsgLy8gc2l6ZSBvZiB0b29sdGlwXG4gICAgdmlld1NpemU6IFtudW1iZXIsIG51bWJlcl07IC8vIHNpemUgb2YgdGhlIGNoYXJ0XG4gIH0gfCBudWxsIC8vIHNpemUgb2YgY2hhcnRcbikgPT4gUGFydGlhbDxSZWNvcmQ8J3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcsIG51bWJlcj4+O1xuXG5jb25zdCBJTkRFWF9IVE1MID0gJy9pbmRleC5odG1sJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVjaGFydHNPcHRpb25zU2VydmljZSB7XG4gIGVjaGFydHNJbnN0YW5jZTogRUNoYXJ0cyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBUT09MVElQX1dJRFRIID0gMzAwO1xuICBwcml2YXRlIHRvb2x0aXBQb3NpdGlvbkNhbGxiYWNrOiBUb29sdGlwUG9zaXRpb25DYWxsYmFjayB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIHlBeGlzU2VydmljZTogWUF4aXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhcnRUeXBlc1NlcnZpY2U6IENoYXJ0VHlwZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2V2ZXJpdHlJY29uUGlwZTogQWxhcm1TZXZlcml0eVRvSWNvblBpcGUsXG4gICAgcHJpdmF0ZSBzZXZlcml0eUxhYmVsUGlwZTogQWxhcm1TZXZlcml0eVRvTGFiZWxQaXBlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7fVxuXG4gIGdldENoYXJ0T3B0aW9ucyhcbiAgICBkYXRhcG9pbnRzV2l0aFZhbHVlczogRHBXaXRoVmFsdWVzW10sXG4gICAgdGltZVJhbmdlOiB7IGRhdGVGcm9tOiBzdHJpbmc7IGRhdGVUbzogc3RyaW5nOyBpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ10gfSxcbiAgICBzaG93U3BsaXRMaW5lczogeyBZQXhpczogYm9vbGVhbjsgWEF4aXM6IGJvb2xlYW4gfSxcbiAgICBldmVudHM6IElFdmVudFtdLFxuICAgIGFsYXJtczogSUFsYXJtW10sXG4gICAgZGlzcGxheU9wdGlvbnM6IHtcbiAgICAgIGRpc3BsYXlNYXJrZWRMaW5lOiBib29sZWFuO1xuICAgICAgZGlzcGxheU1hcmtlZFBvaW50OiBib29sZWFuO1xuICAgICAgbWVyZ2VNYXRjaGluZ0RhdGFwb2ludHM6IGJvb2xlYW47XG4gICAgICBzaG93TGFiZWxBbmRVbml0OiBib29sZWFuO1xuICAgICAgc2hvd1NsaWRlcjogYm9vbGVhbjtcbiAgICB9LFxuICAgIHNlbGVjdGVkVGltZVJhbmdlPzogeyBkYXRlRnJvbTogc3RyaW5nOyBkYXRlVG86IHN0cmluZzsgaW50ZXJ2YWw6IEludGVydmFsWydpZCddIH0gfCBudWxsLFxuICAgIGFnZ3JlZ2F0ZWREYXRhcG9pbnRzPzogRHBXaXRoVmFsdWVzW10sXG4gICAgc2xpZGVyWm9vbVVzZWQgPSBmYWxzZVxuICApOiBFQ2hhcnRzT3B0aW9uIHtcbiAgICBjb25zdCB5QXhpcyA9IHRoaXMueUF4aXNTZXJ2aWNlLmdldFlBeGlzKGRhdGFwb2ludHNXaXRoVmFsdWVzLCB7XG4gICAgICBzaG93U3BsaXRMaW5lczogc2hvd1NwbGl0TGluZXMuWUF4aXMsXG4gICAgICBtZXJnZU1hdGNoaW5nRGF0YXBvaW50czogZGlzcGxheU9wdGlvbnMubWVyZ2VNYXRjaGluZ0RhdGFwb2ludHMsXG4gICAgICBzaG93TGFiZWxBbmRVbml0OiBkaXNwbGF5T3B0aW9ucy5zaG93TGFiZWxBbmRVbml0XG4gICAgfSk7XG4gICAgY29uc3QgbGVmdEF4aXMgPSB5QXhpcy5maWx0ZXIoeXggPT4geXgucG9zaXRpb24gPT09ICdsZWZ0Jyk7XG4gICAgY29uc3QgZ3JpZExlZnQgPSBsZWZ0QXhpcy5sZW5ndGggPyBsZWZ0QXhpcy5sZW5ndGggKiB0aGlzLnlBeGlzU2VydmljZS5ZX0FYSVNfT0ZGU0VUIDogMTY7XG4gICAgY29uc3QgcmlnaHRBeGlzID0geUF4aXMuZmlsdGVyKHl4ID0+IHl4LnBvc2l0aW9uID09PSAncmlnaHQnKTtcbiAgICBjb25zdCBncmlkUmlnaHQgPSByaWdodEF4aXMubGVuZ3RoID8gcmlnaHRBeGlzLmxlbmd0aCAqIHRoaXMueUF4aXNTZXJ2aWNlLllfQVhJU19PRkZTRVQgOiAxNjtcbiAgICBsZXQgaW50ZXJ2YWxJbk1zID0gdGhpcy5jYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5NcyhcbiAgICAgIHNlbGVjdGVkVGltZVJhbmdlPy5pbnRlcnZhbCB8fCB0aW1lUmFuZ2UuaW50ZXJ2YWwgfHwgJ2hvdXJzJyxcbiAgICAgIHNlbGVjdGVkVGltZVJhbmdlIHx8IHRpbWVSYW5nZVxuICAgICk7XG4gICAgaWYgKHNsaWRlclpvb21Vc2VkKSB7XG4gICAgICBpbnRlcnZhbEluTXMgPSB0aGlzLmNhbGN1bGF0ZUV4dGVuZGVkSW50ZXJ2YWxJbk1zKHRpbWVSYW5nZS5pbnRlcnZhbCB8fCAnaG91cnMnLCB0aW1lUmFuZ2UpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZ3JpZDoge1xuICAgICAgICBjb250YWluTGFiZWw6IGZhbHNlLCAvLyBheGlzIGxhYmVscyBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudCB0byBjYWxjdWxhdGUgZ3JhcGggZ3JpZFxuICAgICAgICBsZWZ0OiBncmlkTGVmdCxcbiAgICAgICAgdG9wOiAxNixcbiAgICAgICAgcmlnaHQ6IGdyaWRSaWdodCxcbiAgICAgICAgYm90dG9tOiA2OFxuICAgICAgfSxcbiAgICAgIGRhdGFab29tOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnaW5zaWRlJyxcbiAgICAgICAgICAvLyBUT0RPOiB1c2UgJ25vbmUnIG9ubHkgd2hlbiB0aGlzIGJ1ZyBpcyBmaXhlZCBodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL2VjaGFydHMvaXNzdWVzLzE3ODU4XG4gICAgICAgICAgZmlsdGVyTW9kZTogZGF0YXBvaW50c1dpdGhWYWx1ZXMuc29tZShkcCA9PiBkcC5saW5lVHlwZSA9PT0gJ2JhcnMnKSA/ICdmaWx0ZXInIDogJ25vbmUnLFxuICAgICAgICAgIHpvb21Pbk1vdXNlV2hlZWw6IHRydWUsXG4gICAgICAgICAgc3RhcnRWYWx1ZTogc2VsZWN0ZWRUaW1lUmFuZ2VcbiAgICAgICAgICAgID8gc2VsZWN0ZWRUaW1lUmFuZ2UuZGF0ZUZyb20udmFsdWVPZigpXG4gICAgICAgICAgICA6IHRpbWVSYW5nZS5kYXRlRnJvbS52YWx1ZU9mKCksXG4gICAgICAgICAgZW5kVmFsdWU6IHNlbGVjdGVkVGltZVJhbmdlXG4gICAgICAgICAgICA/IHNlbGVjdGVkVGltZVJhbmdlLmRhdGVUby52YWx1ZU9mKClcbiAgICAgICAgICAgIDogdGltZVJhbmdlLmRhdGVUby52YWx1ZU9mKClcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdzbGlkZXInLFxuICAgICAgICAgIHNob3c6IGRpc3BsYXlPcHRpb25zLnNob3dTbGlkZXIsXG4gICAgICAgICAgYm90dG9tOiA4LFxuICAgICAgICAgIHJlYWx0aW1lOiBmYWxzZVxuICAgICAgICB9XG4gICAgICBdLCAvLyBvbiByZWFsdGltZSwgJ25vbmUnIHdpbGwgY2F1c2UgZXh0ZW5kaW5nIGNoYXJ0IGxpbmUgdG8gbGVmdCBlZGdlIG9mIHRoZSBjaGFydFxuICAgICAgYW5pbWF0aW9uOiBmYWxzZSxcbiAgICAgIHRvb2xib3g6IHtcbiAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgaXRlbVNpemU6IDAsIC8vIHRvb2xib3ggaXMgbmVlZGVkIGZvciB6b29taW5nIGluIGFjdGlvbiwgYnV0IHdlIHByb3ZpZGUgb3VyIG93biBidXR0b25zXG4gICAgICAgIGZlYXR1cmU6IHtcbiAgICAgICAgICBkYXRhWm9vbToge1xuICAgICAgICAgICAgeUF4aXNJbmRleDogJ25vbmUnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICB0cmlnZ2VyOiAnYXhpcycsXG4gICAgICAgIGF4aXNQb2ludGVyOiB7XG4gICAgICAgICAgdHlwZTogJ2Nyb3NzJyxcbiAgICAgICAgICBzbmFwOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC45KScsXG4gICAgICAgIGZvcm1hdHRlcjogdGhpcy5nZXRUb29sdGlwRm9ybWF0dGVyKCksXG4gICAgICAgIGFwcGVuZFRvQm9keTogdHJ1ZSxcbiAgICAgICAgcG9zaXRpb246IHRoaXMudG9vbHRpcFBvc2l0aW9uKCksXG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogMFxuICAgICAgfSxcbiAgICAgIGxlZ2VuZDoge1xuICAgICAgICBzaG93OiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHhBeGlzOiB7XG4gICAgICAgIG1pbjogbmV3IERhdGUodGltZVJhbmdlLmRhdGVGcm9tKS52YWx1ZU9mKCkgLSBpbnRlcnZhbEluTXMsXG4gICAgICAgIG1heDogdGltZVJhbmdlLmRhdGVUbyxcbiAgICAgICAgdHlwZTogJ3RpbWUnLFxuICAgICAgICBhbmltYXRpb246IGZhbHNlLFxuICAgICAgICBheGlzUG9pbnRlcjoge1xuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICBzaG93OiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYXhpc0xpbmU6IHtcbiAgICAgICAgICAvLyBhbGlnbiBYIGF4aXMgdG8gMCBvZiBZIGF4aXMgb2YgZGF0YXBvaW50IHdpdGggbGluZVR5cGUgJ2JhcnMnXG4gICAgICAgICAgb25aZXJvQXhpc0luZGV4OiBkYXRhcG9pbnRzV2l0aFZhbHVlcy5maW5kSW5kZXgoZHAgPT4gZHAubGluZVR5cGUgPT09ICdiYXJzJylcbiAgICAgICAgfSxcbiAgICAgICAgYXhpc0xhYmVsOiB7XG4gICAgICAgICAgaGlkZU92ZXJsYXA6IHRydWUsXG4gICAgICAgICAgYm9yZGVyV2lkdGg6IDIsIC8vIGFzIHRoZXJlIGlzIG5vIG1hcmdpbiBmb3IgbGFiZWxzIHNwYWNpbmcsIHRyYW5zcGFyZW50IGJvcmRlciBpcyBhIHdvcmthcm91bmRcbiAgICAgICAgICBib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgICB9LFxuICAgICAgICBzcGxpdExpbmU6IHtcbiAgICAgICAgICBzaG93OiBzaG93U3BsaXRMaW5lcy5YQXhpcyxcbiAgICAgICAgICBsaW5lU3R5bGU6IHsgb3BhY2l0eTogMC44LCB0eXBlOiAnZGFzaGVkJywgd2lkdGg6IDIgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeUF4aXMsXG4gICAgICBzZXJpZXM6IFtcbiAgICAgICAgLi4udGhpcy5nZXRBZ2dyZWdhdGVkU2VyaWVzKGFnZ3JlZ2F0ZWREYXRhcG9pbnRzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAgICAgc2VyaWVzID0+IHNlcmllcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICksXG4gICAgICAgIC4uLnRoaXMuZ2V0Q2hhcnRTZXJpZXMoZGF0YXBvaW50c1dpdGhWYWx1ZXMsIGV2ZW50cywgYWxhcm1zLCBkaXNwbGF5T3B0aW9ucylcbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgY2FsY3VsYXRlRXh0ZW5kZWRJbnRlcnZhbEluTXMoaW50ZXJ2YWw6IEludGVydmFsWydpZCddLCBzZWxlY3RlZFRpbWVSYW5nZSk6IG51bWJlciB7XG4gICAgbGV0IGludGVydmFsSW5NcyA9IElOVEVSVkFMUy5maW5kKGkgPT4gaS5pZCA9PT0gaW50ZXJ2YWwpLnRpbWVzcGFuSW5NcztcbiAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgaW50ZXJ2YWxJbk1zID0gSU5URVJWQUxTLmZpbmQoaSA9PiBpLmlkID09PSBpbnRlcnZhbCkudGltZXNwYW5Jbk1zICogNjA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaG91cnMnOlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXMgKiAyNDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXlzJzpcbiAgICAgICAgaW50ZXJ2YWxJbk1zID0gSU5URVJWQUxTLmZpbmQoaSA9PiBpLmlkID09PSBpbnRlcnZhbCkudGltZXNwYW5Jbk1zICogMjg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2Vla3MnOlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXMgKiAxMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtb250aHMnOlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXMgKiAxMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjdXN0b20nOlxuICAgICAgICBpbnRlcnZhbEluTXMgPVxuICAgICAgICAgIChuZXcgRGF0ZShzZWxlY3RlZFRpbWVSYW5nZS5kYXRlVG8pLnZhbHVlT2YoKSAtXG4gICAgICAgICAgICBuZXcgRGF0ZShzZWxlY3RlZFRpbWVSYW5nZS5kYXRlRnJvbSkudmFsdWVPZigpKSAqXG4gICAgICAgICAgMTI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW50ZXJ2YWxJbk1zID0gSU5URVJWQUxTLmZpbmQoaSA9PiBpLmlkID09PSBpbnRlcnZhbCkudGltZXNwYW5Jbk1zO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGludGVydmFsSW5NcztcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZWRTZXJpZXMoYWdncmVnYXRlZERhdGFwb2ludHM6IERwV2l0aFZhbHVlc1tdKTogU2VyaWVzT3B0aW9uW10ge1xuICAgIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBbXTtcbiAgICBhZ2dyZWdhdGVkRGF0YXBvaW50cy5mb3JFYWNoKChkcCwgaWR4KSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJUeXBlOiBEYXRhcG9pbnRDaGFydFJlbmRlclR5cGUgPSBkcC5yZW5kZXJUeXBlIHx8ICdtaW4nO1xuICAgICAgaWYgKHJlbmRlclR5cGUgPT09ICdhcmVhJykge1xuICAgICAgICBzZXJpZXMucHVzaCh0aGlzLmdldFNpbmdsZVNlcmllcyhkcCwgJ21pbicsIGlkeCwgdHJ1ZSwgJ2FnZ3InKSk7XG4gICAgICAgIHNlcmllcy5wdXNoKHRoaXMuZ2V0U2luZ2xlU2VyaWVzKGRwLCAnbWF4JywgaWR4LCB0cnVlLCAnYWdncicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlcmllcy5wdXNoKHRoaXMuZ2V0U2luZ2xlU2VyaWVzKGRwLCByZW5kZXJUeXBlLCBpZHgsIGZhbHNlLCAnYWdncicpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHNlcmllcy5mb3JFYWNoKChzOiBhbnkpID0+IHtcbiAgICAgIHMuZGF0YXBvaW50SWQgPSAnYWdncmVnYXRlZCc7XG4gICAgICBzLnR5cGVPZlNlcmllcyA9ICdmYWtlJztcbiAgICAgIHMuaXRlbVN0eWxlID0ge1xuICAgICAgICAuLi5zLml0ZW1TdHlsZSxcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfTtcbiAgICAgIHMubGluZVN0eWxlID0ge1xuICAgICAgICAuLi5zLmxpbmVTdHlsZSxcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiBbc2VyaWVzWzBdXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgc2VyaWVzIGZvciBhbGFybXMgYW5kIGV2ZW50cy5cbiAgICogQHBhcmFtIGRwIC0gVGhlIGRhdGEgcG9pbnQuXG4gICAqIEBwYXJhbSByZW5kZXJUeXBlIC0gVGhlIHJlbmRlciB0eXBlLlxuICAgKiBAcGFyYW0gaXNNaW5NYXhDaGFydCAtIElmIHRoZSBjaGFydCBpcyBtaW4gbWF4IGNoYXJ0LlxuICAgKiBAcGFyYW0gaXRlbXMgLSBBbGwgYWxhcm1zIG9yIGV2ZW50cyB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBjaGFydC5cbiAgICogQHBhcmFtIGl0ZW1UeXBlIC0gVGhlIGl0ZW0gdHlwZS5cbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBkZXZpY2VcbiAgICovXG4gIGdldEFsYXJtT3JFdmVudFNlcmllcyhcbiAgICBkcDogRHBXaXRoVmFsdWVzLFxuICAgIHJlbmRlclR5cGU6IERhdGFwb2ludENoYXJ0UmVuZGVyVHlwZSxcbiAgICBpc01pbk1heENoYXJ0ID0gZmFsc2UsXG4gICAgaXRlbXM6IElBbGFybVtdIHwgSUV2ZW50W10gPSBbXSxcbiAgICBpdGVtVHlwZTogJ2FsYXJtJyB8ICdldmVudCcgPSAnYWxhcm0nLFxuICAgIGRpc3BsYXlPcHRpb25zID0geyBkaXNwbGF5TWFya2VkTGluZTogdHJ1ZSwgZGlzcGxheU1hcmtlZFBvaW50OiB0cnVlIH0sXG4gICAgaWQ/OiBzdHJpbmcgfCBudW1iZXIsXG4gICAgaWR4PzogbnVtYmVyLFxuICAgIHJlYWx0aW1lPzogYm9vbGVhblxuICApOiBDdXN0b21TZXJpZXNPcHRpb25zW10ge1xuICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFkaXNwbGF5T3B0aW9ucy5kaXNwbGF5TWFya2VkTGluZSAmJiAhZGlzcGxheU9wdGlvbnMuZGlzcGxheU1hcmtlZFBvaW50KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy9maWx0ZXIgaXRlbXMgdGhhdCBhcmUgbm90IF9faGlkZGVuXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtczogSUFsYXJtW10gfCBJRXZlbnRbXSA9IGl0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtWydfX2hpZGRlbiddKTtcbiAgICBjb25zdCBpdGVtc0J5VHlwZSA9IHRoaXMuZ3JvdXBCeVR5cGUoZmlsdGVyZWRJdGVtcywgJ3R5cGUnKTtcbiAgICBjb25zdCBpc0FsYXJtID0gaXRlbVR5cGUgPT09ICdhbGFybSc7XG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaXRlbXNCeVR5cGUpLmZsYXRNYXAoXG4gICAgICAoW3R5cGUsIGl0ZW1zT2ZUeXBlXTogW3N0cmluZywgKElBbGFybSB8IElFdmVudClbXV0pID0+IHtcbiAgICAgICAgLy8gTWFpbiBzZXJpZXMgZGF0YVxuICAgICAgICBjb25zdCBtYWluRGF0YSA9IGl0ZW1zT2ZUeXBlLm1hcChpdGVtID0+IFtpdGVtLmNyZWF0aW9uVGltZSwgbnVsbCwgJ21hcmtMaW5lRmxhZyddKTtcbiAgICAgICAgLy8gSXMgYSBzcGVjaWZpYyBkYXRhcG9pbnQgdGVtcGxhdGUgc2VsZWN0ZWQgZm9yIHRoaXMgYWxhcm0vZXZlbnQgdHlwZT9cbiAgICAgICAgbGV0IGlzRHBUZW1wbGF0ZVNlbGVjdGVkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gTWFya1BvaW50IGRhdGFcbiAgICAgICAgY29uc3QgbWFya1BvaW50RGF0YSA9IGl0ZW1zT2ZUeXBlLnJlZHVjZTxNYXJrUG9pbnREYXRhW10+KChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICBpc0RwVGVtcGxhdGVTZWxlY3RlZCA9XG4gICAgICAgICAgICBpdGVtWydzZWxlY3RlZERhdGFwb2ludCddICYmXG4gICAgICAgICAgICBkcFsnX190YXJnZXQnXSAmJlxuICAgICAgICAgICAgaXRlbVsnc2VsZWN0ZWREYXRhcG9pbnQnXVsnZnJhZ21lbnQnXSA9PT0gZHBbJ2ZyYWdtZW50J10gJiZcbiAgICAgICAgICAgIGl0ZW1bJ3NlbGVjdGVkRGF0YXBvaW50J11bJ3NlcmllcyddID09PSBkcFsnc2VyaWVzJ10gJiZcbiAgICAgICAgICAgIGl0ZW1bJ3NlbGVjdGVkRGF0YXBvaW50J11bJ3RhcmdldCddID09PSBkcFsnX190YXJnZXQnXVsnaWQnXTtcbiAgICAgICAgICBpZiAoZHAuX190YXJnZXQ/LmlkID09PSBpdGVtLnNvdXJjZS5pZCkge1xuICAgICAgICAgICAgY29uc3QgaXNDbGVhcmVkID0gaXNBbGFybSAmJiBpdGVtLnN0YXR1cyA9PT0gQWxhcm1TdGF0dXMuQ0xFQVJFRDtcbiAgICAgICAgICAgIGNvbnN0IGlzRXZlbnQgPSAhaXNBbGFybTtcbiAgICAgICAgICAgIHJldHVybiBhY2MuY29uY2F0KHRoaXMuY3JlYXRlTWFya1BvaW50KGl0ZW0sIGRwLCBpc0NsZWFyZWQsIGlzRXZlbnQsIHJlYWx0aW1lKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaXRlbS5jcmVhdGlvblRpbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29vcmQ6IFtpdGVtLmNyZWF0aW9uVGltZSwgbnVsbF0sXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiBpdGVtWydjb2xvciddIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgLy8gQ29uc3RydWN0IHNlcmllcyB3aXRoIG1hcmtQb2ludFxuICAgICAgICBjb25zdCBzZXJpZXNXaXRoTWFya1BvaW50ID0ge1xuICAgICAgICAgIGlkOiBgJHt0eXBlfS8ke2RwLl9fdGFyZ2V0Py5pZH0rJHtpZCA/IGlkIDogJyd9LW1hcmtQb2ludGAsXG4gICAgICAgICAgbmFtZTogYCR7dHlwZX0tbWFya1BvaW50YCxcbiAgICAgICAgICB0eXBlT2ZTZXJpZXM6IGl0ZW1UeXBlLFxuICAgICAgICAgIGRhdGE6IG1haW5EYXRhLFxuICAgICAgICAgIGlzRHBUZW1wbGF0ZVNlbGVjdGVkLFxuICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgICAgICBzaWxlbnQ6IHRydWUsXG4gICAgICAgICAgbWFya1BvaW50OiB7XG4gICAgICAgICAgICBzaG93U3ltYm9sOiB0cnVlLFxuICAgICAgICAgICAgc3ltYm9sS2VlcEFzcGVjdDogdHJ1ZSxcbiAgICAgICAgICAgIGRhdGE6IG1hcmtQb2ludERhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHlBeGlzSW5kZXg6IGlkeCxcbiAgICAgICAgICAuLi50aGlzLmNoYXJ0VHlwZXNTZXJ2aWNlLmdldFNlcmllc09wdGlvbnMoZHAsIGlzTWluTWF4Q2hhcnQsIHJlbmRlclR5cGUpXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWFya0xpbmVEYXRhID0gdGhpcy5jcmVhdGVNYXJrTGluZShpdGVtc09mVHlwZSwgaXRlbVR5cGUpO1xuXG4gICAgICAgIC8vIENvbnN0cnVjdCBzZXJpZXMgd2l0aCBtYXJrTGluZVxuICAgICAgICBjb25zdCBzZXJpZXNXaXRoTWFya0xpbmUgPSB7XG4gICAgICAgICAgaWQ6IGAke3R5cGV9LyR7ZHAuX190YXJnZXQ/LmlkfSske2lkID8gaWQgOiAnJ30tbWFya0xpbmVgLFxuICAgICAgICAgIG5hbWU6IGAke3R5cGV9LW1hcmtMaW5lYCxcbiAgICAgICAgICB0eXBlT2ZTZXJpZXM6IGl0ZW1UeXBlLFxuICAgICAgICAgIGlzRHBUZW1wbGF0ZVNlbGVjdGVkLFxuICAgICAgICAgIGRhdGE6IG1haW5EYXRhLFxuICAgICAgICAgIG1hcmtMaW5lOiB7XG4gICAgICAgICAgICBzaG93U3ltYm9sOiBmYWxzZSxcbiAgICAgICAgICAgIHN5bWJvbDogWydub25lJywgJ25vbmUnXSwgLy8gbm8gc3ltYm9sIGF0IHRoZSBzdGFydC9lbmQgb2YgdGhlIGxpbmVcbiAgICAgICAgICAgIGRhdGE6IG1hcmtMaW5lRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4udGhpcy5jaGFydFR5cGVzU2VydmljZS5nZXRTZXJpZXNPcHRpb25zKGRwLCBpc01pbk1heENoYXJ0LCByZW5kZXJUeXBlKVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zIHJldHVybiBvbmx5IHRoZSByZXF1aXJlZCBzZXJpZXNcbiAgICAgICAgaWYgKGRpc3BsYXlPcHRpb25zLmRpc3BsYXlNYXJrZWRMaW5lICYmIGRpc3BsYXlPcHRpb25zLmRpc3BsYXlNYXJrZWRQb2ludCkge1xuICAgICAgICAgIHJldHVybiBbc2VyaWVzV2l0aE1hcmtMaW5lLCBzZXJpZXNXaXRoTWFya1BvaW50XTtcbiAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5T3B0aW9ucy5kaXNwbGF5TWFya2VkTGluZSkge1xuICAgICAgICAgIHJldHVybiBbc2VyaWVzV2l0aE1hcmtMaW5lXTtcbiAgICAgICAgfSBlbHNlIGlmIChkaXNwbGF5T3B0aW9ucy5kaXNwbGF5TWFya2VkUG9pbnQpIHtcbiAgICAgICAgICByZXR1cm4gW3Nlcmllc1dpdGhNYXJrUG9pbnRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKSBhcyBDdXN0b21TZXJpZXNPcHRpb25zW107XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdG9vbHRpcCBmb3JtYXR0ZXIgZm9yIGFsYXJtcyBhbmQgZXZlbnRzLlxuICAgKiBAcGFyYW0gdG9vbHRpcFBhcmFtcyAtIFRoZSB0b29sdGlwIHBhcmFtZXRlcnMuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBkYXRhLlxuICAgKiBAcGFyYW0gYWxsRXZlbnRzIC0gQWxsIGV2ZW50cy5cbiAgICogQHBhcmFtIGFsbEFsYXJtcyAtIEFsbCBhbGFybXMuXG4gICAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgc3RyaW5nIGZvciB0aGUgdG9vbHRpcC5cbiAgICovXG4gIGdldFRvb2x0aXBGb3JtYXR0ZXJGb3JBbGFybUFuZEV2ZW50cyhcbiAgICB0b29sdGlwUGFyYW1zOiBDYWxsYmFja0RhdGFQYXJhbXMsXG4gICAgcGFyYW1zOiB7IGRhdGE6IHsgaXRlbVR5cGU6IHN0cmluZyB9IH0sXG4gICAgYWxsRXZlbnRzOiBJRXZlbnRbXSxcbiAgICBhbGxBbGFybXM6IElBbGFybVtdXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBQYXJhbXMpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IFhBeGlzVmFsdWU6IHN0cmluZyA9IHRvb2x0aXBQYXJhbXNbMF0uZGF0YVswXTtcbiAgICBjb25zdCBZQXhpc1JlYWRpbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGFsbFNlcmllcyA9IHRoaXMuZWNoYXJ0c0luc3RhbmNlPy5nZXRPcHRpb24oKVsnc2VyaWVzJ10gYXMgQ3VzdG9tU2VyaWVzT3B0aW9uc1tdO1xuXG4gICAgLy8gZmlsdGVyIG91dCBhbGFybSBhbmQgZXZlbnQgc2VyaWVzXG4gICAgY29uc3QgYWxsRGF0YVBvaW50U2VyaWVzID0gYWxsU2VyaWVzLmZpbHRlcihcbiAgICAgIHNlcmllcyA9PiBzZXJpZXNbJ3R5cGVPZlNlcmllcyddICE9PSAnYWxhcm0nICYmIHNlcmllc1sndHlwZU9mU2VyaWVzJ10gIT09ICdldmVudCdcbiAgICApO1xuXG4gICAgdGhpcy5wcm9jZXNzU2VyaWVzKGFsbERhdGFQb2ludFNlcmllcywgWEF4aXNWYWx1ZSwgWUF4aXNSZWFkaW5ncyk7XG5cbiAgICAvLyBmaW5kIGV2ZW50IGFuZCBhbGFybSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBob3ZlcmVkIG1hcmtlZExpbmUgb3IgbWFya2VkUG9pbnRcbiAgICBjb25zdCBldmVudCA9IGFsbEV2ZW50cy5maW5kKGUgPT4gZS50eXBlID09PSBwYXJhbXMuZGF0YS5pdGVtVHlwZSk7XG4gICAgY29uc3QgYWxhcm0gPSBhbGxBbGFybXMuZmluZChhID0+IGEudHlwZSA9PT0gcGFyYW1zLmRhdGEuaXRlbVR5cGUpO1xuXG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucHJvY2Vzc0V2ZW50KGV2ZW50LCBYQXhpc1ZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoYWxhcm0pIHtcbiAgICAgIHRoaXMucHJvY2Vzc0FsYXJtKGFsYXJtKS50aGVuKGFsYXJtVmFsID0+IHtcbiAgICAgICAgdmFsdWUgPSBhbGFybVZhbDtcbiAgICAgICAgWUF4aXNSZWFkaW5ncy5wdXNoKHZhbHVlKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZWNoYXJ0c0luc3RhbmNlPy5nZXRPcHRpb24oKSBhcyBFQ2hhcnRzT3B0aW9uO1xuICAgICAgICBpZiAoIW9wdGlvbnMudG9vbHRpcCB8fCAhQXJyYXkuaXNBcnJheShvcHRpb25zLnRvb2x0aXApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zOiBQYXJ0aWFsPFNlcmllc09wdGlvbj4gPSB7XG4gICAgICAgICAgdG9vbHRpcDogb3B0aW9uc1sndG9vbHRpcCddWzBdXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCF1cGRhdGVkT3B0aW9ucy50b29sdGlwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZWRPcHRpb25zLnRvb2x0aXAuZm9ybWF0dGVyID0gYDxkaXYgc3R5bGU9XCJ3aWR0aDogJHt0aGlzLlRPT0xUSVBfV0lEVEh9cHhcIj4ke1lBeGlzUmVhZGluZ3Muam9pbignJyl9PC9kaXY+YDtcbiAgICAgICAgdXBkYXRlZE9wdGlvbnMudG9vbHRpcC50cmFuc2l0aW9uRHVyYXRpb24gPSAwO1xuICAgICAgICB1cGRhdGVkT3B0aW9ucy50b29sdGlwLnBvc2l0aW9uID0gdGhpcy50b29sdGlwUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5lY2hhcnRzSW5zdGFuY2U/LnNldE9wdGlvbih1cGRhdGVkT3B0aW9ucyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBZQXhpc1JlYWRpbmdzLnB1c2godmFsdWUpO1xuXG4gICAgcmV0dXJuIGA8ZGl2IHN0eWxlPVwid2lkdGg6IDMwMHB4XCI+JHtZQXhpc1JlYWRpbmdzLmpvaW4oJycpfTwvZGl2PmA7XG4gIH1cblxuICBwcml2YXRlIHRvb2x0aXBQb3NpdGlvbigpOiBUb29sdGlwUG9zaXRpb25DYWxsYmFjayB7XG4gICAgbGV0IGxhc3RQb3NpdGlvbk9mVG9vbHRpcDogUGFydGlhbDxSZWNvcmQ8J3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcsIG51bWJlcj4+ID0ge307XG4gICAgaWYgKHRoaXMudG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2x0aXBQb3NpdGlvbkNhbGxiYWNrO1xuICAgIH1cblxuICAgIHRoaXMudG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2sgPSAoXG4gICAgICBwb2ludDogW251bWJlciwgbnVtYmVyXSwgLy8gcG9zaXRpb24gb2YgbW91c2UgaW4gY2hhcnQgW1gsIFldOyAwLDAgaXMgdG9wIGxlZnQgY29ybmVyXG4gICAgICBfOiBhbnksIC8vIHRvb2x0aXAgZGF0YVxuICAgICAgZG9tOiBIVE1MRWxlbWVudCB8IHVua25vd24sIC8vIHRvb2x0aXAgZWxlbWVudFxuICAgICAgX186IGFueSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgY29udGVudFNpemU6IFtudW1iZXIsIG51bWJlcl07IC8vIHNpemUgb2YgdG9vbHRpcFxuICAgICAgICB2aWV3U2l6ZTogW251bWJlciwgbnVtYmVyXTtcbiAgICAgIH0gfCBudWxsIC8vIHNpemUgb2YgY2hhcnRcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IDEwO1xuICAgICAgY29uc3QgW21vdXNlWCwgbW91c2VZXSA9IHBvaW50O1xuICAgICAgY29uc3QgY2hhcnRXaWR0aCA9IHNpemU/LnZpZXdTaXplWzBdIHx8IDA7XG4gICAgICBjb25zdCBjaGFydEhlaWdodCA9IHNpemU/LnZpZXdTaXplWzFdIHx8IDA7XG4gICAgICBjb25zdCB0b29sdGlwV2lkdGggPSBzaXplPy5jb250ZW50U2l6ZVswXSB8fCAwO1xuICAgICAgY29uc3QgdG9vbHRpcEhlaWdodCA9IHNpemU/LmNvbnRlbnRTaXplWzFdIHx8IDA7XG4gICAgICBjb25zdCB0b29sdGlwUmVjdCA9IChkb20gYXMgSFRNTEVsZW1lbnQpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvb2x0aXBPdmVyZmxvd3NCb3R0b21FZGdlID0gdG9vbHRpcFJlY3QuYm90dG9tID4gd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICBjb25zdCB0b29sdGlwT3ZlcmZsb3dzUmlnaHRFZGdlID0gdG9vbHRpcFJlY3QucmlnaHQgPiB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICAgICAgY29uc3QgdG9vbHRpcFdvdWxkT3ZlcmZsb3dCb3R0b21FZGdlT25Qb3NpdGlvbkNoYW5nZSA9XG4gICAgICAgICFsYXN0UG9zaXRpb25PZlRvb2x0aXAudG9wICYmXG4gICAgICAgIHRvb2x0aXBSZWN0LmJvdHRvbSArIDIgKiBvZmZzZXQgKyB0b29sdGlwSGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgICBjb25zdCB0b29sdGlwV291bGRPdmVyZmxvd1JpZ2h0RWRnZU9uUG9zaXRpb25DaGFuZ2UgPVxuICAgICAgICAhbGFzdFBvc2l0aW9uT2ZUb29sdGlwLmxlZnQgJiZcbiAgICAgICAgdG9vbHRpcFJlY3QucmlnaHQgKyAyICogb2Zmc2V0ICsgdG9vbHRpcFdpZHRoID4gd2luZG93LmlubmVyV2lkdGg7XG5cbiAgICAgIGxldCB2ZXJ0aWNhbFBvc2l0aW9uOiB7IHRvcDogbnVtYmVyIH0gfCB7IGJvdHRvbTogbnVtYmVyIH0gPSB7XG4gICAgICAgIHRvcDogbW91c2VZICsgb2Zmc2V0XG4gICAgICB9O1xuICAgICAgbGV0IGhvcml6b250YWxQb3NpdGlvbjogeyBsZWZ0OiBudW1iZXIgfSB8IHsgcmlnaHQ6IG51bWJlciB9ID0ge1xuICAgICAgICBsZWZ0OiBtb3VzZVggKyBvZmZzZXRcbiAgICAgIH07XG5cbiAgICAgIGlmICh0b29sdGlwT3ZlcmZsb3dzQm90dG9tRWRnZSB8fCB0b29sdGlwV291bGRPdmVyZmxvd0JvdHRvbUVkZ2VPblBvc2l0aW9uQ2hhbmdlKSB7XG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb24gPSB7XG4gICAgICAgICAgYm90dG9tOiBjaGFydEhlaWdodCAtIG1vdXNlWSArIG9mZnNldFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRvb2x0aXBPdmVyZmxvd3NSaWdodEVkZ2UgfHwgdG9vbHRpcFdvdWxkT3ZlcmZsb3dSaWdodEVkZ2VPblBvc2l0aW9uQ2hhbmdlKSB7XG4gICAgICAgIGhvcml6b250YWxQb3NpdGlvbiA9IHtcbiAgICAgICAgICByaWdodDogY2hhcnRXaWR0aCAtIG1vdXNlWCArIG9mZnNldFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBsYXN0UG9zaXRpb25PZlRvb2x0aXAgPSB7XG4gICAgICAgIC4uLnZlcnRpY2FsUG9zaXRpb24sXG4gICAgICAgIC4uLmhvcml6b250YWxQb3NpdGlvblxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0UG9zaXRpb25PZlRvb2x0aXA7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwUG9zaXRpb25DYWxsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkZCB0aGUgZGF0YSBwb2ludCBpbmZvIHRvIHRoZSB0b29sdGlwLlxuICAgKiBAcGFyYW0gYWxsRGF0YVBvaW50U2VyaWVzIC0gQWxsIHRoZSBkYXRhIHBvaW50IHNlcmllcy5cbiAgICogQHBhcmFtIFhBeGlzVmFsdWUgLSBUaGUgWCBBeGlzIHZhbHVlLlxuICAgKiBAcGFyYW0gWUF4aXNSZWFkaW5ncyAtIFRoZSBZIEF4aXMgcmVhZGluZ3MuXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NTZXJpZXMoXG4gICAgYWxsRGF0YVBvaW50U2VyaWVzOiBDdXN0b21TZXJpZXNPcHRpb25zW10sXG4gICAgWEF4aXNWYWx1ZTogc3RyaW5nLFxuICAgIFlBeGlzUmVhZGluZ3M6IHN0cmluZ1tdXG4gICk6IHZvaWQge1xuICAgIGFsbERhdGFQb2ludFNlcmllcy5mb3JFYWNoKChzZXJpZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHNlcmllcy5kYXRhcG9pbnRJZCA9PT0gJ2FnZ3JlZ2F0ZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgaWYgKHNlcmllcy5pZC5lbmRzV2l0aCgnL21pbicpKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5wcm9jZXNzTWluU2VyaWVzKHNlcmllcywgYWxsRGF0YVBvaW50U2VyaWVzLCBYQXhpc1ZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIXNlcmllcy5pZC5lbmRzV2l0aCgnL21heCcpKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5wcm9jZXNzUmVndWxhclNlcmllcyhzZXJpZXMsIFhBeGlzVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgWUF4aXNSZWFkaW5ncy5wdXNoKFxuICAgICAgICAgIGA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC1iLThcIj48c3BhbiBjbGFzcz0nZGx0LWM4eS1pY29uLWNpcmNsZSBtLXItNCcgc3R5bGU9J2NvbG9yOiAke3Nlcmllcy5pdGVtU3R5bGUuY29sb3J9Oyc+PC9zcGFuPmAgKyAvLyBjb2xvciBjaXJjbGVcbiAgICAgICAgICAgIGA8c3Ryb25nPiR7c2VyaWVzLmRhdGFwb2ludExhYmVsfTwvc3Ryb25nPjwvZGl2PmAgKyAvLyBuYW1lXG4gICAgICAgICAgICBgJHt2YWx1ZX1gIC8vIHNpbmdsZSB2YWx1ZSBvciBtaW4tbWF4IHJhbmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBwcm9jZXNzIHRoZSBtaW4gc2VyaWVzLlxuICAgKiBAcGFyYW0gc2VyaWVzIC0gVGhlIHNlcmllcy5cbiAgICogQHBhcmFtIGFsbERhdGFQb2ludFNlcmllcyAtIEFsbCB0aGUgZGF0YSBwb2ludCBzZXJpZXMuXG4gICAqIEBwYXJhbSBYQXhpc1ZhbHVlIC0gVGhlIFggQXhpcyB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc01pblNlcmllcyhcbiAgICBzZXJpZXM6IGFueSxcbiAgICBhbGxEYXRhUG9pbnRTZXJpZXM6IEN1c3RvbVNlcmllc09wdGlvbnNbXSxcbiAgICBYQXhpc1ZhbHVlOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaW5WYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoc2VyaWVzLmRhdGEsIFhBeGlzVmFsdWUpO1xuICAgIGlmICghbWluVmFsdWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgbWF4U2VyaWVzID0gYWxsRGF0YVBvaW50U2VyaWVzLmZpbmQocyA9PiBzWydpZCddID09PSBzZXJpZXMuaWQucmVwbGFjZSgnL21pbicsICcvbWF4JykpO1xuICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5maW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChcbiAgICAgIG1heFNlcmllcz8uWydkYXRhJ10gYXMgU2VyaWVzVmFsdWVbXSxcbiAgICAgIFhBeGlzVmFsdWVcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICBgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHNlcGFyYXRvci10b3AgcC10LTggcC1iLThcIj48bGFiZWwgY2xhc3M9XCJ0ZXh0LTEyIG0tci04IG0tYi0wXCI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShtaW5WYWx1ZVswXSl9PC9sYWJlbD5gICtcbiAgICAgIGA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvIHRleHQtMTJcIj4ke21pblZhbHVlWzFdfSDigJQgJHttYXhWYWx1ZT8uWzFdfWAgK1xuICAgICAgKHNlcmllcy5kYXRhcG9pbnRVbml0ID8gYCAke3Nlcmllcy5kYXRhcG9pbnRVbml0fWAgOiAnJykgK1xuICAgICAgYDwvc3Bhbj48L2Rpdj5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHByb2Nlc3MgdGhlIHJlZ3VsYXIgc2VyaWVzLlxuICAgKiBAcGFyYW0gc2VyaWVzIC0gVGhlIHNlcmllcy5cbiAgICogQHBhcmFtIFhBeGlzVmFsdWUgLSBUaGUgWCBBeGlzIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzUmVndWxhclNlcmllcyhzZXJpZXM6IGFueSwgWEF4aXNWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZXJpZXNWYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoc2VyaWVzLmRhdGEsIFhBeGlzVmFsdWUpO1xuICAgIGlmICghc2VyaWVzVmFsdWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC10LTggcC1iLTggc2VwYXJhdG9yLXRvcFwiPmAgK1xuICAgICAgYDxsYWJlbCBjbGFzcz1cIm0tYi0wIG0tci04IHRleHQtMTJcIj4ke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICBzZXJpZXNWYWx1ZVswXVxuICAgICAgKX08L2xhYmVsPjxzcGFuIGNsYXNzPVwibS1sLWF1dG8gdGV4dC0xMlwiPmAgK1xuICAgICAgc2VyaWVzVmFsdWVbMV0/LnRvU3RyaW5nKCkgK1xuICAgICAgKHNlcmllcy5kYXRhcG9pbnRVbml0ID8gYCAke3Nlcmllcy5kYXRhcG9pbnRVbml0fWAgOiAnJykgK1xuICAgICAgYDwvc3Bhbj48L2Rpdj5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHByb2Nlc3MgdGhlIGV2ZW50IHRvb2x0aXAuXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFRoZSBwcm9jZXNzZWQgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NFdmVudChldmVudDogSUV2ZW50LCBYQXhpc1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB2YWx1ZSA9IGA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIHNtYWxsIHNlcGFyYXRvci10b3BcIj5gO1xuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vLXdyYXBcIj48bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItOFwiPkV2ZW50IHR5cGU8L2xhYmVsPjxjb2RlIGNsYXNzPVwibS1sLWF1dG9cIj4ke2V2ZW50LnR5cGV9PC9jb2RlPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLThcIj5FdmVudCB0ZXh0PC9sYWJlbD48c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+JHtldmVudC50ZXh0fTxzcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLThcIj5FdmVudCB0aW1lPC9sYWJlbD48c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShYQXhpc1ZhbHVlKX08c3Bhbj48L2xpPmA7XG4gICAgdmFsdWUgKz0gYDwvdWw+YDtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBwcm9jZXNzIHRoZSBhbGFybSB0b29sdGlwLlxuICAgKiBAcGFyYW0gYWxhcm0gLSBUaGUgYWxhcm0gb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzQWxhcm0oYWxhcm06IElBbGFybSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHZhbHVlID0gYDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgc2VwYXJhdG9yLXRvcCBtLTBcIj5gO1xuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggYS1pLWNlbnRlciBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm8td3JhcFwiPjxsYWJlbCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj5BbGFybSBTZXZlcml0eTwvbGFiZWw+YDtcbiAgICB2YWx1ZSArPSBgPHNwYW4gY2xhc3M9XCJzbWFsbCBkLWlubGluZS1mbGV4IGEtaS1jZW50ZXIgZ2FwLTQgbS1sLWF1dG9cIj48aSBjbGFzcz1cInN0cm9rZWQtaWNvbiBpY29uLTE0IHN0YXR1cyBkbHQtYzh5LWljb24tJHt0aGlzLnNldmVyaXR5SWNvblBpcGUudHJhbnNmb3JtKGFsYXJtLnNldmVyaXR5KX0gJHthbGFybS5zZXZlcml0eS50b0xvd2VyQ2FzZSgpfVwiID4gPC9pPiAke3RoaXMuc2V2ZXJpdHlMYWJlbFBpcGUudHJhbnNmb3JtKGFsYXJtLnNldmVyaXR5KX0gPC9zcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPkFsYXJtIFR5cGU8L2xhYmVsPjxzcGFuIGNsYXNzPVwic21hbGwgbS1sLWF1dG9cIj48Y29kZT4ke2FsYXJtLnR5cGV9PC9jb2RlPjwvc3Bhbj48L2xpPmA7XG4gICAgdmFsdWUgKz0gYDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm8td3JhcFwiPjxsYWJlbCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj5NZXNzYWdlPC9sYWJlbD48c3BhbiBjbGFzcz1cInNtYWxsIG0tbC1hdXRvXCIgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcIiB0aXRsZT1cIiR7YWxhcm0udGV4dH1cIj4ke2FsYXJtLnRleHR9PC9zcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPkxhc3QgVXBkYXRlZDwvbGFiZWw+PHNwYW4gY2xhc3M9XCJzbWFsbCBtLWwtYXV0b1wiPiR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oYWxhcm1bJ2xhc3RVcGRhdGVkJ10pfTwvc3Bhbj48L2xpPmA7XG4gICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5hbGFybVJvdXRlRXhpc3RzKCk7XG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgY3VycmVudFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgY29uc3QgYmFzZVVybEluZGV4ID0gY3VycmVudFVybC5pbmRleE9mKElOREVYX0hUTUwpO1xuICAgICAgY29uc3QgYmFzZVVybCA9IGN1cnJlbnRVcmwuc3Vic3RyaW5nKDAsIGJhc2VVcmxJbmRleCArIElOREVYX0hUTUwubGVuZ3RoKTtcbiAgICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vLXdyYXBcIj48bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tYi0wIG0tci04XCI+TGluazwvbGFiZWw+PHNwYW4gY2xhc3M9XCJzbWFsbCBtLWwtYXV0b1wiPjxhIGhyZWY9XCIke2Jhc2VVcmx9Iy9hbGFybXMvJHthbGFybS5pZH0vZGV0YWlscz9zaG93Q2xlYXJlZD10cnVlXCI+JHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGdldHRleHQoJ0FsYXJtIGRldGFpbHMnKSl9PC9hPjwvc3Bhbj48L2xpPmA7XG4gICAgfVxuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPkFsYXJtIGNvdW50PC9sYWJlbD48c3BhbiBjbGFzcz1cInNtYWxsIG0tbC1hdXRvXCI+PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvXCI+JHthbGFybS5jb3VudH08L3NwYW4+PC9zcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPC91bD5gO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWxhcm1Sb3V0ZUV4aXN0cygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzLnJvdXRlci5jb25maWcuc29tZShyb3V0ZSA9PiB7XG4gICAgICByZXR1cm4gYCR7cm91dGUucGF0aH1gID09PSAnYWxhcm1zJztcbiAgICB9KTtcbiAgICByZXR1cm4gZXhpc3RzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGFydFNlcmllcyhcbiAgICBkYXRhcG9pbnRzV2l0aFZhbHVlczogRHBXaXRoVmFsdWVzW10sXG4gICAgZXZlbnRzOiBJRXZlbnRbXSxcbiAgICBhbGFybXM6IElBbGFybVtdLFxuICAgIGRpc3BsYXlPcHRpb25zOiB7IGRpc3BsYXlNYXJrZWRMaW5lOiBib29sZWFuOyBkaXNwbGF5TWFya2VkUG9pbnQ6IGJvb2xlYW4gfVxuICApOiBDdXN0b21TZXJpZXNPcHRpb25zW10gfCBTZXJpZXNPcHRpb25bXSB7XG4gICAgY29uc3Qgc2VyaWVzOiBTZXJpZXNPcHRpb25bXSA9IFtdO1xuICAgIGxldCBldmVudFNlcmllczogQ3VzdG9tU2VyaWVzT3B0aW9uc1tdID0gW107XG4gICAgbGV0IGFsYXJtU2VyaWVzOiBDdXN0b21TZXJpZXNPcHRpb25zW10gPSBbXTtcbiAgICBkYXRhcG9pbnRzV2l0aFZhbHVlcy5mb3JFYWNoKChkcCwgaWR4KSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJUeXBlOiBEYXRhcG9pbnRDaGFydFJlbmRlclR5cGUgPSBkcC5yZW5kZXJUeXBlIHx8ICdtaW4nO1xuICAgICAgaWYgKHJlbmRlclR5cGUgPT09ICdhcmVhJykge1xuICAgICAgICBzZXJpZXMucHVzaCh0aGlzLmdldFNpbmdsZVNlcmllcyhkcCwgJ21pbicsIGlkeCwgdHJ1ZSkpO1xuICAgICAgICBzZXJpZXMucHVzaCh0aGlzLmdldFNpbmdsZVNlcmllcyhkcCwgJ21heCcsIGlkeCwgdHJ1ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VyaWVzLnB1c2godGhpcy5nZXRTaW5nbGVTZXJpZXMoZHAsIHJlbmRlclR5cGUsIGlkeCwgZmFsc2UpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3RXZlbnRTZXJpZXMgPSB0aGlzLmdldEFsYXJtT3JFdmVudFNlcmllcyhcbiAgICAgICAgZHAsXG4gICAgICAgIHJlbmRlclR5cGUsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBldmVudHMsXG4gICAgICAgICdldmVudCcsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zLFxuICAgICAgICBudWxsLFxuICAgICAgICBpZHhcbiAgICAgICk7XG4gICAgICBjb25zdCBuZXdBbGFybVNlcmllcyA9IHRoaXMuZ2V0QWxhcm1PckV2ZW50U2VyaWVzKFxuICAgICAgICBkcCxcbiAgICAgICAgcmVuZGVyVHlwZSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGFsYXJtcyxcbiAgICAgICAgJ2FsYXJtJyxcbiAgICAgICAgZGlzcGxheU9wdGlvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGlkeFxuICAgICAgKTtcbiAgICAgIGV2ZW50U2VyaWVzID0gWy4uLmV2ZW50U2VyaWVzLCAuLi5uZXdFdmVudFNlcmllc107XG4gICAgICBhbGFybVNlcmllcyA9IFsuLi5hbGFybVNlcmllcywgLi4ubmV3QWxhcm1TZXJpZXNdO1xuICAgIH0pO1xuICAgIGNvbnN0IGRlZHVwbGljYXRlRmlsdGVyQ2FsbGJhY2sgPSAoXG4gICAgICBvYmoxOiBDdXN0b21TZXJpZXNPcHRpb25zLFxuICAgICAgaTogbnVtYmVyLFxuICAgICAgYXJyOiBTZXJpZXNPcHRpb25bXVxuICAgICk6IG9iajEgaXMgQ3VzdG9tU2VyaWVzT3B0aW9ucyA9PiB7XG4gICAgICBjb25zdCBkdXBsaWNhdGVzID0gYXJyLmZpbHRlcihvYmoyID0+IG9iajFbJ2lkJ10gPT09IG9iajJbJ2lkJ10gJiYgaSAhPT0gYXJyLmluZGV4T2Yob2JqMikpO1xuXG4gICAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvYmoxWydpc0RwVGVtcGxhdGVTZWxlY3RlZCddIGFzIGJvb2xlYW47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrRmFsbGJhY2sgPSAoXG4gICAgICBvYmoxOiBTZXJpZXNPcHRpb24sXG4gICAgICBpOiBudW1iZXIsXG4gICAgICBhcnI6IFNlcmllc09wdGlvbltdXG4gICAgKTogb2JqMSBpcyBTZXJpZXNPcHRpb24gPT4gYXJyLmZpbmRJbmRleChvYmoyID0+IG9iajJbJ2lkJ10gPT09IG9iajFbJ2lkJ10pID09PSBpO1xuXG4gICAgbGV0IGRlZHVwbGljYXRlZEV2ZW50cyA9IGV2ZW50U2VyaWVzLmZpbHRlcihkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrKTtcbiAgICBsZXQgZGVkdXBsaWNhdGVkQWxhcm1zID0gYWxhcm1TZXJpZXMuZmlsdGVyKGRlZHVwbGljYXRlRmlsdGVyQ2FsbGJhY2spO1xuICAgIGlmIChkZWR1cGxpY2F0ZWRBbGFybXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWR1cGxpY2F0ZWRBbGFybXMgPSBhbGFybVNlcmllcy5maWx0ZXIoZGVkdXBsaWNhdGVGaWx0ZXJDYWxsYmFja0ZhbGxiYWNrKTtcbiAgICB9XG4gICAgaWYgKGRlZHVwbGljYXRlZEV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlZHVwbGljYXRlZEV2ZW50cyA9IGV2ZW50U2VyaWVzLmZpbHRlcihkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrRmFsbGJhY2spO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLnNlcmllcywgLi4uZGVkdXBsaWNhdGVkRXZlbnRzLCAuLi5kZWR1cGxpY2F0ZWRBbGFybXNdO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cEJ5VHlwZShcbiAgICBpdGVtczogSUFsYXJtW10gfCBJRXZlbnRbXSxcbiAgICB0eXBlRmllbGQ6IHN0cmluZ1xuICApOiBSZWNvcmQ8c3RyaW5nLCBJQWxhcm1bXSB8IElFdmVudFtdPiB7XG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoZ3JvdXBlZCwgaXRlbSkgPT4ge1xuICAgICAgKGdyb3VwZWRbaXRlbVt0eXBlRmllbGRdXSA9IGdyb3VwZWRbaXRlbVt0eXBlRmllbGRdXSB8fCBbXSkucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiBncm91cGVkO1xuICAgIH0sIHt9IGFzIGFueSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIGRhdGEgcG9pbnRzLiBUaGUgZ29hbCBpcyB0byBwbGFjZSB0aGUgbWFya1BvaW50IG9uIHRoZSBjaGFydCBpbiB0aGUgcmlnaHQgcGxhY2UuXG4gICAqIEBwYXJhbSBkcFZhbHVlc0FycmF5IGFycmF5IG9mIGRhdGEgcG9pbnRzXG4gICAqIEBwYXJhbSB0YXJnZXRUaW1lIHRpbWUgb2YgdGhlIGFsYXJtIG9yIGV2ZW50XG4gICAqIEByZXR1cm5zIGludGVycG9sYXRlZCBkYXRhIHBvaW50XG4gICAqL1xuICBwcml2YXRlIGludGVycG9sYXRlQmV0d2VlblR3b0RwcyhcbiAgICBkcFZhbHVlc0FycmF5OiBEcFZhbHVlc0l0ZW1bXSxcbiAgICB0YXJnZXRUaW1lOiBudW1iZXJcbiAgKTogRHBWYWx1ZXNJdGVtIHtcbiAgICBsZXQgbWF4VmFsdWU6IG51bWJlcjtcbiAgICBsZXQgbWluVmFsdWU6IG51bWJlcjtcbiAgICByZXR1cm4gZHBWYWx1ZXNBcnJheS5yZWR1Y2UoKGFjYywgY3VyciwgaWR4LCBhcnIpID0+IHtcbiAgICAgIGlmIChuZXcgRGF0ZShjdXJyLnRpbWUpLmdldFRpbWUoKSA8PSB0YXJnZXRUaW1lKSB7XG4gICAgICAgIGlmIChpZHggPT09IGFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpbWU6IHRhcmdldFRpbWUsXG4gICAgICAgICAgICB2YWx1ZXM6IFt7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHREcCA9IGFycltpZHggKyAxXTtcbiAgICAgICAgaWYgKG5ldyBEYXRlKG5leHREcC50aW1lKS5nZXRUaW1lKCkgPj0gdGFyZ2V0VGltZSkge1xuICAgICAgICAgIGNvbnN0IHRpbWVEaWZmID0gbmV3IERhdGUobmV4dERwLnRpbWUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGN1cnIudGltZSkuZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IHRhcmdldFRpbWVEaWZmID0gdGFyZ2V0VGltZSAtIG5ldyBEYXRlKGN1cnIudGltZSkuZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IG1pblZhbHVlRGlmZiA9IG5leHREcC52YWx1ZXNbMF0/Lm1pbiAtIGN1cnIudmFsdWVzWzBdPy5taW47XG4gICAgICAgICAgY29uc3QgbWF4VmFsdWVEaWZmID0gbmV4dERwLnZhbHVlc1swXT8ubWF4IC0gY3Vyci52YWx1ZXNbMF0/Lm1heDtcbiAgICAgICAgICBtaW5WYWx1ZSA9IGN1cnIudmFsdWVzWzBdPy5taW4gKyAobWluVmFsdWVEaWZmICogdGFyZ2V0VGltZURpZmYpIC8gdGltZURpZmY7XG4gICAgICAgICAgbWF4VmFsdWUgPSBjdXJyLnZhbHVlc1swXT8ubWF4ICsgKG1heFZhbHVlRGlmZiAqIHRhcmdldFRpbWVEaWZmKSAvIHRpbWVEaWZmO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aW1lOiB0YXJnZXRUaW1lLFxuICAgICAgICAgICAgdmFsdWVzOiBbeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xvc2VzdERwVmFsdWVUb1RhcmdldFRpbWUoXG4gICAgZHBWYWx1ZXNBcnJheTogRHBWYWx1ZXNJdGVtW10sXG4gICAgdGFyZ2V0VGltZTogbnVtYmVyXG4gICk6IERwVmFsdWVzSXRlbSB7XG4gICAgcmV0dXJuIGRwVmFsdWVzQXJyYXkucmVkdWNlKChwcmV2LCBjdXJyKSA9PlxuICAgICAgLy9zaG91bGQgdGFrZSB0aGUgdmFsdWUgY2xvc2VzdCB0byB0aGUgdGFyZ2V0IHRpbWUsIGZvciByZWFsdGltZSB0aGUgY3VycmVudCB0aW1lIHdvdWxkIGFsd2F5cyBjaGFuZ2VcbiAgICAgIE1hdGguYWJzKG5ldyBEYXRlKGN1cnIudGltZSkuZ2V0VGltZSgpIC0gdGFyZ2V0VGltZSkgPFxuICAgICAgTWF0aC5hYnMobmV3IERhdGUocHJldi50aW1lKS5nZXRUaW1lKCkgLSB0YXJnZXRUaW1lKVxuICAgICAgICA/IGN1cnJcbiAgICAgICAgOiBwcmV2XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbWFya1BvaW50IG9uIHRoZSBjaGFydCB3aGljaCByZXByZXNlbnRzIHRoZSBpY29uIG9mIHRoZSBhbGFybSBvciBldmVudC5cbiAgICogQHBhcmFtIGl0ZW0gU2luZ2xlIGFsYXJtIG9yIGV2ZW50XG4gICAqIEBwYXJhbSBkcCBEYXRhIHBvaW50XG4gICAqIEBwYXJhbSBpc0NsZWFyZWQgSWYgdGhlIGFsYXJtIGlzIGNsZWFyZWQgaW4gY2FzZSBvZiBhbGFybVxuICAgKiBAcGFyYW0gaXNFdmVudCBJZiB0aGUgaXRlbSBpcyBhbiBldmVudFxuICAgKiBAcGFyYW0gcmVhbHRpbWUgSWYgdGhlIGNoYXJ0IGlzIGluIHJlYWx0aW1lIG1vZGVcbiAgICogQHJldHVybnMgTWFya1BvaW50RGF0YUl0ZW1PcHRpb25bXVxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVNYXJrUG9pbnQoXG4gICAgaXRlbTogSUFsYXJtIHwgSUV2ZW50LFxuICAgIGRwOiBEcFdpdGhWYWx1ZXMsXG4gICAgaXNDbGVhcmVkOiBib29sZWFuLFxuICAgIGlzRXZlbnQ6IGJvb2xlYW4sXG4gICAgcmVhbHRpbWU6IGJvb2xlYW5cbiAgKTogTWFya1BvaW50RGF0YVtdIHtcbiAgICAvLyBjaGVjayBpZiBkcC52YWx1ZXMgb2JqZWN0IGlzIGVtcHR5XG4gICAgaWYgKCFpdGVtLmNyZWF0aW9uVGltZSB8fCBPYmplY3Qua2V5cyhkcC52YWx1ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRwVmFsdWVzQXJyYXk6IERwVmFsdWVzSXRlbVtdID0gT2JqZWN0LmVudHJpZXMoZHAudmFsdWVzKS5tYXAoKFt0aW1lLCB2YWx1ZXNdKSA9PiAoe1xuICAgICAgdGltZTogbmV3IERhdGUodGltZSkuZ2V0VGltZSgpLFxuICAgICAgdmFsdWVzXG4gICAgfSkpO1xuICAgIGNvbnN0IGNyZWF0aW9uVGltZSA9IG5ldyBEYXRlKGl0ZW0uY3JlYXRpb25UaW1lKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgbGFzdFVwZGF0ZWRUaW1lID0gbmV3IERhdGUoaXRlbVsnbGFzdFVwZGF0ZWQnXSkuZ2V0VGltZSgpO1xuXG4gICAgbGV0IGNvb3JkQ3JlYXRpb25UaW1lOiBhbnk7XG4gICAgbGV0IGNvb3JkTGFzdFVwZGF0ZWRUaW1lOiBhbnk7XG5cbiAgICBpZiAocmVhbHRpbWUpIHtcbiAgICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGRwVmFsdWVzQXJyYXlbZHBWYWx1ZXNBcnJheS5sZW5ndGggLSAxXTtcbiAgICAgIGNvb3JkQ3JlYXRpb25UaW1lID0gW1xuICAgICAgICBpdGVtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgbGFzdFZhbHVlPy52YWx1ZXNbMF0/Lm1pbiA/PyBsYXN0VmFsdWU/LnZhbHVlc1sxXSA/PyBudWxsXG4gICAgICBdO1xuICAgICAgY29vcmRMYXN0VXBkYXRlZFRpbWUgPSBbXG4gICAgICAgIGl0ZW1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgIGxhc3RWYWx1ZT8udmFsdWVzWzBdPy5taW4gPz8gbGFzdFZhbHVlPy52YWx1ZXNbMV0gPz8gbnVsbFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2xvc2VzdERwVmFsdWUgPSB0aGlzLmludGVycG9sYXRlQmV0d2VlblR3b0RwcyhkcFZhbHVlc0FycmF5LCBjcmVhdGlvblRpbWUpO1xuICAgICAgY29uc3QgZHBWYWx1ZXNGb3JOZXdBbGFybXMgPSB0aGlzLmdldENsb3Nlc3REcFZhbHVlVG9UYXJnZXRUaW1lKGRwVmFsdWVzQXJyYXksIGNyZWF0aW9uVGltZSk7XG4gICAgICBjb25zdCBjbG9zZXN0RHBWYWx1ZUxhc3RVcGRhdGVkID0gdGhpcy5pbnRlcnBvbGF0ZUJldHdlZW5Ud29EcHMoXG4gICAgICAgIGRwVmFsdWVzQXJyYXksXG4gICAgICAgIGxhc3RVcGRhdGVkVGltZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRwVmFsdWVzRm9yTmV3QWxhcm1zTGFzdFVwZGF0ZWQgPSB0aGlzLmdldENsb3Nlc3REcFZhbHVlVG9UYXJnZXRUaW1lKFxuICAgICAgICBkcFZhbHVlc0FycmF5LFxuICAgICAgICBsYXN0VXBkYXRlZFRpbWVcbiAgICAgICk7XG5cbiAgICAgIGNvb3JkQ3JlYXRpb25UaW1lID0gW1xuICAgICAgICBpdGVtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgY2xvc2VzdERwVmFsdWU/LnZhbHVlc1swXT8ubWluID8/XG4gICAgICAgICAgY2xvc2VzdERwVmFsdWU/LnZhbHVlc1sxXSA/P1xuICAgICAgICAgIGRwVmFsdWVzRm9yTmV3QWxhcm1zPy52YWx1ZXNbMF0/Lm1pbiA/P1xuICAgICAgICAgIGRwVmFsdWVzRm9yTmV3QWxhcm1zPy52YWx1ZXNbMV0gPz9cbiAgICAgICAgICBudWxsXG4gICAgICBdO1xuICAgICAgY29vcmRMYXN0VXBkYXRlZFRpbWUgPSBbXG4gICAgICAgIGl0ZW1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgIGNsb3Nlc3REcFZhbHVlTGFzdFVwZGF0ZWQ/LnZhbHVlc1swXT8ubWluID8/XG4gICAgICAgICAgY2xvc2VzdERwVmFsdWVMYXN0VXBkYXRlZD8udmFsdWVzWzFdID8/XG4gICAgICAgICAgZHBWYWx1ZXNGb3JOZXdBbGFybXNMYXN0VXBkYXRlZD8udmFsdWVzWzBdPy5taW4gPz9cbiAgICAgICAgICBkcFZhbHVlc0Zvck5ld0FsYXJtc0xhc3RVcGRhdGVkPy52YWx1ZXNbMV0gPz9cbiAgICAgICAgICBudWxsXG4gICAgICBdO1xuICAgIH1cblxuICAgIGlmIChpc0V2ZW50KSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgY29vcmQ6IGNvb3JkQ3JlYXRpb25UaW1lLFxuICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgIGl0ZW1TdHlsZToge1xuICAgICAgICAgICAgY29sb3I6IGl0ZW1bJ2NvbG9yJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgIHN5bWJvbDogJ2NpcmNsZScsXG4gICAgICAgICAgc3ltYm9sU2l6ZTogMjRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd3aGl0ZScgfSxcbiAgICAgICAgICBzeW1ib2w6IElDT05TX01BUC5FVkVOVCxcbiAgICAgICAgICBzeW1ib2xTaXplOiAxNlxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NsZWFyZWRcbiAgICAgID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgICAgY29sb3I6IGl0ZW1bJ2NvbG9yJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzeW1ib2w6ICdjaXJjbGUnLFxuICAgICAgICAgICAgc3ltYm9sU2l6ZTogMjRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd3aGl0ZScgfSxcbiAgICAgICAgICAgIHN5bWJvbDogSUNPTlNfTUFQW2l0ZW0uc2V2ZXJpdHkgYXMgU2V2ZXJpdHlUeXBlXSxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDE2XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBpdGVtWydjb2xvciddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3ltYm9sOiAnY2lyY2xlJyxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDI0XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiAnd2hpdGUnIH0sXG4gICAgICAgICAgICBzeW1ib2w6IElDT05TX01BUC5DTEVBUkVELFxuICAgICAgICAgICAgc3ltYm9sU2l6ZTogMTZcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgICAgY29sb3I6IGl0ZW1bJ2NvbG9yJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzeW1ib2w6ICdjaXJjbGUnLFxuICAgICAgICAgICAgc3ltYm9sU2l6ZTogMjRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd3aGl0ZScgfSxcbiAgICAgICAgICAgIHN5bWJvbDogSUNPTlNfTUFQW2l0ZW0uc2V2ZXJpdHkgYXMgU2V2ZXJpdHlUeXBlXSxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDE2XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBpdGVtWydjb2xvciddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3ltYm9sOiAnY2lyY2xlJyxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDI0XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRMYXN0VXBkYXRlZFRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiAnd2hpdGUnIH0sXG4gICAgICAgICAgICBzeW1ib2w6IElDT05TX01BUFtpdGVtLnNldmVyaXR5IGFzIFNldmVyaXR5VHlwZV0sXG4gICAgICAgICAgICBzeW1ib2xTaXplOiAxNlxuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbWFya0xpbmUgb24gdGhlIGNoYXJ0IHdoaWNoIHJlcHJlc2VudHMgdGhlIGxpbmUgYmV0d2VlbiBldmVyeSBhbGFybSBvciBldmVudCBvbiB0aGUgY2hhcnQuXG4gICAqIEBwYXJhbSBpdGVtcyBBcnJheSBvZiBhbGFybXMgb3IgZXZlbnRzXG4gICAqIEByZXR1cm5zIE1hcmtMaW5lRGF0YUl0ZW1PcHRpb25CYXNlW11cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTWFya0xpbmU8VCBleHRlbmRzIElBbGFybSB8IElFdmVudD4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBpdGVtVHlwZTogJ2FsYXJtJyB8ICdldmVudCdcbiAgKTogTWFya0xpbmVEYXRhW10ge1xuICAgIHJldHVybiBpdGVtcy5yZWR1Y2U8TWFya0xpbmVEYXRhW10+KChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghaXRlbS5jcmVhdGlvblRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gJ2V2ZW50Jykge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgeEF4aXM6IGl0ZW0udGltZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBsYWJlbDogeyBzaG93OiBmYWxzZSwgZm9ybWF0dGVyOiAoKSA9PiBpdGVtLnR5cGUgfSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogaXRlbVsnY29sb3InXSB9XG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtLmNyZWF0aW9uVGltZSA9PT0gaXRlbVsnbGFzdFVwZGF0ZWQnXSkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgeEF4aXM6IGl0ZW0uY3JlYXRpb25UaW1lLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGxhYmVsOiB7IHNob3c6IGZhbHNlLCBmb3JtYXR0ZXI6ICgpID0+IGl0ZW0udHlwZSB9LFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiBpdGVtWydjb2xvciddIH1cbiAgICAgICAgICB9XG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHhBeGlzOiBpdGVtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBsYWJlbDogeyBzaG93OiBmYWxzZSwgZm9ybWF0dGVyOiAoKSA9PiBpdGVtLnR5cGUgfSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogaXRlbVsnY29sb3InXSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4QXhpczogaXRlbVsnbGFzdFVwZGF0ZWQnXSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBsYWJlbDogeyBzaG93OiBmYWxzZSwgZm9ybWF0dGVyOiAoKSA9PiBpdGVtLnR5cGUgfSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogaXRlbVsnY29sb3InXSB9XG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNpbmdsZVNlcmllcyhcbiAgICBkcDogRHBXaXRoVmFsdWVzLFxuICAgIHJlbmRlclR5cGU6IEV4Y2x1ZGU8RGF0YXBvaW50Q2hhcnRSZW5kZXJUeXBlLCAnYXJlYSc+LFxuICAgIGlkeDogbnVtYmVyLFxuICAgIGlzTWluTWF4Q2hhcnQgPSBmYWxzZSxcbiAgICBzZXJpZXNUeXBlID0gJydcbiAgKTogU2VyaWVzT3B0aW9uICYgU2VyaWVzRGF0YXBvaW50SW5mbyB7XG4gICAgY29uc3QgZGF0YXBvaW50SWQgPSBkcC5fX3RhcmdldD8uaWQgKyBkcC5mcmFnbWVudCArIGRwLnNlcmllcztcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YXBvaW50SWQsXG4gICAgICBkYXRhcG9pbnRVbml0OiBkcC51bml0IHx8ICcnLFxuICAgICAgLy8gJ2lkJyBwcm9wZXJ0eSBpcyBuZWVkZWQgYXMgJ3Nlcmllc0lkJyBpbiB0b29sdGlwIGZvcm1hdHRlclxuICAgICAgaWQ6IGlzTWluTWF4Q2hhcnRcbiAgICAgICAgPyBgJHtkYXRhcG9pbnRJZH0vJHtyZW5kZXJUeXBlfSR7c2VyaWVzVHlwZX1gXG4gICAgICAgIDogYCR7ZGF0YXBvaW50SWR9JHtzZXJpZXNUeXBlfWAsXG4gICAgICBuYW1lOiBgJHtkcC5sYWJlbH0gKCR7ZHAuX190YXJnZXQ/LlsnbmFtZSddfSlgLFxuICAgICAgLy8gZGF0YXBvaW50TGFiZWwgdXNlZCB0byBwcm9wZXIgZGlzcGxheSBvZiB0b29sdGlwXG4gICAgICBkYXRhcG9pbnRMYWJlbDogZHAubGFiZWwgfHwgJycsXG4gICAgICBkYXRhOiBPYmplY3QuZW50cmllcyhkcC52YWx1ZXMpLm1hcCgoW2RhdGVTdHJpbmcsIHZhbHVlc10pID0+IHtcbiAgICAgICAgcmV0dXJuIFtkYXRlU3RyaW5nLCB2YWx1ZXNbMF1bcmVuZGVyVHlwZV1dO1xuICAgICAgfSksXG4gICAgICB5QXhpc0luZGV4OiBpZHgsXG4gICAgICAuLi50aGlzLmNoYXJ0VHlwZXNTZXJ2aWNlLmdldFNlcmllc09wdGlvbnMoZHAsIGlzTWluTWF4Q2hhcnQsIHJlbmRlclR5cGUpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgZ2VuZXJhbCB0b29sdGlwIGZvcm1hdHRlciBmb3IgdGhlIGNoYXJ0LlxuICAgKiBAcmV0dXJucyBUb29sdGlwRm9ybWF0dGVyQ2FsbGJhY2s8VG9wTGV2ZWxGb3JtYXR0ZXJQYXJhbXM+XG4gICAqL1xuICBwcml2YXRlIGdldFRvb2x0aXBGb3JtYXR0ZXIoKTogVG9vbHRpcEZvcm1hdHRlckNhbGxiYWNrPFRvcExldmVsRm9ybWF0dGVyUGFyYW1zPiB7XG4gICAgcmV0dXJuIHBhcmFtcyA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zKSB8fCAhcGFyYW1zWzBdPy5kYXRhKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBwYXJhbXNbMF0uZGF0YSBhcyBbc3RyaW5nLCAuLi5hbnlbXV07XG4gICAgICBjb25zdCBYQXhpc1ZhbHVlOiBzdHJpbmcgPSBkYXRhWzBdO1xuICAgICAgY29uc3QgWUF4aXNSZWFkaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IGFsbFNlcmllcyA9IHRoaXMuZWNoYXJ0c0luc3RhbmNlPy5nZXRPcHRpb24oKVsnc2VyaWVzJ10gYXMgQ3VzdG9tU2VyaWVzT3B0aW9uc1tdO1xuXG4gICAgICBjb25zdCBhbGxEYXRhUG9pbnRTZXJpZXMgPSBhbGxTZXJpZXMuZmlsdGVyKFxuICAgICAgICBzZXJpZXMgPT5cbiAgICAgICAgICBzZXJpZXNbJ3R5cGVPZlNlcmllcyddICE9PSAnYWxhcm0nICYmXG4gICAgICAgICAgc2VyaWVzWyd0eXBlT2ZTZXJpZXMnXSAhPT0gJ2V2ZW50JyAmJlxuICAgICAgICAgIHNlcmllc1sndHlwZU9mU2VyaWVzJ10gIT09ICdmYWtlJ1xuICAgICAgKTtcblxuICAgICAgYWxsRGF0YVBvaW50U2VyaWVzLmZvckVhY2goKHNlcmllczogQ3VzdG9tU2VyaWVzT3B0aW9ucykgPT4ge1xuICAgICAgICBsZXQgdmFsdWU6IHN0cmluZztcbiAgICAgICAgY29uc3QgaWQgPSBzZXJpZXNbJ2lkJ10gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoaWQuZW5kc1dpdGgoJy9taW4nKSkge1xuICAgICAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5maW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChcbiAgICAgICAgICAgIHNlcmllc1snZGF0YSddIGFzIFNlcmllc1ZhbHVlW10sXG4gICAgICAgICAgICBYQXhpc1ZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIW1pblZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG1heFNlcmllcyA9IGFsbERhdGFQb2ludFNlcmllcy5maW5kKHMgPT4gc1snaWQnXSA9PT0gaWQucmVwbGFjZSgnL21pbicsICcvbWF4JykpO1xuICAgICAgICAgIGlmICghbWF4U2VyaWVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5maW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChcbiAgICAgICAgICAgIG1heFNlcmllc1snZGF0YSddIGFzIFNlcmllc1ZhbHVlW10sXG4gICAgICAgICAgICBYQXhpc1ZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF4VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWUgPVxuICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBzZXBhcmF0b3ItdG9wIHAtdC04IHAtYi04XCI+YCArXG4gICAgICAgICAgICBgPGxhYmVsIGNsYXNzPVwidGV4dC0xMiBtLXItOCBtLWItMFwiPiR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obWluVmFsdWVbMF0pfTwvbGFiZWw+YCArXG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cIm0tbC1hdXRvIHRleHQtMTJcIiA+JHttaW5WYWx1ZVsxXX0g4oCUICR7bWF4VmFsdWVbMV19YCArXG4gICAgICAgICAgICAoc2VyaWVzWydkYXRhcG9pbnRVbml0J10gPyBgICR7c2VyaWVzWydkYXRhcG9pbnRVbml0J119YCA6ICcnKSArXG4gICAgICAgICAgICBgPC9kaXY+PC9kaXY+YDtcbiAgICAgICAgfSBlbHNlIGlmIChpZC5lbmRzV2l0aCgnL21heCcpKSB7XG4gICAgICAgICAgLy8gZG8gbm90aGluZywgdmFsdWUgaXMgaGFuZGxlZCAgaW4gJ21pbicgY2FzZVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzZXJpZXNWYWx1ZSA9IHRoaXMuZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoXG4gICAgICAgICAgICBzZXJpZXNbJ2RhdGEnXSBhcyBTZXJpZXNWYWx1ZVtdLFxuICAgICAgICAgICAgWEF4aXNWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFzZXJpZXNWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9XG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHNlcGFyYXRvci10b3AgcC10LTggcC1iLThcIj5gICtcbiAgICAgICAgICAgIGA8bGFiZWwgY2xhc3M9XCJ0ZXh0LTEyIG0tci04IG0tYi0wXCI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZXJpZXNWYWx1ZVswXSl9PC9sYWJlbD5gICtcbiAgICAgICAgICAgIGA8ZGl2IGNsYXNzPVwibS1sLWF1dG8gdGV4dC0xMlwiID4ke3Nlcmllc1ZhbHVlWzFdPy50b1N0cmluZygpfWAgK1xuICAgICAgICAgICAgKHNlcmllc1snZGF0YXBvaW50VW5pdCddID8gYCAke3Nlcmllc1snZGF0YXBvaW50VW5pdCddfWAgOiAnJykgK1xuICAgICAgICAgICAgYDwvZGl2PjwvZGl2PmA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtU3R5bGUgPSBzZXJpZXNbJ2l0ZW1TdHlsZSddIGFzIHsgY29sb3I6IHN0cmluZyB9O1xuXG4gICAgICAgIFlBeGlzUmVhZGluZ3MucHVzaChcbiAgICAgICAgICBgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHAtYi04XCI+PHNwYW4gY2xhc3M9J2RsdC1jOHktaWNvbi1jaXJjbGUgbS1yLTQnIHN0eWxlPSdjb2xvcjogJHtpdGVtU3R5bGUuY29sb3J9Jz48L3NwYW4+YCArIC8vIGNvbG9yIGNpcmNsZVxuICAgICAgICAgICAgYDxzdHJvbmc+JHtzZXJpZXNbJ2RhdGFwb2ludExhYmVsJ119IDwvc3Ryb25nPjwvZGl2PmAgKyAvLyBuYW1lXG4gICAgICAgICAgICBgJHt2YWx1ZX1gIC8vIHNpbmdsZSB2YWx1ZSBvciBtaW4tbWF4IHJhbmdlXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGA8ZGl2IHN0eWxlPVwid2lkdGg6ICR7dGhpcy5UT09MVElQX1dJRFRIfXB4XCI+JHtZQXhpc1JlYWRpbmdzLmpvaW4oJycpfTwvZGl2PmA7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFZhbHVlRm9yRXhhY3RPckVhcmxpZXJUaW1lc3RhbXAoXG4gICAgdmFsdWVzOiBTZXJpZXNWYWx1ZVtdLFxuICAgIHRpbWVzdGFtcFN0cmluZzogRGF0ZVN0cmluZ1xuICApOiBTZXJpZXNWYWx1ZSB8IG51bGwge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKHRpbWVzdGFtcFN0cmluZykudmFsdWVPZigpO1xuICAgIHJldHVybiB2YWx1ZXMucmVkdWNlKChhY2M6IFNlcmllc1ZhbHVlIHwgbnVsbCwgY3VycjogU2VyaWVzVmFsdWUpID0+IHtcbiAgICAgIGlmIChuZXcgRGF0ZShjdXJyWzBdKS52YWx1ZU9mKCkgPD0gdGltZXN0YW1wKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhY2MgPT09IG51bGwgfHxcbiAgICAgICAgICBNYXRoLmFicyhuZXcgRGF0ZShjdXJyWzBdKS52YWx1ZU9mKCkgLSB0aW1lc3RhbXApIDxcbiAgICAgICAgICAgIE1hdGguYWJzKG5ldyBEYXRlKGFjY1swXSkudmFsdWVPZigpIC0gdGltZXN0YW1wKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gY3VycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBudWxsKTtcbiAgfVxufVxuIl19
881
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNoYXJ0cy1vcHRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY2hhcnQvc2VydmljZXMvZWNoYXJ0cy1vcHRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLFdBQVcsRUFBZ0MsTUFBTSxhQUFhLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXRELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRixPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBYXZELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQztBQUdqQyxNQUFNLE9BQU8scUJBQXFCO0lBS2hDLFlBQ1UsUUFBa0IsRUFDbEIsWUFBMEIsRUFDMUIsaUJBQW9DLEVBQ3BDLGdCQUF5QyxFQUN6QyxpQkFBMkMsRUFDM0MsU0FBMkIsRUFDM0IsTUFBYztRQU5kLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLHNC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LENBQUM7UUFDYixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDOytHQTNoQ1UscUJBQXFCO21IQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHR5cGUgeyBFQ2hhcnRzT3B0aW9uLCBTZXJpZXNPcHRpb24gfSBmcm9tICdlY2hhcnRzJztcbmltcG9ydCB7IEVDaGFydHMgfSBmcm9tICdlY2hhcnRzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludENoYXJ0UmVuZGVyVHlwZSxcbiAgRHBXaXRoVmFsdWVzLFxuICBEYXRlU3RyaW5nLFxuICBEcFZhbHVlc0l0ZW0sXG4gIE1hcmtMaW5lRGF0YSxcbiAgTWFya1BvaW50RGF0YSxcbiAgU2VyaWVzRGF0YXBvaW50SW5mbyxcbiAgU2VyaWVzVmFsdWUsXG4gIEdyYXBoRGlzcGxheU9wdGlvbnNcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFlBeGlzU2VydmljZSB9IGZyb20gJy4veS1heGlzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhcnRUeXBlc1NlcnZpY2UgfSBmcm9tICcuL2NoYXJ0LXR5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHR5cGUgeyBDYWxsYmFja0RhdGFQYXJhbXMsIFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFjayB9IGZyb20gJ2VjaGFydHMvdHlwZXMvc3JjL3V0aWwvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBUb3BMZXZlbEZvcm1hdHRlclBhcmFtcyB9IGZyb20gJ2VjaGFydHMvdHlwZXMvc3JjL2NvbXBvbmVudC90b29sdGlwL1Rvb2x0aXBNb2RlbCc7XG5pbXBvcnQgeyBBbGFybVN0YXR1cywgSUFsYXJtLCBJRXZlbnQsIFNldmVyaXR5VHlwZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IElDT05TX01BUCB9IGZyb20gJy4uL21vZGVscy9zdmctaWNvbnMubW9kZWwnO1xuaW1wb3J0IHsgQ3VzdG9tU2VyaWVzT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9jaGFydC5tb2RlbCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWxhcm1TZXZlcml0eVRvSWNvblBpcGUsIEFsYXJtU2V2ZXJpdHlUb0xhYmVsUGlwZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm1zJztcbmltcG9ydCB7IEludGVydmFsLCBJTlRFUlZBTFMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbnR5cGUgVG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2sgPSAoXG4gIHBvaW50OiBbbnVtYmVyLCBudW1iZXJdLCAvLyBwb3NpdGlvbiBvZiBtb3VzZSBpbiBjaGFydCBbWCwgWV07IDAsMCBpcyB0b3AgbGVmdCBjb3JuZXJcbiAgXzogYW55LCAvLyB0b29sdGlwIGRhdGFcbiAgZG9tOiBIVE1MRWxlbWVudCB8IHVua25vd24sIC8vIHRvb2x0aXAgZWxlbWVudFxuICBfXzogYW55LCAvLyB2YWxpZCBvbmx5IHdoZW4gbW91c2UgaXMgb24gZ3JhcGhpYyBlbGVtZW50czsgbm90IHJlbGV2YW50IGluIG91ciBjYXNlXG4gIHNpemU6IHtcbiAgICBjb250ZW50U2l6ZTogW251bWJlciwgbnVtYmVyXTsgLy8gc2l6ZSBvZiB0b29sdGlwXG4gICAgdmlld1NpemU6IFtudW1iZXIsIG51bWJlcl07IC8vIHNpemUgb2YgdGhlIGNoYXJ0XG4gIH0gfCBudWxsIC8vIHNpemUgb2YgY2hhcnRcbikgPT4gUGFydGlhbDxSZWNvcmQ8J3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcsIG51bWJlcj4+O1xuXG5jb25zdCBJTkRFWF9IVE1MID0gJy9pbmRleC5odG1sJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVjaGFydHNPcHRpb25zU2VydmljZSB7XG4gIGVjaGFydHNJbnN0YW5jZTogRUNoYXJ0cyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBUT09MVElQX1dJRFRIID0gMzAwO1xuICBwcml2YXRlIHRvb2x0aXBQb3NpdGlvbkNhbGxiYWNrOiBUb29sdGlwUG9zaXRpb25DYWxsYmFjayB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIHlBeGlzU2VydmljZTogWUF4aXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhcnRUeXBlc1NlcnZpY2U6IENoYXJ0VHlwZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2V2ZXJpdHlJY29uUGlwZTogQWxhcm1TZXZlcml0eVRvSWNvblBpcGUsXG4gICAgcHJpdmF0ZSBzZXZlcml0eUxhYmVsUGlwZTogQWxhcm1TZXZlcml0eVRvTGFiZWxQaXBlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7fVxuXG4gIGdldENoYXJ0T3B0aW9ucyhcbiAgICBkYXRhcG9pbnRzV2l0aFZhbHVlczogRHBXaXRoVmFsdWVzW10sXG4gICAgdGltZVJhbmdlOiB7IGRhdGVGcm9tOiBzdHJpbmc7IGRhdGVUbzogc3RyaW5nOyBpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ10gfSxcbiAgICBzaG93U3BsaXRMaW5lczogeyBZQXhpczogYm9vbGVhbjsgWEF4aXM6IGJvb2xlYW4gfSxcbiAgICBldmVudHM6IElFdmVudFtdLFxuICAgIGFsYXJtczogSUFsYXJtW10sXG4gICAgZGlzcGxheU9wdGlvbnM6IEdyYXBoRGlzcGxheU9wdGlvbnMsXG4gICAgc2VsZWN0ZWRUaW1lUmFuZ2U/OiB7IGRhdGVGcm9tOiBzdHJpbmc7IGRhdGVUbzogc3RyaW5nOyBpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ10gfSB8IG51bGwsXG4gICAgYWdncmVnYXRlZERhdGFwb2ludHM/OiBEcFdpdGhWYWx1ZXNbXSxcbiAgICBzbGlkZXJab29tVXNlZCA9IGZhbHNlXG4gICk6IEVDaGFydHNPcHRpb24ge1xuICAgIGNvbnN0IHlBeGlzID0gdGhpcy55QXhpc1NlcnZpY2UuZ2V0WUF4aXMoZGF0YXBvaW50c1dpdGhWYWx1ZXMsIHtcbiAgICAgIHNob3dTcGxpdExpbmVzOiBzaG93U3BsaXRMaW5lcy5ZQXhpcyxcbiAgICAgIG1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzOiBkaXNwbGF5T3B0aW9ucy5tZXJnZU1hdGNoaW5nRGF0YXBvaW50cyxcbiAgICAgIGZvcmNlTWVyZ2VEYXRhcG9pbnRzOiBkaXNwbGF5T3B0aW9ucy5mb3JjZU1lcmdlRGF0YXBvaW50cyxcbiAgICAgIHNob3dMYWJlbEFuZFVuaXQ6IGRpc3BsYXlPcHRpb25zLnNob3dMYWJlbEFuZFVuaXRcbiAgICB9KTtcbiAgICBjb25zdCBsZWZ0QXhpcyA9IEFycmF5LmlzQXJyYXkoeUF4aXMpID8geUF4aXMuZmlsdGVyKHl4ID0+IHl4LnBvc2l0aW9uID09PSAnbGVmdCcpIDogW107XG4gICAgY29uc3QgZ3JpZExlZnQgPSBsZWZ0QXhpcy5sZW5ndGggPyBsZWZ0QXhpcy5sZW5ndGggKiB0aGlzLnlBeGlzU2VydmljZS5ZX0FYSVNfT0ZGU0VUIDogMzI7XG4gICAgY29uc3QgcmlnaHRBeGlzID0gQXJyYXkuaXNBcnJheSh5QXhpcykgPyB5QXhpcy5maWx0ZXIoeXggPT4geXgucG9zaXRpb24gPT09ICdyaWdodCcpIDogW107XG4gICAgY29uc3QgZ3JpZFJpZ2h0ID0gcmlnaHRBeGlzLmxlbmd0aCA/IHJpZ2h0QXhpcy5sZW5ndGggKiB0aGlzLnlBeGlzU2VydmljZS5ZX0FYSVNfT0ZGU0VUIDogMTY7XG4gICAgbGV0IGludGVydmFsSW5NcyA9IHRoaXMuY2FsY3VsYXRlRXh0ZW5kZWRJbnRlcnZhbEluTXMoXG4gICAgICBzZWxlY3RlZFRpbWVSYW5nZT8uaW50ZXJ2YWwgfHwgdGltZVJhbmdlLmludGVydmFsIHx8ICdob3VycycsXG4gICAgICBzZWxlY3RlZFRpbWVSYW5nZSB8fCB0aW1lUmFuZ2VcbiAgICApO1xuICAgIGlmIChzbGlkZXJab29tVXNlZCkge1xuICAgICAgaW50ZXJ2YWxJbk1zID0gdGhpcy5jYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5Ncyh0aW1lUmFuZ2UuaW50ZXJ2YWwgfHwgJ2hvdXJzJywgdGltZVJhbmdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGdyaWQ6IHtcbiAgICAgICAgY29udGFpbkxhYmVsOiBmYWxzZSwgLy8gYXhpcyBsYWJlbHMgYXJlIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgdG8gY2FsY3VsYXRlIGdyYXBoIGdyaWRcbiAgICAgICAgbGVmdDogZ3JpZExlZnQsXG4gICAgICAgIHRvcDogMTYsXG4gICAgICAgIHJpZ2h0OiBncmlkUmlnaHQsXG4gICAgICAgIGJvdHRvbTogNjhcbiAgICAgIH0sXG4gICAgICBkYXRhWm9vbTogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2luc2lkZScsXG4gICAgICAgICAgLy8gVE9ETzogdXNlICdub25lJyBvbmx5IHdoZW4gdGhpcyBidWcgaXMgZml4ZWQgaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS9lY2hhcnRzL2lzc3Vlcy8xNzg1OFxuICAgICAgICAgIGZpbHRlck1vZGU6IGRhdGFwb2ludHNXaXRoVmFsdWVzLnNvbWUoZHAgPT4gZHAubGluZVR5cGUgPT09ICdiYXJzJykgPyAnZmlsdGVyJyA6ICdub25lJyxcbiAgICAgICAgICB6b29tT25Nb3VzZVdoZWVsOiB0cnVlLFxuICAgICAgICAgIHN0YXJ0VmFsdWU6IHNlbGVjdGVkVGltZVJhbmdlXG4gICAgICAgICAgICA/IHNlbGVjdGVkVGltZVJhbmdlLmRhdGVGcm9tLnZhbHVlT2YoKVxuICAgICAgICAgICAgOiB0aW1lUmFuZ2UuZGF0ZUZyb20udmFsdWVPZigpLFxuICAgICAgICAgIGVuZFZhbHVlOiBzZWxlY3RlZFRpbWVSYW5nZVxuICAgICAgICAgICAgPyBzZWxlY3RlZFRpbWVSYW5nZS5kYXRlVG8udmFsdWVPZigpXG4gICAgICAgICAgICA6IHRpbWVSYW5nZS5kYXRlVG8udmFsdWVPZigpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnc2xpZGVyJyxcbiAgICAgICAgICBzaG93OiBkaXNwbGF5T3B0aW9ucy5zaG93U2xpZGVyLFxuICAgICAgICAgIGJvdHRvbTogOCxcbiAgICAgICAgICByZWFsdGltZTogZmFsc2VcbiAgICAgICAgfVxuICAgICAgXSwgLy8gb24gcmVhbHRpbWUsICdub25lJyB3aWxsIGNhdXNlIGV4dGVuZGluZyBjaGFydCBsaW5lIHRvIGxlZnQgZWRnZSBvZiB0aGUgY2hhcnRcbiAgICAgIGFuaW1hdGlvbjogZmFsc2UsXG4gICAgICB0b29sYm94OiB7XG4gICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgIGl0ZW1TaXplOiAwLCAvLyB0b29sYm94IGlzIG5lZWRlZCBmb3Igem9vbWluZyBpbiBhY3Rpb24sIGJ1dCB3ZSBwcm92aWRlIG91ciBvd24gYnV0dG9uc1xuICAgICAgICBmZWF0dXJlOiB7XG4gICAgICAgICAgZGF0YVpvb206IHtcbiAgICAgICAgICAgIHlBeGlzSW5kZXg6ICdub25lJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgdHJpZ2dlcjogJ2F4aXMnLFxuICAgICAgICBheGlzUG9pbnRlcjoge1xuICAgICAgICAgIHR5cGU6ICdjcm9zcycsXG4gICAgICAgICAgc25hcDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSknLFxuICAgICAgICBmb3JtYXR0ZXI6IHRoaXMuZ2V0VG9vbHRpcEZvcm1hdHRlcigpLFxuICAgICAgICBhcHBlbmRUb0JvZHk6IHRydWUsXG4gICAgICAgIHBvc2l0aW9uOiB0aGlzLnRvb2x0aXBQb3NpdGlvbigpLFxuICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IDBcbiAgICAgIH0sXG4gICAgICBsZWdlbmQ6IHtcbiAgICAgICAgc2hvdzogZmFsc2VcbiAgICAgIH0sXG4gICAgICB4QXhpczoge1xuICAgICAgICBtaW46IG5ldyBEYXRlKHRpbWVSYW5nZS5kYXRlRnJvbSkudmFsdWVPZigpIC0gaW50ZXJ2YWxJbk1zLFxuICAgICAgICBtYXg6IHRpbWVSYW5nZS5kYXRlVG8sXG4gICAgICAgIHR5cGU6ICd0aW1lJyxcbiAgICAgICAgYW5pbWF0aW9uOiBmYWxzZSxcbiAgICAgICAgYXhpc1BvaW50ZXI6IHtcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgc2hvdzogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGF4aXNMaW5lOiB7XG4gICAgICAgICAgLy8gYWxpZ24gWCBheGlzIHRvIDAgb2YgWSBheGlzIG9mIGRhdGFwb2ludCB3aXRoIGxpbmVUeXBlICdiYXJzJ1xuICAgICAgICAgIG9uWmVyb0F4aXNJbmRleDogZGF0YXBvaW50c1dpdGhWYWx1ZXMuZmluZEluZGV4KGRwID0+IGRwLmxpbmVUeXBlID09PSAnYmFycycpXG4gICAgICAgIH0sXG4gICAgICAgIGF4aXNMYWJlbDoge1xuICAgICAgICAgIGhpZGVPdmVybGFwOiB0cnVlLFxuICAgICAgICAgIGJvcmRlcldpZHRoOiAyLCAvLyBhcyB0aGVyZSBpcyBubyBtYXJnaW4gZm9yIGxhYmVscyBzcGFjaW5nLCB0cmFuc3BhcmVudCBib3JkZXIgaXMgYSB3b3JrYXJvdW5kXG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgICAgfSxcbiAgICAgICAgc3BsaXRMaW5lOiB7XG4gICAgICAgICAgc2hvdzogc2hvd1NwbGl0TGluZXMuWEF4aXMsXG4gICAgICAgICAgbGluZVN0eWxlOiB7IG9wYWNpdHk6IDAuOCwgdHlwZTogJ2Rhc2hlZCcsIHdpZHRoOiAyIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHlBeGlzLFxuICAgICAgc2VyaWVzOiBbXG4gICAgICAgIC4uLnRoaXMuZ2V0QWdncmVnYXRlZFNlcmllcyhhZ2dyZWdhdGVkRGF0YXBvaW50cyB8fCBbXSwgZGlzcGxheU9wdGlvbnMpLmZpbHRlcihcbiAgICAgICAgICBzZXJpZXMgPT4gc2VyaWVzICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSxcbiAgICAgICAgLi4udGhpcy5nZXRDaGFydFNlcmllcyhkYXRhcG9pbnRzV2l0aFZhbHVlcywgZXZlbnRzLCBhbGFybXMsIGRpc3BsYXlPcHRpb25zKVxuICAgICAgXVxuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVFeHRlbmRlZEludGVydmFsSW5NcyhpbnRlcnZhbDogSW50ZXJ2YWxbJ2lkJ10sIHNlbGVjdGVkVGltZVJhbmdlKTogbnVtYmVyIHtcbiAgICBsZXQgaW50ZXJ2YWxJbk1zID0gSU5URVJWQUxTLmZpbmQoaSA9PiBpLmlkID09PSBpbnRlcnZhbCkudGltZXNwYW5Jbk1zO1xuICAgIHN3aXRjaCAoaW50ZXJ2YWwpIHtcbiAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXMgKiA2MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIGludGVydmFsSW5NcyA9IElOVEVSVkFMUy5maW5kKGkgPT4gaS5pZCA9PT0gaW50ZXJ2YWwpLnRpbWVzcGFuSW5NcyAqIDI0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RheXMnOlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXMgKiAyODtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgIGludGVydmFsSW5NcyA9IElOVEVSVkFMUy5maW5kKGkgPT4gaS5pZCA9PT0gaW50ZXJ2YWwpLnRpbWVzcGFuSW5NcyAqIDEyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRocyc6XG4gICAgICAgIGludGVydmFsSW5NcyA9IElOVEVSVkFMUy5maW5kKGkgPT4gaS5pZCA9PT0gaW50ZXJ2YWwpLnRpbWVzcGFuSW5NcyAqIDEyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIGludGVydmFsSW5NcyA9XG4gICAgICAgICAgKG5ldyBEYXRlKHNlbGVjdGVkVGltZVJhbmdlLmRhdGVUbykudmFsdWVPZigpIC1cbiAgICAgICAgICAgIG5ldyBEYXRlKHNlbGVjdGVkVGltZVJhbmdlLmRhdGVGcm9tKS52YWx1ZU9mKCkpICpcbiAgICAgICAgICAxMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnRlcnZhbEluTXMgPSBJTlRFUlZBTFMuZmluZChpID0+IGkuaWQgPT09IGludGVydmFsKS50aW1lc3BhbkluTXM7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gaW50ZXJ2YWxJbk1zO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlZFNlcmllcyhcbiAgICBhZ2dyZWdhdGVkRGF0YXBvaW50czogRHBXaXRoVmFsdWVzW10sXG4gICAgZGlzcGxheU9wdGlvbnM6IEdyYXBoRGlzcGxheU9wdGlvbnNcbiAgKTogU2VyaWVzT3B0aW9uW10ge1xuICAgIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBbXTtcbiAgICBhZ2dyZWdhdGVkRGF0YXBvaW50cy5mb3JFYWNoKChkcCwgaWR4KSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJUeXBlOiBEYXRhcG9pbnRDaGFydFJlbmRlclR5cGUgPSBkcC5yZW5kZXJUeXBlIHx8ICdtaW4nO1xuICAgICAgaWYgKHJlbmRlclR5cGUgPT09ICdhcmVhJykge1xuICAgICAgICBzZXJpZXMucHVzaCh0aGlzLmdldFNpbmdsZVNlcmllcyhkcCwgJ21pbicsIGlkeCwgdHJ1ZSwgZGlzcGxheU9wdGlvbnMsICdhZ2dyJykpO1xuICAgICAgICBzZXJpZXMucHVzaCh0aGlzLmdldFNpbmdsZVNlcmllcyhkcCwgJ21heCcsIGlkeCwgdHJ1ZSwgZGlzcGxheU9wdGlvbnMsICdhZ2dyJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VyaWVzLnB1c2godGhpcy5nZXRTaW5nbGVTZXJpZXMoZHAsIHJlbmRlclR5cGUsIGlkeCwgZmFsc2UsIGRpc3BsYXlPcHRpb25zLCAnYWdncicpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHNlcmllcy5mb3JFYWNoKChzOiBhbnkpID0+IHtcbiAgICAgIHMuZGF0YXBvaW50SWQgPSAnYWdncmVnYXRlZCc7XG4gICAgICBzLnR5cGVPZlNlcmllcyA9ICdmYWtlJztcbiAgICAgIHMuaXRlbVN0eWxlID0ge1xuICAgICAgICAuLi5zLml0ZW1TdHlsZSxcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfTtcbiAgICAgIHMubGluZVN0eWxlID0ge1xuICAgICAgICAuLi5zLmxpbmVTdHlsZSxcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiBbc2VyaWVzWzBdXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgc2VyaWVzIGZvciBhbGFybXMgYW5kIGV2ZW50cy5cbiAgICogQHBhcmFtIGRwIC0gVGhlIGRhdGEgcG9pbnQuXG4gICAqIEBwYXJhbSByZW5kZXJUeXBlIC0gVGhlIHJlbmRlciB0eXBlLlxuICAgKiBAcGFyYW0gaXNNaW5NYXhDaGFydCAtIElmIHRoZSBjaGFydCBpcyBtaW4gbWF4IGNoYXJ0LlxuICAgKiBAcGFyYW0gaXRlbXMgLSBBbGwgYWxhcm1zIG9yIGV2ZW50cyB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBjaGFydC5cbiAgICogQHBhcmFtIGl0ZW1UeXBlIC0gVGhlIGl0ZW0gdHlwZS5cbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBkZXZpY2VcbiAgICovXG4gIGdldEFsYXJtT3JFdmVudFNlcmllcyhcbiAgICBkcDogRHBXaXRoVmFsdWVzLFxuICAgIHJlbmRlclR5cGU6IERhdGFwb2ludENoYXJ0UmVuZGVyVHlwZSxcbiAgICBpc01pbk1heENoYXJ0ID0gZmFsc2UsXG4gICAgaXRlbXM6IElBbGFybVtdIHwgSUV2ZW50W10gPSBbXSxcbiAgICBpdGVtVHlwZTogJ2FsYXJtJyB8ICdldmVudCcgPSAnYWxhcm0nLFxuICAgIGRpc3BsYXlPcHRpb25zOiBHcmFwaERpc3BsYXlPcHRpb25zID0ge1xuICAgICAgZGlzcGxheU1hcmtlZExpbmU6IHRydWUsXG4gICAgICBkaXNwbGF5TWFya2VkUG9pbnQ6IHRydWUsXG4gICAgICBtZXJnZU1hdGNoaW5nRGF0YXBvaW50czogZmFsc2UsXG4gICAgICBmb3JjZU1lcmdlRGF0YXBvaW50czogZmFsc2UsXG4gICAgICBzaG93TGFiZWxBbmRVbml0OiBmYWxzZSxcbiAgICAgIHNob3dTbGlkZXI6IGZhbHNlXG4gICAgfSxcbiAgICBpZD86IHN0cmluZyB8IG51bWJlcixcbiAgICBpZHg/OiBudW1iZXIsXG4gICAgcmVhbHRpbWU/OiBib29sZWFuXG4gICk6IEN1c3RvbVNlcmllc09wdGlvbnNbXSB7XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoIWRpc3BsYXlPcHRpb25zLmRpc3BsYXlNYXJrZWRMaW5lICYmICFkaXNwbGF5T3B0aW9ucy5kaXNwbGF5TWFya2VkUG9pbnQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvL2ZpbHRlciBpdGVtcyB0aGF0IGFyZSBub3QgX19oaWRkZW5cbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zOiBJQWxhcm1bXSB8IElFdmVudFtdID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW1bJ19faGlkZGVuJ10pO1xuICAgIGNvbnN0IGl0ZW1zQnlUeXBlID0gdGhpcy5ncm91cEJ5VHlwZShmaWx0ZXJlZEl0ZW1zLCAndHlwZScpO1xuICAgIGNvbnN0IGlzQWxhcm0gPSBpdGVtVHlwZSA9PT0gJ2FsYXJtJztcblxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpdGVtc0J5VHlwZSkuZmxhdE1hcChcbiAgICAgIChbdHlwZSwgaXRlbXNPZlR5cGVdOiBbc3RyaW5nLCAoSUFsYXJtIHwgSUV2ZW50KVtdXSkgPT4ge1xuICAgICAgICAvLyBNYWluIHNlcmllcyBkYXRhXG4gICAgICAgIGNvbnN0IG1haW5EYXRhID0gaXRlbXNPZlR5cGUubWFwKGl0ZW0gPT4gW2l0ZW0uY3JlYXRpb25UaW1lLCBudWxsLCAnbWFya0xpbmVGbGFnJ10pO1xuICAgICAgICAvLyBJcyBhIHNwZWNpZmljIGRhdGFwb2ludCB0ZW1wbGF0ZSBzZWxlY3RlZCBmb3IgdGhpcyBhbGFybS9ldmVudCB0eXBlP1xuICAgICAgICBsZXQgaXNEcFRlbXBsYXRlU2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBNYXJrUG9pbnQgZGF0YVxuICAgICAgICBjb25zdCBtYXJrUG9pbnREYXRhID0gaXRlbXNPZlR5cGUucmVkdWNlPE1hcmtQb2ludERhdGFbXT4oKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICAgIGlzRHBUZW1wbGF0ZVNlbGVjdGVkID1cbiAgICAgICAgICAgIGl0ZW1bJ3NlbGVjdGVkRGF0YXBvaW50J10gJiZcbiAgICAgICAgICAgIGRwWydfX3RhcmdldCddICYmXG4gICAgICAgICAgICBpdGVtWydzZWxlY3RlZERhdGFwb2ludCddWydmcmFnbWVudCddID09PSBkcFsnZnJhZ21lbnQnXSAmJlxuICAgICAgICAgICAgaXRlbVsnc2VsZWN0ZWREYXRhcG9pbnQnXVsnc2VyaWVzJ10gPT09IGRwWydzZXJpZXMnXSAmJlxuICAgICAgICAgICAgaXRlbVsnc2VsZWN0ZWREYXRhcG9pbnQnXVsndGFyZ2V0J10gPT09IGRwWydfX3RhcmdldCddWydpZCddO1xuICAgICAgICAgIGlmIChkcC5fX3RhcmdldD8uaWQgPT09IGl0ZW0uc291cmNlLmlkKSB7XG4gICAgICAgICAgICBjb25zdCBpc0NsZWFyZWQgPSBpc0FsYXJtICYmIGl0ZW0uc3RhdHVzID09PSBBbGFybVN0YXR1cy5DTEVBUkVEO1xuICAgICAgICAgICAgY29uc3QgaXNFdmVudCA9ICFpc0FsYXJtO1xuICAgICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQodGhpcy5jcmVhdGVNYXJrUG9pbnQoaXRlbSwgZHAsIGlzQ2xlYXJlZCwgaXNFdmVudCwgcmVhbHRpbWUpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFpdGVtLmNyZWF0aW9uVGltZSkge1xuICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb29yZDogW2l0ZW0uY3JlYXRpb25UaW1lLCBudWxsXSxcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGl0ZW1bJ2NvbG9yJ10gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBDb25zdHJ1Y3Qgc2VyaWVzIHdpdGggbWFya1BvaW50XG4gICAgICAgIGNvbnN0IHNlcmllc1dpdGhNYXJrUG9pbnQgPSB7XG4gICAgICAgICAgaWQ6IGAke3R5cGV9LyR7ZHAuX190YXJnZXQ/LmlkfSske2lkID8gaWQgOiAnJ30tbWFya1BvaW50YCxcbiAgICAgICAgICBuYW1lOiBgJHt0eXBlfS1tYXJrUG9pbnRgLFxuICAgICAgICAgIHR5cGVPZlNlcmllczogaXRlbVR5cGUsXG4gICAgICAgICAgZGF0YTogbWFpbkRhdGEsXG4gICAgICAgICAgaXNEcFRlbXBsYXRlU2VsZWN0ZWQsXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxuICAgICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgICBtYXJrUG9pbnQ6IHtcbiAgICAgICAgICAgIHNob3dTeW1ib2w6IHRydWUsXG4gICAgICAgICAgICBzeW1ib2xLZWVwQXNwZWN0OiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogbWFya1BvaW50RGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeUF4aXNJbmRleDogaWR4LFxuICAgICAgICAgIC4uLnRoaXMuY2hhcnRUeXBlc1NlcnZpY2UuZ2V0U2VyaWVzT3B0aW9ucyhkcCwgaXNNaW5NYXhDaGFydCwgcmVuZGVyVHlwZSlcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtYXJrTGluZURhdGEgPSB0aGlzLmNyZWF0ZU1hcmtMaW5lKGl0ZW1zT2ZUeXBlLCBpdGVtVHlwZSk7XG5cbiAgICAgICAgLy8gQ29uc3RydWN0IHNlcmllcyB3aXRoIG1hcmtMaW5lXG4gICAgICAgIGNvbnN0IHNlcmllc1dpdGhNYXJrTGluZSA9IHtcbiAgICAgICAgICBpZDogYCR7dHlwZX0vJHtkcC5fX3RhcmdldD8uaWR9KyR7aWQgPyBpZCA6ICcnfS1tYXJrTGluZWAsXG4gICAgICAgICAgbmFtZTogYCR7dHlwZX0tbWFya0xpbmVgLFxuICAgICAgICAgIHR5cGVPZlNlcmllczogaXRlbVR5cGUsXG4gICAgICAgICAgaXNEcFRlbXBsYXRlU2VsZWN0ZWQsXG4gICAgICAgICAgZGF0YTogbWFpbkRhdGEsXG4gICAgICAgICAgbWFya0xpbmU6IHtcbiAgICAgICAgICAgIHNob3dTeW1ib2w6IGZhbHNlLFxuICAgICAgICAgICAgc3ltYm9sOiBbJ25vbmUnLCAnbm9uZSddLCAvLyBubyBzeW1ib2wgYXQgdGhlIHN0YXJ0L2VuZCBvZiB0aGUgbGluZVxuICAgICAgICAgICAgZGF0YTogbWFya0xpbmVEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi50aGlzLmNoYXJ0VHlwZXNTZXJ2aWNlLmdldFNlcmllc09wdGlvbnMoZHAsIGlzTWluTWF4Q2hhcnQsIHJlbmRlclR5cGUpXG4gICAgICAgIH07XG5cbiAgICAgICAgLy9kZXBlbmRpbmcgb24gdGhlIG9wdGlvbnMgcmV0dXJuIG9ubHkgdGhlIHJlcXVpcmVkIHNlcmllc1xuICAgICAgICBpZiAoZGlzcGxheU9wdGlvbnMuZGlzcGxheU1hcmtlZExpbmUgJiYgZGlzcGxheU9wdGlvbnMuZGlzcGxheU1hcmtlZFBvaW50KSB7XG4gICAgICAgICAgcmV0dXJuIFtzZXJpZXNXaXRoTWFya0xpbmUsIHNlcmllc1dpdGhNYXJrUG9pbnRdO1xuICAgICAgICB9IGVsc2UgaWYgKGRpc3BsYXlPcHRpb25zLmRpc3BsYXlNYXJrZWRMaW5lKSB7XG4gICAgICAgICAgcmV0dXJuIFtzZXJpZXNXaXRoTWFya0xpbmVdO1xuICAgICAgICB9IGVsc2UgaWYgKGRpc3BsYXlPcHRpb25zLmRpc3BsYXlNYXJrZWRQb2ludCkge1xuICAgICAgICAgIHJldHVybiBbc2VyaWVzV2l0aE1hcmtQb2ludF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApIGFzIEN1c3RvbVNlcmllc09wdGlvbnNbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0b29sdGlwIGZvcm1hdHRlciBmb3IgYWxhcm1zIGFuZCBldmVudHMuXG4gICAqIEBwYXJhbSB0b29sdGlwUGFyYW1zIC0gVGhlIHRvb2x0aXAgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGRhdGEuXG4gICAqIEBwYXJhbSBhbGxFdmVudHMgLSBBbGwgZXZlbnRzLlxuICAgKiBAcGFyYW0gYWxsQWxhcm1zIC0gQWxsIGFsYXJtcy5cbiAgICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBzdHJpbmcgZm9yIHRoZSB0b29sdGlwLlxuICAgKi9cbiAgZ2V0VG9vbHRpcEZvcm1hdHRlckZvckFsYXJtQW5kRXZlbnRzKFxuICAgIHRvb2x0aXBQYXJhbXM6IENhbGxiYWNrRGF0YVBhcmFtcyxcbiAgICBwYXJhbXM6IHsgZGF0YTogeyBpdGVtVHlwZTogc3RyaW5nIH0gfSxcbiAgICBhbGxFdmVudHM6IElFdmVudFtdLFxuICAgIGFsbEFsYXJtczogSUFsYXJtW11cbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodG9vbHRpcFBhcmFtcykpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgWEF4aXNWYWx1ZTogc3RyaW5nID0gdG9vbHRpcFBhcmFtc1swXS5kYXRhWzBdO1xuICAgIGNvbnN0IFlBeGlzUmVhZGluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgYWxsU2VyaWVzID0gdGhpcy5lY2hhcnRzSW5zdGFuY2U/LmdldE9wdGlvbigpWydzZXJpZXMnXSBhcyBDdXN0b21TZXJpZXNPcHRpb25zW107XG5cbiAgICAvLyBmaWx0ZXIgb3V0IGFsYXJtIGFuZCBldmVudCBzZXJpZXNcbiAgICBjb25zdCBhbGxEYXRhUG9pbnRTZXJpZXMgPSBhbGxTZXJpZXMuZmlsdGVyKFxuICAgICAgc2VyaWVzID0+IHNlcmllc1sndHlwZU9mU2VyaWVzJ10gIT09ICdhbGFybScgJiYgc2VyaWVzWyd0eXBlT2ZTZXJpZXMnXSAhPT0gJ2V2ZW50J1xuICAgICk7XG5cbiAgICB0aGlzLnByb2Nlc3NTZXJpZXMoYWxsRGF0YVBvaW50U2VyaWVzLCBYQXhpc1ZhbHVlLCBZQXhpc1JlYWRpbmdzKTtcblxuICAgIC8vIGZpbmQgZXZlbnQgYW5kIGFsYXJtIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGhvdmVyZWQgbWFya2VkTGluZSBvciBtYXJrZWRQb2ludFxuICAgIGNvbnN0IGV2ZW50ID0gYWxsRXZlbnRzLmZpbmQoZSA9PiBlLnR5cGUgPT09IHBhcmFtcy5kYXRhLml0ZW1UeXBlKTtcbiAgICBjb25zdCBhbGFybSA9IGFsbEFsYXJtcy5maW5kKGEgPT4gYS50eXBlID09PSBwYXJhbXMuZGF0YS5pdGVtVHlwZSk7XG5cbiAgICBsZXQgdmFsdWUgPSAnJztcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5wcm9jZXNzRXZlbnQoZXZlbnQsIFhBeGlzVmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChhbGFybSkge1xuICAgICAgdGhpcy5wcm9jZXNzQWxhcm0oYWxhcm0pLnRoZW4oYWxhcm1WYWwgPT4ge1xuICAgICAgICB2YWx1ZSA9IGFsYXJtVmFsO1xuICAgICAgICBZQXhpc1JlYWRpbmdzLnB1c2godmFsdWUpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lY2hhcnRzSW5zdGFuY2U/LmdldE9wdGlvbigpIGFzIEVDaGFydHNPcHRpb247XG4gICAgICAgIGlmICghb3B0aW9ucy50b29sdGlwIHx8ICFBcnJheS5pc0FycmF5KG9wdGlvbnMudG9vbHRpcCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBkYXRlZE9wdGlvbnM6IFBhcnRpYWw8U2VyaWVzT3B0aW9uPiA9IHtcbiAgICAgICAgICB0b29sdGlwOiBvcHRpb25zWyd0b29sdGlwJ11bMF1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIXVwZGF0ZWRPcHRpb25zLnRvb2x0aXApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlZE9wdGlvbnMudG9vbHRpcC5mb3JtYXR0ZXIgPSBgPGRpdiBzdHlsZT1cIndpZHRoOiAke3RoaXMuVE9PTFRJUF9XSURUSH1weFwiPiR7WUF4aXNSZWFkaW5ncy5qb2luKCcnKX08L2Rpdj5gO1xuICAgICAgICB1cGRhdGVkT3B0aW9ucy50b29sdGlwLnRyYW5zaXRpb25EdXJhdGlvbiA9IDA7XG4gICAgICAgIHVwZGF0ZWRPcHRpb25zLnRvb2x0aXAucG9zaXRpb24gPSB0aGlzLnRvb2x0aXBQb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmVjaGFydHNJbnN0YW5jZT8uc2V0T3B0aW9uKHVwZGF0ZWRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFlBeGlzUmVhZGluZ3MucHVzaCh2YWx1ZSk7XG5cbiAgICByZXR1cm4gYDxkaXYgc3R5bGU9XCJ3aWR0aDogMzAwcHhcIj4ke1lBeGlzUmVhZGluZ3Muam9pbignJyl9PC9kaXY+YDtcbiAgfVxuXG4gIHByaXZhdGUgdG9vbHRpcFBvc2l0aW9uKCk6IFRvb2x0aXBQb3NpdGlvbkNhbGxiYWNrIHtcbiAgICBsZXQgbGFzdFBvc2l0aW9uT2ZUb29sdGlwOiBQYXJ0aWFsPFJlY29yZDwndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JywgbnVtYmVyPj4gPSB7fTtcbiAgICBpZiAodGhpcy50b29sdGlwUG9zaXRpb25DYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcFBvc2l0aW9uQ2FsbGJhY2s7XG4gICAgfVxuXG4gICAgdGhpcy50b29sdGlwUG9zaXRpb25DYWxsYmFjayA9IChcbiAgICAgIHBvaW50OiBbbnVtYmVyLCBudW1iZXJdLCAvLyBwb3NpdGlvbiBvZiBtb3VzZSBpbiBjaGFydCBbWCwgWV07IDAsMCBpcyB0b3AgbGVmdCBjb3JuZXJcbiAgICAgIF86IGFueSwgLy8gdG9vbHRpcCBkYXRhXG4gICAgICBkb206IEhUTUxFbGVtZW50IHwgdW5rbm93biwgLy8gdG9vbHRpcCBlbGVtZW50XG4gICAgICBfXzogYW55LFxuICAgICAgc2l6ZToge1xuICAgICAgICBjb250ZW50U2l6ZTogW251bWJlciwgbnVtYmVyXTsgLy8gc2l6ZSBvZiB0b29sdGlwXG4gICAgICAgIHZpZXdTaXplOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgfSB8IG51bGwgLy8gc2l6ZSBvZiBjaGFydFxuICAgICkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gMTA7XG4gICAgICBjb25zdCBbbW91c2VYLCBtb3VzZVldID0gcG9pbnQ7XG4gICAgICBjb25zdCBjaGFydFdpZHRoID0gc2l6ZT8udmlld1NpemVbMF0gfHwgMDtcbiAgICAgIGNvbnN0IGNoYXJ0SGVpZ2h0ID0gc2l6ZT8udmlld1NpemVbMV0gfHwgMDtcbiAgICAgIGNvbnN0IHRvb2x0aXBXaWR0aCA9IHNpemU/LmNvbnRlbnRTaXplWzBdIHx8IDA7XG4gICAgICBjb25zdCB0b29sdGlwSGVpZ2h0ID0gc2l6ZT8uY29udGVudFNpemVbMV0gfHwgMDtcbiAgICAgIGNvbnN0IHRvb2x0aXBSZWN0ID0gKGRvbSBhcyBIVE1MRWxlbWVudCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgdG9vbHRpcE92ZXJmbG93c0JvdHRvbUVkZ2UgPSB0b29sdGlwUmVjdC5ib3R0b20gPiB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICAgIGNvbnN0IHRvb2x0aXBPdmVyZmxvd3NSaWdodEVkZ2UgPSB0b29sdGlwUmVjdC5yaWdodCA+IHdpbmRvdy5pbm5lcldpZHRoO1xuXG4gICAgICBjb25zdCB0b29sdGlwV291bGRPdmVyZmxvd0JvdHRvbUVkZ2VPblBvc2l0aW9uQ2hhbmdlID1cbiAgICAgICAgIWxhc3RQb3NpdGlvbk9mVG9vbHRpcC50b3AgJiZcbiAgICAgICAgdG9vbHRpcFJlY3QuYm90dG9tICsgMiAqIG9mZnNldCArIHRvb2x0aXBIZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICAgIGNvbnN0IHRvb2x0aXBXb3VsZE92ZXJmbG93UmlnaHRFZGdlT25Qb3NpdGlvbkNoYW5nZSA9XG4gICAgICAgICFsYXN0UG9zaXRpb25PZlRvb2x0aXAubGVmdCAmJlxuICAgICAgICB0b29sdGlwUmVjdC5yaWdodCArIDIgKiBvZmZzZXQgKyB0b29sdGlwV2lkdGggPiB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICAgICAgbGV0IHZlcnRpY2FsUG9zaXRpb246IHsgdG9wOiBudW1iZXIgfSB8IHsgYm90dG9tOiBudW1iZXIgfSA9IHtcbiAgICAgICAgdG9wOiBtb3VzZVkgKyBvZmZzZXRcbiAgICAgIH07XG4gICAgICBsZXQgaG9yaXpvbnRhbFBvc2l0aW9uOiB7IGxlZnQ6IG51bWJlciB9IHwgeyByaWdodDogbnVtYmVyIH0gPSB7XG4gICAgICAgIGxlZnQ6IG1vdXNlWCArIG9mZnNldFxuICAgICAgfTtcblxuICAgICAgaWYgKHRvb2x0aXBPdmVyZmxvd3NCb3R0b21FZGdlIHx8IHRvb2x0aXBXb3VsZE92ZXJmbG93Qm90dG9tRWRnZU9uUG9zaXRpb25DaGFuZ2UpIHtcbiAgICAgICAgdmVydGljYWxQb3NpdGlvbiA9IHtcbiAgICAgICAgICBib3R0b206IGNoYXJ0SGVpZ2h0IC0gbW91c2VZICsgb2Zmc2V0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAodG9vbHRpcE92ZXJmbG93c1JpZ2h0RWRnZSB8fCB0b29sdGlwV291bGRPdmVyZmxvd1JpZ2h0RWRnZU9uUG9zaXRpb25DaGFuZ2UpIHtcbiAgICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uID0ge1xuICAgICAgICAgIHJpZ2h0OiBjaGFydFdpZHRoIC0gbW91c2VYICsgb2Zmc2V0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGxhc3RQb3NpdGlvbk9mVG9vbHRpcCA9IHtcbiAgICAgICAgLi4udmVydGljYWxQb3NpdGlvbixcbiAgICAgICAgLi4uaG9yaXpvbnRhbFBvc2l0aW9uXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbk9mVG9vbHRpcDtcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnRvb2x0aXBQb3NpdGlvbkNhbGxiYWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRkIHRoZSBkYXRhIHBvaW50IGluZm8gdG8gdGhlIHRvb2x0aXAuXG4gICAqIEBwYXJhbSBhbGxEYXRhUG9pbnRTZXJpZXMgLSBBbGwgdGhlIGRhdGEgcG9pbnQgc2VyaWVzLlxuICAgKiBAcGFyYW0gWEF4aXNWYWx1ZSAtIFRoZSBYIEF4aXMgdmFsdWUuXG4gICAqIEBwYXJhbSBZQXhpc1JlYWRpbmdzIC0gVGhlIFkgQXhpcyByZWFkaW5ncy5cbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc1NlcmllcyhcbiAgICBhbGxEYXRhUG9pbnRTZXJpZXM6IEN1c3RvbVNlcmllc09wdGlvbnNbXSxcbiAgICBYQXhpc1ZhbHVlOiBzdHJpbmcsXG4gICAgWUF4aXNSZWFkaW5nczogc3RyaW5nW11cbiAgKTogdm9pZCB7XG4gICAgYWxsRGF0YVBvaW50U2VyaWVzLmZvckVhY2goKHNlcmllczogYW55KSA9PiB7XG4gICAgICBpZiAoc2VyaWVzLmRhdGFwb2ludElkID09PSAnYWdncmVnYXRlZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICBpZiAoc2VyaWVzLmlkLmVuZHNXaXRoKCcvbWluJykpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLnByb2Nlc3NNaW5TZXJpZXMoc2VyaWVzLCBhbGxEYXRhUG9pbnRTZXJpZXMsIFhBeGlzVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICghc2VyaWVzLmlkLmVuZHNXaXRoKCcvbWF4JykpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLnByb2Nlc3NSZWd1bGFyU2VyaWVzKHNlcmllcywgWEF4aXNWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBZQXhpc1JlYWRpbmdzLnB1c2goXG4gICAgICAgICAgYDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBwLWItOFwiPjxzcGFuIGNsYXNzPSdkbHQtYzh5LWljb24tY2lyY2xlIG0tci00JyBzdHlsZT0nY29sb3I6ICR7c2VyaWVzLml0ZW1TdHlsZS5jb2xvcn07Jz48L3NwYW4+YCArIC8vIGNvbG9yIGNpcmNsZVxuICAgICAgICAgICAgYDxzdHJvbmc+JHtzZXJpZXMuZGF0YXBvaW50TGFiZWx9PC9zdHJvbmc+PC9kaXY+YCArIC8vIG5hbWVcbiAgICAgICAgICAgIGAke3ZhbHVlfWAgLy8gc2luZ2xlIHZhbHVlIG9yIG1pbi1tYXggcmFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHByb2Nlc3MgdGhlIG1pbiBzZXJpZXMuXG4gICAqIEBwYXJhbSBzZXJpZXMgLSBUaGUgc2VyaWVzLlxuICAgKiBAcGFyYW0gYWxsRGF0YVBvaW50U2VyaWVzIC0gQWxsIHRoZSBkYXRhIHBvaW50IHNlcmllcy5cbiAgICogQHBhcmFtIFhBeGlzVmFsdWUgLSBUaGUgWCBBeGlzIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzTWluU2VyaWVzKFxuICAgIHNlcmllczogYW55LFxuICAgIGFsbERhdGFQb2ludFNlcmllczogQ3VzdG9tU2VyaWVzT3B0aW9uc1tdLFxuICAgIFhBeGlzVmFsdWU6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5maW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChzZXJpZXMuZGF0YSwgWEF4aXNWYWx1ZSk7XG4gICAgaWYgKCFtaW5WYWx1ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBtYXhTZXJpZXMgPSBhbGxEYXRhUG9pbnRTZXJpZXMuZmluZChzID0+IHNbJ2lkJ10gPT09IHNlcmllcy5pZC5yZXBsYWNlKCcvbWluJywgJy9tYXgnKSk7XG4gICAgY29uc3QgbWF4VmFsdWUgPSB0aGlzLmZpbmRWYWx1ZUZvckV4YWN0T3JFYXJsaWVyVGltZXN0YW1wKFxuICAgICAgbWF4U2VyaWVzPy5bJ2RhdGEnXSBhcyBTZXJpZXNWYWx1ZVtdLFxuICAgICAgWEF4aXNWYWx1ZVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIGA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgc2VwYXJhdG9yLXRvcCBwLXQtOCBwLWItOFwiPjxsYWJlbCBjbGFzcz1cInRleHQtMTIgbS1yLTggbS1iLTBcIj4ke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG1pblZhbHVlWzBdKX08L2xhYmVsPmAgK1xuICAgICAgYDxzcGFuIGNsYXNzPVwibS1sLWF1dG8gdGV4dC0xMlwiPiR7bWluVmFsdWVbMV19IOKAlCAke21heFZhbHVlPy5bMV19YCArXG4gICAgICAoc2VyaWVzLmRhdGFwb2ludFVuaXQgPyBgICR7c2VyaWVzLmRhdGFwb2ludFVuaXR9YCA6ICcnKSArXG4gICAgICBgPC9zcGFuPjwvZGl2PmBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gcHJvY2VzcyB0aGUgcmVndWxhciBzZXJpZXMuXG4gICAqIEBwYXJhbSBzZXJpZXMgLSBUaGUgc2VyaWVzLlxuICAgKiBAcGFyYW0gWEF4aXNWYWx1ZSAtIFRoZSBYIEF4aXMgdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoZSBwcm9jZXNzZWQgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NSZWd1bGFyU2VyaWVzKHNlcmllczogYW55LCBYQXhpc1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlcmllc1ZhbHVlID0gdGhpcy5maW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChzZXJpZXMuZGF0YSwgWEF4aXNWYWx1ZSk7XG4gICAgaWYgKCFzZXJpZXNWYWx1ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgYDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBwLXQtOCBwLWItOCBzZXBhcmF0b3ItdG9wXCI+YCArXG4gICAgICBgPGxhYmVsIGNsYXNzPVwibS1iLTAgbS1yLTggdGV4dC0xMlwiPiR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIHNlcmllc1ZhbHVlWzBdXG4gICAgICApfTwvbGFiZWw+PHNwYW4gY2xhc3M9XCJtLWwtYXV0byB0ZXh0LTEyXCI+YCArXG4gICAgICBzZXJpZXNWYWx1ZVsxXT8udG9TdHJpbmcoKSArXG4gICAgICAoc2VyaWVzLmRhdGFwb2ludFVuaXQgPyBgICR7c2VyaWVzLmRhdGFwb2ludFVuaXR9YCA6ICcnKSArXG4gICAgICBgPC9zcGFuPjwvZGl2PmBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gcHJvY2VzcyB0aGUgZXZlbnQgdG9vbHRpcC5cbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IG9iamVjdC5cbiAgICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc0V2ZW50KGV2ZW50OiBJRXZlbnQsIFhBeGlzVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHZhbHVlID0gYDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgc2VwYXJhdG9yLXRvcFwiPmA7XG4gICAgdmFsdWUgKz0gYDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm8td3JhcFwiPjxsYWJlbCBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci04XCI+RXZlbnQgdHlwZTwvbGFiZWw+PGNvZGUgY2xhc3M9XCJtLWwtYXV0b1wiPiR7ZXZlbnQudHlwZX08L2NvZGU+PC9saT5gO1xuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vLXdyYXBcIj48bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItOFwiPkV2ZW50IHRleHQ8L2xhYmVsPjxzcGFuIGNsYXNzPVwibS1sLWF1dG9cIj4ke2V2ZW50LnRleHR9PHNwYW4+PC9saT5gO1xuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vLXdyYXBcIj48bGFiZWwgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItOFwiPkV2ZW50IHRpbWU8L2xhYmVsPjxzcGFuIGNsYXNzPVwibS1sLWF1dG9cIj4ke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFhBeGlzVmFsdWUpfTxzcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPC91bD5gO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHByb2Nlc3MgdGhlIGFsYXJtIHRvb2x0aXAuXG4gICAqIEBwYXJhbSBhbGFybSAtIFRoZSBhbGFybSBvYmplY3QuXG4gICAqIEByZXR1cm5zIFRoZSBwcm9jZXNzZWQgdmFsdWUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NBbGFybShhbGFybTogSUFsYXJtKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgdmFsdWUgPSBgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBzbWFsbCBzZXBhcmF0b3ItdG9wIG0tMFwiPmA7XG4gICAgdmFsdWUgKz0gYDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBhLWktY2VudGVyIHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPkFsYXJtIFNldmVyaXR5PC9sYWJlbD5gO1xuICAgIHZhbHVlICs9IGA8c3BhbiBjbGFzcz1cInNtYWxsIGQtaW5saW5lLWZsZXggYS1pLWNlbnRlciBnYXAtNCBtLWwtYXV0b1wiPjxpIGNsYXNzPVwic3Ryb2tlZC1pY29uIGljb24tMTQgc3RhdHVzIGRsdC1jOHktaWNvbi0ke3RoaXMuc2V2ZXJpdHlJY29uUGlwZS50cmFuc2Zvcm0oYWxhcm0uc2V2ZXJpdHkpfSAke2FsYXJtLnNldmVyaXR5LnRvTG93ZXJDYXNlKCl9XCIgPiA8L2k+ICR7dGhpcy5zZXZlcml0eUxhYmVsUGlwZS50cmFuc2Zvcm0oYWxhcm0uc2V2ZXJpdHkpfSA8L3NwYW4+PC9saT5gO1xuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vLXdyYXBcIj48bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tYi0wIG0tci04XCI+QWxhcm0gVHlwZTwvbGFiZWw+PHNwYW4gY2xhc3M9XCJzbWFsbCBtLWwtYXV0b1wiPjxjb2RlPiR7YWxhcm0udHlwZX08L2NvZGU+PC9zcGFuPjwvbGk+YDtcbiAgICB2YWx1ZSArPSBgPGxpIGNsYXNzPVwicC10LTQgcC1iLTQgZC1mbGV4IHNlcGFyYXRvci1ib3R0b20gdGV4dC1uby13cmFwXCI+PGxhYmVsIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLWItMCBtLXItOFwiPk1lc3NhZ2U8L2xhYmVsPjxzcGFuIGNsYXNzPVwic21hbGwgbS1sLWF1dG9cIiBzdHlsZT1cIm92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1wiIHRpdGxlPVwiJHthbGFybS50ZXh0fVwiPiR7YWxhcm0udGV4dH08L3NwYW4+PC9saT5gO1xuICAgIHZhbHVlICs9IGA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbSB0ZXh0LW5vLXdyYXBcIj48bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tYi0wIG0tci04XCI+TGFzdCBVcGRhdGVkPC9sYWJlbD48c3BhbiBjbGFzcz1cInNtYWxsIG0tbC1hdXRvXCI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShhbGFybVsnbGFzdFVwZGF0ZWQnXSl9PC9zcGFuPjwvbGk+YDtcbiAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmFsYXJtUm91dGVFeGlzdHMoKTtcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICBjb25zdCBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBjb25zdCBiYXNlVXJsSW5kZXggPSBjdXJyZW50VXJsLmluZGV4T2YoSU5ERVhfSFRNTCk7XG4gICAgICBjb25zdCBiYXNlVXJsID0gY3VycmVudFVybC5zdWJzdHJpbmcoMCwgYmFzZVVybEluZGV4ICsgSU5ERVhfSFRNTC5sZW5ndGgpO1xuICAgICAgdmFsdWUgKz0gYDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tIHRleHQtbm8td3JhcFwiPjxsYWJlbCBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1iLTAgbS1yLThcIj5MaW5rPC9sYWJlbD48c3BhbiBjbGFzcz1cInNtYWxsIG0tbC1hdXRvXCI+PGEgaHJlZj1cIiR7YmFzZVVybH0jL2FsYXJtcy8ke2FsYXJtLmlkfS9kZXRhaWxzP3Nob3dDbGVhcmVkPXRydWVcIj4ke3RoaXMudHJhbnNsYXRlLmluc3RhbnQoZ2V0dGV4dCgnQWxhcm0gZGV0YWlscycpKX08L2E+PC9zcGFuPjwvbGk+YDtcbiAgICB9XG4gICAgdmFsdWUgKz0gYDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCB0ZXh0LW5vLXdyYXBcIj48bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tYi0wIG0tci04XCI+QWxhcm0gY291bnQ8L2xhYmVsPjxzcGFuIGNsYXNzPVwic21hbGwgbS1sLWF1dG9cIj48c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWluZm9cIj4ke2FsYXJtLmNvdW50fTwvc3Bhbj48L3NwYW4+PC9saT5gO1xuICAgIHZhbHVlICs9IGA8L3VsPmA7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhbGFybVJvdXRlRXhpc3RzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMucm91dGVyLmNvbmZpZy5zb21lKHJvdXRlID0+IHtcbiAgICAgIHJldHVybiBgJHtyb3V0ZS5wYXRofWAgPT09ICdhbGFybXMnO1xuICAgIH0pO1xuICAgIHJldHVybiBleGlzdHM7XG4gIH1cblxuICBwcml2YXRlIGdldENoYXJ0U2VyaWVzKFxuICAgIGRhdGFwb2ludHNXaXRoVmFsdWVzOiBEcFdpdGhWYWx1ZXNbXSxcbiAgICBldmVudHM6IElFdmVudFtdLFxuICAgIGFsYXJtczogSUFsYXJtW10sXG4gICAgZGlzcGxheU9wdGlvbnM6IEdyYXBoRGlzcGxheU9wdGlvbnNcbiAgKTogQ3VzdG9tU2VyaWVzT3B0aW9uc1tdIHwgU2VyaWVzT3B0aW9uW10ge1xuICAgIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBbXTtcbiAgICBsZXQgZXZlbnRTZXJpZXM6IEN1c3RvbVNlcmllc09wdGlvbnNbXSA9IFtdO1xuICAgIGxldCBhbGFybVNlcmllczogQ3VzdG9tU2VyaWVzT3B0aW9uc1tdID0gW107XG4gICAgZGF0YXBvaW50c1dpdGhWYWx1ZXMuZm9yRWFjaCgoZHAsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgcmVuZGVyVHlwZTogRGF0YXBvaW50Q2hhcnRSZW5kZXJUeXBlID0gZHAucmVuZGVyVHlwZSB8fCAnbWluJztcbiAgICAgIGlmIChyZW5kZXJUeXBlID09PSAnYXJlYScpIHtcbiAgICAgICAgc2VyaWVzLnB1c2godGhpcy5nZXRTaW5nbGVTZXJpZXMoZHAsICdtaW4nLCBpZHgsIHRydWUsIGRpc3BsYXlPcHRpb25zKSk7XG4gICAgICAgIHNlcmllcy5wdXNoKHRoaXMuZ2V0U2luZ2xlU2VyaWVzKGRwLCAnbWF4JywgaWR4LCB0cnVlLCBkaXNwbGF5T3B0aW9ucykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VyaWVzLnB1c2godGhpcy5nZXRTaW5nbGVTZXJpZXMoZHAsIHJlbmRlclR5cGUsIGlkeCwgZmFsc2UsIGRpc3BsYXlPcHRpb25zKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0V2ZW50U2VyaWVzID0gdGhpcy5nZXRBbGFybU9yRXZlbnRTZXJpZXMoXG4gICAgICAgIGRwLFxuICAgICAgICByZW5kZXJUeXBlLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgZXZlbnRzLFxuICAgICAgICAnZXZlbnQnLFxuICAgICAgICBkaXNwbGF5T3B0aW9ucyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgaWR4XG4gICAgICApO1xuICAgICAgY29uc3QgbmV3QWxhcm1TZXJpZXMgPSB0aGlzLmdldEFsYXJtT3JFdmVudFNlcmllcyhcbiAgICAgICAgZHAsXG4gICAgICAgIHJlbmRlclR5cGUsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBhbGFybXMsXG4gICAgICAgICdhbGFybScsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zLFxuICAgICAgICBudWxsLFxuICAgICAgICBpZHhcbiAgICAgICk7XG4gICAgICBldmVudFNlcmllcyA9IFsuLi5ldmVudFNlcmllcywgLi4ubmV3RXZlbnRTZXJpZXNdO1xuICAgICAgYWxhcm1TZXJpZXMgPSBbLi4uYWxhcm1TZXJpZXMsIC4uLm5ld0FsYXJtU2VyaWVzXTtcbiAgICB9KTtcbiAgICBjb25zdCBkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrID0gKFxuICAgICAgb2JqMTogQ3VzdG9tU2VyaWVzT3B0aW9ucyxcbiAgICAgIGk6IG51bWJlcixcbiAgICAgIGFycjogU2VyaWVzT3B0aW9uW11cbiAgICApOiBvYmoxIGlzIEN1c3RvbVNlcmllc09wdGlvbnMgPT4ge1xuICAgICAgY29uc3QgZHVwbGljYXRlcyA9IGFyci5maWx0ZXIob2JqMiA9PiBvYmoxWydpZCddID09PSBvYmoyWydpZCddICYmIGkgIT09IGFyci5pbmRleE9mKG9iajIpKTtcblxuICAgICAgaWYgKGR1cGxpY2F0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gb2JqMVsnaXNEcFRlbXBsYXRlU2VsZWN0ZWQnXSBhcyBib29sZWFuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVkdXBsaWNhdGVGaWx0ZXJDYWxsYmFja0ZhbGxiYWNrID0gKFxuICAgICAgb2JqMTogU2VyaWVzT3B0aW9uLFxuICAgICAgaTogbnVtYmVyLFxuICAgICAgYXJyOiBTZXJpZXNPcHRpb25bXVxuICAgICk6IG9iajEgaXMgU2VyaWVzT3B0aW9uID0+IGFyci5maW5kSW5kZXgob2JqMiA9PiBvYmoyWydpZCddID09PSBvYmoxWydpZCddKSA9PT0gaTtcblxuICAgIGxldCBkZWR1cGxpY2F0ZWRFdmVudHMgPSBldmVudFNlcmllcy5maWx0ZXIoZGVkdXBsaWNhdGVGaWx0ZXJDYWxsYmFjayk7XG4gICAgbGV0IGRlZHVwbGljYXRlZEFsYXJtcyA9IGFsYXJtU2VyaWVzLmZpbHRlcihkZWR1cGxpY2F0ZUZpbHRlckNhbGxiYWNrKTtcbiAgICBpZiAoZGVkdXBsaWNhdGVkQWxhcm1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVkdXBsaWNhdGVkQWxhcm1zID0gYWxhcm1TZXJpZXMuZmlsdGVyKGRlZHVwbGljYXRlRmlsdGVyQ2FsbGJhY2tGYWxsYmFjayk7XG4gICAgfVxuICAgIGlmIChkZWR1cGxpY2F0ZWRFdmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWR1cGxpY2F0ZWRFdmVudHMgPSBldmVudFNlcmllcy5maWx0ZXIoZGVkdXBsaWNhdGVGaWx0ZXJDYWxsYmFja0ZhbGxiYWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5zZXJpZXMsIC4uLmRlZHVwbGljYXRlZEV2ZW50cywgLi4uZGVkdXBsaWNhdGVkQWxhcm1zXTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JvdXBCeVR5cGUoXG4gICAgaXRlbXM6IElBbGFybVtdIHwgSUV2ZW50W10sXG4gICAgdHlwZUZpZWxkOiBzdHJpbmdcbiAgKTogUmVjb3JkPHN0cmluZywgSUFsYXJtW10gfCBJRXZlbnRbXT4ge1xuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKGdyb3VwZWQsIGl0ZW0pID0+IHtcbiAgICAgIChncm91cGVkW2l0ZW1bdHlwZUZpZWxkXV0gPSBncm91cGVkW2l0ZW1bdHlwZUZpZWxkXV0gfHwgW10pLnB1c2goaXRlbSk7XG4gICAgICByZXR1cm4gZ3JvdXBlZDtcbiAgICB9LCB7fSBhcyBhbnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGludGVycG9sYXRlcyBiZXR3ZWVuIHR3byBkYXRhIHBvaW50cy4gVGhlIGdvYWwgaXMgdG8gcGxhY2UgdGhlIG1hcmtQb2ludCBvbiB0aGUgY2hhcnQgaW4gdGhlIHJpZ2h0IHBsYWNlLlxuICAgKiBAcGFyYW0gZHBWYWx1ZXNBcnJheSBhcnJheSBvZiBkYXRhIHBvaW50c1xuICAgKiBAcGFyYW0gdGFyZ2V0VGltZSB0aW1lIG9mIHRoZSBhbGFybSBvciBldmVudFxuICAgKiBAcmV0dXJucyBpbnRlcnBvbGF0ZWQgZGF0YSBwb2ludFxuICAgKi9cbiAgcHJpdmF0ZSBpbnRlcnBvbGF0ZUJldHdlZW5Ud29EcHMoXG4gICAgZHBWYWx1ZXNBcnJheTogRHBWYWx1ZXNJdGVtW10sXG4gICAgdGFyZ2V0VGltZTogbnVtYmVyXG4gICk6IERwVmFsdWVzSXRlbSB7XG4gICAgbGV0IG1heFZhbHVlOiBudW1iZXI7XG4gICAgbGV0IG1pblZhbHVlOiBudW1iZXI7XG4gICAgcmV0dXJuIGRwVmFsdWVzQXJyYXkucmVkdWNlKChhY2MsIGN1cnIsIGlkeCwgYXJyKSA9PiB7XG4gICAgICBpZiAobmV3IERhdGUoY3Vyci50aW1lKS5nZXRUaW1lKCkgPD0gdGFyZ2V0VGltZSkge1xuICAgICAgICBpZiAoaWR4ID09PSBhcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0aW1lOiB0YXJnZXRUaW1lLFxuICAgICAgICAgICAgdmFsdWVzOiBbeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0RHAgPSBhcnJbaWR4ICsgMV07XG4gICAgICAgIGlmIChuZXcgRGF0ZShuZXh0RHAudGltZSkuZ2V0VGltZSgpID49IHRhcmdldFRpbWUpIHtcbiAgICAgICAgICBjb25zdCB0aW1lRGlmZiA9IG5ldyBEYXRlKG5leHREcC50aW1lKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShjdXJyLnRpbWUpLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCB0YXJnZXRUaW1lRGlmZiA9IHRhcmdldFRpbWUgLSBuZXcgRGF0ZShjdXJyLnRpbWUpLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBtaW5WYWx1ZURpZmYgPSBuZXh0RHAudmFsdWVzWzBdPy5taW4gLSBjdXJyLnZhbHVlc1swXT8ubWluO1xuICAgICAgICAgIGNvbnN0IG1heFZhbHVlRGlmZiA9IG5leHREcC52YWx1ZXNbMF0/Lm1heCAtIGN1cnIudmFsdWVzWzBdPy5tYXg7XG4gICAgICAgICAgbWluVmFsdWUgPSBjdXJyLnZhbHVlc1swXT8ubWluICsgKG1pblZhbHVlRGlmZiAqIHRhcmdldFRpbWVEaWZmKSAvIHRpbWVEaWZmO1xuICAgICAgICAgIG1heFZhbHVlID0gY3Vyci52YWx1ZXNbMF0/Lm1heCArIChtYXhWYWx1ZURpZmYgKiB0YXJnZXRUaW1lRGlmZikgLyB0aW1lRGlmZjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGltZTogdGFyZ2V0VGltZSxcbiAgICAgICAgICAgIHZhbHVlczogW3sgbWluOiBtaW5WYWx1ZSwgbWF4OiBtYXhWYWx1ZSB9XVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsb3Nlc3REcFZhbHVlVG9UYXJnZXRUaW1lKFxuICAgIGRwVmFsdWVzQXJyYXk6IERwVmFsdWVzSXRlbVtdLFxuICAgIHRhcmdldFRpbWU6IG51bWJlclxuICApOiBEcFZhbHVlc0l0ZW0ge1xuICAgIHJldHVybiBkcFZhbHVlc0FycmF5LnJlZHVjZSgocHJldiwgY3VycikgPT5cbiAgICAgIC8vc2hvdWxkIHRha2UgdGhlIHZhbHVlIGNsb3Nlc3QgdG8gdGhlIHRhcmdldCB0aW1lLCBmb3IgcmVhbHRpbWUgdGhlIGN1cnJlbnQgdGltZSB3b3VsZCBhbHdheXMgY2hhbmdlXG4gICAgICBNYXRoLmFicyhuZXcgRGF0ZShjdXJyLnRpbWUpLmdldFRpbWUoKSAtIHRhcmdldFRpbWUpIDxcbiAgICAgIE1hdGguYWJzKG5ldyBEYXRlKHByZXYudGltZSkuZ2V0VGltZSgpIC0gdGFyZ2V0VGltZSlcbiAgICAgICAgPyBjdXJyXG4gICAgICAgIDogcHJldlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIG1hcmtQb2ludCBvbiB0aGUgY2hhcnQgd2hpY2ggcmVwcmVzZW50cyB0aGUgaWNvbiBvZiB0aGUgYWxhcm0gb3IgZXZlbnQuXG4gICAqIEBwYXJhbSBpdGVtIFNpbmdsZSBhbGFybSBvciBldmVudFxuICAgKiBAcGFyYW0gZHAgRGF0YSBwb2ludFxuICAgKiBAcGFyYW0gaXNDbGVhcmVkIElmIHRoZSBhbGFybSBpcyBjbGVhcmVkIGluIGNhc2Ugb2YgYWxhcm1cbiAgICogQHBhcmFtIGlzRXZlbnQgSWYgdGhlIGl0ZW0gaXMgYW4gZXZlbnRcbiAgICogQHBhcmFtIHJlYWx0aW1lIElmIHRoZSBjaGFydCBpcyBpbiByZWFsdGltZSBtb2RlXG4gICAqIEByZXR1cm5zIE1hcmtQb2ludERhdGFJdGVtT3B0aW9uW11cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTWFya1BvaW50KFxuICAgIGl0ZW06IElBbGFybSB8IElFdmVudCxcbiAgICBkcDogRHBXaXRoVmFsdWVzLFxuICAgIGlzQ2xlYXJlZDogYm9vbGVhbixcbiAgICBpc0V2ZW50OiBib29sZWFuLFxuICAgIHJlYWx0aW1lOiBib29sZWFuXG4gICk6IE1hcmtQb2ludERhdGFbXSB7XG4gICAgLy8gY2hlY2sgaWYgZHAudmFsdWVzIG9iamVjdCBpcyBlbXB0eVxuICAgIGlmICghaXRlbS5jcmVhdGlvblRpbWUgfHwgT2JqZWN0LmtleXMoZHAudmFsdWVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBkcFZhbHVlc0FycmF5OiBEcFZhbHVlc0l0ZW1bXSA9IE9iamVjdC5lbnRyaWVzKGRwLnZhbHVlcykubWFwKChbdGltZSwgdmFsdWVzXSkgPT4gKHtcbiAgICAgIHRpbWU6IG5ldyBEYXRlKHRpbWUpLmdldFRpbWUoKSxcbiAgICAgIHZhbHVlc1xuICAgIH0pKTtcbiAgICBjb25zdCBjcmVhdGlvblRpbWUgPSBuZXcgRGF0ZShpdGVtLmNyZWF0aW9uVGltZSkuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGxhc3RVcGRhdGVkVGltZSA9IG5ldyBEYXRlKGl0ZW1bJ2xhc3RVcGRhdGVkJ10pLmdldFRpbWUoKTtcblxuICAgIGxldCBjb29yZENyZWF0aW9uVGltZTogYW55O1xuICAgIGxldCBjb29yZExhc3RVcGRhdGVkVGltZTogYW55O1xuXG4gICAgaWYgKHJlYWx0aW1lKSB7XG4gICAgICBjb25zdCBsYXN0VmFsdWUgPSBkcFZhbHVlc0FycmF5W2RwVmFsdWVzQXJyYXkubGVuZ3RoIC0gMV07XG4gICAgICBjb29yZENyZWF0aW9uVGltZSA9IFtcbiAgICAgICAgaXRlbS5jcmVhdGlvblRpbWUsXG4gICAgICAgIGxhc3RWYWx1ZT8udmFsdWVzWzBdPy5taW4gPz8gbGFzdFZhbHVlPy52YWx1ZXNbMV0gPz8gbnVsbFxuICAgICAgXTtcbiAgICAgIGNvb3JkTGFzdFVwZGF0ZWRUaW1lID0gW1xuICAgICAgICBpdGVtWydsYXN0VXBkYXRlZCddLFxuICAgICAgICBsYXN0VmFsdWU/LnZhbHVlc1swXT8ubWluID8/IGxhc3RWYWx1ZT8udmFsdWVzWzFdID8/IG51bGxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNsb3Nlc3REcFZhbHVlID0gdGhpcy5pbnRlcnBvbGF0ZUJldHdlZW5Ud29EcHMoZHBWYWx1ZXNBcnJheSwgY3JlYXRpb25UaW1lKTtcbiAgICAgIGNvbnN0IGRwVmFsdWVzRm9yTmV3QWxhcm1zID0gdGhpcy5nZXRDbG9zZXN0RHBWYWx1ZVRvVGFyZ2V0VGltZShkcFZhbHVlc0FycmF5LCBjcmVhdGlvblRpbWUpO1xuICAgICAgY29uc3QgY2xvc2VzdERwVmFsdWVMYXN0VXBkYXRlZCA9IHRoaXMuaW50ZXJwb2xhdGVCZXR3ZWVuVHdvRHBzKFxuICAgICAgICBkcFZhbHVlc0FycmF5LFxuICAgICAgICBsYXN0VXBkYXRlZFRpbWVcbiAgICAgICk7XG4gICAgICBjb25zdCBkcFZhbHVlc0Zvck5ld0FsYXJtc0xhc3RVcGRhdGVkID0gdGhpcy5nZXRDbG9zZXN0RHBWYWx1ZVRvVGFyZ2V0VGltZShcbiAgICAgICAgZHBWYWx1ZXNBcnJheSxcbiAgICAgICAgbGFzdFVwZGF0ZWRUaW1lXG4gICAgICApO1xuXG4gICAgICBjb29yZENyZWF0aW9uVGltZSA9IFtcbiAgICAgICAgaXRlbS5jcmVhdGlvblRpbWUsXG4gICAgICAgIGNsb3Nlc3REcFZhbHVlPy52YWx1ZXNbMF0/Lm1pbiA/P1xuICAgICAgICAgIGNsb3Nlc3REcFZhbHVlPy52YWx1ZXNbMV0gPz9cbiAgICAgICAgICBkcFZhbHVlc0Zvck5ld0FsYXJtcz8udmFsdWVzWzBdPy5taW4gPz9cbiAgICAgICAgICBkcFZhbHVlc0Zvck5ld0FsYXJtcz8udmFsdWVzWzFdID8/XG4gICAgICAgICAgbnVsbFxuICAgICAgXTtcbiAgICAgIGNvb3JkTGFzdFVwZGF0ZWRUaW1lID0gW1xuICAgICAgICBpdGVtWydsYXN0VXBkYXRlZCddLFxuICAgICAgICBjbG9zZXN0RHBWYWx1ZUxhc3RVcGRhdGVkPy52YWx1ZXNbMF0/Lm1pbiA/P1xuICAgICAgICAgIGNsb3Nlc3REcFZhbHVlTGFzdFVwZGF0ZWQ/LnZhbHVlc1sxXSA/P1xuICAgICAgICAgIGRwVmFsdWVzRm9yTmV3QWxhcm1zTGFzdFVwZGF0ZWQ/LnZhbHVlc1swXT8ubWluID8/XG4gICAgICAgICAgZHBWYWx1ZXNGb3JOZXdBbGFybXNMYXN0VXBkYXRlZD8udmFsdWVzWzFdID8/XG4gICAgICAgICAgbnVsbFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAoaXNFdmVudCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIGNvb3JkOiBjb29yZENyZWF0aW9uVGltZSxcbiAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgICAgIGNvbG9yOiBpdGVtWydjb2xvciddXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzeW1ib2w6ICdjaXJjbGUnLFxuICAgICAgICAgIHN5bWJvbFNpemU6IDI0XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb29yZDogY29vcmRDcmVhdGlvblRpbWUsXG4gICAgICAgICAgbmFtZTogaXRlbS50eXBlLFxuICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiAnd2hpdGUnIH0sXG4gICAgICAgICAgc3ltYm9sOiBJQ09OU19NQVAuRVZFTlQsXG4gICAgICAgICAgc3ltYm9sU2l6ZTogMTZcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNDbGVhcmVkXG4gICAgICA/IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRDcmVhdGlvblRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBpdGVtWydjb2xvciddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3ltYm9sOiAnY2lyY2xlJyxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDI0XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRDcmVhdGlvblRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiAnd2hpdGUnIH0sXG4gICAgICAgICAgICBzeW1ib2w6IElDT05TX01BUFtpdGVtLnNldmVyaXR5IGFzIFNldmVyaXR5VHlwZV0sXG4gICAgICAgICAgICBzeW1ib2xTaXplOiAxNlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29vcmQ6IGNvb3JkTGFzdFVwZGF0ZWRUaW1lLFxuICAgICAgICAgICAgbmFtZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZToge1xuICAgICAgICAgICAgICBjb2xvcjogaXRlbVsnY29sb3InXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN5bWJvbDogJ2NpcmNsZScsXG4gICAgICAgICAgICBzeW1ib2xTaXplOiAyNFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29vcmQ6IGNvb3JkTGFzdFVwZGF0ZWRUaW1lLFxuICAgICAgICAgICAgbmFtZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogJ3doaXRlJyB9LFxuICAgICAgICAgICAgc3ltYm9sOiBJQ09OU19NQVAuQ0xFQVJFRCxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDE2XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRDcmVhdGlvblRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBpdGVtWydjb2xvciddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3ltYm9sOiAnY2lyY2xlJyxcbiAgICAgICAgICAgIHN5bWJvbFNpemU6IDI0XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb29yZDogY29vcmRDcmVhdGlvblRpbWUsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVN0eWxlOiB7IGNvbG9yOiAnd2hpdGUnIH0sXG4gICAgICAgICAgICBzeW1ib2w6IElDT05TX01BUFtpdGVtLnNldmVyaXR5IGFzIFNldmVyaXR5VHlwZV0sXG4gICAgICAgICAgICBzeW1ib2xTaXplOiAxNlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29vcmQ6IGNvb3JkTGFzdFVwZGF0ZWRUaW1lLFxuICAgICAgICAgICAgbmFtZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZToge1xuICAgICAgICAgICAgICBjb2xvcjogaXRlbVsnY29sb3InXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN5bWJvbDogJ2NpcmNsZScsXG4gICAgICAgICAgICBzeW1ib2xTaXplOiAyNFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29vcmQ6IGNvb3JkTGFzdFVwZGF0ZWRUaW1lLFxuICAgICAgICAgICAgbmFtZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogJ3doaXRlJyB9LFxuICAgICAgICAgICAgc3ltYm9sOiBJQ09OU19NQVBbaXRlbS5zZXZlcml0eSBhcyBTZXZlcml0eVR5cGVdLFxuICAgICAgICAgICAgc3ltYm9sU2l6ZTogMTZcbiAgICAgICAgICB9XG4gICAgICAgIF07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIG1hcmtMaW5lIG9uIHRoZSBjaGFydCB3aGljaCByZXByZXNlbnRzIHRoZSBsaW5lIGJldHdlZW4gZXZlcnkgYWxhcm0gb3IgZXZlbnQgb24gdGhlIGNoYXJ0LlxuICAgKiBAcGFyYW0gaXRlbXMgQXJyYXkgb2YgYWxhcm1zIG9yIGV2ZW50c1xuICAgKiBAcmV0dXJucyBNYXJrTGluZURhdGFJdGVtT3B0aW9uQmFzZVtdXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZU1hcmtMaW5lPFQgZXh0ZW5kcyBJQWxhcm0gfCBJRXZlbnQ+KFxuICAgIGl0ZW1zOiBUW10sXG4gICAgaXRlbVR5cGU6ICdhbGFybScgfCAnZXZlbnQnXG4gICk6IE1hcmtMaW5lRGF0YVtdIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlPE1hcmtMaW5lRGF0YVtdPigoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0uY3JlYXRpb25UaW1lKSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVR5cGUgPT09ICdldmVudCcpIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHhBeGlzOiBpdGVtLnRpbWUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UsIGZvcm1hdHRlcjogKCkgPT4gaXRlbS50eXBlIH0sXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGl0ZW1bJ2NvbG9yJ10gfVxuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5jcmVhdGlvblRpbWUgPT09IGl0ZW1bJ2xhc3RVcGRhdGVkJ10pIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHhBeGlzOiBpdGVtLmNyZWF0aW9uVGltZSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBpdGVtLnR5cGUsXG4gICAgICAgICAgICBsYWJlbDogeyBzaG93OiBmYWxzZSwgZm9ybWF0dGVyOiAoKSA9PiBpdGVtLnR5cGUgfSxcbiAgICAgICAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogaXRlbVsnY29sb3InXSB9XG4gICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB4QXhpczogaXRlbS5jcmVhdGlvblRpbWUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UsIGZvcm1hdHRlcjogKCkgPT4gaXRlbS50eXBlIH0sXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGl0ZW1bJ2NvbG9yJ10gfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgeEF4aXM6IGl0ZW1bJ2xhc3RVcGRhdGVkJ10sXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgbGFiZWw6IHsgc2hvdzogZmFsc2UsIGZvcm1hdHRlcjogKCkgPT4gaXRlbS50eXBlIH0sXG4gICAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGl0ZW1bJ2NvbG9yJ10gfVxuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaW5nbGVTZXJpZXMoXG4gICAgZHA6IERwV2l0aFZhbHVlcyxcbiAgICByZW5kZXJUeXBlOiBFeGNsdWRlPERhdGFwb2ludENoYXJ0UmVuZGVyVHlwZSwgJ2FyZWEnPixcbiAgICBpZHg6IG51bWJlcixcbiAgICBpc01pbk1heENoYXJ0ID0gZmFsc2UsXG4gICAgZGlzcGxheU9wdGlvbnM6IEdyYXBoRGlzcGxheU9wdGlvbnMsXG4gICAgc2VyaWVzVHlwZSA9ICcnXG4gICk6IFNlcmllc09wdGlvbiAmIFNlcmllc0RhdGFwb2ludEluZm8ge1xuICAgIGNvbnN0IGRhdGFwb2ludElkID0gZHAuX190YXJnZXQ/LmlkICsgZHAuZnJhZ21lbnQgKyBkcC5zZXJpZXM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFwb2ludElkLFxuICAgICAgZGF0YXBvaW50VW5pdDogZHAudW5pdCB8fCAnJyxcbiAgICAgIC8vICdpZCcgcHJvcGVydHkgaXMgbmVlZGVkIGFzICdzZXJpZXNJZCcgaW4gdG9vbHRpcCBmb3JtYXR0ZXJcbiAgICAgIGlkOiBpc01pbk1heENoYXJ0XG4gICAgICAgID8gYCR7ZGF0YXBvaW50SWR9LyR7cmVuZGVyVHlwZX0ke3Nlcmllc1R5cGV9YFxuICAgICAgICA6IGAke2RhdGFwb2ludElkfSR7c2VyaWVzVHlwZX1gLFxuICAgICAgbmFtZTogYCR7ZHAubGFiZWx9ICgke2RwLl9fdGFyZ2V0Py5bJ25hbWUnXX0pYCxcbiAgICAgIC8vIGRhdGFwb2ludExhYmVsIHVzZWQgdG8gcHJvcGVyIGRpc3BsYXkgb2YgdG9vbHRpcFxuICAgICAgZGF0YXBvaW50TGFiZWw6IGRwLmxhYmVsIHx8ICcnLFxuICAgICAgZGF0YTogT2JqZWN0LmVudHJpZXMoZHAudmFsdWVzKS5tYXAoKFtkYXRlU3RyaW5nLCB2YWx1ZXNdKSA9PiB7XG4gICAgICAgIHJldHVybiBbZGF0ZVN0cmluZywgdmFsdWVzWzBdW3JlbmRlclR5cGVdXTtcbiAgICAgIH0pLFxuICAgICAgLi4uKGRpc3BsYXlPcHRpb25zLmZvcmNlTWVyZ2VEYXRhcG9pbnRzID8ge30gOiB7IHlBeGlzSW5kZXg6IGlkeCB9KSxcbiAgICAgIC4uLnRoaXMuY2hhcnRUeXBlc1NlcnZpY2UuZ2V0U2VyaWVzT3B0aW9ucyhkcCwgaXNNaW5NYXhDaGFydCwgcmVuZGVyVHlwZSlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBnZW5lcmFsIHRvb2x0aXAgZm9ybWF0dGVyIGZvciB0aGUgY2hhcnQuXG4gICAqIEByZXR1cm5zIFRvb2x0aXBGb3JtYXR0ZXJDYWxsYmFjazxUb3BMZXZlbEZvcm1hdHRlclBhcmFtcz5cbiAgICovXG4gIHByaXZhdGUgZ2V0VG9vbHRpcEZvcm1hdHRlcigpOiBUb29sdGlwRm9ybWF0dGVyQ2FsbGJhY2s8VG9wTGV2ZWxGb3JtYXR0ZXJQYXJhbXM+IHtcbiAgICByZXR1cm4gcGFyYW1zID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMpIHx8ICFwYXJhbXNbMF0/LmRhdGEpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IHBhcmFtc1swXS5kYXRhIGFzIFtzdHJpbmcsIC4uLmFueVtdXTtcbiAgICAgIGNvbnN0IFhBeGlzVmFsdWU6IHN0cmluZyA9IGRhdGFbMF07XG4gICAgICBjb25zdCBZQXhpc1JlYWRpbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgY29uc3QgYWxsU2VyaWVzID0gdGhpcy5lY2hhcnRzSW5zdGFuY2U/LmdldE9wdGlvbigpWydzZXJpZXMnXSBhcyBDdXN0b21TZXJpZXNPcHRpb25zW107XG5cbiAgICAgIGNvbnN0IGFsbERhdGFQb2ludFNlcmllcyA9IGFsbFNlcmllcy5maWx0ZXIoXG4gICAgICAgIHNlcmllcyA9PlxuICAgICAgICAgIHNlcmllc1sndHlwZU9mU2VyaWVzJ10gIT09ICdhbGFybScgJiZcbiAgICAgICAgICBzZXJpZXNbJ3R5cGVPZlNlcmllcyddICE9PSAnZXZlbnQnICYmXG4gICAgICAgICAgc2VyaWVzWyd0eXBlT2ZTZXJpZXMnXSAhPT0gJ2Zha2UnXG4gICAgICApO1xuXG4gICAgICBhbGxEYXRhUG9pbnRTZXJpZXMuZm9yRWFjaCgoc2VyaWVzOiBDdXN0b21TZXJpZXNPcHRpb25zKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZTogc3RyaW5nO1xuICAgICAgICBjb25zdCBpZCA9IHNlcmllc1snaWQnXSBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChpZC5lbmRzV2l0aCgnL21pbicpKSB7XG4gICAgICAgICAgY29uc3QgbWluVmFsdWUgPSB0aGlzLmZpbmRWYWx1ZUZvckV4YWN0T3JFYXJsaWVyVGltZXN0YW1wKFxuICAgICAgICAgICAgc2VyaWVzWydkYXRhJ10gYXMgU2VyaWVzVmFsdWVbXSxcbiAgICAgICAgICAgIFhBeGlzVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghbWluVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbWF4U2VyaWVzID0gYWxsRGF0YVBvaW50U2VyaWVzLmZpbmQocyA9PiBzWydpZCddID09PSBpZC5yZXBsYWNlKCcvbWluJywgJy9tYXgnKSk7XG4gICAgICAgICAgaWYgKCFtYXhTZXJpZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbWF4VmFsdWUgPSB0aGlzLmZpbmRWYWx1ZUZvckV4YWN0T3JFYXJsaWVyVGltZXN0YW1wKFxuICAgICAgICAgICAgbWF4U2VyaWVzWydkYXRhJ10gYXMgU2VyaWVzVmFsdWVbXSxcbiAgICAgICAgICAgIFhBeGlzVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXhWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9XG4gICAgICAgICAgICBgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHNlcGFyYXRvci10b3AgcC10LTggcC1iLThcIj5gICtcbiAgICAgICAgICAgIGA8bGFiZWwgY2xhc3M9XCJ0ZXh0LTEyIG0tci04IG0tYi0wXCI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShtaW5WYWx1ZVswXSl9PC9sYWJlbD5gICtcbiAgICAgICAgICAgIGA8ZGl2IGNsYXNzPVwibS1sLWF1dG8gdGV4dC0xMlwiID4ke21pblZhbHVlWzFdfSDigJQgJHttYXhWYWx1ZVsxXX1gICtcbiAgICAgICAgICAgIChzZXJpZXNbJ2RhdGFwb2ludFVuaXQnXSA/IGAgJHtzZXJpZXNbJ2RhdGFwb2ludFVuaXQnXX1gIDogJycpICtcbiAgICAgICAgICAgIGA8L2Rpdj48L2Rpdj5gO1xuICAgICAgICB9IGVsc2UgaWYgKGlkLmVuZHNXaXRoKCcvbWF4JykpIHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nLCB2YWx1ZSBpcyBoYW5kbGVkICBpbiAnbWluJyBjYXNlXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHNlcmllc1ZhbHVlID0gdGhpcy5maW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChcbiAgICAgICAgICAgIHNlcmllc1snZGF0YSddIGFzIFNlcmllc1ZhbHVlW10sXG4gICAgICAgICAgICBYQXhpc1ZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIXNlcmllc1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgIGA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgc2VwYXJhdG9yLXRvcCBwLXQtOCBwLWItOFwiPmAgK1xuICAgICAgICAgICAgYDxsYWJlbCBjbGFzcz1cInRleHQtMTIgbS1yLTggbS1iLTBcIj4ke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlcmllc1ZhbHVlWzBdKX08L2xhYmVsPmAgK1xuICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCJtLWwtYXV0byB0ZXh0LTEyXCIgPiR7c2VyaWVzVmFsdWVbMV0/LnRvU3RyaW5nKCl9YCArXG4gICAgICAgICAgICAoc2VyaWVzWydkYXRhcG9pbnRVbml0J10gPyBgICR7c2VyaWVzWydkYXRhcG9pbnRVbml0J119YCA6ICcnKSArXG4gICAgICAgICAgICBgPC9kaXY+PC9kaXY+YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW1TdHlsZSA9IHNlcmllc1snaXRlbVN0eWxlJ10gYXMgeyBjb2xvcjogc3RyaW5nIH07XG5cbiAgICAgICAgWUF4aXNSZWFkaW5ncy5wdXNoKFxuICAgICAgICAgIGA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC1iLThcIj48c3BhbiBjbGFzcz0nZGx0LWM4eS1pY29uLWNpcmNsZSBtLXItNCcgc3R5bGU9J2NvbG9yOiAke2l0ZW1TdHlsZS5jb2xvcn0nPjwvc3Bhbj5gICsgLy8gY29sb3IgY2lyY2xlXG4gICAgICAgICAgICBgPHN0cm9uZz4ke3Nlcmllc1snZGF0YXBvaW50TGFiZWwnXX0gPC9zdHJvbmc+PC9kaXY+YCArIC8vIG5hbWVcbiAgICAgICAgICAgIGAke3ZhbHVlfWAgLy8gc2luZ2xlIHZhbHVlIG9yIG1pbi1tYXggcmFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYDxkaXYgc3R5bGU9XCJ3aWR0aDogJHt0aGlzLlRPT0xUSVBfV0lEVEh9cHhcIj4ke1lBeGlzUmVhZGluZ3Muam9pbignJyl9PC9kaXY+YDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kVmFsdWVGb3JFeGFjdE9yRWFybGllclRpbWVzdGFtcChcbiAgICB2YWx1ZXM6IFNlcmllc1ZhbHVlW10sXG4gICAgdGltZXN0YW1wU3RyaW5nOiBEYXRlU3RyaW5nXG4gICk6IFNlcmllc1ZhbHVlIHwgbnVsbCB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUodGltZXN0YW1wU3RyaW5nKS52YWx1ZU9mKCk7XG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKGFjYzogU2VyaWVzVmFsdWUgfCBudWxsLCBjdXJyOiBTZXJpZXNWYWx1ZSkgPT4ge1xuICAgICAgaWYgKG5ldyBEYXRlKGN1cnJbMF0pLnZhbHVlT2YoKSA8PSB0aW1lc3RhbXApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFjYyA9PT0gbnVsbCB8fFxuICAgICAgICAgIE1hdGguYWJzKG5ldyBEYXRlKGN1cnJbMF0pLnZhbHVlT2YoKSAtIHRpbWVzdGFtcCkgPFxuICAgICAgICAgICAgTWF0aC5hYnMobmV3IERhdGUoYWNjWzBdKS52YWx1ZU9mKCkgLSB0aW1lc3RhbXApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBjdXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG51bGwpO1xuICB9XG59XG4iXX0=