@c8y/ngx-components 1021.77.0 → 1021.78.2
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/bookmarks/bookmarks.component.d.ts +4 -6
- package/bookmarks/bookmarks.component.d.ts.map +1 -1
- package/datapoint-explorer/view/datapoint-explorer.component.d.ts.map +1 -1
- package/echart/charts.component.d.ts.map +1 -1
- package/echart/models/datapoints-graph-widget.model.d.ts +2 -0
- package/echart/models/datapoints-graph-widget.model.d.ts.map +1 -1
- package/echart/services/echarts-options.service.d.ts.map +1 -1
- package/esm2022/bookmarks/bookmarks.component.mjs +15 -18
- package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +6 -5
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.mjs +3 -3
- package/esm2022/echart/charts.component.mjs +5 -3
- package/esm2022/echart/models/datapoints-graph-widget.model.mjs +1 -1
- package/esm2022/echart/services/echarts-options.service.mjs +5 -5
- package/esm2022/operations/bulk-operations-service/bulk-operations.service.mjs +21 -2
- package/esm2022/operations/bulk-single-operations-list/bulk-single-operations-list.module.mjs +9 -7
- package/esm2022/operations/bulk-single-operations-list/single-operation-item.component.mjs +4 -1
- package/esm2022/operations/bulk-single-operations-list/single-operations-list.component.mjs +94 -20
- package/esm2022/operations/grid-columns/c8y-ngx-components-operations-grid-columns.mjs +5 -0
- package/esm2022/operations/grid-columns/creation-time.cell-renderer.component.mjs +28 -0
- package/esm2022/operations/grid-columns/creation-time.grid-column.mjs +14 -0
- package/esm2022/operations/grid-columns/device.cell-renderer.component.mjs +50 -0
- package/esm2022/operations/grid-columns/device.grid-column.mjs +14 -0
- package/esm2022/operations/grid-columns/failure-reason.cell-renderer.component.mjs +54 -0
- package/esm2022/operations/grid-columns/failure-reason.grid-column.mjs +14 -0
- package/esm2022/operations/grid-columns/index.mjs +9 -0
- package/esm2022/operations/grid-columns/status.cell-renderer.component.mjs +43 -0
- package/esm2022/operations/grid-columns/status.grid-column.mjs +15 -0
- package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.mjs +5 -4
- package/fesm2022/c8y-ngx-components-bookmarks.mjs +13 -14
- package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +5 -4
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +2 -2
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +8 -6
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs +20 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +102 -21
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +214 -0
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +4 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/operations/bulk-operations-service/bulk-operations.service.d.ts +5 -3
- package/operations/bulk-operations-service/bulk-operations.service.d.ts.map +1 -1
- package/operations/bulk-single-operations-list/bulk-single-operations-list.module.d.ts +10 -8
- package/operations/bulk-single-operations-list/bulk-single-operations-list.module.d.ts.map +1 -1
- package/operations/bulk-single-operations-list/single-operation-item.component.d.ts +3 -0
- package/operations/bulk-single-operations-list/single-operation-item.component.d.ts.map +1 -1
- package/operations/bulk-single-operations-list/single-operations-list.component.d.ts +18 -4
- package/operations/bulk-single-operations-list/single-operations-list.component.d.ts.map +1 -1
- package/operations/grid-columns/c8y-ngx-components-operations-grid-columns.d.ts.map +1 -0
- package/operations/grid-columns/creation-time.cell-renderer.component.d.ts +9 -0
- package/operations/grid-columns/creation-time.cell-renderer.component.d.ts.map +1 -0
- package/operations/grid-columns/creation-time.grid-column.d.ts +5 -0
- package/operations/grid-columns/creation-time.grid-column.d.ts.map +1 -0
- package/operations/grid-columns/device.cell-renderer.component.d.ts +14 -0
- package/operations/grid-columns/device.cell-renderer.component.d.ts.map +1 -0
- package/operations/grid-columns/device.grid-column.d.ts +5 -0
- package/operations/grid-columns/device.grid-column.d.ts.map +1 -0
- package/operations/grid-columns/failure-reason.cell-renderer.component.d.ts +9 -0
- package/operations/grid-columns/failure-reason.cell-renderer.component.d.ts.map +1 -0
- package/operations/grid-columns/failure-reason.grid-column.d.ts +5 -0
- package/operations/grid-columns/failure-reason.grid-column.d.ts.map +1 -0
- package/operations/grid-columns/index.d.ts +9 -0
- package/operations/grid-columns/index.d.ts.map +1 -0
- package/operations/grid-columns/status.cell-renderer.component.d.ts +11 -0
- package/operations/grid-columns/status.cell-renderer.component.d.ts.map +1 -0
- package/operations/grid-columns/status.grid-column.d.ts +5 -0
- package/operations/grid-columns/status.grid-column.d.ts.map +1 -0
- package/package.json +1 -1
- package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts.map +1 -1
|
@@ -4,7 +4,7 @@ import { AlarmEventSelectorModule } from '@c8y/ngx-components/alarm-event-select
|
|
|
4
4
|
import { TimeContextComponent } from '@c8y/ngx-components/time-context';
|
|
5
5
|
import { DatapointSelectorModule } from '@c8y/ngx-components/datapoint-selector';
|
|
6
6
|
import { ChartAlarmsService, ChartEventsService, ChartsComponent } from '@c8y/ngx-components/echart';
|
|
7
|
-
import { FormBuilder } from '@angular/forms';
|
|
7
|
+
import { FormBuilder, Validators } from '@angular/forms';
|
|
8
8
|
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
|
|
9
9
|
import { TooltipModule } from 'ngx-bootstrap/tooltip';
|
|
10
10
|
import { PopoverModule } from 'ngx-bootstrap/popover';
|
|
@@ -250,11 +250,12 @@ export class DatapointExplorerComponent {
|
|
|
250
250
|
showSlider: [true, []],
|
|
251
251
|
displayDateSelection: [false, []],
|
|
252
252
|
yAxisSplitLines: [false],
|
|
253
|
-
xAxisSplitLines: [false]
|
|
253
|
+
xAxisSplitLines: [false],
|
|
254
|
+
numberOfDecimalPlaces: [2, [Validators.required, Validators.min(0), Validators.max(10)]]
|
|
254
255
|
});
|
|
255
256
|
}
|
|
256
257
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointExplorerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
257
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointExplorerComponent, isStandalone: true, selector: "c8y-datapoint-explorer", providers: [ChartEventsService, ChartAlarmsService], viewQueries: [{ propertyName: "chart", first: true, predicate: ["chart"], descendants: true }], ngImport: i0, template: "<c8y-title>{{ 'Data explorer' | translate }}</c8y-title>\n\n<c8y-time-context\n (contextChange)=\"onTimeContextChange($event)\"\n [changedDateContext]=\"timeProps\"\n></c8y-time-context>\n\n<c8y-action-bar-item [placement]=\"'left'\">\n <c8y-workspace-config\n [updatedConfig]=\"config\"\n (onConfigurationChange)=\"onConfigurationChange($event)\"\n ></c8y-workspace-config>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item placement=\"right\">\n <c8y-datapoints-export-selector [exportConfig]=\"exportConfig\"></c8y-datapoints-export-selector>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Send as widget to report' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"sendAsWidgetToReport()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Send as widget to report' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Create a new report with widget' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"createNewReportWithWidget()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Create a new report with widget' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-grid grid_col--auto-360 gap-24\">\n <div class=\"d-col gap-16\">\n <c8y-charts\n class=\"flex-grow data-point-explorer\"\n #chart\n [config]=\"config\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"onSliderZoom($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n ></c8y-charts>\n <form\n class=\"m-l-48 m-r-48\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"d-grid-md grid__col--4-4-4 gap-16\">\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Axis' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y-axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X-axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge matching data points into single axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching data points into single axis</span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n [tooltip]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Force merge all data points into single axis' | translate\"\n >\n <input\n name=\"forceMergeDatapoints\"\n type=\"checkbox\"\n formControlName=\"forceMergeDatapoints\"\n />\n <span></span>\n <span translate>Force merge all data points into single axis</span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n [tooltip]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Alarms & events' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line when alarm occurs' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when alarm or event occurs' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span>\n {{\n 'Show icon when triggered`When alarms and events occur the icon will be shown`'\n | translate\n }}\n </span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Chart' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on Y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n </fieldset>\n </div>\n </form>\n </div>\n <div class=\"card inner-scroll bg-level-1\">\n <form\n class=\"bg-inherit\"\n [formGroup]=\"formGroup\"\n >\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"0\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"{ contextAsset: contextAsset }\"\n formControlName=\"datapoints\"\n [allowDragAndDrop]=\"true\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DatapointSelectorModule }, { kind: "component", type: i4.DatapointSelectionListComponent, selector: "c8y-datapoint-selection-list", inputs: ["actions", "allowDragAndDrop", "config", "defaultFormOptions", "maxActiveCount", "minActiveCount", "resolveContext", "listTitle"], outputs: ["isValid", "change"] }, { kind: "ngmodule", type: AlarmEventSelectorModule }, { kind: "component", type: i5.AlarmEventSelectionListComponent, selector: "c8y-alarm-event-selection-list", inputs: ["timelineType", "canRemove", "canEdit", "canDragAndDrop", "title", "addButtonLabel", "hideSource", "inline", "activeToggleAsSwitch", "omitProperties", "datapoints", "config"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.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"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: TimeContextComponent, selector: "c8y-time-context", inputs: ["changedDateContext", "controlsAvailable", "context"], outputs: ["contextChange"] }, { kind: "component", type: ChartsComponent, selector: "c8y-charts", inputs: ["config", "alerts"], outputs: ["configChangeOnZoomOut", "timeRangeChangeOnRealtime", "datapointOutOfSync", "updateAlarmsAndEvents", "isMarkedAreaEnabled"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: A11yModule }, { kind: "component", type: DatapointsExportSelectorComponent, selector: "c8y-datapoints-export-selector", inputs: ["containerClass", "exportConfig"], outputs: ["isOpen"] }, { kind: "component", type: WorkspaceConfigComponent, selector: "c8y-workspace-config", inputs: ["updatedConfig"], outputs: ["onConfigurationChange"] }] }); }
|
|
258
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatapointExplorerComponent, isStandalone: true, selector: "c8y-datapoint-explorer", providers: [ChartEventsService, ChartAlarmsService], viewQueries: [{ propertyName: "chart", first: true, predicate: ["chart"], descendants: true }], ngImport: i0, template: "<c8y-title>{{ 'Data explorer' | translate }}</c8y-title>\n\n<c8y-time-context\n (contextChange)=\"onTimeContextChange($event)\"\n [changedDateContext]=\"timeProps\"\n></c8y-time-context>\n\n<c8y-action-bar-item [placement]=\"'left'\">\n <c8y-workspace-config\n [updatedConfig]=\"config\"\n (onConfigurationChange)=\"onConfigurationChange($event)\"\n ></c8y-workspace-config>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item placement=\"right\">\n <c8y-datapoints-export-selector [exportConfig]=\"exportConfig\"></c8y-datapoints-export-selector>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Send as widget to report' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"sendAsWidgetToReport()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Send as widget to report' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Create a new report with widget' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"createNewReportWithWidget()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Create a new report with widget' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-grid grid_col--auto-360 gap-24\">\n <div class=\"d-col gap-16\">\n <c8y-charts\n class=\"flex-grow data-point-explorer\"\n #chart\n [config]=\"config\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"onSliderZoom($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n ></c8y-charts>\n <form\n class=\"m-l-48 m-r-48\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"d-grid-md grid__col--4-4-4 gap-16\">\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Axis' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y-axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X-axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge matching data points into single axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching data points into single axis</span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n [tooltip]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Force merge all data points into single axis' | translate\"\n >\n <input\n name=\"forceMergeDatapoints\"\n type=\"checkbox\"\n formControlName=\"forceMergeDatapoints\"\n />\n <span></span>\n <span translate>Force merge all data points into single axis</span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n [tooltip]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Alarms & events' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line when alarm occurs' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when alarm or event occurs' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span>\n {{\n 'Show icon when triggered`When alarms and events occur the icon will be shown`'\n | translate\n }}\n </span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Chart' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on Y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n </fieldset>\n </div>\n </form>\n </div>\n <div class=\"card inner-scroll bg-level-1\">\n <form\n class=\"bg-inherit\"\n [formGroup]=\"formGroup\"\n >\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"0\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"{ contextAsset: contextAsset }\"\n formControlName=\"datapoints\"\n [allowDragAndDrop]=\"true\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <label\n [title]=\"'Number of decimal places' | translate\"\n translate\n >\n Number of decimal places\n </label>\n <input\n class=\"form-control\"\n name=\"numberOfDecimalPlaces\"\n type=\"number\"\n formControlName=\"numberOfDecimalPlaces\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 1 }\"\n />\n <c8y-messages\n [show]=\"\n formGroup.controls?.numberOfDecimalPlaces?.touched &&\n formGroup?.controls?.numberOfDecimalPlaces?.errors\n \"\n ></c8y-messages>\n </form>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i1.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DatapointSelectorModule }, { kind: "component", type: i4.DatapointSelectionListComponent, selector: "c8y-datapoint-selection-list", inputs: ["actions", "allowDragAndDrop", "config", "defaultFormOptions", "maxActiveCount", "minActiveCount", "resolveContext", "listTitle"], outputs: ["isValid", "change"] }, { kind: "ngmodule", type: AlarmEventSelectorModule }, { kind: "component", type: i5.AlarmEventSelectionListComponent, selector: "c8y-alarm-event-selection-list", inputs: ["timelineType", "canRemove", "canEdit", "canDragAndDrop", "title", "addButtonLabel", "hideSource", "inline", "activeToggleAsSwitch", "omitProperties", "datapoints", "config"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.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"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: TimeContextComponent, selector: "c8y-time-context", inputs: ["changedDateContext", "controlsAvailable", "context"], outputs: ["contextChange"] }, { kind: "component", type: ChartsComponent, selector: "c8y-charts", inputs: ["config", "alerts"], outputs: ["configChangeOnZoomOut", "timeRangeChangeOnRealtime", "datapointOutOfSync", "updateAlarmsAndEvents", "isMarkedAreaEnabled"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: A11yModule }, { kind: "component", type: DatapointsExportSelectorComponent, selector: "c8y-datapoints-export-selector", inputs: ["containerClass", "exportConfig"], outputs: ["isOpen"] }, { kind: "component", type: WorkspaceConfigComponent, selector: "c8y-workspace-config", inputs: ["updatedConfig"], outputs: ["onConfigurationChange"] }] }); }
|
|
258
259
|
}
|
|
259
260
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatapointExplorerComponent, decorators: [{
|
|
260
261
|
type: Component,
|
|
@@ -272,9 +273,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
272
273
|
A11yModule,
|
|
273
274
|
DatapointsExportSelectorComponent,
|
|
274
275
|
WorkspaceConfigComponent
|
|
275
|
-
], providers: [ChartEventsService, ChartAlarmsService], template: "<c8y-title>{{ 'Data explorer' | translate }}</c8y-title>\n\n<c8y-time-context\n (contextChange)=\"onTimeContextChange($event)\"\n [changedDateContext]=\"timeProps\"\n></c8y-time-context>\n\n<c8y-action-bar-item [placement]=\"'left'\">\n <c8y-workspace-config\n [updatedConfig]=\"config\"\n (onConfigurationChange)=\"onConfigurationChange($event)\"\n ></c8y-workspace-config>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item placement=\"right\">\n <c8y-datapoints-export-selector [exportConfig]=\"exportConfig\"></c8y-datapoints-export-selector>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Send as widget to report' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"sendAsWidgetToReport()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Send as widget to report' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Create a new report with widget' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"createNewReportWithWidget()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Create a new report with widget' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-grid grid_col--auto-360 gap-24\">\n <div class=\"d-col gap-16\">\n <c8y-charts\n class=\"flex-grow data-point-explorer\"\n #chart\n [config]=\"config\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"onSliderZoom($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n ></c8y-charts>\n <form\n class=\"m-l-48 m-r-48\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"d-grid-md grid__col--4-4-4 gap-16\">\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Axis' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y-axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X-axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge matching data points into single axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching data points into single axis</span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n [tooltip]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Force merge all data points into single axis' | translate\"\n >\n <input\n name=\"forceMergeDatapoints\"\n type=\"checkbox\"\n formControlName=\"forceMergeDatapoints\"\n />\n <span></span>\n <span translate>Force merge all data points into single axis</span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n [tooltip]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Alarms & events' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line when alarm occurs' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when alarm or event occurs' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span>\n {{\n 'Show icon when triggered`When alarms and events occur the icon will be shown`'\n | translate\n }}\n </span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Chart' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on Y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n </fieldset>\n </div>\n </form>\n </div>\n <div class=\"card inner-scroll bg-level-1\">\n <form\n class=\"bg-inherit\"\n [formGroup]=\"formGroup\"\n >\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"0\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"{ contextAsset: contextAsset }\"\n formControlName=\"datapoints\"\n [allowDragAndDrop]=\"true\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n </form>\n </div>\n</div>\n" }]
|
|
276
|
+
], providers: [ChartEventsService, ChartAlarmsService], template: "<c8y-title>{{ 'Data explorer' | translate }}</c8y-title>\n\n<c8y-time-context\n (contextChange)=\"onTimeContextChange($event)\"\n [changedDateContext]=\"timeProps\"\n></c8y-time-context>\n\n<c8y-action-bar-item [placement]=\"'left'\">\n <c8y-workspace-config\n [updatedConfig]=\"config\"\n (onConfigurationChange)=\"onConfigurationChange($event)\"\n ></c8y-workspace-config>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item placement=\"right\">\n <c8y-datapoints-export-selector [exportConfig]=\"exportConfig\"></c8y-datapoints-export-selector>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Send as widget to report' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"sendAsWidgetToReport()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Send as widget to report' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n>\n <button\n title=\"{{ 'Create a new report with widget' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"createNewReportWithWidget()\"\n [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n >\n <i c8yIcon=\"c8y-reports\"></i>\n <span>{{ 'Create a new report with widget' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-grid grid_col--auto-360 gap-24\">\n <div class=\"d-col gap-16\">\n <c8y-charts\n class=\"flex-grow data-point-explorer\"\n #chart\n [config]=\"config\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"onSliderZoom($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n ></c8y-charts>\n <form\n class=\"m-l-48 m-r-48\"\n [formGroup]=\"formGroup\"\n >\n <div class=\"d-grid-md grid__col--4-4-4 gap-16\">\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Axis' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y-axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X-axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge matching data points into single axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching data points into single axis</span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n [tooltip]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Force merge all data points into single axis' | translate\"\n >\n <input\n name=\"forceMergeDatapoints\"\n type=\"checkbox\"\n formControlName=\"forceMergeDatapoints\"\n />\n <span></span>\n <span translate>Force merge all data points into single axis</span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n [tooltip]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Alarms & events' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line when alarm occurs' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when alarm or event occurs' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span>\n {{\n 'Show icon when triggered`When alarms and events occur the icon will be shown`'\n | translate\n }}\n </span>\n <button\n class=\"btn-dot m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n </fieldset>\n <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n <legend>{{ 'Chart' | translate }}</legend>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on Y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n </fieldset>\n </div>\n </form>\n </div>\n <div class=\"card inner-scroll bg-level-1\">\n <form\n class=\"bg-inherit\"\n [formGroup]=\"formGroup\"\n >\n <c8y-datapoint-selection-list\n class=\"bg-inherit separator-top d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"0\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"{ contextAsset: contextAsset }\"\n formControlName=\"datapoints\"\n [allowDragAndDrop]=\"true\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <label\n [title]=\"'Number of decimal places' | translate\"\n translate\n >\n Number of decimal places\n </label>\n <input\n class=\"form-control\"\n name=\"numberOfDecimalPlaces\"\n type=\"number\"\n formControlName=\"numberOfDecimalPlaces\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 1 }\"\n />\n <c8y-messages\n [show]=\"\n formGroup.controls?.numberOfDecimalPlaces?.touched &&\n formGroup?.controls?.numberOfDecimalPlaces?.errors\n \"\n ></c8y-messages>\n </form>\n </div>\n</div>\n" }]
|
|
276
277
|
}], ctorParameters: () => [], propDecorators: { chart: [{
|
|
277
278
|
type: ViewChild,
|
|
278
279
|
args: ['chart']
|
|
279
280
|
}] } });
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LWV4cGxvcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2RhdGFwb2ludC1leHBsb3Jlci92aWV3L2RhdGFwb2ludC1leHBsb3Jlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9kYXRhcG9pbnQtZXhwbG9yZXIvdmlldy9kYXRhcG9pbnQtZXhwbG9yZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFVBQVUsRUFFVixXQUFXLEVBQ1gsT0FBTyxFQUNQLFdBQVcsRUFDWCxXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBRUwsdUJBQXVCLEVBRXhCLE1BQU0sd0NBQXdDLENBQUM7QUFTaEQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNoQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJB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QUNqQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDeEIsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBeFFVLDBCQUEwQjttR0FBMUIsMEJBQTBCLHFFQUYxQixDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLDBIQ3ZFckQsa21UQW9SQSwyQ0QzTkksVUFBVSwybERBQ1YsWUFBWSw4QkFDWix1QkFBdUIscVRBQ3ZCLHdCQUF3QixxVUFDeEIsYUFBYSxpa0JBQ2IsYUFBYSwrQkFDYixvQkFBb0IseUpBQ3BCLGVBQWUsMk5BQ2YsZ0JBQWdCLDhCQUNoQixXQUFXLDhCQUNYLFVBQVUsK0JBQ1YsaUNBQWlDLDRJQUNqQyx3QkFBd0I7OzRGQUlmLDBCQUEwQjtrQkFyQnRDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBRXRCLElBQUksV0FDUDt3QkFDUCxVQUFVO3dCQUNWLFlBQVk7d0JBQ1osdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLFVBQVU7d0JBQ1YsaUNBQWlDO3dCQUNqQyx3QkFBd0I7cUJBQ3pCLGFBQ1UsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQzt3REFHL0IsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBpbmplY3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBDb21tb25Nb2R1bGUsXG4gIENvbnRleHRSb3V0ZVNlcnZpY2UsXG4gIENvcmVNb2R1bGUsXG4gIER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3IsXG4gIEZvcm1zTW9kdWxlLFxuICBnZXR0ZXh0LFxuICBQZXJtaXNzaW9ucyxcbiAgVmlld0NvbnRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbGFybUV2ZW50U2VsZWN0b3JNb2R1bGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtLWV2ZW50LXNlbGVjdG9yJztcbmltcG9ydCB7IFRpbWVDb250ZXh0Q29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy90aW1lLWNvbnRleHQnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db25maWcsXG4gIERhdGFwb2ludFNlbGVjdG9yTW9kdWxlLFxuICBLUElEZXRhaWxzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50LXNlbGVjdG9yJztcbmltcG9ydCB7XG4gIEFsYXJtRGV0YWlsc0V4dGVuZGVkLFxuICBBbGFybU9yRXZlbnRFeHRlbmRlZCxcbiAgRGF0YXBvaW50c0dyYXBoS1BJRGV0YWlscyxcbiAgRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnLFxuICBFdmVudERldGFpbHNFeHRlbmRlZCxcbiAgVGltZUNvbnRleHRQcm9wc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2VjaGFydC9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgQ2hhcnRBbGFybXNTZXJ2aWNlLFxuICBDaGFydEV2ZW50c1NlcnZpY2UsXG4gIENoYXJ0c0NvbXBvbmVudFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2VjaGFydCc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZHJvcGRvd24nO1xuaW1wb3J0IHsgYWdncmVnYXRpb25UeXBlLCBJSWRlbnRpZmllZCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgUG9wb3Zlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvcG9wb3Zlcic7XG5pbXBvcnQgeyBJbnRlcnZhbCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaW50ZXJ2YWwtcGlja2VyJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgU2VuZEFzV2lkZ2V0VG9SZXBvcnRNb2RhbCB9IGZyb20gJy4vc2VuZC1hcy13aWRnZXQtdG8tcmVwb3J0LW1vZGFsL3NlbmQtYXMtd2lkZ2V0LXRvLXJlcG9ydC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2NvbnRleHQtZGFzaGJvYXJkJztcbmltcG9ydCB7XG4gIERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckNvbXBvbmVudCxcbiAgRXhwb3J0Q29uZmlnXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgQ3JlYXRlTmV3UmVwb3J0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2NyZWF0ZS1uZXctcmVwb3J0LW1vZGFsL2NyZWF0ZS1uZXctcmVwb3J0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhcG9pbnQtZXhwbG9yZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXb3Jrc3BhY2VDb25maWdDb21wb25lbnQgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24vd29ya3NwYWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhdGFwb2ludC1leHBsb3JlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhcG9pbnQtZXhwbG9yZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29yZU1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRGF0YXBvaW50U2VsZWN0b3JNb2R1bGUsXG4gICAgQWxhcm1FdmVudFNlbGVjdG9yTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgUG9wb3Zlck1vZHVsZSxcbiAgICBUaW1lQ29udGV4dENvbXBvbmVudCxcbiAgICBDaGFydHNDb21wb25lbnQsXG4gICAgQnNEcm9wZG93bk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBBMTF5TW9kdWxlLFxuICAgIERhdGFwb2ludHNFeHBvcnRTZWxlY3RvckNvbXBvbmVudCxcbiAgICBXb3Jrc3BhY2VDb25maWdDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQ2hhcnRFdmVudHNTZXJ2aWNlLCBDaGFydEFsYXJtc1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludEV4cGxvcmVyQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgnY2hhcnQnKSBjaGFydDogRWxlbWVudFJlZjtcbiAgY29uZmlnOiBEYXRhcG9pbnRzR3JhcGhXaWRnZXRDb25maWcgPSB7IGRhdGFwb2ludHM6IFtdLCBhbGFybXNFdmVudHNDb25maWdzOiBbXSB9O1xuICBleHBvcnRDb25maWc6IEV4cG9ydENvbmZpZztcbiAgYWxlcnRzOiBEeW5hbWljQ29tcG9uZW50QWxlcnRBZ2dyZWdhdG9yIHwgdW5kZWZpbmVkO1xuICBhbGFybXM6IEFsYXJtRGV0YWlsc0V4dGVuZGVkW10gPSBbXTtcbiAgZXZlbnRzOiBFdmVudERldGFpbHNFeHRlbmRlZFtdID0gW107XG4gIGRhdGFwb2ludHNPdXRPZlN5bmMgPSBuZXcgTWFwPERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMsIGJvb2xlYW4+KCk7XG4gIGNvbnRleHRBc3NldDogSUlkZW50aWZpZWQ7XG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBoYXNBdExlYXN0T25lRGF0YXBvaW50QWN0aXZlID0gdHJ1ZTtcbiAgaGFzQXRMZWFzdE9uZUFsYXJtQWN0aXZlID0gdHJ1ZTtcbiAgaXNNYXJrZWRBcmVhRW5hYmxlZCA9IGZhbHNlO1xuICBhbGFybXNPckV2ZW50c0hhdmVOb01hdGNoaW5nRHBzID0gZmFsc2U7XG4gIGNhbkFkZFJlcG9ydCA9IGZhbHNlO1xuICB0aW1lUHJvcHM6IHtcbiAgICBkYXRlRnJvbTogRGF0ZTtcbiAgICBkYXRlVG86IERhdGU7XG4gICAgaW50ZXJ2YWw/OiBJbnRlcnZhbFsnaWQnXTtcbiAgICByZWFsdGltZT86IGJvb2xlYW47XG4gICAgYWdncmVnYXRpb24/OiBhZ2dyZWdhdGlvblR5cGUgfCBudWxsO1xuICB9O1xuICBkYXRhcG9pbnRTZWxlY3REZWZhdWx0Rm9ybU9wdGlvbnM6IFBhcnRpYWw8RGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db25maWc+ID0ge1xuICAgIHNob3dSYW5nZTogdHJ1ZSxcbiAgICBzaG93Q2hhcnQ6IHRydWVcbiAgfTtcblxuICAjZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFFeHBsb3JlclNlcnZpY2UgPSBpbmplY3QoRGF0YUV4cGxvcmVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0U2VydmljZSA9IGluamVjdChBbGVydFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGJzTW9kYWxTZXJ2aWNlID0gaW5qZWN0KEJzTW9kYWxTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9ucyA9IGluamVjdChQZXJtaXNzaW9ucyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dERhc2hib2FyZFNlcnZpY2UgPSBpbmplY3QoQ29udGV4dERhc2hib2FyZFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0Um91dGVTZXJ2aWNlID0gaW5qZWN0KENvbnRleHRSb3V0ZVNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5pbml0Rm9ybSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0QXNzZXQgPSB0aGlzLmluaXRpYWxpemVDb250ZXh0U291cmNlSWQoKTtcbiAgICB0aGlzLmNoZWNrRm9yTWF0Y2hpbmdEYXRhcG9pbnRzKCk7XG4gICAgdGhpcy5jYW5BZGRSZXBvcnQgPSB0aGlzLnBlcm1pc3Npb25zLmhhc0FueVJvbGUoW1xuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQ1JFQVRFLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9DUkVBVEVcbiAgICBdKTtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoY29uZmlnQ2hhbmdlID0+IHtcbiAgICAgICAgY29uc3QgeyBhbGFybXMsIGV2ZW50cywgLi4uY29uZmlnVmFsdWVzIH0gPSBjb25maWdDaGFuZ2U7XG4gICAgICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgICAgIC4uLmNvbmZpZ1ZhbHVlcyxcbiAgICAgICAgICBhbGFybXNFdmVudHNDb25maWdzOiBbLi4uKGFsYXJtcyB8fCBbXSksIC4uLihldmVudHMgfHwgW10pXVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnVwZGF0ZUV4cG9ydENvbmZpZygpO1xuICAgICAgICB0aGlzLmNoZWNrRm9yTWF0Y2hpbmdEYXRhcG9pbnRzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG9uVGltZUNvbnRleHRDaGFuZ2UodGltZVByb3BzOiBUaW1lQ29udGV4dFByb3BzKTogdm9pZCB7XG4gICAgY29uc3QgcmVhbHRpbWUgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5yZWFsdGltZS52YWx1ZTtcbiAgICBpZiAodGltZVByb3BzLnJlYWx0aW1lICE9PSByZWFsdGltZSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IHJlYWx0aW1lOiB0aW1lUHJvcHMucmVhbHRpbWUgfSk7XG4gICAgfVxuICAgIGlmICh0aW1lUHJvcHMucmVhbHRpbWUpIHtcbiAgICAgIGlmICh0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwgIT09IHRoaXMuZm9ybUdyb3VwLnZhbHVlLmludGVydmFsKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoeyBpbnRlcnZhbDogdGltZVByb3BzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgIGRhdGVGcm9tOiB0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0RnJvbURhdGUsXG4gICAgICBkYXRlVG86IHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGUsXG4gICAgICBpbnRlcnZhbDogdGltZVByb3BzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLFxuICAgICAgYWdncmVnYXRpb246IHRpbWVQcm9wcy5hZ2dyZWdhdGlvbiB8fCBudWxsXG4gICAgfSk7XG4gIH1cblxuICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2UoY29uZmlnOiBEYXRhcG9pbnRzR3JhcGhXaWRnZXRDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoY29uZmlnLmRhdGVGcm9tICYmIGNvbmZpZy5kYXRlVG8pIHtcbiAgICAgIHRoaXMudGltZVByb3BzID0ge1xuICAgICAgICBkYXRlRnJvbTogbmV3IERhdGUoY29uZmlnPy5kYXRlRnJvbSksXG4gICAgICAgIGRhdGVUbzogbmV3IERhdGUoY29uZmlnPy5kYXRlVG8pLFxuICAgICAgICBpbnRlcnZhbDogY29uZmlnPy5pbnRlcnZhbCxcbiAgICAgICAgcmVhbHRpbWU6IGNvbmZpZz8ucmVhbHRpbWUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiBjb25maWc/LnJlYWx0aW1lID8gbnVsbCA6IGNvbmZpZz8uYWdncmVnYXRpb25cbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuYWxhcm1zID0gY29uZmlnLmFsYXJtc0V2ZW50c0NvbmZpZ3MuZmlsdGVyKGFlID0+IGFlLnRpbWVsaW5lVHlwZSA9PT0gJ0FMQVJNJyk7XG4gICAgdGhpcy5ldmVudHMgPSBjb25maWcuYWxhcm1zRXZlbnRzQ29uZmlncy5maWx0ZXIoYWUgPT4gYWUudGltZWxpbmVUeXBlID09PSAnRVZFTlQnKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHsgYWxhcm1zOiB0aGlzLmFsYXJtcywgZXZlbnRzOiB0aGlzLmV2ZW50cywgLi4uY29uZmlnIH0pO1xuICB9XG5cbiAgb25TbGlkZXJab29tKHRpbWVQcm9wczogeyBkYXRlRnJvbTogRGF0ZTsgZGF0ZVRvOiBEYXRlOyBpbnRlcnZhbD86IEludGVydmFsWydpZCddIH0pIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRpbWVQcm9wcyk7XG4gICAgdGhpcy50aW1lUHJvcHMgPSB7IC4uLnRpbWVQcm9wcywgcmVhbHRpbWU6IGZhbHNlIH07XG4gIH1cblxuICB1cGRhdGVUaW1lUmFuZ2VPblJlYWx0aW1lKFxuICAgIHRpbWVSYW5nZTogUGljazxEYXRhcG9pbnRzR3JhcGhXaWRnZXRDb25maWcsICdkYXRlRnJvbScgfCAnZGF0ZVRvJz5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aW1lUmFuZ2UsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIGNyZWF0ZU5ld1JlcG9ydFdpdGhXaWRnZXQoKTogdm9pZCB7XG4gICAgY29uc3QgbW9kYWwgPSB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coQ3JlYXRlTmV3UmVwb3J0TW9kYWxDb21wb25lbnQsIHtcbiAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgICBjbGFzczogJ21vZGFsLXNtJ1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBtb2RhbC5jb250ZW50IGFzIENyZWF0ZU5ld1JlcG9ydE1vZGFsQ29tcG9uZW50O1xuICAgIGNvbnRlbnQucmVzdWx0XG4gICAgICAudGhlbihhc3luYyByZXBvcnQgPT4ge1xuICAgICAgICBjb25zdCByZXBvcnREYXNoYm9hcmQgPSBhd2FpdCB0aGlzLmRhdGFFeHBsb3JlclNlcnZpY2UuZmV0Y2hSZXBvcnREYXNoYm9hcmQocmVwb3J0LmlkKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0ID0gdGhpcy5jcmVhdGVXaWRnZXRDb25maWcoKTtcbiAgICAgICAgcmVwb3J0RGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSB7IFt3aWRnZXQuaWRdOiB3aWRnZXQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUocmVwb3J0RGFzaGJvYXJkKTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdSZXBvcnQgYW5kIHdpZGdldCBjcmVhdGVkLicpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGdldHRleHQoJ0ZhaWxlZCB0byBjcmVhdGUgcmVwb3J0IGFuZCB3aWRnZXQuJykpO1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZTogbW9kYWwgd2FzIGNsb3NlZFxuICAgICAgfSk7XG4gIH1cblxuICBzZW5kQXNXaWRnZXRUb1JlcG9ydCgpOiB2b2lkIHtcbiAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhTZW5kQXNXaWRnZXRUb1JlcG9ydE1vZGFsLCB7XG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxuICAgICAgY2xhc3M6ICdtb2RhbC1zbSdcbiAgICB9KTtcbiAgICBjb25zdCBjb250ZW50ID0gbW9kYWwuY29udGVudCBhcyBTZW5kQXNXaWRnZXRUb1JlcG9ydE1vZGFsO1xuICAgIGNvbnRlbnQucmVzdWx0XG4gICAgICAudGhlbihhc3luYyByZXBvcnRzID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZXBvcnRzID0gT2JqZWN0LmVudHJpZXMocmVwb3J0cykuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlKTtcbiAgICAgICAgY29uc3QgcmVwb3J0UHJvbWlzZXMgPSBzZWxlY3RlZFJlcG9ydHMubWFwKGFzeW5jIChbcmVwb3J0SWRdKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVwb3J0RGFzaGJvYXJkID0gYXdhaXQgdGhpcy5kYXRhRXhwbG9yZXJTZXJ2aWNlLmZldGNoUmVwb3J0RGFzaGJvYXJkKHJlcG9ydElkKTtcbiAgICAgICAgICBjb25zdCB3aWRnZXQgPSB0aGlzLmNyZWF0ZVdpZGdldENvbmZpZygpO1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVwb3J0RGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gfHwge307XG4gICAgICAgICAgcmVwb3J0RGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSB7IC4uLmNoaWxkcmVuLCBbd2lkZ2V0LmlkXTogd2lkZ2V0IH07XG4gICAgICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUocmVwb3J0RGFzaGJvYXJkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocmVwb3J0UHJvbWlzZXMpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1dpZGdldCBjcmVhdGVkLicpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGdldHRleHQoJ0ZhaWxlZCB0byBjcmVhdGUgd2lkZ2V0LicpKTtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2U6IG1vZGFsIHdhcyBjbG9zZWRcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlQWxhcm1zQW5kRXZlbnRzKGFsYXJtc0V2ZW50c0NvbmZpZ3M6IEFsYXJtT3JFdmVudEV4dGVuZGVkW10pOiB2b2lkIHtcbiAgICB0aGlzLmFsYXJtcyA9IGFsYXJtc0V2ZW50c0NvbmZpZ3MuZmlsdGVyKHRoaXMuaXNBbGFybSk7XG4gICAgdGhpcy5ldmVudHMgPSBhbGFybXNFdmVudHNDb25maWdzLmZpbHRlcih0aGlzLmlzRXZlbnQpO1xuICAgIHRoaXMuaGFzQXRMZWFzdE9uZUFsYXJtQWN0aXZlID0gdGhpcy5oYXNBY3RpdmVBbGFybXModGhpcy5hbGFybXMpO1xuICB9XG5cbiAgaGFuZGxlRGF0YXBvaW50T3V0T2ZTeW5jKGRwT3V0T2ZTeW5jOiBEYXRhcG9pbnRzR3JhcGhLUElEZXRhaWxzKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gKGRwOiBLUElEZXRhaWxzKSA9PiBkcC5fX3RhcmdldD8uaWQgKyBkcC5mcmFnbWVudCArIGRwLnNlcmllcztcbiAgICBjb25zdCBkcE1hdGNoID0gdGhpcy5jb25maWcuZGF0YXBvaW50cz8uZmluZChkcCA9PiBrZXkoZHApID09PSBrZXkoZHBPdXRPZlN5bmMpKTtcbiAgICBpZiAoIWRwTWF0Y2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kYXRhcG9pbnRzT3V0T2ZTeW5jLnNldChkcE1hdGNoLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBbGFybShpdGVtOiBBbGFybU9yRXZlbnRFeHRlbmRlZCk6IGl0ZW0gaXMgQWxhcm1EZXRhaWxzRXh0ZW5kZWQge1xuICAgIHJldHVybiBpdGVtLnRpbWVsaW5lVHlwZSA9PT0gJ0FMQVJNJztcbiAgfVxuXG4gIHByaXZhdGUgaXNFdmVudChpdGVtOiBBbGFybU9yRXZlbnRFeHRlbmRlZCk6IGl0ZW0gaXMgRXZlbnREZXRhaWxzRXh0ZW5kZWQge1xuICAgIHJldHVybiBpdGVtLnRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJztcbiAgfVxuXG4gIHByaXZhdGUgaGFzQWN0aXZlQWxhcm1zKGFsYXJtczogQWxhcm1EZXRhaWxzRXh0ZW5kZWRbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhbGFybXMubGVuZ3RoID4gMCAmJiBhbGFybXMuc29tZShhbGFybSA9PiBhbGFybS5fX2FjdGl2ZSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRm9yTWF0Y2hpbmdEYXRhcG9pbnRzKCk6IHZvaWQge1xuICAgIGNvbnN0IGFsbE1hdGNoID0gdGhpcy5jb25maWc/LmFsYXJtc0V2ZW50c0NvbmZpZ3M/LmV2ZXJ5KGFlID0+XG4gICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZS5kYXRhcG9pbnRzPy5zb21lKGRwID0+IGRwLl9fdGFyZ2V0Py5pZCA9PT0gYWUuX190YXJnZXQ/LmlkKVxuICAgICk7XG5cbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICB0aGlzLmFsYXJtc09yRXZlbnRzSGF2ZU5vTWF0Y2hpbmdEcHMgPSAhYWxsTWF0Y2g7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUV4cG9ydENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhcG9pbnREZXRhaWxzID0gdGhpcy5jb25maWcuZGF0YXBvaW50c1xuICAgICAgLmZpbHRlcigoeyBfX2FjdGl2ZSB9KSA9PiBfX2FjdGl2ZSlcbiAgICAgIC5tYXAoKHsgX190YXJnZXQsIGZyYWdtZW50LCBzZXJpZXMgfSkgPT4gKHtcbiAgICAgICAgZGV2aWNlTmFtZTogX190YXJnZXQubmFtZSxcbiAgICAgICAgc291cmNlOiBfX3RhcmdldC5pZCxcbiAgICAgICAgdmFsdWVGcmFnbWVudFNlcmllczogc2VyaWVzLFxuICAgICAgICB2YWx1ZUZyYWdtZW50VHlwZTogZnJhZ21lbnRcbiAgICAgIH0pKTtcblxuICAgIGlmIChkYXRhcG9pbnREZXRhaWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5leHBvcnRDb25maWcgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydENvbmZpZyA9IHtcbiAgICAgICAgYWdncmVnYXRpb246IHRoaXMuY29uZmlnLmFnZ3JlZ2F0aW9uLFxuICAgICAgICBkYXRlRnJvbTogbmV3IERhdGUodGhpcy5jb25maWcuZGF0ZUZyb20pLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGRhdGVUbzogbmV3IERhdGUodGhpcy5jb25maWcuZGF0ZVRvKS50b0lTT1N0cmluZygpLFxuICAgICAgICBkYXRhcG9pbnREZXRhaWxzOiBkYXRhcG9pbnREZXRhaWxzXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbnRleHRTb3VyY2VJZCgpOiBJSWRlbnRpZmllZCB7XG4gICAgY29uc3Qgcm91dGVDb250ZXh0ID0gdGhpcy5jb250ZXh0Um91dGVTZXJ2aWNlLmdldENvbnRleHREYXRhKHRoaXMuYWN0aXZhdGVkUm91dGUpO1xuICAgIGlmICghcm91dGVDb250ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgY29udGV4dCwgY29udGV4dERhdGEgfSA9IHJvdXRlQ29udGV4dDtcbiAgICBpZiAoW1ZpZXdDb250ZXh0LkRldmljZSwgVmlld0NvbnRleHQuR3JvdXBdLmluY2x1ZGVzKGNvbnRleHQpKSB7XG4gICAgICByZXR1cm4gY29udGV4dERhdGE7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVXaWRnZXRDb25maWcoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0RhdGEgcG9pbnRzIGdyYXBoIDInLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ0RhdGEgcG9pbnRzIGdyYXBoIDInKSxcbiAgICAgIGlkOiBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc3Vic3RyKDIpLFxuICAgICAgX3dpZHRoOiAyNCxcbiAgICAgIF9oZWlnaHQ6IDUsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZGF0YXBvaW50czogW3RoaXMuY29uZmlnLmRhdGFwb2ludHMgfHwgW11dLFxuICAgICAgYWxhcm1zOiBbdGhpcy5hbGFybXMgfHwgW11dLFxuICAgICAgZXZlbnRzOiBbdGhpcy5ldmVudHMgfHwgW11dLFxuICAgICAgZGF0ZUZyb206IFt0aGlzLmNvbmZpZy5kYXRlRnJvbSB8fCAobnVsbCBhcyBEYXRlKV0sXG4gICAgICBkYXRlVG86IFt0aGlzLmNvbmZpZy5kYXRlRnJvbSB8fCAobnVsbCBhcyBEYXRlKV0sXG4gICAgICBpbnRlcnZhbDogW3RoaXMuY29uZmlnLmludGVydmFsIHx8ICdob3VycyddLFxuICAgICAgYWdncmVnYXRpb246IFt0aGlzLmNvbmZpZy5hZ2dyZWdhdGlvbiB8fCAobnVsbCBhcyBhZ2dyZWdhdGlvblR5cGUgfCBudWxsKV0sXG4gICAgICByZWFsdGltZTogW3RoaXMuY29uZmlnLnJlYWx0aW1lIHx8IGZhbHNlXSxcbiAgICAgIGRpc3BsYXlNYXJrZWRMaW5lOiBbdHJ1ZSwgW11dLFxuICAgICAgZGlzcGxheU1hcmtlZFBvaW50OiBbdHJ1ZSwgW11dLFxuICAgICAgbWVyZ2VNYXRjaGluZ0RhdGFwb2ludHM6IFt0cnVlLCBbXV0sXG4gICAgICBmb3JjZU1lcmdlRGF0YXBvaW50czogW2ZhbHNlLCBbXV0sXG4gICAgICBzaG93TGFiZWxBbmRVbml0OiBbdHJ1ZSwgW11dLFxuICAgICAgc2hvd1NsaWRlcjogW3RydWUsIFtdXSxcbiAgICAgIGRpc3BsYXlEYXRlU2VsZWN0aW9uOiBbZmFsc2UsIFtdXSxcbiAgICAgIHlBeGlzU3BsaXRMaW5lczogW2ZhbHNlXSxcbiAgICAgIHhBeGlzU3BsaXRMaW5lczogW2ZhbHNlXVxuICAgIH0pO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7ICdEYXRhIGV4cGxvcmVyJyB8IHRyYW5zbGF0ZSB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LXRpbWUtY29udGV4dFxuICAoY29udGV4dENoYW5nZSk9XCJvblRpbWVDb250ZXh0Q2hhbmdlKCRldmVudClcIlxuICBbY2hhbmdlZERhdGVDb250ZXh0XT1cInRpbWVQcm9wc1wiXG4+PC9jOHktdGltZS1jb250ZXh0PlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidsZWZ0J1wiPlxuICA8Yzh5LXdvcmtzcGFjZS1jb25maWdcbiAgICBbdXBkYXRlZENvbmZpZ109XCJjb25maWdcIlxuICAgIChvbkNvbmZpZ3VyYXRpb25DaGFuZ2UpPVwib25Db25maWd1cmF0aW9uQ2hhbmdlKCRldmVudClcIlxuICA+PC9jOHktd29ya3NwYWNlLWNvbmZpZz5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgPGM4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3RvciBbZXhwb3J0Q29uZmlnXT1cImV4cG9ydENvbmZpZ1wiPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidtb3JlJ1wiXG4gIFtwcmlvcml0eV09XCItMjAwMFwiXG4+XG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdTZW5kIGFzIHdpZGdldCB0byByZXBvcnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBkYXRhLWN5PVwid2lkZ2V0cy1kYXNoYm9hcmQtLWNvcHktZGFzaGJvYXJkXCJcbiAgICAoY2xpY2spPVwic2VuZEFzV2lkZ2V0VG9SZXBvcnQoKVwiXG4gICAgW2Rpc2FibGVkXT1cImNvbmZpZz8uZGF0YXBvaW50cz8ubGVuZ3RoID09PSAwIHx8ICFjYW5BZGRSZXBvcnRcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cImM4eS1yZXBvcnRzXCI+PC9pPlxuICAgIDxzcGFuPnt7ICdTZW5kIGFzIHdpZGdldCB0byByZXBvcnQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCInbW9yZSdcIlxuICBbcHJpb3JpdHldPVwiLTIwMDBcIlxuPlxuICA8YnV0dG9uXG4gICAgdGl0bGU9XCJ7eyAnQ3JlYXRlIGEgbmV3IHJlcG9ydCB3aXRoIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGRhdGEtY3k9XCJ3aWRnZXRzLWRhc2hib2FyZC0tY29weS1kYXNoYm9hcmRcIlxuICAgIChjbGljayk9XCJjcmVhdGVOZXdSZXBvcnRXaXRoV2lkZ2V0KClcIlxuICAgIFtkaXNhYmxlZF09XCJjb25maWc/LmRhdGFwb2ludHM/Lmxlbmd0aCA9PT0gMCB8fCAhY2FuQWRkUmVwb3J0XCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJjOHktcmVwb3J0c1wiPjwvaT5cbiAgICA8c3Bhbj57eyAnQ3JlYXRlIGEgbmV3IHJlcG9ydCB3aXRoIHdpZGdldCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBkLWdyaWQgZ3JpZF9jb2wtLWF1dG8tMzYwIGdhcC0yNFwiPlxuICA8ZGl2IGNsYXNzPVwiZC1jb2wgZ2FwLTE2XCI+XG4gICAgPGM4eS1jaGFydHNcbiAgICAgIGNsYXNzPVwiZmxleC1ncm93IGRhdGEtcG9pbnQtZXhwbG9yZXJcIlxuICAgICAgI2NoYXJ0XG4gICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICBbYWxlcnRzXT1cImFsZXJ0c1wiXG4gICAgICAodXBkYXRlQWxhcm1zQW5kRXZlbnRzKT1cInVwZGF0ZUFsYXJtc0FuZEV2ZW50cygkZXZlbnQpXCJcbiAgICAgIChjb25maWdDaGFuZ2VPblpvb21PdXQpPVwib25TbGlkZXJab29tKCRldmVudClcIlxuICAgICAgKGRhdGFwb2ludE91dE9mU3luYyk9XCJoYW5kbGVEYXRhcG9pbnRPdXRPZlN5bmMoJGV2ZW50KVwiXG4gICAgICAodGltZVJhbmdlQ2hhbmdlT25SZWFsdGltZSk9XCJ1cGRhdGVUaW1lUmFuZ2VPblJlYWx0aW1lKCRldmVudClcIlxuICAgICAgKGlzTWFya2VkQXJlYUVuYWJsZWQpPVwiaXNNYXJrZWRBcmVhRW5hYmxlZCA9ICRldmVudFwiXG4gICAgPjwvYzh5LWNoYXJ0cz5cbiAgICA8Zm9ybVxuICAgICAgY2xhc3M9XCJtLWwtNDggbS1yLTQ4XCJcbiAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1ncmlkLW1kIGdyaWRfX2NvbC0tNC00LTQgZ2FwLTE2XCI+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBmb3JtLWdyb3VwLXNtIG0tdC1tZC0wIHAtYi04XCI+XG4gICAgICAgICAgPGxlZ2VuZD57eyAnQXhpcycgfCB0cmFuc2xhdGUgfX08L2xlZ2VuZD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInWS1heGlzIGhlbHBlciBsaW5lcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBuYW1lPVwieUF4aXNTcGxpdExpbmVzXCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwieUF4aXNTcGxpdExpbmVzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+WS1heGlzIGhlbHBlciBsaW5lczwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidYLWF4aXMgaGVscGVyIGxpbmVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJ4QXhpc1NwbGl0TGluZXNcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ4QXhpc1NwbGl0TGluZXNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5YLWF4aXMgaGVscGVyIGxpbmVzPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ01lcmdlIG1hdGNoaW5nIGRhdGEgcG9pbnRzIGludG8gc2luZ2xlIGF4aXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgbmFtZT1cIm1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzXCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWVyZ2VNYXRjaGluZ0RhdGFwb2ludHNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5NZXJnZSBtYXRjaGluZyBkYXRhIHBvaW50cyBpbnRvIHNpbmdsZSBheGlzPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1kb3QgbS1sLThcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICdEYXRhIHBvaW50cyB3aXRoIHRoZSBzYW1lIG1pbiBhbmQgbWF4IHZhbHVlcyB3aWxsIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGF4aXMuIFRoZSB2YWx1ZXMgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBkYXRhIHBvaW50IGNvbmZpZ3VyYXRpb24uJ1xuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ0RhdGEgcG9pbnRzIHdpdGggdGhlIHNhbWUgbWluIGFuZCBtYXggdmFsdWVzIHdpbGwgYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgYXhpcy4gVGhlIHZhbHVlcyBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGRhdGEgcG9pbnQgY29uZmlndXJhdGlvbi4nXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWluZm9cIlxuICAgICAgICAgICAgICAgIGM4eUljb249XCJpbmZvXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0ZvcmNlIG1lcmdlIGFsbCBkYXRhIHBvaW50cyBpbnRvIHNpbmdsZSBheGlzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJmb3JjZU1lcmdlRGF0YXBvaW50c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZvcmNlTWVyZ2VEYXRhcG9pbnRzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+Rm9yY2UgbWVyZ2UgYWxsIGRhdGEgcG9pbnRzIGludG8gc2luZ2xlIGF4aXM8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvdCBtLWwtOFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgJ0FsbCBheGVzIHdpbGwgYmUgZm9yY2UgbWVyZ2VkIHRvIGEgc2luZ2xlIGF4aXMgd2l0aCB0aGUgc2NhbGUgYmVpbmcgc2V0IHRvIHRoZSBtYXggYW5kIG1pbiB2YWx1ZSBvZiBhbGwgYXhlcy4gSXRcXCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIG9wdGlvbiBmb3IgZGF0YSBwb2ludHMgd2l0aCBzaW1pbGFyIHZhbHVlcy4nXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAnQWxsIGF4ZXMgd2lsbCBiZSBmb3JjZSBtZXJnZWQgdG8gYSBzaW5nbGUgYXhpcyB3aXRoIHRoZSBzY2FsZSBiZWluZyBzZXQgdG8gdGhlIG1heCBhbmQgbWluIHZhbHVlIG9mIGFsbCBheGVzLiBJdFxcJ3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgb3B0aW9uIGZvciBkYXRhIHBvaW50cyB3aXRoIHNpbWlsYXIgdmFsdWVzLidcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaW5mb1wiXG4gICAgICAgICAgICAgICAgYzh5SWNvbj1cImluZm9cIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IGZvcm0tZ3JvdXAtc20gbS10LW1kLTAgcC1iLThcIj5cbiAgICAgICAgICA8bGVnZW5kPnt7ICdBbGFybXMgJiBldmVudHMnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgdmVydGljYWwgbGluZSB3aGVuIGFsYXJtIG9jY3VycycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBuYW1lPVwiZGlzcGxheU1hcmtlZExpbmVcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TWFya2VkTGluZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlNob3cgdmVydGljYWwgbGluZSBvbiBldmVyeSBvY2N1cnJlbmNlPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInU2hvdyBpY29uIHdoZW4gYWxhcm0gb3IgZXZlbnQgb2NjdXJzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJkaXNwbGF5TWFya2VkUG9pbnRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TWFya2VkUG9pbnRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICdTaG93IGljb24gd2hlbiB0cmlnZ2VyZWRgV2hlbiBhbGFybXMgYW5kIGV2ZW50cyBvY2N1ciB0aGUgaWNvbiB3aWxsIGJlIHNob3duYCdcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvdCBtLWwtOFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgJ1NvbWUgYWxhcm1zIG9yIGV2ZW50cyBoYXZlIG5vIG1hdGNoaW5nIGRhdGEgcG9pbnRzLiBObyBpY29ucyB3aWxsIGJlIHNob3duIGZvciB0aGVtLidcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdTb21lIGFsYXJtcyBvciBldmVudHMgaGF2ZSBubyBtYXRjaGluZyBkYXRhIHBvaW50cy4gTm8gaWNvbnMgd2lsbCBiZSBzaG93biBmb3IgdGhlbS4nXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWxhcm1zT3JFdmVudHNIYXZlTm9NYXRjaGluZ0Rwc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWluZm9cIlxuICAgICAgICAgICAgICAgIGM4eUljb249XCJpbmZvXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBmb3JtLWdyb3VwLXNtIG0tdC1tZC0wIHAtYi04XCI+XG4gICAgICAgICAgPGxlZ2VuZD57eyAnQ2hhcnQnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgbGFiZWxzIGFuZCB1bml0cycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBuYW1lPVwic2hvd0xhYmVsQW5kVW5pdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNob3dMYWJlbEFuZFVuaXRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5EaXNwbGF5IGxhYmVscyBhbmQgdW5pdHMgb24gWS1heGlzPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgc2xpZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJzaG93U2xpZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2hvd1NsaWRlclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlNob3cgc2xpZGVyPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZCBpbm5lci1zY3JvbGwgYmctbGV2ZWwtMVwiPlxuICAgIDxmb3JtXG4gICAgICBjbGFzcz1cImJnLWluaGVyaXRcIlxuICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgID5cbiAgICAgIDxjOHktZGF0YXBvaW50LXNlbGVjdGlvbi1saXN0XG4gICAgICAgIGNsYXNzPVwiYmctaW5oZXJpdCBzZXBhcmF0b3ItdG9wIGQtYmxvY2tcIlxuICAgICAgICBuYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgIFttaW5BY3RpdmVDb3VudF09XCIwXCJcbiAgICAgICAgW2RlZmF1bHRGb3JtT3B0aW9uc109XCJkYXRhcG9pbnRTZWxlY3REZWZhdWx0Rm9ybU9wdGlvbnNcIlxuICAgICAgICBbY29uZmlnXT1cInsgY29udGV4dEFzc2V0OiBjb250ZXh0QXNzZXQgfVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRhdGFwb2ludHNcIlxuICAgICAgICBbYWxsb3dEcmFnQW5kRHJvcF09XCJ0cnVlXCJcbiAgICAgID48L2M4eS1kYXRhcG9pbnQtc2VsZWN0aW9uLWxpc3Q+XG5cbiAgICAgIDxjOHktYWxhcm0tZXZlbnQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgY2xhc3M9XCJiZy1pbmhlcml0XCJcbiAgICAgICAgbmFtZT1cImFsYXJtc1wiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFsYXJtc1wiXG4gICAgICAgIFt0aW1lbGluZVR5cGVdPVwiJ0FMQVJNJ1wiXG4gICAgICAgIFtkYXRhcG9pbnRzXT1cImNvbmZpZy5kYXRhcG9pbnRzXCJcbiAgICAgID48L2M4eS1hbGFybS1ldmVudC1zZWxlY3Rpb24tbGlzdD5cblxuICAgICAgPGM4eS1hbGFybS1ldmVudC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICBjbGFzcz1cImJnLWluaGVyaXRcIlxuICAgICAgICBuYW1lPVwiZXZlbnRzXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZXZlbnRzXCJcbiAgICAgICAgW3RpbWVsaW5lVHlwZV09XCInRVZFTlQnXCJcbiAgICAgICAgW2RhdGFwb2ludHNdPVwiY29uZmlnLmRhdGFwb2ludHNcIlxuICAgICAgPjwvYzh5LWFsYXJtLWV2ZW50LXNlbGVjdGlvbi1saXN0PlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LWV4cGxvcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2RhdGFwb2ludC1leHBsb3Jlci92aWV3L2RhdGFwb2ludC1leHBsb3Jlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9kYXRhcG9pbnQtZXhwbG9yZXIvdmlldy9kYXRhcG9pbnQtZXhwbG9yZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUNMLFlBQVksRUFDWixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFVBQVUsRUFFVixXQUFXLEVBQ1gsT0FBTyxFQUNQLFdBQVcsRUFDWCxXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBRUwsdUJBQXVCLEVBRXhCLE1BQU0sd0NBQXdDLENBQUM7QUFTaEQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNoQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFB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QUFFLENBQUM7WUFDakMsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3hCLGVBQWUsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN4QixxQkFBcUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F6UVUsMEJBQTBCO21HQUExQiwwQkFBMEIscUVBRjFCLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsMEhDdkVyRCwrclVBd1NBLDJDRC9PSSxVQUFVLHVvRUFDVixZQUFZLDhCQUNaLHVCQUF1QixxVEFDdkIsd0JBQXdCLHFVQUN4QixhQUFhLGlrQkFDYixhQUFhLCtCQUNiLG9CQUFvQix5SkFDcEIsZUFBZSwyTkFDZixnQkFBZ0IsOEJBQ2hCLFdBQVcsOEJBQ1gsVUFBVSwrQkFDVixpQ0FBaUMsNElBQ2pDLHdCQUF3Qjs7NEZBSWYsMEJBQTBCO2tCQXJCdEMsU0FBUzsrQkFDRSx3QkFBd0IsY0FFdEIsSUFBSSxXQUNQO3dCQUNQLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWix1QkFBdUI7d0JBQ3ZCLHdCQUF3Qjt3QkFDeEIsYUFBYTt3QkFDYixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsVUFBVTt3QkFDVixpQ0FBaUM7d0JBQ2pDLHdCQUF3QjtxQkFDekIsYUFDVSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDO3dEQUcvQixLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIENvbW1vbk1vZHVsZSxcbiAgQ29udGV4dFJvdXRlU2VydmljZSxcbiAgQ29yZU1vZHVsZSxcbiAgRHluYW1pY0NvbXBvbmVudEFsZXJ0QWdncmVnYXRvcixcbiAgRm9ybXNNb2R1bGUsXG4gIGdldHRleHQsXG4gIFBlcm1pc3Npb25zLFxuICBWaWV3Q29udGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFsYXJtRXZlbnRTZWxlY3Rvck1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm0tZXZlbnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgVGltZUNvbnRleHRDb21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3RpbWUtY29udGV4dCc7XG5pbXBvcnQge1xuICBEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZyxcbiAgRGF0YXBvaW50U2VsZWN0b3JNb2R1bGUsXG4gIEtQSURldGFpbHNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHtcbiAgQWxhcm1EZXRhaWxzRXh0ZW5kZWQsXG4gIEFsYXJtT3JFdmVudEV4dGVuZGVkLFxuICBEYXRhcG9pbnRzR3JhcGhLUElEZXRhaWxzLFxuICBEYXRhcG9pbnRzR3JhcGhXaWRnZXRDb25maWcsXG4gIEV2ZW50RGV0YWlsc0V4dGVuZGVkLFxuICBUaW1lQ29udGV4dFByb3BzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNoYXJ0L21vZGVscyc7XG5pbXBvcnQge1xuICBDaGFydEFsYXJtc1NlcnZpY2UsXG4gIENoYXJ0RXZlbnRzU2VydmljZSxcbiAgQ2hhcnRzQ29tcG9uZW50XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNoYXJ0JztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvblR5cGUsIElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wb3BvdmVyJztcbmltcG9ydCB7IEludGVydmFsIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBTZW5kQXNXaWRnZXRUb1JlcG9ydE1vZGFsIH0gZnJvbSAnLi9zZW5kLWFzLXdpZGdldC10by1yZXBvcnQtbW9kYWwvc2VuZC1hcy13aWRnZXQtdG8tcmVwb3J0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvY29udGV4dC1kYXNoYm9hcmQnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yQ29tcG9uZW50LFxuICBFeHBvcnRDb25maWdcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBDcmVhdGVOZXdSZXBvcnRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vY3JlYXRlLW5ldy1yZXBvcnQtbW9kYWwvY3JlYXRlLW5ldy1yZXBvcnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGFFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuL2RhdGFwb2ludC1leHBsb3Jlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtzcGFjZUNvbmZpZ0NvbXBvbmVudCB9IGZyb20gJy4vY29uZmlndXJhdGlvbi93b3Jrc3BhY2UtY29uZmlndXJhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50LWV4cGxvcmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1leHBsb3Jlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb3JlTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEYXRhcG9pbnRTZWxlY3Rvck1vZHVsZSxcbiAgICBBbGFybUV2ZW50U2VsZWN0b3JNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBQb3BvdmVyTW9kdWxlLFxuICAgIFRpbWVDb250ZXh0Q29tcG9uZW50LFxuICAgIENoYXJ0c0NvbXBvbmVudCxcbiAgICBCc0Ryb3Bkb3duTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEExMXlNb2R1bGUsXG4gICAgRGF0YXBvaW50c0V4cG9ydFNlbGVjdG9yQ29tcG9uZW50LFxuICAgIFdvcmtzcGFjZUNvbmZpZ0NvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtDaGFydEV2ZW50c1NlcnZpY2UsIENoYXJ0QWxhcm1zU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50RXhwbG9yZXJDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCdjaGFydCcpIGNoYXJ0OiBFbGVtZW50UmVmO1xuICBjb25maWc6IERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyA9IHsgZGF0YXBvaW50czogW10sIGFsYXJtc0V2ZW50c0NvbmZpZ3M6IFtdIH07XG4gIGV4cG9ydENvbmZpZzogRXhwb3J0Q29uZmlnO1xuICBhbGVydHM6IER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3IgfCB1bmRlZmluZWQ7XG4gIGFsYXJtczogQWxhcm1EZXRhaWxzRXh0ZW5kZWRbXSA9IFtdO1xuICBldmVudHM6IEV2ZW50RGV0YWlsc0V4dGVuZGVkW10gPSBbXTtcbiAgZGF0YXBvaW50c091dE9mU3luYyA9IG5ldyBNYXA8RGF0YXBvaW50c0dyYXBoS1BJRGV0YWlscywgYm9vbGVhbj4oKTtcbiAgY29udGV4dEFzc2V0OiBJSWRlbnRpZmllZDtcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIGhhc0F0TGVhc3RPbmVEYXRhcG9pbnRBY3RpdmUgPSB0cnVlO1xuICBoYXNBdExlYXN0T25lQWxhcm1BY3RpdmUgPSB0cnVlO1xuICBpc01hcmtlZEFyZWFFbmFibGVkID0gZmFsc2U7XG4gIGFsYXJtc09yRXZlbnRzSGF2ZU5vTWF0Y2hpbmdEcHMgPSBmYWxzZTtcbiAgY2FuQWRkUmVwb3J0ID0gZmFsc2U7XG4gIHRpbWVQcm9wczoge1xuICAgIGRhdGVGcm9tOiBEYXRlO1xuICAgIGRhdGVUbzogRGF0ZTtcbiAgICBpbnRlcnZhbD86IEludGVydmFsWydpZCddO1xuICAgIHJlYWx0aW1lPzogYm9vbGVhbjtcbiAgICBhZ2dyZWdhdGlvbj86IGFnZ3JlZ2F0aW9uVHlwZSB8IG51bGw7XG4gIH07XG4gIGRhdGFwb2ludFNlbGVjdERlZmF1bHRGb3JtT3B0aW9uczogUGFydGlhbDxEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZz4gPSB7XG4gICAgc2hvd1JhbmdlOiB0cnVlLFxuICAgIHNob3dDaGFydDogdHJ1ZVxuICB9O1xuXG4gICNkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YUV4cGxvcmVyU2VydmljZSA9IGluamVjdChEYXRhRXhwbG9yZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlciA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRTZXJ2aWNlID0gaW5qZWN0KEFsZXJ0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnNNb2RhbFNlcnZpY2UgPSBpbmplY3QoQnNNb2RhbFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcm1pc3Npb25zID0gaW5qZWN0KFBlcm1pc3Npb25zKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0RGFzaGJvYXJkU2VydmljZSA9IGluamVjdChDb250ZXh0RGFzaGJvYXJkU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHRSb3V0ZVNlcnZpY2UgPSBpbmplY3QoQ29udGV4dFJvdXRlU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHRBc3NldCA9IHRoaXMuaW5pdGlhbGl6ZUNvbnRleHRTb3VyY2VJZCgpO1xuICAgIHRoaXMuY2hlY2tGb3JNYXRjaGluZ0RhdGFwb2ludHMoKTtcbiAgICB0aGlzLmNhbkFkZFJlcG9ydCA9IHRoaXMucGVybWlzc2lvbnMuaGFzQW55Um9sZShbXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9DUkVBVEUsXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9BRE1JTixcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU4sXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0NSRUFURVxuICAgIF0pO1xuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZShjb25maWdDaGFuZ2UgPT4ge1xuICAgICAgICBjb25zdCB7IGFsYXJtcywgZXZlbnRzLCAuLi5jb25maWdWYWx1ZXMgfSA9IGNvbmZpZ0NoYW5nZTtcbiAgICAgICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAgICAgLi4uY29uZmlnVmFsdWVzLFxuICAgICAgICAgIGFsYXJtc0V2ZW50c0NvbmZpZ3M6IFsuLi4oYWxhcm1zIHx8IFtdKSwgLi4uKGV2ZW50cyB8fCBbXSldXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudXBkYXRlRXhwb3J0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuY2hlY2tGb3JNYXRjaGluZ0RhdGFwb2ludHMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb25UaW1lQ29udGV4dENoYW5nZSh0aW1lUHJvcHM6IFRpbWVDb250ZXh0UHJvcHMpOiB2b2lkIHtcbiAgICBjb25zdCByZWFsdGltZSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLnJlYWx0aW1lLnZhbHVlO1xuICAgIGlmICh0aW1lUHJvcHMucmVhbHRpbWUgIT09IHJlYWx0aW1lKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHsgcmVhbHRpbWU6IHRpbWVQcm9wcy5yZWFsdGltZSB9KTtcbiAgICB9XG4gICAgaWYgKHRpbWVQcm9wcy5yZWFsdGltZSkge1xuICAgICAgaWYgKHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbCAhPT0gdGhpcy5mb3JtR3JvdXAudmFsdWUuaW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IGludGVydmFsOiB0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgZGF0ZUZyb206IHRpbWVQcm9wcy5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSxcbiAgICAgIGRhdGVUbzogdGltZVByb3BzLmN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZSxcbiAgICAgIGludGVydmFsOiB0aW1lUHJvcHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICBhZ2dyZWdhdGlvbjogdGltZVByb3BzLmFnZ3JlZ2F0aW9uIHx8IG51bGxcbiAgICB9KTtcbiAgfVxuXG4gIG9uQ29uZmlndXJhdGlvbkNoYW5nZShjb25maWc6IERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZyk6IHZvaWQge1xuICAgIGlmIChjb25maWcuZGF0ZUZyb20gJiYgY29uZmlnLmRhdGVUbykge1xuICAgICAgdGhpcy50aW1lUHJvcHMgPSB7XG4gICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZShjb25maWc/LmRhdGVGcm9tKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRGF0ZShjb25maWc/LmRhdGVUbyksXG4gICAgICAgIGludGVydmFsOiBjb25maWc/LmludGVydmFsLFxuICAgICAgICByZWFsdGltZTogY29uZmlnPy5yZWFsdGltZSxcbiAgICAgICAgYWdncmVnYXRpb246IGNvbmZpZz8ucmVhbHRpbWUgPyBudWxsIDogY29uZmlnPy5hZ2dyZWdhdGlvblxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5hbGFybXMgPSBjb25maWcuYWxhcm1zRXZlbnRzQ29uZmlncy5maWx0ZXIoYWUgPT4gYWUudGltZWxpbmVUeXBlID09PSAnQUxBUk0nKTtcbiAgICB0aGlzLmV2ZW50cyA9IGNvbmZpZy5hbGFybXNFdmVudHNDb25maWdzLmZpbHRlcihhZSA9PiBhZS50aW1lbGluZVR5cGUgPT09ICdFVkVOVCcpO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoeyBhbGFybXM6IHRoaXMuYWxhcm1zLCBldmVudHM6IHRoaXMuZXZlbnRzLCAuLi5jb25maWcgfSk7XG4gIH1cblxuICBvblNsaWRlclpvb20odGltZVByb3BzOiB7IGRhdGVGcm9tOiBEYXRlOyBkYXRlVG86IERhdGU7IGludGVydmFsPzogSW50ZXJ2YWxbJ2lkJ10gfSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodGltZVByb3BzKTtcbiAgICB0aGlzLnRpbWVQcm9wcyA9IHsgLi4udGltZVByb3BzLCByZWFsdGltZTogZmFsc2UgfTtcbiAgfVxuXG4gIHVwZGF0ZVRpbWVSYW5nZU9uUmVhbHRpbWUoXG4gICAgdGltZVJhbmdlOiBQaWNrPERhdGFwb2ludHNHcmFwaFdpZGdldENvbmZpZywgJ2RhdGVGcm9tJyB8ICdkYXRlVG8nPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRpbWVSYW5nZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgY3JlYXRlTmV3UmVwb3J0V2l0aFdpZGdldCgpOiB2b2lkIHtcbiAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhDcmVhdGVOZXdSZXBvcnRNb2RhbENvbXBvbmVudCwge1xuICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiBmYWxzZSxcbiAgICAgIGNsYXNzOiAnbW9kYWwtc20nXG4gICAgfSk7XG4gICAgY29uc3QgY29udGVudCA9IG1vZGFsLmNvbnRlbnQgYXMgQ3JlYXRlTmV3UmVwb3J0TW9kYWxDb21wb25lbnQ7XG4gICAgY29udGVudC5yZXN1bHRcbiAgICAgIC50aGVuKGFzeW5jIHJlcG9ydCA9PiB7XG4gICAgICAgIGNvbnN0IHJlcG9ydERhc2hib2FyZCA9IGF3YWl0IHRoaXMuZGF0YUV4cGxvcmVyU2VydmljZS5mZXRjaFJlcG9ydERhc2hib2FyZChyZXBvcnQuaWQpO1xuICAgICAgICBjb25zdCB3aWRnZXQgPSB0aGlzLmNyZWF0ZVdpZGdldENvbmZpZygpO1xuICAgICAgICByZXBvcnREYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IHsgW3dpZGdldC5pZF06IHdpZGdldCB9O1xuICAgICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZShyZXBvcnREYXNoYm9hcmQpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1JlcG9ydCBhbmQgd2lkZ2V0IGNyZWF0ZWQuJykpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoZ2V0dGV4dCgnRmFpbGVkIHRvIGNyZWF0ZSByZXBvcnQgYW5kIHdpZGdldC4nKSk7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbHNlOiBtb2RhbCB3YXMgY2xvc2VkXG4gICAgICB9KTtcbiAgfVxuXG4gIHNlbmRBc1dpZGdldFRvUmVwb3J0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsU2VydmljZS5zaG93KFNlbmRBc1dpZGdldFRvUmVwb3J0TW9kYWwsIHtcbiAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgICBjbGFzczogJ21vZGFsLXNtJ1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBtb2RhbC5jb250ZW50IGFzIFNlbmRBc1dpZGdldFRvUmVwb3J0TW9kYWw7XG4gICAgY29udGVudC5yZXN1bHRcbiAgICAgIC50aGVuKGFzeW5jIHJlcG9ydHMgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJlcG9ydHMgPSBPYmplY3QuZW50cmllcyhyZXBvcnRzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUpO1xuICAgICAgICBjb25zdCByZXBvcnRQcm9taXNlcyA9IHNlbGVjdGVkUmVwb3J0cy5tYXAoYXN5bmMgKFtyZXBvcnRJZF0pID0+IHtcbiAgICAgICAgICBjb25zdCByZXBvcnREYXNoYm9hcmQgPSBhd2FpdCB0aGlzLmRhdGFFeHBsb3JlclNlcnZpY2UuZmV0Y2hSZXBvcnREYXNoYm9hcmQocmVwb3J0SWQpO1xuICAgICAgICAgIGNvbnN0IHdpZGdldCA9IHRoaXMuY3JlYXRlV2lkZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSByZXBvcnREYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiB8fCB7fTtcbiAgICAgICAgICByZXBvcnREYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IHsgLi4uY2hpbGRyZW4sIFt3aWRnZXQuaWRdOiB3aWRnZXQgfTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZShyZXBvcnREYXNoYm9hcmQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChyZXBvcnRQcm9taXNlcyk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnV2lkZ2V0IGNyZWF0ZWQuJykpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoZ2V0dGV4dCgnRmFpbGVkIHRvIGNyZWF0ZSB3aWRnZXQuJykpO1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZTogbW9kYWwgd2FzIGNsb3NlZFxuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVBbGFybXNBbmRFdmVudHMoYWxhcm1zRXZlbnRzQ29uZmlnczogQWxhcm1PckV2ZW50RXh0ZW5kZWRbXSk6IHZvaWQge1xuICAgIHRoaXMuYWxhcm1zID0gYWxhcm1zRXZlbnRzQ29uZmlncy5maWx0ZXIodGhpcy5pc0FsYXJtKTtcbiAgICB0aGlzLmV2ZW50cyA9IGFsYXJtc0V2ZW50c0NvbmZpZ3MuZmlsdGVyKHRoaXMuaXNFdmVudCk7XG4gICAgdGhpcy5oYXNBdExlYXN0T25lQWxhcm1BY3RpdmUgPSB0aGlzLmhhc0FjdGl2ZUFsYXJtcyh0aGlzLmFsYXJtcyk7XG4gIH1cblxuICBoYW5kbGVEYXRhcG9pbnRPdXRPZlN5bmMoZHBPdXRPZlN5bmM6IERhdGFwb2ludHNHcmFwaEtQSURldGFpbHMpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSAoZHA6IEtQSURldGFpbHMpID0+IGRwLl9fdGFyZ2V0Py5pZCArIGRwLmZyYWdtZW50ICsgZHAuc2VyaWVzO1xuICAgIGNvbnN0IGRwTWF0Y2ggPSB0aGlzLmNvbmZpZy5kYXRhcG9pbnRzPy5maW5kKGRwID0+IGtleShkcCkgPT09IGtleShkcE91dE9mU3luYykpO1xuICAgIGlmICghZHBNYXRjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGFwb2ludHNPdXRPZlN5bmMuc2V0KGRwTWF0Y2gsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsYXJtKGl0ZW06IEFsYXJtT3JFdmVudEV4dGVuZGVkKTogaXRlbSBpcyBBbGFybURldGFpbHNFeHRlbmRlZCB7XG4gICAgcmV0dXJuIGl0ZW0udGltZWxpbmVUeXBlID09PSAnQUxBUk0nO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0V2ZW50KGl0ZW06IEFsYXJtT3JFdmVudEV4dGVuZGVkKTogaXRlbSBpcyBFdmVudERldGFpbHNFeHRlbmRlZCB7XG4gICAgcmV0dXJuIGl0ZW0udGltZWxpbmVUeXBlID09PSAnRVZFTlQnO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNBY3RpdmVBbGFybXMoYWxhcm1zOiBBbGFybURldGFpbHNFeHRlbmRlZFtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFsYXJtcy5sZW5ndGggPiAwICYmIGFsYXJtcy5zb21lKGFsYXJtID0+IGFsYXJtLl9fYWN0aXZlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGb3JNYXRjaGluZ0RhdGFwb2ludHMoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsTWF0Y2ggPSB0aGlzLmNvbmZpZz8uYWxhcm1zRXZlbnRzQ29uZmlncz8uZXZlcnkoYWUgPT5cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlLmRhdGFwb2ludHM/LnNvbWUoZHAgPT4gZHAuX190YXJnZXQ/LmlkID09PSBhZS5fX3RhcmdldD8uaWQpXG4gICAgKTtcblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHRoaXMuYWxhcm1zT3JFdmVudHNIYXZlTm9NYXRjaGluZ0RwcyA9ICFhbGxNYXRjaDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRXhwb3J0Q29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFwb2ludERldGFpbHMgPSB0aGlzLmNvbmZpZy5kYXRhcG9pbnRzXG4gICAgICAuZmlsdGVyKCh7IF9fYWN0aXZlIH0pID0+IF9fYWN0aXZlKVxuICAgICAgLm1hcCgoeyBfX3RhcmdldCwgZnJhZ21lbnQsIHNlcmllcyB9KSA9PiAoe1xuICAgICAgICBkZXZpY2VOYW1lOiBfX3RhcmdldC5uYW1lLFxuICAgICAgICBzb3VyY2U6IF9fdGFyZ2V0LmlkLFxuICAgICAgICB2YWx1ZUZyYWdtZW50U2VyaWVzOiBzZXJpZXMsXG4gICAgICAgIHZhbHVlRnJhZ21lbnRUeXBlOiBmcmFnbWVudFxuICAgICAgfSkpO1xuXG4gICAgaWYgKGRhdGFwb2ludERldGFpbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmV4cG9ydENvbmZpZyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwb3J0Q29uZmlnID0ge1xuICAgICAgICBhZ2dyZWdhdGlvbjogdGhpcy5jb25maWcuYWdncmVnYXRpb24sXG4gICAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSh0aGlzLmNvbmZpZy5kYXRlRnJvbSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgZGF0ZVRvOiBuZXcgRGF0ZSh0aGlzLmNvbmZpZy5kYXRlVG8pLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGRhdGFwb2ludERldGFpbHM6IGRhdGFwb2ludERldGFpbHNcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGV4dFNvdXJjZUlkKCk6IElJZGVudGlmaWVkIHtcbiAgICBjb25zdCByb3V0ZUNvbnRleHQgPSB0aGlzLmNvbnRleHRSb3V0ZVNlcnZpY2UuZ2V0Q29udGV4dERhdGEodGhpcy5hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgaWYgKCFyb3V0ZUNvbnRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyBjb250ZXh0LCBjb250ZXh0RGF0YSB9ID0gcm91dGVDb250ZXh0O1xuICAgIGlmIChbVmlld0NvbnRleHQuRGV2aWNlLCBWaWV3Q29udGV4dC5Hcm91cF0uaW5jbHVkZXMoY29udGV4dCkpIHtcbiAgICAgIHJldHVybiBjb250ZXh0RGF0YTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdpZGdldENvbmZpZygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnRGF0YSBwb2ludHMgZ3JhcGggMicsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnRGF0YSBwb2ludHMgZ3JhcGggMicpLFxuICAgICAgaWQ6IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zdWJzdHIoMiksXG4gICAgICBfd2lkdGg6IDI0LFxuICAgICAgX2hlaWdodDogNSxcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWdcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBkYXRhcG9pbnRzOiBbdGhpcy5jb25maWcuZGF0YXBvaW50cyB8fCBbXV0sXG4gICAgICBhbGFybXM6IFt0aGlzLmFsYXJtcyB8fCBbXV0sXG4gICAgICBldmVudHM6IFt0aGlzLmV2ZW50cyB8fCBbXV0sXG4gICAgICBkYXRlRnJvbTogW3RoaXMuY29uZmlnLmRhdGVGcm9tIHx8IChudWxsIGFzIERhdGUpXSxcbiAgICAgIGRhdGVUbzogW3RoaXMuY29uZmlnLmRhdGVGcm9tIHx8IChudWxsIGFzIERhdGUpXSxcbiAgICAgIGludGVydmFsOiBbdGhpcy5jb25maWcuaW50ZXJ2YWwgfHwgJ2hvdXJzJ10sXG4gICAgICBhZ2dyZWdhdGlvbjogW3RoaXMuY29uZmlnLmFnZ3JlZ2F0aW9uIHx8IChudWxsIGFzIGFnZ3JlZ2F0aW9uVHlwZSB8IG51bGwpXSxcbiAgICAgIHJlYWx0aW1lOiBbdGhpcy5jb25maWcucmVhbHRpbWUgfHwgZmFsc2VdLFxuICAgICAgZGlzcGxheU1hcmtlZExpbmU6IFt0cnVlLCBbXV0sXG4gICAgICBkaXNwbGF5TWFya2VkUG9pbnQ6IFt0cnVlLCBbXV0sXG4gICAgICBtZXJnZU1hdGNoaW5nRGF0YXBvaW50czogW3RydWUsIFtdXSxcbiAgICAgIGZvcmNlTWVyZ2VEYXRhcG9pbnRzOiBbZmFsc2UsIFtdXSxcbiAgICAgIHNob3dMYWJlbEFuZFVuaXQ6IFt0cnVlLCBbXV0sXG4gICAgICBzaG93U2xpZGVyOiBbdHJ1ZSwgW11dLFxuICAgICAgZGlzcGxheURhdGVTZWxlY3Rpb246IFtmYWxzZSwgW11dLFxuICAgICAgeUF4aXNTcGxpdExpbmVzOiBbZmFsc2VdLFxuICAgICAgeEF4aXNTcGxpdExpbmVzOiBbZmFsc2VdLFxuICAgICAgbnVtYmVyT2ZEZWNpbWFsUGxhY2VzOiBbMiwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDApLCBWYWxpZGF0b3JzLm1heCgxMCldXVxuICAgIH0pO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPnt7ICdEYXRhIGV4cGxvcmVyJyB8IHRyYW5zbGF0ZSB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LXRpbWUtY29udGV4dFxuICAoY29udGV4dENoYW5nZSk9XCJvblRpbWVDb250ZXh0Q2hhbmdlKCRldmVudClcIlxuICBbY2hhbmdlZERhdGVDb250ZXh0XT1cInRpbWVQcm9wc1wiXG4+PC9jOHktdGltZS1jb250ZXh0PlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidsZWZ0J1wiPlxuICA8Yzh5LXdvcmtzcGFjZS1jb25maWdcbiAgICBbdXBkYXRlZENvbmZpZ109XCJjb25maWdcIlxuICAgIChvbkNvbmZpZ3VyYXRpb25DaGFuZ2UpPVwib25Db25maWd1cmF0aW9uQ2hhbmdlKCRldmVudClcIlxuICA+PC9jOHktd29ya3NwYWNlLWNvbmZpZz5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgPGM4eS1kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3RvciBbZXhwb3J0Q29uZmlnXT1cImV4cG9ydENvbmZpZ1wiPjwvYzh5LWRhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidtb3JlJ1wiXG4gIFtwcmlvcml0eV09XCItMjAwMFwiXG4+XG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7ICdTZW5kIGFzIHdpZGdldCB0byByZXBvcnQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBkYXRhLWN5PVwid2lkZ2V0cy1kYXNoYm9hcmQtLWNvcHktZGFzaGJvYXJkXCJcbiAgICAoY2xpY2spPVwic2VuZEFzV2lkZ2V0VG9SZXBvcnQoKVwiXG4gICAgW2Rpc2FibGVkXT1cImNvbmZpZz8uZGF0YXBvaW50cz8ubGVuZ3RoID09PSAwIHx8ICFjYW5BZGRSZXBvcnRcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cImM4eS1yZXBvcnRzXCI+PC9pPlxuICAgIDxzcGFuPnt7ICdTZW5kIGFzIHdpZGdldCB0byByZXBvcnQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCInbW9yZSdcIlxuICBbcHJpb3JpdHldPVwiLTIwMDBcIlxuPlxuICA8YnV0dG9uXG4gICAgdGl0bGU9XCJ7eyAnQ3JlYXRlIGEgbmV3IHJlcG9ydCB3aXRoIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGRhdGEtY3k9XCJ3aWRnZXRzLWRhc2hib2FyZC0tY29weS1kYXNoYm9hcmRcIlxuICAgIChjbGljayk9XCJjcmVhdGVOZXdSZXBvcnRXaXRoV2lkZ2V0KClcIlxuICAgIFtkaXNhYmxlZF09XCJjb25maWc/LmRhdGFwb2ludHM/Lmxlbmd0aCA9PT0gMCB8fCAhY2FuQWRkUmVwb3J0XCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJjOHktcmVwb3J0c1wiPjwvaT5cbiAgICA8c3Bhbj57eyAnQ3JlYXRlIGEgbmV3IHJlcG9ydCB3aXRoIHdpZGdldCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBkLWdyaWQgZ3JpZF9jb2wtLWF1dG8tMzYwIGdhcC0yNFwiPlxuICA8ZGl2IGNsYXNzPVwiZC1jb2wgZ2FwLTE2XCI+XG4gICAgPGM4eS1jaGFydHNcbiAgICAgIGNsYXNzPVwiZmxleC1ncm93IGRhdGEtcG9pbnQtZXhwbG9yZXJcIlxuICAgICAgI2NoYXJ0XG4gICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICBbYWxlcnRzXT1cImFsZXJ0c1wiXG4gICAgICAodXBkYXRlQWxhcm1zQW5kRXZlbnRzKT1cInVwZGF0ZUFsYXJtc0FuZEV2ZW50cygkZXZlbnQpXCJcbiAgICAgIChjb25maWdDaGFuZ2VPblpvb21PdXQpPVwib25TbGlkZXJab29tKCRldmVudClcIlxuICAgICAgKGRhdGFwb2ludE91dE9mU3luYyk9XCJoYW5kbGVEYXRhcG9pbnRPdXRPZlN5bmMoJGV2ZW50KVwiXG4gICAgICAodGltZVJhbmdlQ2hhbmdlT25SZWFsdGltZSk9XCJ1cGRhdGVUaW1lUmFuZ2VPblJlYWx0aW1lKCRldmVudClcIlxuICAgICAgKGlzTWFya2VkQXJlYUVuYWJsZWQpPVwiaXNNYXJrZWRBcmVhRW5hYmxlZCA9ICRldmVudFwiXG4gICAgPjwvYzh5LWNoYXJ0cz5cbiAgICA8Zm9ybVxuICAgICAgY2xhc3M9XCJtLWwtNDggbS1yLTQ4XCJcbiAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1ncmlkLW1kIGdyaWRfX2NvbC0tNC00LTQgZ2FwLTE2XCI+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBmb3JtLWdyb3VwLXNtIG0tdC1tZC0wIHAtYi04XCI+XG4gICAgICAgICAgPGxlZ2VuZD57eyAnQXhpcycgfCB0cmFuc2xhdGUgfX08L2xlZ2VuZD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInWS1heGlzIGhlbHBlciBsaW5lcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBuYW1lPVwieUF4aXNTcGxpdExpbmVzXCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwieUF4aXNTcGxpdExpbmVzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+WS1heGlzIGhlbHBlciBsaW5lczwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidYLWF4aXMgaGVscGVyIGxpbmVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJ4QXhpc1NwbGl0TGluZXNcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ4QXhpc1NwbGl0TGluZXNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5YLWF4aXMgaGVscGVyIGxpbmVzPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ01lcmdlIG1hdGNoaW5nIGRhdGEgcG9pbnRzIGludG8gc2luZ2xlIGF4aXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgbmFtZT1cIm1lcmdlTWF0Y2hpbmdEYXRhcG9pbnRzXCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWVyZ2VNYXRjaGluZ0RhdGFwb2ludHNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5NZXJnZSBtYXRjaGluZyBkYXRhIHBvaW50cyBpbnRvIHNpbmdsZSBheGlzPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1kb3QgbS1sLThcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICdEYXRhIHBvaW50cyB3aXRoIHRoZSBzYW1lIG1pbiBhbmQgbWF4IHZhbHVlcyB3aWxsIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGF4aXMuIFRoZSB2YWx1ZXMgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBkYXRhIHBvaW50IGNvbmZpZ3VyYXRpb24uJ1xuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ0RhdGEgcG9pbnRzIHdpdGggdGhlIHNhbWUgbWluIGFuZCBtYXggdmFsdWVzIHdpbGwgYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgYXhpcy4gVGhlIHZhbHVlcyBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGRhdGEgcG9pbnQgY29uZmlndXJhdGlvbi4nXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWluZm9cIlxuICAgICAgICAgICAgICAgIGM4eUljb249XCJpbmZvXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0ZvcmNlIG1lcmdlIGFsbCBkYXRhIHBvaW50cyBpbnRvIHNpbmdsZSBheGlzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJmb3JjZU1lcmdlRGF0YXBvaW50c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZvcmNlTWVyZ2VEYXRhcG9pbnRzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+Rm9yY2UgbWVyZ2UgYWxsIGRhdGEgcG9pbnRzIGludG8gc2luZ2xlIGF4aXM8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvdCBtLWwtOFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgJ0FsbCBheGVzIHdpbGwgYmUgZm9yY2UgbWVyZ2VkIHRvIGEgc2luZ2xlIGF4aXMgd2l0aCB0aGUgc2NhbGUgYmVpbmcgc2V0IHRvIHRoZSBtYXggYW5kIG1pbiB2YWx1ZSBvZiBhbGwgYXhlcy4gSXRcXCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIG9wdGlvbiBmb3IgZGF0YSBwb2ludHMgd2l0aCBzaW1pbGFyIHZhbHVlcy4nXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAnQWxsIGF4ZXMgd2lsbCBiZSBmb3JjZSBtZXJnZWQgdG8gYSBzaW5nbGUgYXhpcyB3aXRoIHRoZSBzY2FsZSBiZWluZyBzZXQgdG8gdGhlIG1heCBhbmQgbWluIHZhbHVlIG9mIGFsbCBheGVzLiBJdFxcJ3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgb3B0aW9uIGZvciBkYXRhIHBvaW50cyB3aXRoIHNpbWlsYXIgdmFsdWVzLidcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaW5mb1wiXG4gICAgICAgICAgICAgICAgYzh5SWNvbj1cImluZm9cIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IGZvcm0tZ3JvdXAtc20gbS10LW1kLTAgcC1iLThcIj5cbiAgICAgICAgICA8bGVnZW5kPnt7ICdBbGFybXMgJiBldmVudHMnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgdmVydGljYWwgbGluZSB3aGVuIGFsYXJtIG9jY3VycycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBuYW1lPVwiZGlzcGxheU1hcmtlZExpbmVcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TWFya2VkTGluZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlNob3cgdmVydGljYWwgbGluZSBvbiBldmVyeSBvY2N1cnJlbmNlPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInU2hvdyBpY29uIHdoZW4gYWxhcm0gb3IgZXZlbnQgb2NjdXJzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJkaXNwbGF5TWFya2VkUG9pbnRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TWFya2VkUG9pbnRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICdTaG93IGljb24gd2hlbiB0cmlnZ2VyZWRgV2hlbiBhbGFybXMgYW5kIGV2ZW50cyBvY2N1ciB0aGUgaWNvbiB3aWxsIGJlIHNob3duYCdcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvdCBtLWwtOFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgJ1NvbWUgYWxhcm1zIG9yIGV2ZW50cyBoYXZlIG5vIG1hdGNoaW5nIGRhdGEgcG9pbnRzLiBObyBpY29ucyB3aWxsIGJlIHNob3duIGZvciB0aGVtLidcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdTb21lIGFsYXJtcyBvciBldmVudHMgaGF2ZSBubyBtYXRjaGluZyBkYXRhIHBvaW50cy4gTm8gaWNvbnMgd2lsbCBiZSBzaG93biBmb3IgdGhlbS4nXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWxhcm1zT3JFdmVudHNIYXZlTm9NYXRjaGluZ0Rwc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWluZm9cIlxuICAgICAgICAgICAgICAgIGM4eUljb249XCJpbmZvXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBmb3JtLWdyb3VwLXNtIG0tdC1tZC0wIHAtYi04XCI+XG4gICAgICAgICAgPGxlZ2VuZD57eyAnQ2hhcnQnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgbGFiZWxzIGFuZCB1bml0cycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBuYW1lPVwic2hvd0xhYmVsQW5kVW5pdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNob3dMYWJlbEFuZFVuaXRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5EaXNwbGF5IGxhYmVscyBhbmQgdW5pdHMgb24gWS1heGlzPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ1Nob3cgc2xpZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJzaG93U2xpZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2hvd1NsaWRlclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlNob3cgc2xpZGVyPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZCBpbm5lci1zY3JvbGwgYmctbGV2ZWwtMVwiPlxuICAgIDxmb3JtXG4gICAgICBjbGFzcz1cImJnLWluaGVyaXRcIlxuICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgID5cbiAgICAgIDxjOHktZGF0YXBvaW50LXNlbGVjdGlvbi1saXN0XG4gICAgICAgIGNsYXNzPVwiYmctaW5oZXJpdCBzZXBhcmF0b3ItdG9wIGQtYmxvY2tcIlxuICAgICAgICBuYW1lPVwiZGF0YXBvaW50c1wiXG4gICAgICAgIFttaW5BY3RpdmVDb3VudF09XCIwXCJcbiAgICAgICAgW2RlZmF1bHRGb3JtT3B0aW9uc109XCJkYXRhcG9pbnRTZWxlY3REZWZhdWx0Rm9ybU9wdGlvbnNcIlxuICAgICAgICBbY29uZmlnXT1cInsgY29udGV4dEFzc2V0OiBjb250ZXh0QXNzZXQgfVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRhdGFwb2ludHNcIlxuICAgICAgICBbYWxsb3dEcmFnQW5kRHJvcF09XCJ0cnVlXCJcbiAgICAgID48L2M4eS1kYXRhcG9pbnQtc2VsZWN0aW9uLWxpc3Q+XG5cbiAgICAgIDxjOHktYWxhcm0tZXZlbnQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgY2xhc3M9XCJiZy1pbmhlcml0XCJcbiAgICAgICAgbmFtZT1cImFsYXJtc1wiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFsYXJtc1wiXG4gICAgICAgIFt0aW1lbGluZVR5cGVdPVwiJ0FMQVJNJ1wiXG4gICAgICAgIFtkYXRhcG9pbnRzXT1cImNvbmZpZy5kYXRhcG9pbnRzXCJcbiAgICAgID48L2M4eS1hbGFybS1ldmVudC1zZWxlY3Rpb24tbGlzdD5cblxuICAgICAgPGM4eS1hbGFybS1ldmVudC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICBjbGFzcz1cImJnLWluaGVyaXRcIlxuICAgICAgICBuYW1lPVwiZXZlbnRzXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZXZlbnRzXCJcbiAgICAgICAgW3RpbWVsaW5lVHlwZV09XCInRVZFTlQnXCJcbiAgICAgICAgW2RhdGFwb2ludHNdPVwiY29uZmlnLmRhdGFwb2ludHNcIlxuICAgICAgPjwvYzh5LWFsYXJtLWV2ZW50LXNlbGVjdGlvbi1saXN0PlxuXG4gICAgICA8bGFiZWxcbiAgICAgICAgW3RpdGxlXT1cIidOdW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlc1xuICAgICAgPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIG5hbWU9XCJudW1iZXJPZkRlY2ltYWxQbGFjZXNcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibnVtYmVyT2ZEZWNpbWFsUGxhY2VzXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6IDEgfVwiXG4gICAgICAvPlxuICAgICAgPGM4eS1tZXNzYWdlc1xuICAgICAgICBbc2hvd109XCJcbiAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHM/Lm51bWJlck9mRGVjaW1hbFBsYWNlcz8udG91Y2hlZCAmJlxuICAgICAgICAgIGZvcm1Hcm91cD8uY29udHJvbHM/Lm51bWJlck9mRGVjaW1hbFBsYWNlcz8uZXJyb3JzXG4gICAgICAgIFwiXG4gICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -48,7 +48,7 @@ export class DataProcessingService {
|
|
|
48
48
|
*/
|
|
49
49
|
transformToExportFileStructureForPreview(dataToExport) {
|
|
50
50
|
const data = dataToExport.find(data => {
|
|
51
|
-
return data !== null && data.timeValueMap
|
|
51
|
+
return data !== null && data.timeValueMap;
|
|
52
52
|
});
|
|
53
53
|
if (!data) {
|
|
54
54
|
return [];
|
|
@@ -70,7 +70,7 @@ export class DataProcessingService {
|
|
|
70
70
|
const rowsData = [];
|
|
71
71
|
// When measurements or series data is not available, add an empty header row with only device_name, source and fragment_series.
|
|
72
72
|
// This data is needed later to be used to create the file name and merged file header string.
|
|
73
|
-
const responseDoesNotContainData = !dataToExport.timeValueMap
|
|
73
|
+
const responseDoesNotContainData = !Object.keys(dataToExport.timeValueMap || {}).length;
|
|
74
74
|
if (responseDoesNotContainData) {
|
|
75
75
|
rowsData.push({
|
|
76
76
|
time: null,
|
|
@@ -204,4 +204,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
204
204
|
type: Inject,
|
|
205
205
|
args: [FILE_GENERATORS]
|
|
206
206
|
}] }, { type: i1.UtilsService }] });
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1wcm9jZXNzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyL2RhdGEtcHJvY2Vzc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBSUwsNkJBQTZCLEVBRzdCLGdDQUFnQyxFQUVoQyw0QkFBNEIsRUFFN0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFLL0MsTUFBTSxPQUFPLHFCQUFxQjtJQVVoQyxZQUNtQyxjQUErQixFQUN4RCxLQUFtQjtRQURNLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtRQUN4RCxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBWDdCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBYWhCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUc7Z0JBQ2pCLFNBQVMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQy9CLFFBQVEsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUN6QixVQUFVLEVBQUUsQ0FB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgSlNaaXAgZnJvbSAnanN6aXAnO1xuaW1wb3J0IHtcbiAgRGF0YVRvRXhwb3J0LFxuICBFeHBvcnREYXRhLFxuICBFeHBvcnRlZEZpbGUsXG4gIEZJTEVfQ09NUFJFU1NJT05fVFlQRVNfVkFMVUVTLFxuICBGaWxlQ29tcHJlc3Npb25UeXBlcyxcbiAgRmlsZUdlbmVyYXRvcixcbiAgTUVBU1VSRU1FTlRTX1BSRVZJRVdfSVRFTVNfTElNSVQsXG4gIE1lcmdlZEV4cG9ydERldGFpbHMsXG4gIFNFUklFU19EQVRBX01FUkdFRF9GSUxFX05BTUUsXG4gIFNlcmllc0V4cG9ydFBhcmFtc1xufSBmcm9tICcuLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci5tb2RlbCc7XG5pbXBvcnQgeyBGSUxFX0dFTkVSQVRPUlMgfSBmcm9tICcuL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLWZpbGUtZXhwb3J0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4vdXRpbHMuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERhdGFQcm9jZXNzaW5nU2VydmljZSB7XG4gIG1lcmdlTWFwcGluZyA9IHt9O1xuICBmaWxlVHlwZXNDb25maWdzOiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgZXh0ZW5zaW9uOiBzdHJpbmc7XG4gICAgICBtaW1lVHlwZTogc3RyaW5nO1xuICAgICAgYWNjZXB0VHlwZTogc3RyaW5nO1xuICAgIH07XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChGSUxFX0dFTkVSQVRPUlMpIHByaXZhdGUgZmlsZUdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSxcbiAgICBwcml2YXRlIHV0aWxzOiBVdGlsc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXRHZW5lcmF0b3JzKHRoaXMuZmlsZUdlbmVyYXRvcnMpO1xuXG4gICAgdGhpcy5maWxlVHlwZXNDb25maWdzID0gdGhpcy5maWxlR2VuZXJhdG9ycy5yZWR1Y2UoKGFjYywgZykgPT4ge1xuICAgICAgYWNjW2cuZ2V0VHlwZSgpXSA9IHtcbiAgICAgICAgZXh0ZW5zaW9uOiBnLmdldEZpbGVFeHRlbnNpb24oKSxcbiAgICAgICAgbWltZVR5cGU6IGcuZ2V0TWltZVR5cGUoKSxcbiAgICAgICAgYWNjZXB0VHlwZTogZy5nZXRBY2NlcHRUeXBlKClcbiAgICAgIH07XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHNldEdlbmVyYXRvcnMoZmlsZUdlbmVyYXRvcnM6IEZpbGVHZW5lcmF0b3JbXSkge1xuICAgIGZpbGVHZW5lcmF0b3JzLmZvckVhY2goZyA9PiB7XG4gICAgICB0aGlzLm1lcmdlTWFwcGluZ1tnLmdldFR5cGUoKV0gPSBnLmdlbmVyYXRlTWVyZ2VkO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgdGhlIGRhdGEgaW50byBhIHN0cnVjdHVyZWQgZm9ybWF0IGZvciBhbiBleHBvcnQuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhVG9FeHBvcnQgLSBBbiBhcnJheSBvZiBwcm9jZXNzZWQgbWVhc3VyZW1lbnQgZGF0YSBjb21iaW5lZCB3aXRoIHRoZSByZXNwZWN0aXZlIHByb3BlcnRpZXMgb2YgdGhlIGRhdGFwb2ludC5cbiAgICogQHJldHVybnMgUHJvdmlkZXMgYSB0d28tZGltZW5zaW9uYWwgYXJyYXkgb2YgRXhwb3J0RGF0YSxcbiAgICogICAgICAgICAgd2hlcmUgZWFjaCBpbm5lciBhcnJheSBjb250YWlucyBFeHBvcnREYXRhIGVudHJpZXMgcmVwcmVzZW50aW5nIHRoZSB0cmFuc2Zvcm1lZCBtZWFzdXJlbWVudHMgYW5kIG1ldGFkYXRhIG9mIGVhY2ggZGF0YXBvaW50LlxuICAgKi9cbiAgdHJhbnNmb3JtVG9FeHBvcnRGaWxlU3RydWN0dXJlKGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0W10pOiBFeHBvcnREYXRhW11bXSB7XG4gICAgY29uc3QgZXhwb3J0RGF0YTogRXhwb3J0RGF0YVtdW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBkYXRhVG9FeHBvcnQpIHtcbiAgICAgIGNvbnN0IHJvd3NEYXRhOiBFeHBvcnREYXRhW10gPSB0aGlzLnByb2Nlc3NEYXRhVG9FeHBvcnQoZGF0YSk7XG4gICAgICBleHBvcnREYXRhLnB1c2gocm93c0RhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZXhwb3J0RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBkYXRhcG9pbnRzIHdpdGggdmFsdWVzIGludG8gYSBzdHJ1Y3R1cmVkIGZvcm1hdCBmb3IgYSBwcmV2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVRvRXhwb3J0IC0gQW4gYXJyYXkgb2YgcHJvY2Vzc2VkIG1lYXN1cmVtZW50IGRhdGEgY29tYmluZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBwcm9wZXJ0aWVzIG9mIHRoZSBkYXRhcG9pbnQuXG4gICAqIEByZXR1cm5zIFByb3ZpZGVzIGFuIGFycmF5IG9mIHVwIHRvIDUgRXhwb3J0RGF0YSBlbGVtZW50cyAobm8gbW9yZSBpcyBuZWVkZWQgZm9yIGEgcHJldmlldykgb3IgYW4gZW1wdHkgYXJyYXksXG4gICAqL1xuICB0cmFuc2Zvcm1Ub0V4cG9ydEZpbGVTdHJ1Y3R1cmVGb3JQcmV2aWV3KGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0W10pOiBFeHBvcnREYXRhW10ge1xuICAgIGNvbnN0IGRhdGEgPSBkYXRhVG9FeHBvcnQuZmluZChkYXRhID0+IHtcbiAgICAgIHJldHVybiBkYXRhICE9PSBudWxsICYmIGRhdGEudGltZVZhbHVlTWFwICYmIGRhdGEudW5pdDtcbiAgICB9KTtcblxuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydERhdGEgPSB0aGlzLnByb2Nlc3NEYXRhVG9FeHBvcnQoZGF0YSk7XG5cbiAgICByZXR1cm4gZXhwb3J0RGF0YS5zbGljZSgwLCBNRUFTVVJFTUVOVFNfUFJFVklFV19JVEVNU19MSU1JVCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGEgc2luZ2xlIGRhdGFUb0V4cG9ydCBhbmQgdHJhbnNmb3JtcyBpdCBpbnRvIGFuIGFycmF5IG9mIEV4cG9ydERhdGEuXG4gICAqXG4gICAqIFVzZWQgZnVydGhlciBmb3IgY3JlYXRpbmcgc2VyaWVzIGRhdGEgYmFzZWQgZXhwb3J0IGFuZCBhbHNvIGZvciBtZWFzdXJlbWVudHMgYW5kIHNlcmllcyBkYXRhIGJhc2VkIHByZXZpZXcuXG4gICAqIFNlcmllcyBkYXRhIHByb3ZpZGVzIG1pbiBhbmQgbWF4IHZhbHVlcyBmb3IgZWFjaCB0aW1lc3RhbXAuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhVG9FeHBvcnQgLSBBIHByb2Nlc3NlZCBtZWFzdXJlbWVudCBvciBzZXJpZXMgZGF0YSBjb21iaW5lZCB3aXRoIHRoZSByZXNwZWN0aXZlIHByb3BlcnRpZXMgb2YgdGhlIGRhdGFwb2ludCB0byBiZSBwcmVjZXNzZWRcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgRXhwb3J0RGF0YSByZXByZXNlbnRpbmcgdGhlIHByb2Nlc3NlZCBkYXRhcG9pbnQsXG4gICAqICAgICAgICAgIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSByb3cgZGF0YSBpbiB0aGUgZXhwb3J0ZWQgZmlsZXMgb3IgZm9yIHByZXZpZXcuXG4gICAqL1xuICBwcm9jZXNzRGF0YVRvRXhwb3J0KGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0KTogRXhwb3J0RGF0YVtdIHtcbiAgICBjb25zdCByb3dzRGF0YTogRXhwb3J0RGF0YVtdID0gW107XG5cbiAgICAvLyBXaGVuIG1lYXN1cmVtZW50cyBvciBzZXJpZXMgZGF0YSBpcyBub3QgYXZhaWxhYmxlLCBhZGQgYW4gZW1wdHkgaGVhZGVyIHJvdyB3aXRoIG9ubHkgZGV2aWNlX25hbWUsIHNvdXJjZSBhbmQgZnJhZ21lbnRfc2VyaWVzLlxuICAgIC8vIFRoaXMgZGF0YSBpcyBuZWVkZWQgbGF0ZXIgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGZpbGUgbmFtZSBhbmQgbWVyZ2VkIGZpbGUgaGVhZGVyIHN0cmluZy5cbiAgICBjb25zdCByZXNwb25zZURvZXNOb3RDb250YWluRGF0YSA9ICFkYXRhVG9FeHBvcnQudGltZVZhbHVlTWFwPy5zaXplICYmICFkYXRhVG9FeHBvcnQudW5pdDtcbiAgICBpZiAocmVzcG9uc2VEb2VzTm90Q29udGFpbkRhdGEpIHtcbiAgICAgIHJvd3NEYXRhLnB1c2goe1xuICAgICAgICB0aW1lOiBudWxsLFxuICAgICAgICBzb3VyY2U6IGRhdGFUb0V4cG9ydC5zb3VyY2UsXG4gICAgICAgIGRldmljZV9uYW1lOiBkYXRhVG9FeHBvcnQuZGV2aWNlTmFtZSxcbiAgICAgICAgZnJhZ21lbnRfc2VyaWVzOiBgJHtkYXRhVG9FeHBvcnQudmFsdWVGcmFnbWVudFR5cGV9LiR7ZGF0YVRvRXhwb3J0LnZhbHVlRnJhZ21lbnRTZXJpZXN9YCxcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHZhbHVlX21pbjogbnVsbCxcbiAgICAgICAgdmFsdWVfbWF4OiBudWxsLFxuICAgICAgICB1bml0OiBudWxsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByb3dzRGF0YTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFt0aW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YVRvRXhwb3J0LnRpbWVWYWx1ZU1hcCkpIHtcbiAgICAgIC8vIE1lYXN1cmVtZW50cyBkYXRhIGNvbnRhaW5zIG9ubHkgb25lIHZhbHVlIGFzIGEgbnVtYmVyLCBzZXJpZXMgZGF0YSBjb250YWlucyBvYmplY3Qgd2l0aCBtaW4gYW5kIG1heCB2YWx1ZXMuXG4gICAgICBjb25zdCBpc01lYXN1cmVtZW50RGF0YSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gICAgICBpZiAoaXNNZWFzdXJlbWVudERhdGEpIHtcbiAgICAgICAgcm93c0RhdGEucHVzaCh0aGlzLmNyZWF0ZUV4cG9ydERhdGEoZGF0YVRvRXhwb3J0LCB0aW1lLCBpc01lYXN1cmVtZW50RGF0YSwgdmFsdWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd3NEYXRhLnB1c2goXG4gICAgICAgICAgdGhpcy5jcmVhdGVFeHBvcnREYXRhKGRhdGFUb0V4cG9ydCwgdGltZSwgaXNNZWFzdXJlbWVudERhdGEsIHZhbHVlLm1pbiwgdmFsdWUubWF4KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm93c0RhdGE7XG4gIH1cblxuICBjcmVhdGVFeHBvcnREYXRhKFxuICAgIGRhdGFUb0V4cG9ydDogRGF0YVRvRXhwb3J0LFxuICAgIHRpbWU6IHN0cmluZyxcbiAgICBpc01lYXN1cmVtZW50OiBib29sZWFuLFxuICAgIHZhbHVlOiBudW1iZXIsXG4gICAgdmFsdWVNYXg/OiBudW1iZXJcbiAgKTogRXhwb3J0RGF0YSB7XG4gICAgY29uc3QgY29tbW9uRXhwb3J0RGF0YSA9IHtcbiAgICAgIHRpbWU6IG5ldyBEYXRlKHRpbWUpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzb3VyY2U6IGRhdGFUb0V4cG9ydC5zb3VyY2UsXG4gICAgICBkZXZpY2VfbmFtZTogZGF0YVRvRXhwb3J0LmRldmljZU5hbWUsXG4gICAgICBmcmFnbWVudF9zZXJpZXM6IGAke2RhdGFUb0V4cG9ydC52YWx1ZUZyYWdtZW50VHlwZX0uJHtkYXRhVG9FeHBvcnQudmFsdWVGcmFnbWVudFNlcmllc31gLFxuICAgICAgdW5pdDogZGF0YVRvRXhwb3J0LnVuaXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGlzTWVhc3VyZW1lbnRcbiAgICAgID8geyAuLi5jb21tb25FeHBvcnREYXRhLCB2YWx1ZSB9XG4gICAgICA6IHsgLi4uY29tbW9uRXhwb3J0RGF0YSwgdmFsdWVfbWluOiB2YWx1ZSwgdmFsdWVfbWF4OiB2YWx1ZU1heCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIGdpdmVuIGRhdGEgdG8gbWVyZ2VkIENTViBvciBFeGNlbCBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIGV4cG9ydERhdGEgLSBBbiBhcnJheSBjb250YWluaW5nIEV4cG9ydERhdGEgb2JqZWN0cyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBwYXJ0cyBvZiB0aGUgbWVyZ2VkIGZpbGUuXG4gICAqIEBwYXJhbSBmaWxlVHlwZSAtIEluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgZmlsZSB0byBiZSBleHBvcnRlZC5cbiAgICogQHBhcmFtIG1lcmdlZEV4cG9ydERldGFpbHMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0ZSByYW5nZSBmcm9tIHdoaWNoIHRoZSBleHBvcnQgd2FzIGNyZWF0ZWQgYW5kIGFnZ3JlZ2F0aW9uIHR5cGUuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdHMgY29udGFpbmluZyBmaWxlIG5hbWUgYW5kIGl0cyByZXNwZWN0aXZlIGNvbnRlbnQgYXMgQmxvYi5cbiAgICpcbiAgICogRXhhbXBsZSBvZiBleHBvcnRlZCBtZXJnZWQgZmlsZSBzdHJ1Y3R1cmU6XG4gICAqIGRhdGUgZnJvbVx0ZGF0ZSB0b1xuICAgKiAyMDI0LTA0LTE1VDEyOjE0OjAwLjAwMFpcdDIwMjQtMDctMTZUMTQ6MTQ6MjgrMDI6MDBcbiAgICogdGltZVx0ICAgICAgICAgICAgICAgICAgICAgICAgICBHNkZpdCAtPiBjOHlfQWNjZWxlcmF0aW9uLmFjY2VsZXJhdGlvblggW0ddXHRHNkZpdCAtPiBjOHlfQWNjZWxlcmF0aW9uLmFjY2VsZXJhdGlvblkgW0ddXG4gICAqIDIwMjQtMDUtMTNUMTM6NDU6MTAuNTAwKzAyOjAwXHQwLjAxMDkwMjYzNTk2MjQyNzNcdCAgICAgICAgICAgICAgICAgICAgICAgIDAuNzg5NDYxNjI4Mjc4MDY5XG4gICAqXG4gICAqIEV4YW1wbGUgb2YgZXhwb3J0ZWQgZmlsZSBuYW1lIGZvcm1hdDpcbiAgICogMDRkZWMyMzEyNDAtMDZkZWMyMzIzNTAueGxzeFxuICAgKi9cbiAgYXN5bmMgZXhwb3J0U2VyaWVzRGF0YVRvTWVyZ2VkRmlsZXMoXG4gICAgZXhwb3J0RGF0YTogRXhwb3J0RGF0YVtdLFxuICAgIGZpbGVUeXBlOiBzdHJpbmcsXG4gICAgbWVyZ2VkRXhwb3J0RGV0YWlsczogTWVyZ2VkRXhwb3J0RGV0YWlsc1xuICApOiBQcm9taXNlPEV4cG9ydGVkRmlsZT4ge1xuICAgIGNvbnN0IGZpbGVUeXBlQ29uZmlnID0gdGhpcy5maWxlVHlwZXNDb25maWdzW2ZpbGVUeXBlXTtcblxuICAgIG1lcmdlZEV4cG9ydERldGFpbHMuZGF0ZUZyb20gPSBuZXcgRGF0ZShtZXJnZWRFeHBvcnREZXRhaWxzLmRhdGVGcm9tKS50b0lTT1N0cmluZygpO1xuICAgIG1lcmdlZEV4cG9ydERldGFpbHMuZGF0ZVRvID0gbmV3IERhdGUobWVyZ2VkRXhwb3J0RGV0YWlscy5kYXRlVG8pLnRvSVNPU3RyaW5nKCk7XG5cbiAgICBjb25zdCBtZXJnZWRGaWxlQ29udGVudCA9IHRoaXMubWVyZ2VNYXBwaW5nW2ZpbGVUeXBlXShleHBvcnREYXRhLCBtZXJnZWRFeHBvcnREZXRhaWxzKTtcblxuICAgIGNvbnN0IG1lcmdlZEZpbGVOYW1lRGF0ZVJhbmdlID0gdGhpcy51dGlscy5nZXRGb3JtYXR0ZWREYXRlUmFuZ2UoXG4gICAgICBtZXJnZWRFeHBvcnREZXRhaWxzLmRhdGVGcm9tLFxuICAgICAgbWVyZ2VkRXhwb3J0RGV0YWlscy5kYXRlVG9cbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBmaWxlTmFtZTogYCR7bWVyZ2VkRmlsZU5hbWVEYXRlUmFuZ2V9LiR7ZmlsZVR5cGVDb25maWcuZXh0ZW5zaW9ufWAsXG4gICAgICBmaWxlRGF0YTogbmV3IEJsb2IoW2F3YWl0IG1lcmdlZEZpbGVDb250ZW50XSwgeyB0eXBlOiBmaWxlVHlwZUNvbmZpZy5taW1lVHlwZSB9KVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogWmlwcyBhbGwgY3JlYXRlZCBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVzIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGZpbGUgbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgY29udGVudCBhcyBCbG9icy5cbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBCbG9iIHJlcHJlc2VudGluZyB0aGUgZ2VuZXJhdGVkIHppcCBmaWxlLlxuICAgKi9cbiAgYXN5bmMgemlwRmlsZXMoZmlsZXM6IEV4cG9ydGVkRmlsZVtdKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgY29uc3QgemlwID0gbmV3IEpTWmlwKCk7XG5cbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgemlwLmZpbGUoZmlsZS5maWxlTmFtZSwgZmlsZS5maWxlRGF0YSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZW5lcmF0ZVppcEJsb2IoemlwLCBGSUxFX0NPTVBSRVNTSU9OX1RZUEVTX1ZBTFVFUy5kZWZsYXRlLCA5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoZSBnaXZlbiBkYXRhIHRvIENTViBvciBFeGNlbCBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIEFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgZm9yIHRoZSBleHBvcnQgYW5kIHppcCBwcm9jZXNzLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEJsb2IgcmVwcmVzZW50aW5nIHRoZSBleHBvcnRlZCBmaWxlLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0U2VyaWVzRGF0YShwYXJhbXM6IFNlcmllc0V4cG9ydFBhcmFtcyk6IFByb21pc2U8QmxvYj4ge1xuICAgIGNvbnN0IHsgZmxhdHRlbmVkQW5kU29ydGVkRXhwb3J0RGF0YSwgZmlsZVR5cGUsIG1lcmdlZEV4cG9ydERldGFpbHMgfSA9IHBhcmFtcztcbiAgICBjb25zdCBleHBvcnRlZE1lcmdlZEZpbGU6IEV4cG9ydGVkRmlsZSA9IGF3YWl0IHRoaXMuZXhwb3J0U2VyaWVzRGF0YVRvTWVyZ2VkRmlsZXMoXG4gICAgICBmbGF0dGVuZWRBbmRTb3J0ZWRFeHBvcnREYXRhLFxuICAgICAgZmlsZVR5cGUsXG4gICAgICBtZXJnZWRFeHBvcnREZXRhaWxzXG4gICAgKTtcblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0ZWRNZXJnZWRGaWxlLmZpbGVEYXRhXSwgeyB0eXBlOiBmaWxlVHlwZSB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShibG9iLCBTRVJJRVNfREFUQV9NRVJHRURfRklMRV9OQU1FLCB7XG4gICAgICB2YWx1ZTogZXhwb3J0ZWRNZXJnZWRGaWxlLmZpbGVOYW1lLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiBibG9iO1xuICB9XG5cbiAgY3JlYXRlRmlsZU5hbWUoc291cmNlOiBzdHJpbmcgfCBudW1iZXIsIGZyYWdtZW50U2VyaWVzOiBzdHJpbmcsIGZpbGVFeHRlbnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3NvdXJjZX1fJHtmcmFnbWVudFNlcmllc30uJHtmaWxlRXh0ZW5zaW9ufWA7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgemlwIGJsb2IgdXNpbmcgdGhlIHByb3ZpZGVkIHppcCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB6aXAgLSBUaGUgemlwIG9iamVjdCB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBibG9iLlxuICAgKiBAcGFyYW0gY29tcHJlc3Npb25UeXBlIC0gVGhlIGNvbXByZXNzaW9uIHR5cGUgZm9yIHRoZSB6aXAgZmlsZS4gJ1NUT1JFJyBpcyBubyBjb21wcmVzc2lvbiwgJ0RFRkxBVEUnIGlzIGNvbXByZXNzaW9uLlxuICAgKiBAcGFyYW0gY29tcHJlc3Npb25MZXZlbCAtIFRoZSBjb21wcmVzc2lvbiBsZXZlbCBmb3IgdGhlIHppcCBmaWxlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIExldmVsIDEgaXMgcXVpY2tlc3QsIDkgaXMgYmVzdCBjb21wcmVzc2VkLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEJsb2IgY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIHppcCBmaWxlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVppcEJsb2IoXG4gICAgemlwOiBKU1ppcCxcbiAgICBjb21wcmVzc2lvblR5cGU6IEZpbGVDb21wcmVzc2lvblR5cGVzID0gRklMRV9DT01QUkVTU0lPTl9UWVBFU19WQUxVRVMuc3RvcmUsXG4gICAgY29tcHJlc3Npb25MZXZlbCA9IDFcbiAgKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgY29uc3QgYmxvYiA9ICdibG9iJztcblxuICAgIGlmIChjb21wcmVzc2lvblR5cGUgPT09IEZJTEVfQ09NUFJFU1NJT05fVFlQRVNfVkFMVUVTLnN0b3JlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgemlwLmdlbmVyYXRlQXN5bmMoeyB0eXBlOiBibG9iIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgemlwLmdlbmVyYXRlQXN5bmMoe1xuICAgICAgdHlwZTogYmxvYixcbiAgICAgIGNvbXByZXNzaW9uOiBjb21wcmVzc2lvblR5cGUsXG4gICAgICBjb21wcmVzc2lvbk9wdGlvbnM6IHtcbiAgICAgICAgbGV2ZWw6IGNvbXByZXNzaW9uTGV2ZWxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1wcm9jZXNzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1tb2RhbC9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvci1maWxlLWV4cG9ydGVyL2RhdGEtcHJvY2Vzc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBSUwsNkJBQTZCLEVBRzdCLGdDQUFnQyxFQUVoQyw0QkFBNEIsRUFFN0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFLL0MsTUFBTSxPQUFPLHFCQUFxQjtJQVVoQyxZQUNtQyxjQUErQixFQUN4RCxLQUFtQjtRQURNLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtRQUN4RCxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBWDdCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBYWhCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUc7Z0JBQ2pCLFNBQVMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQy9CLFFBQVEsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLGFBQWEsRUFBRTthQUM5QixDQUFDO1lBQ0YsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsYUFBYSxDQUFDLGNBQStCO1FBQzNDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDhCQUE4QixDQUFDLFlBQTRCO1FBQ3pELE1BQU0sVUFBVSxHQUFtQixFQUFFLENBQUM7UUFFdEMsS0FBSyxNQUFNLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFFBQVEsR0FBaUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlELFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHdDQUF3QyxDQUFDLFlBQTRCO1FBQ25FLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEQsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxtQkFBbUIsQ0FBQyxZQUEwQjtRQUM1QyxNQUFNLFFBQVEsR0FBaUIsRUFBRSxDQUFDO1FBRWxDLGdJQUFnSTtRQUNoSSw4RkFBOEY7UUFDOUYsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDeEYsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1osSUFBSSxFQUFFLElBQUk7Z0JBQ1YsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO2dCQUMzQixXQUFXLEVBQUUsWUFBWSxDQUFDLFVBQVU7Z0JBQ3BDLGVBQWUsRUFBRSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3hGLEtBQUssRUFBRSxJQUFJO2dCQUNYLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFNBQVMsRUFBRSxJQUFJO2dCQUNmLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3RFLDhHQUE4RztZQUM5RyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztZQUNwRCxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyRixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sUUFBUSxDQUFDLElBQUksQ0FDWCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FDbkYsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGdCQUFnQixDQUNkLFlBQTBCLEVBQzFCLElBQVksRUFDWixhQUFzQixFQUN0QixLQUFhLEVBQ2IsUUFBaUI7UUFFakIsTUFBTSxnQkFBZ0IsR0FBRztZQUN2QixJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTTtZQUMzQixXQUFXLEVBQUUsWUFBWSxDQUFDLFVBQVU7WUFDcEMsZUFBZSxFQUFFLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixJQUFJLFlBQVksQ0FBQyxtQkFBbUIsRUFBRTtZQUN4RixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7U0FDeEIsQ0FBQztRQUVGLE9BQU8sYUFBYTtZQUNsQixDQUFDLENBQUMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLEtBQUssRUFBRTtZQUNoQyxDQUFDLENBQUMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNILEtBQUssQ0FBQyw2QkFBNkIsQ0FDakMsVUFBd0IsRUFDeEIsUUFBZ0IsRUFDaEIsbUJBQXdDO1FBRXhDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV2RCxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEYsbUJBQW1CLENBQUMsTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWhGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUV2RixNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQzlELG1CQUFtQixDQUFDLFFBQVEsRUFDNUIsbUJBQW1CLENBQUMsTUFBTSxDQUMzQixDQUFDO1FBQ0YsT0FBTztZQUNMLFFBQVEsRUFBRSxHQUFHLHVCQUF1QixJQUFJLGNBQWMsQ0FBQyxTQUFTLEVBQUU7WUFDbEUsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFxQjtRQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBRXhCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSw2QkFBNkIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQTBCO1FBQy9DLE1BQU0sRUFBRSw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDL0UsTUFBTSxrQkFBa0IsR0FBaUIsTUFBTSxJQUFJLENBQUMsNkJBQTZCLENBQy9FLDRCQUE0QixFQUM1QixRQUFRLEVBQ1IsbUJBQW1CLENBQ3BCLENBQUM7UUFFRixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFekUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLEVBQUU7WUFDeEQsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFFBQVE7WUFDbEMsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBdUIsRUFBRSxjQUFzQixFQUFFLGFBQXFCO1FBQ25GLE9BQU8sR0FBRyxNQUFNLElBQUksY0FBYyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLEtBQUssQ0FBQyxlQUFlLENBQzNCLEdBQVUsRUFDVixrQkFBd0MsNkJBQTZCLENBQUMsS0FBSyxFQUMzRSxnQkFBZ0IsR0FBRyxDQUFDO1FBRXBCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUVwQixJQUFJLGVBQWUsS0FBSyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1RCxPQUFPLE1BQU0sR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLE1BQU0sR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUM3QixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRSxlQUFlO1lBQzVCLGtCQUFrQixFQUFFO2dCQUNsQixLQUFLLEVBQUUsZ0JBQWdCO2FBQ3hCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FwUFUscUJBQXFCLGtCQVd0QixlQUFlO21IQVhkLHFCQUFxQixjQUZwQixNQUFNOzs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFZSSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBKU1ppcCBmcm9tICdqc3ppcCc7XG5pbXBvcnQge1xuICBEYXRhVG9FeHBvcnQsXG4gIEV4cG9ydERhdGEsXG4gIEV4cG9ydGVkRmlsZSxcbiAgRklMRV9DT01QUkVTU0lPTl9UWVBFU19WQUxVRVMsXG4gIEZpbGVDb21wcmVzc2lvblR5cGVzLFxuICBGaWxlR2VuZXJhdG9yLFxuICBNRUFTVVJFTUVOVFNfUFJFVklFV19JVEVNU19MSU1JVCxcbiAgTWVyZ2VkRXhwb3J0RGV0YWlscyxcbiAgU0VSSUVTX0RBVEFfTUVSR0VEX0ZJTEVfTkFNRSxcbiAgU2VyaWVzRXhwb3J0UGFyYW1zXG59IGZyb20gJy4uLy4uL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yLm1vZGVsJztcbmltcG9ydCB7IEZJTEVfR0VORVJBVE9SUyB9IGZyb20gJy4vZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3ItZmlsZS1leHBvcnRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi91dGlscy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVByb2Nlc3NpbmdTZXJ2aWNlIHtcbiAgbWVyZ2VNYXBwaW5nID0ge307XG4gIGZpbGVUeXBlc0NvbmZpZ3M6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBleHRlbnNpb246IHN0cmluZztcbiAgICAgIG1pbWVUeXBlOiBzdHJpbmc7XG4gICAgICBhY2NlcHRUeXBlOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEZJTEVfR0VORVJBVE9SUykgcHJpdmF0ZSBmaWxlR2VuZXJhdG9yczogRmlsZUdlbmVyYXRvcltdLFxuICAgIHByaXZhdGUgdXRpbHM6IFV0aWxzU2VydmljZVxuICApIHtcbiAgICB0aGlzLnNldEdlbmVyYXRvcnModGhpcy5maWxlR2VuZXJhdG9ycyk7XG5cbiAgICB0aGlzLmZpbGVUeXBlc0NvbmZpZ3MgPSB0aGlzLmZpbGVHZW5lcmF0b3JzLnJlZHVjZSgoYWNjLCBnKSA9PiB7XG4gICAgICBhY2NbZy5nZXRUeXBlKCldID0ge1xuICAgICAgICBleHRlbnNpb246IGcuZ2V0RmlsZUV4dGVuc2lvbigpLFxuICAgICAgICBtaW1lVHlwZTogZy5nZXRNaW1lVHlwZSgpLFxuICAgICAgICBhY2NlcHRUeXBlOiBnLmdldEFjY2VwdFR5cGUoKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG5cbiAgc2V0R2VuZXJhdG9ycyhmaWxlR2VuZXJhdG9yczogRmlsZUdlbmVyYXRvcltdKSB7XG4gICAgZmlsZUdlbmVyYXRvcnMuZm9yRWFjaChnID0+IHtcbiAgICAgIHRoaXMubWVyZ2VNYXBwaW5nW2cuZ2V0VHlwZSgpXSA9IGcuZ2VuZXJhdGVNZXJnZWQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgZGF0YSBpbnRvIGEgc3RydWN0dXJlZCBmb3JtYXQgZm9yIGFuIGV4cG9ydC5cbiAgICpcbiAgICogQHBhcmFtIGRhdGFUb0V4cG9ydCAtIEFuIGFycmF5IG9mIHByb2Nlc3NlZCBtZWFzdXJlbWVudCBkYXRhIGNvbWJpbmVkIHdpdGggdGhlIHJlc3BlY3RpdmUgcHJvcGVydGllcyBvZiB0aGUgZGF0YXBvaW50LlxuICAgKiBAcmV0dXJucyBQcm92aWRlcyBhIHR3by1kaW1lbnNpb25hbCBhcnJheSBvZiBFeHBvcnREYXRhLFxuICAgKiAgICAgICAgICB3aGVyZSBlYWNoIGlubmVyIGFycmF5IGNvbnRhaW5zIEV4cG9ydERhdGEgZW50cmllcyByZXByZXNlbnRpbmcgdGhlIHRyYW5zZm9ybWVkIG1lYXN1cmVtZW50cyBhbmQgbWV0YWRhdGEgb2YgZWFjaCBkYXRhcG9pbnQuXG4gICAqL1xuICB0cmFuc2Zvcm1Ub0V4cG9ydEZpbGVTdHJ1Y3R1cmUoZGF0YVRvRXhwb3J0OiBEYXRhVG9FeHBvcnRbXSk6IEV4cG9ydERhdGFbXVtdIHtcbiAgICBjb25zdCBleHBvcnREYXRhOiBFeHBvcnREYXRhW11bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGRhdGFUb0V4cG9ydCkge1xuICAgICAgY29uc3Qgcm93c0RhdGE6IEV4cG9ydERhdGFbXSA9IHRoaXMucHJvY2Vzc0RhdGFUb0V4cG9ydChkYXRhKTtcbiAgICAgIGV4cG9ydERhdGEucHVzaChyb3dzRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBleHBvcnREYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgdGhlIGlucHV0IGRhdGFwb2ludHMgd2l0aCB2YWx1ZXMgaW50byBhIHN0cnVjdHVyZWQgZm9ybWF0IGZvciBhIHByZXZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhVG9FeHBvcnQgLSBBbiBhcnJheSBvZiBwcm9jZXNzZWQgbWVhc3VyZW1lbnQgZGF0YSBjb21iaW5lZCB3aXRoIHRoZSByZXNwZWN0aXZlIHByb3BlcnRpZXMgb2YgdGhlIGRhdGFwb2ludC5cbiAgICogQHJldHVybnMgUHJvdmlkZXMgYW4gYXJyYXkgb2YgdXAgdG8gNSBFeHBvcnREYXRhIGVsZW1lbnRzIChubyBtb3JlIGlzIG5lZWRlZCBmb3IgYSBwcmV2aWV3KSBvciBhbiBlbXB0eSBhcnJheSxcbiAgICovXG4gIHRyYW5zZm9ybVRvRXhwb3J0RmlsZVN0cnVjdHVyZUZvclByZXZpZXcoZGF0YVRvRXhwb3J0OiBEYXRhVG9FeHBvcnRbXSk6IEV4cG9ydERhdGFbXSB7XG4gICAgY29uc3QgZGF0YSA9IGRhdGFUb0V4cG9ydC5maW5kKGRhdGEgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEgIT09IG51bGwgJiYgZGF0YS50aW1lVmFsdWVNYXA7XG4gICAgfSk7XG5cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBvcnREYXRhID0gdGhpcy5wcm9jZXNzRGF0YVRvRXhwb3J0KGRhdGEpO1xuXG4gICAgcmV0dXJuIGV4cG9ydERhdGEuc2xpY2UoMCwgTUVBU1VSRU1FTlRTX1BSRVZJRVdfSVRFTVNfTElNSVQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3NlcyBhIHNpbmdsZSBkYXRhVG9FeHBvcnQgYW5kIHRyYW5zZm9ybXMgaXQgaW50byBhbiBhcnJheSBvZiBFeHBvcnREYXRhLlxuICAgKlxuICAgKiBVc2VkIGZ1cnRoZXIgZm9yIGNyZWF0aW5nIHNlcmllcyBkYXRhIGJhc2VkIGV4cG9ydCBhbmQgYWxzbyBmb3IgbWVhc3VyZW1lbnRzIGFuZCBzZXJpZXMgZGF0YSBiYXNlZCBwcmV2aWV3LlxuICAgKiBTZXJpZXMgZGF0YSBwcm92aWRlcyBtaW4gYW5kIG1heCB2YWx1ZXMgZm9yIGVhY2ggdGltZXN0YW1wLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVRvRXhwb3J0IC0gQSBwcm9jZXNzZWQgbWVhc3VyZW1lbnQgb3Igc2VyaWVzIGRhdGEgY29tYmluZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBwcm9wZXJ0aWVzIG9mIHRoZSBkYXRhcG9pbnQgdG8gYmUgcHJlY2Vzc2VkXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIEV4cG9ydERhdGEgcmVwcmVzZW50aW5nIHRoZSBwcm9jZXNzZWQgZGF0YXBvaW50LFxuICAgKiAgICAgICAgICB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgcm93IGRhdGEgaW4gdGhlIGV4cG9ydGVkIGZpbGVzIG9yIGZvciBwcmV2aWV3LlxuICAgKi9cbiAgcHJvY2Vzc0RhdGFUb0V4cG9ydChkYXRhVG9FeHBvcnQ6IERhdGFUb0V4cG9ydCk6IEV4cG9ydERhdGFbXSB7XG4gICAgY29uc3Qgcm93c0RhdGE6IEV4cG9ydERhdGFbXSA9IFtdO1xuXG4gICAgLy8gV2hlbiBtZWFzdXJlbWVudHMgb3Igc2VyaWVzIGRhdGEgaXMgbm90IGF2YWlsYWJsZSwgYWRkIGFuIGVtcHR5IGhlYWRlciByb3cgd2l0aCBvbmx5IGRldmljZV9uYW1lLCBzb3VyY2UgYW5kIGZyYWdtZW50X3Nlcmllcy5cbiAgICAvLyBUaGlzIGRhdGEgaXMgbmVlZGVkIGxhdGVyIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBmaWxlIG5hbWUgYW5kIG1lcmdlZCBmaWxlIGhlYWRlciBzdHJpbmcuXG4gICAgY29uc3QgcmVzcG9uc2VEb2VzTm90Q29udGFpbkRhdGEgPSAhT2JqZWN0LmtleXMoZGF0YVRvRXhwb3J0LnRpbWVWYWx1ZU1hcCB8fCB7fSkubGVuZ3RoO1xuICAgIGlmIChyZXNwb25zZURvZXNOb3RDb250YWluRGF0YSkge1xuICAgICAgcm93c0RhdGEucHVzaCh7XG4gICAgICAgIHRpbWU6IG51bGwsXG4gICAgICAgIHNvdXJjZTogZGF0YVRvRXhwb3J0LnNvdXJjZSxcbiAgICAgICAgZGV2aWNlX25hbWU6IGRhdGFUb0V4cG9ydC5kZXZpY2VOYW1lLFxuICAgICAgICBmcmFnbWVudF9zZXJpZXM6IGAke2RhdGFUb0V4cG9ydC52YWx1ZUZyYWdtZW50VHlwZX0uJHtkYXRhVG9FeHBvcnQudmFsdWVGcmFnbWVudFNlcmllc31gLFxuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgdmFsdWVfbWluOiBudWxsLFxuICAgICAgICB2YWx1ZV9tYXg6IG51bGwsXG4gICAgICAgIHVuaXQ6IG51bGxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJvd3NEYXRhO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3RpbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhVG9FeHBvcnQudGltZVZhbHVlTWFwKSkge1xuICAgICAgLy8gTWVhc3VyZW1lbnRzIGRhdGEgY29udGFpbnMgb25seSBvbmUgdmFsdWUgYXMgYSBudW1iZXIsIHNlcmllcyBkYXRhIGNvbnRhaW5zIG9iamVjdCB3aXRoIG1pbiBhbmQgbWF4IHZhbHVlcy5cbiAgICAgIGNvbnN0IGlzTWVhc3VyZW1lbnREYXRhID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbiAgICAgIGlmIChpc01lYXN1cmVtZW50RGF0YSkge1xuICAgICAgICByb3dzRGF0YS5wdXNoKHRoaXMuY3JlYXRlRXhwb3J0RGF0YShkYXRhVG9FeHBvcnQsIHRpbWUsIGlzTWVhc3VyZW1lbnREYXRhLCB2YWx1ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93c0RhdGEucHVzaChcbiAgICAgICAgICB0aGlzLmNyZWF0ZUV4cG9ydERhdGEoZGF0YVRvRXhwb3J0LCB0aW1lLCBpc01lYXN1cmVtZW50RGF0YSwgdmFsdWUubWluLCB2YWx1ZS5tYXgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIGNyZWF0ZUV4cG9ydERhdGEoXG4gICAgZGF0YVRvRXhwb3J0OiBEYXRhVG9FeHBvcnQsXG4gICAgdGltZTogc3RyaW5nLFxuICAgIGlzTWVhc3VyZW1lbnQ6IGJvb2xlYW4sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICB2YWx1ZU1heD86IG51bWJlclxuICApOiBFeHBvcnREYXRhIHtcbiAgICBjb25zdCBjb21tb25FeHBvcnREYXRhID0ge1xuICAgICAgdGltZTogbmV3IERhdGUodGltZSkudG9JU09TdHJpbmcoKSxcbiAgICAgIHNvdXJjZTogZGF0YVRvRXhwb3J0LnNvdXJjZSxcbiAgICAgIGRldmljZV9uYW1lOiBkYXRhVG9FeHBvcnQuZGV2aWNlTmFtZSxcbiAgICAgIGZyYWdtZW50X3NlcmllczogYCR7ZGF0YVRvRXhwb3J0LnZhbHVlRnJhZ21lbnRUeXBlfS4ke2RhdGFUb0V4cG9ydC52YWx1ZUZyYWdtZW50U2VyaWVzfWAsXG4gICAgICB1bml0OiBkYXRhVG9FeHBvcnQudW5pdFxuICAgIH07XG5cbiAgICByZXR1cm4gaXNNZWFzdXJlbWVudFxuICAgICAgPyB7IC4uLmNvbW1vbkV4cG9ydERhdGEsIHZhbHVlIH1cbiAgICAgIDogeyAuLi5jb21tb25FeHBvcnREYXRhLCB2YWx1ZV9taW46IHZhbHVlLCB2YWx1ZV9tYXg6IHZhbHVlTWF4IH07XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyB0aGUgZ2l2ZW4gZGF0YSB0byBtZXJnZWQgQ1NWIG9yIEV4Y2VsIGZpbGVzLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwb3J0RGF0YSAtIEFuIGFycmF5IGNvbnRhaW5pbmcgRXhwb3J0RGF0YSBvYmplY3RzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHBhcnRzIG9mIHRoZSBtZXJnZWQgZmlsZS5cbiAgICogQHBhcmFtIGZpbGVUeXBlIC0gSW5kaWNhdGVzIHRoZSB0eXBlIG9mIHRoZSBmaWxlIHRvIGJlIGV4cG9ydGVkLlxuICAgKiBAcGFyYW0gbWVyZ2VkRXhwb3J0RGV0YWlscyAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRlIHJhbmdlIGZyb20gd2hpY2ggdGhlIGV4cG9ydCB3YXMgY3JlYXRlZCBhbmQgYWdncmVnYXRpb24gdHlwZS5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0cyBjb250YWluaW5nIGZpbGUgbmFtZSBhbmQgaXRzIHJlc3BlY3RpdmUgY29udGVudCBhcyBCbG9iLlxuICAgKlxuICAgKiBFeGFtcGxlIG9mIGV4cG9ydGVkIG1lcmdlZCBmaWxlIHN0cnVjdHVyZTpcbiAgICogZGF0ZSBmcm9tXHRkYXRlIHRvXG4gICAqIDIwMjQtMDQtMTVUMTI6MTQ6MDAuMDAwWlx0MjAyNC0wNy0xNlQxNDoxNDoyOCswMjowMFxuICAgKiB0aW1lXHQgICAgICAgICAgICAgICAgICAgICAgICAgIEc2Rml0IC0+IGM4eV9BY2NlbGVyYXRpb24uYWNjZWxlcmF0aW9uWCBbR11cdEc2Rml0IC0+IGM4eV9BY2NlbGVyYXRpb24uYWNjZWxlcmF0aW9uWSBbR11cbiAgICogMjAyNC0wNS0xM1QxMzo0NToxMC41MDArMDI6MDBcdDAuMDEwOTAyNjM1OTYyNDI3M1x0ICAgICAgICAgICAgICAgICAgICAgICAgMC43ODk0NjE2MjgyNzgwNjlcbiAgICpcbiAgICogRXhhbXBsZSBvZiBleHBvcnRlZCBmaWxlIG5hbWUgZm9ybWF0OlxuICAgKiAwNGRlYzIzMTI0MC0wNmRlYzIzMjM1MC54bHN4XG4gICAqL1xuICBhc3luYyBleHBvcnRTZXJpZXNEYXRhVG9NZXJnZWRGaWxlcyhcbiAgICBleHBvcnREYXRhOiBFeHBvcnREYXRhW10sXG4gICAgZmlsZVR5cGU6IHN0cmluZyxcbiAgICBtZXJnZWRFeHBvcnREZXRhaWxzOiBNZXJnZWRFeHBvcnREZXRhaWxzXG4gICk6IFByb21pc2U8RXhwb3J0ZWRGaWxlPiB7XG4gICAgY29uc3QgZmlsZVR5cGVDb25maWcgPSB0aGlzLmZpbGVUeXBlc0NvbmZpZ3NbZmlsZVR5cGVdO1xuXG4gICAgbWVyZ2VkRXhwb3J0RGV0YWlscy5kYXRlRnJvbSA9IG5ldyBEYXRlKG1lcmdlZEV4cG9ydERldGFpbHMuZGF0ZUZyb20pLnRvSVNPU3RyaW5nKCk7XG4gICAgbWVyZ2VkRXhwb3J0RGV0YWlscy5kYXRlVG8gPSBuZXcgRGF0ZShtZXJnZWRFeHBvcnREZXRhaWxzLmRhdGVUbykudG9JU09TdHJpbmcoKTtcblxuICAgIGNvbnN0IG1lcmdlZEZpbGVDb250ZW50ID0gdGhpcy5tZXJnZU1hcHBpbmdbZmlsZVR5cGVdKGV4cG9ydERhdGEsIG1lcmdlZEV4cG9ydERldGFpbHMpO1xuXG4gICAgY29uc3QgbWVyZ2VkRmlsZU5hbWVEYXRlUmFuZ2UgPSB0aGlzLnV0aWxzLmdldEZvcm1hdHRlZERhdGVSYW5nZShcbiAgICAgIG1lcmdlZEV4cG9ydERldGFpbHMuZGF0ZUZyb20sXG4gICAgICBtZXJnZWRFeHBvcnREZXRhaWxzLmRhdGVUb1xuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVOYW1lOiBgJHttZXJnZWRGaWxlTmFtZURhdGVSYW5nZX0uJHtmaWxlVHlwZUNvbmZpZy5leHRlbnNpb259YCxcbiAgICAgIGZpbGVEYXRhOiBuZXcgQmxvYihbYXdhaXQgbWVyZ2VkRmlsZUNvbnRlbnRdLCB7IHR5cGU6IGZpbGVUeXBlQ29uZmlnLm1pbWVUeXBlIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBaaXBzIGFsbCBjcmVhdGVkIGZpbGVzLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZXMgLSBBbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgZmlsZSBuYW1lcyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBjb250ZW50IGFzIEJsb2JzLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIEJsb2IgcmVwcmVzZW50aW5nIHRoZSBnZW5lcmF0ZWQgemlwIGZpbGUuXG4gICAqL1xuICBhc3luYyB6aXBGaWxlcyhmaWxlczogRXhwb3J0ZWRGaWxlW10pOiBQcm9taXNlPEJsb2I+IHtcbiAgICBjb25zdCB6aXAgPSBuZXcgSlNaaXAoKTtcblxuICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICB6aXAuZmlsZShmaWxlLmZpbGVOYW1lLCBmaWxlLmZpbGVEYXRhKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdlbmVyYXRlWmlwQmxvYih6aXAsIEZJTEVfQ09NUFJFU1NJT05fVFlQRVNfVkFMVUVTLmRlZmxhdGUsIDkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIGdpdmVuIGRhdGEgdG8gQ1NWIG9yIEV4Y2VsIGZpbGVzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmb3IgdGhlIGV4cG9ydCBhbmQgemlwIHByb2Nlc3MuXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgQmxvYiByZXByZXNlbnRpbmcgdGhlIGV4cG9ydGVkIGZpbGUuXG4gICAqL1xuICBhc3luYyBleHBvcnRTZXJpZXNEYXRhKHBhcmFtczogU2VyaWVzRXhwb3J0UGFyYW1zKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgY29uc3QgeyBmbGF0dGVuZWRBbmRTb3J0ZWRFeHBvcnREYXRhLCBmaWxlVHlwZSwgbWVyZ2VkRXhwb3J0RGV0YWlscyB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGV4cG9ydGVkTWVyZ2VkRmlsZTogRXhwb3J0ZWRGaWxlID0gYXdhaXQgdGhpcy5leHBvcnRTZXJpZXNEYXRhVG9NZXJnZWRGaWxlcyhcbiAgICAgIGZsYXR0ZW5lZEFuZFNvcnRlZEV4cG9ydERhdGEsXG4gICAgICBmaWxlVHlwZSxcbiAgICAgIG1lcmdlZEV4cG9ydERldGFpbHNcbiAgICApO1xuXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtleHBvcnRlZE1lcmdlZEZpbGUuZmlsZURhdGFdLCB7IHR5cGU6IGZpbGVUeXBlIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJsb2IsIFNFUklFU19EQVRBX01FUkdFRF9GSUxFX05BTUUsIHtcbiAgICAgIHZhbHVlOiBleHBvcnRlZE1lcmdlZEZpbGUuZmlsZU5hbWUsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJsb2I7XG4gIH1cblxuICBjcmVhdGVGaWxlTmFtZShzb3VyY2U6IHN0cmluZyB8IG51bWJlciwgZnJhZ21lbnRTZXJpZXM6IHN0cmluZywgZmlsZUV4dGVuc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7c291cmNlfV8ke2ZyYWdtZW50U2VyaWVzfS4ke2ZpbGVFeHRlbnNpb259YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSB6aXAgYmxvYiB1c2luZyB0aGUgcHJvdmlkZWQgemlwIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHppcCAtIFRoZSB6aXAgb2JqZWN0IHVzZWQgZm9yIGdlbmVyYXRpbmcgdGhlIGJsb2IuXG4gICAqIEBwYXJhbSBjb21wcmVzc2lvblR5cGUgLSBUaGUgY29tcHJlc3Npb24gdHlwZSBmb3IgdGhlIHppcCBmaWxlLiAnU1RPUkUnIGlzIG5vIGNvbXByZXNzaW9uLCAnREVGTEFURScgaXMgY29tcHJlc3Npb24uXG4gICAqIEBwYXJhbSBjb21wcmVzc2lvbkxldmVsIC0gVGhlIGNvbXByZXNzaW9uIGxldmVsIGZvciB0aGUgemlwIGZpbGUuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgTGV2ZWwgMSBpcyBxdWlja2VzdCwgOSBpcyBiZXN0IGNvbXByZXNzZWQuXG4gICAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgQmxvYiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgemlwIGZpbGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlWmlwQmxvYihcbiAgICB6aXA6IEpTWmlwLFxuICAgIGNvbXByZXNzaW9uVHlwZTogRmlsZUNvbXByZXNzaW9uVHlwZXMgPSBGSUxFX0NPTVBSRVNTSU9OX1RZUEVTX1ZBTFVFUy5zdG9yZSxcbiAgICBjb21wcmVzc2lvbkxldmVsID0gMVxuICApOiBQcm9taXNlPEJsb2I+IHtcbiAgICBjb25zdCBibG9iID0gJ2Jsb2InO1xuXG4gICAgaWYgKGNvbXByZXNzaW9uVHlwZSA9PT0gRklMRV9DT01QUkVTU0lPTl9UWVBFU19WQUxVRVMuc3RvcmUpIHtcbiAgICAgIHJldHVybiBhd2FpdCB6aXAuZ2VuZXJhdGVBc3luYyh7IHR5cGU6IGJsb2IgfSk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB6aXAuZ2VuZXJhdGVBc3luYyh7XG4gICAgICB0eXBlOiBibG9iLFxuICAgICAgY29tcHJlc3Npb246IGNvbXByZXNzaW9uVHlwZSxcbiAgICAgIGNvbXByZXNzaW9uT3B0aW9uczoge1xuICAgICAgICBsZXZlbDogY29tcHJlc3Npb25MZXZlbFxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|