@c8y/ngx-components 1021.24.1 → 1021.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter, InjectionToken, OnDestroy, OnInit } from '@angular/core';
2
2
  import { FormBuilder, ValidatorFn } from '@angular/forms';
3
- import { AggregationOption, AggregationOptionStatus } from '@c8y/ngx-components';
3
+ import { AggregationOption, AggregationOptionStatus, GainsightService } from '@c8y/ngx-components';
4
4
  import { DatapointsExceedingLimit, ExportConfig, ExportData, FileExportConfig, FileGenerator, FileTypeMetadata } from '../../datapoints-export-selector.model';
5
5
  import { DataFetchingService } from './data-fetching.service';
6
6
  import { DataProcessingService } from './data-processing.service';
@@ -14,6 +14,7 @@ export declare class DatapointsExportSelectorFileExporterComponent implements On
14
14
  private datapointsExportSelectorFileExporterService;
15
15
  private formBuilder;
16
16
  private generators;
17
+ private gainsightService;
17
18
  exportConfig: ExportConfig;
18
19
  onDownloadButtonStateChange: EventEmitter<boolean>;
19
20
  /**
@@ -97,7 +98,7 @@ export declare class DatapointsExportSelectorFileExporterComponent implements On
97
98
  dynamicFilesTypeMetadata: {
98
99
  [key: string]: FileTypeMetadata;
99
100
  };
100
- constructor(datapointsExportModalService: DataProcessingService, datapointsExportSelectorService: DataFetchingService, datapointsExportSelectorFileExporterService: DatapointsExportSelectorFileExporterService, formBuilder: FormBuilder, generators: FileGenerator[]);
101
+ constructor(datapointsExportModalService: DataProcessingService, datapointsExportSelectorService: DataFetchingService, datapointsExportSelectorFileExporterService: DatapointsExportSelectorFileExporterService, formBuilder: FormBuilder, generators: FileGenerator[], gainsightService: GainsightService);
101
102
  setFilesType(generators: FileGenerator[]): void;
102
103
  ngOnInit(): Promise<void>;
103
104
  ngOnDestroy(): void;
@@ -154,6 +155,7 @@ export declare class DatapointsExportSelectorFileExporterComponent implements On
154
155
  private updateDownloadButtonState;
155
156
  private resetFullExportRelatedProperties;
156
157
  private getInitialSelection;
158
+ private triggerGainsightDownloadEvent;
157
159
  static ɵfac: i0.ɵɵFactoryDeclaration<DatapointsExportSelectorFileExporterComponent, never>;
158
160
  static ɵcmp: i0.ɵɵComponentDeclaration<DatapointsExportSelectorFileExporterComponent, "c8y-datapoints-export-selector-file-exporter", never, { "exportConfig": { "alias": "exportConfig"; "required": false; }; }, { "onDownloadButtonStateChange": "onDownloadButtonStateChange"; }, never, never, true, never>;
159
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"datapoints-export-selector-file-exporter.component.d.ts","sourceRoot":"","sources":["../../../../datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datapoints-export-selector-file-exporter.component.d.ts","sourceRoot":"","sources":["../../../../datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  import { EventEmitter } from '@angular/core';
2
+ import { GainsightService } from '@c8y/ngx-components';
2
3
  import { BsModalService } from 'ngx-bootstrap/modal';
3
4
  import { ExportConfig } from './datapoints-export-selector.model';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare class DatapointsExportSelectorComponent {
6
7
  private bsModalService;
8
+ private gainsightService;
7
9
  exportConfig: ExportConfig;
8
10
  isOpen: EventEmitter<boolean>;
9
- constructor(bsModalService: BsModalService);
11
+ constructor(bsModalService: BsModalService, gainsightService: GainsightService);
10
12
  openExportModal(): Promise<void>;
11
13
  static ɵfac: i0.ɵɵFactoryDeclaration<DatapointsExportSelectorComponent, never>;
12
14
  static ɵcmp: i0.ɵɵComponentDeclaration<DatapointsExportSelectorComponent, "c8y-datapoints-export-selector", never, { "exportConfig": { "alias": "exportConfig"; "required": false; }; }, { "isOpen": "isOpen"; }, never, never, true, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"datapoints-export-selector.component.d.ts","sourceRoot":"","sources":["../../datapoints-export-selector/datapoints-export-selector.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;;AAElE,qBAMa,iCAAiC;IAIhC,OAAO,CAAC,cAAc;IAHzB,YAAY,EAAE,YAAY,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAA+B;gBAElD,cAAc,EAAE,cAAc;IAE5C,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;yCAN3B,iCAAiC;2CAAjC,iCAAiC;CAuB7C"}
1
+ {"version":3,"file":"datapoints-export-selector.component.d.ts","sourceRoot":"","sources":["../../datapoints-export-selector/datapoints-export-selector.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAgB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EACL,YAAY,EAEb,MAAM,oCAAoC,CAAC;;AAE5C,qBAMa,iCAAiC;IAK1C,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB;IALjB,YAAY,EAAE,YAAY,CAAC;IAC1B,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAA+B;gBAG5D,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB;IAGtC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;yCAT3B,iCAAiC;2CAAjC,iCAAiC;CAmC7C"}
@@ -228,5 +228,22 @@ export declare const TIME_RANGE_INTERVAL_UNITS_VALUES: {
228
228
  readonly months: "months";
229
229
  readonly custom: "custom";
230
230
  };
231
+ export declare const PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR: {
232
+ readonly EVENTS: {
233
+ readonly EXPORT_SELECTOR: "exportSelector";
234
+ };
235
+ readonly COMPONENTS: {
236
+ readonly DATAPOINTS_EXPORT_SELECTOR: "datapoints-export-selector";
237
+ readonly DATAPOINTS_EXPORT_SELECTOR_FILE_EXPORTER: "datapoints-export-selector-file-exporter";
238
+ };
239
+ readonly ACTIONS: {
240
+ readonly OPEN_MODAL: "openModal";
241
+ readonly DOWNLOAD_STARTED: "downloadStarted";
242
+ };
243
+ readonly EXPORT_CONFIG: {
244
+ readonly FULL_EXPORT_TYPE: "fullExportType";
245
+ readonly COMPACT_EXPORT_TYPE: "compactExportType";
246
+ };
247
+ };
231
248
  export {};
232
249
  //# sourceMappingURL=datapoints-export-selector.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"datapoints-export-selector.model.d.ts","sourceRoot":"","sources":["../../datapoints-export-selector/datapoints-export-selector.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datapoints-export-selector.model.d.ts","sourceRoot":"","sources":["../../datapoints-export-selector/datapoints-export-selector.model.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,10 @@ import { KeyValuePipe } from '@angular/common';
2
2
  import { Component, EventEmitter, Inject, InjectionToken, Input, Output } from '@angular/core';
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms';
5
- import { AGGREGATION_VALUES, CoreModule } from '@c8y/ngx-components';
5
+ import { AGGREGATION_VALUES, CoreModule, GainsightService } from '@c8y/ngx-components';
6
6
  import saveAs from 'file-saver';
7
7
  import { debounceTime, merge, Subject, takeUntil } from 'rxjs';
8
- import { EXPORT_MODE_VALUES, SERIES_DATA_MERGED_FILE_NAME } from '../../datapoints-export-selector.model';
8
+ import { EXPORT_MODE_VALUES, PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR, SERIES_DATA_MERGED_FILE_NAME } from '../../datapoints-export-selector.model';
9
9
  import { DataFetchingService } from './data-fetching.service';
10
10
  import { DataProcessingService } from './data-processing.service';
11
11
  import { DatapointsExportSelectorFileExporterService } from './datapoints-export-selector-file-exporter.service';
@@ -47,12 +47,13 @@ export const dateRangeValidator = (control) => {
47
47
  return null;
48
48
  };
49
49
  export class DatapointsExportSelectorFileExporterComponent {
50
- constructor(datapointsExportModalService, datapointsExportSelectorService, datapointsExportSelectorFileExporterService, formBuilder, generators) {
50
+ constructor(datapointsExportModalService, datapointsExportSelectorService, datapointsExportSelectorFileExporterService, formBuilder, generators, gainsightService) {
51
51
  this.datapointsExportModalService = datapointsExportModalService;
52
52
  this.datapointsExportSelectorService = datapointsExportSelectorService;
53
53
  this.datapointsExportSelectorFileExporterService = datapointsExportSelectorFileExporterService;
54
54
  this.formBuilder = formBuilder;
55
55
  this.generators = generators;
56
+ this.gainsightService = gainsightService;
56
57
  this.onDownloadButtonStateChange = new EventEmitter();
57
58
  /**
58
59
  * Represents aggregation selector options that are disabled.
@@ -147,6 +148,7 @@ export class DatapointsExportSelectorFileExporterComponent {
147
148
  zipName: value.zipName
148
149
  }));
149
150
  const selectedFileExports = this.getOnlySelectedFileExports(fileExports);
151
+ this.triggerGainsightDownloadEvent(selectedFileExports);
150
152
  await Promise.all(selectedFileExports.map(async ({ fileType, zipName }) => {
151
153
  const blob = await this.exportFile(fileType);
152
154
  await this.downloadFile(blob, fileType, zipName);
@@ -442,7 +444,28 @@ export class DatapointsExportSelectorFileExporterComponent {
442
444
  });
443
445
  return initialSelection;
444
446
  }
445
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsExportSelectorFileExporterComponent, deps: [{ token: i1.DataProcessingService }, { token: i2.DataFetchingService }, { token: i3.DatapointsExportSelectorFileExporterService }, { token: i4.FormBuilder }, { token: FILE_GENERATORS }], target: i0.ɵɵFactoryTarget.Component }); }
447
+ triggerGainsightDownloadEvent(selectedFileExports) {
448
+ const commonEventData = {
449
+ action: PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.ACTIONS.DOWNLOAD_STARTED,
450
+ component: PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.COMPONENTS
451
+ .DATAPOINTS_EXPORT_SELECTOR_FILE_EXPORTER,
452
+ selectedFileType: selectedFileExports.map(item => item.fileType)
453
+ };
454
+ if (this.isFullTypeOfExport) {
455
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.EVENTS.EXPORT_SELECTOR, {
456
+ ...commonEventData,
457
+ selectedExportType: PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.EXPORT_CONFIG.FULL_EXPORT_TYPE
458
+ });
459
+ }
460
+ else {
461
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.EVENTS.EXPORT_SELECTOR, {
462
+ ...commonEventData,
463
+ selectedExportType: PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.EXPORT_CONFIG.COMPACT_EXPORT_TYPE,
464
+ selectedAggregation: this.exportConfig.aggregation ?? AGGREGATION_VALUES.none
465
+ });
466
+ }
467
+ }
468
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsExportSelectorFileExporterComponent, deps: [{ token: i1.DataProcessingService }, { token: i2.DataFetchingService }, { token: i3.DatapointsExportSelectorFileExporterService }, { token: i4.FormBuilder }, { token: FILE_GENERATORS }, { token: i5.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
446
469
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DatapointsExportSelectorFileExporterComponent, isStandalone: true, selector: "c8y-datapoints-export-selector-file-exporter", inputs: { exportConfig: "exportConfig" }, outputs: { onDownloadButtonStateChange: "onDownloadButtonStateChange" }, ngImport: i0, template: "<div class=\"p-b-16\">\n <ng-container *ngIf=\"hasPermissionToReadAnyMeasurements; else hasNoRoleToReadAnyMeasurements\">\n <div class=\"p-16 text-center separator-bottom sticky-top bg-component\">\n <p class=\"text-medium text-16\">\n {{ 'Configure export' | translate }}\n </p>\n </div>\n <div\n class=\"p-t-24 p-r-16 p-l-16 gap-8 p-b-16 flex-wrap\"\n [ngClass]=\"{ 'separator-bottom': isFullTypeOfExport }\"\n >\n <div class=\"row\">\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-time-range\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [formGroup]=\"formGroup\"\n (onDateFromChange)=\"onDateFromChange($event)\"\n (onDateToChange)=\"onDateToChange($event)\"\n ></c8y-datapoints-export-selector-time-range>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-data-scope\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [disabledAggregationOptions]=\"disabledAggregationOptions\"\n [formGroup]=\"formGroup\"\n (onAggregationChange)=\"onAggregationChange($event)\"\n (onExportTypeChange)=\"onExportTypeChange($event)\"\n ></c8y-datapoints-export-selector-data-scope>\n </div>\n <div class=\"col-md-4\">\n <c8y-datapoints-export-selector-file-types\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [dynamicFilesTypeMetadata]=\"dynamicFilesTypeMetadata\"\n [formGroup]=\"formGroup\"\n ></c8y-datapoints-export-selector-file-types>\n </div>\n </div>\n </div>\n <ng-container\n *ngIf=\"!isFullTypeOfExport && !hasFetchedDataAnyValuesToExport && !isPreviewLoading\"\n >\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 separator-bottom d-flex\">\n <div\n class=\"alert alert-warning center-block\"\n role=\"alert\"\n data-cy=\"file-exporter--no-data-available\"\n translate\n >\n No data available.\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"datapointsExceedingBrowserDownloadLimit.length > 0\">\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 separator-bottom d-flex\">\n <div\n [class]=\"\n hasNoExportableData\n ? 'alert alert-warning center-block'\n : 'alert alert-info center-block'\n \"\n role=\"alert\"\n [innerHTML]=\"limitExceededMessage\"\n ></div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isFullTypeOfExport\">\n <c8y-datapoints-export-selector-preview\n *ngIf=\"this.hasPermissionToReadAnyMeasurements\"\n [hasFetchedDataAnyValuesToExport]=\"hasFetchedDataAnyValuesToExport\"\n [isPreviewLoading]=\"isPreviewLoading\"\n [previewTableData]=\"previewTableData\"\n ></c8y-datapoints-export-selector-preview>\n </ng-container>\n </ng-container>\n <ng-template #hasNoRoleToReadAnyMeasurements>\n <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n <div\n class=\"alert alert-info center-block\"\n role=\"alert\"\n translate\n >\n <p>To export data, you must meet at least one of these criteria:</p>\n <ul>\n <li>\n Have\n <b>READ permission for \"Measurements\" permission type</b>\n (either as a global role or for the specific source)\n </li>\n <li>\n Be the\n <b>owner of the source</b>\n you want to export data from\n </li>\n </ul>\n <p>Don't meet these requirements? Contact your system administrator for assistance.</p>\n </div>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DataPointsExportSelectorDataScopeComponent, selector: "c8y-datapoints-export-selector-data-scope", inputs: ["disabledAggregationOptions", "formGroup"], outputs: ["onAggregationChange", "onExportTypeChange"] }, { kind: "component", type: DataPointsExportSelectorFileTypesComponent, selector: "c8y-datapoints-export-selector-file-types", inputs: ["dynamicFilesTypeMetadata", "formGroup"] }, { kind: "component", type: DataPointsExportSelectorPreviewComponent, selector: "c8y-datapoints-export-selector-preview", inputs: ["hasFetchedDataAnyValuesToExport", "isPreviewLoading", "previewTableData"] }, { kind: "component", type: DataPointsExportSelectorTimeRangeComponent, selector: "c8y-datapoints-export-selector-time-range", inputs: ["formGroup"], outputs: ["onDateFromChange", "onDateToChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
447
470
  }
448
471
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsExportSelectorFileExporterComponent, decorators: [{
@@ -459,9 +482,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
459
482
  }], ctorParameters: () => [{ type: i1.DataProcessingService }, { type: i2.DataFetchingService }, { type: i3.DatapointsExportSelectorFileExporterService }, { type: i4.FormBuilder }, { type: undefined, decorators: [{
460
483
  type: Inject,
461
484
  args: [FILE_GENERATORS]
462
- }] }], propDecorators: { exportConfig: [{
485
+ }] }, { type: i5.GainsightService }], propDecorators: { exportConfig: [{
463
486
  type: Input
464
487
  }], onDownloadButtonStateChange: [{
465
488
  type: Output
466
489
  }] } });
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtZXhwb3J0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItbW9kYWwvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUVMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsbUJBQW1CLEVBR3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQUdsQixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLE1BQU0sTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBTUwsa0JBQWtCLEVB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Q29udGVudCI6WyJpbXBvcnQgeyBLZXlWYWx1ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvckZuXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1ZBTFVFUyxcbiAgQWdncmVnYXRpb25PcHRpb24sXG4gIEFnZ3JlZ2F0aW9uT3B0aW9uU3RhdHVzLFxuICBDb3JlTW9kdWxlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHNhdmVBcyBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWVyZ2UsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50Q291bnRzLFxuICBEYXRhcG9pbnREZXRhaWxzLFxuICBEYXRhcG9pbnRzRXhjZWVkaW5nTGltaXQsXG4gIERhdGFUb0V4cG9ydCxcbiAgRGF0YVRvRXhwb3J0V2l0aEJhY2tlbmRDcmVhdGVkRmlsZSxcbiAgRVhQT1JUX01PREVfVkFMVUVTLFxuICBFeHBvcnRDb25maWcsXG4gIEV4cG9ydERhdGEsXG4gIEZpbGVFeHBvcnRDb25maWcsXG4gIEZpbGVHZW5lcmF0b3IsXG4gIEZpbGVUeXBlTWV0YWRhdGEsXG4gIE1lcmdlZEV4cG9ydERldGFpbHMsXG4gIFNFUklFU19EQVRBX01FUkdFRF9GSUxFX05BTUVcbn0gZnJvbSAnLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgRGF0YUZldGNoaW5nU2VydmljZSB9IGZyb20gJy4vZGF0YS1mZXRjaGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFQcm9jZXNzaW5nU2VydmljZSB9IGZyb20gJy4vZGF0YS1wcm9jZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyU2VydmljZSB9IGZyb20gJy4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFQb2ludHNFeHBvcnRTZWxlY3RvclByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXByZXZpZXcvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRGF0YVNjb3BlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZGF0YS1zY29wZS9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZGF0YS1zY29wZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZVR5cGVzQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZmlsZS10eXBlcy9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZmlsZS10eXBlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yVGltZVJhbmdlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItdGltZS1yYW5nZS9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItdGltZS1yYW5nZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ1NWR2VuZXJhdG9yQWRhcHRlciB9IGZyb20gJy4vZ2VuZXJhdG9ycy9jc3YtZ2VuZXJhdG9yJztcbmltcG9ydCB7IEV4Y2VsR2VuZXJhdG9yQWRhcHRlciB9IGZyb20gJy4vZ2VuZXJhdG9ycy9leGNlbC1nZW5lcmF0b3InO1xuXG5leHBvcnQgY29uc3QgRklMRV9HRU5FUkFUT1JTID0gbmV3IEluamVjdGlvblRva2VuPEZpbGVHZW5lcmF0b3JbXT4oJ0ZJTEVfR0VORVJBVE9SUycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBbRXhjZWxHZW5lcmF0b3JBZGFwdGVyLCBDU1ZHZW5lcmF0b3JBZGFwdGVyXVxufSk7XG5cbmV4cG9ydCBjb25zdCBkYXRlUmFuZ2VWYWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcbik6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgY29uc3QgZGF0ZUZyb20gPSBjb250cm9sLmdldCgnZGF0ZUZyb20nKTtcbiAgY29uc3QgZGF0ZVRvID0gY29udHJvbC5nZXQoJ2RhdGVUbycpO1xuXG4gIGlmICghZGF0ZUZyb20gfHwgIWRhdGVUbykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGF0ZUZyb21WYWx1ZSA9IGRhdGVGcm9tLnZhbHVlO1xuICBjb25zdCBkYXRlVG9WYWx1ZSA9IGRhdGVUby52YWx1ZTtcbiAgaWYgKGRhdGVGcm9tVmFsdWUgJiYgZGF0ZVRvVmFsdWUpIHtcbiAgICBpZiAobmV3IERhdGUoZGF0ZUZyb21WYWx1ZSkgPiBuZXcgRGF0ZShkYXRlVG9WYWx1ZSkpIHtcbiAgICAgIGRhdGVGcm9tLnNldEVycm9ycyh7IGRhdGVBZnRlclJhbmdlTWF4OiB0cnVlIH0pO1xuICAgICAgZGF0ZVRvLnNldEVycm9ycyh7IGRhdGVCZWZvcmVSYW5nZU1pbjogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZUZyb20uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgZGF0ZVRvLnNldEVycm9ycyhudWxsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvcmVNb2R1bGUsXG4gICAgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRGF0YVNjb3BlQ29tcG9uZW50LFxuICAgIERhdGFQb2ludHNFeHBvcnRTZWxlY3RvckZpbGVUeXBlc0NvbXBvbmVudCxcbiAgICBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JQcmV2aWV3Q29tcG9uZW50LFxuICAgIERhdGFQb2ludHNFeHBvcnRTZWxlY3RvclRpbWVSYW5nZUNvbXBvbmVudCxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZXhwb3J0Q29uZmlnOiBFeHBvcnRDb25maWc7XG4gIEBPdXRwdXQoKSBvbkRvd25sb2FkQnV0dG9uU3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhZ2dyZWdhdGlvbiBzZWxlY3RvciBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkLlxuICAgKiBUaGlzIHN0YXRlIGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgZGF0ZSByYW5nZS5cbiAgICovXG4gIGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zOiBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyA9IHt9O1xuXG4gIGZvcm1Hcm91cDogUmV0dXJuVHlwZTxEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJDb21wb25lbnRbJ2NyZWF0ZUZvcm0nXT47XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIGFsbCBkYXRhcG9pbnRzIHRoYXQgbnVtYmVyIG9mIHJlY29yZHMgZXhjZWVkcyBhIHRocmVzaG9sZCwgd2hlcmUgZGF0YSBmb3IgdGhlc2UgZGF0YXBvaW50cyB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGUgYmFja2VuZC5cbiAgICogQXBwbGllcyBvbmx5IHRvIG1lYXN1cmVtZW50IEFQSSB3aGljaCBjYW4gcmV0dXJuIHByb2Nlc3NlZCBDU1YsIEV4Y2VsIG9yIFhNTCBkYXRhLlxuICAgKi9cbiAgZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0OiBEYXRhcG9pbnRzRXhjZWVkaW5nTGltaXRbXSA9IFtdO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW55IG9mIERhdGFUb0V4cG9ydCBvYmplY3RzIHRpbWVWYWx1ZU1hcCBwcm9wZXJ0eSBpcyBub3QgdW5kZWZpbmVkIChzZXJpZXMgZGF0YSlcbiAgICogb3IgZGF0YVBvaW50VG9FeHBvcnQgaXMgbm90IHVuZGVmaW5lZCBhdCBhbGwgKG1lYXN1cmVtZW50IGRhdGEpLlxuICAgKi9cblxuICBoYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGVyZSBpcyBubyBleHBvcnRhYmxlIGRhdGEgYmVjYXVzZSB0aGUgZGF0ZSByYW5nZSBvZiBhbGwgc2VsZWN0ZWQgZGF0YXBvaW50cyBleGNlZWRzIDEsMDAwLDAwMCByZWNvcmRzLlxuICAgKi9cbiAgaGFzTm9FeHBvcnRhYmxlRGF0YTogYm9vbGVhbjtcblxuICBoYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzID0gZmFsc2U7XG5cbiAgaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZnVsbCBvciBjb21wYWN0IHR5cGUgb2YgZXhwb3J0IGlzIHNlbGVjdGVkLlxuICAgKiBGdWxsIHR5cGUgb2YgZXhwb3J0IGlzIGJhc2VkIG9uIG1lYXN1cmVtZW50IEFQSSBkYXRhLlxuICAgKiBDb21wYWN0IHR5cGUgb2YgZXhwb3J0IGlzIGJhc2VkIG9uIHNlcmllcyBBUEkgZGF0YS5cbiAgICovXG4gIGlzRnVsbFR5cGVPZkV4cG9ydCA9IGZhbHNlO1xuXG4gIHByZXZpZXdUYWJsZURhdGE6IEV4cG9ydERhdGFbXTtcblxuICBsaW1pdEV4Y2VlZGVkTWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBwcm9jZXNzZWQgZGF0YSB0aGF0IGlzIHByZXBhcmVkIHRvIGJlIGV4cG9ydGVkIGlmIHNlcmllcyBkYXRhIHdhcyBmZXRjaGVkXG4gICAqIG9yIHNob3duIGluIHRoZSBwcmV2aWV3IHRhYmxlIGluIGNhc2Ugb2YgbWVhc3VyZW1lbnRzIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0W107XG4gIC8qKlxuICAgKiBDb250YWlucyBhIGxpc3Qgb2YgZGF0YXBvaW50cyB0aGF0IHNlbGVjdGVkIGRhdGUgcmFuZ2UgZXhjZWVkcyBBUEkgbGltaXQgb2YgMV8wMDBfMDAwIHJlY29yZHMuXG4gICAqL1xuICBwcml2YXRlIGRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQ6IERhdGFwb2ludHNFeGNlZWRpbmdMaW1pdFtdO1xuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgZmlsZSB0eXBlIHNlbGVjdGlvbiBjaGVja2JveGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWxlVHlwZVNlbGVjdGlvblN0YXRlOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcbiAgLyoqXG4gICAqIEhvbGQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGFnZ3JlZ2F0aW9uIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsQWdncmVnYXRpb246IEFnZ3JlZ2F0aW9uT3B0aW9uO1xuICAvKipcbiAgICogSG9sZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGF0ZUZyb20gZnJvbSB0aGUgZXhwb3J0IGNvbmZpZy5cbiAgICogVmFsdWUgd2lsbCBiZSBsb2FkZWQgb24gY29tcG9uZW50IGRlc3Ryb3kuXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxEYXRlRnJvbTogc3RyaW5nO1xuICAvKipcbiAgICogSG9sZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGF0ZVRvIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsRGF0ZVRvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb2xkIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBkYXRhcG9pbnREZXRhaWxzIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFNvbWUgbG9naWMgbWF5IGZpbHRlciBvdXQgZGF0YXBvaW50cyBpbiBkYXRhcG9pbnREZXRhaWxzIGFycmF5LCB0aGF0IGV4Y2VlZHMgMV8wMDBfMDAwIGxpbWl0IGZvciBtZWFzdXJlbWVudHMgQVBJLFxuICAgKiBidXQgZnVsbCBsaXN0IGlzIHN0aWxsIG5lZWRlZCB3aGVuIGNvbXBvbmVudCBpcyByZW9wZW5lZC5cbiAgICogVmFsdWUgd2lsbCBiZSBsb2FkZWQgb24gY29tcG9uZW50IGRlc3Ryb3kuXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxEYXRhcG9pbnREZXRhaWxzOiBEYXRhcG9pbnREZXRhaWxzW107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYWdncmVnYXRpb24gdmFsdWUgd2FzIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseS5cbiAgICogSXQgcHJldmVudHMgYSBjYXNlIHdoZXJlIGZldGNoaW5nIG1heSBiZSB0cmlnZ2VyZWQgdHdpY2Ugd2hlbiBleHBvcnQgdHlwZSBpcyBjaGFuZ2VkLlxuICAgKiBCb3RoIG9wdGlvbnMgYWxvbmUgY2FuIHRyaWdnZXIgZmV0Y2hpbmcgZGF0YS5cbiAgICovXG4gIHByaXZhdGUgaXNBZ2dyZWdhdGlvbkNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhbnkgb2YgdGhlIGV4cG9ydCBmaWxlIHR5cGVzIChDU1YsIEV4Y2VsKSBhcmUgY2hlY2tlZC5cbiAgICovXG4gIHByaXZhdGUgaXNBbnlPZkV4cG9ydEZpbGVUeXBlQ2hlY2tlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZGF0ZUZyb21TdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIGRhdGVUb1N1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGR5bmFtaWNGaWxlc1R5cGVNZXRhZGF0YTogeyBba2V5OiBzdHJpbmddOiBGaWxlVHlwZU1ldGFkYXRhIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRNb2RhbFNlcnZpY2U6IERhdGFQcm9jZXNzaW5nU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2U6IERhdGFGZXRjaGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlOiBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIEBJbmplY3QoRklMRV9HRU5FUkFUT1JTKSBwcml2YXRlIGdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXVxuICApIHtcbiAgICB0aGlzLnNldEZpbGVzVHlwZSh0aGlzLmdlbmVyYXRvcnMpO1xuXG4gICAgdGhpcy5kYXRlRnJvbVN1YmplY3RcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMDApLCB0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHVwZGF0ZWREYXRlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVEYXRlQW5kRmV0Y2hEYXRhKCdkYXRlRnJvbScsIHVwZGF0ZWREYXRlKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5kYXRlVG9TdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jICh1cGRhdGVkRGF0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRGF0ZUFuZEZldGNoRGF0YSgnZGF0ZVRvJywgdXBkYXRlZERhdGUpO1xuICAgICAgfSk7XG4gIH1cblxuICBzZXRGaWxlc1R5cGUoZ2VuZXJhdG9yczogRmlsZUdlbmVyYXRvcltdKSB7XG4gICAgZ2VuZXJhdG9ycy5mb3JFYWNoKGcgPT4ge1xuICAgICAgdGhpcy5keW5hbWljRmlsZXNUeXBlTWV0YWRhdGFbZy5nZXRUeXBlKCldID0ge1xuICAgICAgICBsYWJlbDogZy5nZXRMYWJlbCgpLFxuICAgICAgICBpY29uOiBnLmdldEljb24oKSxcbiAgICAgICAgdGl0bGU6IGcuZ2V0VGl0bGUoKSxcbiAgICAgICAgZXh0ZW5zaW9uOiBnLmdldEZpbGVFeHRlbnNpb24oKSxcbiAgICAgICAgemlwTmFtZTogZy5nZXRaaXBOYW1lKCksXG4gICAgICAgIHR5cGU6IGcuZ2V0VHlwZSgpXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlc1Blcm1pdHRlZFRvUmVhZDogc3RyaW5nW10gPVxuICAgICAgYXdhaXQgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JTZXJ2aWNlLmdldFNvdXJjZXNXaXRoUGVybWlzc2lvbnNUb1JlYWQoXG4gICAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHNcbiAgICAgICk7XG5cbiAgICBpZiAoc291cmNlc1Blcm1pdHRlZFRvUmVhZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlc1Blcm1pdHRlZFRvUmVhZC5sZW5ndGggIT09IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzID0gdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscy5maWx0ZXIoZGF0YVBvaW50ID0+XG4gICAgICAgIHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQuaW5jbHVkZXMoU3RyaW5nKGRhdGFQb2ludC5zb3VyY2UpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhc1Blcm1pc3Npb25Ub1JlYWRBbnlNZWFzdXJlbWVudHMgPSB0cnVlO1xuXG4gICAgdGhpcy5zdG9yZUluaXRpYWxDaGFuZ2VhYmxlQ29uZmlnKCk7XG5cbiAgICB0aGlzLmZpbGVUeXBlU2VsZWN0aW9uU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24odGhpcy5keW5hbWljRmlsZXNUeXBlTWV0YWRhdGEsIFswXSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgIHRoaXMuZGF0YVRvRXhwb3J0ID0gYXdhaXQgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JTZXJ2aWNlLmZldGNoQW5kUHJlcGFyZURhdGFUb0V4cG9ydChcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLFxuICAgICAgdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnRcbiAgICApO1xuXG4gICAgdGhpcy5oYW5kbGVEYXRlU2VsZWN0b3JDaGFuZ2VzKCk7XG4gICAgdGhpcy5kZXRlcm1pbmVTaG93aW5nUHJldmlld09yRW1wdHlTdGF0ZSgpO1xuICAgIHRoaXMuaGFuZGxlRXhwb3J0TW9kZUNoYW5nZXMoKTtcbiAgICB0aGlzLmhhbmRsZUZpbGVUeXBlU2VsZWN0aW9uQ2hhbmdlcygpO1xuICAgIHRoaXMuaGFuZGxlRm9ybVZhbGlkYXRpb25DaGFuZ2VzKCk7XG5cbiAgICB0aGlzLnVwZGF0ZUZpbGVUeXBlQ29udHJvbCgpO1xuXG4gICAgdGhpcy51cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1N0YXRlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5sb2FkSW5pdGlhbENoYW5nZWFibGVDb25maWcoKTtcbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEFuZERvd25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVFeHBvcnRzOiBGaWxlRXhwb3J0Q29uZmlnW10gPSBPYmplY3QuZW50cmllcyh0aGlzLmR5bmFtaWNGaWxlc1R5cGVNZXRhZGF0YSkubWFwKFxuICAgICAgKFtfLCB2YWx1ZV0pID0+ICh7XG4gICAgICAgIGZpbGVUeXBlOiB2YWx1ZS50eXBlIGFzIHN0cmluZyxcbiAgICAgICAgemlwTmFtZTogdmFsdWUuemlwTmFtZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWxlRXhwb3J0cyA9IHRoaXMuZ2V0T25seVNlbGVjdGVkRmlsZUV4cG9ydHMoZmlsZUV4cG9ydHMpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBzZWxlY3RlZEZpbGVFeHBvcnRzLm1hcChhc3luYyAoeyBmaWxlVHlwZSwgemlwTmFtZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCB0aGlzLmV4cG9ydEZpbGUoZmlsZVR5cGUpO1xuICAgICAgICBhd2FpdCB0aGlzLmRvd25sb2FkRmlsZShibG9iLCBmaWxlVHlwZSwgemlwTmFtZSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2UuY2xlYW51cENhY2hlZERhdGEoKTtcbiAgfVxuXG4gIGdldE9ubHlTZWxlY3RlZEZpbGVFeHBvcnRzKGZpbGVFeHBvcnRzOiBGaWxlRXhwb3J0Q29uZmlnW10pOiBGaWxlRXhwb3J0Q29uZmlnW10ge1xuICAgIHJldHVybiBmaWxlRXhwb3J0cy5maWx0ZXIoZiA9PiB0aGlzLmZpbGVUeXBlU2VsZWN0aW9uU3RhdGVbZi5maWxlVHlwZV0gPT09IHRydWUpO1xuICB9XG5cbiAgYXN5bmMgZXhwb3J0RmlsZShmaWxlVHlwZTogc3RyaW5nKTogUHJvbWlzZTxCbG9iIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydFxuICAgICAgPyBhd2FpdCB0aGlzLmV4cG9ydE1lYXN1cmVtZW50RmlsZShmaWxlVHlwZSlcbiAgICAgIDogYXdhaXQgdGhpcy5leHBvcnRTZXJpZXNGaWxlKGZpbGVUeXBlKTtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkRmlsZShcbiAgICBibG9iOiBCbG9iIHwgbnVsbCxcbiAgICBmaWxlVHlwZTogc3RyaW5nLFxuICAgIG1lYXN1cmVtZW50c1ppcEZpbGVOYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQgPVxuICAgICAgdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQuZmlsdGVyKFxuICAgICAgICBkYXRhcG9pbnQgPT4gIXRoaXMuZGF0YVBvaW50c0V4Y2VlZGluZ09uZU1pbGxpb25MaW1pdC5pbmNsdWRlcyhkYXRhcG9pbnQpXG4gICAgICApO1xuXG4gICAgY29uc3Qgc2hvdWxkU2hvd0FsZXJ0ID0gdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMDtcblxuICAgIC8vIEhhbmRsZXMgYSBjYXNlIHdoZXJlIGFsbCBmaWxlcyBhcmUgc2VudCBieSBlbWFpbC5cbiAgICBpZiAoIWJsb2IgJiYgc2hvdWxkU2hvd0FsZXJ0KSB7XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2Uuc2hvd1NlbmRWaWFFbWFpbEluZm9BbGVydChcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0XG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChibG9iKSB7XG4gICAgICAvLyBIYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHNvbWUgb2YgdGhlIGZpbGVzIGFyZSBzZW50IGJ5IGVtYWlsLlxuICAgICAgaWYgKHNob3VsZFNob3dBbGVydCkge1xuICAgICAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2Uuc2hvd1NlbmRWaWFFbWFpbEluZm9BbGVydChcbiAgICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydFxuICAgICAgICA/IHNhdmVBcyhibG9iLCBtZWFzdXJlbWVudHNaaXBGaWxlTmFtZSlcbiAgICAgICAgOiBzYXZlQXMoYmxvYiwgYmxvYltTRVJJRVNfREFUQV9NRVJHRURfRklMRV9OQU1FXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgYSBtZWFzdXJlbWVudCBmaWxlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAgICpcbiAgICogTWVhc3VyZW1lbnRzIEFQSSBkb2VzIHByb3ZpZGUgYSB3YXkgdG8gZmV0Y2ggYSBwcmVwcm9jZXNzZWQgQ1NWL0V4Y2VsIGZpbGUuXG4gICAqXG4gICAqIEF0IHRoaXMgcG9pbnQgYSBiYWNrZWQgZmlsZSBuZWVkcyB0byBiZSBmZXRjaGVkLlxuICAgKiBNZWFzdXJlbWVudCBkYXRhIHVzZWQgZm9yIGEgcHJldmlldyBjb250YWlucyBqdXN0IDUgZmlyc3QgcmVjb3Jkc1xuICAgKiBhbmQgaXQncyBub3QgZmV0Y2hlZCB3aXRoIENTVi9FeGNlbCBoZWFkZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZVR5cGUgLSBUaGUgdHlwZSBvZiBmaWxlIHRvIGV4cG9ydC5cbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBCbG9iIHJlcHJlc2VudGluZyB0aGUgZXhwb3J0ZWQgZmlsZSBvciBudWxsIHdoZW4gbm8gZGF0YSB0byBleHBvcnQgb3IgaXQncyBzZW50IHZpYSBlbWFpbC5cbiAgICovXG4gIGFzeW5jIGV4cG9ydE1lYXN1cmVtZW50RmlsZShmaWxlVHlwZTogc3RyaW5nKTogUHJvbWlzZTxCbG9iPiB8IG51bGwge1xuICAgIGNvbnN0IHsgYWNjZXB0VHlwZSwgZXh0ZW5zaW9uIH0gPSB0aGlzLmRhdGFwb2ludHNFeHBvcnRNb2RhbFNlcnZpY2UuZmlsZVR5cGVzQ29uZmlnc1tmaWxlVHlwZV07XG5cbiAgICBjb25zdCB1cGRhdGVkRXhwb3J0Q29uZmlnOiBFeHBvcnRDb25maWcgPSB0aGlzLmV4Y2x1ZGVEYXRhcG9pbnRzVGhhdEV4Y2VlZHNBcGlMaW1pdChcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0V2l0aEJhY2tlbmRDcmVhdGVkRmlsZVtdID1cbiAgICAgIGF3YWl0IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5mZXRjaE1lYXN1cmVtZW50RGF0YUZpbGVzQW5kUGFpcldpdGhTb3VyY2VEZXRhaWxzKFxuICAgICAgICBhY2NlcHRUeXBlLFxuICAgICAgICB1cGRhdGVkRXhwb3J0Q29uZmlnXG4gICAgICApO1xuXG4gICAgY29uc3QgaXNBbGxVbmRlZmluZWQgPSBkYXRhVG9FeHBvcnQuZXZlcnkoZGF0YSA9PiBkYXRhID09PSB1bmRlZmluZWQpO1xuICAgIGlmIChpc0FsbFVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyU2VydmljZS5nZXRNZWFzdXJlbWVudEV4cG9ydGVkRGF0YUJsb2IoXG4gICAgICBleHRlbnNpb24sXG4gICAgICBkYXRhVG9FeHBvcnRcbiAgICApO1xuICB9XG5cbiAgZXhjbHVkZURhdGFwb2ludHNUaGF0RXhjZWVkc0FwaUxpbWl0KGV4cG9ydENvbmZpZzogRXhwb3J0Q29uZmlnKTogRXhwb3J0Q29uZmlnIHtcbiAgICBjb25zdCBza2lwcGVkRGF0YXBvaW50c1NvdXJjZTogc3RyaW5nW10gPSB0aGlzLmRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQubWFwKFxuICAgICAgZGF0YXBvaW50ID0+IGRhdGFwb2ludC5kYXRhcG9pbnREZXRhaWwuc291cmNlLnRvU3RyaW5nKClcbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyZWREYXRhcG9pbnRzOiBEYXRhcG9pbnREZXRhaWxzW10gPSBleHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscy5maWx0ZXIoXG4gICAgICBkYXRhcG9pbnQgPT4gIXNraXBwZWREYXRhcG9pbnRzU291cmNlLmluY2x1ZGVzKFN0cmluZyhkYXRhcG9pbnQuc291cmNlKSlcbiAgICApO1xuXG4gICAgZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMgPSBmaWx0ZXJlZERhdGFwb2ludHM7XG4gICAgcmV0dXJuIGV4cG9ydENvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoZSBzZXJpZXMgZGF0YSB0byBhIGZpbGUgb2YgdGhlIHNwZWNpZmllZCB0eXBlLlxuICAgKlxuICAgKiBTZXJpZXMgQVBJIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gZmV0Y2ggYSBwcmVwcm9jZXNzZWQgQ1NWL0V4Y2VsIGZpbGUuXG4gICAqXG4gICAqIFNlcmllcyBkYXRhIHVzZWQgZm9yIGV4cG9ydGluZyBhIGZpbGUgaXMgYWxyZWFkeSBmZXRjaGVkIGZvciBhIHByZXZpZXdcbiAgICogYW5kIGNhbiBiZSByZXVzZWQgZm9yIGV4cG9ydGluZy5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVUeXBlIC0gVGhlIHR5cGUgb2YgZmlsZSB0byBleHBvcnQgKGUuZy4sIENTViwgRXhjZWwpLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEJsb2IgcmVwcmVzZW50aW5nIHRoZSBleHBvcnRlZCBmaWxlLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0U2VyaWVzRmlsZShmaWxlVHlwZTogc3RyaW5nKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgY29uc3QgbWVyZ2VkRXhwb3J0RGV0YWlsczogTWVyZ2VkRXhwb3J0RGV0YWlscyA9IHtcbiAgICAgIGFnZ3JlZ2F0aW9uOiB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbixcbiAgICAgIGRhdGVGcm9tOiB0aGlzLmV4cG9ydENvbmZpZy5kYXRlRnJvbSxcbiAgICAgIGRhdGVUbzogdGhpcy5leHBvcnRDb25maWcuZGF0ZVRvXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2UuZ2V0U2VyaWVzRXhwb3J0ZWREYXRhQmxvYihcbiAgICAgIGZpbGVUeXBlLFxuICAgICAgdGhpcy5kYXRhVG9FeHBvcnQsXG4gICAgICBtZXJnZWRFeHBvcnREZXRhaWxzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG9uQWdncmVnYXRpb25DaGFuZ2UoYWdncmVnYXRpb246IEFnZ3JlZ2F0aW9uT3B0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24gPSBhZ2dyZWdhdGlvbjtcbiAgICBpZiAoIXRoaXMuaXNBZ2dyZWdhdGlvbkNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5KSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUV4cG9ydENvbmZpZ0FuZEZldGNoRGF0YSgpO1xuICAgICAgdGhpcy51cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRlRnJvbUNoYW5nZSh1cGRhdGVkRGF0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlRnJvbVN1YmplY3QubmV4dCh1cGRhdGVkRGF0ZSk7XG4gIH1cblxuICBvbkRhdGVUb0NoYW5nZSh1cGRhdGVkRGF0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlVG9TdWJqZWN0Lm5leHQodXBkYXRlZERhdGUpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGF0ZUFuZEZldGNoRGF0YShcbiAgICBkYXRlVHlwZTogJ2RhdGVGcm9tJyB8ICdkYXRlVG8nLFxuICAgIHVwZGF0ZWREYXRlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5leHBvcnRDb25maWdbZGF0ZVR5cGVdID0gdXBkYXRlZERhdGU7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVFeHBvcnRDb25maWdBbmRGZXRjaERhdGEoKTtcblxuICAgIGlmICh0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5kZXRlcm1pbmVJZk1lYXN1cmVtZW50UmVzcG9uc2VXaWxsQmVQcm9jZXNzZWRCeUJhY2tlbmQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25FeHBvcnRUeXBlQ2hhbmdlKGV4cG9ydFR5cGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChleHBvcnRUeXBlID09PSBFWFBPUlRfTU9ERV9WQUxVRVMuZnVsbCkge1xuICAgICAgdGhpcy5pc0FnZ3JlZ2F0aW9uQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb24uc2V0VmFsdWUoQUdHUkVHQVRJT05fVkFMVUVTLm5vbmUpO1xuICAgICAgdGhpcy5pc0FnZ3JlZ2F0aW9uQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcblxuICAgICAgdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQgPSB0cnVlO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVFeHBvcnRDb25maWdBbmRGZXRjaERhdGEoKTtcbiAgICAgIGF3YWl0IHRoaXMuZGV0ZXJtaW5lSWZNZWFzdXJlbWVudFJlc3BvbnNlV2lsbEJlUHJvY2Vzc2VkQnlCYWNrZW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldEZ1bGxFeHBvcnRSZWxhdGVkUHJvcGVydGllcygpO1xuICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0ID0gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVFeHBvcnRDb25maWdBbmRGZXRjaERhdGEoKTtcblxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNTdGF0ZSgpO1xuXG4gICAgdGhpcy51cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURpc2FibGVkQWdncmVnYXRpb25PcHRpb25zU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucyA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2UudXBkYXRlRGlzYWJsZWRTdGF0ZU9mQWdncmVnYXRpb25PcHRpb25FbnRyaWVzKFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbS52YWx1ZSxcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZVRvLnZhbHVlLFxuICAgICAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAge1xuICAgICAgICBkYXRlRnJvbTogbmV3IEZvcm1Db250cm9sKHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5leHBvcnRDb25maWcuZGF0ZVRvKSxcbiAgICAgICAgYWdncmVnYXRpb246IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbiA/IHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uIDogQUdHUkVHQVRJT05fVkFMVUVTLm5vbmVcbiAgICAgICAgKSxcbiAgICAgICAgZXhwb3J0TW9kZTogbmV3IEZvcm1Db250cm9sKEVYUE9SVF9NT0RFX1ZBTFVFUy5jb21wYWN0KSxcbiAgICAgICAgZmlsZVR5cGVzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAgICAgIHRoaXMuZ2VuZXJhdG9ycy5yZWR1Y2UoKGEsIGMpID0+IHtcbiAgICAgICAgICAgIGFbYy5nZXRUeXBlKCldID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsaWRhdG9yczogW2RhdGVSYW5nZVZhbGlkYXRvcl1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLmlzUHJldmlld0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucHJldmlld1RhYmxlRGF0YSA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRNb2RhbFNlcnZpY2UudHJhbnNmb3JtVG9FeHBvcnRGaWxlU3RydWN0dXJlRm9yUHJldmlldyh0aGlzLmRhdGFUb0V4cG9ydCk7XG4gICAgdGhpcy5pc1ByZXZpZXdMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGVTZWxlY3RvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgYWdncmVnYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb247XG4gICAgY29uc3QgZGF0ZUZyb21TZWxlY3RvciA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVGcm9tO1xuICAgIGNvbnN0IGRhdGVUb1NlbGVjdG9yID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZVRvO1xuXG4gICAgY29uc3QgdXBkYXRlQWdncmVnYXRpb25PcHRpb25zID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCkge1xuICAgICAgICB0aGlzLnVwZGF0ZURpc2FibGVkQWdncmVnYXRpb25PcHRpb25zU3RhdGUoKTtcblxuICAgICAgICBjb25zdCBmaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uVmFsdWU6IEFnZ3JlZ2F0aW9uT3B0aW9uID1cbiAgICAgICAgICB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2Uuc2V0VG9GaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uT3B0aW9uSWZDdXJyZW50SXNEaXNhYmxlZChcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC52YWx1ZSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNcbiAgICAgICAgICApO1xuXG4gICAgICAgIGlmIChmaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uVmFsdWUpIHtcbiAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wuc2V0VmFsdWUoZmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBtZXJnZShkYXRlRnJvbVNlbGVjdG9yLnZhbHVlQ2hhbmdlcywgZGF0ZVRvU2VsZWN0b3IudmFsdWVDaGFuZ2VzKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh1cGRhdGVBZ2dyZWdhdGlvbk9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFeHBvcnRNb2RlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbjtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmV4cG9ydE1vZGUudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGV4cG9ydE1vZGVWYWx1ZSA9PiB7XG4gICAgICAgIGlmIChleHBvcnRNb2RlVmFsdWUudG9TdHJpbmcoKSA9PT0gRVhQT1JUX01PREVfVkFMVUVTLmZ1bGwpIHtcbiAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZpbGVUeXBlU2VsZWN0aW9uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5maWxlVHlwZXMudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGZpbGVUeXBlc1NlbGVjdGlvblN0YXRlID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxlVHlwZVNlbGVjdGlvblN0YXRlKGZpbGVUeXBlc1NlbGVjdGlvblN0YXRlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWxlVHlwZVNlbGVjdGlvblN0YXRlKGNoZWNrYm94ZXNTdGF0ZTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICB0aGlzLmlzQW55T2ZFeHBvcnRGaWxlVHlwZUNoZWNrZWQgPSBPYmplY3QudmFsdWVzKGNoZWNrYm94ZXNTdGF0ZSkuc29tZShcbiAgICAgIHZhbHVlID0+IHZhbHVlID09PSB0cnVlXG4gICAgKTtcbiAgICB0aGlzLmZpbGVUeXBlU2VsZWN0aW9uU3RhdGUgPSBjaGVja2JveGVzU3RhdGU7XG4gICAgdGhpcy51cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZvcm1WYWxpZGF0aW9uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVEb3dubG9hZEJ1dHRvblN0YXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbGVUeXBlQ29udHJvbCgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlVHlwZXNDb250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZmlsZVR5cGVzO1xuICAgIGlmIChmaWxlVHlwZXNDb250cm9sKSB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBmaWxlVHlwZXNDb250cm9sLnZhbHVlIHx8IHt9O1xuICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0geyAuLi5jdXJyZW50VmFsdWUgfTtcblxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlKS5mb3JFYWNoKChbZmlsZVR5cGUsIGlzU2VsZWN0ZWRdKSA9PiB7XG4gICAgICAgIGlmIChmaWxlVHlwZSBpbiBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICB1cGRhdGVkVmFsdWVbZmlsZVR5cGVdID0gaXNTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZpbGVUeXBlc0NvbnRyb2wucGF0Y2hWYWx1ZSh1cGRhdGVkVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lU2hvd2luZ1ByZXZpZXdPckVtcHR5U3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgaGFzRGF0YVRvU2hvdyA9IHRoaXMuZGF0YVRvRXhwb3J0LnNvbWUoZGF0YVRvRXhwb3J0SXRlbSA9PlxuICAgICAgdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnRcbiAgICAgICAgPyAhIWRhdGFUb0V4cG9ydEl0ZW1cbiAgICAgICAgOiBkYXRhVG9FeHBvcnRJdGVtLnRpbWVWYWx1ZU1hcCAmJiBPYmplY3Qua2V5cyhkYXRhVG9FeHBvcnRJdGVtLnRpbWVWYWx1ZU1hcCkubGVuZ3RoID4gMFxuICAgICk7XG5cbiAgICB0aGlzLmhhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnQgPSBoYXNEYXRhVG9TaG93O1xuXG4gICAgaWYgKGhhc0RhdGFUb1Nob3cpIHtcbiAgICAgIHRoaXMucHJlcGFyZVByZXZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1ByZXZpZXdMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZXRlcm1pbmVJZk1lYXN1cmVtZW50UmVzcG9uc2VXaWxsQmVQcm9jZXNzZWRCeUJhY2tlbmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc1ByZXZpZXdMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0ID1cbiAgICAgIGF3YWl0IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5nZXREYXRhcG9pbnRzRXhjZWVkaW5nTGltaXQodGhpcy5leHBvcnRDb25maWcpO1xuXG4gICAgY29uc3QgeyBicm93c2VyRG93bmxvYWRhYmxlQ291bnQsIGVtYWlsRGVsaXZlcmFibGVDb3VudCwgbm9uUmV0cmlldmFibGVDb3VudCB9ID1cbiAgICAgIHRoaXMuY2FsY3VsYXRlRGF0YXBvaW50Q291bnRzKCk7XG5cbiAgICB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEgPVxuICAgICAgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50ID09PSAwICYmIGVtYWlsRGVsaXZlcmFibGVDb3VudCA9PT0gMCAmJiBub25SZXRyaWV2YWJsZUNvdW50ID4gMDtcblxuICAgIGlmICh0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggPiAwICYmICF0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEpIHtcbiAgICAgIHRoaXMubGltaXRFeGNlZWRlZE1lc3NhZ2UgPSB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2UuZ2V0TGltaXRFeGNlZWRlZE1lc3NhZ2UoXG4gICAgICAgIHRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YSxcbiAgICAgICAgZW1haWxEZWxpdmVyYWJsZUNvdW50LFxuICAgICAgICBicm93c2VyRG93bmxvYWRhYmxlQ291bnQsXG4gICAgICAgIG5vblJldHJpZXZhYmxlQ291bnQsXG4gICAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMubGVuZ3RoXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggPiAwICYmIHRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YSkge1xuICAgICAgdGhpcy5saW1pdEV4Y2VlZGVkTWVzc2FnZSA9IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5nZXRMaW1pdEV4Y2VlZGVkTWVzc2FnZShcbiAgICAgICAgdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuXG4gICAgdGhpcy5pc1ByZXZpZXdMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZURhdGFwb2ludENvdW50cygpOiBEYXRhcG9pbnRDb3VudHMge1xuICAgIGNvbnN0IFJFQ09SRF9BUElfTElNSVQgPSAxXzAwMF8wMDA7XG5cbiAgICB0aGlzLmRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQgPSB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5maWx0ZXIoXG4gICAgICBkYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQgPT5cbiAgICAgICAgZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0LnRvdGFsRWxlbWVudHMgPiBSRUNPUkRfQVBJX0xJTUlUXG4gICAgKTtcblxuICAgIGNvbnN0IG5vblJldHJpZXZhYmxlQ291bnQgPSB0aGlzLmRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQubGVuZ3RoO1xuXG4gICAgY29uc3QgZW1haWxEZWxpdmVyYWJsZUNvdW50ID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0Lmxlbmd0aCAtIG5vblJldHJpZXZhYmxlQ291bnQ7XG5cbiAgICBjb25zdCBicm93c2VyRG93bmxvYWRhYmxlQ291bnQgPVxuICAgICAgdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscy5sZW5ndGggLSBlbWFpbERlbGl2ZXJhYmxlQ291bnQgLSBub25SZXRyaWV2YWJsZUNvdW50O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJyb3dzZXJEb3dubG9hZGFibGVDb3VudCxcbiAgICAgIGVtYWlsRGVsaXZlcmFibGVDb3VudCxcbiAgICAgIG5vblJldHJpZXZhYmxlQ291bnRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yZUluaXRpYWxDaGFuZ2VhYmxlQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbERhdGVGcm9tID0gdGhpcy5leHBvcnRDb25maWcuZGF0ZUZyb207XG4gICAgdGhpcy5pbml0aWFsRGF0ZVRvID0gdGhpcy5leHBvcnRDb25maWcuZGF0ZVRvO1xuICAgIHRoaXMuaW5pdGlhbERhdGFwb2ludERldGFpbHMgPSB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzO1xuICAgIGlmICghdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbEFnZ3JlZ2F0aW9uID0gdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkSW5pdGlhbENoYW5nZWFibGVDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5leHBvcnRDb25maWcuZGF0ZUZyb20gPSB0aGlzLmluaXRpYWxEYXRlRnJvbTtcbiAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRlVG8gPSB0aGlzLmluaXRpYWxEYXRlVG87XG4gICAgdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscyA9IHRoaXMuaW5pdGlhbERhdGFwb2ludERldGFpbHM7XG4gICAgaWYgKCF0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCkge1xuICAgICAgdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24gPSB0aGlzLmluaXRpYWxBZ2dyZWdhdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUV4cG9ydENvbmZpZ0FuZEZldGNoRGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLm9uRG93bmxvYWRCdXR0b25TdGF0ZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLmRhdGFUb0V4cG9ydCA9IGF3YWl0IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5mZXRjaEFuZFByZXBhcmVEYXRhVG9FeHBvcnQoXG4gICAgICB0aGlzLmV4cG9ydENvbmZpZyxcbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgKTtcblxuICAgIHRoaXMuZGV0ZXJtaW5lU2hvd2luZ1ByZXZpZXdPckVtcHR5U3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjYW5FbmFibGVEb3dubG9hZEJ1dHRvbiA9XG4gICAgICB0aGlzLmhhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnQgJiZcbiAgICAgICF0aGlzLmZvcm1Hcm91cC5pbnZhbGlkICYmXG4gICAgICB0aGlzLmlzQW55T2ZFeHBvcnRGaWxlVHlwZUNoZWNrZWQgJiZcbiAgICAgICF0aGlzLmhhc05vRXhwb3J0YWJsZURhdGE7XG5cbiAgICB0aGlzLm9uRG93bmxvYWRCdXR0b25TdGF0ZUNoYW5nZS5lbWl0KGNhbkVuYWJsZURvd25sb2FkQnV0dG9uKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRGdWxsRXhwb3J0UmVsYXRlZFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhID0gZmFsc2U7XG4gICAgdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFNlbGVjdGlvbihcbiAgICBmaWxlVHlwZTogeyBba2V5OiBzdHJpbmddOiBGaWxlVHlwZU1ldGFkYXRhIH0sXG4gICAgc2VsZWN0QnlEZWZhdWx0OiBudW1iZXJbXVxuICApIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmlsZVR5cGUpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxTZWxlY3Rpb24gPSBrZXlzLnJlZHVjZTx7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfT4oKGFjYywga2V5KSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBzZWxlY3RCeURlZmF1bHQuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGtleXMubGVuZ3RoKSB7XG4gICAgICAgIGluaXRpYWxTZWxlY3Rpb25ba2V5c1tpbmRleF1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpbml0aWFsU2VsZWN0aW9uO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC1iLTE2XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzOyBlbHNlIGhhc05vUm9sZVRvUmVhZEFueU1lYXN1cmVtZW50c1wiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTE2IHRleHQtY2VudGVyIHNlcGFyYXRvci1ib3R0b20gc3RpY2t5LXRvcCBiZy1jb21wb25lbnRcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1tZWRpdW0gdGV4dC0xNlwiPlxuICAgICAgICB7eyAnQ29uZmlndXJlIGV4cG9ydCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInAtdC0yNCBwLXItMTYgcC1sLTE2IGdhcC04IHAtYi0xNiBmbGV4LXdyYXBcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnc2VwYXJhdG9yLWJvdHRvbSc6IGlzRnVsbFR5cGVPZkV4cG9ydCB9XCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgIDxjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItdGltZS1yYW5nZVxuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmhhc1Blcm1pc3Npb25Ub1JlYWRBbnlNZWFzdXJlbWVudHNcIlxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgICAgICAgICAgKG9uRGF0ZUZyb21DaGFuZ2UpPVwib25EYXRlRnJvbUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbkRhdGVUb0NoYW5nZSk9XCJvbkRhdGVUb0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItdGltZS1yYW5nZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgIDxjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZGF0YS1zY29wZVxuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmhhc1Blcm1pc3Npb25Ub1JlYWRBbnlNZWFzdXJlbWVudHNcIlxuICAgICAgICAgICAgW2Rpc2FibGVkQWdncmVnYXRpb25PcHRpb25zXT1cImRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zXCJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICAgIChvbkFnZ3JlZ2F0aW9uQ2hhbmdlKT1cIm9uQWdncmVnYXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25FeHBvcnRUeXBlQ2hhbmdlKT1cIm9uRXhwb3J0VHlwZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZGF0YS1zY29wZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgIDxjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS10eXBlc1xuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmhhc1Blcm1pc3Npb25Ub1JlYWRBbnlNZWFzdXJlbWVudHNcIlxuICAgICAgICAgICAgW2R5bmFtaWNGaWxlc1R5cGVNZXRhZGF0YV09XCJkeW5hbWljRmlsZXNUeXBlTWV0YWRhdGFcIlxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgICAgICAgID48L2M4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLXR5cGVzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiIWlzRnVsbFR5cGVPZkV4cG9ydCAmJiAhaGFzRmV0Y2hlZERhdGFBbnlWYWx1ZXNUb0V4cG9ydCAmJiAhaXNQcmV2aWV3TG9hZGluZ1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInAtdC0yNCBwLXItMTYgcC1sLTE2IHAtYi0xNiBzZXBhcmF0b3ItYm90dG9tIGQtZmxleFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nIGNlbnRlci1ibG9ja1wiXG4gICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICBkYXRhLWN5PVwiZmlsZS1leHBvcnRlci0tbm8tZGF0YS1hdmFpbGFibGVcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgTm8gZGF0YSBhdmFpbGFibGUuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggPiAwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC10LTI0IHAtci0xNiBwLWwtMTYgcC1iLTE2IHNlcGFyYXRvci1ib3R0b20gZC1mbGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICBoYXNOb0V4cG9ydGFibGVEYXRhXG4gICAgICAgICAgICAgID8gJ2FsZXJ0IGFsZXJ0LXdhcm5pbmcgY2VudGVyLWJsb2NrJ1xuICAgICAgICAgICAgICA6ICdhbGVydCBhbGVydC1pbmZvIGNlbnRlci1ibG9jaydcbiAgICAgICAgICBcIlxuICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCJsaW1pdEV4Y2VlZGVkTWVzc2FnZVwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Z1bGxUeXBlT2ZFeHBvcnRcIj5cbiAgICAgIDxjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItcHJldmlld1xuICAgICAgICAqbmdJZj1cInRoaXMuaGFzUGVybWlzc2lvblRvUmVhZEFueU1lYXN1cmVtZW50c1wiXG4gICAgICAgIFtoYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0XT1cImhhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnRcIlxuICAgICAgICBbaXNQcmV2aWV3TG9hZGluZ109XCJpc1ByZXZpZXdMb2FkaW5nXCJcbiAgICAgICAgW3ByZXZpZXdUYWJsZURhdGFdPVwicHJldmlld1RhYmxlRGF0YVwiXG4gICAgICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItcHJldmlldz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjaGFzTm9Sb2xlVG9SZWFkQW55TWVhc3VyZW1lbnRzPlxuICAgIDxkaXYgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBwLWItMTYgZC1mbGV4XCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBjZW50ZXItYmxvY2tcIlxuICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgPHA+VG8gZXhwb3J0IGRhdGEsIHlvdSBtdXN0IG1lZXQgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGNyaXRlcmlhOjwvcD5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgIEhhdmVcbiAgICAgICAgICAgIDxiPlJFQUQgcGVybWlzc2lvbiBmb3IgXCJNZWFzdXJlbWVudHNcIiBwZXJtaXNzaW9uIHR5cGU8L2I+XG4gICAgICAgICAgICAoZWl0aGVyIGFzIGEgZ2xvYmFsIHJvbGUgb3IgZm9yIHRoZSBzcGVjaWZpYyBzb3VyY2UpXG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICBCZSB0aGVcbiAgICAgICAgICAgIDxiPm93bmVyIG9mIHRoZSBzb3VyY2U8L2I+XG4gICAgICAgICAgICB5b3Ugd2FudCB0byBleHBvcnQgZGF0YSBmcm9tXG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgICAgPHA+RG9uJ3QgbWVldCB0aGVzZSByZXF1aXJlbWVudHM/IENvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBmb3IgYXNzaXN0YW5jZS48L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
490
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtZXhwb3J0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItbW9kYWwvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUVMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsbUJBQW1CLEVBR3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQUdsQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxNQUFNLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxF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RSxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQ2hDLDZDQUE2QyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQ3BFO2dCQUNFLEdBQUcsZUFBZTtnQkFDbEIsa0JBQWtCLEVBQ2hCLDZDQUE2QyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0I7YUFDL0UsQ0FDRixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUNoQyw2Q0FBNkMsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUNwRTtnQkFDRSxHQUFHLGVBQWU7Z0JBQ2xCLGtCQUFrQixFQUNoQiw2Q0FBNkMsQ0FBQyxhQUFhLENBQUMsbUJBQW1CO2dCQUNqRixtQkFBbUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJO2FBQzlFLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOzhHQWxwQlUsNkNBQTZDLGdMQW9HOUMsZUFBZTtrR0FwR2QsNkNBQTZDLDJOQ2xHMUQsNnZIQW1HQSwyQ0RWSSxVQUFVLDhxQkFDViwwQ0FBMEMsbU1BQzFDLDBDQUEwQyx5SUFDMUMsd0NBQXdDLHdLQUN4QywwQ0FBMEMsNkpBRTFDLG1CQUFtQjs7MkZBR1YsNkNBQTZDO2tCQWR6RCxTQUFTOytCQUNFLDhDQUE4QyxjQUU1QyxJQUFJLFdBQ1A7d0JBQ1AsVUFBVTt3QkFDViwwQ0FBMEM7d0JBQzFDLDBDQUEwQzt3QkFDMUMsd0NBQXdDO3dCQUN4QywwQ0FBMEM7d0JBQzFDLFlBQVk7d0JBQ1osbUJBQW1CO3FCQUNwQjs7MEJBc0dFLE1BQU07MkJBQUMsZUFBZTt3RUFuR2hCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksMkJBQTJCO3NCQUFwQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5VmFsdWVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JGblxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBR0dSRUdBVElPTl9WQUxVRVMsXG4gIEFnZ3JlZ2F0aW9uT3B0aW9uLFxuICBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyxcbiAgQ29yZU1vZHVsZSxcbiAgR2FpbnNpZ2h0U2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCBzYXZlQXMgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1lcmdlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludENvdW50cyxcbiAgRGF0YXBvaW50RGV0YWlscyxcbiAgRGF0YXBvaW50c0V4Y2VlZGluZ0xpbWl0LFxuICBEYXRhVG9FeHBvcnQsXG4gIERhdGFUb0V4cG9ydFdpdGhCYWNrZW5kQ3JlYXRlZEZpbGUsXG4gIEVYUE9SVF9NT0RFX1ZBTFVFUyxcbiAgRXhwb3J0Q29uZmlnLFxuICBFeHBvcnREYXRhLFxuICBGaWxlRXhwb3J0Q29uZmlnLFxuICBGaWxlR2VuZXJhdG9yLFxuICBGaWxlVHlwZU1ldGFkYXRhLFxuICBNZXJnZWRFeHBvcnREZXRhaWxzLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IsXG4gIFNFUklFU19EQVRBX01FUkdFRF9GSUxFX05BTUVcbn0gZnJvbSAnLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgRGF0YUZldGNoaW5nU2VydmljZSB9IGZyb20gJy4vZGF0YS1mZXRjaGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFQcm9jZXNzaW5nU2VydmljZSB9IGZyb20gJy4vZGF0YS1wcm9jZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZUV4cG9ydGVyU2VydmljZSB9IGZyb20gJy4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFQb2ludHNFeHBvcnRTZWxlY3RvclByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXByZXZpZXcvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRGF0YVNjb3BlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZGF0YS1zY29wZS9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZGF0YS1zY29wZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRmlsZVR5cGVzQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZmlsZS10eXBlcy9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItZmlsZS10eXBlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yVGltZVJhbmdlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItdGltZS1yYW5nZS9kYXRhcG9pbnRzLWV4cG9ydHMtc2VsZWN0b3ItdGltZS1yYW5nZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ1NWR2VuZXJhdG9yQWRhcHRlciB9IGZyb20gJy4vZ2VuZXJhdG9ycy9jc3YtZ2VuZXJhdG9yJztcbmltcG9ydCB7IEV4Y2VsR2VuZXJhdG9yQWRhcHRlciB9IGZyb20gJy4vZ2VuZXJhdG9ycy9leGNlbC1nZW5lcmF0b3InO1xuXG5leHBvcnQgY29uc3QgRklMRV9HRU5FUkFUT1JTID0gbmV3IEluamVjdGlvblRva2VuPEZpbGVHZW5lcmF0b3JbXT4oJ0ZJTEVfR0VORVJBVE9SUycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBbRXhjZWxHZW5lcmF0b3JBZGFwdGVyLCBDU1ZHZW5lcmF0b3JBZGFwdGVyXVxufSk7XG5cbmV4cG9ydCBjb25zdCBkYXRlUmFuZ2VWYWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcbik6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgY29uc3QgZGF0ZUZyb20gPSBjb250cm9sLmdldCgnZGF0ZUZyb20nKTtcbiAgY29uc3QgZGF0ZVRvID0gY29udHJvbC5nZXQoJ2RhdGVUbycpO1xuXG4gIGlmICghZGF0ZUZyb20gfHwgIWRhdGVUbykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGF0ZUZyb21WYWx1ZSA9IGRhdGVGcm9tLnZhbHVlO1xuICBjb25zdCBkYXRlVG9WYWx1ZSA9IGRhdGVUby52YWx1ZTtcbiAgaWYgKGRhdGVGcm9tVmFsdWUgJiYgZGF0ZVRvVmFsdWUpIHtcbiAgICBpZiAobmV3IERhdGUoZGF0ZUZyb21WYWx1ZSkgPiBuZXcgRGF0ZShkYXRlVG9WYWx1ZSkpIHtcbiAgICAgIGRhdGVGcm9tLnNldEVycm9ycyh7IGRhdGVBZnRlclJhbmdlTWF4OiB0cnVlIH0pO1xuICAgICAgZGF0ZVRvLnNldEVycm9ycyh7IGRhdGVCZWZvcmVSYW5nZU1pbjogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZUZyb20uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgZGF0ZVRvLnNldEVycm9ycyhudWxsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvcmVNb2R1bGUsXG4gICAgRGF0YVBvaW50c0V4cG9ydFNlbGVjdG9yRGF0YVNjb3BlQ29tcG9uZW50LFxuICAgIERhdGFQb2ludHNFeHBvcnRTZWxlY3RvckZpbGVUeXBlc0NvbXBvbmVudCxcbiAgICBEYXRhUG9pbnRzRXhwb3J0U2VsZWN0b3JQcmV2aWV3Q29tcG9uZW50LFxuICAgIERhdGFQb2ludHNFeHBvcnRTZWxlY3RvclRpbWVSYW5nZUNvbXBvbmVudCxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZXhwb3J0Q29uZmlnOiBFeHBvcnRDb25maWc7XG4gIEBPdXRwdXQoKSBvbkRvd25sb2FkQnV0dG9uU3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhZ2dyZWdhdGlvbiBzZWxlY3RvciBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkLlxuICAgKiBUaGlzIHN0YXRlIGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgZGF0ZSByYW5nZS5cbiAgICovXG4gIGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zOiBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyA9IHt9O1xuXG4gIGZvcm1Hcm91cDogUmV0dXJuVHlwZTxEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJDb21wb25lbnRbJ2NyZWF0ZUZvcm0nXT47XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIGFsbCBkYXRhcG9pbnRzIHRoYXQgbnVtYmVyIG9mIHJlY29yZHMgZXhjZWVkcyBhIHRocmVzaG9sZCwgd2hlcmUgZGF0YSBmb3IgdGhlc2UgZGF0YXBvaW50cyB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGUgYmFja2VuZC5cbiAgICogQXBwbGllcyBvbmx5IHRvIG1lYXN1cmVtZW50IEFQSSB3aGljaCBjYW4gcmV0dXJuIHByb2Nlc3NlZCBDU1YsIEV4Y2VsIG9yIFhNTCBkYXRhLlxuICAgKi9cbiAgZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0OiBEYXRhcG9pbnRzRXhjZWVkaW5nTGltaXRbXSA9IFtdO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW55IG9mIERhdGFUb0V4cG9ydCBvYmplY3RzIHRpbWVWYWx1ZU1hcCBwcm9wZXJ0eSBpcyBub3QgdW5kZWZpbmVkIChzZXJpZXMgZGF0YSlcbiAgICogb3IgZGF0YVBvaW50VG9FeHBvcnQgaXMgbm90IHVuZGVmaW5lZCBhdCBhbGwgKG1lYXN1cmVtZW50IGRhdGEpLlxuICAgKi9cblxuICBoYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGVyZSBpcyBubyBleHBvcnRhYmxlIGRhdGEgYmVjYXVzZSB0aGUgZGF0ZSByYW5nZSBvZiBhbGwgc2VsZWN0ZWQgZGF0YXBvaW50cyBleGNlZWRzIDEsMDAwLDAwMCByZWNvcmRzLlxuICAgKi9cbiAgaGFzTm9FeHBvcnRhYmxlRGF0YTogYm9vbGVhbjtcblxuICBoYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzID0gZmFsc2U7XG5cbiAgaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZnVsbCBvciBjb21wYWN0IHR5cGUgb2YgZXhwb3J0IGlzIHNlbGVjdGVkLlxuICAgKiBGdWxsIHR5cGUgb2YgZXhwb3J0IGlzIGJhc2VkIG9uIG1lYXN1cmVtZW50IEFQSSBkYXRhLlxuICAgKiBDb21wYWN0IHR5cGUgb2YgZXhwb3J0IGlzIGJhc2VkIG9uIHNlcmllcyBBUEkgZGF0YS5cbiAgICovXG4gIGlzRnVsbFR5cGVPZkV4cG9ydCA9IGZhbHNlO1xuXG4gIHByZXZpZXdUYWJsZURhdGE6IEV4cG9ydERhdGFbXTtcblxuICBsaW1pdEV4Y2VlZGVkTWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBwcm9jZXNzZWQgZGF0YSB0aGF0IGlzIHByZXBhcmVkIHRvIGJlIGV4cG9ydGVkIGlmIHNlcmllcyBkYXRhIHdhcyBmZXRjaGVkXG4gICAqIG9yIHNob3duIGluIHRoZSBwcmV2aWV3IHRhYmxlIGluIGNhc2Ugb2YgbWVhc3VyZW1lbnRzIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0W107XG4gIC8qKlxuICAgKiBDb250YWlucyBhIGxpc3Qgb2YgZGF0YXBvaW50cyB0aGF0IHNlbGVjdGVkIGRhdGUgcmFuZ2UgZXhjZWVkcyBBUEkgbGltaXQgb2YgMV8wMDBfMDAwIHJlY29yZHMuXG4gICAqL1xuICBwcml2YXRlIGRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQ6IERhdGFwb2ludHNFeGNlZWRpbmdMaW1pdFtdO1xuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgZmlsZSB0eXBlIHNlbGVjdGlvbiBjaGVja2JveGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWxlVHlwZVNlbGVjdGlvblN0YXRlOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcbiAgLyoqXG4gICAqIEhvbGQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGFnZ3JlZ2F0aW9uIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsQWdncmVnYXRpb246IEFnZ3JlZ2F0aW9uT3B0aW9uO1xuICAvKipcbiAgICogSG9sZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGF0ZUZyb20gZnJvbSB0aGUgZXhwb3J0IGNvbmZpZy5cbiAgICogVmFsdWUgd2lsbCBiZSBsb2FkZWQgb24gY29tcG9uZW50IGRlc3Ryb3kuXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxEYXRlRnJvbTogc3RyaW5nO1xuICAvKipcbiAgICogSG9sZCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZGF0ZVRvIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFZhbHVlIHdpbGwgYmUgbG9hZGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsRGF0ZVRvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb2xkIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBkYXRhcG9pbnREZXRhaWxzIGZyb20gdGhlIGV4cG9ydCBjb25maWcuXG4gICAqIFNvbWUgbG9naWMgbWF5IGZpbHRlciBvdXQgZGF0YXBvaW50cyBpbiBkYXRhcG9pbnREZXRhaWxzIGFycmF5LCB0aGF0IGV4Y2VlZHMgMV8wMDBfMDAwIGxpbWl0IGZvciBtZWFzdXJlbWVudHMgQVBJLFxuICAgKiBidXQgZnVsbCBsaXN0IGlzIHN0aWxsIG5lZWRlZCB3aGVuIGNvbXBvbmVudCBpcyByZW9wZW5lZC5cbiAgICogVmFsdWUgd2lsbCBiZSBsb2FkZWQgb24gY29tcG9uZW50IGRlc3Ryb3kuXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxEYXRhcG9pbnREZXRhaWxzOiBEYXRhcG9pbnREZXRhaWxzW107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYWdncmVnYXRpb24gdmFsdWUgd2FzIGNoYW5nZWQgcHJvZ3JhbW1hdGljYWxseS5cbiAgICogSXQgcHJldmVudHMgYSBjYXNlIHdoZXJlIGZldGNoaW5nIG1heSBiZSB0cmlnZ2VyZWQgdHdpY2Ugd2hlbiBleHBvcnQgdHlwZSBpcyBjaGFuZ2VkLlxuICAgKiBCb3RoIG9wdGlvbnMgYWxvbmUgY2FuIHRyaWdnZXIgZmV0Y2hpbmcgZGF0YS5cbiAgICovXG4gIHByaXZhdGUgaXNBZ2dyZWdhdGlvbkNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhbnkgb2YgdGhlIGV4cG9ydCBmaWxlIHR5cGVzIChDU1YsIEV4Y2VsKSBhcmUgY2hlY2tlZC5cbiAgICovXG4gIHByaXZhdGUgaXNBbnlPZkV4cG9ydEZpbGVUeXBlQ2hlY2tlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZGF0ZUZyb21TdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIGRhdGVUb1N1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGR5bmFtaWNGaWxlc1R5cGVNZXRhZGF0YTogeyBba2V5OiBzdHJpbmddOiBGaWxlVHlwZU1ldGFkYXRhIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRNb2RhbFNlcnZpY2U6IERhdGFQcm9jZXNzaW5nU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2U6IERhdGFGZXRjaGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlOiBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIEBJbmplY3QoRklMRV9HRU5FUkFUT1JTKSBwcml2YXRlIGdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXRGaWxlc1R5cGUodGhpcy5nZW5lcmF0b3JzKTtcblxuICAgIHRoaXMuZGF0ZUZyb21TdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jICh1cGRhdGVkRGF0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRGF0ZUFuZEZldGNoRGF0YSgnZGF0ZUZyb20nLCB1cGRhdGVkRGF0ZSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZGF0ZVRvU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAodXBkYXRlZERhdGU6IHN0cmluZykgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURhdGVBbmRGZXRjaERhdGEoJ2RhdGVUbycsIHVwZGF0ZWREYXRlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0RmlsZXNUeXBlKGdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSkge1xuICAgIGdlbmVyYXRvcnMuZm9yRWFjaChnID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhW2cuZ2V0VHlwZSgpXSA9IHtcbiAgICAgICAgbGFiZWw6IGcuZ2V0TGFiZWwoKSxcbiAgICAgICAgaWNvbjogZy5nZXRJY29uKCksXG4gICAgICAgIHRpdGxlOiBnLmdldFRpdGxlKCksXG4gICAgICAgIGV4dGVuc2lvbjogZy5nZXRGaWxlRXh0ZW5zaW9uKCksXG4gICAgICAgIHppcE5hbWU6IGcuZ2V0WmlwTmFtZSgpLFxuICAgICAgICB0eXBlOiBnLmdldFR5cGUoKVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQ6IHN0cmluZ1tdID1cbiAgICAgIGF3YWl0IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5nZXRTb3VyY2VzV2l0aFBlcm1pc3Npb25zVG9SZWFkKFxuICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzXG4gICAgICApO1xuXG4gICAgaWYgKHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZXNQZXJtaXR0ZWRUb1JlYWQubGVuZ3RoICE9PSB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzLmxlbmd0aCkge1xuICAgICAgdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscyA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMuZmlsdGVyKGRhdGFQb2ludCA9PlxuICAgICAgICBzb3VyY2VzUGVybWl0dGVkVG9SZWFkLmluY2x1ZGVzKFN0cmluZyhkYXRhUG9pbnQuc291cmNlKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzID0gdHJ1ZTtcblxuICAgIHRoaXMuc3RvcmVJbml0aWFsQ2hhbmdlYWJsZUNvbmZpZygpO1xuXG4gICAgdGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlID0gdGhpcy5nZXRJbml0aWFsU2VsZWN0aW9uKHRoaXMuZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhLCBbMF0pO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgICB0aGlzLmRhdGFUb0V4cG9ydCA9IGF3YWl0IHRoaXMuZGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yU2VydmljZS5mZXRjaEFuZFByZXBhcmVEYXRhVG9FeHBvcnQoXG4gICAgICB0aGlzLmV4cG9ydENvbmZpZyxcbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgKTtcblxuICAgIHRoaXMuaGFuZGxlRGF0ZVNlbGVjdG9yQ2hhbmdlcygpO1xuICAgIHRoaXMuZGV0ZXJtaW5lU2hvd2luZ1ByZXZpZXdPckVtcHR5U3RhdGUoKTtcbiAgICB0aGlzLmhhbmRsZUV4cG9ydE1vZGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVGaWxlVHlwZVNlbGVjdGlvbkNoYW5nZXMoKTtcbiAgICB0aGlzLmhhbmRsZUZvcm1WYWxpZGF0aW9uQ2hhbmdlcygpO1xuXG4gICAgdGhpcy51cGRhdGVGaWxlVHlwZUNvbnRyb2woKTtcblxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNTdGF0ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubG9hZEluaXRpYWxDaGFuZ2VhYmxlQ29uZmlnKCk7XG4gIH1cblxuICBhc3luYyBleHBvcnRBbmREb3dubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlRXhwb3J0czogRmlsZUV4cG9ydENvbmZpZ1tdID0gT2JqZWN0LmVudHJpZXModGhpcy5keW5hbWljRmlsZXNUeXBlTWV0YWRhdGEpLm1hcChcbiAgICAgIChbXywgdmFsdWVdKSA9PiAoe1xuICAgICAgICBmaWxlVHlwZTogdmFsdWUudHlwZSBhcyBzdHJpbmcsXG4gICAgICAgIHppcE5hbWU6IHZhbHVlLnppcE5hbWVcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZUV4cG9ydHM6IEZpbGVFeHBvcnRDb25maWdbXSA9IHRoaXMuZ2V0T25seVNlbGVjdGVkRmlsZUV4cG9ydHMoZmlsZUV4cG9ydHMpO1xuXG4gICAgdGhpcy50cmlnZ2VyR2FpbnNpZ2h0RG93bmxvYWRFdmVudChzZWxlY3RlZEZpbGVFeHBvcnRzKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgc2VsZWN0ZWRGaWxlRXhwb3J0cy5tYXAoYXN5bmMgKHsgZmlsZVR5cGUsIHppcE5hbWUgfSkgPT4ge1xuICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgdGhpcy5leHBvcnRGaWxlKGZpbGVUeXBlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5kb3dubG9hZEZpbGUoYmxvYiwgZmlsZVR5cGUsIHppcE5hbWUpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLmNsZWFudXBDYWNoZWREYXRhKCk7XG4gIH1cblxuICBnZXRPbmx5U2VsZWN0ZWRGaWxlRXhwb3J0cyhmaWxlRXhwb3J0czogRmlsZUV4cG9ydENvbmZpZ1tdKTogRmlsZUV4cG9ydENvbmZpZ1tdIHtcbiAgICByZXR1cm4gZmlsZUV4cG9ydHMuZmlsdGVyKGYgPT4gdGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlW2YuZmlsZVR5cGVdID09PSB0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGV4cG9ydEZpbGUoZmlsZVR5cGU6IHN0cmluZyk6IFByb21pc2U8QmxvYiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnRcbiAgICAgID8gYXdhaXQgdGhpcy5leHBvcnRNZWFzdXJlbWVudEZpbGUoZmlsZVR5cGUpXG4gICAgICA6IGF3YWl0IHRoaXMuZXhwb3J0U2VyaWVzRmlsZShmaWxlVHlwZSk7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZEZpbGUoXG4gICAgYmxvYjogQmxvYiB8IG51bGwsXG4gICAgZmlsZVR5cGU6IHN0cmluZyxcbiAgICBtZWFzdXJlbWVudHNaaXBGaWxlTmFtZTogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0ID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0LmZpbHRlcihcbiAgICAgICAgZGF0YXBvaW50ID0+ICF0aGlzLmRhdGFQb2ludHNFeGNlZWRpbmdPbmVNaWxsaW9uTGltaXQuaW5jbHVkZXMoZGF0YXBvaW50KVxuICAgICAgKTtcblxuICAgIGNvbnN0IHNob3VsZFNob3dBbGVydCA9IHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0Lmxlbmd0aCA+IDA7XG5cbiAgICAvLyBIYW5kbGVzIGEgY2FzZSB3aGVyZSBhbGwgZmlsZXMgYXJlIHNlbnQgYnkgZW1haWwuXG4gICAgaWYgKCFibG9iICYmIHNob3VsZFNob3dBbGVydCkge1xuICAgICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JTZXJ2aWNlLnNob3dTZW5kVmlhRW1haWxJbmZvQWxlcnQoXG4gICAgICAgIGZpbGVUeXBlLFxuICAgICAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYmxvYikge1xuICAgICAgLy8gSGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBzb21lIG9mIHRoZSBmaWxlcyBhcmUgc2VudCBieSBlbWFpbC5cbiAgICAgIGlmIChzaG91bGRTaG93QWxlcnQpIHtcbiAgICAgICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JTZXJ2aWNlLnNob3dTZW5kVmlhRW1haWxJbmZvQWxlcnQoXG4gICAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgICAgdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnRcbiAgICAgICAgPyBzYXZlQXMoYmxvYiwgbWVhc3VyZW1lbnRzWmlwRmlsZU5hbWUpXG4gICAgICAgIDogc2F2ZUFzKGJsb2IsIGJsb2JbU0VSSUVTX0RBVEFfTUVSR0VEX0ZJTEVfTkFNRV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIGEgbWVhc3VyZW1lbnQgZmlsZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gICAqXG4gICAqIE1lYXN1cmVtZW50cyBBUEkgZG9lcyBwcm92aWRlIGEgd2F5IHRvIGZldGNoIGEgcHJlcHJvY2Vzc2VkIENTVi9FeGNlbCBmaWxlLlxuICAgKlxuICAgKiBBdCB0aGlzIHBvaW50IGEgYmFja2VkIGZpbGUgbmVlZHMgdG8gYmUgZmV0Y2hlZC5cbiAgICogTWVhc3VyZW1lbnQgZGF0YSB1c2VkIGZvciBhIHByZXZpZXcgY29udGFpbnMganVzdCA1IGZpcnN0IHJlY29yZHNcbiAgICogYW5kIGl0J3Mgbm90IGZldGNoZWQgd2l0aCBDU1YvRXhjZWwgaGVhZGVycy5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVUeXBlIC0gVGhlIHR5cGUgb2YgZmlsZSB0byBleHBvcnQuXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgQmxvYiByZXByZXNlbnRpbmcgdGhlIGV4cG9ydGVkIGZpbGUgb3IgbnVsbCB3aGVuIG5vIGRhdGEgdG8gZXhwb3J0IG9yIGl0J3Mgc2VudCB2aWEgZW1haWwuXG4gICAqL1xuICBhc3luYyBleHBvcnRNZWFzdXJlbWVudEZpbGUoZmlsZVR5cGU6IHN0cmluZyk6IFByb21pc2U8QmxvYj4gfCBudWxsIHtcbiAgICBjb25zdCB7IGFjY2VwdFR5cGUsIGV4dGVuc2lvbiB9ID0gdGhpcy5kYXRhcG9pbnRzRXhwb3J0TW9kYWxTZXJ2aWNlLmZpbGVUeXBlc0NvbmZpZ3NbZmlsZVR5cGVdO1xuXG4gICAgY29uc3QgdXBkYXRlZEV4cG9ydENvbmZpZzogRXhwb3J0Q29uZmlnID0gdGhpcy5leGNsdWRlRGF0YXBvaW50c1RoYXRFeGNlZWRzQXBpTGltaXQoXG4gICAgICB0aGlzLmV4cG9ydENvbmZpZ1xuICAgICk7XG5cbiAgICBjb25zdCBkYXRhVG9FeHBvcnQ6IERhdGFUb0V4cG9ydFdpdGhCYWNrZW5kQ3JlYXRlZEZpbGVbXSA9XG4gICAgICBhd2FpdCB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2UuZmV0Y2hNZWFzdXJlbWVudERhdGFGaWxlc0FuZFBhaXJXaXRoU291cmNlRGV0YWlscyhcbiAgICAgICAgYWNjZXB0VHlwZSxcbiAgICAgICAgdXBkYXRlZEV4cG9ydENvbmZpZ1xuICAgICAgKTtcblxuICAgIGNvbnN0IGlzQWxsVW5kZWZpbmVkID0gZGF0YVRvRXhwb3J0LmV2ZXJ5KGRhdGEgPT4gZGF0YSA9PT0gdW5kZWZpbmVkKTtcbiAgICBpZiAoaXNBbGxVbmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvckZpbGVFeHBvcnRlclNlcnZpY2UuZ2V0TWVhc3VyZW1lbnRFeHBvcnRlZERhdGFCbG9iKFxuICAgICAgZXh0ZW5zaW9uLFxuICAgICAgZGF0YVRvRXhwb3J0XG4gICAgKTtcbiAgfVxuXG4gIGV4Y2x1ZGVEYXRhcG9pbnRzVGhhdEV4Y2VlZHNBcGlMaW1pdChleHBvcnRDb25maWc6IEV4cG9ydENvbmZpZyk6IEV4cG9ydENvbmZpZyB7XG4gICAgY29uc3Qgc2tpcHBlZERhdGFwb2ludHNTb3VyY2U6IHN0cmluZ1tdID0gdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0Lm1hcChcbiAgICAgIGRhdGFwb2ludCA9PiBkYXRhcG9pbnQuZGF0YXBvaW50RGV0YWlsLnNvdXJjZS50b1N0cmluZygpXG4gICAgKTtcblxuICAgIGNvbnN0IGZpbHRlcmVkRGF0YXBvaW50czogRGF0YXBvaW50RGV0YWlsc1tdID0gZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMuZmlsdGVyKFxuICAgICAgZGF0YXBvaW50ID0+ICFza2lwcGVkRGF0YXBvaW50c1NvdXJjZS5pbmNsdWRlcyhTdHJpbmcoZGF0YXBvaW50LnNvdXJjZSkpXG4gICAgKTtcblxuICAgIGV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzID0gZmlsdGVyZWREYXRhcG9pbnRzO1xuICAgIHJldHVybiBleHBvcnRDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyB0aGUgc2VyaWVzIGRhdGEgdG8gYSBmaWxlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAgICpcbiAgICogU2VyaWVzIEFQSSBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvIGZldGNoIGEgcHJlcHJvY2Vzc2VkIENTVi9FeGNlbCBmaWxlLlxuICAgKlxuICAgKiBTZXJpZXMgZGF0YSB1c2VkIGZvciBleHBvcnRpbmcgYSBmaWxlIGlzIGFscmVhZHkgZmV0Y2hlZCBmb3IgYSBwcmV2aWV3XG4gICAqIGFuZCBjYW4gYmUgcmV1c2VkIGZvciBleHBvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlVHlwZSAtIFRoZSB0eXBlIG9mIGZpbGUgdG8gZXhwb3J0IChlLmcuLCBDU1YsIEV4Y2VsKS5cbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBCbG9iIHJlcHJlc2VudGluZyB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICovXG4gIGFzeW5jIGV4cG9ydFNlcmllc0ZpbGUoZmlsZVR5cGU6IHN0cmluZyk6IFByb21pc2U8QmxvYj4ge1xuICAgIGNvbnN0IG1lcmdlZEV4cG9ydERldGFpbHM6IE1lcmdlZEV4cG9ydERldGFpbHMgPSB7XG4gICAgICBhZ2dyZWdhdGlvbjogdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24sXG4gICAgICBkYXRlRnJvbTogdGhpcy5leHBvcnRDb25maWcuZGF0ZUZyb20sXG4gICAgICBkYXRlVG86IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUb1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLmdldFNlcmllc0V4cG9ydGVkRGF0YUJsb2IoXG4gICAgICBmaWxlVHlwZSxcbiAgICAgIHRoaXMuZGF0YVRvRXhwb3J0LFxuICAgICAgbWVyZ2VkRXhwb3J0RGV0YWlsc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBvbkFnZ3JlZ2F0aW9uQ2hhbmdlKGFnZ3JlZ2F0aW9uOiBBZ2dyZWdhdGlvbk9wdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uID0gYWdncmVnYXRpb247XG4gICAgaWYgKCF0aGlzLmlzQWdncmVnYXRpb25DaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVFeHBvcnRDb25maWdBbmRGZXRjaERhdGEoKTtcbiAgICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0ZUZyb21DaGFuZ2UodXBkYXRlZERhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZUZyb21TdWJqZWN0Lm5leHQodXBkYXRlZERhdGUpO1xuICB9XG5cbiAgb25EYXRlVG9DaGFuZ2UodXBkYXRlZERhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZVRvU3ViamVjdC5uZXh0KHVwZGF0ZWREYXRlKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURhdGVBbmRGZXRjaERhdGEoXG4gICAgZGF0ZVR5cGU6ICdkYXRlRnJvbScgfCAnZGF0ZVRvJyxcbiAgICB1cGRhdGVkRGF0ZTogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnW2RhdGVUeXBlXSA9IHVwZGF0ZWREYXRlO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlRXhwb3J0Q29uZmlnQW5kRmV0Y2hEYXRhKCk7XG5cbiAgICBpZiAodGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGV0ZXJtaW5lSWZNZWFzdXJlbWVudFJlc3BvbnNlV2lsbEJlUHJvY2Vzc2VkQnlCYWNrZW5kKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uRXhwb3J0VHlwZUNoYW5nZShleHBvcnRUeXBlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXhwb3J0VHlwZSA9PT0gRVhQT1JUX01PREVfVkFMVUVTLmZ1bGwpIHtcbiAgICAgIHRoaXMuaXNBZ2dyZWdhdGlvbkNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uLnNldFZhbHVlKEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lKTtcbiAgICAgIHRoaXMuaXNBZ2dyZWdhdGlvbkNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0ID0gdHJ1ZTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlRXhwb3J0Q29uZmlnQW5kRmV0Y2hEYXRhKCk7XG4gICAgICBhd2FpdCB0aGlzLmRldGVybWluZUlmTWVhc3VyZW1lbnRSZXNwb25zZVdpbGxCZVByb2Nlc3NlZEJ5QmFja2VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRGdWxsRXhwb3J0UmVsYXRlZFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydCA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlRXhwb3J0Q29uZmlnQW5kRmV0Y2hEYXRhKCk7XG5cbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkQWdncmVnYXRpb25PcHRpb25zU3RhdGUoKTtcblxuICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1N0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnMgPVxuICAgICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLnVwZGF0ZURpc2FibGVkU3RhdGVPZkFnZ3JlZ2F0aW9uT3B0aW9uRW50cmllcyhcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZGF0ZUZyb20udmFsdWUsXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVUby52YWx1ZSxcbiAgICAgICAgdGhpcy5kaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1xuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cChcbiAgICAgIHtcbiAgICAgICAgZGF0ZUZyb206IG5ldyBGb3JtQ29udHJvbCh0aGlzLmV4cG9ydENvbmZpZy5kYXRlRnJvbSksXG4gICAgICAgIGRhdGVUbzogbmV3IEZvcm1Db250cm9sKHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUbyksXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgdGhpcy5leHBvcnRDb25maWcuYWdncmVnYXRpb24gPyB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbiA6IEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lXG4gICAgICAgICksXG4gICAgICAgIGV4cG9ydE1vZGU6IG5ldyBGb3JtQ29udHJvbChFWFBPUlRfTU9ERV9WQUxVRVMuY29tcGFjdCksXG4gICAgICAgIGZpbGVUeXBlczogdGhpcy5mb3JtQnVpbGRlci5ncm91cChcbiAgICAgICAgICB0aGlzLmdlbmVyYXRvcnMucmVkdWNlKChhLCBjKSA9PiB7XG4gICAgICAgICAgICBhW2MuZ2V0VHlwZSgpXSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgfSwge30pXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRvcnM6IFtkYXRlUmFuZ2VWYWxpZGF0b3JdXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ByZXZpZXdMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnByZXZpZXdUYWJsZURhdGEgPVxuICAgICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0TW9kYWxTZXJ2aWNlLnRyYW5zZm9ybVRvRXhwb3J0RmlsZVN0cnVjdHVyZUZvclByZXZpZXcodGhpcy5kYXRhVG9FeHBvcnQpO1xuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXRlU2VsZWN0b3JDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uO1xuICAgIGNvbnN0IGRhdGVGcm9tU2VsZWN0b3IgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlRnJvbTtcbiAgICBjb25zdCBkYXRlVG9TZWxlY3RvciA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVUbztcblxuICAgIGNvbnN0IHVwZGF0ZUFnZ3JlZ2F0aW9uT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1N0YXRlKCk7XG5cbiAgICAgICAgY29uc3QgZmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvblZhbHVlOiBBZ2dyZWdhdGlvbk9wdGlvbiA9XG4gICAgICAgICAgdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JGaWxlRXhwb3J0ZXJTZXJ2aWNlLnNldFRvRmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvbk9wdGlvbklmQ3VycmVudElzRGlzYWJsZWQoXG4gICAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zXG4gICAgICAgICAgKTtcblxuICAgICAgICBpZiAoZmlyc3RBdmFpbGFibGVBZ2dyZWdhdGlvblZhbHVlKSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKGZpcnN0QXZhaWxhYmxlQWdncmVnYXRpb25WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbWVyZ2UoZGF0ZUZyb21TZWxlY3Rvci52YWx1ZUNoYW5nZXMsIGRhdGVUb1NlbGVjdG9yLnZhbHVlQ2hhbmdlcylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUodXBkYXRlQWdncmVnYXRpb25PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXhwb3J0TW9kZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgYWdncmVnYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb247XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5leHBvcnRNb2RlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShleHBvcnRNb2RlVmFsdWUgPT4ge1xuICAgICAgICBpZiAoZXhwb3J0TW9kZVZhbHVlLnRvU3RyaW5nKCkgPT09IEVYUE9SVF9NT0RFX1ZBTFVFUy5mdWxsKSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZ2dyZWdhdGlvbkNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGaWxlVHlwZVNlbGVjdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuZmlsZVR5cGVzLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShmaWxlVHlwZXNTZWxlY3Rpb25TdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZVR5cGVTZWxlY3Rpb25TdGF0ZShmaWxlVHlwZXNTZWxlY3Rpb25TdGF0ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsZVR5cGVTZWxlY3Rpb25TdGF0ZShjaGVja2JveGVzU3RhdGU6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgdGhpcy5pc0FueU9mRXhwb3J0RmlsZVR5cGVDaGVja2VkID0gT2JqZWN0LnZhbHVlcyhjaGVja2JveGVzU3RhdGUpLnNvbWUoXG4gICAgICB2YWx1ZSA9PiB2YWx1ZSA9PT0gdHJ1ZVxuICAgICk7XG4gICAgdGhpcy5maWxlVHlwZVNlbGVjdGlvblN0YXRlID0gY2hlY2tib3hlc1N0YXRlO1xuICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGb3JtVmFsaWRhdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRG93bmxvYWRCdXR0b25TdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaWxlVHlwZUNvbnRyb2woKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZVR5cGVzQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmZpbGVUeXBlcztcbiAgICBpZiAoZmlsZVR5cGVzQ29udHJvbCkge1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZmlsZVR5cGVzQ29udHJvbC52YWx1ZSB8fCB7fTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHsgLi4uY3VycmVudFZhbHVlIH07XG5cbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZmlsZVR5cGVTZWxlY3Rpb25TdGF0ZSkuZm9yRWFjaCgoW2ZpbGVUeXBlLCBpc1NlbGVjdGVkXSkgPT4ge1xuICAgICAgICBpZiAoZmlsZVR5cGUgaW4gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgdXBkYXRlZFZhbHVlW2ZpbGVUeXBlXSA9IGlzU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmaWxlVHlwZXNDb250cm9sLnBhdGNoVmFsdWUodXBkYXRlZFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVNob3dpbmdQcmV2aWV3T3JFbXB0eVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc0RhdGFUb1Nob3cgPSB0aGlzLmRhdGFUb0V4cG9ydC5zb21lKGRhdGFUb0V4cG9ydEl0ZW0gPT5cbiAgICAgIHRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0XG4gICAgICAgID8gISFkYXRhVG9FeHBvcnRJdGVtXG4gICAgICAgIDogZGF0YVRvRXhwb3J0SXRlbS50aW1lVmFsdWVNYXAgJiYgT2JqZWN0LmtleXMoZGF0YVRvRXhwb3J0SXRlbS50aW1lVmFsdWVNYXApLmxlbmd0aCA+IDBcbiAgICApO1xuXG4gICAgdGhpcy5oYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0ID0gaGFzRGF0YVRvU2hvdztcblxuICAgIGlmIChoYXNEYXRhVG9TaG93KSB7XG4gICAgICB0aGlzLnByZXBhcmVQcmV2aWV3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGV0ZXJtaW5lSWZNZWFzdXJlbWVudFJlc3BvbnNlV2lsbEJlUHJvY2Vzc2VkQnlCYWNrZW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdCA9XG4gICAgICBhd2FpdCB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2UuZ2V0RGF0YXBvaW50c0V4Y2VlZGluZ0xpbWl0KHRoaXMuZXhwb3J0Q29uZmlnKTtcblxuICAgIGNvbnN0IHsgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50LCBlbWFpbERlbGl2ZXJhYmxlQ291bnQsIG5vblJldHJpZXZhYmxlQ291bnQgfSA9XG4gICAgICB0aGlzLmNhbGN1bGF0ZURhdGFwb2ludENvdW50cygpO1xuXG4gICAgdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhID1cbiAgICAgIGJyb3dzZXJEb3dubG9hZGFibGVDb3VudCA9PT0gMCAmJiBlbWFpbERlbGl2ZXJhYmxlQ291bnQgPT09IDAgJiYgbm9uUmV0cmlldmFibGVDb3VudCA+IDA7XG5cbiAgICBpZiAodGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMCAmJiAhdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhKSB7XG4gICAgICB0aGlzLmxpbWl0RXhjZWVkZWRNZXNzYWdlID0gdGhpcy5kYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JTZXJ2aWNlLmdldExpbWl0RXhjZWVkZWRNZXNzYWdlKFxuICAgICAgICB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEsXG4gICAgICAgIGVtYWlsRGVsaXZlcmFibGVDb3VudCxcbiAgICAgICAgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50LFxuICAgICAgICBub25SZXRyaWV2YWJsZUNvdW50LFxuICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5kYXRhcG9pbnREZXRhaWxzLmxlbmd0aFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMCAmJiB0aGlzLmhhc05vRXhwb3J0YWJsZURhdGEpIHtcbiAgICAgIHRoaXMubGltaXRFeGNlZWRlZE1lc3NhZ2UgPSB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2UuZ2V0TGltaXRFeGNlZWRlZE1lc3NhZ2UoXG4gICAgICAgIHRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZURvd25sb2FkQnV0dG9uU3RhdGUoKTtcblxuICAgIHRoaXMuaXNQcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVEYXRhcG9pbnRDb3VudHMoKTogRGF0YXBvaW50Q291bnRzIHtcbiAgICBjb25zdCBSRUNPUkRfQVBJX0xJTUlUID0gMV8wMDBfMDAwO1xuXG4gICAgdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0ID0gdGhpcy5kYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQuZmlsdGVyKFxuICAgICAgZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0ID0+XG4gICAgICAgIGRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC50b3RhbEVsZW1lbnRzID4gUkVDT1JEX0FQSV9MSU1JVFxuICAgICk7XG5cbiAgICBjb25zdCBub25SZXRyaWV2YWJsZUNvdW50ID0gdGhpcy5kYXRhUG9pbnRzRXhjZWVkaW5nT25lTWlsbGlvbkxpbWl0Lmxlbmd0aDtcblxuICAgIGNvbnN0IGVtYWlsRGVsaXZlcmFibGVDb3VudCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNFeGNlZWRpbmdCcm93c2VyRG93bmxvYWRMaW1pdC5sZW5ndGggLSBub25SZXRyaWV2YWJsZUNvdW50O1xuXG4gICAgY29uc3QgYnJvd3NlckRvd25sb2FkYWJsZUNvdW50ID1cbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMubGVuZ3RoIC0gZW1haWxEZWxpdmVyYWJsZUNvdW50IC0gbm9uUmV0cmlldmFibGVDb3VudDtcblxuICAgIHJldHVybiB7XG4gICAgICBicm93c2VyRG93bmxvYWRhYmxlQ291bnQsXG4gICAgICBlbWFpbERlbGl2ZXJhYmxlQ291bnQsXG4gICAgICBub25SZXRyaWV2YWJsZUNvdW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVJbml0aWFsQ2hhbmdlYWJsZUNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxEYXRlRnJvbSA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tO1xuICAgIHRoaXMuaW5pdGlhbERhdGVUbyA9IHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUbztcbiAgICB0aGlzLmluaXRpYWxEYXRhcG9pbnREZXRhaWxzID0gdGhpcy5leHBvcnRDb25maWcuZGF0YXBvaW50RGV0YWlscztcbiAgICBpZiAoIXRoaXMuaXNGdWxsVHlwZU9mRXhwb3J0KSB7XG4gICAgICB0aGlzLmluaXRpYWxBZ2dyZWdhdGlvbiA9IHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZEluaXRpYWxDaGFuZ2VhYmxlQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tID0gdGhpcy5pbml0aWFsRGF0ZUZyb207XG4gICAgdGhpcy5leHBvcnRDb25maWcuZGF0ZVRvID0gdGhpcy5pbml0aWFsRGF0ZVRvO1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGFwb2ludERldGFpbHMgPSB0aGlzLmluaXRpYWxEYXRhcG9pbnREZXRhaWxzO1xuICAgIGlmICghdGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLmFnZ3JlZ2F0aW9uID0gdGhpcy5pbml0aWFsQWdncmVnYXRpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVFeHBvcnRDb25maWdBbmRGZXRjaERhdGEoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJldmlld0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5vbkRvd25sb2FkQnV0dG9uU3RhdGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5kYXRhVG9FeHBvcnQgPSBhd2FpdCB0aGlzLmRhdGFwb2ludHNFeHBvcnRTZWxlY3RvclNlcnZpY2UuZmV0Y2hBbmRQcmVwYXJlRGF0YVRvRXhwb3J0KFxuICAgICAgdGhpcy5leHBvcnRDb25maWcsXG4gICAgICB0aGlzLmlzRnVsbFR5cGVPZkV4cG9ydFxuICAgICk7XG5cbiAgICB0aGlzLmRldGVybWluZVNob3dpbmdQcmV2aWV3T3JFbXB0eVN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURvd25sb2FkQnV0dG9uU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgY2FuRW5hYmxlRG93bmxvYWRCdXR0b24gPVxuICAgICAgdGhpcy5oYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0ICYmXG4gICAgICAhdGhpcy5mb3JtR3JvdXAuaW52YWxpZCAmJlxuICAgICAgdGhpcy5pc0FueU9mRXhwb3J0RmlsZVR5cGVDaGVja2VkICYmXG4gICAgICAhdGhpcy5oYXNOb0V4cG9ydGFibGVEYXRhO1xuXG4gICAgdGhpcy5vbkRvd25sb2FkQnV0dG9uU3RhdGVDaGFuZ2UuZW1pdChjYW5FbmFibGVEb3dubG9hZEJ1dHRvbik7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RnVsbEV4cG9ydFJlbGF0ZWRQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzTm9FeHBvcnRhYmxlRGF0YSA9IGZhbHNlO1xuICAgIHRoaXMuZGF0YXBvaW50c0V4Y2VlZGluZ0Jyb3dzZXJEb3dubG9hZExpbWl0ID0gW107XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxTZWxlY3Rpb24oXG4gICAgZmlsZVR5cGU6IHsgW2tleTogc3RyaW5nXTogRmlsZVR5cGVNZXRhZGF0YSB9LFxuICAgIHNlbGVjdEJ5RGVmYXVsdDogbnVtYmVyW11cbiAgKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpbGVUeXBlKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWFsU2VsZWN0aW9uID0ga2V5cy5yZWR1Y2U8eyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0+KChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBmYWxzZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgc2VsZWN0QnlEZWZhdWx0LmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBrZXlzLmxlbmd0aCkge1xuICAgICAgICBpbml0aWFsU2VsZWN0aW9uW2tleXNbaW5kZXhdXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5pdGlhbFNlbGVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlckdhaW5zaWdodERvd25sb2FkRXZlbnQoc2VsZWN0ZWRGaWxlRXhwb3J0czogRmlsZUV4cG9ydENvbmZpZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgY29tbW9uRXZlbnREYXRhID0ge1xuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IuQUNUSU9OUy5ET1dOTE9BRF9TVEFSVEVELFxuICAgICAgY29tcG9uZW50OlxuICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IuQ09NUE9ORU5UU1xuICAgICAgICAgIC5EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUl9GSUxFX0VYUE9SVEVSLFxuICAgICAgc2VsZWN0ZWRGaWxlVHlwZTogc2VsZWN0ZWRGaWxlRXhwb3J0cy5tYXAoaXRlbSA9PiBpdGVtLmZpbGVUeXBlKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc0Z1bGxUeXBlT2ZFeHBvcnQpIHtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUi5FVkVOVFMuRVhQT1JUX1NFTEVDVE9SLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uY29tbW9uRXZlbnREYXRhLFxuICAgICAgICAgIHNlbGVjdGVkRXhwb3J0VHlwZTpcbiAgICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUi5FWFBPUlRfQ09ORklHLkZVTExfRVhQT1JUX1RZUEVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0RBVEFQT0lOVFNfRVhQT1JUX1NFTEVDVE9SLkVWRU5UUy5FWFBPUlRfU0VMRUNUT1IsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5jb21tb25FdmVudERhdGEsXG4gICAgICAgICAgc2VsZWN0ZWRFeHBvcnRUeXBlOlxuICAgICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0RBVEFQT0lOVFNfRVhQT1JUX1NFTEVDVE9SLkVYUE9SVF9DT05GSUcuQ09NUEFDVF9FWFBPUlRfVFlQRSxcbiAgICAgICAgICBzZWxlY3RlZEFnZ3JlZ2F0aW9uOiB0aGlzLmV4cG9ydENvbmZpZy5hZ2dyZWdhdGlvbiA/PyBBR0dSRUdBVElPTl9WQUxVRVMubm9uZVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtYi0xNlwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzUGVybWlzc2lvblRvUmVhZEFueU1lYXN1cmVtZW50czsgZWxzZSBoYXNOb1JvbGVUb1JlYWRBbnlNZWFzdXJlbWVudHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlciBzZXBhcmF0b3ItYm90dG9tIHN0aWNreS10b3AgYmctY29tcG9uZW50XCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtMTZcIj5cbiAgICAgICAge3sgJ0NvbmZpZ3VyZSBleHBvcnQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBnYXAtOCBwLWItMTYgZmxleC13cmFwXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlcGFyYXRvci1ib3R0b20nOiBpc0Z1bGxUeXBlT2ZFeHBvcnQgfVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXRpbWUtcmFuZ2VcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICAgIChvbkRhdGVGcm9tQ2hhbmdlKT1cIm9uRGF0ZUZyb21DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25EYXRlVG9DaGFuZ2UpPVwib25EYXRlVG9DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXRpbWUtcmFuZ2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWRhdGEtc2NvcGVcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc109XCJkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgICAgICAgICAob25BZ2dyZWdhdGlvbkNoYW5nZSk9XCJvbkFnZ3JlZ2F0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKG9uRXhwb3J0VHlwZUNoYW5nZSk9XCJvbkV4cG9ydFR5cGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWRhdGEtc2NvcGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtdHlwZXNcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5oYXNQZXJtaXNzaW9uVG9SZWFkQW55TWVhc3VyZW1lbnRzXCJcbiAgICAgICAgICAgIFtkeW5hbWljRmlsZXNUeXBlTWV0YWRhdGFdPVwiZHluYW1pY0ZpbGVzVHlwZU1ldGFkYXRhXCJcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICA+PC9jOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS10eXBlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIiFpc0Z1bGxUeXBlT2ZFeHBvcnQgJiYgIWhhc0ZldGNoZWREYXRhQW55VmFsdWVzVG9FeHBvcnQgJiYgIWlzUHJldmlld0xvYWRpbmdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMjQgcC1yLTE2IHAtbC0xNiBwLWItMTYgc2VwYXJhdG9yLWJvdHRvbSBkLWZsZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBjZW50ZXItYmxvY2tcIlxuICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgZGF0YS1jeT1cImZpbGUtZXhwb3J0ZXItLW5vLWRhdGEtYXZhaWxhYmxlXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIE5vIGRhdGEgYXZhaWxhYmxlLlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhcG9pbnRzRXhjZWVkaW5nQnJvd3NlckRvd25sb2FkTGltaXQubGVuZ3RoID4gMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtdC0yNCBwLXItMTYgcC1sLTE2IHAtYi0xNiBzZXBhcmF0b3ItYm90dG9tIGQtZmxleFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgaGFzTm9FeHBvcnRhYmxlRGF0YVxuICAgICAgICAgICAgICA/ICdhbGVydCBhbGVydC13YXJuaW5nIGNlbnRlci1ibG9jaydcbiAgICAgICAgICAgICAgOiAnYWxlcnQgYWxlcnQtaW5mbyBjZW50ZXItYmxvY2snXG4gICAgICAgICAgXCJcbiAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwibGltaXRFeGNlZWRlZE1lc3NhZ2VcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNGdWxsVHlwZU9mRXhwb3J0XCI+XG4gICAgICA8Yzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXByZXZpZXdcbiAgICAgICAgKm5nSWY9XCJ0aGlzLmhhc1Blcm1pc3Npb25Ub1JlYWRBbnlNZWFzdXJlbWVudHNcIlxuICAgICAgICBbaGFzRmV0Y2hlZERhdGFBbnlWYWx1ZXNUb0V4cG9ydF09XCJoYXNGZXRjaGVkRGF0YUFueVZhbHVlc1RvRXhwb3J0XCJcbiAgICAgICAgW2lzUHJldmlld0xvYWRpbmddPVwiaXNQcmV2aWV3TG9hZGluZ1wiXG4gICAgICAgIFtwcmV2aWV3VGFibGVEYXRhXT1cInByZXZpZXdUYWJsZURhdGFcIlxuICAgICAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLXByZXZpZXc+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI2hhc05vUm9sZVRvUmVhZEFueU1lYXN1cmVtZW50cz5cbiAgICA8ZGl2IGNsYXNzPVwicC10LTI0IHAtci0xNiBwLWwtMTYgcC1iLTE2IGQtZmxleFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gY2VudGVyLWJsb2NrXCJcbiAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIDxwPlRvIGV4cG9ydCBkYXRhLCB5b3UgbXVzdCBtZWV0IGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBjcml0ZXJpYTo8L3A+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+XG4gICAgICAgICAgICBIYXZlXG4gICAgICAgICAgICA8Yj5SRUFEIHBlcm1pc3Npb24gZm9yIFwiTWVhc3VyZW1lbnRzXCIgcGVybWlzc2lvbiB0eXBlPC9iPlxuICAgICAgICAgICAgKGVpdGhlciBhcyBhIGdsb2JhbCByb2xlIG9yIGZvciB0aGUgc3BlY2lmaWMgc291cmNlKVxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPGxpPlxuICAgICAgICAgICAgQmUgdGhlXG4gICAgICAgICAgICA8Yj5vd25lciBvZiB0aGUgc291cmNlPC9iPlxuICAgICAgICAgICAgeW91IHdhbnQgdG8gZXhwb3J0IGRhdGEgZnJvbVxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxwPkRvbid0IG1lZXQgdGhlc2UgcmVxdWlyZW1lbnRzPyBDb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgZm9yIGFzc2lzdGFuY2UuPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
@@ -1,18 +1,24 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { CommonModule } from '@c8y/ngx-components';
2
+ import { CommonModule, GainsightService } from '@c8y/ngx-components';
3
3
  import { BsModalService } from 'ngx-bootstrap/modal';
4
4
  import { TooltipModule } from 'ngx-bootstrap/tooltip';
5
5
  import { DatapointsExportSelectorModalComponent } from './datapoints-export-selector-modal/datapoints-export-selector-modal.component';
6
+ import { PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR } from './datapoints-export-selector.model';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "ngx-bootstrap/modal";
8
9
  import * as i2 from "@c8y/ngx-components";
9
10
  import * as i3 from "ngx-bootstrap/tooltip";
10
11
  export class DatapointsExportSelectorComponent {
11
- constructor(bsModalService) {
12
+ constructor(bsModalService, gainsightService) {
12
13
  this.bsModalService = bsModalService;
14
+ this.gainsightService = gainsightService;
13
15
  this.isOpen = new EventEmitter();
14
16
  }
15
17
  async openExportModal() {
18
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.EVENTS.EXPORT_SELECTOR, {
19
+ action: PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.ACTIONS.OPEN_MODAL,
20
+ component: PRODUCT_EXPERIENCE_DATAPOINTS_EXPORT_SELECTOR.COMPONENTS.DATAPOINTS_EXPORT_SELECTOR
21
+ });
16
22
  const exportConfig = this.exportConfig;
17
23
  const initialState = {
18
24
  exportConfig
@@ -28,15 +34,15 @@ export class DatapointsExportSelectorComponent {
28
34
  // Result will be 'false' on modal close or dismiss
29
35
  this.isOpen.emit(await modalRef.result);
30
36
  }
31
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsExportSelectorComponent, deps: [{ token: i1.BsModalService }], target: i0.ɵɵFactoryTarget.Component }); }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsExportSelectorComponent, deps: [{ token: i1.BsModalService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
32
38
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DatapointsExportSelectorComponent, isStandalone: true, selector: "c8y-datapoints-export-selector", inputs: { exportConfig: "exportConfig" }, outputs: { isOpen: "isOpen" }, ngImport: i0, template: "<div class=\"input-group p-t-4 p-b-4 max-width-fit m-l-auto\">\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Generate export' | translate\"\n tooltip=\"{{ 'Generate export' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"openExportModal()\"\n [adaptivePosition]=\"false\"\n [disabled]=\"!exportConfig\"\n [delay]=\"500\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"data-export\"\n ></i>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }] }); }
33
39
  }
34
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsExportSelectorComponent, decorators: [{
35
41
  type: Component,
36
42
  args: [{ selector: 'c8y-datapoints-export-selector', standalone: true, imports: [CommonModule, TooltipModule], template: "<div class=\"input-group p-t-4 p-b-4 max-width-fit m-l-auto\">\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Generate export' | translate\"\n tooltip=\"{{ 'Generate export' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"openExportModal()\"\n [adaptivePosition]=\"false\"\n [disabled]=\"!exportConfig\"\n [delay]=\"500\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"data-export\"\n ></i>\n </button>\n </div>\n</div>\n" }]
37
- }], ctorParameters: () => [{ type: i1.BsModalService }], propDecorators: { exportConfig: [{
43
+ }], ctorParameters: () => [{ type: i1.BsModalService }, { type: i2.GainsightService }], propDecorators: { exportConfig: [{
38
44
  type: Input
39
45
  }], isOpen: [{
40
46
  type: Output
41
47
  }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSwrRUFBK0UsQ0FBQzs7Ozs7QUFTdkksTUFBTSxPQUFPLGlDQUFpQztJQUk1QyxZQUFvQixjQUE4QjtRQUE5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFGeEMsV0FBTSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO0lBRWpCLENBQUM7SUFFdEQsS0FBSyxDQUFDLGVBQWU7UUFDbkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN2QyxNQUFNLFlBQVksR0FBaUU7WUFDakYsWUFBWTtTQUNiLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsRUFBRTtZQUNoRixLQUFLLEVBQUUsVUFBVTtZQUNqQixlQUFlLEVBQUUsWUFBWTtZQUM3QixjQUFjLEVBQUUsYUFBYTtZQUM3QixZQUFZO1lBQ1osbUJBQW1CLEVBQUUsSUFBSTtTQUMxQixDQUFDLENBQUMsT0FBaUQsQ0FBQztRQUNyRCxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs4R0F0QlUsaUNBQWlDO2tHQUFqQyxpQ0FBaUMsbUtDYjlDLHFqQkFvQkEsMkNEVFksWUFBWSx5TEFBRSxhQUFhOzsyRkFFMUIsaUNBQWlDO2tCQU43QyxTQUFTOytCQUNFLGdDQUFnQyxjQUU5QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO21GQUc3QixZQUFZO3NCQUFwQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90b29sdGlwJztcbmltcG9ydCB7IERhdGFwb2ludHNFeHBvcnRTZWxlY3Rvck1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXhwb3J0Q29uZmlnIH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRvb2x0aXBNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGV4cG9ydENvbmZpZzogRXhwb3J0Q29uZmlnO1xuICBAT3V0cHV0KCkgaXNPcGVuOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgb3BlbkV4cG9ydE1vZGFsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGV4cG9ydENvbmZpZyA9IHRoaXMuZXhwb3J0Q29uZmlnO1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogUGljazxEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JNb2RhbENvbXBvbmVudCwgJ2V4cG9ydENvbmZpZyc+ID0ge1xuICAgICAgZXhwb3J0Q29uZmlnXG4gICAgfTtcblxuICAgIHRoaXMuaXNPcGVuLmVtaXQodHJ1ZSk7XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIGNsYXNzOiAnbW9kYWwtbGcnLFxuICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICB9KS5jb250ZW50IGFzIERhdGFwb2ludHNFeHBvcnRTZWxlY3Rvck1vZGFsQ29tcG9uZW50O1xuICAgIC8vIFJlc3VsdCB3aWxsIGJlICdmYWxzZScgb24gbW9kYWwgY2xvc2Ugb3IgZGlzbWlzc1xuICAgIHRoaXMuaXNPcGVuLmVtaXQoYXdhaXQgbW9kYWxSZWYucmVzdWx0KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHAtdC00IHAtYi00IG1heC13aWR0aC1maXQgbS1sLWF1dG9cIj5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0dlbmVyYXRlIGV4cG9ydCcgfCB0cmFuc2xhdGVcIlxuICAgICAgdG9vbHRpcD1cInt7ICdHZW5lcmF0ZSBleHBvcnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwib3BlbkV4cG9ydE1vZGFsKClcIlxuICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFleHBvcnRDb25maWdcIlxuICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgPlxuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJpY29uLTE0XCJcbiAgICAgICAgYzh5SWNvbj1cImRhdGEtZXhwb3J0XCJcbiAgICAgID48L2k+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSwrRUFBK0UsQ0FBQztBQUN2SSxPQUFPLEVBRUwsNkNBQTZDLEVBQzlDLE1BQU0sb0NBQW9DLENBQUM7Ozs7O0FBUTVDLE1BQU0sT0FBTyxpQ0FBaUM7SUFJNUMsWUFDVSxjQUE4QixFQUM5QixnQkFBa0M7UUFEbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFKbEMsV0FBTSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO0lBS25FLENBQUM7SUFFSixLQUFLLENBQUMsZUFBZTtRQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUNoQyw2Q0FBNkMsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUNwRTtZQUNFLE1BQU0sRUFBRSw2Q0FBNkMsQ0FBQyxPQUFPLENBQUMsVUFBVTtZQUN4RSxTQUFTLEVBQ1AsNkNBQTZDLENBQUMsVUFBVSxDQUFDLDBCQUEwQjtTQUN0RixDQUNGLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFpRTtZQUNqRixZQUFZO1NBQ2IsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFO1lBQ2hGLEtBQUssRUFBRSxVQUFVO1lBQ2pCLGVBQWUsRUFBRSxZQUFZO1lBQzdCLGNBQWMsRUFBRSxhQUFhO1lBQzdCLFlBQVk7WUFDWixtQkFBbUIsRUFBRSxJQUFJO1NBQzFCLENBQUMsQ0FBQyxPQUFpRCxDQUFDO1FBQ3JELG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDOzhHQWxDVSxpQ0FBaUM7a0dBQWpDLGlDQUFpQyxtS0NoQjlDLHFqQkFvQkEsMkNETlksWUFBWSx5TEFBRSxhQUFhOzsyRkFFMUIsaUNBQWlDO2tCQU43QyxTQUFTOytCQUNFLGdDQUFnQyxjQUU5QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO2tIQUc3QixZQUFZO3NCQUFwQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIEdhaW5zaWdodFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90b29sdGlwJztcbmltcG9ydCB7IERhdGFwb2ludHNFeHBvcnRTZWxlY3Rvck1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRXhwb3J0Q29uZmlnLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1Jcbn0gZnJvbSAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRvb2x0aXBNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGV4cG9ydENvbmZpZzogRXhwb3J0Q29uZmlnO1xuICBAT3V0cHV0KCkgaXNPcGVuOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBvcGVuRXhwb3J0TW9kYWwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUi5FVkVOVFMuRVhQT1JUX1NFTEVDVE9SLFxuICAgICAge1xuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRV9EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUi5BQ1RJT05TLk9QRU5fTU9EQUwsXG4gICAgICAgIGNvbXBvbmVudDpcbiAgICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfREFUQVBPSU5UU19FWFBPUlRfU0VMRUNUT1IuQ09NUE9ORU5UUy5EQVRBUE9JTlRTX0VYUE9SVF9TRUxFQ1RPUlxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBleHBvcnRDb25maWcgPSB0aGlzLmV4cG9ydENvbmZpZztcbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IFBpY2s8RGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yTW9kYWxDb21wb25lbnQsICdleHBvcnRDb25maWcnPiA9IHtcbiAgICAgIGV4cG9ydENvbmZpZ1xuICAgIH07XG5cbiAgICB0aGlzLmlzT3Blbi5lbWl0KHRydWUpO1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5ic01vZGFsU2VydmljZS5zaG93KERhdGFwb2ludHNFeHBvcnRTZWxlY3Rvck1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLWxnJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGUsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgfSkuY29udGVudCBhcyBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JNb2RhbENvbXBvbmVudDtcbiAgICAvLyBSZXN1bHQgd2lsbCBiZSAnZmFsc2UnIG9uIG1vZGFsIGNsb3NlIG9yIGRpc21pc3NcbiAgICB0aGlzLmlzT3Blbi5lbWl0KGF3YWl0IG1vZGFsUmVmLnJlc3VsdCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBwLXQtNCBwLWItNCBtYXgtd2lkdGgtZml0IG0tbC1hdXRvXCI+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidHZW5lcmF0ZSBleHBvcnQnIHwgdHJhbnNsYXRlXCJcbiAgICAgIHRvb2x0aXA9XCJ7eyAnR2VuZXJhdGUgZXhwb3J0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cIm9wZW5FeHBvcnRNb2RhbCgpXCJcbiAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhZXhwb3J0Q29uZmlnXCJcbiAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgID5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwiaWNvbi0xNFwiXG4gICAgICAgIGM4eUljb249XCJkYXRhLWV4cG9ydFwiXG4gICAgICA+PC9pPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19