@c8y/ngx-components 1021.22.105 → 1021.22.108
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.
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +25 -7
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +20 -4
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/package.json +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +5 -2
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Component, Input, signal } from '@angular/core';
|
|
1
|
+
import { Component, Input, Optional, signal } from '@angular/core';
|
|
2
2
|
import { FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
3
3
|
import { AlertService, CommonModule, DismissAlertStrategy, DynamicComponentAlert, WidgetGlobalAutoRefreshService, gettext, globalAutoRefreshLoading } from '@c8y/ngx-components';
|
|
4
|
+
import { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';
|
|
4
5
|
import { DataFetchingService, TIME_RANGE_INTERVAL_UNITS_VALUES, dateRangeValidator } from '@c8y/ngx-components/datapoints-export-selector';
|
|
5
6
|
import { TranslateService } from '@ngx-translate/core';
|
|
6
7
|
import { BehaviorSubject, Subject, debounceTime, takeUntil } from 'rxjs';
|
|
@@ -17,9 +18,10 @@ import * as i3 from "../datapoints-table.service";
|
|
|
17
18
|
import * as i4 from "./datapoints-table-view.service";
|
|
18
19
|
import * as i5 from "@angular/forms";
|
|
19
20
|
import * as i6 from "@ngx-translate/core";
|
|
20
|
-
import * as i7 from "@
|
|
21
|
+
import * as i7 from "@c8y/ngx-components/context-dashboard";
|
|
22
|
+
import * as i8 from "@angular/common";
|
|
21
23
|
export class DatapointsTableViewWidgetComponent {
|
|
22
|
-
constructor(alertService, dataFetchingService, datapointsTableConfigService, datapointsTableViewService, formBuilder, translateService, widgetGlobalAutoRefresh) {
|
|
24
|
+
constructor(alertService, dataFetchingService, datapointsTableConfigService, datapointsTableViewService, formBuilder, translateService, widgetGlobalAutoRefresh, dashboardContextComponent) {
|
|
23
25
|
this.alertService = alertService;
|
|
24
26
|
this.dataFetchingService = dataFetchingService;
|
|
25
27
|
this.datapointsTableConfigService = datapointsTableConfigService;
|
|
@@ -27,6 +29,7 @@ export class DatapointsTableViewWidgetComponent {
|
|
|
27
29
|
this.formBuilder = formBuilder;
|
|
28
30
|
this.translateService = translateService;
|
|
29
31
|
this.widgetGlobalAutoRefresh = widgetGlobalAutoRefresh;
|
|
32
|
+
this.dashboardContextComponent = dashboardContextComponent;
|
|
30
33
|
/**
|
|
31
34
|
* Represents the data points where __active property is set to true.
|
|
32
35
|
*/
|
|
@@ -207,6 +210,9 @@ export class DatapointsTableViewWidgetComponent {
|
|
|
207
210
|
async prepareTableData(roundSeconds = true) {
|
|
208
211
|
this.isLoading$.next(true);
|
|
209
212
|
if (this.isInitialRequest) {
|
|
213
|
+
if (this.config.datapoints?.length) {
|
|
214
|
+
this.config.datapoints.forEach(datapoint => this.assignContextFromContextDashboard(datapoint));
|
|
215
|
+
}
|
|
210
216
|
this.activeDatapoints = this.datapointsTableViewService.filterOutInactiveDatapoints(this.config.datapoints);
|
|
211
217
|
this.hasMultipleDatapoints = this.datapointsTableViewService.hasMultipleDatapoints(this.activeDatapoints);
|
|
212
218
|
this.devicesColumnHeaders = this.datapointsTableViewService.getColumnHeaders(this.activeDatapoints);
|
|
@@ -302,8 +308,18 @@ export class DatapointsTableViewWidgetComponent {
|
|
|
302
308
|
.pipe(globalAutoRefreshLoading(this.widgetGlobalAutoRefresh), takeUntil(this.destroy$))
|
|
303
309
|
.subscribe();
|
|
304
310
|
}
|
|
305
|
-
|
|
306
|
-
|
|
311
|
+
assignContextFromContextDashboard(datapoint) {
|
|
312
|
+
if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
const context = this.dashboardContextComponent?.context;
|
|
316
|
+
if (context?.id) {
|
|
317
|
+
const { name, id } = context;
|
|
318
|
+
datapoint.__target = { name, id };
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableViewWidgetComponent, deps: [{ token: i1.AlertService }, { token: i2.DataFetchingService }, { token: i3.DatapointsTableService }, { token: i4.DatapointsTableViewService }, { token: i5.FormBuilder }, { token: i6.TranslateService }, { token: i1.WidgetGlobalAutoRefreshService }, { token: i7.ContextDashboardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
322
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DatapointsTableViewWidgetComponent, isStandalone: true, selector: "c8y-datapoints-table-view", inputs: { config: "config" }, host: { classAttribute: "d-col fit-h" }, ngImport: i0, template: "<div class=\"d-flex gap-16 p-l-16 p-r-16 flex-wrap\">\n <ng-container *ngIf=\"config.displayDateSelection\">\n <form [formGroup]=\"formGroup\">\n <c8y-date-range-picker\n class=\"d-contents\"\n [isEmittingDateChange]=\"true\"\n [showLabel]=\"true\"\n (updatedDate)=\"onDateChange($event)\"\n ></c8y-date-range-picker>\n </form>\n </ng-container>\n <!-- TODO: temporarily commented out, will be enabled when graft of MTM-59689 is merged: https://github.com/Cumulocity-IoT/cumulocity-ui/pull/8028 -->\n <!-- <c8y-datapoints-export-selector\n class=\"d-contents\"\n [containerClass]=\"containerClass\"\n [exportConfig]=\"exportConfig\"\n (isOpen)=\"onExportModalOpen($event)\"\n ></c8y-datapoints-export-selector> -->\n <!-- TODO: below div is just a temp fix, it will be removed when MTM-59689 is merged: https://github.com/Cumulocity-IoT/cumulocity-ui/pull/8028 -->\n <div class=\"input-group p-t-4 p-b-4 max-width-fit m-l-auto\"></div>\n <ng-container *ngIf=\"config.datapoints.length > 0\">\n <c8y-datapoints-reload\n class=\"d-contents\"\n [isAutoRefreshEnabled]=\"config.isAutoRefreshEnabled\"\n [refreshInterval]=\"config.refreshInterval\"\n [isRefreshDisabled]=\"isRefreshDisabled\"\n [isLoading]=\"isLoading$\"\n [isScrolling]=\"isScrolling()\"\n [isExportModalOpen]=\"isExportModalOpen\"\n [widgetInstanceGlobalAutoRefreshContext]=\"config.widgetInstanceGlobalAutoRefreshContext\"\n (onCountdownEnded)=\"onCountdownEnded()\"\n ></c8y-datapoints-reload>\n </ng-container>\n</div>\n<ng-container *ngIf=\"devicesColumnHeaders\">\n <c8y-datapoints-table\n [aggregationType]=\"config.aggregation\"\n [datapointsTableItems]=\"datapointsTableItems\"\n [decimalPlaces]=\"config.decimalPlaces\"\n [devicesColumnHeaders]=\"devicesColumnHeaders\"\n [hasMultipleDatapoints]=\"hasMultipleDatapoints\"\n [isLoading]=\"isLoading$ | async\"\n [seriesWithoutPermissionToReadCount]=\"seriesWithoutPermissionToRead?.length\"\n (isScrolling)=\"onScrolling($event)\"\n ></c8y-datapoints-table>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "component", type:
|
|
307
323
|
// TODO: temporarily commented out, will be enabled when MTM-59689 is integrated
|
|
308
324
|
// DatapointsExportSelectorComponent,
|
|
309
325
|
DatapointsReloadComponent, selector: "c8y-datapoints-reload", inputs: ["isAutoRefreshEnabled", "isRefreshDisabled", "isLoading", "isScrolling", "isExportModalOpen", "refreshInterval", "widgetInstanceGlobalAutoRefreshContext"], outputs: ["onCountdownEnded"] }, { kind: "component", type: DatapointsTableComponent, selector: "c8y-datapoints-table", inputs: ["aggregationType", "datapointsTableItems", "devicesColumnHeaders", "decimalPlaces", "hasMultipleDatapoints", "isLoading", "seriesWithoutPermissionToReadCount"], outputs: ["isScrolling"] }, { kind: "component", type: DateRangePickerComponent, selector: "c8y-date-range-picker", inputs: ["isEmittingDateChange", "showLabel"], outputs: ["updatedDate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
|
|
@@ -319,7 +335,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
319
335
|
DateRangePickerComponent,
|
|
320
336
|
ReactiveFormsModule
|
|
321
337
|
], template: "<div class=\"d-flex gap-16 p-l-16 p-r-16 flex-wrap\">\n <ng-container *ngIf=\"config.displayDateSelection\">\n <form [formGroup]=\"formGroup\">\n <c8y-date-range-picker\n class=\"d-contents\"\n [isEmittingDateChange]=\"true\"\n [showLabel]=\"true\"\n (updatedDate)=\"onDateChange($event)\"\n ></c8y-date-range-picker>\n </form>\n </ng-container>\n <!-- TODO: temporarily commented out, will be enabled when graft of MTM-59689 is merged: https://github.com/Cumulocity-IoT/cumulocity-ui/pull/8028 -->\n <!-- <c8y-datapoints-export-selector\n class=\"d-contents\"\n [containerClass]=\"containerClass\"\n [exportConfig]=\"exportConfig\"\n (isOpen)=\"onExportModalOpen($event)\"\n ></c8y-datapoints-export-selector> -->\n <!-- TODO: below div is just a temp fix, it will be removed when MTM-59689 is merged: https://github.com/Cumulocity-IoT/cumulocity-ui/pull/8028 -->\n <div class=\"input-group p-t-4 p-b-4 max-width-fit m-l-auto\"></div>\n <ng-container *ngIf=\"config.datapoints.length > 0\">\n <c8y-datapoints-reload\n class=\"d-contents\"\n [isAutoRefreshEnabled]=\"config.isAutoRefreshEnabled\"\n [refreshInterval]=\"config.refreshInterval\"\n [isRefreshDisabled]=\"isRefreshDisabled\"\n [isLoading]=\"isLoading$\"\n [isScrolling]=\"isScrolling()\"\n [isExportModalOpen]=\"isExportModalOpen\"\n [widgetInstanceGlobalAutoRefreshContext]=\"config.widgetInstanceGlobalAutoRefreshContext\"\n (onCountdownEnded)=\"onCountdownEnded()\"\n ></c8y-datapoints-reload>\n </ng-container>\n</div>\n<ng-container *ngIf=\"devicesColumnHeaders\">\n <c8y-datapoints-table\n [aggregationType]=\"config.aggregation\"\n [datapointsTableItems]=\"datapointsTableItems\"\n [decimalPlaces]=\"config.decimalPlaces\"\n [devicesColumnHeaders]=\"devicesColumnHeaders\"\n [hasMultipleDatapoints]=\"hasMultipleDatapoints\"\n [isLoading]=\"isLoading$ | async\"\n [seriesWithoutPermissionToReadCount]=\"seriesWithoutPermissionToRead?.length\"\n (isScrolling)=\"onScrolling($event)\"\n ></c8y-datapoints-table>\n</ng-container>\n" }]
|
|
322
|
-
}], ctorParameters: () => [{ type: i1.AlertService }, { type: i2.DataFetchingService }, { type: i3.DatapointsTableService }, { type: i4.DatapointsTableViewService }, { type: i5.FormBuilder }, { type: i6.TranslateService }, { type: i1.WidgetGlobalAutoRefreshService }
|
|
338
|
+
}], ctorParameters: () => [{ type: i1.AlertService }, { type: i2.DataFetchingService }, { type: i3.DatapointsTableService }, { type: i4.DatapointsTableViewService }, { type: i5.FormBuilder }, { type: i6.TranslateService }, { type: i1.WidgetGlobalAutoRefreshService }, { type: i7.ContextDashboardComponent, decorators: [{
|
|
339
|
+
type: Optional
|
|
340
|
+
}] }], propDecorators: { config: [{
|
|
323
341
|
type: Input
|
|
324
342
|
}] } });
|
|
325
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtdGFibGUvZGF0YXBvaW50cy10YWJsZS12aWV3L2RhdGFwb2ludHMtdGFibGUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtdmlldy9kYXRhcG9pbnRzLXRhYmxlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxFQUNaLG9CQUFvQixFQUNwQixxQkFBcUIsRUFFckIsOEJBQThCLEVBQzlCLE9BQU8sRUFDUCx3QkFBd0IsRUFDekIsTUFBTSxxQkFBcUIsQ0FBQztBQVE3QixPQUFPLEVBQ0wsbUJBQW1CLEVBR25CLGdDQUFnQyxFQUNoQyxrQkFBa0IsRUFDbkIsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQ0wsdUJBQXVCLEVBTXhCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0s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RUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGNBQ2xCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGdGQUFnRjt3QkFDaEYscUNBQXFDO3dCQUNyQyx5QkFBeUI7d0JBQ3pCLHdCQUF3Qjt3QkFDeEIsd0JBQXdCO3dCQUN4QixtQkFBbUI7cUJBQ3BCO3VTQU1RLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQ29tbW9uTW9kdWxlLFxuICBEaXNtaXNzQWxlcnRTdHJhdGVneSxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yLFxuICBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIGdsb2JhbEF1dG9SZWZyZXNoTG9hZGluZ1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEtQSURldGFpbHMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1zZWxlY3Rvcic7XG4vLyBUT0RPOiB0ZW1wb3JhcmlseSBjb21tZW50ZWQgb3V0LCB3aWxsIGJlIGVuYWJsZWQgd2hlbiBNVE0tNTk2ODkgaXMgaW50ZWdyYXRlZFxuLy8gaW1wb3J0IHtcbi8vICAgRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yQ29tcG9uZW50LFxuLy8gICBFeHBvcnRDb25maWdcbi8vIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBJU2VyaWVzIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgRGF0YUZldGNoaW5nU2VydmljZSxcbiAgRGF0YXBvaW50c1ZhbHVlc0RhdGFNYXAsXG4gIFNvdXJjZUlkLFxuICBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUyxcbiAgZGF0ZVJhbmdlVmFsaWRhdG9yXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBERUZBVUxUX0NPVU5URE9XTl9WQUxVRSxcbiAgRGF0YXBvaW50VGFibGVJdGVtLFxuICBEYXRhcG9pbnRXaXRoVmFsdWVzLFxuICBEYXRhcG9pbnRzVGFibGVDb25maWcsXG4gIEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW0sXG4gIFRhYmxlQ29sdW1uSGVhZGVyXG59IGZyb20gJy4uL2RhdGFwb2ludHMtdGFibGUtd2lkZ2V0Lm1vZGVsJztcbmltcG9ydCB7IERhdGFwb2ludHNUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi9kYXRhcG9pbnRzLXRhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGFwb2ludHNSZWxvYWRDb21wb25lbnQgfSBmcm9tICcuL2RhdGFwb2ludHMtcmVsb2FkL2RhdGFwb2ludHMtcmVsb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZSB9IGZyb20gJy4vZGF0YXBvaW50cy10YWJsZS12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YXBvaW50c1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhdGFwb2ludHMtdGFibGUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnRzLXRhYmxlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1jb2wgZml0LWgnIH0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgLy8gVE9ETzogdGVtcG9yYXJpbHkgY29tbWVudGVkIG91dCwgd2lsbCBiZSBlbmFibGVkIHdoZW4gTVRNLTU5Njg5IGlzIGludGVncmF0ZWRcbiAgICAvLyBEYXRhcG9pbnRzRXhwb3J0U2VsZWN0b3JDb21wb25lbnQsXG4gICAgRGF0YXBvaW50c1JlbG9hZENvbXBvbmVudCxcbiAgICBEYXRhcG9pbnRzVGFibGVDb21wb25lbnQsXG4gICAgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRzVGFibGVWaWV3V2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogIERhdGEgcG9pbnRzIHRhYmxlIHdpZGdldCBjb25maWcuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZztcbiAgLy8gY29uZmlnOiBEYXRhcG9pbnRzVGFibGVDb25maWc7XG5cbiAgYWxlcnRzOiBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBkYXRhIHBvaW50cyB3aGVyZSBfX2FjdGl2ZSBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIGFjdGl2ZURhdGFwb2ludHM6IEtQSURldGFpbHNbXSA9IFtdO1xuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgY3VzdG9tIENTUyBzdHlsZSBmb3IgdGhlIGV4cG9ydCBzZWxlY3RvciBjb21wb25lbnQuXG4gICAqL1xuICBjb250YWluZXJDbGFzczogc3RyaW5nO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgZGF0YXBvaW50cyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKiBVc2VkIHRvIHBvcHVsYXRlIHRoZSBDU1YvRXhjZWwgZmlsZSB3aXRoIGRhdGEuXG4gICAqL1xuICBkYXRhcG9pbnRzV2l0aFZhbHVlczogRGF0YXBvaW50V2l0aFZhbHVlc1tdO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgYEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW1gIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBkYXRhcG9pbnRzIHRhYmxlIGl0ZW1zLlxuICAgKiBVc2VkIHRvIHBvcHVsYXRlIHRoZSB0YWJsZSB3aXRoIGRhdGEuXG4gICAqL1xuICBkYXRhcG9pbnRzVGFibGVJdGVtczogR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbVtdID0gW107XG5cbiAgZGV2aWNlc0NvbHVtbkhlYWRlcnM6IFRhYmxlQ29sdW1uSGVhZGVyW107XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGEgY29uZmlndXJhdGlvbiBvcHRpb25zIHVzZWQgYnkgYSBjOHktZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3IuXG4gICAqL1xuICAvLyBUT0RPOiB0ZW1wb3JhcmlseSBjb21tZW50ZWQgb3V0LCB3aWxsIGJlIGVuYWJsZWQgd2hlbiBNVE0tNTk2ODkgaXMgaW50ZWdyYXRlZFxuICAvLyBleHBvcnRDb25maWc6IEV4cG9ydENvbmZpZztcblxuICBmb3JtR3JvdXA6IFJldHVyblR5cGU8RGF0YXBvaW50c1RhYmxlVmlld1dpZGdldENvbXBvbmVudFsnY3JlYXRlRm9ybSddPjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZGF0YSBwb2ludC5cbiAgICogSWYgaXMgdHJ1ZSwgdGhlbiBhIGNvbHVtbiAnRGV2aWNlJyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgdGFibGUuXG4gICAqL1xuICBoYXNNdWx0aXBsZURhdGFwb2ludHM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciByZWZyZXNoaW5nIHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgKiBJdCdzICd0cnVlJyB3aGVuIHVzZXIgaXMgbm90IGFsbG93ZWQgdG8gdmlldyBhIG1lYXN1cmVtZW50cy5cbiAgICovXG4gIGlzUmVmcmVzaERpc2FibGVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGluIHRoZSBpbml0aWFsIHJlcXVlc3Qgc3RhdGVcbiAgICogd2hlcmUgZGF0YSBmb3IgYSB0YWJsZSBzdHJ1Y3R1cmUgaXMgYmVpbmcgcHJlcGFyZWQuXG4gICAqL1xuICBpc0luaXRpYWxSZXF1ZXN0ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEN1cnJlbnQgaXNMb2FkaW5nIHN0YXRlLiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGF0YSBpcyBiZWluZyBsb2FkZWQuXG4gICAqL1xuICBpc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICBpc0V4cG9ydE1vZGFsT3BlbiA9IGZhbHNlO1xuXG4gIGlzU2Nyb2xsaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICBzZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZDogeyBrZXk6IFNvdXJjZUlkOyB2YWx1ZTogc3RyaW5nW10gfVtdO1xuXG4gIHByaXZhdGUgVElNRU9VVF9FUlJPUl9URVhUID0gZ2V0dGV4dChcbiAgICAnVGhlIHJlcXVlc3QgaXMgdGFraW5nIGxvbmdlciB0aGFuIHVzdWFsLiBXZSBhcG9sb2dpemUgZm9yIHRoZSBpbmNvbnZlbmllbmNlLidcbiAgKTtcbiAgcHJpdmF0ZSBTRVJWRVJfRVJST1JfVEVYVCA9IGdldHRleHQoJ1NlcnZlciBlcnJvciBvY2N1cnJlZC4nKTtcblxuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBzY3JvbGxpbmdTdWJqZWN0JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaXNGYWlsZWRUb0ZldGNoU2VyaWVzRGF0YTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgYWxlcnQgaGFzIGFscmVhZHkgYmVlbiBkaXNwbGF5ZWQgYW5kIGNhbiBiZSBkaXNtaXNzZWQuXG4gICAqIFRoZSBtZXNzYWdlIGlzIG9ubHkgZGlzcGxheWVkIHdoZW4gYSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBwcml2YXRlIGlzTWlzc2luZ0FueVBlcm1pc3Npb25BbGVydFNob3duID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFGZXRjaGluZ1NlcnZpY2U6IERhdGFGZXRjaGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhcG9pbnRzVGFibGVDb25maWdTZXJ2aWNlOiBEYXRhcG9pbnRzVGFibGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2U6IERhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldEdsb2JhbEF1dG9SZWZyZXNoOiBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCkge1xuICAgICAgdGhpcy5jb250YWluZXJDbGFzcyA9ICdhLWktY2VudGVyIGlucHV0LWdyb3VwIHAtdC00IHAtYi00IG1heC13aWR0aC1maXQgbS1sLWF1dG8nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExlZ2FjeSB3aWRnZXQgdXNlZCByZWFsdGltZSBzbyBpdCBtdXN0IGJlIGNvbnZlcnRlZCB0byByZWZyZXNoIGFwcHJvYWNoXG4gICAgICogaWYgaXQgd2FzIGVuYWJsZWQgYmVmb3JlIG1pZ3JhdGlvbi5cbiAgICAgKi9cbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCkge1xuICAgICAgdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgPSB0cnVlO1xuICAgICAgdGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25maWcuZGlzcGxheVNldHRpbmdzLmdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0KSB7XG4gICAgICB0aGlzLmhhbmRsZUdsb2JhbFJlZnJlc2hMb2FkaW5nKCk7XG4gICAgICB0aGlzLmhhbmRsZUdsb2JhbFRpbWVDb250ZXh0U2V0dGluZ3MoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNjcm9sbGluZ1N1YnNjcmlwdGlvbigpO1xuXG4gICAgY29uc3QgaXNMZWdhY3lXaWRnZXRSZWFsdGltZUFjdGl2ZSA9XG4gICAgICB0aGlzLmNvbmZpZy5yZWFsdGltZSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KCdkZWNpbWFsUGxhY2VzJykgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgncmVmcmVzaEludGVydmFsJykgJiZcbiAgICAgICF0aGlzLmNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnaXNBdXRvUmVmcmVzaEVuYWJsZWQnKTtcblxuICAgIGlmIChpc0xlZ2FjeVdpZGdldFJlYWx0aW1lQWN0aXZlKSB7XG4gICAgICB0aGlzLnNldERlZmF1bHRSZWZyZXNoUmVsYXRlZFByb3BlcnRpZXMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmludGVydmFsKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpeCBmb3IgbGVnYWN5IHdpZGdldCBidWcuXG4gICAgICAgKiBXaGVuIG5ldyBsZWdhY3kgd2lkZ2V0IGlzIGNyZWF0ZWQgYW5kIHNhdmVkXG4gICAgICAgKiB0aGVuIGludGVydmFsIHZhbHVlIGluIGEgY29uZmlnIHdvdWxkIHN0YXkgbnVsbCB1bnRpbCBpbnRlcnZhbCBpcyBtYW51YWxseSBjaGFuZ2VkXG4gICAgICAgKiBhbmQgc2F2ZWQgYWdhaW4uXG4gICAgICAgKiBCdWcgd2FzIGludHJvZHVjZWQgcG9zdCAxMDE4LjAuMTY0IHZlcnNpb24gb2YgVUkuXG4gICAgICAgKi9cbiAgICAgIHRoaXMuY29uZmlnLmludGVydmFsID0gJ2hvdXJzJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuaW50ZXJ2YWwgIT09IFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmN1c3RvbSkge1xuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUludGVydmFsVG9NYXRjaEZyb21Ob3dEYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmRpc3BsYXlEYXRlU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLnByZXBhcmVEYXRlUmFuZ2VGb3JtKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5wcmVwYXJlVGFibGVEYXRhKCk7XG5cbiAgICAvLyBUT0RPOiB0ZW1wb3JhcmlseSBjb21tZW50ZWQgb3V0LCB3aWxsIGJlIGVuYWJsZWQgd2hlbiBNVE0tNTk2ODkgaXMgaW50ZWdyYXRlZFxuICAgIC8vIHRoaXMuZXhwb3J0Q29uZmlnID0ge1xuICAgIC8vICAgYWdncmVnYXRpb246IHRoaXMuY29uZmlnLmFnZ3JlZ2F0aW9uLFxuICAgIC8vICAgZGF0ZUZyb206IHRoaXMuY29uZmlnLmRhdGVGcm9tLFxuICAgIC8vICAgZGF0ZVRvOiB0aGlzLmNvbmZpZy5kYXRlVG8sXG4gICAgLy8gICBkYXRhcG9pbnREZXRhaWxzOiB0aGlzLmFjdGl2ZURhdGFwb2ludHMubWFwKCh7IF9fdGFyZ2V0LCBmcmFnbWVudCwgc2VyaWVzIH0pID0+ICh7XG4gICAgLy8gICAgIGRldmljZU5hbWU6IF9fdGFyZ2V0Lm5hbWUsXG4gICAgLy8gICAgIHNvdXJjZTogX190YXJnZXQuaWQsXG4gICAgLy8gICAgIHZhbHVlRnJhZ21lbnRTZXJpZXM6IHNlcmllcyxcbiAgICAvLyAgICAgdmFsdWVGcmFnbWVudFR5cGU6IGZyYWdtZW50XG4gICAgLy8gICB9KSlcbiAgICAvLyB9O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIG9uRGF0ZUNoYW5nZShkYXRhOiB7IGRhdGVGcm9tPzogc3RyaW5nIHwgbnVsbDsgZGF0ZVRvPzogc3RyaW5nIHwgbnVsbCB9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5kYXRlRnJvbSkge1xuICAgICAgdGhpcy5jb25maWcuZGF0ZUZyb20gPSBkYXRhLmRhdGVGcm9tO1xuICAgIH1cbiAgICBpZiAoZGF0YS5kYXRlVG8pIHtcbiAgICAgIHRoaXMuY29uZmlnLmRhdGVUbyA9IGRhdGEuZGF0ZVRvO1xuICAgIH1cbiAgICB0aGlzLnByZXBhcmVUYWJsZURhdGEoKTtcblxuICAgIC8vIFRPRE86IHRlbXBvcmFyaWx5IGNvbW1lbnRlZCBvdXQsIHdpbGwgYmUgZW5hYmxlZCB3aGVuIE1UTS01OTY4OSBpcyBpbnRlZ3JhdGVkXG4gICAgLy8gVE9ETy0yOiBlYWNoIG1hbnVhbC9hdXRvIGxpc3QgcmVsb2FkIHNob3VsZCB1cGRhdGUgZXhwb3J0cyBjb25maWcgZGF0ZSByYW5nZSB0byBzeW5jIGN1cnJlbnQgc3RhdGUgb2YgdmlldyB3aXRoXG4gICAgLy8gaW5pdGFsIGV4cG9ydCBjb25maWdcbiAgICAvLyB0aGlzLmV4cG9ydENvbmZpZy5kYXRlRnJvbSA9IHRoaXMuY29uZmlnLmRhdGVGcm9tO1xuICAgIC8vIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVUbyA9IHRoaXMuY29uZmlnLmRhdGVUbztcbiAgfVxuXG4gIG9uRXhwb3J0TW9kYWxPcGVuKGlzT3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0V4cG9ydE1vZGFsT3BlbiA9IGlzT3BlbmVkO1xuICB9XG5cbiAgb25TY3JvbGxpbmcodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbGluZ1N1YmplY3QkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgb25Db3VudGRvd25FbmRlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYXRlUmFuZ2UgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLnByZXBhcmVUaW1lUmFuZ2UoXG4gICAgICB0aGlzLmNvbmZpZy5pbnRlcnZhbCxcbiAgICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tLFxuICAgICAgdGhpcy5jb25maWcuZGF0ZVRvXG4gICAgKTtcblxuICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tID0gZGF0ZVJhbmdlLmRhdGVGcm9tO1xuICAgIHRoaXMuY29uZmlnLmRhdGVUbyA9IGRhdGVSYW5nZS5kYXRlVG87XG5cbiAgICBhd2FpdCB0aGlzLnByZXBhcmVUYWJsZURhdGEoZmFsc2UpO1xuXG4gICAgdGhpcy5vblNjcm9sbGluZyhmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUdsb2JhbFRpbWVDb250ZXh0U2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZGF0ZUZyb20gPSB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuYWRqdXN0RGF0ZSh0aGlzLmNvbmZpZy5kYXRlWzBdLCAwLCBmYWxzZSk7XG4gICAgdGhpcy5jb25maWcuZGF0ZVRvID0gdGhpcy5kYXRhRmV0Y2hpbmdTZXJ2aWNlLmFkanVzdERhdGUodGhpcy5jb25maWcuZGF0ZVsxXSwgMCwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIHNjcm9sbGluZyBzdWJzY3JpcHRpb24uXG4gICAqXG4gICAqIEVuc3VyZXMgc2ltaWxhciBVWCBhcyBpbiB0aGUgYWxhcm1zIGNvdW50ZG93bi1wYXVzZSBsb2dpYy5cbiAgICovXG4gIHByaXZhdGUgc2V0U2Nyb2xsaW5nU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGxpbmdTdWJqZWN0JFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMuaXNTY3JvbGxpbmcuc2V0KHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRSZWZyZXNoUmVsYXRlZFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuaXNBdXRvUmVmcmVzaEVuYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuY29uZmlnLnJlZnJlc2hJbnRlcnZhbCA9IERFRkFVTFRfQ09VTlRET1dOX1ZBTFVFO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUludGVydmFsVG9NYXRjaEZyb21Ob3dEYXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGF0ZUZyb20sIGRhdGVUbyB9ID0gdGhpcy5kYXRhcG9pbnRzVGFibGVDb25maWdTZXJ2aWNlLmNhbGN1bGF0ZURhdGVSYW5nZShcbiAgICAgIHRoaXMuY29uZmlnLmludGVydmFsXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZy5kYXRlRnJvbSA9IGRhdGVGcm9tO1xuICAgIHRoaXMuY29uZmlnLmRhdGVUbyA9IGRhdGVUbztcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZURhdGVSYW5nZUZvcm0oKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cChcbiAgICAgIHtcbiAgICAgICAgZGF0ZUZyb206IG5ldyBGb3JtQ29udHJvbCh0aGlzLmNvbmZpZy5kYXRlRnJvbSksXG4gICAgICAgIGRhdGVUbzogbmV3IEZvcm1Db250cm9sKHRoaXMuY29uZmlnLmRhdGVUbylcbiAgICAgIH0sXG4gICAgICB7IHZhbGlkYXRvcnM6IGRhdGVSYW5nZVZhbGlkYXRvciB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyB0aGUgdGFibGUgZGF0YSBieTpcbiAgICogLSBmaWx0ZXJpbmcgb3V0IGluYWN0aXZlIGRhdGEgcG9pbnRzLFxuICAgKiAtIGNoZWNraW5nIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBkZXZpY2VzIGFzIGEgc291cmNlIG9mIGRhdGEgcG9pbnRzLFxuICAgKiAtIGdldHRpbmcgdGhlIGNvbHVtbiBoZWFkZXJzIGZvciBkZXZpY2VzLFxuICAgKiAtIGdldHRpbmcgdGhlIHNlcmllcyBkYXRhIGZvciBhY3RpdmUgZGF0YSBwb2ludHMgKEFQSSBjYWxsKSxcbiAgICogLSBwcmVwYXJpbmcgZGF0YSBwb2ludHMgd2l0aCB2YWx1ZXMgbGlzdCxcbiAgICogLSBtYXBwaW5nIGRhdGEgcG9pbnRzIHdpdGggdmFsdWVzIHRvIGxpc3QgaXRlbXMsXG4gICAqIC0gZ3JvdXBpbmcgZGF0YSBwb2ludHMgYnkgZGF0ZSBhbmQgZGV2aWNlLFxuICAgKiAtIHNvcnRpbmcgZGF0YSBieSBkYXRlIGRlc2NlbmRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSByb3VuZFNlY29uZHMgLSBXaGV0aGVyIHRvIHJvdW5kIHRoZSBzZWNvbmRzIG9yIG5vdC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgIElmIHRydWUsIHRoZSBzZWNvbmRzIHdpbGwgYmUgcm91bmRlZCB0byAwLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIHRoZSBzZWNvbmRzIHdpbGwgYmUgZGlzcGxheWVkIGFzIHRoZXkgYXJlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVGFibGVEYXRhKHJvdW5kU2Vjb25kcyA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzTG9hZGluZyQubmV4dCh0cnVlKTtcblxuICAgIGlmICh0aGlzLmlzSW5pdGlhbFJlcXVlc3QpIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0YXBvaW50cyA9IHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UuZmlsdGVyT3V0SW5hY3RpdmVEYXRhcG9pbnRzKFxuICAgICAgICB0aGlzLmNvbmZpZy5kYXRhcG9pbnRzXG4gICAgICApO1xuXG4gICAgICB0aGlzLmhhc011bHRpcGxlRGF0YXBvaW50cyA9IHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UuaGFzTXVsdGlwbGVEYXRhcG9pbnRzKFxuICAgICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHNcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZGV2aWNlc0NvbHVtbkhlYWRlcnMgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmdldENvbHVtbkhlYWRlcnMoXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0YXBvaW50c1xuICAgICAgKTtcblxuICAgICAgdGhpcy5pc0luaXRpYWxSZXF1ZXN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRGF0YXBvaW50c0lkc1dpdGhTZXJpZXM6IERhdGFwb2ludHNWYWx1ZXNEYXRhTWFwID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UuZ3JvdXBTZXJpZXNCeURldmljZUlkKHRoaXMuYWN0aXZlRGF0YXBvaW50cyk7XG5cbiAgICBjb25zdCBhY3RpdmVEYXRhcG9pbnRzU2VyaWVzRGF0YTogTWFwPHN0cmluZyB8IG51bWJlciwgSVNlcmllcz4gPVxuICAgICAgYXdhaXQgdGhpcy5nZXRBY3RpdmVEYXRhcG9pbnRzU2VyaWVzRGF0YU1hcChcbiAgICAgICAgYWN0aXZlRGF0YXBvaW50c0lkc1dpdGhTZXJpZXMsXG4gICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICByb3VuZFNlY29uZHNcbiAgICAgICk7XG5cbiAgICBpZiAodGhpcy5pc0ZhaWxlZFRvRmV0Y2hTZXJpZXNEYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmdldFNlcmllc1dpdGhvdXRQZXJtaXNzaW9uVG9SZWFkKFxuICAgICAgICBhY3RpdmVEYXRhcG9pbnRzU2VyaWVzRGF0YSxcbiAgICAgICAgYWN0aXZlRGF0YXBvaW50c0lkc1dpdGhTZXJpZXNcbiAgICAgICk7XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc01pc3NpbmdBbnlQZXJtaXNzaW9uQWxlcnRTaG93biAmJlxuICAgICAgdGhpcy5zZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZD8ubGVuZ3RoID4gMCAmJlxuICAgICAgYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGE/LnNpemVcbiAgICApIHtcbiAgICAgIHRoaXMuaGFuZGxlTWlzc2luZ0FueVBlcm1pc3Npb25FcnJvck1lc3NhZ2UoKTtcbiAgICAgIHRoaXMuaXNNaXNzaW5nQW55UGVybWlzc2lvbkFsZXJ0U2hvd24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFwb2ludHNXaXRoVmFsdWVzID0gdGhpcy5kYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZS5nZXREYXRhcG9pbnRzV2l0aFZhbHVlcyhcbiAgICAgIHRoaXMuYWN0aXZlRGF0YXBvaW50cyxcbiAgICAgIGFjdGl2ZURhdGFwb2ludHNTZXJpZXNEYXRhXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGFwb2ludHNMaXN0SXRlbXM6IERhdGFwb2ludFRhYmxlSXRlbVtdID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UubWFwRGF0YXBvaW50c1dpdGhWYWx1ZXNUb0xpc3QodGhpcy5kYXRhcG9pbnRzV2l0aFZhbHVlcyk7XG5cbiAgICBjb25zdCBncm91cGVkRGF0YXBvaW50c0xpc3RJdGVtczogR3JvdXBlZERhdGFwb2ludFRhYmxlSXRlbVtdID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UuZ3JvdXBCeURhdGVBbmREZXZpY2UoXG4gICAgICAgIGRhdGFwb2ludHNMaXN0SXRlbXMsXG4gICAgICAgIHRoaXMuZGV2aWNlc0NvbHVtbkhlYWRlcnNcbiAgICAgICk7XG5cbiAgICB0aGlzLmRhdGFwb2ludHNUYWJsZUl0ZW1zID0gdGhpcy5kYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZS5zb3J0RGF0YUJ5RGF0ZURlc2NlbmRpbmcoXG4gICAgICBncm91cGVkRGF0YXBvaW50c0xpc3RJdGVtc1xuICAgICk7XG5cbiAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBhY3RpdmUgZGF0YSBwb2ludHMgc2VyaWVzIGRhdGEgYW5kIHJldHVybnMgaXQgYXMgYSBtYXAuXG4gICAqXG4gICAqIEl0J3MgYSB3cmFwcGVyIG1ldGhvZCB3aXRoIHRyeS1jYXRjaCBibG9jay5cbiAgICpcbiAgICogQHBhcmFtIGRhdGFwb2ludHNJZHNXaXRoU2VyaWVzIC0gQSBtYXAgb2YgZGF0YSBwb2ludCBJRHMgd2l0aCB0aGVpciBhc3NvY2lhdGVkIHNlcmllcy5cbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkYXRhIHBvaW50cyB0YWJsZS5cbiAgICogQHBhcmFtIHJvdW5kU2Vjb25kcyAtIFdoZXRoZXIgdG8gcm91bmQgdGhlIHNlY29uZHMgb3Igbm90LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgSWYgdHJ1ZSwgdGhlIHNlY29uZHMgd2lsbCBiZSByb3VuZGVkIHRvIDAuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBJZiBmYWxzZSwgdGhlIHNlY29uZHMgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgdGhleSBhcmUuXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgTWFwIG9iamVjdCB3aXRoIGRhdGEgcG9pbnQgSURzIGFzIGtleXMgYW5kIERhdGFPYmplY3QgYXMgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRBY3RpdmVEYXRhcG9pbnRzU2VyaWVzRGF0YU1hcChcbiAgICBkYXRhcG9pbnRzSWRzV2l0aFNlcmllczogRGF0YXBvaW50c1ZhbHVlc0RhdGFNYXAsXG4gICAgY29uZmlnOiBEYXRhcG9pbnRzVGFibGVDb25maWcsXG4gICAgcm91bmRTZWNvbmRzOiBib29sZWFuXG4gICk6IFByb21pc2U8TWFwPHN0cmluZyB8IG51bWJlciwgSVNlcmllcz4+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0ZhaWxlZFRvRmV0Y2hTZXJpZXNEYXRhID0gZmFsc2U7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5kYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZS5nZXRBbGxBY3RpdmVTZXJpZXNEYXRhTWFwKFxuICAgICAgICBkYXRhcG9pbnRzSWRzV2l0aFNlcmllcyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByb3VuZFNlY29uZHNcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMuaGFuZGxlRmV0Y2hFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGZXRjaEVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGlmIChlcnJvcj8ubWVzc2FnZS5pbmNsdWRlcygnNDAzJykpIHtcbiAgICAgIHRoaXMuYWxlcnRzLnNldEFsZXJ0R3JvdXBEaXNtaXNzU3RyYXRlZ3koJ3dhcm5pbmcnLCBEaXNtaXNzQWxlcnRTdHJhdGVneS5OT05FKTtcbiAgICAgIHRoaXMuaXNSZWZyZXNoRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVGltZW91dEVycm9yID0gZXJyb3I/Lm5hbWUgPT09ICdUaW1lb3V0RXJyb3InO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGlzVGltZW91dEVycm9yXG4gICAgICA/IHRoaXMuVElNRU9VVF9FUlJPUl9URVhUXG4gICAgICA6IGVycm9yPy5tZXNzYWdlID8/IHRoaXMuU0VSVkVSX0VSUk9SX1RFWFQ7XG5cbiAgICB0aGlzLmFsZXJ0cy5zZXRBbGVydEdyb3VwRGlzbWlzc1N0cmF0ZWd5KFxuICAgICAgJ3dhcm5pbmcnLFxuICAgICAgRGlzbWlzc0FsZXJ0U3RyYXRlZ3kuVEVNUE9SQVJZX09SX1BFUk1BTkVOVFxuICAgICk7XG5cbiAgICB0aGlzLmFsZXJ0cy5hZGRBbGVydHMoXG4gICAgICBuZXcgRHluYW1pY0NvbXBvbmVudEFsZXJ0KHtcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICB0ZXh0OiBlcnJvck1lc3NhZ2VcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaXNGYWlsZWRUb0ZldGNoU2VyaWVzRGF0YSA9IHRydWU7XG4gICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1pc3NpbmdBbnlQZXJtaXNzaW9uRXJyb3JNZXNzYWdlKCkge1xuICAgIHRoaXMuYWxlcnRzLnNldEFsZXJ0R3JvdXBEaXNtaXNzU3RyYXRlZ3koJ3N5c3RlbScsIERpc21pc3NBbGVydFN0cmF0ZWd5LlRFTVBPUkFSWSk7XG5cbiAgICB0aGlzLmFsZXJ0cy5hZGRBbGVydHMoXG4gICAgICBuZXcgRHluYW1pY0NvbXBvbmVudEFsZXJ0KHtcbiAgICAgICAgYWxsb3dIdG1sOiB0cnVlLFxuICAgICAgICB0ZXh0OiB0aGlzLmdldE1pc3NpbmdQZXJtaXNzaW9uc01lc3NhZ2UoKSxcbiAgICAgICAgdHlwZTogJ3N5c3RlbSdcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWlzc2luZ1Blcm1pc3Npb25zTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VNZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICBnZXR0ZXh0KGBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBmb2xsb3dpbmcgc2VyaWVzOmApXG4gICAgKTtcblxuICAgIGNvbnN0IGZvcm1hdHRlZExpc3QgPSB0aGlzLnNlcmllc1dpdGhvdXRQZXJtaXNzaW9uVG9SZWFkXG4gICAgICAubWFwKGRhdGFwb2ludCA9PiBgPGxpPiR7ZGF0YXBvaW50LmtleS52YWx1ZU9mKCl9XyR7ZGF0YXBvaW50LnZhbHVlfTwvbGk+YClcbiAgICAgIC5qb2luKCcnKTtcblxuICAgIHJldHVybiBgXG4gICAgICA8ZGl2PlxuICAgICAgICA8cD4ke2Jhc2VNZXNzYWdlfTwvcD5cbiAgICAgICAgPHVsPlxuICAgICAgICAgICR7Zm9ybWF0dGVkTGlzdH1cbiAgICAgICAgPC91bD5cbiAgICAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGUgbmFtZSBjb252ZW50aW9uIGZvciBlYWNoIGxpc3QgaXRlbSBpczogPGNvZGU+W3NvdXJjZV1fW2ZyYWdtZW50LnNlcmllc108L2NvZGU+PC9wPlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsUmVmcmVzaExvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmckXG4gICAgICAucGlwZShnbG9iYWxBdXRvUmVmcmVzaExvYWRpbmcodGhpcy53aWRnZXRHbG9iYWxBdXRvUmVmcmVzaCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTYgcC1sLTE2IHAtci0xNiBmbGV4LXdyYXBcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5kaXNwbGF5RGF0ZVNlbGVjdGlvblwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgICA8Yzh5LWRhdGUtcmFuZ2UtcGlja2VyXG4gICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgIFtpc0VtaXR0aW5nRGF0ZUNoYW5nZV09XCJ0cnVlXCJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJ0cnVlXCJcbiAgICAgICAgKHVwZGF0ZWREYXRlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L2M4eS1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L2Zvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuICA8IS0tIFRPRE86IHRlbXBvcmFyaWx5IGNvbW1lbnRlZCBvdXQsIHdpbGwgYmUgZW5hYmxlZCB3aGVuIGdyYWZ0IG9mIE1UTS01OTY4OSBpcyBtZXJnZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9DdW11bG9jaXR5LUlvVC9jdW11bG9jaXR5LXVpL3B1bGwvODAyOCAtLT5cbiAgIDwhLS0gPGM4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3RvclxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgW2NvbnRhaW5lckNsYXNzXT1cImNvbnRhaW5lckNsYXNzXCJcbiAgICBbZXhwb3J0Q29uZmlnXT1cImV4cG9ydENvbmZpZ1wiXG4gICAgKGlzT3Blbik9XCJvbkV4cG9ydE1vZGFsT3BlbigkZXZlbnQpXCJcbiAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yPiAtLT5cbiAgPCEtLSBUT0RPOiBiZWxvdyBkaXYgaXMganVzdCBhIHRlbXAgZml4LCBpdCB3aWxsIGJlIHJlbW92ZWQgd2hlbiBNVE0tNTk2ODkgaXMgbWVyZ2VkOiBodHRwczovL2dpdGh1Yi5jb20vQ3VtdWxvY2l0eS1Jb1QvY3VtdWxvY2l0eS11aS9wdWxsLzgwMjggICAtLT5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHAtdC00IHAtYi00IG1heC13aWR0aC1maXQgbS1sLWF1dG9cIj48L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5kYXRhcG9pbnRzLmxlbmd0aCA+IDBcIj5cbiAgICA8Yzh5LWRhdGFwb2ludHMtcmVsb2FkXG4gICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgW2lzQXV0b1JlZnJlc2hFbmFibGVkXT1cImNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZFwiXG4gICAgICBbcmVmcmVzaEludGVydmFsXT1cImNvbmZpZy5yZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgW2lzUmVmcmVzaERpc2FibGVkXT1cImlzUmVmcmVzaERpc2FibGVkXCJcbiAgICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nJFwiXG4gICAgICBbaXNTY3JvbGxpbmddPVwiaXNTY3JvbGxpbmcoKVwiXG4gICAgICBbaXNFeHBvcnRNb2RhbE9wZW5dPVwiaXNFeHBvcnRNb2RhbE9wZW5cIlxuICAgICAgW3dpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0XT1cImNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dFwiXG4gICAgICAob25Db3VudGRvd25FbmRlZCk9XCJvbkNvdW50ZG93bkVuZGVkKClcIlxuICAgID48L2M4eS1kYXRhcG9pbnRzLXJlbG9hZD5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJkZXZpY2VzQ29sdW1uSGVhZGVyc1wiPlxuICA8Yzh5LWRhdGFwb2ludHMtdGFibGVcbiAgICBbYWdncmVnYXRpb25UeXBlXT1cImNvbmZpZy5hZ2dyZWdhdGlvblwiXG4gICAgW2RhdGFwb2ludHNUYWJsZUl0ZW1zXT1cImRhdGFwb2ludHNUYWJsZUl0ZW1zXCJcbiAgICBbZGVjaW1hbFBsYWNlc109XCJjb25maWcuZGVjaW1hbFBsYWNlc1wiXG4gICAgW2RldmljZXNDb2x1bW5IZWFkZXJzXT1cImRldmljZXNDb2x1bW5IZWFkZXJzXCJcbiAgICBbaGFzTXVsdGlwbGVEYXRhcG9pbnRzXT1cImhhc011bHRpcGxlRGF0YXBvaW50c1wiXG4gICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmckIHwgYXN5bmNcIlxuICAgIFtzZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZENvdW50XT1cInNlcmllc1dpdGhvdXRQZXJtaXNzaW9uVG9SZWFkPy5sZW5ndGhcIlxuICAgIChpc1Njcm9sbGluZyk9XCJvblNjcm9sbGluZygkZXZlbnQpXCJcbiAgPjwvYzh5LWRhdGFwb2ludHMtdGFibGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtdGFibGUvZGF0YXBvaW50cy10YWJsZS12aWV3L2RhdGFwb2ludHMtdGFibGUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtdmlldy9kYXRhcG9pbnRzLXRhYmxlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDWixvQkFBb0IsRUFDcEIscUJBQXFCLEVBRXJCLDhCQUE4QixFQUM5QixPQUFPLEVBQ1Asd0JBQXdCLEVBQ3pCLE1BQU0scUJBQXFCLENBQUM7QUFRN0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbEYsT0FBTyxFQUNMLG1CQUFtQixFQUduQixnQ0FBZ0MsRUFDaEMsa0JBQWtCLEVBQ25CLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQWdCLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkYsT0FBTyxFQUNMLHVCQUF1QixFQU14QixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQkFBc0Is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SUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN0RixTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8saUNBQWlDLENBQUMsU0FBcUI7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1lBQzNELE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLE9BQU8sQ0FBQztRQUN4RCxJQUFJLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNoQixNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQztZQUM3QixTQUFTLENBQUMsUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDOzhHQXJjVSxrQ0FBa0M7a0dBQWxDLGtDQUFrQyw0SkMxRC9DLGltRUE4Q0EsMkNER0ksWUFBWTtnQkFDWixnRkFBZ0Y7Z0JBQ2hGLHFDQUFxQztnQkFDckMseUJBQXlCLHNRQUN6Qix3QkFBd0IscVFBQ3hCLHdCQUF3QiwwSUFDeEIsbUJBQW1COzsyRkFHVixrQ0FBa0M7a0JBZjlDLFNBQVM7K0JBQ0UsMkJBQTJCLFFBRS9CLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxjQUNsQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixnRkFBZ0Y7d0JBQ2hGLHFDQUFxQzt3QkFDckMseUJBQXlCO3dCQUN6Qix3QkFBd0I7d0JBQ3hCLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3FCQUNwQjs7MEJBdUZFLFFBQVE7eUNBakZGLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIENvbW1vbk1vZHVsZSxcbiAgRGlzbWlzc0FsZXJ0U3RyYXRlZ3ksXG4gIER5bmFtaWNDb21wb25lbnRBbGVydCxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcixcbiAgV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBnbG9iYWxBdXRvUmVmcmVzaExvYWRpbmdcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBLUElEZXRhaWxzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuLy8gVE9ETzogdGVtcG9yYXJpbHkgY29tbWVudGVkIG91dCwgd2lsbCBiZSBlbmFibGVkIHdoZW4gTVRNLTU5Njg5IGlzIGludGVncmF0ZWRcbi8vIGltcG9ydCB7XG4vLyAgIERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckNvbXBvbmVudCxcbi8vICAgRXhwb3J0Q29uZmlnXG4vLyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgSVNlcmllcyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IENvbnRleHREYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2NvbnRleHQtZGFzaGJvYXJkJztcbmltcG9ydCB7XG4gIERhdGFGZXRjaGluZ1NlcnZpY2UsXG4gIERhdGFwb2ludHNWYWx1ZXNEYXRhTWFwLFxuICBTb3VyY2VJZCxcbiAgVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMsXG4gIGRhdGVSYW5nZVZhbGlkYXRvclxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9DT1VOVERPV05fVkFMVUUsXG4gIERhdGFwb2ludFRhYmxlSXRlbSxcbiAgRGF0YXBvaW50V2l0aFZhbHVlcyxcbiAgRGF0YXBvaW50c1RhYmxlQ29uZmlnLFxuICBHcm91cGVkRGF0YXBvaW50VGFibGVJdGVtLFxuICBUYWJsZUNvbHVtbkhlYWRlclxufSBmcm9tICcuLi9kYXRhcG9pbnRzLXRhYmxlLXdpZGdldC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YXBvaW50cy10YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzUmVsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhcG9pbnRzLXJlbG9hZC9kYXRhcG9pbnRzLXJlbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UgfSBmcm9tICcuL2RhdGFwb2ludHMtdGFibGUtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFwb2ludHNUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0YXBvaW50cy10YWJsZS9kYXRhcG9pbnRzLXRhYmxlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnRzLXRhYmxlLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXBvaW50cy10YWJsZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2QtY29sIGZpdC1oJyB9LFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIC8vIFRPRE86IHRlbXBvcmFyaWx5IGNvbW1lbnRlZCBvdXQsIHdpbGwgYmUgZW5hYmxlZCB3aGVuIE1UTS01OTY4OSBpcyBpbnRlZ3JhdGVkXG4gICAgLy8gRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yQ29tcG9uZW50LFxuICAgIERhdGFwb2ludHNSZWxvYWRDb21wb25lbnQsXG4gICAgRGF0YXBvaW50c1RhYmxlQ29tcG9uZW50LFxuICAgIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50c1RhYmxlVmlld1dpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqICBEYXRhIHBvaW50cyB0YWJsZSB3aWRnZXQgY29uZmlnLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBEYXRhcG9pbnRzVGFibGVDb25maWc7XG4gIC8vIGNvbmZpZzogRGF0YXBvaW50c1RhYmxlQ29uZmlnO1xuXG4gIGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcjtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgZGF0YSBwb2ludHMgd2hlcmUgX19hY3RpdmUgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBhY3RpdmVEYXRhcG9pbnRzOiBLUElEZXRhaWxzW10gPSBbXTtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIGN1c3RvbSBDU1Mgc3R5bGUgZm9yIHRoZSBleHBvcnQgc2VsZWN0b3IgY29tcG9uZW50LlxuICAgKi9cbiAgY29udGFpbmVyQ2xhc3M6IHN0cmluZztcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIGRhdGFwb2ludHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICogVXNlZCB0byBwb3B1bGF0ZSB0aGUgQ1NWL0V4Y2VsIGZpbGUgd2l0aCBkYXRhLlxuICAgKi9cbiAgZGF0YXBvaW50c1dpdGhWYWx1ZXM6IERhdGFwb2ludFdpdGhWYWx1ZXNbXTtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGBHcm91cGVkRGF0YXBvaW50VGFibGVJdGVtYCBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgZGF0YXBvaW50cyB0YWJsZSBpdGVtcy5cbiAgICogVXNlZCB0byBwb3B1bGF0ZSB0aGUgdGFibGUgd2l0aCBkYXRhLlxuICAgKi9cbiAgZGF0YXBvaW50c1RhYmxlSXRlbXM6IEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW1bXSA9IFtdO1xuXG4gIGRldmljZXNDb2x1bW5IZWFkZXJzOiBUYWJsZUNvbHVtbkhlYWRlcltdO1xuICAvKipcbiAgICogUmVwcmVzZW50cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1c2VkIGJ5IGEgYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLlxuICAgKi9cbiAgLy8gVE9ETzogdGVtcG9yYXJpbHkgY29tbWVudGVkIG91dCwgd2lsbCBiZSBlbmFibGVkIHdoZW4gTVRNLTU5Njg5IGlzIGludGVncmF0ZWRcbiAgLy8gZXhwb3J0Q29uZmlnOiBFeHBvcnRDb25maWc7XG5cbiAgZm9ybUdyb3VwOiBSZXR1cm5UeXBlPERhdGFwb2ludHNUYWJsZVZpZXdXaWRnZXRDb21wb25lbnRbJ2NyZWF0ZUZvcm0nXT47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGRhdGEgcG9pbnQuXG4gICAqIElmIGlzIHRydWUsIHRoZW4gYSBjb2x1bW4gJ0RldmljZScgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLlxuICAgKi9cbiAgaGFzTXVsdGlwbGVEYXRhcG9pbnRzOiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcmVmcmVzaGluZyBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cbiAgICogSXQncyAndHJ1ZScgd2hlbiB1c2VyIGlzIG5vdCBhbGxvd2VkIHRvIHZpZXcgYSBtZWFzdXJlbWVudHMuXG4gICAqL1xuICBpc1JlZnJlc2hEaXNhYmxlZCA9IGZhbHNlO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBpbiB0aGUgaW5pdGlhbCByZXF1ZXN0IHN0YXRlXG4gICAqIHdoZXJlIGRhdGEgZm9yIGEgdGFibGUgc3RydWN0dXJlIGlzIGJlaW5nIHByZXBhcmVkLlxuICAgKi9cbiAgaXNJbml0aWFsUmVxdWVzdCA9IHRydWU7XG4gIC8qKlxuICAgKiBDdXJyZW50IGlzTG9hZGluZyBzdGF0ZS4gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhdGEgaXMgYmVpbmcgbG9hZGVkLlxuICAgKi9cbiAgaXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgaXNFeHBvcnRNb2RhbE9wZW4gPSBmYWxzZTtcblxuICBpc1Njcm9sbGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgc2VyaWVzV2l0aG91dFBlcm1pc3Npb25Ub1JlYWQ6IHsga2V5OiBTb3VyY2VJZDsgdmFsdWU6IHN0cmluZ1tdIH1bXTtcblxuICBwcml2YXRlIFRJTUVPVVRfRVJST1JfVEVYVCA9IGdldHRleHQoXG4gICAgJ1RoZSByZXF1ZXN0IGlzIHRha2luZyBsb25nZXIgdGhhbiB1c3VhbC4gV2UgYXBvbG9naXplIGZvciB0aGUgaW5jb252ZW5pZW5jZS4nXG4gICk7XG4gIHByaXZhdGUgU0VSVkVSX0VSUk9SX1RFWFQgPSBnZXR0ZXh0KCdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuJyk7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgc2Nyb2xsaW5nU3ViamVjdCQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGlzRmFpbGVkVG9GZXRjaFNlcmllc0RhdGE6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGFsZXJ0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcGxheWVkIGFuZCBjYW4gYmUgZGlzbWlzc2VkLlxuICAgKiBUaGUgbWVzc2FnZSBpcyBvbmx5IGRpc3BsYXllZCB3aGVuIGEgY29tcG9uZW50IGlzIGluaXRpYWxpemVkLlxuICAgKi9cbiAgcHJpdmF0ZSBpc01pc3NpbmdBbnlQZXJtaXNzaW9uQWxlcnRTaG93biA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhRmV0Y2hpbmdTZXJ2aWNlOiBEYXRhRmV0Y2hpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZTogRGF0YXBvaW50c1RhYmxlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlOiBEYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aWRnZXRHbG9iYWxBdXRvUmVmcmVzaDogV2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2hTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGFzaGJvYXJkQ29udGV4dENvbXBvbmVudDogQ29udGV4dERhc2hib2FyZENvbXBvbmVudFxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lckNsYXNzID0gJ2EtaS1jZW50ZXIgaW5wdXQtZ3JvdXAgcC10LTQgcC1iLTQgbWF4LXdpZHRoLWZpdCBtLWwtYXV0byc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGVnYWN5IHdpZGdldCB1c2VkIHJlYWx0aW1lIHNvIGl0IG11c3QgYmUgY29udmVydGVkIHRvIHJlZnJlc2ggYXBwcm9hY2hcbiAgICAgKiBpZiBpdCB3YXMgZW5hYmxlZCBiZWZvcmUgbWlncmF0aW9uLlxuICAgICAqL1xuICAgIGlmICh0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCA9IHRydWU7XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0ID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbmZpZy5kaXNwbGF5U2V0dGluZ3MuZ2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQpIHtcbiAgICAgIHRoaXMuaGFuZGxlR2xvYmFsUmVmcmVzaExvYWRpbmcoKTtcbiAgICAgIHRoaXMuaGFuZGxlR2xvYmFsVGltZUNvbnRleHRTZXR0aW5ncygpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2Nyb2xsaW5nU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBjb25zdCBpc0xlZ2FjeVdpZGdldFJlYWx0aW1lQWN0aXZlID1cbiAgICAgIHRoaXMuY29uZmlnLnJlYWx0aW1lICYmXG4gICAgICAhdGhpcy5jb25maWcuaGFzT3duUHJvcGVydHkoJ2RlY2ltYWxQbGFjZXMnKSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KCdyZWZyZXNoSW50ZXJ2YWwnKSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KCdpc0F1dG9SZWZyZXNoRW5hYmxlZCcpO1xuXG4gICAgaWYgKGlzTGVnYWN5V2lkZ2V0UmVhbHRpbWVBY3RpdmUpIHtcbiAgICAgIHRoaXMuc2V0RGVmYXVsdFJlZnJlc2hSZWxhdGVkUHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb25maWcuaW50ZXJ2YWwpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGZvciBsZWdhY3kgd2lkZ2V0IGJ1Zy5cbiAgICAgICAqIFdoZW4gbmV3IGxlZ2FjeSB3aWRnZXQgaXMgY3JlYXRlZCBhbmQgc2F2ZWRcbiAgICAgICAqIHRoZW4gaW50ZXJ2YWwgdmFsdWUgaW4gYSBjb25maWcgd291bGQgc3RheSBudWxsIHVudGlsIGludGVydmFsIGlzIG1hbnVhbGx5IGNoYW5nZWRcbiAgICAgICAqIGFuZCBzYXZlZCBhZ2Fpbi5cbiAgICAgICAqIEJ1ZyB3YXMgaW50cm9kdWNlZCBwb3N0IDEwMTguMC4xNjQgdmVyc2lvbiBvZiBVSS5cbiAgICAgICAqL1xuICAgICAgdGhpcy5jb25maWcuaW50ZXJ2YWwgPSAnaG91cnMnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5pbnRlcnZhbCAhPT0gVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuY3VzdG9tKSB7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlSW50ZXJ2YWxUb01hdGNoRnJvbU5vd0RhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMucHJlcGFyZURhdGVSYW5nZUZvcm0oKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByZXBhcmVUYWJsZURhdGEoKTtcblxuICAgIC8vIFRPRE86IHRlbXBvcmFyaWx5IGNvbW1lbnRlZCBvdXQsIHdpbGwgYmUgZW5hYmxlZCB3aGVuIE1UTS01OTY4OSBpcyBpbnRlZ3JhdGVkXG4gICAgLy8gdGhpcy5leHBvcnRDb25maWcgPSB7XG4gICAgLy8gICBhZ2dyZWdhdGlvbjogdGhpcy5jb25maWcuYWdncmVnYXRpb24sXG4gICAgLy8gICBkYXRlRnJvbTogdGhpcy5jb25maWcuZGF0ZUZyb20sXG4gICAgLy8gICBkYXRlVG86IHRoaXMuY29uZmlnLmRhdGVUbyxcbiAgICAvLyAgIGRhdGFwb2ludERldGFpbHM6IHRoaXMuYWN0aXZlRGF0YXBvaW50cy5tYXAoKHsgX190YXJnZXQsIGZyYWdtZW50LCBzZXJpZXMgfSkgPT4gKHtcbiAgICAvLyAgICAgZGV2aWNlTmFtZTogX190YXJnZXQubmFtZSxcbiAgICAvLyAgICAgc291cmNlOiBfX3RhcmdldC5pZCxcbiAgICAvLyAgICAgdmFsdWVGcmFnbWVudFNlcmllczogc2VyaWVzLFxuICAgIC8vICAgICB2YWx1ZUZyYWdtZW50VHlwZTogZnJhZ21lbnRcbiAgICAvLyAgIH0pKVxuICAgIC8vIH07XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25EYXRlQ2hhbmdlKGRhdGE6IHsgZGF0ZUZyb20/OiBzdHJpbmcgfCBudWxsOyBkYXRlVG8/OiBzdHJpbmcgfCBudWxsIH0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmRhdGVGcm9tKSB7XG4gICAgICB0aGlzLmNvbmZpZy5kYXRlRnJvbSA9IGRhdGEuZGF0ZUZyb207XG4gICAgfVxuICAgIGlmIChkYXRhLmRhdGVUbykge1xuICAgICAgdGhpcy5jb25maWcuZGF0ZVRvID0gZGF0YS5kYXRlVG87XG4gICAgfVxuICAgIHRoaXMucHJlcGFyZVRhYmxlRGF0YSgpO1xuXG4gICAgLy8gVE9ETzogdGVtcG9yYXJpbHkgY29tbWVudGVkIG91dCwgd2lsbCBiZSBlbmFibGVkIHdoZW4gTVRNLTU5Njg5IGlzIGludGVncmF0ZWRcbiAgICAvLyBUT0RPLTI6IGVhY2ggbWFudWFsL2F1dG8gbGlzdCByZWxvYWQgc2hvdWxkIHVwZGF0ZSBleHBvcnRzIGNvbmZpZyBkYXRlIHJhbmdlIHRvIHN5bmMgY3VycmVudCBzdGF0ZSBvZiB2aWV3IHdpdGhcbiAgICAvLyBpbml0YWwgZXhwb3J0IGNvbmZpZ1xuICAgIC8vIHRoaXMuZXhwb3J0Q29uZmlnLmRhdGVGcm9tID0gdGhpcy5jb25maWcuZGF0ZUZyb207XG4gICAgLy8gdGhpcy5leHBvcnRDb25maWcuZGF0ZVRvID0gdGhpcy5jb25maWcuZGF0ZVRvO1xuICB9XG5cbiAgb25FeHBvcnRNb2RhbE9wZW4oaXNPcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwb3J0TW9kYWxPcGVuID0gaXNPcGVuZWQ7XG4gIH1cblxuICBvblNjcm9sbGluZyh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsaW5nU3ViamVjdCQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBhc3luYyBvbkNvdW50ZG93bkVuZGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRhdGVSYW5nZSA9IHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UucHJlcGFyZVRpbWVSYW5nZShcbiAgICAgIHRoaXMuY29uZmlnLmludGVydmFsLFxuICAgICAgdGhpcy5jb25maWcuZGF0ZUZyb20sXG4gICAgICB0aGlzLmNvbmZpZy5kYXRlVG9cbiAgICApO1xuXG4gICAgdGhpcy5jb25maWcuZGF0ZUZyb20gPSBkYXRlUmFuZ2UuZGF0ZUZyb207XG4gICAgdGhpcy5jb25maWcuZGF0ZVRvID0gZGF0ZVJhbmdlLmRhdGVUbztcblxuICAgIGF3YWl0IHRoaXMucHJlcGFyZVRhYmxlRGF0YShmYWxzZSk7XG5cbiAgICB0aGlzLm9uU2Nyb2xsaW5nKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsVGltZUNvbnRleHRTZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5kYXRlRnJvbSA9IHRoaXMuZGF0YUZldGNoaW5nU2VydmljZS5hZGp1c3REYXRlKHRoaXMuY29uZmlnLmRhdGVbMF0sIDAsIGZhbHNlKTtcbiAgICB0aGlzLmNvbmZpZy5kYXRlVG8gPSB0aGlzLmRhdGFGZXRjaGluZ1NlcnZpY2UuYWRqdXN0RGF0ZSh0aGlzLmNvbmZpZy5kYXRlWzFdLCAwLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgc2Nyb2xsaW5nIHN1YnNjcmlwdGlvbi5cbiAgICpcbiAgICogRW5zdXJlcyBzaW1pbGFyIFVYIGFzIGluIHRoZSBhbGFybXMgY291bnRkb3duLXBhdXNlIGxvZ2ljLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTY3JvbGxpbmdTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnNjcm9sbGluZ1N1YmplY3QkXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSlcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5pc1Njcm9sbGluZy5zZXQodmFsdWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGVmYXVsdFJlZnJlc2hSZWxhdGVkUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5jb25maWcucmVmcmVzaEludGVydmFsID0gREVGQVVMVF9DT1VOVERPV05fVkFMVUU7XG4gIH1cblxuICBwcml2YXRlIHJlY2FsY3VsYXRlSW50ZXJ2YWxUb01hdGNoRnJvbU5vd0RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYXRlRnJvbSwgZGF0ZVRvIH0gPSB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UuY2FsY3VsYXRlRGF0ZVJhbmdlKFxuICAgICAgdGhpcy5jb25maWcuaW50ZXJ2YWxcbiAgICApO1xuICAgIHRoaXMuY29uZmlnLmRhdGVGcm9tID0gZGF0ZUZyb207XG4gICAgdGhpcy5jb25maWcuZGF0ZVRvID0gZGF0ZVRvO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlRGF0ZVJhbmdlRm9ybSgpIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuY3JlYXRlRm9ybSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAge1xuICAgICAgICBkYXRlRnJvbTogbmV3IEZvcm1Db250cm9sKHRoaXMuY29uZmlnLmRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5jb25maWcuZGF0ZVRvKVxuICAgICAgfSxcbiAgICAgIHsgdmFsaWRhdG9yczogZGF0ZVJhbmdlVmFsaWRhdG9yIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIHRoZSB0YWJsZSBkYXRhIGJ5OlxuICAgKiAtIGZpbHRlcmluZyBvdXQgaW5hY3RpdmUgZGF0YSBwb2ludHMsXG4gICAqIC0gY2hlY2tpbmcgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGRldmljZXMgYXMgYSBzb3VyY2Ugb2YgZGF0YSBwb2ludHMsXG4gICAqIC0gZ2V0dGluZyB0aGUgY29sdW1uIGhlYWRlcnMgZm9yIGRldmljZXMsXG4gICAqIC0gZ2V0dGluZyB0aGUgc2VyaWVzIGRhdGEgZm9yIGFjdGl2ZSBkYXRhIHBvaW50cyAoQVBJIGNhbGwpLFxuICAgKiAtIHByZXBhcmluZyBkYXRhIHBvaW50cyB3aXRoIHZhbHVlcyBsaXN0LFxuICAgKiAtIG1hcHBpbmcgZGF0YSBwb2ludHMgd2l0aCB2YWx1ZXMgdG8gbGlzdCBpdGVtcyxcbiAgICogLSBncm91cGluZyBkYXRhIHBvaW50cyBieSBkYXRlIGFuZCBkZXZpY2UsXG4gICAqIC0gc29ydGluZyBkYXRhIGJ5IGRhdGUgZGVzY2VuZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHJvdW5kU2Vjb25kcyAtIFdoZXRoZXIgdG8gcm91bmQgdGhlIHNlY29uZHMgb3Igbm90LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgSWYgdHJ1ZSwgdGhlIHNlY29uZHMgd2lsbCBiZSByb3VuZGVkIHRvIDAuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBJZiBmYWxzZSwgdGhlIHNlY29uZHMgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgdGhleSBhcmUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByZXBhcmVUYWJsZURhdGEocm91bmRTZWNvbmRzID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgaWYgKHRoaXMuaXNJbml0aWFsUmVxdWVzdCkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmRhdGFwb2ludHM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNvbmZpZy5kYXRhcG9pbnRzLmZvckVhY2goZGF0YXBvaW50ID0+XG4gICAgICAgICAgdGhpcy5hc3NpZ25Db250ZXh0RnJvbUNvbnRleHREYXNoYm9hcmQoZGF0YXBvaW50KVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHMgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmZpbHRlck91dEluYWN0aXZlRGF0YXBvaW50cyhcbiAgICAgICAgdGhpcy5jb25maWcuZGF0YXBvaW50c1xuICAgICAgKTtcblxuICAgICAgdGhpcy5oYXNNdWx0aXBsZURhdGFwb2ludHMgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmhhc011bHRpcGxlRGF0YXBvaW50cyhcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRhcG9pbnRzXG4gICAgICApO1xuXG4gICAgICB0aGlzLmRldmljZXNDb2x1bW5IZWFkZXJzID0gdGhpcy5kYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZS5nZXRDb2x1bW5IZWFkZXJzKFxuICAgICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHNcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaXNJbml0aWFsUmVxdWVzdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzOiBEYXRhcG9pbnRzVmFsdWVzRGF0YU1hcCA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmdyb3VwU2VyaWVzQnlEZXZpY2VJZCh0aGlzLmFjdGl2ZURhdGFwb2ludHMpO1xuXG4gICAgY29uc3QgYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGE6IE1hcDxzdHJpbmcgfCBudW1iZXIsIElTZXJpZXM+ID1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0QWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGFNYXAoXG4gICAgICAgIGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzLFxuICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgcm91bmRTZWNvbmRzXG4gICAgICApO1xuXG4gICAgaWYgKHRoaXMuaXNGYWlsZWRUb0ZldGNoU2VyaWVzRGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VyaWVzV2l0aG91dFBlcm1pc3Npb25Ub1JlYWQgPVxuICAgICAgdGhpcy5kYXRhcG9pbnRzVGFibGVWaWV3U2VydmljZS5nZXRTZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZChcbiAgICAgICAgYWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGEsXG4gICAgICAgIGFjdGl2ZURhdGFwb2ludHNJZHNXaXRoU2VyaWVzXG4gICAgICApO1xuXG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNNaXNzaW5nQW55UGVybWlzc2lvbkFsZXJ0U2hvd24gJiZcbiAgICAgIHRoaXMuc2VyaWVzV2l0aG91dFBlcm1pc3Npb25Ub1JlYWQ/Lmxlbmd0aCA+IDAgJiZcbiAgICAgIGFjdGl2ZURhdGFwb2ludHNTZXJpZXNEYXRhPy5zaXplXG4gICAgKSB7XG4gICAgICB0aGlzLmhhbmRsZU1pc3NpbmdBbnlQZXJtaXNzaW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLmlzTWlzc2luZ0FueVBlcm1pc3Npb25BbGVydFNob3duID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFjdGl2ZURhdGFwb2ludHNTZXJpZXNEYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhcG9pbnRzV2l0aFZhbHVlcyA9IHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UuZ2V0RGF0YXBvaW50c1dpdGhWYWx1ZXMoXG4gICAgICB0aGlzLmFjdGl2ZURhdGFwb2ludHMsXG4gICAgICBhY3RpdmVEYXRhcG9pbnRzU2VyaWVzRGF0YVxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhcG9pbnRzTGlzdEl0ZW1zOiBEYXRhcG9pbnRUYWJsZUl0ZW1bXSA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLm1hcERhdGFwb2ludHNXaXRoVmFsdWVzVG9MaXN0KHRoaXMuZGF0YXBvaW50c1dpdGhWYWx1ZXMpO1xuXG4gICAgY29uc3QgZ3JvdXBlZERhdGFwb2ludHNMaXN0SXRlbXM6IEdyb3VwZWREYXRhcG9pbnRUYWJsZUl0ZW1bXSA9XG4gICAgICB0aGlzLmRhdGFwb2ludHNUYWJsZVZpZXdTZXJ2aWNlLmdyb3VwQnlEYXRlQW5kRGV2aWNlKFxuICAgICAgICBkYXRhcG9pbnRzTGlzdEl0ZW1zLFxuICAgICAgICB0aGlzLmRldmljZXNDb2x1bW5IZWFkZXJzXG4gICAgICApO1xuXG4gICAgdGhpcy5kYXRhcG9pbnRzVGFibGVJdGVtcyA9IHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2Uuc29ydERhdGFCeURhdGVEZXNjZW5kaW5nKFxuICAgICAgZ3JvdXBlZERhdGFwb2ludHNMaXN0SXRlbXNcbiAgICApO1xuXG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYWN0aXZlIGRhdGEgcG9pbnRzIHNlcmllcyBkYXRhIGFuZCByZXR1cm5zIGl0IGFzIGEgbWFwLlxuICAgKlxuICAgKiBJdCdzIGEgd3JhcHBlciBtZXRob2Qgd2l0aCB0cnktY2F0Y2ggYmxvY2suXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhcG9pbnRzSWRzV2l0aFNlcmllcyAtIEEgbWFwIG9mIGRhdGEgcG9pbnQgSURzIHdpdGggdGhlaXIgYXNzb2NpYXRlZCBzZXJpZXMuXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZGF0YSBwb2ludHMgdGFibGUuXG4gICAqIEBwYXJhbSByb3VuZFNlY29uZHMgLSBXaGV0aGVyIHRvIHJvdW5kIHRoZSBzZWNvbmRzIG9yIG5vdC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgIElmIHRydWUsIHRoZSBzZWNvbmRzIHdpbGwgYmUgcm91bmRlZCB0byAwLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgSWYgZmFsc2UsIHRoZSBzZWNvbmRzIHdpbGwgYmUgZGlzcGxheWVkIGFzIHRoZXkgYXJlLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIE1hcCBvYmplY3Qgd2l0aCBkYXRhIHBvaW50IElEcyBhcyBrZXlzIGFuZCBEYXRhT2JqZWN0IGFzIHZhbHVlcy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWN0aXZlRGF0YXBvaW50c1Nlcmllc0RhdGFNYXAoXG4gICAgZGF0YXBvaW50c0lkc1dpdGhTZXJpZXM6IERhdGFwb2ludHNWYWx1ZXNEYXRhTWFwLFxuICAgIGNvbmZpZzogRGF0YXBvaW50c1RhYmxlQ29uZmlnLFxuICAgIHJvdW5kU2Vjb25kczogYm9vbGVhblxuICApOiBQcm9taXNlPE1hcDxzdHJpbmcgfCBudW1iZXIsIElTZXJpZXM+PiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNGYWlsZWRUb0ZldGNoU2VyaWVzRGF0YSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGF0YXBvaW50c1RhYmxlVmlld1NlcnZpY2UuZ2V0QWxsQWN0aXZlU2VyaWVzRGF0YU1hcChcbiAgICAgICAgZGF0YXBvaW50c0lkc1dpdGhTZXJpZXMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcm91bmRTZWNvbmRzXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLmhhbmRsZUZldGNoRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRmV0Y2hFcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICBpZiAoZXJyb3I/Lm1lc3NhZ2UuaW5jbHVkZXMoJzQwMycpKSB7XG4gICAgICB0aGlzLmFsZXJ0cy5zZXRBbGVydEdyb3VwRGlzbWlzc1N0cmF0ZWd5KCd3YXJuaW5nJywgRGlzbWlzc0FsZXJ0U3RyYXRlZ3kuTk9ORSk7XG4gICAgICB0aGlzLmlzUmVmcmVzaERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1RpbWVvdXRFcnJvciA9IGVycm9yPy5uYW1lID09PSAnVGltZW91dEVycm9yJztcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBpc1RpbWVvdXRFcnJvclxuICAgICAgPyB0aGlzLlRJTUVPVVRfRVJST1JfVEVYVFxuICAgICAgOiBlcnJvcj8ubWVzc2FnZSA/PyB0aGlzLlNFUlZFUl9FUlJPUl9URVhUO1xuXG4gICAgdGhpcy5hbGVydHMuc2V0QWxlcnRHcm91cERpc21pc3NTdHJhdGVneShcbiAgICAgICd3YXJuaW5nJyxcbiAgICAgIERpc21pc3NBbGVydFN0cmF0ZWd5LlRFTVBPUkFSWV9PUl9QRVJNQU5FTlRcbiAgICApO1xuXG4gICAgdGhpcy5hbGVydHMuYWRkQWxlcnRzKFxuICAgICAgbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgdGV4dDogZXJyb3JNZXNzYWdlXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmlzRmFpbGVkVG9GZXRjaFNlcmllc0RhdGEgPSB0cnVlO1xuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNaXNzaW5nQW55UGVybWlzc2lvbkVycm9yTWVzc2FnZSgpIHtcbiAgICB0aGlzLmFsZXJ0cy5zZXRBbGVydEdyb3VwRGlzbWlzc1N0cmF0ZWd5KCdzeXN0ZW0nLCBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUlkpO1xuXG4gICAgdGhpcy5hbGVydHMuYWRkQWxlcnRzKFxuICAgICAgbmV3IER5bmFtaWNDb21wb25lbnRBbGVydCh7XG4gICAgICAgIGFsbG93SHRtbDogdHJ1ZSxcbiAgICAgICAgdGV4dDogdGhpcy5nZXRNaXNzaW5nUGVybWlzc2lvbnNNZXNzYWdlKCksXG4gICAgICAgIHR5cGU6ICdzeXN0ZW0nXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldE1pc3NpbmdQZXJtaXNzaW9uc01lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgZ2V0dGV4dChgWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbnMgdG8gcmVhZCB0aGUgZm9sbG93aW5nIHNlcmllczpgKVxuICAgICk7XG5cbiAgICBjb25zdCBmb3JtYXR0ZWRMaXN0ID0gdGhpcy5zZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZFxuICAgICAgLm1hcChkYXRhcG9pbnQgPT4gYDxsaT4ke2RhdGFwb2ludC5rZXkudmFsdWVPZigpfV8ke2RhdGFwb2ludC52YWx1ZX08L2xpPmApXG4gICAgICAuam9pbignJyk7XG5cbiAgICByZXR1cm4gYFxuICAgICAgPGRpdj5cbiAgICAgICAgPHA+JHtiYXNlTWVzc2FnZX08L3A+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAke2Zvcm1hdHRlZExpc3R9XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIG5hbWUgY29udmVudGlvbiBmb3IgZWFjaCBsaXN0IGl0ZW0gaXM6IDxjb2RlPltzb3VyY2VdX1tmcmFnbWVudC5zZXJpZXNdPC9jb2RlPjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUdsb2JhbFJlZnJlc2hMb2FkaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMb2FkaW5nJFxuICAgICAgLnBpcGUoZ2xvYmFsQXV0b1JlZnJlc2hMb2FkaW5nKHRoaXMud2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2gpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzc2lnbkNvbnRleHRGcm9tQ29udGV4dERhc2hib2FyZChkYXRhcG9pbnQ6IEtQSURldGFpbHMpIHtcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkQ29udGV4dENvbXBvbmVudD8uaXNEZXZpY2VUeXBlRGFzaGJvYXJkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmRhc2hib2FyZENvbnRleHRDb21wb25lbnQ/LmNvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQ/LmlkKSB7XG4gICAgICBjb25zdCB7IG5hbWUsIGlkIH0gPSBjb250ZXh0O1xuICAgICAgZGF0YXBvaW50Ll9fdGFyZ2V0ID0geyBuYW1lLCBpZCB9O1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMTYgcC1sLTE2IHAtci0xNiBmbGV4LXdyYXBcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5kaXNwbGF5RGF0ZVNlbGVjdGlvblwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgICA8Yzh5LWRhdGUtcmFuZ2UtcGlja2VyXG4gICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgIFtpc0VtaXR0aW5nRGF0ZUNoYW5nZV09XCJ0cnVlXCJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJ0cnVlXCJcbiAgICAgICAgKHVwZGF0ZWREYXRlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L2M4eS1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L2Zvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuICA8IS0tIFRPRE86IHRlbXBvcmFyaWx5IGNvbW1lbnRlZCBvdXQsIHdpbGwgYmUgZW5hYmxlZCB3aGVuIGdyYWZ0IG9mIE1UTS01OTY4OSBpcyBtZXJnZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9DdW11bG9jaXR5LUlvVC9jdW11bG9jaXR5LXVpL3B1bGwvODAyOCAtLT5cbiAgIDwhLS0gPGM4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3RvclxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgW2NvbnRhaW5lckNsYXNzXT1cImNvbnRhaW5lckNsYXNzXCJcbiAgICBbZXhwb3J0Q29uZmlnXT1cImV4cG9ydENvbmZpZ1wiXG4gICAgKGlzT3Blbik9XCJvbkV4cG9ydE1vZGFsT3BlbigkZXZlbnQpXCJcbiAgPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yPiAtLT5cbiAgPCEtLSBUT0RPOiBiZWxvdyBkaXYgaXMganVzdCBhIHRlbXAgZml4LCBpdCB3aWxsIGJlIHJlbW92ZWQgd2hlbiBNVE0tNTk2ODkgaXMgbWVyZ2VkOiBodHRwczovL2dpdGh1Yi5jb20vQ3VtdWxvY2l0eS1Jb1QvY3VtdWxvY2l0eS11aS9wdWxsLzgwMjggICAtLT5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHAtdC00IHAtYi00IG1heC13aWR0aC1maXQgbS1sLWF1dG9cIj48L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5kYXRhcG9pbnRzLmxlbmd0aCA+IDBcIj5cbiAgICA8Yzh5LWRhdGFwb2ludHMtcmVsb2FkXG4gICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgW2lzQXV0b1JlZnJlc2hFbmFibGVkXT1cImNvbmZpZy5pc0F1dG9SZWZyZXNoRW5hYmxlZFwiXG4gICAgICBbcmVmcmVzaEludGVydmFsXT1cImNvbmZpZy5yZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgW2lzUmVmcmVzaERpc2FibGVkXT1cImlzUmVmcmVzaERpc2FibGVkXCJcbiAgICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nJFwiXG4gICAgICBbaXNTY3JvbGxpbmddPVwiaXNTY3JvbGxpbmcoKVwiXG4gICAgICBbaXNFeHBvcnRNb2RhbE9wZW5dPVwiaXNFeHBvcnRNb2RhbE9wZW5cIlxuICAgICAgW3dpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0XT1cImNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dFwiXG4gICAgICAob25Db3VudGRvd25FbmRlZCk9XCJvbkNvdW50ZG93bkVuZGVkKClcIlxuICAgID48L2M4eS1kYXRhcG9pbnRzLXJlbG9hZD5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJkZXZpY2VzQ29sdW1uSGVhZGVyc1wiPlxuICA8Yzh5LWRhdGFwb2ludHMtdGFibGVcbiAgICBbYWdncmVnYXRpb25UeXBlXT1cImNvbmZpZy5hZ2dyZWdhdGlvblwiXG4gICAgW2RhdGFwb2ludHNUYWJsZUl0ZW1zXT1cImRhdGFwb2ludHNUYWJsZUl0ZW1zXCJcbiAgICBbZGVjaW1hbFBsYWNlc109XCJjb25maWcuZGVjaW1hbFBsYWNlc1wiXG4gICAgW2RldmljZXNDb2x1bW5IZWFkZXJzXT1cImRldmljZXNDb2x1bW5IZWFkZXJzXCJcbiAgICBbaGFzTXVsdGlwbGVEYXRhcG9pbnRzXT1cImhhc011bHRpcGxlRGF0YXBvaW50c1wiXG4gICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmckIHwgYXN5bmNcIlxuICAgIFtzZXJpZXNXaXRob3V0UGVybWlzc2lvblRvUmVhZENvdW50XT1cInNlcmllc1dpdGhvdXRQZXJtaXNzaW9uVG9SZWFkPy5sZW5ndGhcIlxuICAgIChpc1Njcm9sbGluZyk9XCJvblNjcm9sbGluZygkZXZlbnQpXCJcbiAgPjwvYzh5LWRhdGFwb2ludHMtdGFibGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, EventEmitter, inject, Component, ChangeDetectionStrategy, Input, Output, Pipe, ViewChild, Directive, signal } from '@angular/core';
|
|
2
|
+
import { Injectable, EventEmitter, inject, Component, ChangeDetectionStrategy, Input, Output, Pipe, ViewChild, Directive, signal, Optional } from '@angular/core';
|
|
3
3
|
import * as i3 from '@angular/forms';
|
|
4
4
|
import { ControlContainer, ReactiveFormsModule, FormControl, Validators } from '@angular/forms';
|
|
5
5
|
import * as i1$1 from '@c8y/ngx-components';
|
|
@@ -1722,7 +1722,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
1722
1722
|
}] } });
|
|
1723
1723
|
|
|
1724
1724
|
class DatapointsTableViewWidgetComponent {
|
|
1725
|
-
constructor(alertService, dataFetchingService, datapointsTableConfigService, datapointsTableViewService, formBuilder, translateService, widgetGlobalAutoRefresh) {
|
|
1725
|
+
constructor(alertService, dataFetchingService, datapointsTableConfigService, datapointsTableViewService, formBuilder, translateService, widgetGlobalAutoRefresh, dashboardContextComponent) {
|
|
1726
1726
|
this.alertService = alertService;
|
|
1727
1727
|
this.dataFetchingService = dataFetchingService;
|
|
1728
1728
|
this.datapointsTableConfigService = datapointsTableConfigService;
|
|
@@ -1730,6 +1730,7 @@ class DatapointsTableViewWidgetComponent {
|
|
|
1730
1730
|
this.formBuilder = formBuilder;
|
|
1731
1731
|
this.translateService = translateService;
|
|
1732
1732
|
this.widgetGlobalAutoRefresh = widgetGlobalAutoRefresh;
|
|
1733
|
+
this.dashboardContextComponent = dashboardContextComponent;
|
|
1733
1734
|
/**
|
|
1734
1735
|
* Represents the data points where __active property is set to true.
|
|
1735
1736
|
*/
|
|
@@ -1910,6 +1911,9 @@ class DatapointsTableViewWidgetComponent {
|
|
|
1910
1911
|
async prepareTableData(roundSeconds = true) {
|
|
1911
1912
|
this.isLoading$.next(true);
|
|
1912
1913
|
if (this.isInitialRequest) {
|
|
1914
|
+
if (this.config.datapoints?.length) {
|
|
1915
|
+
this.config.datapoints.forEach(datapoint => this.assignContextFromContextDashboard(datapoint));
|
|
1916
|
+
}
|
|
1913
1917
|
this.activeDatapoints = this.datapointsTableViewService.filterOutInactiveDatapoints(this.config.datapoints);
|
|
1914
1918
|
this.hasMultipleDatapoints = this.datapointsTableViewService.hasMultipleDatapoints(this.activeDatapoints);
|
|
1915
1919
|
this.devicesColumnHeaders = this.datapointsTableViewService.getColumnHeaders(this.activeDatapoints);
|
|
@@ -2005,7 +2009,17 @@ class DatapointsTableViewWidgetComponent {
|
|
|
2005
2009
|
.pipe(globalAutoRefreshLoading(this.widgetGlobalAutoRefresh), takeUntil(this.destroy$))
|
|
2006
2010
|
.subscribe();
|
|
2007
2011
|
}
|
|
2008
|
-
|
|
2012
|
+
assignContextFromContextDashboard(datapoint) {
|
|
2013
|
+
if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {
|
|
2014
|
+
return;
|
|
2015
|
+
}
|
|
2016
|
+
const context = this.dashboardContextComponent?.context;
|
|
2017
|
+
if (context?.id) {
|
|
2018
|
+
const { name, id } = context;
|
|
2019
|
+
datapoint.__target = { name, id };
|
|
2020
|
+
}
|
|
2021
|
+
}
|
|
2022
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableViewWidgetComponent, deps: [{ token: i1$1.AlertService }, { token: i2$1.DataFetchingService }, { token: DatapointsTableService }, { token: DatapointsTableViewService }, { token: i3.FormBuilder }, { token: i1$2.TranslateService }, { token: i1$1.WidgetGlobalAutoRefreshService }, { token: i4.ContextDashboardComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2009
2023
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DatapointsTableViewWidgetComponent, isStandalone: true, selector: "c8y-datapoints-table-view", inputs: { config: "config" }, host: { classAttribute: "d-col fit-h" }, ngImport: i0, template: "<div class=\"d-flex gap-16 p-l-16 p-r-16 flex-wrap\">\n <ng-container *ngIf=\"config.displayDateSelection\">\n <form [formGroup]=\"formGroup\">\n <c8y-date-range-picker\n class=\"d-contents\"\n [isEmittingDateChange]=\"true\"\n [showLabel]=\"true\"\n (updatedDate)=\"onDateChange($event)\"\n ></c8y-date-range-picker>\n </form>\n </ng-container>\n <!-- TODO: temporarily commented out, will be enabled when graft of MTM-59689 is merged: https://github.com/Cumulocity-IoT/cumulocity-ui/pull/8028 -->\n <!-- <c8y-datapoints-export-selector\n class=\"d-contents\"\n [containerClass]=\"containerClass\"\n [exportConfig]=\"exportConfig\"\n (isOpen)=\"onExportModalOpen($event)\"\n ></c8y-datapoints-export-selector> -->\n <!-- TODO: below div is just a temp fix, it will be removed when MTM-59689 is merged: https://github.com/Cumulocity-IoT/cumulocity-ui/pull/8028 -->\n <div class=\"input-group p-t-4 p-b-4 max-width-fit m-l-auto\"></div>\n <ng-container *ngIf=\"config.datapoints.length > 0\">\n <c8y-datapoints-reload\n class=\"d-contents\"\n [isAutoRefreshEnabled]=\"config.isAutoRefreshEnabled\"\n [refreshInterval]=\"config.refreshInterval\"\n [isRefreshDisabled]=\"isRefreshDisabled\"\n [isLoading]=\"isLoading$\"\n [isScrolling]=\"isScrolling()\"\n [isExportModalOpen]=\"isExportModalOpen\"\n [widgetInstanceGlobalAutoRefreshContext]=\"config.widgetInstanceGlobalAutoRefreshContext\"\n (onCountdownEnded)=\"onCountdownEnded()\"\n ></c8y-datapoints-reload>\n </ng-container>\n</div>\n<ng-container *ngIf=\"devicesColumnHeaders\">\n <c8y-datapoints-table\n [aggregationType]=\"config.aggregation\"\n [datapointsTableItems]=\"datapointsTableItems\"\n [decimalPlaces]=\"config.decimalPlaces\"\n [devicesColumnHeaders]=\"devicesColumnHeaders\"\n [hasMultipleDatapoints]=\"hasMultipleDatapoints\"\n [isLoading]=\"isLoading$ | async\"\n [seriesWithoutPermissionToReadCount]=\"seriesWithoutPermissionToRead?.length\"\n (isScrolling)=\"onScrolling($event)\"\n ></c8y-datapoints-table>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule$1 }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "component", type:
|
|
2010
2024
|
// TODO: temporarily commented out, will be enabled when MTM-59689 is integrated
|
|
2011
2025
|
// DatapointsExportSelectorComponent,
|
|
@@ -2022,7 +2036,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
2022
2036
|
DateRangePickerComponent,
|
|
2023
2037
|
ReactiveFormsModule
|
|
2024
2038
|
], template: "<div class=\"d-flex gap-16 p-l-16 p-r-16 flex-wrap\">\n <ng-container *ngIf=\"config.displayDateSelection\">\n <form [formGroup]=\"formGroup\">\n <c8y-date-range-picker\n class=\"d-contents\"\n [isEmittingDateChange]=\"true\"\n [showLabel]=\"true\"\n (updatedDate)=\"onDateChange($event)\"\n ></c8y-date-range-picker>\n </form>\n </ng-container>\n <!-- TODO: temporarily commented out, will be enabled when graft of MTM-59689 is merged: https://github.com/Cumulocity-IoT/cumulocity-ui/pull/8028 -->\n <!-- <c8y-datapoints-export-selector\n class=\"d-contents\"\n [containerClass]=\"containerClass\"\n [exportConfig]=\"exportConfig\"\n (isOpen)=\"onExportModalOpen($event)\"\n ></c8y-datapoints-export-selector> -->\n <!-- TODO: below div is just a temp fix, it will be removed when MTM-59689 is merged: https://github.com/Cumulocity-IoT/cumulocity-ui/pull/8028 -->\n <div class=\"input-group p-t-4 p-b-4 max-width-fit m-l-auto\"></div>\n <ng-container *ngIf=\"config.datapoints.length > 0\">\n <c8y-datapoints-reload\n class=\"d-contents\"\n [isAutoRefreshEnabled]=\"config.isAutoRefreshEnabled\"\n [refreshInterval]=\"config.refreshInterval\"\n [isRefreshDisabled]=\"isRefreshDisabled\"\n [isLoading]=\"isLoading$\"\n [isScrolling]=\"isScrolling()\"\n [isExportModalOpen]=\"isExportModalOpen\"\n [widgetInstanceGlobalAutoRefreshContext]=\"config.widgetInstanceGlobalAutoRefreshContext\"\n (onCountdownEnded)=\"onCountdownEnded()\"\n ></c8y-datapoints-reload>\n </ng-container>\n</div>\n<ng-container *ngIf=\"devicesColumnHeaders\">\n <c8y-datapoints-table\n [aggregationType]=\"config.aggregation\"\n [datapointsTableItems]=\"datapointsTableItems\"\n [decimalPlaces]=\"config.decimalPlaces\"\n [devicesColumnHeaders]=\"devicesColumnHeaders\"\n [hasMultipleDatapoints]=\"hasMultipleDatapoints\"\n [isLoading]=\"isLoading$ | async\"\n [seriesWithoutPermissionToReadCount]=\"seriesWithoutPermissionToRead?.length\"\n (isScrolling)=\"onScrolling($event)\"\n ></c8y-datapoints-table>\n</ng-container>\n" }]
|
|
2025
|
-
}], ctorParameters: () => [{ type: i1$1.AlertService }, { type: i2$1.DataFetchingService }, { type: DatapointsTableService }, { type: DatapointsTableViewService }, { type: i3.FormBuilder }, { type: i1$2.TranslateService }, { type: i1$1.WidgetGlobalAutoRefreshService }
|
|
2039
|
+
}], ctorParameters: () => [{ type: i1$1.AlertService }, { type: i2$1.DataFetchingService }, { type: DatapointsTableService }, { type: DatapointsTableViewService }, { type: i3.FormBuilder }, { type: i1$2.TranslateService }, { type: i1$1.WidgetGlobalAutoRefreshService }, { type: i4.ContextDashboardComponent, decorators: [{
|
|
2040
|
+
type: Optional
|
|
2041
|
+
}] }], propDecorators: { config: [{
|
|
2026
2042
|
type: Input
|
|
2027
2043
|
}] } });
|
|
2028
2044
|
|