@provoly/dashboard 0.18.4 → 0.18.5

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 (79) hide show
  1. package/assets/svgs/clear_filter.svg +7 -6
  2. package/assets/svgs/refresh_filter.svg +6 -7
  3. package/dataset/style/_o-pry-dataset.scss +1 -1
  4. package/esm2022/components/color-picker/color-picker.component.mjs +2 -2
  5. package/esm2022/dataset/style/css.component.mjs +2 -2
  6. package/esm2022/filters/date/date-filter.component.mjs +3 -3
  7. package/esm2022/filters/list/list-filter.component.mjs +3 -3
  8. package/esm2022/filters/number/number-filter.component.mjs +3 -3
  9. package/esm2022/filters/text/text-filter.component.mjs +3 -3
  10. package/esm2022/lib/core/i18n/en.translations.mjs +3 -2
  11. package/esm2022/lib/core/i18n/fr.translations.mjs +3 -2
  12. package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +5 -2
  13. package/esm2022/lib/core/store/data-source/datasource-utils.mjs +4 -2
  14. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +10 -11
  15. package/esm2022/lib/dashboard/filter/base-filter.component.mjs +5 -2
  16. package/esm2022/lib/dashboard/filter/components/filter-instanciator/filter-instanciator.component.mjs +11 -2
  17. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +3 -1
  18. package/esm2022/lib/dashboard/store/dashboard.contants.mjs +2 -2
  19. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +15 -2
  20. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +12 -1
  21. package/esm2022/presentation/components/presentation.component.mjs +5 -3
  22. package/esm2022/presentation/components/title-presentation/title-presentation.component.mjs +3 -4
  23. package/esm2022/presentation/i18n/en.translations.mjs +2 -2
  24. package/esm2022/presentation/i18n/fr.translations.mjs +2 -2
  25. package/esm2022/presentation/style/css.component.mjs +2 -2
  26. package/esm2022/restitution/style/css.component.mjs +2 -2
  27. package/esm2022/toolbox/components/refresh-datasets/refresh-datasets.component.mjs +3 -3
  28. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +45 -8
  29. package/esm2022/widgets/widget-aggregated-chart/style/css.component.mjs +2 -2
  30. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +3 -3
  31. package/esm2022/widgets/widget-table/style/css.component.mjs +2 -2
  32. package/fesm2022/provoly-dashboard-components-color-picker.mjs +1 -1
  33. package/fesm2022/provoly-dashboard-components-color-picker.mjs.map +1 -1
  34. package/fesm2022/provoly-dashboard-dataset.mjs +2 -2
  35. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  36. package/fesm2022/provoly-dashboard-filters-date.mjs +2 -2
  37. package/fesm2022/provoly-dashboard-filters-date.mjs.map +1 -1
  38. package/fesm2022/provoly-dashboard-filters-list.mjs +2 -2
  39. package/fesm2022/provoly-dashboard-filters-list.mjs.map +1 -1
  40. package/fesm2022/provoly-dashboard-filters-number.mjs +2 -2
  41. package/fesm2022/provoly-dashboard-filters-number.mjs.map +1 -1
  42. package/fesm2022/provoly-dashboard-filters-text.mjs +2 -2
  43. package/fesm2022/provoly-dashboard-filters-text.mjs.map +1 -1
  44. package/fesm2022/provoly-dashboard-presentation.mjs +11 -9
  45. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  46. package/fesm2022/provoly-dashboard-restitution.mjs +2 -2
  47. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  48. package/fesm2022/provoly-dashboard-toolbox.mjs +2 -2
  49. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  50. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +46 -9
  51. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  52. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +4 -4
  53. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  54. package/fesm2022/provoly-dashboard.mjs +55 -10
  55. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  56. package/lib/core/i18n/en.translations.d.ts +1 -0
  57. package/lib/core/i18n/fr.translations.d.ts +1 -0
  58. package/lib/dashboard/components/widgets/header/widget-header.component.d.ts +1 -1
  59. package/lib/dashboard/filter/base-filter.component.d.ts +2 -0
  60. package/lib/dashboard/filter/components/filter-instanciator/filter-instanciator.component.d.ts +5 -2
  61. package/lib/dashboard/store/dashboard.actions.d.ts +2 -0
  62. package/lib/dashboard/store/dashboard.contants.d.ts +1 -1
  63. package/lib/dashboard/store/dashboard.effects.d.ts +3 -0
  64. package/package.json +1 -1
  65. package/presentation/style/_o-pry-new-presentation.scss +1 -1
  66. package/presentation/style/_o-pry-presentation.scss +7 -1
  67. package/styles/components/_a-btn.scss +14 -13
  68. package/styles/components/_a-color-picker.scss +1 -0
  69. package/styles/components/_m-filter.scss +57 -2
  70. package/styles/components/_o-about.scss +1 -1
  71. package/styles/components/_o-widget.scss +4 -2
  72. package/styles/layout/_o-workspace.scss +23 -1
  73. package/styles-theme/abstracts-theme/variables/_variables-typo.scss +10 -1
  74. package/styles-theme/components-theme/_m-filter.theme.scss +25 -1
  75. package/styles-theme/components-theme/_m-tooltip.theme.scss +2 -2
  76. package/styles-theme/components-theme/_o-pry-dataset.theme.scss +1 -1
  77. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +1 -0
  78. package/widgets/widget-aggregated-chart/style/_o-widget-chart.scss +5 -0
  79. package/widgets/widget-table/style/_o-widget-table.scss +15 -0
@@ -3,7 +3,7 @@ import { ClassSelectors, DataWidgetComponent, FieldSelectors, FieldType, GraphTy
3
3
  import { BehaviorSubject, combineLatest, debounceTime, filter, fromEvent, map, share, startWith, Subject, switchMap, tap, withLatestFrom } from 'rxjs';
4
4
  import embed, { vega } from 'vega-embed';
5
5
  import { mergeDeep } from 'vega-lite';
6
- import { fontConfig } from 'vega-lite/build/src/config';
6
+ import { initConfig } from 'vega-lite/build/src/config';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@ngrx/store";
9
9
  import * as i2 from "@provoly/dashboard";
@@ -306,7 +306,7 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
306
306
  }
307
307
  }
308
308
  ],
309
- config: fontConfig('Ubuntu, sans-serif')
309
+ config: this.getChartConfig()
310
310
  }, options.additionalSpec);
311
311
  }));
312
312
  this.sortAttributes$ = this.optionsCopy$.pipe(map((options) => {
@@ -350,12 +350,15 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
350
350
  this.subscriptions.add(combineLatest([this.vegaLiteSpec$, this.trigger$]).subscribe(([spec, _]) => {
351
351
  if (this.vega) {
352
352
  this.view?.finalize();
353
- //console.log(JSON.stringify(spec));
353
+ // console.log(JSON.stringify(spec));
354
354
  embed(this.vega.nativeElement, JSON.parse(JSON.stringify(spec)), {
355
355
  actions: false,
356
356
  renderer: 'canvas',
357
357
  formatLocale: this.translateService.instantObject('@pry.widget.chart.numberLocale'),
358
- timeFormatLocale: this.translateService.instantObject('@pry.widget.chart.timeFormatLocale')
358
+ timeFormatLocale: this.translateService.instantObject('@pry.widget.chart.timeFormatLocale'),
359
+ tooltip: {
360
+ theme: 'custom'
361
+ }
359
362
  })
360
363
  .then((result) => (this.view = result.view))
361
364
  .catch((err) => console.error('Cannot display chart', err));
@@ -414,7 +417,41 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
414
417
  this.openData$.next(undefined);
415
418
  }
416
419
  getTitle(options) {
417
- return options.graph?.title ?? (options.abscissa.label ?? 'key') + ' / ' + (options.ordinate.label ?? 'value');
420
+ return options.graph?.title ?? undefined;
421
+ }
422
+ getChartConfig() {
423
+ return initConfig({
424
+ style: {
425
+ 'guide-label': {
426
+ // axis tick titles
427
+ font: 'Ubuntu, sans-serif',
428
+ fontSize: 12,
429
+ fontWeight: 600,
430
+ fill: '#263340'
431
+ },
432
+ 'guide-title': {
433
+ // axis title
434
+ font: 'Ubuntu, sans-serif',
435
+ fontSize: 12,
436
+ fontWeight: 600,
437
+ fill: '#263340'
438
+ },
439
+ 'group-title': {
440
+ // chart title
441
+ font: 'Ubuntu, sans-serif',
442
+ fontSize: 12,
443
+ fontWeight: 600,
444
+ fill: '#263340'
445
+ },
446
+ 'group-subtitle': {
447
+ // not sure
448
+ font: 'Ubuntu, sans-serif',
449
+ fontSize: 12,
450
+ fontWeight: 600,
451
+ fill: '#263340'
452
+ }
453
+ }
454
+ });
418
455
  }
419
456
  changeChartTitle($event) {
420
457
  if (this.optionsCopy$.value) {
@@ -767,13 +804,13 @@ export class WidgetAggregatedChartComponent extends DataWidgetComponent {
767
804
  }
768
805
  }
769
806
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetAggregatedChartComponent, deps: [{ token: i1.Store }, { token: i2.PryI18nService }, { token: i0.ElementRef }, { token: i2.PryAggregationService }, { token: i3.PrySchemeService }], target: i0.ɵɵFactoryTarget.Component }); }
770
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetAggregatedChartComponent, selector: "pry-widget-aggregated-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-scheme-picker\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n ></pry-scheme-picker>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleSort($event)\" [ngModel]=\"!!optionsCopy.graph.sort\"\n >{{ '@pry.widget.chart.sort.title' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"!!optionsCopy.graph.sort\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Attribute</label>\n <pry-select\n (ngModelChange)=\"changeSortAttribute($event)\"\n [ngModel]=\"optionsCopy.graph.sort.attribute\"\n [items]=\"sortAttributes$ | async\"\n bindValue=\"id\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortAttr\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Sort</label>\n <pry-select\n (ngModelChange)=\"changeSortDirection($event)\"\n [ngModel]=\"optionsCopy.graph.sort.direction\"\n [items]=\"sortDirections\"\n bindValue=\"value\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortDirection\"\n ></pry-select>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type === GraphType.DONUT || optionsCopy.graph.type === GraphType.CIRCULAR\"\n >\n <pry-scheme-picker\n (ngModelChange)=\"changeCircleColorScheme($event)\"\n [ngModel]=\"optionsCopy.circleColorScheme\"\n ></pry-scheme-picker>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR &&\n !optionsCopy.groupBy\n \"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_baseColor\">{{ '@pry.widget.chart.color' | i18n }}</label>\n <pry-color-picker\n (ngModelChange)=\"changeBaseColor($event)\"\n [ngModel]=\"optionsCopy.baseColor\"\n id=\"chart_baseColor\"\n class=\"a-pry-select\"\n ></pry-color-picker>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <div class=\"a-chips -md\" [style.background-color]=\"item\">{{ item }}</div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i6.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i7.PryColorPickerComponent, selector: "pry-color-picker" }, { kind: "component", type: i3.PrySchemePickerComponent, selector: "pry-scheme-picker" }, { kind: "component", type: i8.PryWidgetAggregatedChartCssComponent, selector: "pry-widget-aggregated-chart-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i2.PrySortDataPipe, name: "prySortData" }] }); }
807
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetAggregatedChartComponent, selector: "pry-widget-aggregated-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-scheme-picker\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n ></pry-scheme-picker>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleSort($event)\" [ngModel]=\"!!optionsCopy.graph.sort\"\n >{{ '@pry.widget.chart.sort.title' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"!!optionsCopy.graph.sort\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Attribute</label>\n <pry-select\n (ngModelChange)=\"changeSortAttribute($event)\"\n [ngModel]=\"optionsCopy.graph.sort.attribute\"\n [items]=\"sortAttributes$ | async\"\n bindValue=\"id\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortAttr\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Sort</label>\n <pry-select\n (ngModelChange)=\"changeSortDirection($event)\"\n [ngModel]=\"optionsCopy.graph.sort.direction\"\n [items]=\"sortDirections\"\n bindValue=\"value\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortDirection\"\n ></pry-select>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type === GraphType.DONUT || optionsCopy.graph.type === GraphType.CIRCULAR\"\n >\n <pry-scheme-picker\n (ngModelChange)=\"changeCircleColorScheme($event)\"\n [ngModel]=\"optionsCopy.circleColorScheme\"\n ></pry-scheme-picker>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR &&\n !optionsCopy.groupBy\n \"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_baseColor\">{{ '@pry.widget.chart.color' | i18n }}</label>\n <pry-color-picker\n (ngModelChange)=\"changeBaseColor($event)\"\n [ngModel]=\"optionsCopy.baseColor\"\n id=\"chart_baseColor\"\n class=\"a-pry-select\"\n ></pry-color-picker>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <div class=\"a-chips -md\" [style.background-color]=\"item\">{{ item }}</div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i6.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i7.PryColorPickerComponent, selector: "pry-color-picker" }, { kind: "component", type: i3.PrySchemePickerComponent, selector: "pry-scheme-picker" }, { kind: "component", type: i8.PryWidgetAggregatedChartCssComponent, selector: "pry-widget-aggregated-chart-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i2.PrySortDataPipe, name: "prySortData" }] }); }
771
808
  }
772
809
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetAggregatedChartComponent, decorators: [{
773
810
  type: Component,
774
- args: [{ selector: 'pry-widget-aggregated-chart', template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-scheme-picker\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n ></pry-scheme-picker>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleSort($event)\" [ngModel]=\"!!optionsCopy.graph.sort\"\n >{{ '@pry.widget.chart.sort.title' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"!!optionsCopy.graph.sort\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Attribute</label>\n <pry-select\n (ngModelChange)=\"changeSortAttribute($event)\"\n [ngModel]=\"optionsCopy.graph.sort.attribute\"\n [items]=\"sortAttributes$ | async\"\n bindValue=\"id\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortAttr\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Sort</label>\n <pry-select\n (ngModelChange)=\"changeSortDirection($event)\"\n [ngModel]=\"optionsCopy.graph.sort.direction\"\n [items]=\"sortDirections\"\n bindValue=\"value\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortDirection\"\n ></pry-select>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type === GraphType.DONUT || optionsCopy.graph.type === GraphType.CIRCULAR\"\n >\n <pry-scheme-picker\n (ngModelChange)=\"changeCircleColorScheme($event)\"\n [ngModel]=\"optionsCopy.circleColorScheme\"\n ></pry-scheme-picker>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR &&\n !optionsCopy.groupBy\n \"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_baseColor\">{{ '@pry.widget.chart.color' | i18n }}</label>\n <pry-color-picker\n (ngModelChange)=\"changeBaseColor($event)\"\n [ngModel]=\"optionsCopy.baseColor\"\n id=\"chart_baseColor\"\n class=\"a-pry-select\"\n ></pry-color-picker>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <div class=\"a-chips -md\" [style.background-color]=\"item\">{{ item }}</div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n" }]
811
+ args: [{ selector: 'pry-widget-aggregated-chart', template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-scheme-picker\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n ></pry-scheme-picker>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleSort($event)\" [ngModel]=\"!!optionsCopy.graph.sort\"\n >{{ '@pry.widget.chart.sort.title' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"!!optionsCopy.graph.sort\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Attribute</label>\n <pry-select\n (ngModelChange)=\"changeSortAttribute($event)\"\n [ngModel]=\"optionsCopy.graph.sort.attribute\"\n [items]=\"sortAttributes$ | async\"\n bindValue=\"id\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortAttr\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Sort</label>\n <pry-select\n (ngModelChange)=\"changeSortDirection($event)\"\n [ngModel]=\"optionsCopy.graph.sort.direction\"\n [items]=\"sortDirections\"\n bindValue=\"value\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortDirection\"\n ></pry-select>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type === GraphType.DONUT || optionsCopy.graph.type === GraphType.CIRCULAR\"\n >\n <pry-scheme-picker\n (ngModelChange)=\"changeCircleColorScheme($event)\"\n [ngModel]=\"optionsCopy.circleColorScheme\"\n ></pry-scheme-picker>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR &&\n !optionsCopy.groupBy\n \"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_baseColor\">{{ '@pry.widget.chart.color' | i18n }}</label>\n <pry-color-picker\n (ngModelChange)=\"changeBaseColor($event)\"\n [ngModel]=\"optionsCopy.baseColor\"\n id=\"chart_baseColor\"\n class=\"a-pry-select\"\n ></pry-color-picker>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <div class=\"a-chips -md\" [style.background-color]=\"item\">{{ item }}</div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n" }]
775
812
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.PryI18nService }, { type: i0.ElementRef }, { type: i2.PryAggregationService }, { type: i3.PrySchemeService }]; }, propDecorators: { vega: [{
776
813
  type: ViewChild,
777
814
  args: ['vega']
778
815
  }] } });
779
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFJTCxjQUFjLEVBRWQsbUJBQW1CLEVBRW5CLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUlULGVBQWUsRUFDZixTQUFTLEVBR1QsYUFBYSxFQUViLFFBQVEsRUFDUixvQkFBb0IsRUFDckIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxHQUFHLEVBRUgsS0FBSyxFQUNMLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxFQUNULEdBQUcsRUFDSCxjQUFjLEVBQ2YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLDhCQUErQixTQUFRLG1CQUFtQjtJQXdDckUsWUFD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SjFDLFNBQVM7K0JBQ0UsNkJBQTZCO3FOQUlwQixJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMsXG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgRGF0YXNldCxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEdyYXBoVHlwZSxcbiAgTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCxcbiAgTXVsdGlDbGFzc1NlYXJjaFBheWxvYWQsXG4gIE5hbWVkUXVlcnksXG4gIE5hbWVkUXVlcnlUeXBlcyxcbiAgT3BlcmF0aW9uLFxuICBQcnlBZ2dyZWdhdGlvblNlcnZpY2UsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBTZWFyY2hBY3Rpb25zLFxuICBWYWx1ZVR5cGUsXG4gIFZlZ2FUeXBlLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHNoYXJlLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFwLFxuICB3aXRoTGF0ZXN0RnJvbVxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZpZXcgfSBmcm9tICd2ZWdhJztcbmltcG9ydCBlbWJlZCwgeyB2ZWdhIH0gZnJvbSAndmVnYS1lbWJlZCc7XG5pbXBvcnQgeyBtZXJnZURlZXAsIFRvcExldmVsU3BlYyB9IGZyb20gJ3ZlZ2EtbGl0ZSc7XG5pbXBvcnQgeyBmb250Q29uZmlnIH0gZnJvbSAndmVnYS1saXRlL2J1aWxkL3NyYy9jb25maWcnO1xuaW1wb3J0IHsgUHJ5U2NoZW1lU2VydmljZSB9IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZC9jb21wb25lbnRzL3NjaGVtZS1waWNrZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudCBleHRlbmRzIERhdGFXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgndmVnYScpIHZlZ2EhOiBFbGVtZW50UmVmO1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9uc0NvcHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zIHwgbnVsbD4obnVsbCk7XG4gIHZpZXc/OiBWaWV3O1xuICB0cmlnZ2VyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHZlZ2FMaXRlU3BlYyQ6IE9ic2VydmFibGU8VG9wTGV2ZWxTcGVjPjtcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIGF0dHJpYnV0ZVR5cGVzJDogT2JzZXJ2YWJsZTx7XG4gICAgb3JkaW5hdGU6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBmaWVsZFR5cGU6IGFueTsgbmFtZTogc3RyaW5nIH07XG4gICAgYWJzY2lzc2E6IHsgdmVnYVR5cGU6IFZlZ2FUeXBlOyBmaWVsZFR5cGU6IGFueTsgbmFtZTogc3RyaW5nIH07XG4gICAgZ3JvdXBCeTogeyB2ZWdhVHlwZT86IFZlZ2FUeXBlOyBmaWVsZFR5cGU/OiBhbnk7IG5hbWU6IHN0cmluZyB9O1xuICB9PjtcbiAgYWdncmVnYXRlZFZhbHVlcyQ6IE9ic2VydmFibGU8eyBkYXRhOiBhbnk7IG9wZXJhdGlvbjogYW55IH0+O1xuICBXSURHRVRfSEVBREVSX0hFSUdIVCA9IFdJREdFVF9IRUFERVJfSEVJR0hUO1xuICBHcmFwaFR5cGUgPSBHcmFwaFR5cGU7XG4gIE9wZXJhdGlvbiA9IE9wZXJhdGlvbjtcbiAgaXNDaGFydFZhbGlkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdHlwZU9wdGlvbnM6IHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcbiAgb3BlcmF0aW9ucyQ6IE9ic2VydmFibGU8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXT47XG4gIGFic2Npc3NhQXR0cmlidXRlcyQ6IE9ic2VydmFibGU8QXR0cmlidXRlW10+O1xuICBjbGFzc2VzOiBDbGFzc1tdID0gW107XG4gIGZpZWxkczogRmllbGRbXSA9IFtdO1xuICBvcmRpbmF0ZUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgdHJpZ2dlck9yZGluYXRlQXR0cmlidXRlcyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb3B5QWJzY2lzc2FGaWVsZD86IEZpZWxkO1xuICBjb3B5T3JkaW5hdGVGaWVsZD86IEZpZWxkO1xuICBub0RhdGEkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzb3J0QWN0aXZlPyA9ICduYW1lJztcbiAgc29ydERpcmVjdGlvbj8gPSAnYXNjJztcbiAgc29ydEF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPHsgaWQ/OiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nIH1bXT47XG4gIHNvcnREaXJlY3Rpb25zID0gW1xuICAgIHsgdmFsdWU6ICdhc2MnLCBsYWJlbDogJycgfSxcbiAgICB7IHZhbHVlOiAnZGVzYycsIGxhYmVsOiAnJyB9XG4gIF07XG4gIG5vQWdncmVnYXRpb25EYXRhJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgYWxsb3dlZENsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuICBjb2xvcnMgPSB2ZWdhLnNjaGVtZSgnUHJvdm9seScpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUHJ5STE4blNlcnZpY2UsXG4gICAgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGlvblNlcnZpY2U6IFByeUFnZ3JlZ2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHNjaGVtZVNlcnZpY2U6IFByeVNjaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcbiAgICB0aGlzLnR5cGVPcHRpb25zID0gT2JqZWN0LnZhbHVlcyhHcmFwaFR5cGUpXG4gICAgICAubWFwKCh2KSA9PiAoe1xuICAgICAgICBpZDogdixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5ncmFwaFR5cGUuJyArIHYpXG4gICAgICB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpO1xuXG4gICAgdGhpcy5vcHRpb25zJCA9IHRoaXMubWFuaWZlc3QkLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChtYW5pZmVzdCkgPT5cbiAgICAgICAgICBtZXJnZURlZXAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGdyYXBoOiB7IHR5cGU6IEdyYXBoVHlwZS5CQVIsIHRvb2x0aXA6IHRydWUsIGxlZ2VuZDogZmFsc2UgfSxcbiAgICAgICAgICAgICAgYWJzY2lzc2E6IHsga2VlcDA6IHRydWUgfSxcbiAgICAgICAgICAgICAgb3JkaW5hdGU6IHsga2VlcDA6IHRydWUgfVxuICAgICAgICAgICAgfSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zLFxuICAgICAgICAgICAgKG1hbmlmZXN0Lm9wdGlvbnMgPz8ge30pIGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnNcbiAgICAgICAgICApIGFzIENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnNcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSkpO1xuICAgIH0pO1xuICAgIHRoaXMuZmllbGRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcyk7XG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuXG4gICAgdGhpcy5vcGVyYXRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzdWx0U2V0JCwgdGhpcy5jbGFzc2VzJCwgdGhpcy5maWVsZHMkXSkucGlwZShcbiAgICAgIG1hcCgoW3JzLCBjbGFzc2VzLCBmaWVsZHNdKSA9PlxuICAgICAgICBjbGFzc2VzXG4gICAgICAgICAgLmZpbHRlcigoY2xhenopID0+IE9iamVjdC5rZXlzKHJzLml0ZW1zKS5pbmNsdWRlcyhjbGF6ei5pZCkpXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpXG4gICAgICAgICAgLm1hcCgoYXR0cnMpID0+XG4gICAgICAgICAgICBhdHRycy5maWx0ZXIoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gISFmaWVsZCAmJiBbRmllbGRUeXBlLklOVEVHRVIsIEZpZWxkVHlwZS5ERUNJTUFMLCBGaWVsZFR5cGUuTE9OR10uaW5jbHVkZXMoZmllbGQudHlwZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGF0dHIpID0+ICEhYXR0cilcbiAgICAgICksXG4gICAgICBtYXAoKGF0dHJpYnV0ZXMpID0+XG4gICAgICAgIChhdHRyaWJ1dGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IE9iamVjdC52YWx1ZXMoT3BlcmF0aW9uKS5maWx0ZXIoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uICE9PSBPcGVyYXRpb24uRVhURU5UKVxuICAgICAgICAgIDogW09wZXJhdGlvbi5DT1VOVCwgT3BlcmF0aW9uLkRJU1RJTkNULCBPcGVyYXRpb24uTk9ORV1cbiAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKHYpID0+ICh7XG4gICAgICAgICAgICBpZDogdixcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQub3BlcmF0aW9uLicgKyB2KVxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5maWVsZHMkLnN1YnNjcmliZSgoZmllbGRzKSA9PiAodGhpcy5maWVsZHMgPSBmaWVsZHMpKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmNsYXNzZXMkLnN1YnNjcmliZSgoY2xhc3NlcykgPT4gKHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMpKSk7XG5cbiAgICB0aGlzLmFsbG93ZWRDbGFzc2VzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY2xhc3NlcyQsIHRoaXMudXNlZERhdGFzb3VyY2VzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjbGFzc2VzLCBkYXRhc291cmNlc10pID0+IHtcbiAgICAgICAgY29uc3QgaGFzRnVsbFRleHQgPSBkYXRhc291cmNlc1xuICAgICAgICAgIC5tYXAoKGRzKSA9PiBkcy5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgZHMucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTVVMVElfQ0xBU1MpXG4gICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gcCB8fCBjLCBmYWxzZSk7XG5cbiAgICAgICAgY29uc3QgbXVsdGlDbGFzc0RhdGFzb3VyY2VzQ2xhc3NlcyA9IGRhdGFzb3VyY2VzXG4gICAgICAgICAgLmZpbHRlcigoZHMpID0+IGRzLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiBkcy5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5NVUxUSV9DTEFTUylcbiAgICAgICAgICAubWFwKChtdWx0aURzKSA9PiAobXVsdGlEcyBhcyBOYW1lZFF1ZXJ5KS5yZXF1ZXN0IGFzIE11bHRpQ2xhc3NTZWFyY2hQYXlsb2FkKVxuICAgICAgICAgIC5tYXAoKHBheWxvYWQpID0+IHBheWxvYWQub0NsYXNzZXMpO1xuXG4gICAgICAgIGNvbnN0IGhhc011bHRpTm9DbGFzcyA9IG11bHRpQ2xhc3NEYXRhc291cmNlc0NsYXNzZXMuaW5jbHVkZXModW5kZWZpbmVkKTtcblxuICAgICAgICBjb25zdCBtdWx0aUNsYXNzZXMgPSAoXG4gICAgICAgICAgbXVsdGlDbGFzc0RhdGFzb3VyY2VzQ2xhc3Nlcy5maWx0ZXIoKGNsYXNzZXMpID0+ICEhY2xhc3NlcykgYXMgdW5rbm93biBhcyBzdHJpbmdbXVxuICAgICAgICApLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSBhcyBzdHJpbmdbXSk7XG5cbiAgICAgICAgY29uc3Qgc2luZ2xlQ2xhc3NlcyA9IGRhdGFzb3VyY2VzXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChkcykgPT5cbiAgICAgICAgICAgICAgKGRzLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJiBkcy5yZXF1ZXN0LnR5cGUgPT09IE5hbWVkUXVlcnlUeXBlcy5NT05PX0NMQVNTKSB8fFxuICAgICAgICAgICAgICBkcy5zb3VyY2VUeXBlID09PSAnZGF0YXNldCdcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChzaW5nbGVEcykgPT5cbiAgICAgICAgICAgICAgKHNpbmdsZURzIGFzIERhdGFzZXQpLm9DbGFzcyA/PyAoKHNpbmdsZURzIGFzIE5hbWVkUXVlcnkpLnJlcXVlc3QgYXMgTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCkub0NsYXNzXG4gICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoXG4gICAgICAgICAgKGNsYXp6KSA9PlxuICAgICAgICAgICAgaGFzRnVsbFRleHQgfHwgaGFzTXVsdGlOb0NsYXNzIHx8IG11bHRpQ2xhc3Nlcy5pbmNsdWRlcyhjbGF6ei5pZCkgfHwgc2luZ2xlQ2xhc3Nlcy5pbmNsdWRlcyhjbGF6ei5pZClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWJzY2lzc2FBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZmllbGRzJCwgdGhpcy5hbGxvd2VkQ2xhc3NlcyQsIHRoaXMub3B0aW9uc0NvcHkkXSkucGlwZShcbiAgICAgIG1hcCgoW2ZpZWxkcywgYWxsb3dlZENsYXNzZXMsIG9wdGlvbkNvcHldKSA9PlxuICAgICAgICBhbGxvd2VkQ2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmlkID09PSBhdHRyLmZpZWxkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAhIWZpZWxkICYmXG4gICAgICAgICAgICAgICAgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlJBVyAmJlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5TVFJJTkcgJiZcbiAgICAgICAgICAgICAgICAob3B0aW9uQ29weT8uZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkhJU1RPR1JBTSB8fCBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuS0VZV09SRClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMub3JkaW5hdGVBdHRyaWJ1dGVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5maWVsZHMkLFxuICAgICAgdGhpcy5hbGxvd2VkQ2xhc3NlcyQsXG4gICAgICB0aGlzLnRyaWdnZXJPcmRpbmF0ZUF0dHJpYnV0ZXMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2ZpZWxkcywgYWxsb3dlZENsYXNzZXNdKSA9PlxuICAgICAgICBhbGxvd2VkQ2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmlkID09PSBhdHRyLmZpZWxkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk1BWCxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5NSU4sXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uU1VNLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlExLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlEzLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLkFWRVJBR0UsXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uTUVESUFOLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk5PTkVcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLm9yZGluYXRlLm9wZXJhdGlvbilcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICEhZmllbGQgJiZcbiAgICAgICAgICAgICAgICAgIFtGaWVsZFR5cGUuSU5URUdFUiwgRmllbGRUeXBlLklOU1RBTlQsIEZpZWxkVHlwZS5MT05HLCBGaWVsZFR5cGUuREVDSU1BTF0uaW5jbHVkZXMoZmllbGQudHlwZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAhIWZpZWxkICYmIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcgJiYgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLlNUUklORztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuaXNDaGFydFZhbGlkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub3B0aW9ucyQsIHRoaXMuYWJzY2lzc2FBdHRyaWJ1dGVzJCwgdGhpcy5vcmRpbmF0ZUF0dHJpYnV0ZXMkXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIGFic2Npc3NhQXR0cnMsIG9yZGluYXRlQXR0cnNdKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgISFvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSAmJlxuICAgICAgICAgIGFic2Npc3NhQXR0cnMubWFwKChhdHRyKSA9PiBhdHRyLmlkKS5pbmNsdWRlcyhvcHRpb25zLmFic2Npc3NhLmF0dHJpYnV0ZSkgJiZcbiAgICAgICAgICAob3B0aW9ucy5vcmRpbmF0ZS5hdHRyaWJ1dGVcbiAgICAgICAgICAgID8gb3JkaW5hdGVBdHRycy5tYXAoKGF0dHIpID0+IGF0dHIuaWQpLmluY2x1ZGVzKG9wdGlvbnMub3JkaW5hdGUuYXR0cmlidXRlKVxuICAgICAgICAgICAgOiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hdHRyaWJ1dGVUeXBlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnNDb3B5JCwgdGhpcy5maWVsZHMkLCB0aGlzLmNsYXNzZXMkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW29wdGlvbnMsIGZpZWxkcywgY2xhc3Nlc10pID0+ICEhb3B0aW9ucyAmJiAhIW9wdGlvbnMuYWJzY2lzc2EgJiYgISFvcHRpb25zLm9yZGluYXRlKSxcbiAgICAgIG1hcCgoW29wdGlvbnMsIGZpZWxkcywgY2xhc3Nlc10pID0+IHtcbiAgICAgICAgY29uc3QgYWJzY2lzc2EgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucyEuYWJzY2lzc2EuYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3Qgb3JkaW5hdGUgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucyEub3JkaW5hdGUuYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3QgZ3JvdXBCeSA9IGNsYXNzZXNcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLmlkID09PSBvcHRpb25zPy5ncm91cEJ5Py5hdHRyaWJ1dGUpKVxuICAgICAgICAgIC5maW5kKChhdHRyKSA9PiAhIWF0dHIpO1xuICAgICAgICBjb25zdCBhYnNjaXNzYUZpZWxkVHlwZSA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGFic2Npc3NhPy5maWVsZCk/LnR5cGUgPz8gRmllbGRUeXBlLlNUUklORztcbiAgICAgICAgY29uc3Qgb3JkaW5hdGVGaWVsZFR5cGUgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBvcmRpbmF0ZT8uZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgIGNvbnN0IGdyb3VwQnlGaWVsZFR5cGUgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBncm91cEJ5Py5maWVsZCk/LnR5cGUgPz8gRmllbGRUeXBlLlNUUklORztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgICAgZmllbGRUeXBlOiBhYnNjaXNzYUZpZWxkVHlwZSxcbiAgICAgICAgICAgIHZlZ2FUeXBlOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUoYWJzY2lzc2FGaWVsZFR5cGUsIGFic2Npc3NhPy5uYW1lID8/ICcnKSxcbiAgICAgICAgICAgIG5hbWU6IGFic2Npc3NhPy5uYW1lID8/ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcmRpbmF0ZToge1xuICAgICAgICAgICAgZmllbGRUeXBlOiBvcmRpbmF0ZUZpZWxkVHlwZSxcbiAgICAgICAgICAgIHZlZ2FUeXBlOlxuICAgICAgICAgICAgICBvcHRpb25zIS5vcmRpbmF0ZS5vcGVyYXRpb24gPT09IE9wZXJhdGlvbi5DT1VOVCB8fCBvcHRpb25zIS5vcmRpbmF0ZS5vcGVyYXRpb24gPT09IE9wZXJhdGlvbi5ESVNUSU5DVFxuICAgICAgICAgICAgICAgID8gVmVnYVR5cGUuUVVBTlRJVEFUSVZFXG4gICAgICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZVRvVmVnYVR5cGUob3JkaW5hdGVGaWVsZFR5cGUsIG9yZGluYXRlPy5uYW1lID8/ICcnKSxcbiAgICAgICAgICAgIG5hbWU6IG9yZGluYXRlPy5uYW1lID8/ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgICBmaWVsZFR5cGU6IGdyb3VwQnlGaWVsZFR5cGUsXG4gICAgICAgICAgICB2ZWdhVHlwZTogdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKGdyb3VwQnlGaWVsZFR5cGUsIGdyb3VwQnk/Lm5hbWUpLFxuICAgICAgICAgICAgbmFtZTogZ3JvdXBCeT8ubmFtZSA/PyAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWdncmVnYXRlZFZhbHVlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZGF0YXNvdXJjZUlkcyQsXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgY29tYmluZUxhdGVzdChbZnJvbUV2ZW50KHdpbmRvdywgJ2RhdGFzb3VyY2VSZWZyZXNoJyksIHRoaXMuZGF0YXNvdXJjZUlkcyRdKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKFtldmVudCwgZGF0YXNvdXJjZXNdKSA9PiBkYXRhc291cmNlcy5pbmNsdWRlcygoZXZlbnQgYXMgQ3VzdG9tRXZlbnQpLmRldGFpbCkpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKVxuICAgICAgKVxuICAgIF0pLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgIHRhcCgoW2RhdGFzb3VyY2VzXSkgPT4gdGhpcy5zdG9yZS5kaXNwYXRjaChTZWFyY2hBY3Rpb25zLnNldFNlYXJjaExvYWRpbmcoeyBkYXRhc291cmNlcywgc3RhcnQ6IHRydWUgfSkpKSxcbiAgICAgIHN3aXRjaE1hcCgoW2RhdGFzb3VyY2VzLCBvcHRpb25zXSkgPT5cbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvblNlcnZpY2VcbiAgICAgICAgICAuYWdncmVnYXRlKGRhdGFzb3VyY2VzLCBvcHRpb25zKVxuICAgICAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLnN0b3JlLmRpc3BhdGNoKFNlYXJjaEFjdGlvbnMuc2V0U2VhcmNoTG9hZGluZyh7IGRhdGFzb3VyY2VzLCBzdGFydDogZmFsc2UgfSkpKSlcbiAgICAgICksXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLm9wdGlvbnMkKSxcbiAgICAgIG1hcCgoW2FnZ3JlZ2F0ZSwgb3B0aW9uc10pID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoYWdncmVnYXRlLnZhbHVlcy5sZW5ndGggPiAwICYmICFhZ2dyZWdhdGUudmFsdWVzWzBdLmdyb3VwQnkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBhZ2dyZWdhdGUub3BlcmF0aW9uLFxuICAgICAgICAgICAgZGF0YTogYWdncmVnYXRlLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgc2VyaWVzOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsIH0pKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmxhdHRlbmVkID0gKFxuICAgICAgICAgIGFnZ3JlZ2F0ZS52YWx1ZXMgYXMge1xuICAgICAgICAgICAga2V5OiBWYWx1ZVR5cGU7XG4gICAgICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgICAgIGtleTogVmFsdWVUeXBlO1xuICAgICAgICAgICAgICB2YWx1ZTogVmFsdWVUeXBlO1xuICAgICAgICAgICAgfVtdO1xuICAgICAgICAgIH1bXVxuICAgICAgICApXG4gICAgICAgICAgLm1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICB2YWx1ZS5ncm91cEJ5Lm1hcCgoZ3JvdXBCeSkgPT4gKHtcbiAgICAgICAgICAgICAga2V5OiB2YWx1ZS5rZXksXG4gICAgICAgICAgICAgIHNlcmllczogZ3JvdXBCeS5rZXksXG4gICAgICAgICAgICAgIHZhbHVlOiBncm91cEJ5LnZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSk7XG4gICAgICAgIHJldHVybiB7IG9wZXJhdGlvbjogYWdncmVnYXRlLm9wZXJhdGlvbiwgZGF0YTogZmxhdHRlbmVkIH07XG4gICAgICB9KSxcbiAgICAgIHN0YXJ0V2l0aCh7IG9wZXJhdGlvbjogT3BlcmF0aW9uLk5PTkUsIGRhdGE6IFtdIH0pLFxuICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICB0aGlzLm5vRGF0YSQgPSB0aGlzLmRhdGFzb3VyY2VJZHMkLnBpcGUobWFwKChpZHMpID0+IGlkcy5sZW5ndGggPT09IDApKTtcbiAgICB0aGlzLm5vQWdncmVnYXRpb25EYXRhJCA9IHRoaXMuYWdncmVnYXRlZFZhbHVlcyQucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhLmxlbmd0aCA9PT0gMCkpO1xuXG4gICAgdGhpcy52ZWdhTGl0ZVNwZWMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlcyQsXG4gICAgICB0aGlzLmFnZ3JlZ2F0ZWRWYWx1ZXMkLFxuICAgICAgdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSxcbiAgICAgIHRoaXMuZGlzcGxheUhlYWRlciRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgdHlwZXMsIHZhbHVlcywgc2l6ZSwgZGlzcGxheV0pID0+IHtcbiAgICAgICAgY29uc3QgaXNDaXJjdWxhciA9IFtHcmFwaFR5cGUuQ0lSQ1VMQVIsIEdyYXBoVHlwZS5ET05VVF0uaW5jbHVkZXMob3B0aW9ucy5ncmFwaC50eXBlKTtcbiAgICAgICAgY29uc3Qgc3RhY2tlZCA9IG9wdGlvbnMuZ3JhcGgudHlwZS5zdGFydHNXaXRoKCdiYXInKSA/ICFvcHRpb25zLmdyYXBoLnN0YWNrZWQgOiBvcHRpb25zLmdyYXBoLnN0YWNrZWQ7XG4gICAgICAgIGNvbnN0IGxlZ2VuZFRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgb3B0aW9ucy5ncm91cEJ5ID8gdHlwZXMuZ3JvdXBCeS5uYW1lID8/ICcnIDogJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxlZ2VuZExhYmVsJ1xuICAgICAgICApO1xuXG4gICAgICAgIChbb3B0aW9ucy5ncm91cEJ5Py5jb2xvciwgb3B0aW9ucy5jaXJjbGVDb2xvclNjaGVtZV0uZmlsdGVyKChzY2hlbWUpID0+ICEhc2NoZW1lKSBhcyBzdHJpbmdbXSkuZm9yRWFjaChcbiAgICAgICAgICAoc2NoZW1lKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjaGVtZVNlcnZpY2UuYXNzZXJ0U2NoZW1lKHNjaGVtZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWVyZ2VEZWVwKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICRzY2hlbWE6ICdodHRwczovL3ZlZ2EuZ2l0aHViLmlvL3NjaGVtYS92ZWdhLWxpdGUvdjUuanNvbicsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRUaXRsZShvcHRpb25zKSxcbiAgICAgICAgICAgIHdpZHRoOiAnY29udGFpbmVyJyxcbiAgICAgICAgICAgIGhlaWdodDogKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSAoZGlzcGxheSA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMCksXG4gICAgICAgICAgICBwYWRkaW5nOiAxMCxcbiAgICAgICAgICAgIGF1dG9zaXplOiB7IHR5cGU6ICdmaXQnLCBjb250YWluczogJ3BhZGRpbmcnIH0sXG4gICAgICAgICAgICBkYXRhOiB7IHZhbHVlczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZXMuZGF0YSkpIH0sXG4gICAgICAgICAgICBsYXllcjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFyazoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogb3B0aW9ucy5ncmFwaC50eXBlLnNwbGl0KCctJylbMF0gYXMgJ2FyYycgfCAnbGluZScgfCAncG9pbnQnIHwgJ2JhcicgfCAnYXJlYScsXG4gICAgICAgICAgICAgICAgICBwb2ludDogb3B0aW9ucy5ncmFwaC50eXBlLmluZGV4T2YoJ3BvaW50JykgPj0gMCxcbiAgICAgICAgICAgICAgICAgIGxpbmU6IG9wdGlvbnMuZ3JhcGgudHlwZS5pbmRleE9mKCdsaW5lJykgPj0gMCxcbiAgICAgICAgICAgICAgICAgIGlubmVyUmFkaXVzOiBvcHRpb25zLmdyYXBoLmRvbnV0U2l6ZSA/PyAzMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICAgIHg6ICFpc0NpcmN1bGFyXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnMuYWJzY2lzc2EubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVVbml0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUwgJiYgb3B0aW9ucy5hYnNjaXNzYS5saW1pdD8uaXNUaW1lTGltaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuYWJzY2lzc2EubGltaXQuaW50ZXJ2YWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbjogb3B0aW9ucy5ncmFwaC50eXBlLmluZGV4T2YoJ2hpc3RvZ3JhbScpID49IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBheGlzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9ybWF0OiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUwgPyAnJVktJUItJWRUJUg6JU06JVMnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uV2lkZ2V0QWdncmVnYXRlZENoYXJ0Q29tcG9uZW50Lm1pblRpY2sodHlwZXMuYWJzY2lzc2EuZmllbGRUeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxFeHByOiBgaGVpZ2h0IDwgMzAwID8gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJ0aW1lRm9ybWF0KGRhdHVtLnZhbHVlLCAnJVktJUItJWRUJUg6JU06JVMnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0cnVuY2F0ZShkYXR1bS52YWx1ZSwgMTApJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IDogJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuVEVNUE9SQUxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJ0aW1lRm9ybWF0KGRhdHVtLnZhbHVlLCAnJVktJUItJWRUJUg6JU06JVMnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdkYXR1bS52YWx1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBhIGZhbHNlIHZhbHVlIGhlcmUgc28gdGhhdCB2ZWdhIHVuZGVyc3RhbmRzIHByb3Blcmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHplcm86ICEhb3B0aW9ucy5hYnNjaXNzYS5rZWVwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAvL3R5cGU6IFdpZGdldENoYXJ0Q29tcG9uZW50LmlzVGltZVVuaXRVVEModmFyaWFibGVzWzBdKSA/ICd1dGMnIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHk6ICFpc0NpcmN1bGFyXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXhpczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5XaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQubWluVGljayh0eXBlcy5vcmRpbmF0ZS5maWVsZFR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnNldFRpY2tDb3VudCh2YWx1ZXMuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSA9PT0gVmVnYVR5cGUuUVVBTlRJVEFUSVZFID8gISFvcHRpb25zLm9yZGluYXRlLmtlZXAwIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oc3RhY2tlZCA/IHsgc3RhY2s6IHRydWUgfSA6IHt9KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB0aGV0YTogaXNDaXJjdWxhciA/IHsgZmllbGQ6ICd2YWx1ZScsIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGVnZW5kVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAhaXNDaXJjdWxhciA/ICghb3B0aW9ucy5ncm91cEJ5ID8gdW5kZWZpbmVkIDogJ3NlcmllcycpIDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgIGxlZ2VuZDogb3B0aW9ucy5ncmFwaC5sZWdlbmQsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiAhaXNDaXJjdWxhclxuICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5ncm91cEJ5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsgc2NoZW1lOiBvcHRpb25zLmdyb3VwQnk/LmNvbG9yID8/IHRoaXMuc2NoZW1lU2VydmljZS5nZXREZWZhdWx0U2NoZW1lKCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICA6IHsgc2NoZW1lOiBvcHRpb25zLmNpcmNsZUNvbG9yU2NoZW1lID8/IHRoaXMuc2NoZW1lU2VydmljZS5nZXREZWZhdWx0U2NoZW1lKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgICAgIWlzQ2lyY3VsYXIgJiYgIW9wdGlvbnMuZ3JvdXBCeVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmJhc2VDb2xvciA/PyB0aGlzLnNjaGVtZVNlcnZpY2UuZ2V0U2NoZW1lQ29sb3JzKHRoaXMuc2NoZW1lU2VydmljZS5nZXREZWZhdWx0U2NoZW1lKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHhPZmZzZXQ6IHN0YWNrZWQgJiYgb3B0aW9ucy5ncm91cEJ5ID8geyBmaWVsZDogJ3NlcmllcycgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA6IG9wdGlvbnMuZ3JhcGgudG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZ3JvdXBCeVxuICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLmFic2Npc3NhLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gJ3RlbXBvcmFsJyA/IHsgZm9ybWF0OiAnJVktJUItJWRUJUg6JU06JVMnIH0gOiB7fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ3ZhbHVlJywgdHlwZTogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUsIHRpdGxlOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3NlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxlZ2VuZFRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdub21pbmFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnMuYWJzY2lzc2EubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlID09PSAndGVtcG9yYWwnID8geyBmb3JtYXQ6ICclWS0lQi0lZFQlSDolTTolUycgfSA6IHt9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAndmFsdWUnLCB0eXBlOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSwgdGl0bGU6IG9wdGlvbnMub3JkaW5hdGUubGFiZWwgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGNvbmZpZzogZm9udENvbmZpZygnVWJ1bnR1LCBzYW5zLXNlcmlmJylcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgICBvcHRpb25zLmFkZGl0aW9uYWxTcGVjXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnNvcnRBdHRyaWJ1dGVzJCA9IHRoaXMub3B0aW9uc0NvcHkkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB7IGlkOiBvcHRpb25zPy5hYnNjaXNzYS5hdHRyaWJ1dGUsIGxhYmVsOiBvcHRpb25zPy5hYnNjaXNzYS5sYWJlbCB9LFxuICAgICAgICAgIHsgaWQ6IG9wdGlvbnM/Lm9yZGluYXRlLmF0dHJpYnV0ZSwgbGFiZWw6IG9wdGlvbnM/Lm9yZGluYXRlLmxhYmVsIH1cbiAgICAgICAgXS5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4gISFhdHRyaWJ1dGUuaWQpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc29ydEF0dHJpYnV0ZXMkLnN1YnNjcmliZSgoYXR0cmlidXRlcykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLnNvcnQgJiZcbiAgICAgICAgICAhYXR0cmlidXRlcy5tYXAoKGF0dHJpYnV0ZSkgPT4gYXR0cmlidXRlLmlkKS5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGguc29ydD8uYXR0cmlidXRlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlISxcbiAgICAgICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCEsXG4gICAgICAgICAgICAgIHNvcnQ6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGguc29ydCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IGF0dHJpYnV0ZXNbMF0uaWQgPz8gJydcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zQ29weSQsIHRoaXMuYXR0cmlidXRlVHlwZXMkLCB0aGlzLmNsYXNzZXMkXSkuc3Vic2NyaWJlKFxuICAgICAgICAoW29wdGlvbnMsIGF0dHJUeXBlcywgY2xhc3Nlc10pID0+IHtcbiAgICAgICAgICB0aGlzLnNvcnREaXJlY3Rpb25zID0gdGhpcy5zb3J0RGlyZWN0aW9uc1xuICAgICAgICAgICAgLm1hcCgoc29ydCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0gY2xhc3Nlc1xuICAgICAgICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnM/LmdyYXBoLnNvcnQ/LmF0dHJpYnV0ZSkpXG4gICAgICAgICAgICAgICAgLmZpbmQoKGF0dHIpID0+ICEhYXR0cik7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHNvcnQudmFsdWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgYEBwcnkud2lkZ2V0LmNoYXJ0LnNvcnQuJHtzb3J0LnZhbHVlfS4ke1xuICAgICAgICAgICAgICAgICAgICBhdHRyVHlwZXMuYWJzY2lzc2EubmFtZSA9PT0gYXR0cmlidXRlPy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgPyBhdHRyVHlwZXMuYWJzY2lzc2EudmVnYVR5cGVcbiAgICAgICAgICAgICAgICAgICAgICA6IGF0dHJUeXBlcy5vcmRpbmF0ZS52ZWdhVHlwZVxuICAgICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsKSk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnZlZ2FMaXRlU3BlYyQsIHRoaXMudHJpZ2dlciRdKS5zdWJzY3JpYmUoKFtzcGVjLCBfXSkgPT4ge1xuICAgICAgICBpZiAodGhpcy52ZWdhKSB7XG4gICAgICAgICAgdGhpcy52aWV3Py5maW5hbGl6ZSgpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoc3BlYykpO1xuICAgICAgICAgIGVtYmVkKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNwZWMpKSwge1xuICAgICAgICAgICAgYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgICByZW5kZXJlcjogJ2NhbnZhcycsXG4gICAgICAgICAgICBmb3JtYXRMb2NhbGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50T2JqZWN0KCdAcHJ5LndpZGdldC5jaGFydC5udW1iZXJMb2NhbGUnKSBhcyBhbnksXG4gICAgICAgICAgICB0aW1lRm9ybWF0TG9jYWxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudE9iamVjdCgnQHByeS53aWRnZXQuY2hhcnQudGltZUZvcm1hdExvY2FsZScpIGFzIGFueVxuICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigocmVzdWx0KSA9PiAodGhpcy52aWV3ID0gcmVzdWx0LnZpZXcpKVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBkaXNwbGF5IGNoYXJ0JywgZXJyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXIkLm5leHQoKSwgMTAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlciQubmV4dCgpO1xuICB9XG5cbiAgdHJhbnNsYXRlVG9WZWdhVHlwZSh0eXBlPzogRmllbGRUeXBlLCBuYW1lPzogc3RyaW5nKTogVmVnYVR5cGUge1xuICAgIGxldCBpZFJlZ2V4ID0gbmV3IFJlZ0V4cCgvX2lkfGlkX3xfSUR8SURffF9JZHxJZF8vLCAnZycpO1xuICAgIGlmIChpZFJlZ2V4LnRlc3QobmFtZSA/PyAnLS0tLS0tLScpKSB7XG4gICAgICByZXR1cm4gVmVnYVR5cGUuT1JESU5BTDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRmllbGRUeXBlLkRFQ0lNQUw6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlRFR0VSOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuTE9ORzpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLlFVQU5USVRBVElWRTtcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOU1RBTlQ6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5URU1QT1JBTDtcbiAgICAgIGNhc2UgRmllbGRUeXBlLktFWVdPUkQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5TVFJJTkc6XG4gICAgICAgIHJldHVybiBWZWdhVHlwZS5OT01JTkFMO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLk5PTUlOQUw7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1pblRpY2sodHlwZTogRmllbGRUeXBlKTogeyB0aWNrTWluU3RlcDogbnVtYmVyIH0gfCB7fSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlRFR0VSOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuTE9ORzpcbiAgICAgICAgcmV0dXJuIHsgdGlja01pblN0ZXA6IDEgfTtcbiAgICAgIGNhc2UgRmllbGRUeXBlLkRFQ0lNQUw6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5JTlNUQU5UOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuS0VZV09SRDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLlNUUklORzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLmdldFZhbHVlKCkgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3BlblNldHRpbmdzKCkge1xuICAgICh0aGlzLm9wZW4kIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIG9wZW5EYXRhKCkge1xuICAgICh0aGlzLm9wZW5EYXRhJCBhcyBTdWJqZWN0PHZvaWQ+KS5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIGdldFRpdGxlKG9wdGlvbnM6IENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5ncmFwaD8udGl0bGUgPz8gKG9wdGlvbnMuYWJzY2lzc2EubGFiZWwgPz8gJ2tleScpICsgJyAvICcgKyAob3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCA/PyAndmFsdWUnKTtcbiAgfVxuXG4gIGNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0aXRsZTogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVR5cGUoJGV2ZW50OiBHcmFwaFR5cGUpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0eXBlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBpZiAoW0dyYXBoVHlwZS5DSVJDVUxBUiwgR3JhcGhUeXBlLkRPTlVUXS5pbmNsdWRlcygkZXZlbnQpKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgIGdyb3VwQnk6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjaXJjbGVDb2xvclNjaGVtZTogdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmNpcmNsZUNvbG9yU2NoZW1lID8/ICdQcm92b2x5J1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChbR3JhcGhUeXBlLkhJU1RPR1JBTV0uaW5jbHVkZXMoJGV2ZW50KSkge1xuICAgICAgICB0aGlzLmxpbWl0RWxlbWVudHModHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlRG9udXRTaXplKCRldmVudDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCwgZG9udXRTaXplOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3BlcmF0aW9uKCRldmVudDogT3BlcmF0aW9uKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgb3BlcmF0aW9uOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBpZiAoJGV2ZW50ID09PSBPcGVyYXRpb24uQ09VTlQgfHwgJGV2ZW50ID09PSBPcGVyYXRpb24uRElTVElOQ1QpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgb3JkaW5hdGU6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQub3BlcmF0aW9uLicgKyAkZXZlbnQpLFxuICAgICAgICAgICAgYXR0cmlidXRlOiB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXJPcmRpbmF0ZUF0dHJpYnV0ZXMkLm5leHQoKSwgMTApO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUFic2Npc3NhKCRldmVudDogc3RyaW5nKSB7XG4gICAgaWYgKCRldmVudCAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGF0dHJpYnV0ZTogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuY2xhc3Nlc1xuICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09ICRldmVudCk7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgbGFiZWw6IGF0dHI/Lm5hbWUgPz8gJ2F0dHItbm90LWZvdW5kJyB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb3B5QWJzY2lzc2FGaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBhdHRyPy5maWVsZCA9PT0gZmllbGQuaWQpO1xuXG4gICAgICB0aGlzLmxpbWl0RWxlbWVudHMoISF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUFic2Npc3NhTGFiZWwoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsYWJlbDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU9yZGluYXRlKCRldmVudDogYW55KSB7XG4gICAgaWYgKCRldmVudCAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGF0dHJpYnV0ZTogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXR0ciA9IHRoaXMuY2xhc3Nlc1xuICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09ICRldmVudCk7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgbGFiZWw6IGF0dHI/Lm5hbWUgPz8gJ2F0dHItbm90LWZvdW5kJyB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb3B5T3JkaW5hdGVGaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBhdHRyPy5maWVsZCA9PT0gZmllbGQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU9yZGluYXRlTGFiZWwoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBsYWJlbDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUtlZXAwQWJzY2lzc2EoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBrZWVwMDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUtlZXAwT3JkaW5hdGUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBrZWVwMDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxpbWl0RWxlbWVudHMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY29weUFic2Npc3NhRmllbGQ/LnR5cGUgIT09IEZpZWxkVHlwZS5JTlNUQU5UICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhPy5saW1pdCAmJlxuICAgICAgICAgICdhdCcgaW4gdGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhPy5saW1pdFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgICAgIGF0OiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2E/LmxpbWl0Py5hdCA/PyAzLFxuICAgICAgICAgICAgICAgIG90aGVyczogZmFsc2UsXG4gICAgICAgICAgICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgICAgICAgICAgIGlzVGltZUxpbWl0OiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgbGltaXQ6IHsgaW50ZXJ2YWw6ICdzZWNvbmQnLCBpc1RpbWVMaW1pdDogdHJ1ZSB9IH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsaW1pdDogdW5kZWZpbmVkIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgICF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgYXQ6ICRldmVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXRPdGhlcnMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgICF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgb3RoZXJzOiAkZXZlbnRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUxpbWl0T3JkZXIoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgICF0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgb3JkZXI6ICRldmVudCA/ICdhc2MnIDogJ2Rlc2MnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VUaW1lTGltaXQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQgJiZcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EsXG4gICAgICAgICAgbGltaXQ6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LFxuICAgICAgICAgICAgaW50ZXJ2YWw6ICRldmVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlTGVnZW5kKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmdyYXBoLCBsZWdlbmQ6ICRldmVudCB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVUb29sdGlwKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCwgdG9vbHRpcDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUdyb3VwQnkoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgICAgYXR0cmlidXRlOiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JvdXBCeT8uYXR0cmlidXRlID8/ICcnLFxuICAgICAgICAgICAgY29sb3I6IHRoaXMuc2NoZW1lU2VydmljZS5nZXREZWZhdWx0U2NoZW1lKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeTogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUdyb3VwQnkoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodHlwZW9mICRldmVudCA9PT0gJ3N0cmluZycgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JvdXBCeSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lmdyb3VwQnksXG4gICAgICAgICAgYXR0cmlidXRlOiAkZXZlbnRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQ29sb3JTY2hlbWUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUgJiYgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JvdXBCeSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgYXR0cmlidXRlOiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5ncm91cEJ5Py5hdHRyaWJ1dGUsXG4gICAgICAgICAgY29sb3I6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRUaWNrQ291bnQoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLmRhdGEubWFwKCh2YWw6IGFueSkgPT4gdmFsLnZhbHVlKSkgPCAzXG4gICAgICA/IHsgdGlja0NvdW50OiBNYXRoLm1heCguLi5kYXRhLm1hcCgodmFsOiBhbnkpID0+IHZhbC52YWx1ZSkpIH1cbiAgICAgIDoge307XG4gIH1cblxuICB0b2dnbGVTdGFja2VkKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLFxuICAgICAgICAgIHN0YWNrZWQ6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTb3J0KCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JhcGgsXG4gICAgICAgICAgc29ydDogJGV2ZW50XG4gICAgICAgICAgICA/IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmdyYXBoLnNvcnQgPz8ge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EuYXR0cmlidXRlLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2FzYydcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU29ydEF0dHJpYnV0ZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDoge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmdyYXBoLFxuICAgICAgICAgIHNvcnQ6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JhcGguc29ydCEsIGF0dHJpYnV0ZTogJGV2ZW50IH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU29ydERpcmVjdGlvbigkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDoge1xuICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaCxcbiAgICAgICAgICBzb3J0OiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaC5zb3J0ISwgZGlyZWN0aW9uOiAkZXZlbnQgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSB0b0ltYWdlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlc29sdmUodGhpcy52ZWdhLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnY2FudmFzJylbMF0udG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgfSk7XG4gIH1cblxuICBjaGFuZ2VDaXJjbGVDb2xvclNjaGVtZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBjaXJjbGVDb2xvclNjaGVtZTogJGV2ZW50XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VCYXNlQ29sb3IoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYmFzZUNvbG9yOiAkZXZlbnRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPHByeS13aWRnZXQtYWdncmVnYXRlZC1jaGFydC1jc3M+PC9wcnktd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1jaGFydFwiICpuZ0lmPVwib3B0aW9uc0NvcHkkIHwgYXN5bmMgYXMgb3B0aW9uc0NvcHlcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgI2hlYWRlclxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gICAgW2Rpc3BsYXlDb3VudF09XCJmYWxzZVwiXG4gICAgW29wZW5EYXRhJF09XCJvcGVuRGF0YSRcIlxuICA+XG4gICAgPHByeS1zZXR0aW5nc1xuICAgICAgKHNhdmVUcmlnZ2VyZWQpPVwiZW1pdE1hbmlmZXN0KClcIlxuICAgICAgKGNoYW5nZVRpdGxlKT1cImNoYW5nZVdpZGdldFRpdGxlKCRldmVudClcIlxuICAgICAgW2hlYWRlclByZXNlbnRdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgW29wZW4kXT1cIm9wZW4kXCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIGNsYXNzPVwiby1zZXR0aW5nc1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0LmNoYXJ0LnRpdGxlXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDaGFydFRpdGxlKCRldmVudClcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnRpdGxlXCJcbiAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnNDb3B5XCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfdHlwZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC50eXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUeXBlKCRldmVudClcIlxuICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwidHlwZU9wdGlvbnNcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZVwiXG4gICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICBpZD1cImNoYXJ0X3R5cGVcIlxuICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuRE9OVVRcIj5cbiAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC5kb251dFNpemVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlRG9udXRTaXplKCRldmVudClcIlxuICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC5kb251dFNpemVcIlxuICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICBtYXg9XCI1MDBcIlxuICAgICAgICAgID48L3ByeS1yYW5nZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlTGVnZW5kKCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmdyYXBoLmxlZ2VuZFwiPlxuICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxlZ2VuZCcgfCBpMThuIH19XG4gICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVRvb2x0aXAoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuZ3JhcGgudG9vbHRpcFwiXG4gICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRvb2x0aXAnIHwgaTE4biB9fVxuICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5ncmFwaC50eXBlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiYWJzY2lzc2FcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuYWJzY2lzc2EnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBYnNjaXNzYSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJhYnNjaXNzYUF0dHJpYnV0ZXMkIHwgYXN5bmMgfCBwcnlTb3J0RGF0YSA6IHNvcnRBY3RpdmUgOiBzb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICBpZD1cImFic2Npc3NhXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQuZGF0YUxhYmVsXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUFic2Npc3NhTGFiZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5sYWJlbFwiXG4gICAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBbJ3F1YW50aXRhdGl2ZScsICd0ZW1wb3JhbCddLmluY2x1ZGVzKHRyYW5zbGF0ZVRvVmVnYVR5cGUoY29weUFic2Npc3NhRmllbGQ/LnR5cGUpKSAmJlxuICAgICAgICAgICAgICBvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuRE9OVVQgJiZcbiAgICAgICAgICAgICAgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkNJUkNVTEFSXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlS2VlcDBBYnNjaXNzYSgkZXZlbnQpXCIgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2Eua2VlcDBcIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yaWdpbicgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJsaW1pdEVsZW1lbnRzKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgPT09IEdyYXBoVHlwZS5ISVNUT0dSQU1cIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmxpbWl0JyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQuaXNUaW1lTGltaXQgPT09IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQuYXRcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGltaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LmxpbWl0XCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgbWF4PVwiMTBcIlxuICAgICAgICAgICAgICAgID48L3ByeS1yYW5nZT5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuSElTVE9HUkFNXCI+XG4gICAgICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxpbWl0T3RoZXJzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdC5vdGhlcnNcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm90aGVycycgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImRhdGVfbGltaXRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQub3JkZXInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMaW1pdE9yZGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIlt7IGlkOiAnYXNjJyB9LCB7IGlkOiAnZGVzYycgfV1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdC5vcmRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtiYXNlVHJhbnNsYXRlXT1cIidAcHJ5LndpZGdldC5jaGFydC4nXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsVHJhbnNsYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cIm90aGVyX2xpbWl0XCJcbiAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImRhdGVfbGltaXRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQudGltZUludGVydmFsJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUaW1lTGltaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJbXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdzZWNvbmQnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdtaW51dGUnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdob3VyJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnZGF5JyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnd2VlaycgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ21vbnRoJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAncXVhcnRlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3llYXInIH1cbiAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQuaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsVHJhbnNsYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgYmFzZVRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LnRpbWUuXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiZGF0ZV9saW1pdFwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJvcGVyYXRpb25zXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9wZXJhdGlvbi50aXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9wZXJhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJvcGVyYXRpb25zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkub3JkaW5hdGUub3BlcmF0aW9uXCJcbiAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgaWQ9XCJvcGVyYXRpb25zXCJcbiAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkub3JkaW5hdGUub3BlcmF0aW9uICE9PSBPcGVyYXRpb24uQ09VTlRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm9yZGluYXRlXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yZGluYXRlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9yZGluYXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJvcmRpbmF0ZUF0dHJpYnV0ZXMkIHwgYXN5bmMgfCBwcnlTb3J0RGF0YSA6IHNvcnRBY3RpdmUgOiBzb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJvcmRpbmF0ZVwiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJAcHJ5LndpZGdldC5jaGFydC5kYXRhTGFiZWxcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlT3JkaW5hdGVMYWJlbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLmxhYmVsXCJcbiAgICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0cmFuc2xhdGVUb1ZlZ2FUeXBlKGNvcHlPcmRpbmF0ZUZpZWxkPy50eXBlKSA9PT0gJ3F1YW50aXRhdGl2ZSdcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VLZWVwME9yZGluYXRlKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5rZWVwMFwiXG4gICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQub3JpZ2luJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuRE9OVVQgJiYgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkNJUkNVTEFSXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVHcm91cEJ5KCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5Lmdyb3VwQnlcIlxuICAgICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuZ3JvdXBCeScgfCBpMThuIH19XG4gICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5Lmdyb3VwQnlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNBdHRyXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lmdyb3VwQXR0cicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlR3JvdXBCeSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lmdyb3VwQnkuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJhYnNjaXNzYUF0dHJpYnV0ZXMkIHwgYXN5bmMgfCBwcnlTb3J0RGF0YSA6IHNvcnRBY3RpdmUgOiBzb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zZXJpZXNBdHRyXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPHByeS1zY2hlbWUtcGlja2VyXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDb2xvclNjaGVtZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lmdyb3VwQnkuY29sb3JcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zY2hlbWUtcGlja2VyPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPHByeS1jaGVja2JveCBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC5zdGFja2VkXCIgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU3RhY2tlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQuY2hhcnQuc3RhY2tlZCcgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHMgLWNvbmRlbnNlZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVNvcnQoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuZ3JhcGguc29ydFwiXG4gICAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5zb3J0LnRpdGxlJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW9wdGlvbnNDb3B5LmdyYXBoLnNvcnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNBdHRyXCI+QXR0cmlidXRlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU29ydEF0dHJpYnV0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLnNvcnQuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJzb3J0QXR0cmlidXRlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICBpZD1cImNoYXJ0X3NvcnRBdHRyXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9zZXJpZXNBdHRyXCI+U29ydDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNvcnREaXJlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC5zb3J0LmRpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwic29ydERpcmVjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuRE9OVVQgfHwgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSA9PT0gR3JhcGhUeXBlLkNJUkNVTEFSXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktc2NoZW1lLXBpY2tlclxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ2lyY2xlQ29sb3JTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5jaXJjbGVDb2xvclNjaGVtZVwiXG4gICAgICAgICAgPjwvcHJ5LXNjaGVtZS1waWNrZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkRPTlVUICYmXG4gICAgICAgICAgICBvcHRpb25zQ29weS5ncmFwaC50eXBlICE9PSBHcmFwaFR5cGUuQ0lSQ1VMQVIgJiZcbiAgICAgICAgICAgICFvcHRpb25zQ29weS5ncm91cEJ5XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF9iYXNlQ29sb3JcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY29sb3InIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LWNvbG9yLXBpY2tlclxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VCYXNlQ29sb3IoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmJhc2VDb2xvclwiXG4gICAgICAgICAgICAgIGlkPVwiY2hhcnRfYmFzZUNvbG9yXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgPjwvcHJ5LWNvbG9yLXBpY2tlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVPcHRpb24gbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbmVkLW9wdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhLWNoaXBzIC1tZFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW1cIj57eyBpdGVtIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGlzQ2hhcnRWYWxpZCQgfCBhc3luYykgJiYgIShub0RhdGEkIHwgYXN5bmMpICYmICEobm9BZ2dyZWdhdGlvbkRhdGEkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiAjdmVnYT48L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YSQgfCBhc3luY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldF9fY2hvb3NlLXBhcmFtZXRlcnNcIj5cbiAgICAgIDxpbWdcbiAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9zdmdzL3ByeV9yZWNoZXJjaGVfcGFzX2RlX3Jlc3VsdGF0LnN2Z1wiXG4gICAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC5jaGFydC5ub0RhdGEnIHwgaTE4biB9fVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQubm9EYXRhJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbkRhdGEoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIj5cbiAgICAgICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjBcIiBpY29uU3ZnPVwiY29udHJvbFwiPjwvcHJ5LWljb24+XG4gICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC50b29sdGlwLnJlYWRTZWFyY2gnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShub0RhdGEkIHwgYXN5bmMpICYmIChub0FnZ3JlZ2F0aW9uRGF0YSQgfCBhc3luYylcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2Nob29zZS1wYXJhbWV0ZXJzXCI+XG4gICAgICA8aW1nXG4gICAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICBhbHQ9XCJ7eyAnQHByeS53aWRnZXQuY2hhcnQuYWdnTm9SZXN1bHQnIHwgaTE4biB9fVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuYWdnTm9SZXN1bHQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvcGVuU2V0dGluZ3MoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIj5cbiAgICAgICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjBcIiBpY29uU3ZnPVwiY29udHJvbFwiPjwvcHJ5LWljb24+XG4gICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC5zZXR0aW5ncy50aXRsZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKG5vRGF0YSQgfCBhc3luYykgJiYgIShub0FnZ3JlZ2F0aW9uRGF0YSQgfCBhc3luYykgJiYgIShpc0NoYXJ0VmFsaWQkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19jaG9vc2UtcGFyYW1ldGVyc1wiPlxuICAgICAgPGltZ1xuICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdF9fc2VhcmNoXCJcbiAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNob29zZVBhcmFtZXRlcnMnIHwgaTE4biB9fVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRfX3RleHRcIj57eyAnQHByeS53aWRnZXQuY2hhcnQuY2hvb3NlUGFyYW1ldGVycycgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5TZXR0aW5ncygpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICA8cHJ5LWljb24gW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyMFwiIGljb25Tdmc9XCJjb250cm9sXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0LnNldHRpbmdzLnRpdGxlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
816
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC9jb21wb25lbnQvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFJTCxjQUFjLEVBRWQsbUJBQW1CLEVBRW5CLGNBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUlULGVBQWUsRUFDZixTQUFTLEVBR1QsYUFBYSxFQUViLFFBQVEsRUFDUixvQkFBb0IsRUFDckIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxHQUFHLEVBRUgsS0FBSyxFQUNMLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxFQUNULEdBQUcsRUFDSCxjQUFjLEVBQ2YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLDhCQUErQixTQUFRLG1CQUFtQjtJQXdDckUsWUFD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LENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDeEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsTUFBVztRQUNqQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsaUJBQWlCLEVBQUUsTUFBTTthQUMxQixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsTUFBVztRQUN6QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztnQkFDMUIsU0FBUyxFQUFFLE1BQU07YUFDbEIsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzhHQWgrQlUsOEJBQThCO2tHQUE5Qiw4QkFBOEIsd0xDbEQzQyx3K2VBOFdBOzsyRkQ1VGEsOEJBQThCO2tCQUoxQyxTQUFTOytCQUNFLDZCQUE2QjtxTkFJcEIsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zLFxuICBDbGFzcyxcbiAgQ2xhc3NTZWxlY3RvcnMsXG4gIERhdGFzZXQsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEZpZWxkLFxuICBGaWVsZFNlbGVjdG9ycyxcbiAgRmllbGRUeXBlLFxuICBHcmFwaFR5cGUsXG4gIE1vbm9DbGFzc1NlYXJjaFBheWxvYWQsXG4gIE11bHRpQ2xhc3NTZWFyY2hQYXlsb2FkLFxuICBOYW1lZFF1ZXJ5LFxuICBOYW1lZFF1ZXJ5VHlwZXMsXG4gIE9wZXJhdGlvbixcbiAgUHJ5QWdncmVnYXRpb25TZXJ2aWNlLFxuICBQcnlJMThuU2VydmljZSxcbiAgU2VhcmNoQWN0aW9ucyxcbiAgVmFsdWVUeXBlLFxuICBWZWdhVHlwZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBzaGFyZSxcbiAgc3RhcnRXaXRoLFxuICBTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG4gIHRhcCxcbiAgd2l0aExhdGVzdEZyb21cbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWaWV3IH0gZnJvbSAndmVnYSc7XG5pbXBvcnQgZW1iZWQsIHsgdmVnYSB9IGZyb20gJ3ZlZ2EtZW1iZWQnO1xuaW1wb3J0IHsgbWVyZ2VEZWVwLCBUb3BMZXZlbFNwZWMgfSBmcm9tICd2ZWdhLWxpdGUnO1xuaW1wb3J0IHsgaW5pdENvbmZpZyB9IGZyb20gJ3ZlZ2EtbGl0ZS9idWlsZC9zcmMvY29uZmlnJztcbmltcG9ydCB7IFByeVNjaGVtZVNlcnZpY2UgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQvY29tcG9uZW50cy9zY2hlbWUtcGlja2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LXdpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3ZlZ2EnKSB2ZWdhITogRWxlbWVudFJlZjtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8Q2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucz47XG4gIG9wdGlvbnNDb3B5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyB8IG51bGw+KG51bGwpO1xuICB2aWV3PzogVmlldztcbiAgdHJpZ2dlciQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICB2ZWdhTGl0ZVNwZWMkOiBPYnNlcnZhYmxlPFRvcExldmVsU3BlYz47XG4gIGZpZWxkcyQ6IE9ic2VydmFibGU8RmllbGRbXT47XG4gIGNsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuICBhdHRyaWJ1dGVUeXBlcyQ6IE9ic2VydmFibGU8e1xuICAgIG9yZGluYXRlOiB7IHZlZ2FUeXBlOiBWZWdhVHlwZTsgZmllbGRUeXBlOiBhbnk7IG5hbWU6IHN0cmluZyB9O1xuICAgIGFic2Npc3NhOiB7IHZlZ2FUeXBlOiBWZWdhVHlwZTsgZmllbGRUeXBlOiBhbnk7IG5hbWU6IHN0cmluZyB9O1xuICAgIGdyb3VwQnk6IHsgdmVnYVR5cGU/OiBWZWdhVHlwZTsgZmllbGRUeXBlPzogYW55OyBuYW1lOiBzdHJpbmcgfTtcbiAgfT47XG4gIGFnZ3JlZ2F0ZWRWYWx1ZXMkOiBPYnNlcnZhYmxlPHsgZGF0YTogYW55OyBvcGVyYXRpb246IGFueSB9PjtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcbiAgR3JhcGhUeXBlID0gR3JhcGhUeXBlO1xuICBPcGVyYXRpb24gPSBPcGVyYXRpb247XG4gIGlzQ2hhcnRWYWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHR5cGVPcHRpb25zOiB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdID0gW107XG4gIG9wZXJhdGlvbnMkOiBPYnNlcnZhYmxlPHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10+O1xuICBhYnNjaXNzYUF0dHJpYnV0ZXMkOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVtdPjtcbiAgY2xhc3NlczogQ2xhc3NbXSA9IFtdO1xuICBmaWVsZHM6IEZpZWxkW10gPSBbXTtcbiAgb3JkaW5hdGVBdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTxBdHRyaWJ1dGVbXT47XG4gIHRyaWdnZXJPcmRpbmF0ZUF0dHJpYnV0ZXMkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29weUFic2Npc3NhRmllbGQ/OiBGaWVsZDtcbiAgY29weU9yZGluYXRlRmllbGQ/OiBGaWVsZDtcbiAgbm9EYXRhJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc29ydEFjdGl2ZT8gPSAnbmFtZSc7XG4gIHNvcnREaXJlY3Rpb24/ID0gJ2FzYyc7XG4gIHNvcnRBdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTx7IGlkPzogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9W10+O1xuICBzb3J0RGlyZWN0aW9ucyA9IFtcbiAgICB7IHZhbHVlOiAnYXNjJywgbGFiZWw6ICcnIH0sXG4gICAgeyB2YWx1ZTogJ2Rlc2MnLCBsYWJlbDogJycgfVxuICBdO1xuICBub0FnZ3JlZ2F0aW9uRGF0YSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGFsbG93ZWRDbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgY29sb3JzID0gdmVnYS5zY2hlbWUoJ1Byb3ZvbHknKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgYWdncmVnYXRpb25TZXJ2aWNlOiBQcnlBZ2dyZWdhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY2hlbWVTZXJ2aWNlOiBQcnlTY2hlbWVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG4gICAgdGhpcy50eXBlT3B0aW9ucyA9IE9iamVjdC52YWx1ZXMoR3JhcGhUeXBlKVxuICAgICAgLm1hcCgodikgPT4gKHtcbiAgICAgICAgaWQ6IHYsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuY2hhcnQuZ3JhcGhUeXBlLicgKyB2KVxuICAgICAgfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcblxuICAgIHRoaXMub3B0aW9ucyQgPSB0aGlzLm1hbmlmZXN0JC5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAobWFuaWZlc3QpID0+XG4gICAgICAgICAgbWVyZ2VEZWVwKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBncmFwaDogeyB0eXBlOiBHcmFwaFR5cGUuQkFSLCB0b29sdGlwOiB0cnVlLCBsZWdlbmQ6IGZhbHNlIH0sXG4gICAgICAgICAgICAgIGFic2Npc3NhOiB7IGtlZXAwOiB0cnVlIH0sXG4gICAgICAgICAgICAgIG9yZGluYXRlOiB7IGtlZXAwOiB0cnVlIH1cbiAgICAgICAgICAgIH0gYXMgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyxcbiAgICAgICAgICAgIChtYW5pZmVzdC5vcHRpb25zID8/IHt9KSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zXG4gICAgICAgICAgKSBhcyBDaGFydEFnZ3JlZ2F0ZWRXaWRnZXRPcHRpb25zXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLm9wdGlvbnMkLnBpcGUoZmlsdGVyKChvcHQpID0+ICEhb3B0KSkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpKTtcbiAgICB9KTtcbiAgICB0aGlzLmZpZWxkcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpO1xuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcblxuICAgIHRoaXMub3BlcmF0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJlc3VsdFNldCQsIHRoaXMuY2xhc3NlcyQsIHRoaXMuZmllbGRzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtycywgY2xhc3NlcywgZmllbGRzXSkgPT5cbiAgICAgICAgY2xhc3Nlc1xuICAgICAgICAgIC5maWx0ZXIoKGNsYXp6KSA9PiBPYmplY3Qua2V5cyhycy5pdGVtcykuaW5jbHVkZXMoY2xhenouaWQpKVxuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgIC5tYXAoKGF0dHJzKSA9PlxuICAgICAgICAgICAgYXR0cnMuZmlsdGVyKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmlkID09PSBhdHRyLmZpZWxkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuICEhZmllbGQgJiYgW0ZpZWxkVHlwZS5JTlRFR0VSLCBGaWVsZFR5cGUuREVDSU1BTCwgRmllbGRUeXBlLkxPTkddLmluY2x1ZGVzKGZpZWxkLnR5cGUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgICAuZmlsdGVyKChhdHRyKSA9PiAhIWF0dHIpXG4gICAgICApLFxuICAgICAgbWFwKChhdHRyaWJ1dGVzKSA9PlxuICAgICAgICAoYXR0cmlidXRlcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBPYmplY3QudmFsdWVzKE9wZXJhdGlvbikuZmlsdGVyKChvcGVyYXRpb24pID0+IG9wZXJhdGlvbiAhPT0gT3BlcmF0aW9uLkVYVEVOVClcbiAgICAgICAgICA6IFtPcGVyYXRpb24uQ09VTlQsIE9wZXJhdGlvbi5ESVNUSU5DVCwgT3BlcmF0aW9uLk5PTkVdXG4gICAgICAgIClcbiAgICAgICAgICAubWFwKCh2KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHYsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9wZXJhdGlvbi4nICsgdilcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZmllbGRzJC5zdWJzY3JpYmUoKGZpZWxkcykgPT4gKHRoaXMuZmllbGRzID0gZmllbGRzKSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5jbGFzc2VzJC5zdWJzY3JpYmUoKGNsYXNzZXMpID0+ICh0aGlzLmNsYXNzZXMgPSBjbGFzc2VzKSkpO1xuXG4gICAgdGhpcy5hbGxvd2VkQ2xhc3NlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmNsYXNzZXMkLCB0aGlzLnVzZWREYXRhc291cmNlcyRdKS5waXBlKFxuICAgICAgbWFwKChbY2xhc3NlcywgZGF0YXNvdXJjZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0Z1bGxUZXh0ID0gZGF0YXNvdXJjZXNcbiAgICAgICAgICAubWFwKChkcykgPT4gZHMuc291cmNlVHlwZSA9PT0gJ25hbWVkUXVlcnknICYmIGRzLnJlcXVlc3QudHlwZSA9PT0gTmFtZWRRdWVyeVR5cGVzLk1VTFRJX0NMQVNTKVxuICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IHAgfHwgYywgZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IG11bHRpQ2xhc3NEYXRhc291cmNlc0NsYXNzZXMgPSBkYXRhc291cmNlc1xuICAgICAgICAgIC5maWx0ZXIoKGRzKSA9PiBkcy5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgZHMucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTVVMVElfQ0xBU1MpXG4gICAgICAgICAgLm1hcCgobXVsdGlEcykgPT4gKG11bHRpRHMgYXMgTmFtZWRRdWVyeSkucmVxdWVzdCBhcyBNdWx0aUNsYXNzU2VhcmNoUGF5bG9hZClcbiAgICAgICAgICAubWFwKChwYXlsb2FkKSA9PiBwYXlsb2FkLm9DbGFzc2VzKTtcblxuICAgICAgICBjb25zdCBoYXNNdWx0aU5vQ2xhc3MgPSBtdWx0aUNsYXNzRGF0YXNvdXJjZXNDbGFzc2VzLmluY2x1ZGVzKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgY29uc3QgbXVsdGlDbGFzc2VzID0gKFxuICAgICAgICAgIG11bHRpQ2xhc3NEYXRhc291cmNlc0NsYXNzZXMuZmlsdGVyKChjbGFzc2VzKSA9PiAhIWNsYXNzZXMpIGFzIHVua25vd24gYXMgc3RyaW5nW11cbiAgICAgICAgKS5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10gYXMgc3RyaW5nW10pO1xuXG4gICAgICAgIGNvbnN0IHNpbmdsZUNsYXNzZXMgPSBkYXRhc291cmNlc1xuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAoZHMpID0+XG4gICAgICAgICAgICAgIChkcy5zb3VyY2VUeXBlID09PSAnbmFtZWRRdWVyeScgJiYgZHMucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTU9OT19DTEFTUykgfHxcbiAgICAgICAgICAgICAgZHMuc291cmNlVHlwZSA9PT0gJ2RhdGFzZXQnXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAoc2luZ2xlRHMpID0+XG4gICAgICAgICAgICAgIChzaW5nbGVEcyBhcyBEYXRhc2V0KS5vQ2xhc3MgPz8gKChzaW5nbGVEcyBhcyBOYW1lZFF1ZXJ5KS5yZXF1ZXN0IGFzIE1vbm9DbGFzc1NlYXJjaFBheWxvYWQpLm9DbGFzc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGNsYXNzZXMuZmlsdGVyKFxuICAgICAgICAgIChjbGF6eikgPT5cbiAgICAgICAgICAgIGhhc0Z1bGxUZXh0IHx8IGhhc011bHRpTm9DbGFzcyB8fCBtdWx0aUNsYXNzZXMuaW5jbHVkZXMoY2xhenouaWQpIHx8IHNpbmdsZUNsYXNzZXMuaW5jbHVkZXMoY2xhenouaWQpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmFic2Npc3NhQXR0cmlidXRlcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpZWxkcyQsIHRoaXMuYWxsb3dlZENsYXNzZXMkLCB0aGlzLm9wdGlvbnNDb3B5JF0pLnBpcGUoXG4gICAgICBtYXAoKFtmaWVsZHMsIGFsbG93ZWRDbGFzc2VzLCBvcHRpb25Db3B5XSkgPT5cbiAgICAgICAgYWxsb3dlZENsYXNzZXNcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgICAubWFwKChhdHRycykgPT5cbiAgICAgICAgICAgIGF0dHJzLmZpbHRlcigoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgISFmaWVsZCAmJlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5SQVcgJiZcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuU1RSSU5HICYmXG4gICAgICAgICAgICAgICAgKG9wdGlvbkNvcHk/LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5ISVNUT0dSQU0gfHwgZmllbGQudHlwZSAhPT0gRmllbGRUeXBlLktFWVdPUkQpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLm9yZGluYXRlQXR0cmlidXRlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMuYWxsb3dlZENsYXNzZXMkLFxuICAgICAgdGhpcy50cmlnZ2VyT3JkaW5hdGVBdHRyaWJ1dGVzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtmaWVsZHMsIGFsbG93ZWRDbGFzc2VzXSkgPT5cbiAgICAgICAgYWxsb3dlZENsYXNzZXNcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgICAubWFwKChhdHRycykgPT5cbiAgICAgICAgICAgIGF0dHJzLmZpbHRlcigoYXR0cikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkcy5maW5kKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5pZCA9PT0gYXR0ci5maWVsZDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJlxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5NQVgsXG4gICAgICAgICAgICAgICAgICBPcGVyYXRpb24uTUlOLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLlNVTSxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5RMSxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5RMyxcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5BVkVSQUdFLFxuICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uLk1FRElBTixcbiAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbi5OT05FXG4gICAgICAgICAgICAgICAgXS5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5vcmRpbmF0ZS5vcGVyYXRpb24pXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAhIWZpZWxkICYmXG4gICAgICAgICAgICAgICAgICBbRmllbGRUeXBlLklOVEVHRVIsIEZpZWxkVHlwZS5JTlNUQU5ULCBGaWVsZFR5cGUuTE9ORywgRmllbGRUeXBlLkRFQ0lNQUxdLmluY2x1ZGVzKGZpZWxkLnR5cGUpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gISFmaWVsZCAmJiBmaWVsZC50eXBlICE9PSBGaWVsZFR5cGUuUkFXICYmIGZpZWxkLnR5cGUgIT09IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmlzQ2hhcnRWYWxpZCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLmFic2Npc3NhQXR0cmlidXRlcyQsIHRoaXMub3JkaW5hdGVBdHRyaWJ1dGVzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtvcHRpb25zLCBhYnNjaXNzYUF0dHJzLCBvcmRpbmF0ZUF0dHJzXSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICEhb3B0aW9ucy5hYnNjaXNzYS5hdHRyaWJ1dGUgJiZcbiAgICAgICAgICBhYnNjaXNzYUF0dHJzLm1hcCgoYXR0cikgPT4gYXR0ci5pZCkuaW5jbHVkZXMob3B0aW9ucy5hYnNjaXNzYS5hdHRyaWJ1dGUpICYmXG4gICAgICAgICAgKG9wdGlvbnMub3JkaW5hdGUuYXR0cmlidXRlXG4gICAgICAgICAgICA/IG9yZGluYXRlQXR0cnMubWFwKChhdHRyKSA9PiBhdHRyLmlkKS5pbmNsdWRlcyhvcHRpb25zLm9yZGluYXRlLmF0dHJpYnV0ZSlcbiAgICAgICAgICAgIDogdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYXR0cmlidXRlVHlwZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zQ29weSQsIHRoaXMuZmllbGRzJCwgdGhpcy5jbGFzc2VzJF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtvcHRpb25zLCBmaWVsZHMsIGNsYXNzZXNdKSA9PiAhIW9wdGlvbnMgJiYgISFvcHRpb25zLmFic2Npc3NhICYmICEhb3B0aW9ucy5vcmRpbmF0ZSksXG4gICAgICBtYXAoKFtvcHRpb25zLCBmaWVsZHMsIGNsYXNzZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFic2Npc3NhID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMhLmFic2Npc3NhLmF0dHJpYnV0ZSkpXG4gICAgICAgICAgLmZpbmQoKGF0dHIpID0+ICEhYXR0cik7XG4gICAgICAgIGNvbnN0IG9yZGluYXRlID0gY2xhc3Nlc1xuICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMhLm9yZGluYXRlLmF0dHJpYnV0ZSkpXG4gICAgICAgICAgLmZpbmQoKGF0dHIpID0+ICEhYXR0cik7XG4gICAgICAgIGNvbnN0IGdyb3VwQnkgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucz8uZ3JvdXBCeT8uYXR0cmlidXRlKSlcbiAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgY29uc3QgYWJzY2lzc2FGaWVsZFR5cGUgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhYnNjaXNzYT8uZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgIGNvbnN0IG9yZGluYXRlRmllbGRUeXBlID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gb3JkaW5hdGU/LmZpZWxkKT8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HO1xuICAgICAgICBjb25zdCBncm91cEJ5RmllbGRUeXBlID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5pZCA9PT0gZ3JvdXBCeT8uZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkc7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogYWJzY2lzc2FGaWVsZFR5cGUsXG4gICAgICAgICAgICB2ZWdhVHlwZTogdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKGFic2Npc3NhRmllbGRUeXBlLCBhYnNjaXNzYT8ubmFtZSA/PyAnJyksXG4gICAgICAgICAgICBuYW1lOiBhYnNjaXNzYT8ubmFtZSA/PyAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3JkaW5hdGU6IHtcbiAgICAgICAgICAgIGZpZWxkVHlwZTogb3JkaW5hdGVGaWVsZFR5cGUsXG4gICAgICAgICAgICB2ZWdhVHlwZTpcbiAgICAgICAgICAgICAgb3B0aW9ucyEub3JkaW5hdGUub3BlcmF0aW9uID09PSBPcGVyYXRpb24uQ09VTlQgfHwgb3B0aW9ucyEub3JkaW5hdGUub3BlcmF0aW9uID09PSBPcGVyYXRpb24uRElTVElOQ1RcbiAgICAgICAgICAgICAgICA/IFZlZ2FUeXBlLlFVQU5USVRBVElWRVxuICAgICAgICAgICAgICAgIDogdGhpcy50cmFuc2xhdGVUb1ZlZ2FUeXBlKG9yZGluYXRlRmllbGRUeXBlLCBvcmRpbmF0ZT8ubmFtZSA/PyAnJyksXG4gICAgICAgICAgICBuYW1lOiBvcmRpbmF0ZT8ubmFtZSA/PyAnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgICAgZmllbGRUeXBlOiBncm91cEJ5RmllbGRUeXBlLFxuICAgICAgICAgICAgdmVnYVR5cGU6IHRoaXMudHJhbnNsYXRlVG9WZWdhVHlwZShncm91cEJ5RmllbGRUeXBlLCBncm91cEJ5Py5uYW1lKSxcbiAgICAgICAgICAgIG5hbWU6IGdyb3VwQnk/Lm5hbWUgPz8gJydcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0ZWRWYWx1ZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmRhdGFzb3VyY2VJZHMkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIGNvbWJpbmVMYXRlc3QoW2Zyb21FdmVudCh3aW5kb3csICdkYXRhc291cmNlUmVmcmVzaCcpLCB0aGlzLmRhdGFzb3VyY2VJZHMkXSkucGlwZShcbiAgICAgICAgZmlsdGVyKChbZXZlbnQsIGRhdGFzb3VyY2VzXSkgPT4gZGF0YXNvdXJjZXMuaW5jbHVkZXMoKGV2ZW50IGFzIEN1c3RvbUV2ZW50KS5kZXRhaWwpKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZClcbiAgICAgIClcbiAgICBdKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICB0YXAoKFtkYXRhc291cmNlc10pID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2goU2VhcmNoQWN0aW9ucy5zZXRTZWFyY2hMb2FkaW5nKHsgZGF0YXNvdXJjZXMsIHN0YXJ0OiB0cnVlIH0pKSksXG4gICAgICBzd2l0Y2hNYXAoKFtkYXRhc291cmNlcywgb3B0aW9uc10pID0+XG4gICAgICAgIHRoaXMuYWdncmVnYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmFnZ3JlZ2F0ZShkYXRhc291cmNlcywgb3B0aW9ucylcbiAgICAgICAgICAucGlwZSh0YXAoKCkgPT4gdGhpcy5zdG9yZS5kaXNwYXRjaChTZWFyY2hBY3Rpb25zLnNldFNlYXJjaExvYWRpbmcoeyBkYXRhc291cmNlcywgc3RhcnQ6IGZhbHNlIH0pKSkpXG4gICAgICApLFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5vcHRpb25zJCksXG4gICAgICBtYXAoKFthZ2dyZWdhdGUsIG9wdGlvbnNdKSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKGFnZ3JlZ2F0ZS52YWx1ZXMubGVuZ3RoID4gMCAmJiAhYWdncmVnYXRlLnZhbHVlc1swXS5ncm91cEJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogYWdncmVnYXRlLm9wZXJhdGlvbixcbiAgICAgICAgICAgIGRhdGE6IGFnZ3JlZ2F0ZS52YWx1ZXMubWFwKCh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIHNlcmllczogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCB9KSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IChcbiAgICAgICAgICBhZ2dyZWdhdGUudmFsdWVzIGFzIHtcbiAgICAgICAgICAgIGtleTogVmFsdWVUeXBlO1xuICAgICAgICAgICAgZ3JvdXBCeToge1xuICAgICAgICAgICAgICBrZXk6IFZhbHVlVHlwZTtcbiAgICAgICAgICAgICAgdmFsdWU6IFZhbHVlVHlwZTtcbiAgICAgICAgICAgIH1bXTtcbiAgICAgICAgICB9W11cbiAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdmFsdWUuZ3JvdXBCeS5tYXAoKGdyb3VwQnkpID0+ICh7XG4gICAgICAgICAgICAgIGtleTogdmFsdWUua2V5LFxuICAgICAgICAgICAgICBzZXJpZXM6IGdyb3VwQnkua2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogZ3JvdXBCeS52YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGIpID0+IFsuLi5hLCAuLi5iXSwgW10pO1xuICAgICAgICByZXR1cm4geyBvcGVyYXRpb246IGFnZ3JlZ2F0ZS5vcGVyYXRpb24sIGRhdGE6IGZsYXR0ZW5lZCB9O1xuICAgICAgfSksXG4gICAgICBzdGFydFdpdGgoeyBvcGVyYXRpb246IE9wZXJhdGlvbi5OT05FLCBkYXRhOiBbXSB9KSxcbiAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgdGhpcy5ub0RhdGEkID0gdGhpcy5kYXRhc291cmNlSWRzJC5waXBlKG1hcCgoaWRzKSA9PiBpZHMubGVuZ3RoID09PSAwKSk7XG4gICAgdGhpcy5ub0FnZ3JlZ2F0aW9uRGF0YSQgPSB0aGlzLmFnZ3JlZ2F0ZWRWYWx1ZXMkLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YS5sZW5ndGggPT09IDApKTtcblxuICAgIHRoaXMudmVnYUxpdGVTcGVjJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZXMkLFxuICAgICAgdGhpcy5hZ2dyZWdhdGVkVmFsdWVzJCxcbiAgICAgIHRoaXMud2lkZ2V0U2l6ZSQucGlwZShkZWJvdW5jZVRpbWUoMTAwKSksXG4gICAgICB0aGlzLmRpc3BsYXlIZWFkZXIkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW29wdGlvbnMsIHR5cGVzLCB2YWx1ZXMsIHNpemUsIGRpc3BsYXldKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQ2lyY3VsYXIgPSBbR3JhcGhUeXBlLkNJUkNVTEFSLCBHcmFwaFR5cGUuRE9OVVRdLmluY2x1ZGVzKG9wdGlvbnMuZ3JhcGgudHlwZSk7XG4gICAgICAgIGNvbnN0IHN0YWNrZWQgPSBvcHRpb25zLmdyYXBoLnR5cGUuc3RhcnRzV2l0aCgnYmFyJykgPyAhb3B0aW9ucy5ncmFwaC5zdGFja2VkIDogb3B0aW9ucy5ncmFwaC5zdGFja2VkO1xuICAgICAgICBjb25zdCBsZWdlbmRUaXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIG9wdGlvbnMuZ3JvdXBCeSA/IHR5cGVzLmdyb3VwQnkubmFtZSA/PyAnJyA6ICdAcHJ5LndpZGdldC5jaGFydC5sZWdlbmRMYWJlbCdcbiAgICAgICAgKTtcblxuICAgICAgICAoW29wdGlvbnMuZ3JvdXBCeT8uY29sb3IsIG9wdGlvbnMuY2lyY2xlQ29sb3JTY2hlbWVdLmZpbHRlcigoc2NoZW1lKSA9PiAhIXNjaGVtZSkgYXMgc3RyaW5nW10pLmZvckVhY2goXG4gICAgICAgICAgKHNjaGVtZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY2hlbWVTZXJ2aWNlLmFzc2VydFNjaGVtZShzY2hlbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG1lcmdlRGVlcChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAkc2NoZW1hOiAnaHR0cHM6Ly92ZWdhLmdpdGh1Yi5pby9zY2hlbWEvdmVnYS1saXRlL3Y1Lmpzb24nLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0VGl0bGUob3B0aW9ucyksXG4gICAgICAgICAgICB3aWR0aDogJ2NvbnRhaW5lcicsXG4gICAgICAgICAgICBoZWlnaHQ6IChzaXplLmhlaWdodCA/PyAxMDApIC0gKGRpc3BsYXkgPyBXSURHRVRfSEVBREVSX0hFSUdIVCA6IDApLFxuICAgICAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgICAgICBhdXRvc2l6ZTogeyB0eXBlOiAnZml0JywgY29udGFpbnM6ICdwYWRkaW5nJyB9LFxuICAgICAgICAgICAgZGF0YTogeyB2YWx1ZXM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWVzLmRhdGEpKSB9LFxuICAgICAgICAgICAgbGF5ZXI6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcms6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMuZ3JhcGgudHlwZS5zcGxpdCgnLScpWzBdIGFzICdhcmMnIHwgJ2xpbmUnIHwgJ3BvaW50JyB8ICdiYXInIHwgJ2FyZWEnLFxuICAgICAgICAgICAgICAgICAgcG9pbnQ6IG9wdGlvbnMuZ3JhcGgudHlwZS5pbmRleE9mKCdwb2ludCcpID49IDAsXG4gICAgICAgICAgICAgICAgICBsaW5lOiBvcHRpb25zLmdyYXBoLnR5cGUuaW5kZXhPZignbGluZScpID49IDAsXG4gICAgICAgICAgICAgICAgICBpbm5lclJhZGl1czogb3B0aW9ucy5ncmFwaC5kb251dFNpemUgPz8gMzBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgICB4OiAhaXNDaXJjdWxhclxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLmFic2Npc3NhLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lVW5pdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUgPT09IFZlZ2FUeXBlLlRFTVBPUkFMICYmIG9wdGlvbnMuYWJzY2lzc2EubGltaXQ/LmlzVGltZUxpbWl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmFic2Npc3NhLmxpbWl0LmludGVydmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW46IG9wdGlvbnMuZ3JhcGgudHlwZS5pbmRleE9mKCdoaXN0b2dyYW0nKSA+PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXhpczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Zvcm1hdDogdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUgPT09IFZlZ2FUeXBlLlRFTVBPUkFMID8gJyVZLSVCLSVkVCVIOiVNOiVTJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLldpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudC5taW5UaWNrKHR5cGVzLmFic2Npc3NhLmZpZWxkVHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsRXhwcjogYGhlaWdodCA8IDMwMCA/ICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUgPT09IFZlZ2FUeXBlLlRFTVBPUkFMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwidGltZUZvcm1hdChkYXR1bS52YWx1ZSwgJyVZLSVCLSVkVCVIOiVNOiVTJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndHJ1bmNhdGUoZGF0dW0udmFsdWUsIDEwKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6ICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYWJzY2lzc2EudmVnYVR5cGUgPT09IFZlZ2FUeXBlLlRFTVBPUkFMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwidGltZUZvcm1hdChkYXR1bS52YWx1ZSwgJyVZLSVCLSVkVCVIOiVNOiVTJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZGF0dW0udmFsdWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgYSBmYWxzZSB2YWx1ZSBoZXJlIHNvIHRoYXQgdmVnYSB1bmRlcnN0YW5kcyBwcm9wZXJseVxuICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvOiAhIW9wdGlvbnMuYWJzY2lzc2Eua2VlcDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy90eXBlOiBXaWRnZXRDaGFydENvbXBvbmVudC5pc1RpbWVVbml0VVRDKHZhcmlhYmxlc1swXSkgPyAndXRjJyA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB5OiAhaXNDaXJjdWxhclxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnMub3JkaW5hdGUubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uV2lkZ2V0QWdncmVnYXRlZENoYXJ0Q29tcG9uZW50Lm1pblRpY2sodHlwZXMub3JkaW5hdGUuZmllbGRUeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zZXRUaWNrQ291bnQodmFsdWVzLmRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgemVybzogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUgPT09IFZlZ2FUeXBlLlFVQU5USVRBVElWRSA/ICEhb3B0aW9ucy5vcmRpbmF0ZS5rZWVwMCA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHN0YWNrZWQgPyB7IHN0YWNrOiB0cnVlIH0gOiB7fSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgdGhldGE6IGlzQ2lyY3VsYXIgPyB7IGZpZWxkOiAndmFsdWUnLCB0eXBlOiB0eXBlcy5vcmRpbmF0ZS52ZWdhVHlwZSB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxlZ2VuZFRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogIWlzQ2lyY3VsYXIgPyAoIW9wdGlvbnMuZ3JvdXBCeSA/IHVuZGVmaW5lZCA6ICdzZXJpZXMnKSA6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICBsZWdlbmQ6IG9wdGlvbnMuZ3JhcGgubGVnZW5kLFxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogIWlzQ2lyY3VsYXJcbiAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuZ3JvdXBCeVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7IHNjaGVtZTogb3B0aW9ucy5ncm91cEJ5Py5jb2xvciA/PyB0aGlzLnNjaGVtZVNlcnZpY2UuZ2V0RGVmYXVsdFNjaGVtZSgpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgOiB7IHNjaGVtZTogb3B0aW9ucy5jaXJjbGVDb2xvclNjaGVtZSA/PyB0aGlzLnNjaGVtZVNlcnZpY2UuZ2V0RGVmYXVsdFNjaGVtZSgpIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAgICFpc0NpcmN1bGFyICYmICFvcHRpb25zLmdyb3VwQnlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5iYXNlQ29sb3IgPz8gdGhpcy5zY2hlbWVTZXJ2aWNlLmdldFNjaGVtZUNvbG9ycyh0aGlzLnNjaGVtZVNlcnZpY2UuZ2V0RGVmYXVsdFNjaGVtZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB4T2Zmc2V0OiBzdGFja2VkICYmIG9wdGlvbnMuZ3JvdXBCeSA/IHsgZmllbGQ6ICdzZXJpZXMnIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiBvcHRpb25zLmdyYXBoLnRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmdyb3VwQnlcbiAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAna2V5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogb3B0aW9ucy5hYnNjaXNzYS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4odHlwZXMuYWJzY2lzc2EudmVnYVR5cGUgPT09ICd0ZW1wb3JhbCcgPyB7IGZvcm1hdDogJyVZLSVCLSVkVCVIOiVNOiVTJyB9IDoge30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICd2YWx1ZScsIHR5cGU6IHR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlLCB0aXRsZTogb3B0aW9ucy5vcmRpbmF0ZS5sYWJlbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdzZXJpZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsZWdlbmRUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbm9taW5hbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdrZXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzLmFic2Npc3NhLnZlZ2FUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zLmFic2Npc3NhLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLih0eXBlcy5hYnNjaXNzYS52ZWdhVHlwZSA9PT0gJ3RlbXBvcmFsJyA/IHsgZm9ybWF0OiAnJVktJUItJWRUJUg6JU06JVMnIH0gOiB7fSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ3ZhbHVlJywgdHlwZTogdHlwZXMub3JkaW5hdGUudmVnYVR5cGUsIHRpdGxlOiBvcHRpb25zLm9yZGluYXRlLmxhYmVsIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjb25maWc6IHRoaXMuZ2V0Q2hhcnRDb25maWcoKVxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICAgIG9wdGlvbnMuYWRkaXRpb25hbFNwZWNcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc29ydEF0dHJpYnV0ZXMkID0gdGhpcy5vcHRpb25zQ29weSQucGlwZShcbiAgICAgIG1hcCgob3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsgaWQ6IG9wdGlvbnM/LmFic2Npc3NhLmF0dHJpYnV0ZSwgbGFiZWw6IG9wdGlvbnM/LmFic2Npc3NhLmxhYmVsIH0sXG4gICAgICAgICAgeyBpZDogb3B0aW9ucz8ub3JkaW5hdGUuYXR0cmlidXRlLCBsYWJlbDogb3B0aW9ucz8ub3JkaW5hdGUubGFiZWwgfVxuICAgICAgICBdLmZpbHRlcigoYXR0cmlidXRlKSA9PiAhIWF0dHJpYnV0ZS5pZCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zb3J0QXR0cmlidXRlcyQuc3Vic2NyaWJlKChhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGguc29ydCAmJlxuICAgICAgICAgICFhdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUuaWQpLmluY2x1ZGVzKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaC5zb3J0Py5hdHRyaWJ1dGUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUhLFxuICAgICAgICAgICAgZ3JhcGg6IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoISxcbiAgICAgICAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncmFwaC5zb3J0LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogYXR0cmlidXRlc1swXS5pZCA/PyAnJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnNDb3B5JCwgdGhpcy5hdHRyaWJ1dGVUeXBlcyQsIHRoaXMuY2xhc3NlcyRdKS5zdWJzY3JpYmUoXG4gICAgICAgIChbb3B0aW9ucywgYXR0clR5cGVzLCBjbGFzc2VzXSkgPT4ge1xuICAgICAgICAgIHRoaXMuc29ydERpcmVjdGlvbnMgPSB0aGlzLnNvcnREaXJlY3Rpb25zXG4gICAgICAgICAgICAubWFwKChzb3J0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBhdHRyaWJ1dGUgPSBjbGFzc2VzXG4gICAgICAgICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucz8uZ3JhcGguc29ydD8uYXR0cmlidXRlKSlcbiAgICAgICAgICAgICAgICAuZmluZCgoYXR0cikgPT4gISFhdHRyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc29ydC52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICBgQHByeS53aWRnZXQuY2hhcnQuc29ydC4ke3NvcnQudmFsdWV9LiR7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJUeXBlcy5hYnNjaXNzYS5uYW1lID09PSBhdHRyaWJ1dGU/Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA/IGF0dHJUeXBlcy5hYnNjaXNzYS52ZWdhVHlwZVxuICAgICAgICAgICAgICAgICAgICAgIDogYXR0clR5cGVzLm9yZGluYXRlLnZlZ2FUeXBlXG4gICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudmVnYUxpdGVTcGVjJCwgdGhpcy50cmlnZ2VyJF0pLnN1YnNjcmliZSgoW3NwZWMsIF9dKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnZlZ2EpIHtcbiAgICAgICAgICB0aGlzLnZpZXc/LmZpbmFsaXplKCk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoc3BlYykpO1xuICAgICAgICAgIGVtYmVkKHRoaXMudmVnYS5uYXRpdmVFbGVtZW50LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNwZWMpKSwge1xuICAgICAgICAgICAgYWN0aW9uczogZmFsc2UsXG4gICAgICAgICAgICByZW5kZXJlcjogJ2NhbnZhcycsXG4gICAgICAgICAgICBmb3JtYXRMb2NhbGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50T2JqZWN0KCdAcHJ5LndpZGdldC5jaGFydC5udW1iZXJMb2NhbGUnKSBhcyBhbnksXG4gICAgICAgICAgICB0aW1lRm9ybWF0TG9jYWxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudE9iamVjdCgnQHByeS53aWRnZXQuY2hhcnQudGltZUZvcm1hdExvY2FsZScpIGFzIGFueSxcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgdGhlbWU6ICdjdXN0b20nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+ICh0aGlzLnZpZXcgPSByZXN1bHQudmlldykpXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignQ2Fubm90IGRpc3BsYXkgY2hhcnQnLCBlcnIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlciQubmV4dCgpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy50cmlnZ2VyJC5uZXh0KCk7XG4gIH1cblxuICB0cmFuc2xhdGVUb1ZlZ2FUeXBlKHR5cGU/OiBGaWVsZFR5cGUsIG5hbWU/OiBzdHJpbmcpOiBWZWdhVHlwZSB7XG4gICAgbGV0IGlkUmVnZXggPSBuZXcgUmVnRXhwKC9faWR8aWRffF9JRHxJRF98X0lkfElkXy8sICdnJyk7XG4gICAgaWYgKGlkUmVnZXgudGVzdChuYW1lID8/ICctLS0tLS0tJykpIHtcbiAgICAgIHJldHVybiBWZWdhVHlwZS5PUkRJTkFMO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuREVDSU1BTDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOVEVHRVI6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MT05HOlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuUVVBTlRJVEFUSVZFO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuSU5TVEFOVDpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLlRFTVBPUkFMO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuS0VZV09SRDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLlNUUklORzpcbiAgICAgICAgcmV0dXJuIFZlZ2FUeXBlLk5PTUlOQUw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gVmVnYVR5cGUuTk9NSU5BTDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgbWluVGljayh0eXBlOiBGaWVsZFR5cGUpOiB7IHRpY2tNaW5TdGVwOiBudW1iZXIgfSB8IHt9IHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOVEVHRVI6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5MT05HOlxuICAgICAgICByZXR1cm4geyB0aWNrTWluU3RlcDogMSB9O1xuICAgICAgY2FzZSBGaWVsZFR5cGUuREVDSU1BTDpcbiAgICAgIGNhc2UgRmllbGRUeXBlLklOU1RBTlQ6XG4gICAgICBjYXNlIEZpZWxkVHlwZS5LRVlXT1JEOlxuICAgICAgY2FzZSBGaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgIG9wdGlvbnM6IHsgLi4udGhpcy5vcHRpb25zQ29weSQuZ2V0VmFsdWUoKSB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvcGVuU2V0dGluZ3MoKSB7XG4gICAgKHRoaXMub3BlbiQgYXMgU3ViamVjdDx2b2lkPikubmV4dCh1bmRlZmluZWQpO1xuICB9XG5cbiAgb3BlbkRhdGEoKSB7XG4gICAgKHRoaXMub3BlbkRhdGEkIGFzIFN1YmplY3Q8dm9pZD4pLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGl0bGUob3B0aW9uczogQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmdyYXBoPy50aXRsZSA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRDaGFydENvbmZpZygpIHtcbiAgICByZXR1cm4gaW5pdENvbmZpZyh7XG4gICAgICBzdHlsZToge1xuICAgICAgICAnZ3VpZGUtbGFiZWwnOiB7XG4gICAgICAgICAgLy8gYXhpcyB0aWNrIHRpdGxlc1xuICAgICAgICAgIGZvbnQ6ICdVYnVudHUsIHNhbnMtc2VyaWYnLFxuICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgICAgICAgZmlsbDogJyMyNjMzNDAnXG4gICAgICAgIH0sXG4gICAgICAgICdndWlkZS10aXRsZSc6IHtcbiAgICAgICAgICAvLyBheGlzIHRpdGxlXG4gICAgICAgICAgZm9udDogJ1VidW50dSwgc2Fucy1zZXJpZicsXG4gICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgICAgICAgICBmaWxsOiAnIzI2MzM0MCdcbiAgICAgICAgfSxcbiAgICAgICAgJ2dyb3VwLXRpdGxlJzoge1xuICAgICAgICAgIC8vIGNoYXJ0IHRpdGxlXG4gICAgICAgICAgZm9udDogJ1VidW50dSwgc2Fucy1zZXJpZicsXG4gICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgICAgICAgICBmaWxsOiAnIzI2MzM0MCdcbiAgICAgICAgfSxcbiAgICAgICAgJ2dyb3VwLXN1YnRpdGxlJzoge1xuICAgICAgICAgIC8vIG5vdCBzdXJlXG4gICAgICAgICAgZm9udDogJ1VidW50dSwgc2Fucy1zZXJpZicsXG4gICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgICAgICAgICBmaWxsOiAnIzI2MzM0MCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2hhbmdlQ2hhcnRUaXRsZSgkZXZlbnQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIHRpdGxlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVHlwZSgkZXZlbnQ6IEdyYXBoVHlwZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBncmFwaDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsIHR5cGU6ICRldmVudCB9XG4gICAgICB9KTtcbiAgICAgIGlmIChbR3JhcGhUeXBlLkNJUkNVTEFSLCBHcmFwaFR5cGUuRE9OVVRdLmluY2x1ZGVzKCRldmVudCkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgZ3JvdXBCeTogdW5kZWZpbmVkLFxuICAgICAgICAgIGNpcmNsZUNvbG9yU2NoZW1lOiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uY2lyY2xlQ29sb3JTY2hlbWUgPz8gJ1Byb3ZvbHknXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKFtHcmFwaFR5cGUuSElTVE9HUkFNXS5pbmNsdWRlcygkZXZlbnQpKSB7XG4gICAgICAgIHRoaXMubGltaXRFbGVtZW50cyh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VEb251dFNpemUoJGV2ZW50OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCBkb251dFNpemU6ICRldmVudCB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VPcGVyYXRpb24oJGV2ZW50OiBPcGVyYXRpb24pIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBvcGVyYXRpb246ICRldmVudCB9XG4gICAgICB9KTtcbiAgICAgIGlmICgkZXZlbnQgPT09IE9wZXJhdGlvbi5DT1VOVCB8fCAkZXZlbnQgPT09IE9wZXJhdGlvbi5ESVNUSU5DVCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBvcmRpbmF0ZToge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5jaGFydC5vcGVyYXRpb24uJyArICRldmVudCksXG4gICAgICAgICAgICBhdHRyaWJ1dGU6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlck9yZGluYXRlQXR0cmlidXRlcyQubmV4dCgpLCAxMCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQWJzY2lzc2EoJGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoJGV2ZW50ICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYSwgYXR0cmlidXRlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5jbGFzc2VzXG4gICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gJGV2ZW50KTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsYWJlbDogYXR0cj8ubmFtZSA/PyAnYXR0ci1ub3QtZm91bmQnIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvcHlBYnNjaXNzYUZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGF0dHI/LmZpZWxkID09PSBmaWVsZC5pZCk7XG5cbiAgICAgIHRoaXMubGltaXRFbGVtZW50cyghIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYS5saW1pdCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQWJzY2lzc2FMYWJlbCgkZXZlbnQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGxhYmVsOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3JkaW5hdGUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50ICYmIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIG9yZGluYXRlOiB7IC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5vcmRpbmF0ZSwgYXR0cmlidXRlOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBhdHRyID0gdGhpcy5jbGFzc2VzXG4gICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBbLi4uYSwgLi4uYl0sIFtdKVxuICAgICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gJGV2ZW50KTtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgb3JkaW5hdGU6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/Lm9yZGluYXRlLCBsYWJlbDogYXR0cj8ubmFtZSA/PyAnYXR0ci1ub3QtZm91bmQnIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmNvcHlPcmRpbmF0ZUZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGF0dHI/LmZpZWxkID09PSBmaWVsZC5pZCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlT3JkaW5hdGVMYWJlbCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGxhYmVsOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlS2VlcDBBYnNjaXNzYSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGtlZXAwOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlS2VlcDBPcmRpbmF0ZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBvcmRpbmF0ZTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8ub3JkaW5hdGUsIGtlZXAwOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGltaXRFbGVtZW50cygkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5jb3B5QWJzY2lzc2FGaWVsZD8udHlwZSAhPT0gRmllbGRUeXBlLklOU1RBTlQgJiZcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2E/LmxpbWl0ICYmXG4gICAgICAgICAgJ2F0JyBpbiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2E/LmxpbWl0XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgICAgICBhYnNjaXNzYToge1xuICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsXG4gICAgICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAgICAgYXQ6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5hYnNjaXNzYT8ubGltaXQ/LmF0ID8/IDMsXG4gICAgICAgICAgICAgICAgb3RoZXJzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcmRlcjogJ2FzYycsXG4gICAgICAgICAgICAgICAgaXNUaW1lTGltaXQ6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICAgICAgYWJzY2lzc2E6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLCBsaW1pdDogeyBpbnRlcnZhbDogJ3NlY29uZCcsIGlzVGltZUxpbWl0OiB0cnVlIH0gfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBhYnNjaXNzYTogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EsIGxpbWl0OiB1bmRlZmluZWQgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFuZ2VMaW1pdCgkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBhdDogJGV2ZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VMaW1pdE90aGVycygkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBvdGhlcnM6ICRldmVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGltaXRPcmRlcigkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgIXRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGFic2Npc3NhOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmFic2Npc3NhLFxuICAgICAgICAgIGxpbWl0OiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBvcmRlcjogJGV2ZW50ID8gJ2FzYycgOiAnZGVzYydcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRpbWVMaW1pdCgkZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlICYmXG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5saW1pdCAmJlxuICAgICAgdGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQuaXNUaW1lTGltaXRcbiAgICApIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgYWJzY2lzc2E6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYSxcbiAgICAgICAgICBsaW1pdDoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuYWJzY2lzc2EubGltaXQsXG4gICAgICAgICAgICBpbnRlcnZhbDogJGV2ZW50XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVMZWdlbmQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JhcGgsIGxlZ2VuZDogJGV2ZW50IH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVRvb2x0aXAoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLCB0b29sdGlwOiAkZXZlbnQgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlR3JvdXBCeSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlPy5ncm91cEJ5Py5hdHRyaWJ1dGUgPz8gJycsXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5zY2hlbWVTZXJ2aWNlLmdldERlZmF1bHRTY2hlbWUoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgICBncm91cEJ5OiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlR3JvdXBCeSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0eXBlb2YgJGV2ZW50ID09PSAnc3RyaW5nJyAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5ncm91cEJ5KSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JvdXBCeSxcbiAgICAgICAgICBhdHRyaWJ1dGU6ICRldmVudFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VDb2xvclNjaGVtZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSAmJiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5ncm91cEJ5KSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICBhdHRyaWJ1dGU6IHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLmdyb3VwQnk/LmF0dHJpYnV0ZSxcbiAgICAgICAgICBjb2xvcjogJGV2ZW50XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFRpY2tDb3VudChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4uZGF0YS5tYXAoKHZhbDogYW55KSA9PiB2YWwudmFsdWUpKSA8IDNcbiAgICAgID8geyB0aWNrQ291bnQ6IE1hdGgubWF4KC4uLmRhdGEubWFwKCh2YWw6IGFueSkgPT4gdmFsLnZhbHVlKSkgfVxuICAgICAgOiB7fTtcbiAgfVxuXG4gIHRvZ2dsZVN0YWNrZWQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZT8uZ3JhcGgsXG4gICAgICAgICAgc3RhY2tlZDogJGV2ZW50XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNvcnQoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weSQudmFsdWUpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkkLm5leHQoe1xuICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSxcbiAgICAgICAgZ3JhcGg6IHtcbiAgICAgICAgICAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5ncmFwaCxcbiAgICAgICAgICBzb3J0OiAkZXZlbnRcbiAgICAgICAgICAgID8gdGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JhcGguc29ydCA/PyB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlOiB0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5hYnNjaXNzYS5hdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnYXNjJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTb3J0QXR0cmlidXRlKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUuZ3JhcGgsXG4gICAgICAgICAgc29ydDogeyAuLi50aGlzLm9wdGlvbnNDb3B5JC52YWx1ZS5ncmFwaC5zb3J0ISwgYXR0cmlidXRlOiAkZXZlbnQgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTb3J0RGlyZWN0aW9uKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLFxuICAgICAgICAgIHNvcnQ6IHsgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWU/LmdyYXBoLnNvcnQhLCBkaXJlY3Rpb246ICRldmVudCB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHRvSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVzb2x2ZSh0aGlzLnZlZ2EubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdjYW52YXMnKVswXS50b0RhdGFVUkwoJ2ltYWdlL3BuZycpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUNpcmNsZUNvbG9yU2NoZW1lKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkkLnZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5JC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5vcHRpb25zQ29weSQudmFsdWUsXG4gICAgICAgIGNpcmNsZUNvbG9yU2NoZW1lOiAkZXZlbnRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUJhc2VDb2xvcigkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5JC52YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSQubmV4dCh7XG4gICAgICAgIC4uLnRoaXMub3B0aW9uc0NvcHkkLnZhbHVlLFxuICAgICAgICBiYXNlQ29sb3I6ICRldmVudFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0LWNzcz48L3ByeS13aWRnZXQtYWdncmVnYXRlZC1jaGFydC1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLWNoYXJ0XCIgKm5nSWY9XCJvcHRpb25zQ29weSQgfCBhc3luYyBhcyBvcHRpb25zQ29weVwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAjaGVhZGVyXG4gICAgW2hlYWRlck9wdGlvbnNdPVwiKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8/IHt9XCJcbiAgICBbZGlzcGxheUNvdW50XT1cImZhbHNlXCJcbiAgICBbb3BlbkRhdGEkXT1cIm9wZW5EYXRhJFwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgIDxwcnktZWRpdC1pbnB1dFxuICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQudGl0bGVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNoYXJ0VGl0bGUoJGV2ZW50KVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGgudGl0bGVcIlxuICAgICAgICA+PC9wcnktZWRpdC1pbnB1dD5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwib3B0aW9uc0NvcHlcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJjaGFydF90eXBlXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnR5cGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVR5cGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJ0eXBlT3B0aW9uc1wiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC50eXBlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgIGlkPVwiY2hhcnRfdHlwZVwiXG4gICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgPT09IEdyYXBoVHlwZS5ET05VVFwiPlxuICAgICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmdyYXBoLmRvbnV0U2l6ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VEb251dFNpemUoJGV2ZW50KVwiXG4gICAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmNoYXJ0LmRvbnV0U2l6ZVwiXG4gICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgIG1heD1cIjUwMFwiXG4gICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVMZWdlbmQoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIiEhb3B0aW9uc0NvcHkuZ3JhcGgubGVnZW5kXCI+XG4gICAgICAgICAgICB7eyAnQHByeS53aWRnZXQuY2hhcnQubGVnZW5kJyB8IGkxOG4gfX1cbiAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuZ3JhcGgudHlwZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImFic2Npc3NhXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmFic2Npc3NhJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQWJzY2lzc2EoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwiYWJzY2lzc2FBdHRyaWJ1dGVzJCB8IGFzeW5jIHwgcHJ5U29ydERhdGEgOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgaWQ9XCJhYnNjaXNzYVwiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHByeS1lZGl0LWlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkBwcnkud2lkZ2V0LmNoYXJ0LmRhdGFMYWJlbFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBYnNjaXNzYUxhYmVsKCRldmVudClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGFiZWxcIlxuICAgICAgICAgID48L3ByeS1lZGl0LWlucHV0PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgWydxdWFudGl0YXRpdmUnLCAndGVtcG9yYWwnXS5pbmNsdWRlcyh0cmFuc2xhdGVUb1ZlZ2FUeXBlKGNvcHlBYnNjaXNzYUZpZWxkPy50eXBlKSkgJiZcbiAgICAgICAgICAgICAgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkRPTlVUICYmXG4gICAgICAgICAgICAgIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5DSVJDVUxBUlxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUtlZXAwQWJzY2lzc2EoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmtlZXAwXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmlnaW4nIHwgaTE4biB9fVxuICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3hcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibGltaXRFbGVtZW50cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb25zQ29weS5ncmFwaC50eXBlID09PSBHcmFwaFR5cGUuSElTVE9HUkFNXCJcbiAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5saW1pdCcgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhb3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmlzVGltZUxpbWl0ID09PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmF0XCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxpbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgbGFiZWxUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC5saW1pdFwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgIG1heD1cIjEwXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktcmFuZ2U+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkhJU1RPR1JBTVwiPlxuICAgICAgICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMaW1pdE90aGVycygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQub3RoZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vdGhlcnMnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJkYXRlX2xpbWl0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yZGVyJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGltaXRPcmRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJbeyBpZDogJ2FzYycgfSwgeyBpZDogJ2Rlc2MnIH1dXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuYWJzY2lzc2EubGltaXQub3JkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbYmFzZVRyYW5zbGF0ZV09XCInQHByeS53aWRnZXQuY2hhcnQuJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJvdGhlcl9saW1pdFwiXG4gICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5hYnNjaXNzYS5saW1pdC5pc1RpbWVMaW1pdFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJkYXRlX2xpbWl0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnRpbWVJbnRlcnZhbCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVGltZUxpbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiW1xuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnc2Vjb25kJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnbWludXRlJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiAnaG91cicgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ2RheScgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3dlZWsnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICdtb250aCcgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogJ3F1YXJ0ZXInIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaWQ6ICd5ZWFyJyB9XG4gICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LmFic2Npc3NhLmxpbWl0LmludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFRyYW5zbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGJhc2VUcmFuc2xhdGU9XCJAcHJ5LndpZGdldC5jaGFydC50aW1lLlwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICBpZD1cImRhdGVfbGltaXRcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwib3BlcmF0aW9uc1wiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcGVyYXRpb24udGl0bGUnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcGVyYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbaXRlbXNdPVwib3BlcmF0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLm9wZXJhdGlvblwiXG4gICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgIGlkPVwib3BlcmF0aW9uc1wiXG4gICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNDb3B5Lm9yZGluYXRlLm9wZXJhdGlvbiAhPT0gT3BlcmF0aW9uLkNPVU5UXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJvcmRpbmF0ZVwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5vcmRpbmF0ZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcmRpbmF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwib3JkaW5hdGVBdHRyaWJ1dGVzJCB8IGFzeW5jIHwgcHJ5U29ydERhdGEgOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkub3JkaW5hdGUuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgIGlkPVwib3JkaW5hdGVcIlxuICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8cHJ5LWVkaXQtaW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQHByeS53aWRnZXQuY2hhcnQuZGF0YUxhYmVsXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZU9yZGluYXRlTGFiZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5vcmRpbmF0ZS5sYWJlbFwiXG4gICAgICAgICAgPjwvcHJ5LWVkaXQtaW5wdXQ+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHJhbnNsYXRlVG9WZWdhVHlwZShjb3B5T3JkaW5hdGVGaWVsZD8udHlwZSkgPT09ICdxdWFudGl0YXRpdmUnXCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlS2VlcDBPcmRpbmF0ZSgkZXZlbnQpXCIgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkub3JkaW5hdGUua2VlcDBcIlxuICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm9yaWdpbicgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkRPTlVUICYmIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5DSVJDVUxBUlwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fcG9wdXBfX2NvbnRlbnRfX2ZpZWxkcyAtY29uZGVuc2VkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlR3JvdXBCeSgkZXZlbnQpXCIgW25nTW9kZWxdPVwiISFvcHRpb25zQ29weS5ncm91cEJ5XCJcbiAgICAgICAgICAgICAgICA+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lmdyb3VwQnknIHwgaTE4biB9fVxuICAgICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5ncm91cEJ5XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfc2VyaWVzQXR0clwiPnt7ICdAcHJ5LndpZGdldC5jaGFydC5ncm91cEF0dHInIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUdyb3VwQnkoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncm91cEJ5LmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiYWJzY2lzc2FBdHRyaWJ1dGVzJCB8IGFzeW5jIHwgcHJ5U29ydERhdGEgOiBzb3J0QWN0aXZlIDogc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiY2hhcnRfc2VyaWVzQXR0clwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxwcnktc2NoZW1lLXBpY2tlclxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ29sb3JTY2hlbWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncm91cEJ5LmNvbG9yXCJcbiAgICAgICAgICAgICAgICA+PC9wcnktc2NoZW1lLXBpY2tlcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxwcnktY2hlY2tib3ggW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGguc3RhY2tlZFwiIChuZ01vZGVsQ2hhbmdlKT1cInRvZ2dsZVN0YWNrZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LnN0YWNrZWQnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzIC1jb25kZW5zZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHByeS1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVTb3J0KCRldmVudClcIiBbbmdNb2RlbF09XCIhIW9wdGlvbnNDb3B5LmdyYXBoLnNvcnRcIlxuICAgICAgICAgICAgICAgID57eyAnQHByeS53aWRnZXQuY2hhcnQuc29ydC50aXRsZScgfCBpMThuIH19XG4gICAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFvcHRpb25zQ29weS5ncmFwaC5zb3J0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfc2VyaWVzQXR0clwiPkF0dHJpYnV0ZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNvcnRBdHRyaWJ1dGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5ncmFwaC5zb3J0LmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwic29ydEF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjaGFydF9zb3J0QXR0clwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfc2VyaWVzQXR0clwiPlNvcnQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTb3J0RGlyZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuZ3JhcGguc29ydC5kaXJlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInNvcnREaXJlY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiY2hhcnRfc29ydERpcmVjdGlvblwiXG4gICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwib3B0aW9uc0NvcHkuZ3JhcGgudHlwZSA9PT0gR3JhcGhUeXBlLkRPTlVUIHx8IG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgPT09IEdyYXBoVHlwZS5DSVJDVUxBUlwiXG4gICAgICAgID5cbiAgICAgICAgICA8cHJ5LXNjaGVtZS1waWNrZXJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNpcmNsZUNvbG9yU2NoZW1lKCRldmVudClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uc0NvcHkuY2lyY2xlQ29sb3JTY2hlbWVcIlxuICAgICAgICAgID48L3ByeS1zY2hlbWUtcGlja2VyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIG9wdGlvbnNDb3B5LmdyYXBoLnR5cGUgIT09IEdyYXBoVHlwZS5ET05VVCAmJlxuICAgICAgICAgICAgb3B0aW9uc0NvcHkuZ3JhcGgudHlwZSAhPT0gR3JhcGhUeXBlLkNJUkNVTEFSICYmXG4gICAgICAgICAgICAhb3B0aW9uc0NvcHkuZ3JvdXBCeVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiY2hhcnRfYmFzZUNvbG9yXCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNvbG9yJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPHByeS1jb2xvci1waWNrZXJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQmFzZUNvbG9yKCRldmVudClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5iYXNlQ29sb3JcIlxuICAgICAgICAgICAgICBpZD1cImNoYXJ0X2Jhc2VDb2xvclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgICAgID48L3ByeS1jb2xvci1waWNrZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlT3B0aW9uIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ25lZC1vcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYS1jaGlwcyAtbWRcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtXCI+e3sgaXRlbSB9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9wcnktc2V0dGluZ3M+XG4gIDwvcHJ5LXdpZGdldC1oZWFkZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpc0NoYXJ0VmFsaWQkIHwgYXN5bmMpICYmICEobm9EYXRhJCB8IGFzeW5jKSAmJiAhKG5vQWdncmVnYXRpb25EYXRhJCB8IGFzeW5jKVwiPlxuICAgIDxkaXYgI3ZlZ2E+PC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJub0RhdGEkIHwgYXN5bmNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXRfX2Nob29zZS1wYXJhbWV0ZXJzXCI+XG4gICAgICA8aW1nXG4gICAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgICBhbHQ9XCJ7eyAnQHByeS53aWRnZXQuY2hhcnQubm9EYXRhJyB8IGkxOG4gfX1cIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0Lm5vRGF0YScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5EYXRhKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCIgaWNvblN2Zz1cImNvbnRyb2xcIj48L3ByeS1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQudG9vbHRpcC5yZWFkU2VhcmNoJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEobm9EYXRhJCB8IGFzeW5jKSAmJiAobm9BZ2dyZWdhdGlvbkRhdGEkIHwgYXN5bmMpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0X19jaG9vc2UtcGFyYW1ldGVyc1wiPlxuICAgICAgPGltZ1xuICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdF9fc2VhcmNoXCJcbiAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmFnZ05vUmVzdWx0JyB8IGkxOG4gfX1cIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmFnZ05vUmVzdWx0JyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlblNldHRpbmdzKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIDxwcnktaWNvbiBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjIwXCIgaWNvblN2Zz1cImNvbnRyb2xcIj48L3ByeS1pY29uPlxuICAgICAgICA8c3Bhbj57eyAnQHByeS53aWRnZXQuc2V0dGluZ3MudGl0bGUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShub0RhdGEkIHwgYXN5bmMpICYmICEobm9BZ2dyZWdhdGlvbkRhdGEkIHwgYXN5bmMpICYmICEoaXNDaGFydFZhbGlkJCB8IGFzeW5jKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldF9fY2hvb3NlLXBhcmFtZXRlcnNcIj5cbiAgICAgIDxpbWdcbiAgICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9zdmdzL3ByeV9yZWNoZXJjaGVfcGFzX2RlX3Jlc3VsdGF0LnN2Z1wiXG4gICAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC5jaGFydC5jaG9vc2VQYXJhbWV0ZXJzJyB8IGkxOG4gfX1cIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmNoYXJ0LmNob29zZVBhcmFtZXRlcnMnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvcGVuU2V0dGluZ3MoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIj5cbiAgICAgICAgPHByeS1pY29uIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjBcIiBpY29uU3ZnPVwiY29udHJvbFwiPjwvcHJ5LWljb24+XG4gICAgICAgIDxzcGFuPnt7ICdAcHJ5LndpZGdldC5zZXR0aW5ncy50aXRsZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=