@c8y/ngx-components 1021.22.138 → 1021.22.140

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.
@@ -164,7 +164,7 @@ export class DatapointSelectorListItemComponent {
164
164
  useExisting: forwardRef(() => DatapointSelectorListItemComponent),
165
165
  multi: true
166
166
  }
167
- ], queries: [{ propertyName: "dragHandle", first: true, predicate: ListItemDragHandleComponent, descendants: true }], ngImport: i0, template: "<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-16\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\" [title]=\"'Change color' | translate\">\n <div class=\"c8y-colorpicker\">\n <input\n type=\"color\"\n [attr.aria-label]=\"'Color' | translate\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n type=\"button\"\n [attr.aria-expanded]=\"!li.collapsed\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"\n errorMessage\n ? errorMessage\n : ('Some entries are invalid. Check the input fields with red borders.' | translate)\n \"\n triggers=\"focus\"\n placement=\"left\"\n container=\"body\"\n *ngIf=\"!(isValid$ | async)\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"showAddRemoveButton\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n class=\"btn btn-dot text-primary\"\n type=\"button\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n [delay]=\"500\"\n [disabled]=\"!(isValid$ | async)\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"!isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li-action\n *ngIf=\"optionToRemove\"\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-action\n *ngFor=\"let action of actions\"\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Fragment</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Series</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n <div\n class=\"form-group\"\n *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n >\n <label class=\"d-inline-block\" translate>Data point template</label>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n (click)=\"$event.stopPropagation()\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n ></button>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"d-flex\">\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n *ngIf=\"datapointLibraryEntries\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n <button\n class=\"btn btn-info btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"formGroup.value.__template\"\n >\n <i class=\"text-info\" c8yIcon=\"info\"></i>\n </button>\n <button\n class=\"btn btn-danger btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n triggers=\"mouseenter\"\n [delay]=\"500\"\n *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n </div>\n </div>\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n <c8y-datapoint-attributes-form\n *ngIf=\"defaultFormOptions\"\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n [selectableChartRenderTypes]=\"defaultFormOptions.selectableChartRenderTypes\"\n [selectableChartLineTypes]=\"defaultFormOptions.selectableChartLineTypes\"\n [selectableAxisTypes]=\"defaultFormOptions.selectableAxisTypes\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected", "highlightFirstItem"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i2.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "component", type: i2.ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.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: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i6.DatapointTemplatePopoverComponent, selector: "c8y-datapoint-template-popover", inputs: ["datapoint", "attributes"] }, { kind: "component", type: i7.DatapointAttributesFormComponent, selector: "c8y-datapoint-attributes-form", inputs: ["selectableChartRenderTypes", "selectableChartLineTypes", "selectableAxisTypes", "showTarget", "showRange", "showYellowRange", "showRedRange", "showChart", "showFormIfTemplateWasSelected"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
167
+ ], queries: [{ propertyName: "dragHandle", first: true, predicate: ListItemDragHandleComponent, descendants: true }], ngImport: i0, template: "<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-16\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\" [title]=\"'Change color' | translate\">\n <div class=\"c8y-colorpicker\">\n <input\n type=\"color\"\n [attr.aria-label]=\"'Color' | translate\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n type=\"button\"\n [attr.aria-expanded]=\"!li.collapsed\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"\n errorMessage\n ? errorMessage\n : ('Some entries are invalid. Check the input fields with red borders.' | translate)\n \"\n triggers=\"focus\"\n placement=\"left\"\n container=\"body\"\n *ngIf=\"!(isValid$ | async)\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"showAddRemoveButton\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n class=\"btn btn-dot text-primary\"\n type=\"button\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n [delay]=\"500\"\n [disabled]=\"!(isValid$ | async)\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"!isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li-action\n *ngIf=\"optionToRemove\"\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-action\n *ngFor=\"let action of actions\"\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label\n class=\"small m-b-0 m-r-8 a-s-start text-muted\"\n translate\n >\n Fragment\n </label>\n <span\n class=\"m-l-auto text-truncate\"\n title=\"{{ formGroup.value.fragment }}\"\n >\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label\n class=\"small m-b-0 m-r-8 a-s-start text-muted\"\n translate\n >\n Series\n </label>\n <span\n class=\"m-l-auto text-truncate\"\n title=\"{{ formGroup.value.series }}\"\n >\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n <div\n class=\"form-group\"\n *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n >\n <label class=\"d-inline-block\" translate>Data point template</label>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n (click)=\"$event.stopPropagation()\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n ></button>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"d-flex\">\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n *ngIf=\"datapointLibraryEntries\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n <button\n class=\"btn btn-info btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"formGroup.value.__template\"\n >\n <i class=\"text-info\" c8yIcon=\"info\"></i>\n </button>\n <button\n class=\"btn btn-danger btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n triggers=\"mouseenter\"\n [delay]=\"500\"\n *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n </div>\n </div>\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n <c8y-datapoint-attributes-form\n *ngIf=\"defaultFormOptions\"\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n [selectableChartRenderTypes]=\"defaultFormOptions.selectableChartRenderTypes\"\n [selectableChartLineTypes]=\"defaultFormOptions.selectableChartLineTypes\"\n [selectableAxisTypes]=\"defaultFormOptions.selectableAxisTypes\"\n [showErrorsImmediately]=\"true\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected", "highlightFirstItem"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i2.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "component", type: i2.ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.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: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i6.DatapointTemplatePopoverComponent, selector: "c8y-datapoint-template-popover", inputs: ["datapoint", "attributes"] }, { kind: "component", type: i7.DatapointAttributesFormComponent, selector: "c8y-datapoint-attributes-form", inputs: ["selectableChartRenderTypes", "selectableChartLineTypes", "selectableAxisTypes", "showTarget", "showRange", "showYellowRange", "showRedRange", "showChart", "showFormIfTemplateWasSelected", "showErrorsImmediately"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
168
168
  }
169
169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointSelectorListItemComponent, decorators: [{
170
170
  type: Component,
@@ -179,7 +179,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
179
179
  useExisting: forwardRef(() => DatapointSelectorListItemComponent),
180
180
  multi: true
181
181
  }
182
- ], template: "<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-16\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\" [title]=\"'Change color' | translate\">\n <div class=\"c8y-colorpicker\">\n <input\n type=\"color\"\n [attr.aria-label]=\"'Color' | translate\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n type=\"button\"\n [attr.aria-expanded]=\"!li.collapsed\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"\n errorMessage\n ? errorMessage\n : ('Some entries are invalid. Check the input fields with red borders.' | translate)\n \"\n triggers=\"focus\"\n placement=\"left\"\n container=\"body\"\n *ngIf=\"!(isValid$ | async)\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"showAddRemoveButton\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n class=\"btn btn-dot text-primary\"\n type=\"button\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n [delay]=\"500\"\n [disabled]=\"!(isValid$ | async)\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"!isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li-action\n *ngIf=\"optionToRemove\"\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-action\n *ngFor=\"let action of actions\"\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Fragment</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Series</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n <div\n class=\"form-group\"\n *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n >\n <label class=\"d-inline-block\" translate>Data point template</label>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n (click)=\"$event.stopPropagation()\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n ></button>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"d-flex\">\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n *ngIf=\"datapointLibraryEntries\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n <button\n class=\"btn btn-info btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"formGroup.value.__template\"\n >\n <i class=\"text-info\" c8yIcon=\"info\"></i>\n </button>\n <button\n class=\"btn btn-danger btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n triggers=\"mouseenter\"\n [delay]=\"500\"\n *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n </div>\n </div>\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n <c8y-datapoint-attributes-form\n *ngIf=\"defaultFormOptions\"\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n [selectableChartRenderTypes]=\"defaultFormOptions.selectableChartRenderTypes\"\n [selectableChartLineTypes]=\"defaultFormOptions.selectableChartLineTypes\"\n [selectableAxisTypes]=\"defaultFormOptions.selectableAxisTypes\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n" }]
182
+ ], template: "<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-16\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\" [title]=\"'Change color' | translate\">\n <div class=\"c8y-colorpicker\">\n <input\n type=\"color\"\n [attr.aria-label]=\"'Color' | translate\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n type=\"button\"\n [attr.aria-expanded]=\"!li.collapsed\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"\n errorMessage\n ? errorMessage\n : ('Some entries are invalid. Check the input fields with red borders.' | translate)\n \"\n triggers=\"focus\"\n placement=\"left\"\n container=\"body\"\n *ngIf=\"!(isValid$ | async)\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"showAddRemoveButton\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n class=\"btn btn-dot text-primary\"\n type=\"button\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n [delay]=\"500\"\n [disabled]=\"!(isValid$ | async)\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"!isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li-action\n *ngIf=\"optionToRemove\"\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-action\n *ngFor=\"let action of actions\"\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label\n class=\"small m-b-0 m-r-8 a-s-start text-muted\"\n translate\n >\n Fragment\n </label>\n <span\n class=\"m-l-auto text-truncate\"\n title=\"{{ formGroup.value.fragment }}\"\n >\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label\n class=\"small m-b-0 m-r-8 a-s-start text-muted\"\n translate\n >\n Series\n </label>\n <span\n class=\"m-l-auto text-truncate\"\n title=\"{{ formGroup.value.series }}\"\n >\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n <div\n class=\"form-group\"\n *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n >\n <label class=\"d-inline-block\" translate>Data point template</label>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n (click)=\"$event.stopPropagation()\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n ></button>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"d-flex\">\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n *ngIf=\"datapointLibraryEntries\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n <button\n class=\"btn btn-info btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"formGroup.value.__template\"\n >\n <i class=\"text-info\" c8yIcon=\"info\"></i>\n </button>\n <button\n class=\"btn btn-danger btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n triggers=\"mouseenter\"\n [delay]=\"500\"\n *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n </div>\n </div>\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n <c8y-datapoint-attributes-form\n *ngIf=\"defaultFormOptions\"\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n [selectableChartRenderTypes]=\"defaultFormOptions.selectableChartRenderTypes\"\n [selectableChartLineTypes]=\"defaultFormOptions.selectableChartLineTypes\"\n [selectableAxisTypes]=\"defaultFormOptions.selectableAxisTypes\"\n [showErrorsImmediately]=\"true\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n" }]
183
183
  }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { defaultFormOptions: [{
184
184
  type: Input
185
185
  }], isSelected: [{
@@ -218,4 +218,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
218
218
  type: ContentChild,
219
219
  args: [ListItemDragHandleComponent]
220
220
  }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LXNlbGVjdG9yLWxpc3QtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kYXRhcG9pbnQtc2VsZWN0b3IvZGF0YXBvaW50LXNlbGVjdG9yLWxpc3QtaXRlbS9kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2RhdGFwb2ludC1zZWxlY3Rvci9kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtL2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFHTCxXQUFXLEVBRVgsYUFBYSxFQUNiLGlCQUFpQixFQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBbUIsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRixPQUFPLEVBR0wsMEJBQTBCLEVBRzNCLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7OztBQWtCdEMsTUFBTSxPQUFPLGtDQUFrQztJQTBCN0MsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUF4Qm5DLHVCQUFrQixHQUEyQyxFQUFFLENBQUM7UUFDaEUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQix3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDM0IsYUFBUSxHQUFHLElBQUksQ0FB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUdyb3VwLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGb3JPZkZpbHRlclBpcGUsIExpc3RJdGVtRHJhZ0hhbmRsZUNvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50QWN0aW9uLFxuICBEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZyxcbiAgREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlQsXG4gIEtQSURldGFpbHMsXG4gIE1hbmFnZWRPYmplY3RLUElcbn0gZnJvbSAnLi4vZGF0YXBvaW50LXNlbGVjdGlvbi5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGFwb2ludFNlbGVjdG9yTGlzdEl0ZW1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhcG9pbnRTZWxlY3Rvckxpc3RJdGVtQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludFNlbGVjdG9yTGlzdEl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIGRlZmF1bHRGb3JtT3B0aW9uczogUGFydGlhbDxEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZz4gPSB7fTtcbiAgQElucHV0KCkgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0NvbGxhcHNlZCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBZGRSZW1vdmVCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBlZGl0YWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBY3RpdmVUb2dnbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aXZlVG9nZ2xlRGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd09wdGlvbnMgPSBmYWxzZTtcbiAgQElucHV0KCkgZGF0YXBvaW50TGlicmFyeUVudHJpZXM6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8TWFuYWdlZE9iamVjdEtQST4+O1xuICBASW5wdXQoKSBhY3Rpb25zOiBEYXRhcG9pbnRBY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBvcHRpb25Ub1JlbW92ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNVbmxpbmtUZW1wbGF0ZU9wdGlvbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgYWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEtQSURldGFpbHM+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxLUElEZXRhaWxzPigpO1xuICBASW5wdXQoKSBjb2xvclBpY2tlckRpc2FibGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzYWJsZVR5cGVhaGVhZElmU2VsZWN0ZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlnaGxpZ2h0VGV4dDogc3RyaW5nO1xuICBAQ29udGVudENoaWxkKExpc3RJdGVtRHJhZ0hhbmRsZUNvbXBvbmVudCkgZHJhZ0hhbmRsZTogTGlzdEl0ZW1EcmFnSGFuZGxlQ29tcG9uZW50O1xuXG4gIHBhdHRlcm4gPSAnJztcbiAgZmlsdGVyUGlwZTogRm9yT2ZGaWx0ZXJQaXBlPE1hbmFnZWRPYmplY3RLUEk+O1xuICBpc1ZhbGlkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZGV0YWlsczogW10sXG4gICAgICBjb2xvcjogW10sXG4gICAgICBfX2FjdGl2ZTogW10sXG4gICAgICBfX3RhcmdldDogW10sXG4gICAgICBmcmFnbWVudDogW10sXG4gICAgICBzZXJpZXM6IFtdLFxuICAgICAgX190ZW1wbGF0ZTogW11cbiAgICB9KTtcbiAgICB0aGlzLmlzVmFsaWQkID0gdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgICAgbWFwKHN0YXR1cyA9PiBzdGF0dXMgPT09ICdWQUxJRCcpLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUdyb3VwLnZhbGlkKVxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZShfY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwPy5pbnZhbGlkKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV07XG4gICAgICAgIGlmIChjb250cm9sLmludmFsaWQpIHtcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLmVycm9ycztcbiAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IE9iamVjdC52YWx1ZXMoZXJyb3JzKVswXS5tZXNzYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cD8udmFsaWQgPyBudWxsIDogeyBmb3JtSW52YWxpZDoge30gfTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHsgLi4ub2JqLCBkZXRhaWxzOiBvYmogfSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShtYXAodG1wID0+IHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRtcCkpKS5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmbik7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXA/LmRpc2FibGVkID09PSBpc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzRGlzYWJsZWQgPyB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCkgOiB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgfVxuXG4gIGNvbGxhcHNlKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSAhdGhpcy5pc0NvbGxhcHNlZDtcbiAgfVxuXG4gIGFkZE9yUmVtb3ZlSXRlbSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRoaXMuZm9ybUdyb3VwLnZhbHVlKTtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLnJlbW92ZWQuZW1pdCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkZWQuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIHRoaXMucmVtb3ZlZC5lbWl0KHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRoaXMuZm9ybUdyb3VwLnZhbHVlKSk7XG4gIH1cblxuICBzZXRQaXBlKGZpbHRlclN0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXR0ZXJuID0gZmlsdGVyU3RyO1xuICAgIHRoaXMuZmlsdGVyUGlwZSA9IHBpcGUoXG4gICAgICBtYXAoKGRhdGE6IE1hbmFnZWRPYmplY3RLUElbXSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJEYXRhcG9pbnRMYWJlbChkYXRhLCBmaWx0ZXJTdHIpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdW5saW5rRGF0YXBvaW50VGVtcGxhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlLmRldGFpbHMgfHwge307XG4gICAgdGhpcy5yZXNldFVudXNlZFByb3BlcnRpZXMoZGV0YWlscyk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IF9fdGVtcGxhdGU6IHVuZGVmaW5lZCwgZGV0YWlscyB9KTtcbiAgfVxuXG4gIGRhdGFQb2ludFRlbXBsYXRlU2VsZWN0ZWQodGVtcGxhdGU6IE1hbmFnZWRPYmplY3RLUEkpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzVG9Bc3NpZ246IEFycmF5PGtleW9mIEtQSURldGFpbHM+ID0gW1xuICAgICAgJ2NvbG9yJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAnbWluJyxcbiAgICAgICdtYXgnLFxuICAgICAgJ3llbGxvd1JhbmdlTWF4JyxcbiAgICAgICd5ZWxsb3dSYW5nZU1pbicsXG4gICAgICAncmVkUmFuZ2VNYXgnLFxuICAgICAgJ3JlZFJhbmdlTWluJyxcbiAgICAgICd0YXJnZXQnLFxuICAgICAgJ29yaWVudGF0aW9uJyxcbiAgICAgICd1bml0J1xuICAgIF07XG4gICAgY29uc3QgeyBmcmFnbWVudCwgc2VyaWVzLCBfX3RhcmdldCwgX19hY3RpdmUgfSA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlO1xuICAgIGNvbnN0IGRhdGFQb2ludDogS1BJRGV0YWlscyA9IHtcbiAgICAgIGZyYWdtZW50LFxuICAgICAgc2VyaWVzLFxuICAgICAgX19hY3RpdmUsXG4gICAgICBfX3RhcmdldCxcbiAgICAgIF9fdGVtcGxhdGU6IHRlbXBsYXRlLmlkXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzVG9Bc3NpZ24pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGVtcGxhdGVbREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdW2F0dHJpYnV0ZV07XG4gICAgICBkYXRhUG9pbnRbYXR0cmlidXRlXSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLndyaXRlVmFsdWUoZGF0YVBvaW50KTtcbiAgICB0aGlzLnNldFBpcGUoJycpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFVudXNlZFByb3BlcnRpZXMoZGV0YWlsczogUGFydGlhbDxLUElEZXRhaWxzPik6IHZvaWQge1xuICAgIGNvbnN0IHsgc2hvd1RhcmdldCwgc2hvd1llbGxvd1JhbmdlLCBzaG93UmVkUmFuZ2UgfSA9IHRoaXMuZGVmYXVsdEZvcm1PcHRpb25zO1xuICAgIGRldGFpbHMuX190ZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoIXNob3dUYXJnZXQpIHtcbiAgICAgIGRldGFpbHMudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIXNob3dZZWxsb3dSYW5nZSkge1xuICAgICAgZGV0YWlscy55ZWxsb3dSYW5nZU1pbiA9IHVuZGVmaW5lZDtcbiAgICAgIGRldGFpbHMueWVsbG93UmFuZ2VNYXggPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghc2hvd1JlZFJhbmdlKSB7XG4gICAgICBkZXRhaWxzLnJlZFJhbmdlTWluID0gdW5kZWZpbmVkO1xuICAgICAgZGV0YWlscy5yZWRSYW5nZU1heCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckRhdGFwb2ludExhYmVsKGtwaXM6IE1hbmFnZWRPYmplY3RLUElbXSwgZmlsdGVyU3RyOiBzdHJpbmcpOiBNYW5hZ2VkT2JqZWN0S1BJW10ge1xuICAgIHJldHVybiBrcGlzLmZpbHRlcihcbiAgICAgIChtbzogTWFuYWdlZE9iamVjdEtQSSkgPT5cbiAgICAgICAgbW9bREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdICYmXG4gICAgICAgIG1vW0RBVEFQT0lOVF9MSUJSQVJZX0ZSQUdNRU5UXS5sYWJlbCAmJlxuICAgICAgICB0eXBlb2YgbW9bREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdLmxhYmVsID09PSAnc3RyaW5nJyAmJlxuICAgICAgICBtb1tEQVRBUE9JTlRfTElCUkFSWV9GUkFHTUVOVF0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclN0ci50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRm9ybVZhbHVlKGZvcm1WYWx1ZTogYW55KSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgZm9ybVZhbHVlLmRldGFpbHMgfHwge30sIGZvcm1WYWx1ZSk7XG4gICAgZGVsZXRlIG9iai5kZXRhaWxzO1xuICAgIHJldHVybiBvYmo7XG4gIH1cbn1cbiIsIjxjOHktbGkgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fY29sbGFwc2UtLWNvbnRhaW5lci1zbWFsbFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgI2xpPlxuICA8Yzh5LWxpLWRyYWctaGFuZGxlPjxuZy1jb250ZW50IHNlbGVjdD1cImM4eS1saS1kcmFnLWhhbmRsZVwiPjwvbmctY29udGVudD48L2M4eS1saS1kcmFnLWhhbmRsZT5cbiAgPGM4eS1saS1jaGVja2JveFxuICAgIGNsYXNzPVwiYS1zLWNlbnRlciBwLXItMFwiXG4gICAgKm5nSWY9XCJzaG93QWN0aXZlVG9nZ2xlXCJcbiAgICBbZGlzcGxheUFzU3dpdGNoXT1cInRydWVcIlxuICAgIGZvcm1Db250cm9sTmFtZT1cIl9fYWN0aXZlXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPjwvYzh5LWxpLWNoZWNrYm94PlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBwLWwtMTZcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2NvbG9ycGlja2VyIHAtdC0wIHAtYi0wIHAtbC0wXCIgW3RpdGxlXT1cIidDaGFuZ2UgY29sb3InIHwgdHJhbnNsYXRlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYzh5LWNvbG9ycGlja2VyXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ29sb3InIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb2xvclwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZvcm1Hcm91cC52YWx1ZS5jb2xvclwiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGRhdGEtcG9pbnQtbGFiZWwgdGV4dC10cnVuY2F0ZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIWxpLmNvbGxhcHNlZFwiXG4gICAgICAoY2xpY2spPVwibGkuY29sbGFwc2VkID0gIWxpLmNvbGxhcHNlZFwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCIgW3RpdGxlXT1cImZvcm1Hcm91cC52YWx1ZS5kZXRhaWxzPy5sYWJlbFwiPlxuICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgIFt0ZXh0XT1cImZvcm1Hcm91cC52YWx1ZS5kZXRhaWxzPy5sYWJlbFwiXG4gICAgICAgICAgW3BhdHRlcm5dPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgICAgW3Nob3VsZFRyaW1QYXR0ZXJuXT1cInRydWVcIlxuICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LW11dGVkIGljb24tZmxleFwiICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGFyZ2V0XCI+XG4gICAgICAgIDxpIGM4eUljb249XCJleGNoYW5nZVwiPjwvaT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgZm9ybUdyb3VwLnZhbHVlLl9fdGFyZ2V0Lm5hbWUgfX08L3NwYW4+XG4gICAgICA8L3NtYWxsPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBidG4tZG90LS1kYW5nZXIgbS1sLWF1dG9cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidJbnZhbGlkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbcG9wb3Zlcl09XCJcbiAgICAgICAgZXJyb3JNZXNzYWdlXG4gICAgICAgICAgPyBlcnJvck1lc3NhZ2VcbiAgICAgICAgICA6ICgnU29tZSBlbnRyaWVzIGFyZSBpbnZhbGlkLiBDaGVjayB0aGUgaW5wdXQgZmllbGRzIHdpdGggcmVkIGJvcmRlcnMuJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAqbmdJZj1cIiEoaXNWYWxpZCQgfCBhc3luYylcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJ3YXJuaW5nXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJtLWwtYXV0byBhLXMtY2VudGVyIHAtci00XCIgKm5nSWY9XCJzaG93QWRkUmVtb3ZlQnV0dG9uXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgYnRuLWRvdC0tZGFuZ2VyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCInUmVtb3ZlIGZyb20gc2VsZWN0ZWQgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgIChjbGljayk9XCJhZGRPclJlbW92ZUl0ZW0oKVwiXG4gICAgICAgICpuZ0lmPVwiaXNTZWxlY3RlZFwiXG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0tLXJlbW92ZS1kYXRhcG9pbnQtYnV0dG9uJ1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbi0yMFwiIGM4eUljb249XCJtaW51cy1jaXJjbGVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCB0ZXh0LXByaW1hcnlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQWRkIHRvIHNlbGVjdGVkIGRhdGEgcG9pbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cIidBZGQgdG8gc2VsZWN0ZWQgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhKGlzVmFsaWQkIHwgYXN5bmMpXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZE9yUmVtb3ZlSXRlbSgpXCJcbiAgICAgICAgKm5nSWY9XCIhaXNTZWxlY3RlZFwiXG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0tLWFkZC1kYXRhcG9pbnQtYnV0dG9uJ1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwidGV4dC1wcmltYXJ5IGljb24tMjBcIiBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGM4eS1saS1hY3Rpb25cbiAgICAqbmdJZj1cIm9wdGlvblRvUmVtb3ZlXCJcbiAgICBbaWNvbl09XCInbWludXMtY2lyY2xlJ1wiXG4gICAgW2xhYmVsXT1cIidSZW1vdmUgZnJvbSBsaXN0JyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cInJlbW92ZSgpXCJcbiAgPjwvYzh5LWxpLWFjdGlvbj5cbiAgPGM4eS1saS1hY3Rpb25cbiAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIlxuICAgIFtpY29uXT1cImFjdGlvbi5pY29uXCJcbiAgICBbbGFiZWxdPVwiYWN0aW9uLmxhYmVsXCJcbiAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGZvcm1Hcm91cC52YWx1ZSlcIlxuICA+PC9jOHktbGktYWN0aW9uPlxuICA8Yzh5LWxpLWNvbGxhcHNlPlxuICAgIDxkaXYgY2xhc3M9XCJkYXRhLXBvaW50LWRldGFpbHNcIj5cbiAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgbS1iLTE2XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci04IGEtcy1zdGFydCB0ZXh0LW11dGVkXCIgdHJhbnNsYXRlPkZyYWdtZW50PC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICBbdGV4dF09XCJmb3JtR3JvdXAudmFsdWUuZnJhZ21lbnRcIlxuICAgICAgICAgICAgICBbcGF0dGVybl09XCJoaWdobGlnaHRUZXh0XCJcbiAgICAgICAgICAgICAgW3Nob3VsZFRyaW1QYXR0ZXJuXT1cInRydWVcIlxuICAgICAgICAgICAgPjwvYzh5LWhpZ2hsaWdodD5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLTggYS1zLXN0YXJ0IHRleHQtbXV0ZWRcIiB0cmFuc2xhdGU+U2VyaWVzPC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICBbdGV4dF09XCJmb3JtR3JvdXAudmFsdWUuc2VyaWVzXCJcbiAgICAgICAgICAgICAgW3BhdHRlcm5dPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgICAgICAgIFtzaG91bGRUcmltUGF0dGVybl09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICAgICAgKm5nSWY9XCJkYXRhcG9pbnRMaWJyYXJ5RW50cmllcyAmJiBkYXRhcG9pbnRMaWJyYXJ5RW50cmllcyB8IGFzeW5jIGFzIGxpYnJhcnlFbnRyaWVzXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiB0cmFuc2xhdGU+RGF0YSBwb2ludCB0ZW1wbGF0ZTwvbGFiZWw+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtwb3BvdmVyXT1cImRhdGFwb2ludEhpbnRQb3BvdmVyVGVtcGxhdGVcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGFwb2ludEhpbnRQb3BvdmVyVGVtcGxhdGU+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdVc2luZyBhIGRhdGEgcG9pbnQgdGVtcGxhdGUgc2V0cyBjb2xvciwgbGFiZWwsIHVuaXQgYW5kIHJhbmdlcy4gUmVtb3ZpbmcgdGhlIHRlbXBsYXRlIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB2YWx1ZXMgbWFudWFsbHkuJ1xuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8Yzh5LXR5cGVhaGVhZFxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3dcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidObyB0ZW1wbGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGVtcGxhdGUgPyBmb3JtR3JvdXAudmFsdWUuZGV0YWlscyA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgKG9uU2VhcmNoKT1cInNldFBpcGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzcGxheVByb3BlcnR5XT1cIidsYWJlbCdcIlxuICAgICAgICAgICAgW2hpZGVOZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImRhdGFwb2ludExpYnJhcnlFbnRyaWVzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1NlbGVjdGVkICYmIGRpc2FibGVUeXBlYWhlYWRJZlNlbGVjdGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1sLTggcC1yLTggYzh5LWxpc3RfX2l0ZW0tLWxpbmsgaW50ZXJhY3RcIlxuICAgICAgICAgICAgICAqYzh5Rm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZGF0YXBvaW50TGlicmFyeUVudHJpZXM7XG4gICAgICAgICAgICAgICAgbG9hZE1vcmU6ICdhdXRvJztcbiAgICAgICAgICAgICAgICBwaXBlOiBmaWx0ZXJQaXBlO1xuICAgICAgICAgICAgICAgIG5vdEZvdW5kOiBub3RGb3VuZFRlbXBsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkYXRhUG9pbnRUZW1wbGF0ZVNlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgW2FjdGl2ZV09XCJmb3JtR3JvdXAudmFsdWUuX190ZW1wbGF0ZSA9PT0gaXRlbS5pZFwiXG4gICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ21lbnVpdGVtJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktaGlnaGxpZ2h0IFt0ZXh0XT1cIml0ZW0uYzh5X0twaT8ubGFiZWxcIiBbcGF0dGVybl09XCJwYXR0ZXJuXCI+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgICAgICAgICA8Yzh5LWxpLWljb24gaWNvbj1cImNpcmNsZVwiIFtzdHlsZS5jb2xvcl09XCJpdGVtLmM4eV9LcGk/LmNvbG9yXCI+PC9jOHktbGktaWNvbj5cbiAgICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RGb3VuZFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8Yzh5LWxpIGNsYXNzPVwiYmctbGV2ZWwtMiBwLThcIiAqbmdJZj1cInBhdHRlcm4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPk5vIG1hdGNoIGZvdW5kLjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvYzh5LXR5cGVhaGVhZD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4taW5mbyBidG4teHMgYnRuLWljb24gYS1zLWNlbnRlciBtLWwtOFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0luZm8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtwb3BvdmVyXT1cImRhdGFwb2ludE92ZXJ2aWV3UG9wb3ZlclRlbXBsYXRlXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGVtcGxhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1pbmZvXCIgYzh5SWNvbj1cImluZm9cIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4teHMgYnRuLWljb24gYS1zLWNlbnRlciBtLWwtOFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnVW5saW5rIGRhdGEgcG9pbnQgdGVtcGxhdGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1VubGluayBkYXRhIHBvaW50IHRlbXBsYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0cmlnZ2Vycz1cIm1vdXNlZW50ZXJcIlxuICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC52YWx1ZS5fX3RlbXBsYXRlICYmIGhhc1VubGlua1RlbXBsYXRlT3B0aW9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1bmxpbmtEYXRhcG9pbnRUZW1wbGF0ZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwidW5saW5rXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNkYXRhcG9pbnRPdmVydmlld1BvcG92ZXJUZW1wbGF0ZT5cbiAgICAgICAgPGM4eS1kYXRhcG9pbnQtdGVtcGxhdGUtcG9wb3ZlclxuICAgICAgICAgIFtkYXRhcG9pbnRdPVwiZm9ybUdyb3VwLnZhbHVlLmRldGFpbHNcIlxuICAgICAgICA+PC9jOHktZGF0YXBvaW50LXRlbXBsYXRlLXBvcG92ZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGM4eS1kYXRhcG9pbnQtYXR0cmlidXRlcy1mb3JtXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdEZvcm1PcHRpb25zXCJcbiAgICAgICAgW3Nob3dUYXJnZXRdPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNob3dUYXJnZXRcIlxuICAgICAgICBbc2hvd1JhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93UmFuZ2VcIlxuICAgICAgICBbc2hvd1llbGxvd1JhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93WWVsbG93UmFuZ2VcIlxuICAgICAgICBbc2hvd1JlZFJhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93UmVkUmFuZ2VcIlxuICAgICAgICBbc2hvd0NoYXJ0XT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93Q2hhcnRcIlxuICAgICAgICBbc2hvd0Zvcm1JZlRlbXBsYXRlV2FzU2VsZWN0ZWRdPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNob3dGb3JtSWZUZW1wbGF0ZVdhc1NlbGVjdGVkXCJcbiAgICAgICAgW3NlbGVjdGFibGVDaGFydFJlbmRlclR5cGVzXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zZWxlY3RhYmxlQ2hhcnRSZW5kZXJUeXBlc1wiXG4gICAgICAgIFtzZWxlY3RhYmxlQ2hhcnRMaW5lVHlwZXNdPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNlbGVjdGFibGVDaGFydExpbmVUeXBlc1wiXG4gICAgICAgIFtzZWxlY3RhYmxlQXhpc1R5cGVzXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zZWxlY3RhYmxlQXhpc1R5cGVzXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGV0YWlsc1wiXG4gICAgICA+PC9jOHktZGF0YXBvaW50LWF0dHJpYnV0ZXMtZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9jOHktbGktY29sbGFwc2U+XG48L2M4eS1saT5cbiJdfQ==
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LXNlbGVjdG9yLWxpc3QtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kYXRhcG9pbnQtc2VsZWN0b3IvZGF0YXBvaW50LXNlbGVjdG9yLWxpc3QtaXRlbS9kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2RhdGFwb2ludC1zZWxlY3Rvci9kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtL2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFHTCxXQUFXLEVBRVgsYUFBYSxFQUNiLGlCQUFpQixFQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBbUIsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRixPQUFPLEVBR0wsMEJBQTBCLEVBRzNCLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7OztBQWtCdEMsTUFBTSxPQUFPLGtDQUFrQztJQTBCN0MsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUF4Qm5DLHVCQUFrQixHQUEyQyxFQUFFLENBQUM7UUFDaEUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQix3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDM0IsYUFBUSxHQUFHLElBQUksQ0FB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUdyb3VwLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGb3JPZkZpbHRlclBpcGUsIExpc3RJdGVtRHJhZ0hhbmRsZUNvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50QWN0aW9uLFxuICBEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZyxcbiAgREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlQsXG4gIEtQSURldGFpbHMsXG4gIE1hbmFnZWRPYmplY3RLUElcbn0gZnJvbSAnLi4vZGF0YXBvaW50LXNlbGVjdGlvbi5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGFwb2ludFNlbGVjdG9yTGlzdEl0ZW1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhcG9pbnRTZWxlY3Rvckxpc3RJdGVtQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludFNlbGVjdG9yTGlzdEl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIGRlZmF1bHRGb3JtT3B0aW9uczogUGFydGlhbDxEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZz4gPSB7fTtcbiAgQElucHV0KCkgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0NvbGxhcHNlZCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBZGRSZW1vdmVCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBlZGl0YWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBY3RpdmVUb2dnbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aXZlVG9nZ2xlRGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd09wdGlvbnMgPSBmYWxzZTtcbiAgQElucHV0KCkgZGF0YXBvaW50TGlicmFyeUVudHJpZXM6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8TWFuYWdlZE9iamVjdEtQST4+O1xuICBASW5wdXQoKSBhY3Rpb25zOiBEYXRhcG9pbnRBY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBvcHRpb25Ub1JlbW92ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNVbmxpbmtUZW1wbGF0ZU9wdGlvbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgYWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEtQSURldGFpbHM+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxLUElEZXRhaWxzPigpO1xuICBASW5wdXQoKSBjb2xvclBpY2tlckRpc2FibGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzYWJsZVR5cGVhaGVhZElmU2VsZWN0ZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlnaGxpZ2h0VGV4dDogc3RyaW5nO1xuICBAQ29udGVudENoaWxkKExpc3RJdGVtRHJhZ0hhbmRsZUNvbXBvbmVudCkgZHJhZ0hhbmRsZTogTGlzdEl0ZW1EcmFnSGFuZGxlQ29tcG9uZW50O1xuXG4gIHBhdHRlcm4gPSAnJztcbiAgZmlsdGVyUGlwZTogRm9yT2ZGaWx0ZXJQaXBlPE1hbmFnZWRPYmplY3RLUEk+O1xuICBpc1ZhbGlkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZGV0YWlsczogW10sXG4gICAgICBjb2xvcjogW10sXG4gICAgICBfX2FjdGl2ZTogW10sXG4gICAgICBfX3RhcmdldDogW10sXG4gICAgICBmcmFnbWVudDogW10sXG4gICAgICBzZXJpZXM6IFtdLFxuICAgICAgX190ZW1wbGF0ZTogW11cbiAgICB9KTtcbiAgICB0aGlzLmlzVmFsaWQkID0gdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgICAgbWFwKHN0YXR1cyA9PiBzdGF0dXMgPT09ICdWQUxJRCcpLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUdyb3VwLnZhbGlkKVxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZShfY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwPy5pbnZhbGlkKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV07XG4gICAgICAgIGlmIChjb250cm9sLmludmFsaWQpIHtcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLmVycm9ycztcbiAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IE9iamVjdC52YWx1ZXMoZXJyb3JzKVswXS5tZXNzYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cD8udmFsaWQgPyBudWxsIDogeyBmb3JtSW52YWxpZDoge30gfTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHsgLi4ub2JqLCBkZXRhaWxzOiBvYmogfSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShtYXAodG1wID0+IHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRtcCkpKS5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmbik7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXA/LmRpc2FibGVkID09PSBpc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzRGlzYWJsZWQgPyB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCkgOiB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgfVxuXG4gIGNvbGxhcHNlKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSAhdGhpcy5pc0NvbGxhcHNlZDtcbiAgfVxuXG4gIGFkZE9yUmVtb3ZlSXRlbSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRoaXMuZm9ybUdyb3VwLnZhbHVlKTtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLnJlbW92ZWQuZW1pdCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkZWQuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIHRoaXMucmVtb3ZlZC5lbWl0KHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRoaXMuZm9ybUdyb3VwLnZhbHVlKSk7XG4gIH1cblxuICBzZXRQaXBlKGZpbHRlclN0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXR0ZXJuID0gZmlsdGVyU3RyO1xuICAgIHRoaXMuZmlsdGVyUGlwZSA9IHBpcGUoXG4gICAgICBtYXAoKGRhdGE6IE1hbmFnZWRPYmplY3RLUElbXSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJEYXRhcG9pbnRMYWJlbChkYXRhLCBmaWx0ZXJTdHIpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdW5saW5rRGF0YXBvaW50VGVtcGxhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlLmRldGFpbHMgfHwge307XG4gICAgdGhpcy5yZXNldFVudXNlZFByb3BlcnRpZXMoZGV0YWlscyk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IF9fdGVtcGxhdGU6IHVuZGVmaW5lZCwgZGV0YWlscyB9KTtcbiAgfVxuXG4gIGRhdGFQb2ludFRlbXBsYXRlU2VsZWN0ZWQodGVtcGxhdGU6IE1hbmFnZWRPYmplY3RLUEkpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzVG9Bc3NpZ246IEFycmF5PGtleW9mIEtQSURldGFpbHM+ID0gW1xuICAgICAgJ2NvbG9yJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAnbWluJyxcbiAgICAgICdtYXgnLFxuICAgICAgJ3llbGxvd1JhbmdlTWF4JyxcbiAgICAgICd5ZWxsb3dSYW5nZU1pbicsXG4gICAgICAncmVkUmFuZ2VNYXgnLFxuICAgICAgJ3JlZFJhbmdlTWluJyxcbiAgICAgICd0YXJnZXQnLFxuICAgICAgJ29yaWVudGF0aW9uJyxcbiAgICAgICd1bml0J1xuICAgIF07XG4gICAgY29uc3QgeyBmcmFnbWVudCwgc2VyaWVzLCBfX3RhcmdldCwgX19hY3RpdmUgfSA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlO1xuICAgIGNvbnN0IGRhdGFQb2ludDogS1BJRGV0YWlscyA9IHtcbiAgICAgIGZyYWdtZW50LFxuICAgICAgc2VyaWVzLFxuICAgICAgX19hY3RpdmUsXG4gICAgICBfX3RhcmdldCxcbiAgICAgIF9fdGVtcGxhdGU6IHRlbXBsYXRlLmlkXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzVG9Bc3NpZ24pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGVtcGxhdGVbREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdW2F0dHJpYnV0ZV07XG4gICAgICBkYXRhUG9pbnRbYXR0cmlidXRlXSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLndyaXRlVmFsdWUoZGF0YVBvaW50KTtcbiAgICB0aGlzLnNldFBpcGUoJycpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFVudXNlZFByb3BlcnRpZXMoZGV0YWlsczogUGFydGlhbDxLUElEZXRhaWxzPik6IHZvaWQge1xuICAgIGNvbnN0IHsgc2hvd1RhcmdldCwgc2hvd1llbGxvd1JhbmdlLCBzaG93UmVkUmFuZ2UgfSA9IHRoaXMuZGVmYXVsdEZvcm1PcHRpb25zO1xuICAgIGRldGFpbHMuX190ZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoIXNob3dUYXJnZXQpIHtcbiAgICAgIGRldGFpbHMudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIXNob3dZZWxsb3dSYW5nZSkge1xuICAgICAgZGV0YWlscy55ZWxsb3dSYW5nZU1pbiA9IHVuZGVmaW5lZDtcbiAgICAgIGRldGFpbHMueWVsbG93UmFuZ2VNYXggPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghc2hvd1JlZFJhbmdlKSB7XG4gICAgICBkZXRhaWxzLnJlZFJhbmdlTWluID0gdW5kZWZpbmVkO1xuICAgICAgZGV0YWlscy5yZWRSYW5nZU1heCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckRhdGFwb2ludExhYmVsKGtwaXM6IE1hbmFnZWRPYmplY3RLUElbXSwgZmlsdGVyU3RyOiBzdHJpbmcpOiBNYW5hZ2VkT2JqZWN0S1BJW10ge1xuICAgIHJldHVybiBrcGlzLmZpbHRlcihcbiAgICAgIChtbzogTWFuYWdlZE9iamVjdEtQSSkgPT5cbiAgICAgICAgbW9bREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdICYmXG4gICAgICAgIG1vW0RBVEFQT0lOVF9MSUJSQVJZX0ZSQUdNRU5UXS5sYWJlbCAmJlxuICAgICAgICB0eXBlb2YgbW9bREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdLmxhYmVsID09PSAnc3RyaW5nJyAmJlxuICAgICAgICBtb1tEQVRBUE9JTlRfTElCUkFSWV9GUkFHTUVOVF0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclN0ci50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRm9ybVZhbHVlKGZvcm1WYWx1ZTogYW55KSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgZm9ybVZhbHVlLmRldGFpbHMgfHwge30sIGZvcm1WYWx1ZSk7XG4gICAgZGVsZXRlIG9iai5kZXRhaWxzO1xuICAgIHJldHVybiBvYmo7XG4gIH1cbn1cbiIsIjxjOHktbGkgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fY29sbGFwc2UtLWNvbnRhaW5lci1zbWFsbFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgI2xpPlxuICA8Yzh5LWxpLWRyYWctaGFuZGxlPjxuZy1jb250ZW50IHNlbGVjdD1cImM4eS1saS1kcmFnLWhhbmRsZVwiPjwvbmctY29udGVudD48L2M4eS1saS1kcmFnLWhhbmRsZT5cbiAgPGM4eS1saS1jaGVja2JveFxuICAgIGNsYXNzPVwiYS1zLWNlbnRlciBwLXItMFwiXG4gICAgKm5nSWY9XCJzaG93QWN0aXZlVG9nZ2xlXCJcbiAgICBbZGlzcGxheUFzU3dpdGNoXT1cInRydWVcIlxuICAgIGZvcm1Db250cm9sTmFtZT1cIl9fYWN0aXZlXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPjwvYzh5LWxpLWNoZWNrYm94PlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBwLWwtMTZcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2NvbG9ycGlja2VyIHAtdC0wIHAtYi0wIHAtbC0wXCIgW3RpdGxlXT1cIidDaGFuZ2UgY29sb3InIHwgdHJhbnNsYXRlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYzh5LWNvbG9ycGlja2VyXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ29sb3InIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb2xvclwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZvcm1Hcm91cC52YWx1ZS5jb2xvclwiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGRhdGEtcG9pbnQtbGFiZWwgdGV4dC10cnVuY2F0ZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIWxpLmNvbGxhcHNlZFwiXG4gICAgICAoY2xpY2spPVwibGkuY29sbGFwc2VkID0gIWxpLmNvbGxhcHNlZFwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCIgW3RpdGxlXT1cImZvcm1Hcm91cC52YWx1ZS5kZXRhaWxzPy5sYWJlbFwiPlxuICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgIFt0ZXh0XT1cImZvcm1Hcm91cC52YWx1ZS5kZXRhaWxzPy5sYWJlbFwiXG4gICAgICAgICAgW3BhdHRlcm5dPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgICAgW3Nob3VsZFRyaW1QYXR0ZXJuXT1cInRydWVcIlxuICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LW11dGVkIGljb24tZmxleFwiICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGFyZ2V0XCI+XG4gICAgICAgIDxpIGM4eUljb249XCJleGNoYW5nZVwiPjwvaT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgZm9ybUdyb3VwLnZhbHVlLl9fdGFyZ2V0Lm5hbWUgfX08L3NwYW4+XG4gICAgICA8L3NtYWxsPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBidG4tZG90LS1kYW5nZXIgbS1sLWF1dG9cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidJbnZhbGlkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbcG9wb3Zlcl09XCJcbiAgICAgICAgZXJyb3JNZXNzYWdlXG4gICAgICAgICAgPyBlcnJvck1lc3NhZ2VcbiAgICAgICAgICA6ICgnU29tZSBlbnRyaWVzIGFyZSBpbnZhbGlkLiBDaGVjayB0aGUgaW5wdXQgZmllbGRzIHdpdGggcmVkIGJvcmRlcnMuJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAqbmdJZj1cIiEoaXNWYWxpZCQgfCBhc3luYylcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJ3YXJuaW5nXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJtLWwtYXV0byBhLXMtY2VudGVyIHAtci00XCIgKm5nSWY9XCJzaG93QWRkUmVtb3ZlQnV0dG9uXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgYnRuLWRvdC0tZGFuZ2VyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCInUmVtb3ZlIGZyb20gc2VsZWN0ZWQgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgIChjbGljayk9XCJhZGRPclJlbW92ZUl0ZW0oKVwiXG4gICAgICAgICpuZ0lmPVwiaXNTZWxlY3RlZFwiXG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0tLXJlbW92ZS1kYXRhcG9pbnQtYnV0dG9uJ1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbi0yMFwiIGM4eUljb249XCJtaW51cy1jaXJjbGVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCB0ZXh0LXByaW1hcnlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQWRkIHRvIHNlbGVjdGVkIGRhdGEgcG9pbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cIidBZGQgdG8gc2VsZWN0ZWQgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhKGlzVmFsaWQkIHwgYXN5bmMpXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZE9yUmVtb3ZlSXRlbSgpXCJcbiAgICAgICAgKm5nSWY9XCIhaXNTZWxlY3RlZFwiXG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0tLWFkZC1kYXRhcG9pbnQtYnV0dG9uJ1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwidGV4dC1wcmltYXJ5IGljb24tMjBcIiBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGM4eS1saS1hY3Rpb25cbiAgICAqbmdJZj1cIm9wdGlvblRvUmVtb3ZlXCJcbiAgICBbaWNvbl09XCInbWludXMtY2lyY2xlJ1wiXG4gICAgW2xhYmVsXT1cIidSZW1vdmUgZnJvbSBsaXN0JyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cInJlbW92ZSgpXCJcbiAgPjwvYzh5LWxpLWFjdGlvbj5cbiAgPGM4eS1saS1hY3Rpb25cbiAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIlxuICAgIFtpY29uXT1cImFjdGlvbi5pY29uXCJcbiAgICBbbGFiZWxdPVwiYWN0aW9uLmxhYmVsXCJcbiAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGZvcm1Hcm91cC52YWx1ZSlcIlxuICA+PC9jOHktbGktYWN0aW9uPlxuICA8Yzh5LWxpLWNvbGxhcHNlPlxuICAgIDxkaXYgY2xhc3M9XCJkYXRhLXBvaW50LWRldGFpbHNcIj5cbiAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgbS1iLTE2XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItOCBhLXMtc3RhcnQgdGV4dC1tdXRlZFwiXG4gICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICBGcmFnbWVudFxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwibS1sLWF1dG8gdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICB0aXRsZT1cInt7IGZvcm1Hcm91cC52YWx1ZS5mcmFnbWVudCB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGM4eS1oaWdobGlnaHRcbiAgICAgICAgICAgICAgW3RleHRdPVwiZm9ybUdyb3VwLnZhbHVlLmZyYWdtZW50XCJcbiAgICAgICAgICAgICAgW3BhdHRlcm5dPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgICAgICAgIFtzaG91bGRUcmltUGF0dGVybl09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9XCJwLXQtNCBwLWItNCBkLWZsZXggc2VwYXJhdG9yLWJvdHRvbVwiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJzbWFsbCBtLWItMCBtLXItOCBhLXMtc3RhcnQgdGV4dC1tdXRlZFwiXG4gICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICBTZXJpZXNcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cIm0tbC1hdXRvIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBmb3JtR3JvdXAudmFsdWUuc2VyaWVzIH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICBbdGV4dF09XCJmb3JtR3JvdXAudmFsdWUuc2VyaWVzXCJcbiAgICAgICAgICAgICAgW3BhdHRlcm5dPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgICAgICAgIFtzaG91bGRUcmltUGF0dGVybl09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICAgICAgKm5nSWY9XCJkYXRhcG9pbnRMaWJyYXJ5RW50cmllcyAmJiBkYXRhcG9pbnRMaWJyYXJ5RW50cmllcyB8IGFzeW5jIGFzIGxpYnJhcnlFbnRyaWVzXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiB0cmFuc2xhdGU+RGF0YSBwb2ludCB0ZW1wbGF0ZTwvbGFiZWw+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtwb3BvdmVyXT1cImRhdGFwb2ludEhpbnRQb3BvdmVyVGVtcGxhdGVcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGFwb2ludEhpbnRQb3BvdmVyVGVtcGxhdGU+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdVc2luZyBhIGRhdGEgcG9pbnQgdGVtcGxhdGUgc2V0cyBjb2xvciwgbGFiZWwsIHVuaXQgYW5kIHJhbmdlcy4gUmVtb3ZpbmcgdGhlIHRlbXBsYXRlIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB2YWx1ZXMgbWFudWFsbHkuJ1xuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8Yzh5LXR5cGVhaGVhZFxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3dcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidObyB0ZW1wbGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGVtcGxhdGUgPyBmb3JtR3JvdXAudmFsdWUuZGV0YWlscyA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgKG9uU2VhcmNoKT1cInNldFBpcGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzcGxheVByb3BlcnR5XT1cIidsYWJlbCdcIlxuICAgICAgICAgICAgW2hpZGVOZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImRhdGFwb2ludExpYnJhcnlFbnRyaWVzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1NlbGVjdGVkICYmIGRpc2FibGVUeXBlYWhlYWRJZlNlbGVjdGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1sLTggcC1yLTggYzh5LWxpc3RfX2l0ZW0tLWxpbmsgaW50ZXJhY3RcIlxuICAgICAgICAgICAgICAqYzh5Rm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZGF0YXBvaW50TGlicmFyeUVudHJpZXM7XG4gICAgICAgICAgICAgICAgbG9hZE1vcmU6ICdhdXRvJztcbiAgICAgICAgICAgICAgICBwaXBlOiBmaWx0ZXJQaXBlO1xuICAgICAgICAgICAgICAgIG5vdEZvdW5kOiBub3RGb3VuZFRlbXBsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkYXRhUG9pbnRUZW1wbGF0ZVNlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgW2FjdGl2ZV09XCJmb3JtR3JvdXAudmFsdWUuX190ZW1wbGF0ZSA9PT0gaXRlbS5pZFwiXG4gICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ21lbnVpdGVtJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktaGlnaGxpZ2h0IFt0ZXh0XT1cIml0ZW0uYzh5X0twaT8ubGFiZWxcIiBbcGF0dGVybl09XCJwYXR0ZXJuXCI+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgICAgICAgICA8Yzh5LWxpLWljb24gaWNvbj1cImNpcmNsZVwiIFtzdHlsZS5jb2xvcl09XCJpdGVtLmM4eV9LcGk/LmNvbG9yXCI+PC9jOHktbGktaWNvbj5cbiAgICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RGb3VuZFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8Yzh5LWxpIGNsYXNzPVwiYmctbGV2ZWwtMiBwLThcIiAqbmdJZj1cInBhdHRlcm4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPk5vIG1hdGNoIGZvdW5kLjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvYzh5LXR5cGVhaGVhZD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4taW5mbyBidG4teHMgYnRuLWljb24gYS1zLWNlbnRlciBtLWwtOFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0luZm8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtwb3BvdmVyXT1cImRhdGFwb2ludE92ZXJ2aWV3UG9wb3ZlclRlbXBsYXRlXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGVtcGxhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1pbmZvXCIgYzh5SWNvbj1cImluZm9cIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4teHMgYnRuLWljb24gYS1zLWNlbnRlciBtLWwtOFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnVW5saW5rIGRhdGEgcG9pbnQgdGVtcGxhdGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1VubGluayBkYXRhIHBvaW50IHRlbXBsYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0cmlnZ2Vycz1cIm1vdXNlZW50ZXJcIlxuICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC52YWx1ZS5fX3RlbXBsYXRlICYmIGhhc1VubGlua1RlbXBsYXRlT3B0aW9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1bmxpbmtEYXRhcG9pbnRUZW1wbGF0ZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwidW5saW5rXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNkYXRhcG9pbnRPdmVydmlld1BvcG92ZXJUZW1wbGF0ZT5cbiAgICAgICAgPGM4eS1kYXRhcG9pbnQtdGVtcGxhdGUtcG9wb3ZlclxuICAgICAgICAgIFtkYXRhcG9pbnRdPVwiZm9ybUdyb3VwLnZhbHVlLmRldGFpbHNcIlxuICAgICAgICA+PC9jOHktZGF0YXBvaW50LXRlbXBsYXRlLXBvcG92ZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGM4eS1kYXRhcG9pbnQtYXR0cmlidXRlcy1mb3JtXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdEZvcm1PcHRpb25zXCJcbiAgICAgICAgW3Nob3dUYXJnZXRdPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNob3dUYXJnZXRcIlxuICAgICAgICBbc2hvd1JhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93UmFuZ2VcIlxuICAgICAgICBbc2hvd1llbGxvd1JhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93WWVsbG93UmFuZ2VcIlxuICAgICAgICBbc2hvd1JlZFJhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93UmVkUmFuZ2VcIlxuICAgICAgICBbc2hvd0NoYXJ0XT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93Q2hhcnRcIlxuICAgICAgICBbc2hvd0Zvcm1JZlRlbXBsYXRlV2FzU2VsZWN0ZWRdPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNob3dGb3JtSWZUZW1wbGF0ZVdhc1NlbGVjdGVkXCJcbiAgICAgICAgW3NlbGVjdGFibGVDaGFydFJlbmRlclR5cGVzXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zZWxlY3RhYmxlQ2hhcnRSZW5kZXJUeXBlc1wiXG4gICAgICAgIFtzZWxlY3RhYmxlQ2hhcnRMaW5lVHlwZXNdPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNlbGVjdGFibGVDaGFydExpbmVUeXBlc1wiXG4gICAgICAgIFtzZWxlY3RhYmxlQXhpc1R5cGVzXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zZWxlY3RhYmxlQXhpc1R5cGVzXCJcbiAgICAgICAgW3Nob3dFcnJvcnNJbW1lZGlhdGVseV09XCJ0cnVlXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGV0YWlsc1wiXG4gICAgICA+PC9jOHktZGF0YXBvaW50LWF0dHJpYnV0ZXMtZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9jOHktbGktY29sbGFwc2U+XG48L2M4eS1saT5cbiJdfQ==
@@ -17,6 +17,7 @@ export class BridgeService {
17
17
  this.fixE2eIssues();
18
18
  this.$ng1RouteChangeSuccess = this.fromNg1Event(this.injector.get('$rootScope'), '$routeChangeSuccess');
19
19
  this.$ng1RouteChangeStart = this.fromNg1Event(this.injector.get('$rootScope'), '$routeChangeStart');
20
+ this.$ng1RouteUpdate = this.fromNg1Event(this.injector.get('$rootScope'), '$routeUpdate');
20
21
  this.hookLanguage();
21
22
  this.hookTab();
22
23
  this.hookNavigator();
@@ -34,21 +35,11 @@ export class BridgeService {
34
35
  // fix to trigger an angularjs route change success
35
36
  // event on context route match to make legacy
36
37
  // view-providers resolve.
37
- // reloadOnUrl: true ensures that navigating between different IDs
38
- // (e.g., /device/123 -> /device/456) triggers $routeChangeSuccess
39
- // reloadOnSearch: true ensures that navigating to different subpaths with the same ID
40
- // (e.g., /group/123/dashboard -> /group/123/subassets) also triggers $routeChangeSuccess
41
- // Both are needed because AngularJS checks: "is update-only if reloadOnUrl is set
42
- // BUT reloadOnSearch is false AND pathParams are equal"
43
38
  c8yViews.when('/device/:id', {
44
- template: '',
45
- reloadOnUrl: true,
46
- reloadOnSearch: true
39
+ template: ''
47
40
  });
48
41
  c8yViews.when('/group/:id', {
49
- template: '',
50
- reloadOnUrl: true,
51
- reloadOnSearch: true
42
+ template: ''
52
43
  });
53
44
  c8yViews.contextViews.subscribe(cfg => this.addRoute(cfg));
54
45
  }
@@ -91,9 +82,7 @@ export class BridgeService {
91
82
  fallbackRoutes.push({
92
83
  keys: [{ name: ViewContextLegacyParameter[context], optional: false }],
93
84
  regexp,
94
- template,
95
- reloadOnUrl: true,
96
- reloadOnSearch: true
85
+ template
97
86
  });
98
87
  }
99
88
  /**
@@ -201,8 +190,15 @@ export class BridgeService {
201
190
  liveTabs = [];
202
191
  this.$liveTabs.next(liveTabs);
203
192
  });
204
- this.$ng1RouteChangeSuccess.subscribe(() => {
193
+ const syncRouters = () => {
205
194
  const path = $location.path();
195
+ // Don't sync if Angular Router is using secondary outlets
196
+ // (e.g., /device/123/(dashboard-details:general))
197
+ // Let Angular Router handle these advanced navigation scenarios
198
+ if (this.router.url.includes('(') && this.router.url.includes(':')) {
199
+ return;
200
+ }
201
+ // Only sync if paths differ and initial navigation is complete
206
202
  if (this.router.url !== path) {
207
203
  this.router.navigate(path === '/' ? '' : path.split('/'), {
208
204
  queryParams: $location.search(),
@@ -212,7 +208,18 @@ export class BridgeService {
212
208
  if (this.actionService) {
213
209
  this.actionService.refresh();
214
210
  }
215
- });
211
+ };
212
+ // Listen to $routeChangeSuccess (full navigation - always sync)
213
+ this.$ng1RouteChangeSuccess.subscribe(syncRouters);
214
+ // Listen to $routeUpdate (skip if query-param-only)
215
+ this.$ng1RouteUpdate
216
+ .pipe(filter(() => {
217
+ const path = $location.path();
218
+ const angularPath = this.router.url.split('?')[0];
219
+ // Only process if path actually changed (not just query params)
220
+ return angularPath !== path;
221
+ }))
222
+ .subscribe(syncRouters);
216
223
  this.$routeChanges = merge(this.$ng1RouteChangeSuccess, this.fromNg1Event(c8yTabs, c8yTabs.EVENT_UPDATE), of(1)).pipe(debounceTime(100));
217
224
  }
218
225
  hookNavigator() {
@@ -337,4 +344,4 @@ export const bridgeServiceProvider = {
337
344
  PluginsResolveService
338
345
  ]
339
346
  };
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91cGdyYWRlL2JyaWRnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxhQUFhLEVBQ2IsZUFBZSxFQUlmLGNBQWMsRUFDZCxPQUFPLEVBQ1AscUJBQXFCLEVBQ3JCLGFBQWEsRUFHYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBRUgsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsTUFBTSxPQUFPLGFBQWE7SUFNeEIsWUFDUyxRQUFhLEVBQ1osUUFBeUIsRUFDMUIsTUFBYyxFQUNiLE1BQWMsRUFDZCxhQUE0QixFQUM1QixhQUE0QixFQUNwQyxPQUE4QjtRQU52QixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVJ0QyxjQUFTLEdBQW1CLElBQUksZUFBZSxDQUFD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QUNkLGFBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLE9BQThCO0lBRTlCLE9BQU8sSUFBSSxhQUFhLENBQ3RCLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixhQUFhLEVBQ2IsYUFBYSxFQUNiLE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsSUFBSSxFQUFFO1FBQ0osV0FBVztRQUNYLGVBQWU7UUFDZixNQUFNO1FBQ04sTUFBTTtRQUNOLGFBQWE7UUFDYixhQUFhO1FBQ2IscUJBQXFCO0tBQ3RCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbixcbiAgQWN0aW9uQmFySXRlbSxcbiAgQWN0aW9uU2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCcmVhZGNydW1iLFxuICBCcmVhZGNydW1iSXRlbSxcbiAgRG9jTGluayxcbiAgRW1wdHlDb21wb25lbnQsXG4gIGdldHRleHQsXG4gIFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgUm91dGVyU2VydmljZSxcbiAgU2VhcmNoLFxuICBUYWIsXG4gIFZpZXdDb250ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZyb20sXG4gIGZyb21FdmVudFBhdHRlcm4sXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBWaWV3Q29udGV4dExlZ2FjeVBhcmFtZXRlciB9IGZyb20gJy4vbmcxL3ZpZXdzLnByb3ZpZGVyJztcblxuZXhwb3J0IGNsYXNzIEJyaWRnZVNlcnZpY2Uge1xuICAkcm91dGVDaGFuZ2VzOiBPYnNlcnZhYmxlPGFueT47XG4gICRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3M6IE9ic2VydmFibGU8YW55PjtcbiAgJG5nMVJvdXRlQ2hhbmdlU3RhcnQ6IE9ic2VydmFibGU8YW55PjtcbiAgJGxpdmVUYWJzOiBTdWJqZWN0PFRhYltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICBuYXZpZ2F0aW9uTm9kZXMkOiBPYnNlcnZhYmxlPGFueT47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbmplY3RvcjogYW55LFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHJvdXRlclNlcnZpY2U6IFJvdXRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25TZXJ2aWNlOiBBY3Rpb25TZXJ2aWNlLFxuICAgIHBsdWdpbnM6IFBsdWdpbnNSZXNvbHZlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZpeEUyZUlzc3VlcygpO1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3VjY2VzcyA9IHRoaXMuZnJvbU5nMUV2ZW50KFxuICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKSxcbiAgICAgICckcm91dGVDaGFuZ2VTdWNjZXNzJ1xuICAgICk7XG4gICAgdGhpcy4kbmcxUm91dGVDaGFuZ2VTdGFydCA9IHRoaXMuZnJvbU5nMUV2ZW50KFxuICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKSxcbiAgICAgICckcm91dGVDaGFuZ2VTdGFydCdcbiAgICApO1xuICAgIHRoaXMuaG9va0xhbmd1YWdlKCk7XG4gICAgdGhpcy5ob29rVGFiKCk7XG4gICAgdGhpcy5ob29rTmF2aWdhdG9yKCk7XG4gICAgdGhpcy5ob29rVXNlck1lbnUoKTtcbiAgICB0aGlzLmhvb2tWaWV3UHJvdmlkZXIoKTtcbiAgICBwbHVnaW5zLmFsbFBsdWdpbnNMb2FkZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKHRtcCA9PiAhIXRtcCksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvdXRlci5pbml0aWFsTmF2aWdhdGlvbigpO1xuICAgICAgfSk7XG4gICAgdGhpcy5uZzFSb3V0ZXMoKTtcbiAgfVxuXG4gIGhvb2tWaWV3UHJvdmlkZXIoKSB7XG4gICAgY29uc3QgYzh5Vmlld3MgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5Vmlld3MnKTtcbiAgICAvLyBmaXggdG8gdHJpZ2dlciBhbiBhbmd1bGFyanMgcm91dGUgY2hhbmdlIHN1Y2Nlc3NcbiAgICAvLyBldmVudCBvbiBjb250ZXh0IHJvdXRlIG1hdGNoIHRvIG1ha2UgbGVnYWN5XG4gICAgLy8gdmlldy1wcm92aWRlcnMgcmVzb2x2ZS5cbiAgICAvLyByZWxvYWRPblVybDogdHJ1ZSBlbnN1cmVzIHRoYXQgbmF2aWdhdGluZyBiZXR3ZWVuIGRpZmZlcmVudCBJRHNcbiAgICAvLyAoZS5nLiwgL2RldmljZS8xMjMgLT4gL2RldmljZS80NTYpIHRyaWdnZXJzICRyb3V0ZUNoYW5nZVN1Y2Nlc3NcbiAgICAvLyByZWxvYWRPblNlYXJjaDogdHJ1ZSBlbnN1cmVzIHRoYXQgbmF2aWdhdGluZyB0byBkaWZmZXJlbnQgc3VicGF0aHMgd2l0aCB0aGUgc2FtZSBJRFxuICAgIC8vIChlLmcuLCAvZ3JvdXAvMTIzL2Rhc2hib2FyZCAtPiAvZ3JvdXAvMTIzL3N1YmFzc2V0cykgYWxzbyB0cmlnZ2VycyAkcm91dGVDaGFuZ2VTdWNjZXNzXG4gICAgLy8gQm90aCBhcmUgbmVlZGVkIGJlY2F1c2UgQW5ndWxhckpTIGNoZWNrczogXCJpcyB1cGRhdGUtb25seSBpZiByZWxvYWRPblVybCBpcyBzZXRcbiAgICAvLyBCVVQgcmVsb2FkT25TZWFyY2ggaXMgZmFsc2UgQU5EIHBhdGhQYXJhbXMgYXJlIGVxdWFsXCJcbiAgICBjOHlWaWV3cy53aGVuKCcvZGV2aWNlLzppZCcsIHtcbiAgICAgIHRlbXBsYXRlOiAnJyxcbiAgICAgIHJlbG9hZE9uVXJsOiB0cnVlLFxuICAgICAgcmVsb2FkT25TZWFyY2g6IHRydWVcbiAgICB9KTtcbiAgICBjOHlWaWV3cy53aGVuKCcvZ3JvdXAvOmlkJywge1xuICAgICAgdGVtcGxhdGU6ICcnLFxuICAgICAgcmVsb2FkT25Vcmw6IHRydWUsXG4gICAgICByZWxvYWRPblNlYXJjaDogdHJ1ZVxuICAgIH0pO1xuICAgIGM4eVZpZXdzLmNvbnRleHRWaWV3cy5zdWJzY3JpYmUoY2ZnID0+IHRoaXMuYWRkUm91dGUoY2ZnKSk7XG4gIH1cblxuICBhZGRSb3V0ZShjZmcpIHtcbiAgICB0aGlzLnJvdXRlclNlcnZpY2UuYWRkUm91dGUoe1xuICAgICAgbGFiZWw6IGNmZy5sYWJlbCB8fCBjZmcubmFtZSxcbiAgICAgIHBhdGg6IGNmZy5wYXRoLFxuICAgICAgaWNvbjogY2ZnLmljb24sXG4gICAgICBjb250ZXh0OiBWaWV3Q29udGV4dFtjZmcuY29udGV4dEtleV0gYXMgVmlld0NvbnRleHQsXG4gICAgICBwcmlvcml0eTogY2ZnLnByaW9yaXR5LFxuICAgICAgY29tcG9uZW50OiBFbXB0eUNvbXBvbmVudCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2hvd0lmOiBjZmcuc2hvd0lmXG4gICAgICAgICAgPyBuZ3hSb3V0ZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5uZ3hSb3V0ZS5wYXJhbXMsXG4gICAgICAgICAgICAgICAgW1ZpZXdDb250ZXh0TGVnYWN5UGFyYW1ldGVyW2NmZy5jb250ZXh0S2V5XV06IG5neFJvdXRlLnBhcmFtcy5pZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBjb25zdCBzaG93SWZSZXN1bHQgPSB0aGlzLmluamVjdG9yLmludm9rZShjZmcuc2hvd0lmLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICAkcm91dGVQYXJhbXM6IHBhcmFtc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHNob3dJZiByZXN1bHQgaXMgYSBwcm9taXNlIHdpdGggYm9vbGVhbiByZXN1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldCgnJHEnKS53aGVuKHNob3dJZlJlc3VsdCkudGhlbihCb29sZWFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIC4uLihjZmcuZmVhdHVyZUlkICYmIHsgZmVhdHVyZUlkOiBjZmcuZmVhdHVyZUlkIH0pXG4gICAgfSk7XG5cbiAgICBpZiAoY2ZnLnJ1blBoYXNlKSB7XG4gICAgICB0aGlzLnJvdXRlclNlcnZpY2UucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nMVJvdXRlcygpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICcnO1xuICAgIGNvbnN0IGZhbGxiYWNrUm91dGVzID0gW107XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgZm9yIChjb25zdCBjb250ZXh0IGluIFZpZXdDb250ZXh0KSB7XG4gICAgICBjb25zdCBwYXRoID0gVmlld0NvbnRleHRbY29udGV4dF0ubWF0Y2goLyhcXHcrKVxcLy8pWzFdO1xuICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXi8ke3BhdGh9Lyg/OihbXi9dKykpLiokYCk7XG4gICAgICBmYWxsYmFja1JvdXRlcy5wdXNoKHtcbiAgICAgICAga2V5czogW3sgbmFtZTogVmlld0NvbnRleHRMZWdhY3lQYXJhbWV0ZXJbY29udGV4dF0sIG9wdGlvbmFsOiBmYWxzZSB9XSxcbiAgICAgICAgcmVnZXhwLFxuICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgcmVsb2FkT25Vcmw6IHRydWUsXG4gICAgICAgIHJlbG9hZE9uU2VhcmNoOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGFzc2V0IGRldGFpbCByb3V0ZXMgKC9kZXZpY2UvOmlkLCAgL2dyb3VwLzppZCkgYXJlIG1hdGNoZWQgaW4gQW5ndWxhciBSb3V0ZXIsIG5nUm91dGUgaW5cbiAgICAgKiBhbmd1bGFyLmpzIG11c3QgYWxzbyBoYXZlIG1hdGNoaW5nIGdlbmVyaWMgcm91dGVzIHNvIHRoYXQgdGhlIGlkcyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gdGhlIHBhdGhzIGFuZFxuICAgICAqIGluamVjdGVkIGluIG11bHRpcGxlIGNhbGxzIChzaG93SWYsIGM4eUFjdGlvbnMsIGV0YykgYXMgcHJvcGVydGllcyBvZiAkcm91dGVQYXJhbXMuXG4gICAgICpcbiAgICAgKiBUaGUgZnVuY3Rpb24gaW4gc3JjL25nUm91dGUvcm91dGUuanMgKGFuZ3VsYXIuanMpIHdoZXJlIHRoZSByb3V0ZXMgYXJlIG1hdGNoZWQgaXMgY2FsbGVkIHBhcnNlUm91dGUoKS4gVGhpc1xuICAgICAqIGZ1bmN0aW9uIGNhbGxzIGFuZ3VsYXIuZm9yRWFjaCBhbmQgaW4gdHVybiB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgZm9yRWFjaCBtZXRob2QgYmVmb3JlXG4gICAgICogdHJ5aW5nIG9iamVjdCBrZXkgaXRlcmF0aW9uLlxuICAgICAqIEJ5IGF0dGFjaGluZyBhIG5vbiBlbnVtZXJhYmxlIGZvckVhY2ggbWV0aG9kIHRvIHRoZSByb3V0ZXMgb2JqZWN0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBmYWxsYmFjayBnZW5lcmljIHJvdXRlc1xuICAgICAqIGFyZSBvbmx5IG1hdGNoZWQgYWZ0ZXIgYW55IG90aGVyIHJlZ2lzdGVyZWQgdGhyb3VnaCAkcm91dGVQcm92aWRlci53aGVuLlxuICAgICAqL1xuICAgIGNvbnN0ICRyb3V0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckcm91dGUnKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoJHJvdXRlLnJvdXRlcywgJ2ZvckVhY2gnLCB7XG4gICAgICAvLyBtYWtlIG5vbiBlbnVtZXJhYmxlXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMpIHtcbiAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHRoaXNba2V5XSwga2V5LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBmYWxsYmFja1JvdXRlcy5mb3JFYWNoKHIgPT4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCByKSk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTb21lIGZ1bmN0aW9ucyB1c2UgdGhlIGN1cnJlbnQgY29udGV4dC4gQXMgc29tZSBwYXJ0cyBhcmUgdXBncmFkZWQgYW5kIHNvbWUgbm90LCB0aGUgZm9sbG93aW5nIHVwZGF0ZXMgdGhlXG4gICAgICogYW5ndWxhcmpzIGdldENvbnRleHQgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhbHdheXMgdGhlIHJpZ2h0IGNvbnRleHQuXG4gICAgICovXG4gICAgY29uc3QgYzh5VWlVdGlsID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVVpVXRpbCcpO1xuICAgIGNvbnN0IF9nZXRDb250ZXh0ID0gYzh5VWlVdGlsLmdldENvbnRleHQ7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBBY3RpdmF0aW9uRW5kKSA9PiB7XG4gICAgICAgIGlmIChldmVudC5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoID09PSAnKionKSB7XG4gICAgICAgICAgYzh5VWlVdGlsLmdldENvbnRleHQgPSBfZ2V0Q29udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zbmFwc2hvdC5kYXRhICYmIGV2ZW50LnNuYXBzaG90LmRhdGEuY29udGV4dCkge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGV4dDogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0LnJlcGxhY2UoJy86aWQnLCAnJyksXG4gICAgICAgICAgICAgIGlkOiBldmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhLmlkLFxuICAgICAgICAgICAgICBjb250ZXh0RGF0YTogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4gKHsgY29udGV4dDogbnVsbCwgaWQ6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZml4RTJlSXNzdWVzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5nWm9uZSB9ID0gdGhpcztcbiAgICAgIGNvbnN0IHsgVXRpbHMgfSA9ICh3aW5kb3cgYXMgYW55KS5vcmcuY29tZXRkO1xuICAgICAgY29uc3QgdGltZW91dEZuID0gVXRpbHMuc2V0VGltZW91dDtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgVXRpbHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGltZW91dEZuLmFwcGx5KFV0aWxzLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhY2UgfSA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICBjb25zdCBlZGl0Rm4gPSBhY2UuZWRpdDtcbiAgICAgIGNvbnN0IHsgbmdab25lIH0gPSB0aGlzO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9ubHktYXJyb3ctZnVuY3Rpb25zXG4gICAgICBhY2UuZWRpdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZWRpdEZuLmFwcGx5KGFjZSwgYXJncykpO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgaG9va0xhbmd1YWdlKCkge1xuICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgdGhpcy5hcHBTdGF0ZVxuICAgICAgLm1hcChzdG9yZSA9PiBzdG9yZS5sYW5nKVxuICAgICAgLnN1YnNjcmliZShsYW5nID0+IHtcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUxvY2FsZXMnKS5zd2l0Y2hUb0xhbmd1YWdlKGxhbmcpO1xuICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKS4kYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBob29rVGFiKCkge1xuICAgIC8vIEp1c3QgZm9yIGluc3RhbnRpYXRpb24gb2YgdGhlIGM4eUFjdGlvbiBzZXJ2aWNlXG4gICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbnMnKTtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5VGFicyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlUYWJzJyk7XG4gICAgbGV0IGxpdmVUYWJzID0gW107XG4gICAgYzh5VGFicy5hZGRUYWIgPSB0YWIgPT4ge1xuICAgICAgbGl2ZVRhYnMucHVzaCh7XG4gICAgICAgIC4uLnRhYixcbiAgICAgICAgbGFiZWw6IHRhYi5sYWJlbCB8fCB0YWIubmFtZSxcbiAgICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9O1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGxpdmVUYWJzID0gW107XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9KTtcbiAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3Muc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSAkbG9jYXRpb24ucGF0aCgpO1xuICAgICAgaWYgKHRoaXMucm91dGVyLnVybCAhPT0gcGF0aCkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShwYXRoID09PSAnLycgPyAnJyA6IHBhdGguc3BsaXQoJy8nKSwge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiAkbG9jYXRpb24uc2VhcmNoKCksXG4gICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWN0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLmFjdGlvblNlcnZpY2UucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuJHJvdXRlQ2hhbmdlcyA9IG1lcmdlKFxuICAgICAgdGhpcy4kbmcxUm91dGVDaGFuZ2VTdWNjZXNzLFxuICAgICAgdGhpcy5mcm9tTmcxRXZlbnQoYzh5VGFicywgYzh5VGFicy5FVkVOVF9VUERBVEUpLFxuICAgICAgb2YoMSlcbiAgICApLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpO1xuICB9XG5cbiAgaG9va05hdmlnYXRvcigpIHtcbiAgICB0aGlzLm5hdmlnYXRpb25Ob2RlcyQgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5TmF2aWdhdG9yJykucm9vdE5vZGVzJDtcbiAgfVxuXG4gIGdldFRhYnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvbmx5VmlzaWJsZSA9ICh7IHNob3cgfSkgPT4gc2hvdztcbiAgICBjb25zdCB1cGdyYWRlVGFiID0gdGFiID0+ICh7XG4gICAgICAuLi50YWIsXG4gICAgICBsYWJlbDogdGFiLmxhYmVsIHx8IHRhYi5uYW1lLFxuICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgIH0pO1xuICAgIGNvbnN0IHJvdXRlVGFicyA9IHRoaXMuJHJvdXRlQ2hhbmdlcy5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGVzID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVRhYnMnKS5yb3V0ZVRhYnM7XG4gICAgICAgIGNvbnN0IHZpc2liaWxpdHlQcm9taXNlID0gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcm91dGVzLm1hcCgoeyBjaGVja2luZ1Zpc2liaWxpdHkgfSkgPT4gY2hlY2tpbmdWaXNpYmlsaXR5KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdmlzaWJpbGl0eVByb21pc2UudGhlbigoKSA9PiByb3V0ZXMuZmlsdGVyKG9ubHlWaXNpYmxlKS5tYXAodXBncmFkZVRhYikpO1xuICAgICAgfSksXG4gICAgICBzdGFydFdpdGgoW10pXG4gICAgKTtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbcm91dGVUYWJzLCB0aGlzLiRsaXZlVGFic10pLnBpcGUoXG4gICAgICBtYXAoKFtyb3V0ZSwgbGl2ZV0pID0+IHJvdXRlLmNvbmNhdChsaXZlKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UXVpY2tMaW5rcygpOiBQcm9taXNlPERvY0xpbmtbXT4ge1xuICAgIGNvbnN0IGM4eVF1aWNrTGlua3MgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5UXVpY2tMaW5rcycpO1xuICAgIHJldHVybiBjOHlRdWlja0xpbmtzLmxpc3QoKTtcbiAgfVxuXG4gIGdldEFjdGlvbkJhckl0ZW1zKCk6IE9ic2VydmFibGU8QWN0aW9uQmFySXRlbT4ge1xuICAgIGNvbnN0IGM4eUFjdGlvbkJhciA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBY3Rpb25CYXInKTtcbiAgICBjb25zdCAkcm9vdFNjb3BlID0gdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKTtcbiAgICBjb25zdCBnZXRBY3Rpb25CYXJFbGVtZW50cyA9ICgpID0+XG4gICAgICBjOHlBY3Rpb25CYXIuZWxlbWVudHMubWFwKGVsZW1lbnQgPT4gKHtcbiAgICAgICAgcHJpb3JpdHk6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhY3Rpb24tYmFyLXByaW9yaXR5JykgfHwgMCxcbiAgICAgICAgdGVtcGxhdGU6IGVsZW1lbnQsXG4gICAgICAgIHBsYWNlbWVudDogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbi1iYXItcG9zaXRpb24nKSB8fCAncmlnaHQnXG4gICAgICB9KSk7XG4gICAgcmV0dXJuIHRoaXMuZnJvbU5nMUV2ZW50KCRyb290U2NvcGUsICdjOHlBY3Rpb25CYXJDaGFuZ2VkJykucGlwZShcbiAgICAgIHN0YXJ0V2l0aCgxKSxcbiAgICAgIG1hcChnZXRBY3Rpb25CYXJFbGVtZW50cylcbiAgICApO1xuICB9XG5cbiAgZ2V0QnJlYWRjcnVtYnMoKTogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5QnJlYWRjcnVtYnMgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5QnJlYWRjcnVtYnMnKTtcbiAgICBjb25zdCBicmVhZGNydW1ic1VwZGF0ZSQgPSBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+XG4gICAgICBjOHlCcmVhZGNydW1icy4kb24oJ3VwZGF0ZScsICgpID0+IHN1YnNjcmliZXIubmV4dCgpKVxuICAgICk7XG4gICAgcmV0dXJuIGJyZWFkY3J1bWJzVXBkYXRlJC5waXBlKFxuICAgICAgc3RhcnRXaXRoKDApLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzID0gYzh5QnJlYWRjcnVtYnMuZ2V0KHBhdGgpIHx8IHt9O1xuICAgICAgICBjb25zdCBicmVhZGNydW1ic0RhdGEgPSB0aGlzLnJlc29sdmVCcmVhZGNydW1ic0RhdGEoYnJlYWRjcnVtYnMuZGF0YSk7XG4gICAgICAgIHJldHVybiBmcm9tKGJyZWFkY3J1bWJzRGF0YSkucGlwZShcbiAgICAgICAgICBtYXAoKHZhbHVlOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGl2ZUJyZWFkY3J1bWJzID0gYzh5QnJlYWRjcnVtYnMuZ2V0TGl2ZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNvbmNhdChsaXZlQnJlYWRjcnVtYnMpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtcyA9PiAoeyBpdGVtczogaXRlbXMgYXMgQnJlYWRjcnVtYkl0ZW1bXSB9KSBhcyBCcmVhZGNydW1iKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmVzb2x2ZUJyZWFkY3J1bWJzRGF0YShkYXRhKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5pbnZva2UoZGF0YSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGVtcHR5XG4gICAgfVxuICAgIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgICByZXR1cm4gb2YoW2RhdGFdKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldFNlYXJjaCgpOiBTZWFyY2hbXSB7XG4gICAgY29uc3QgYzh5U2VhcmNoID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVNlYXJjaCcpO1xuICAgIHJldHVybiBjOHlTZWFyY2gubGlzdCgpLm1hcChpdGVtID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb246ICdzZWFyY2gnLFxuICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgIHRlcm06ICcnLFxuICAgICAgICBvblNlYXJjaCgpIHtcbiAgICAgICAgICBpZiAodGhpcy50ZXJtKSB7XG4gICAgICAgICAgICBjOHlTZWFyY2guc2VhcmNoKHRoaXMudGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGFzIFNlYXJjaDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBY3Rpb24+IHtcbiAgICBjb25zdCByZWdpc3RlcmVkQWN0aW9ucyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBY3Rpb25zJykucmVnaXN0ZXJlZEFjdGlvbnM7XG4gICAgcmV0dXJuIG9mKFxuICAgICAgcmVnaXN0ZXJlZEFjdGlvbnNcbiAgICAgICAgLmZpbHRlcihhY3Rpb24gPT4gIWFjdGlvbi5oaWRkZW4pXG4gICAgICAgIC5tYXAoYWN0aW9uID0+ICh7XG4gICAgICAgICAgLy8gVGhlIHByaW9yaXR5IHdhcyByZXZlcnNlZDogQWxpZ25lZCBpdCB0byBkYXNoYm9hcmQsIGhpZ2ggZmlyc3QsIGxvdyBsYXN0LlxuICAgICAgICAgIHByaW9yaXR5OiAoYWN0aW9uLnByaW9yaXR5IHx8IDApICogLTEsXG4gICAgICAgICAgbGFiZWw6IGFjdGlvbi50ZXh0LFxuICAgICAgICAgIGljb246IGFjdGlvbi5pY29uLFxuICAgICAgICAgIGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWQsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLmludm9rZShhY3Rpb24uYWN0aW9uLCBhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIGZyb21OZzFFdmVudChvYmosIGV2dCkge1xuICAgIGxldCBzdG9wTGlzdGVuaW5nO1xuICAgIGZ1bmN0aW9uIGFkZChoYW5kbGVyKSB7XG4gICAgICBzdG9wTGlzdGVuaW5nID0gb2JqLiRvbihldnQsIGhhbmRsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbUV2ZW50UGF0dGVybihhZGQsICgpID0+IHN0b3BMaXN0ZW5pbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGhvb2tVc2VyTWVudSgpIHtcbiAgICBjb25zdCB1c2VyTWVudVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5VXNlck1lbnVTZXJ2aWNlJyk7XG4gICAgY29uc3QgYzh5QWNjZXNzRGVuaWVkID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjY2Vzc0RlbmllZCcpO1xuICAgIHVzZXJNZW51U2VydmljZS5hZGQoe1xuICAgICAgaWNvbjogJ2FjY2VzcycsXG4gICAgICBwcmlvcml0eTogMTAsXG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWNjZXNzIGRlbmllZCByZXF1ZXN0cycpLFxuICAgICAgY2xpY2s6IGM4eUFjY2Vzc0RlbmllZC5zaG93QWNjZXNzRGVuaWVkUmVxdWVzdHNMaXN0XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyaWRnZVNlcnZpY2VGYWN0b3J5KFxuICBpbmplY3RvcjogYW55LFxuICBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICByb3V0ZXI6IFJvdXRlcixcbiAgbmdab25lOiBOZ1pvbmUsXG4gIHJvdXRlclNlcnZpY2U6IFJvdXRlclNlcnZpY2UsXG4gIGFjdGlvblNlcnZpY2U6IEFjdGlvblNlcnZpY2UsXG4gIHBsdWdpbnM6IFBsdWdpbnNSZXNvbHZlU2VydmljZVxuKSB7XG4gIHJldHVybiBuZXcgQnJpZGdlU2VydmljZShcbiAgICBpbmplY3RvcixcbiAgICBhcHBTdGF0ZSxcbiAgICByb3V0ZXIsXG4gICAgbmdab25lLFxuICAgIHJvdXRlclNlcnZpY2UsXG4gICAgYWN0aW9uU2VydmljZSxcbiAgICBwbHVnaW5zXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBicmlkZ2VTZXJ2aWNlUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IEJyaWRnZVNlcnZpY2UsXG4gIHVzZUZhY3Rvcnk6IGJyaWRnZVNlcnZpY2VGYWN0b3J5LFxuICBkZXBzOiBbXG4gICAgJyRpbmplY3RvcicsXG4gICAgQXBwU3RhdGVTZXJ2aWNlLFxuICAgIFJvdXRlcixcbiAgICBOZ1pvbmUsXG4gICAgUm91dGVyU2VydmljZSxcbiAgICBBY3Rpb25TZXJ2aWNlLFxuICAgIFBsdWdpbnNSZXNvbHZlU2VydmljZVxuICBdXG59O1xuIl19
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91cGdyYWRlL2JyaWRnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxhQUFhLEVBQ2IsZUFBZSxFQUlmLGNBQWMsRUFDZCxPQUFPLEVBQ1AscUJBQXFCLEVBQ3JCLGFBQWEsRUFHYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBRUgsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsTUFBTSxPQUFPLGFBQWE7SUFPeEIsWUFDUyxRQUFhLEVBQ1osUUFBeUIsRUFDMUIsTUFBYyxFQUNiLE1BQWMsRUFDZCxhQUE0QixFQUM1QixhQUE0QixFQUNwQyxPQUE4QjtRQU52QixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVJ0QyxjQUFTLEdBQW1CLElBQUksZUFBZSxDQUFD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Z0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0QsZUFBZSxDQUFDLEdBQUcsQ0FBQztZQUNsQixJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxFQUFFO1lBQ1osS0FBSyxFQUFFLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztZQUN4QyxLQUFLLEVBQUUsZUFBZSxDQUFDLDRCQUE0QjtTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFFBQWEsRUFDYixRQUF5QixFQUN6QixNQUFjLEVBQ2QsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLE9BQThCO0lBRTlCLE9BQU8sSUFBSSxhQUFhLENBQ3RCLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixhQUFhLEVBQ2IsYUFBYSxFQUNiLE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsSUFBSSxFQUFFO1FBQ0osV0FBVztRQUNYLGVBQWU7UUFDZixNQUFNO1FBQ04sTUFBTTtRQUNOLGFBQWE7UUFDYixhQUFhO1FBQ2IscUJBQXFCO0tBQ3RCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbixcbiAgQWN0aW9uQmFySXRlbSxcbiAgQWN0aW9uU2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCcmVhZGNydW1iLFxuICBCcmVhZGNydW1iSXRlbSxcbiAgRG9jTGluayxcbiAgRW1wdHlDb21wb25lbnQsXG4gIGdldHRleHQsXG4gIFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgUm91dGVyU2VydmljZSxcbiAgU2VhcmNoLFxuICBUYWIsXG4gIFZpZXdDb250ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZyb20sXG4gIGZyb21FdmVudFBhdHRlcm4sXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBWaWV3Q29udGV4dExlZ2FjeVBhcmFtZXRlciB9IGZyb20gJy4vbmcxL3ZpZXdzLnByb3ZpZGVyJztcblxuZXhwb3J0IGNsYXNzIEJyaWRnZVNlcnZpY2Uge1xuICAkcm91dGVDaGFuZ2VzOiBPYnNlcnZhYmxlPGFueT47XG4gICRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3M6IE9ic2VydmFibGU8YW55PjtcbiAgJG5nMVJvdXRlQ2hhbmdlU3RhcnQ6IE9ic2VydmFibGU8YW55PjtcbiAgJG5nMVJvdXRlVXBkYXRlOiBPYnNlcnZhYmxlPGFueT47XG4gICRsaXZlVGFiczogU3ViamVjdDxUYWJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgbmF2aWdhdGlvbk5vZGVzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5qZWN0b3I6IGFueSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByb3V0ZXJTZXJ2aWNlOiBSb3V0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgICBwbHVnaW5zOiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5maXhFMmVJc3N1ZXMoKTtcbiAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3MgPSB0aGlzLmZyb21OZzFFdmVudChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksXG4gICAgICAnJHJvdXRlQ2hhbmdlU3VjY2VzcydcbiAgICApO1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQgPSB0aGlzLmZyb21OZzFFdmVudChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksXG4gICAgICAnJHJvdXRlQ2hhbmdlU3RhcnQnXG4gICAgKTtcbiAgICB0aGlzLiRuZzFSb3V0ZVVwZGF0ZSA9IHRoaXMuZnJvbU5nMUV2ZW50KHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksICckcm91dGVVcGRhdGUnKTtcbiAgICB0aGlzLmhvb2tMYW5ndWFnZSgpO1xuICAgIHRoaXMuaG9va1RhYigpO1xuICAgIHRoaXMuaG9va05hdmlnYXRvcigpO1xuICAgIHRoaXMuaG9va1VzZXJNZW51KCk7XG4gICAgdGhpcy5ob29rVmlld1Byb3ZpZGVyKCk7XG4gICAgcGx1Z2lucy5hbGxQbHVnaW5zTG9hZGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcih0bXAgPT4gISF0bXApLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIuaW5pdGlhbE5hdmlnYXRpb24oKTtcbiAgICAgIH0pO1xuICAgIHRoaXMubmcxUm91dGVzKCk7XG4gIH1cblxuICBob29rVmlld1Byb3ZpZGVyKCkge1xuICAgIGNvbnN0IGM4eVZpZXdzID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVZpZXdzJyk7XG4gICAgLy8gZml4IHRvIHRyaWdnZXIgYW4gYW5ndWxhcmpzIHJvdXRlIGNoYW5nZSBzdWNjZXNzXG4gICAgLy8gZXZlbnQgb24gY29udGV4dCByb3V0ZSBtYXRjaCB0byBtYWtlIGxlZ2FjeVxuICAgIC8vIHZpZXctcHJvdmlkZXJzIHJlc29sdmUuXG4gICAgYzh5Vmlld3Mud2hlbignL2RldmljZS86aWQnLCB7XG4gICAgICB0ZW1wbGF0ZTogJydcbiAgICB9KTtcbiAgICBjOHlWaWV3cy53aGVuKCcvZ3JvdXAvOmlkJywge1xuICAgICAgdGVtcGxhdGU6ICcnXG4gICAgfSk7XG4gICAgYzh5Vmlld3MuY29udGV4dFZpZXdzLnN1YnNjcmliZShjZmcgPT4gdGhpcy5hZGRSb3V0ZShjZmcpKTtcbiAgfVxuXG4gIGFkZFJvdXRlKGNmZykge1xuICAgIHRoaXMucm91dGVyU2VydmljZS5hZGRSb3V0ZSh7XG4gICAgICBsYWJlbDogY2ZnLmxhYmVsIHx8IGNmZy5uYW1lLFxuICAgICAgcGF0aDogY2ZnLnBhdGgsXG4gICAgICBpY29uOiBjZmcuaWNvbixcbiAgICAgIGNvbnRleHQ6IFZpZXdDb250ZXh0W2NmZy5jb250ZXh0S2V5XSBhcyBWaWV3Q29udGV4dCxcbiAgICAgIHByaW9yaXR5OiBjZmcucHJpb3JpdHksXG4gICAgICBjb21wb25lbnQ6IEVtcHR5Q29tcG9uZW50LFxuICAgICAgZGF0YToge1xuICAgICAgICBzaG93SWY6IGNmZy5zaG93SWZcbiAgICAgICAgICA/IG5neFJvdXRlID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLm5neFJvdXRlLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBbVmlld0NvbnRleHRMZWdhY3lQYXJhbWV0ZXJbY2ZnLmNvbnRleHRLZXldXTogbmd4Um91dGUucGFyYW1zLmlkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGNvbnN0IHNob3dJZlJlc3VsdCA9IHRoaXMuaW5qZWN0b3IuaW52b2tlKGNmZy5zaG93SWYsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICRyb3V0ZVBhcmFtczogcGFyYW1zXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgc2hvd0lmIHJlc3VsdCBpcyBhIHByb21pc2Ugd2l0aCBib29sZWFuIHJlc3VsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KCckcScpLndoZW4oc2hvd0lmUmVzdWx0KS50aGVuKEJvb2xlYW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgLi4uKGNmZy5mZWF0dXJlSWQgJiYgeyBmZWF0dXJlSWQ6IGNmZy5mZWF0dXJlSWQgfSlcbiAgICB9KTtcblxuICAgIGlmIChjZmcucnVuUGhhc2UpIHtcbiAgICAgIHRoaXMucm91dGVyU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmcxUm91dGVzKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gJyc7XG4gICAgY29uc3QgZmFsbGJhY2tSb3V0ZXMgPSBbXTtcblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZm9yaW5cbiAgICBmb3IgKGNvbnN0IGNvbnRleHQgaW4gVmlld0NvbnRleHQpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBWaWV3Q29udGV4dFtjb250ZXh0XS5tYXRjaCgvKFxcdyspXFwvLylbMV07XG4gICAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeLyR7cGF0aH0vKD86KFteL10rKSkuKiRgKTtcbiAgICAgIGZhbGxiYWNrUm91dGVzLnB1c2goe1xuICAgICAgICBrZXlzOiBbeyBuYW1lOiBWaWV3Q29udGV4dExlZ2FjeVBhcmFtZXRlcltjb250ZXh0XSwgb3B0aW9uYWw6IGZhbHNlIH1dLFxuICAgICAgICByZWdleHAsXG4gICAgICAgIHRlbXBsYXRlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGFzc2V0IGRldGFpbCByb3V0ZXMgKC9kZXZpY2UvOmlkLCAgL2dyb3VwLzppZCkgYXJlIG1hdGNoZWQgaW4gQW5ndWxhciBSb3V0ZXIsIG5nUm91dGUgaW5cbiAgICAgKiBhbmd1bGFyLmpzIG11c3QgYWxzbyBoYXZlIG1hdGNoaW5nIGdlbmVyaWMgcm91dGVzIHNvIHRoYXQgdGhlIGlkcyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gdGhlIHBhdGhzIGFuZFxuICAgICAqIGluamVjdGVkIGluIG11bHRpcGxlIGNhbGxzIChzaG93SWYsIGM4eUFjdGlvbnMsIGV0YykgYXMgcHJvcGVydGllcyBvZiAkcm91dGVQYXJhbXMuXG4gICAgICpcbiAgICAgKiBUaGUgZnVuY3Rpb24gaW4gc3JjL25nUm91dGUvcm91dGUuanMgKGFuZ3VsYXIuanMpIHdoZXJlIHRoZSByb3V0ZXMgYXJlIG1hdGNoZWQgaXMgY2FsbGVkIHBhcnNlUm91dGUoKS4gVGhpc1xuICAgICAqIGZ1bmN0aW9uIGNhbGxzIGFuZ3VsYXIuZm9yRWFjaCBhbmQgaW4gdHVybiB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgZm9yRWFjaCBtZXRob2QgYmVmb3JlXG4gICAgICogdHJ5aW5nIG9iamVjdCBrZXkgaXRlcmF0aW9uLlxuICAgICAqIEJ5IGF0dGFjaGluZyBhIG5vbiBlbnVtZXJhYmxlIGZvckVhY2ggbWV0aG9kIHRvIHRoZSByb3V0ZXMgb2JqZWN0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBmYWxsYmFjayBnZW5lcmljIHJvdXRlc1xuICAgICAqIGFyZSBvbmx5IG1hdGNoZWQgYWZ0ZXIgYW55IG90aGVyIHJlZ2lzdGVyZWQgdGhyb3VnaCAkcm91dGVQcm92aWRlci53aGVuLlxuICAgICAqL1xuICAgIGNvbnN0ICRyb3V0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckcm91dGUnKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoJHJvdXRlLnJvdXRlcywgJ2ZvckVhY2gnLCB7XG4gICAgICAvLyBtYWtlIG5vbiBlbnVtZXJhYmxlXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMpIHtcbiAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHRoaXNba2V5XSwga2V5LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBmYWxsYmFja1JvdXRlcy5mb3JFYWNoKHIgPT4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCByKSk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTb21lIGZ1bmN0aW9ucyB1c2UgdGhlIGN1cnJlbnQgY29udGV4dC4gQXMgc29tZSBwYXJ0cyBhcmUgdXBncmFkZWQgYW5kIHNvbWUgbm90LCB0aGUgZm9sbG93aW5nIHVwZGF0ZXMgdGhlXG4gICAgICogYW5ndWxhcmpzIGdldENvbnRleHQgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhbHdheXMgdGhlIHJpZ2h0IGNvbnRleHQuXG4gICAgICovXG4gICAgY29uc3QgYzh5VWlVdGlsID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVVpVXRpbCcpO1xuICAgIGNvbnN0IF9nZXRDb250ZXh0ID0gYzh5VWlVdGlsLmdldENvbnRleHQ7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBBY3RpdmF0aW9uRW5kKSA9PiB7XG4gICAgICAgIGlmIChldmVudC5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoID09PSAnKionKSB7XG4gICAgICAgICAgYzh5VWlVdGlsLmdldENvbnRleHQgPSBfZ2V0Q29udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zbmFwc2hvdC5kYXRhICYmIGV2ZW50LnNuYXBzaG90LmRhdGEuY29udGV4dCkge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGV4dDogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0LnJlcGxhY2UoJy86aWQnLCAnJyksXG4gICAgICAgICAgICAgIGlkOiBldmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhLmlkLFxuICAgICAgICAgICAgICBjb250ZXh0RGF0YTogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4gKHsgY29udGV4dDogbnVsbCwgaWQ6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZml4RTJlSXNzdWVzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5nWm9uZSB9ID0gdGhpcztcbiAgICAgIGNvbnN0IHsgVXRpbHMgfSA9ICh3aW5kb3cgYXMgYW55KS5vcmcuY29tZXRkO1xuICAgICAgY29uc3QgdGltZW91dEZuID0gVXRpbHMuc2V0VGltZW91dDtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgVXRpbHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGltZW91dEZuLmFwcGx5KFV0aWxzLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhY2UgfSA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICBjb25zdCBlZGl0Rm4gPSBhY2UuZWRpdDtcbiAgICAgIGNvbnN0IHsgbmdab25lIH0gPSB0aGlzO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9ubHktYXJyb3ctZnVuY3Rpb25zXG4gICAgICBhY2UuZWRpdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZWRpdEZuLmFwcGx5KGFjZSwgYXJncykpO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgaG9va0xhbmd1YWdlKCkge1xuICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgdGhpcy5hcHBTdGF0ZVxuICAgICAgLm1hcChzdG9yZSA9PiBzdG9yZS5sYW5nKVxuICAgICAgLnN1YnNjcmliZShsYW5nID0+IHtcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUxvY2FsZXMnKS5zd2l0Y2hUb0xhbmd1YWdlKGxhbmcpO1xuICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKS4kYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBob29rVGFiKCkge1xuICAgIC8vIEp1c3QgZm9yIGluc3RhbnRpYXRpb24gb2YgdGhlIGM4eUFjdGlvbiBzZXJ2aWNlXG4gICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbnMnKTtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5VGFicyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlUYWJzJyk7XG4gICAgbGV0IGxpdmVUYWJzID0gW107XG4gICAgYzh5VGFicy5hZGRUYWIgPSB0YWIgPT4ge1xuICAgICAgbGl2ZVRhYnMucHVzaCh7XG4gICAgICAgIC4uLnRhYixcbiAgICAgICAgbGFiZWw6IHRhYi5sYWJlbCB8fCB0YWIubmFtZSxcbiAgICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9O1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGxpdmVUYWJzID0gW107XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHN5bmNSb3V0ZXJzID0gKCkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XG5cbiAgICAgIC8vIERvbid0IHN5bmMgaWYgQW5ndWxhciBSb3V0ZXIgaXMgdXNpbmcgc2Vjb25kYXJ5IG91dGxldHNcbiAgICAgIC8vIChlLmcuLCAvZGV2aWNlLzEyMy8oZGFzaGJvYXJkLWRldGFpbHM6Z2VuZXJhbCkpXG4gICAgICAvLyBMZXQgQW5ndWxhciBSb3V0ZXIgaGFuZGxlIHRoZXNlIGFkdmFuY2VkIG5hdmlnYXRpb24gc2NlbmFyaW9zXG4gICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcoJykgJiYgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHN5bmMgaWYgcGF0aHMgZGlmZmVyIGFuZCBpbml0aWFsIG5hdmlnYXRpb24gaXMgY29tcGxldGVcbiAgICAgIGlmICh0aGlzLnJvdXRlci51cmwgIT09IHBhdGgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUocGF0aCA9PT0gJy8nID8gJycgOiBwYXRoLnNwbGl0KCcvJyksIHtcbiAgICAgICAgICBxdWVyeVBhcmFtczogJGxvY2F0aW9uLnNlYXJjaCgpLFxuICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFjdGlvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25TZXJ2aWNlLnJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gTGlzdGVuIHRvICRyb3V0ZUNoYW5nZVN1Y2Nlc3MgKGZ1bGwgbmF2aWdhdGlvbiAtIGFsd2F5cyBzeW5jKVxuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3VjY2Vzcy5zdWJzY3JpYmUoc3luY1JvdXRlcnMpO1xuICAgIC8vIExpc3RlbiB0byAkcm91dGVVcGRhdGUgKHNraXAgaWYgcXVlcnktcGFyYW0tb25seSlcbiAgICB0aGlzLiRuZzFSb3V0ZVVwZGF0ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XG4gICAgICAgICAgY29uc3QgYW5ndWxhclBhdGggPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAvLyBPbmx5IHByb2Nlc3MgaWYgcGF0aCBhY3R1YWxseSBjaGFuZ2VkIChub3QganVzdCBxdWVyeSBwYXJhbXMpXG4gICAgICAgICAgcmV0dXJuIGFuZ3VsYXJQYXRoICE9PSBwYXRoO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShzeW5jUm91dGVycyk7XG4gICAgdGhpcy4kcm91dGVDaGFuZ2VzID0gbWVyZ2UoXG4gICAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3MsXG4gICAgICB0aGlzLmZyb21OZzFFdmVudChjOHlUYWJzLCBjOHlUYWJzLkVWRU5UX1VQREFURSksXG4gICAgICBvZigxKVxuICAgICkucGlwZShkZWJvdW5jZVRpbWUoMTAwKSk7XG4gIH1cblxuICBob29rTmF2aWdhdG9yKCkge1xuICAgIHRoaXMubmF2aWdhdGlvbk5vZGVzJCA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlOYXZpZ2F0b3InKS5yb290Tm9kZXMkO1xuICB9XG5cbiAgZ2V0VGFicygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9ubHlWaXNpYmxlID0gKHsgc2hvdyB9KSA9PiBzaG93O1xuICAgIGNvbnN0IHVwZ3JhZGVUYWIgPSB0YWIgPT4gKHtcbiAgICAgIC4uLnRhYixcbiAgICAgIGxhYmVsOiB0YWIubGFiZWwgfHwgdGFiLm5hbWUsXG4gICAgICBwYXRoOiBkZWNvZGVVUklDb21wb25lbnQodGFiLnBhdGgpXG4gICAgfSk7XG4gICAgY29uc3Qgcm91dGVUYWJzID0gdGhpcy4kcm91dGVDaGFuZ2VzLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5VGFicycpLnJvdXRlVGFicztcbiAgICAgICAgY29uc3QgdmlzaWJpbGl0eVByb21pc2UgPSBQcm9taXNlLmFsbChcbiAgICAgICAgICByb3V0ZXMubWFwKCh7IGNoZWNraW5nVmlzaWJpbGl0eSB9KSA9PiBjaGVja2luZ1Zpc2liaWxpdHkpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB2aXNpYmlsaXR5UHJvbWlzZS50aGVuKCgpID0+IHJvdXRlcy5maWx0ZXIob25seVZpc2libGUpLm1hcCh1cGdyYWRlVGFiKSk7XG4gICAgICB9KSxcbiAgICAgIHN0YXJ0V2l0aChbXSlcbiAgICApO1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtyb3V0ZVRhYnMsIHRoaXMuJGxpdmVUYWJzXSkucGlwZShcbiAgICAgIG1hcCgoW3JvdXRlLCBsaXZlXSkgPT4gcm91dGUuY29uY2F0KGxpdmUpKVxuICAgICk7XG4gIH1cblxuICBnZXRRdWlja0xpbmtzKCk6IFByb21pc2U8RG9jTGlua1tdPiB7XG4gICAgY29uc3QgYzh5UXVpY2tMaW5rcyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlRdWlja0xpbmtzJyk7XG4gICAgcmV0dXJuIGM4eVF1aWNrTGlua3MubGlzdCgpO1xuICB9XG5cbiAgZ2V0QWN0aW9uQmFySXRlbXMoKTogT2JzZXJ2YWJsZTxBY3Rpb25CYXJJdGVtPiB7XG4gICAgY29uc3QgYzh5QWN0aW9uQmFyID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbkJhcicpO1xuICAgIGNvbnN0ICRyb290U2NvcGUgPSB0aGlzLmluamVjdG9yLmdldCgnJHJvb3RTY29wZScpO1xuICAgIGNvbnN0IGdldEFjdGlvbkJhckVsZW1lbnRzID0gKCkgPT5cbiAgICAgIGM4eUFjdGlvbkJhci5lbGVtZW50cy5tYXAoZWxlbWVudCA9PiAoe1xuICAgICAgICBwcmlvcml0eTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbi1iYXItcHJpb3JpdHknKSB8fCAwLFxuICAgICAgICB0ZW1wbGF0ZTogZWxlbWVudCxcbiAgICAgICAgcGxhY2VtZW50OiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnYWN0aW9uLWJhci1wb3NpdGlvbicpIHx8ICdyaWdodCdcbiAgICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcy5mcm9tTmcxRXZlbnQoJHJvb3RTY29wZSwgJ2M4eUFjdGlvbkJhckNoYW5nZWQnKS5waXBlKFxuICAgICAgc3RhcnRXaXRoKDEpLFxuICAgICAgbWFwKGdldEFjdGlvbkJhckVsZW1lbnRzKVxuICAgICk7XG4gIH1cblxuICBnZXRCcmVhZGNydW1icygpOiBPYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4ge1xuICAgIGNvbnN0ICRsb2NhdGlvbiA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckbG9jYXRpb24nKTtcbiAgICBjb25zdCBjOHlCcmVhZGNydW1icyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlCcmVhZGNydW1icycpO1xuICAgIGNvbnN0IGJyZWFkY3J1bWJzVXBkYXRlJCA9IG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT5cbiAgICAgIGM4eUJyZWFkY3J1bWJzLiRvbigndXBkYXRlJywgKCkgPT4gc3Vic2NyaWJlci5uZXh0KCkpXG4gICAgKTtcbiAgICByZXR1cm4gYnJlYWRjcnVtYnNVcGRhdGUkLnBpcGUoXG4gICAgICBzdGFydFdpdGgoMCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0gJGxvY2F0aW9uLnBhdGgoKTtcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYnMgPSBjOHlCcmVhZGNydW1icy5nZXQocGF0aCkgfHwge307XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzRGF0YSA9IHRoaXMucmVzb2x2ZUJyZWFkY3J1bWJzRGF0YShicmVhZGNydW1icy5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGZyb20oYnJlYWRjcnVtYnNEYXRhKS5waXBlKFxuICAgICAgICAgIG1hcCgodmFsdWU6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaXZlQnJlYWRjcnVtYnMgPSBjOHlCcmVhZGNydW1icy5nZXRMaXZlQnJlYWRjcnVtYnMoKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY29uY2F0KGxpdmVCcmVhZGNydW1icyk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGl0ZW1zID0+ICh7IGl0ZW1zOiBpdGVtcyBhcyBCcmVhZGNydW1iSXRlbVtdIH0pIGFzIEJyZWFkY3J1bWIpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXNvbHZlQnJlYWRjcnVtYnNEYXRhKGRhdGEpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmludm9rZShkYXRhKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gZW1wdHlcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiBvZihbZGF0YV0pO1xuICAgIH1cbiAgICByZXR1cm4gb2YoW10pO1xuICB9XG5cbiAgZ2V0U2VhcmNoKCk6IFNlYXJjaFtdIHtcbiAgICBjb25zdCBjOHlTZWFyY2ggPSB0aGlzLmluamVjdG9yLmdldCgnYzh5U2VhcmNoJyk7XG4gICAgcmV0dXJuIGM4eVNlYXJjaC5saXN0KCkubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogJ3NlYXJjaCcsXG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgdGVybTogJycsXG4gICAgICAgIG9uU2VhcmNoKCkge1xuICAgICAgICAgIGlmICh0aGlzLnRlcm0pIHtcbiAgICAgICAgICAgIGM4eVNlYXJjaC5zZWFyY2godGhpcy50ZXJtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gYXMgU2VhcmNoO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWN0aW9ucygpOiBPYnNlcnZhYmxlPEFjdGlvbj4ge1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRBY3Rpb25zID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbnMnKS5yZWdpc3RlcmVkQWN0aW9ucztcbiAgICByZXR1cm4gb2YoXG4gICAgICByZWdpc3RlcmVkQWN0aW9uc1xuICAgICAgICAuZmlsdGVyKGFjdGlvbiA9PiAhYWN0aW9uLmhpZGRlbilcbiAgICAgICAgLm1hcChhY3Rpb24gPT4gKHtcbiAgICAgICAgICAvLyBUaGUgcHJpb3JpdHkgd2FzIHJldmVyc2VkOiBBbGlnbmVkIGl0IHRvIGRhc2hib2FyZCwgaGlnaCBmaXJzdCwgbG93IGxhc3QuXG4gICAgICAgICAgcHJpb3JpdHk6IChhY3Rpb24ucHJpb3JpdHkgfHwgMCkgKiAtMSxcbiAgICAgICAgICBsYWJlbDogYWN0aW9uLnRleHQsXG4gICAgICAgICAgaWNvbjogYWN0aW9uLmljb24sXG4gICAgICAgICAgZGlzYWJsZWQ6IGFjdGlvbi5kaXNhYmxlZCxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IuaW52b2tlKGFjdGlvbi5hY3Rpb24sIGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgZnJvbU5nMUV2ZW50KG9iaiwgZXZ0KSB7XG4gICAgbGV0IHN0b3BMaXN0ZW5pbmc7XG4gICAgZnVuY3Rpb24gYWRkKGhhbmRsZXIpIHtcbiAgICAgIHN0b3BMaXN0ZW5pbmcgPSBvYmouJG9uKGV2dCwgaGFuZGxlcik7XG4gICAgfVxuICAgIHJldHVybiBmcm9tRXZlbnRQYXR0ZXJuKGFkZCwgKCkgPT4gc3RvcExpc3RlbmluZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgaG9va1VzZXJNZW51KCkge1xuICAgIGNvbnN0IHVzZXJNZW51U2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlVc2VyTWVudVNlcnZpY2UnKTtcbiAgICBjb25zdCBjOHlBY2Nlc3NEZW5pZWQgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5QWNjZXNzRGVuaWVkJyk7XG4gICAgdXNlck1lbnVTZXJ2aWNlLmFkZCh7XG4gICAgICBpY29uOiAnYWNjZXNzJyxcbiAgICAgIHByaW9yaXR5OiAxMCxcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBY2Nlc3MgZGVuaWVkIHJlcXVlc3RzJyksXG4gICAgICBjbGljazogYzh5QWNjZXNzRGVuaWVkLnNob3dBY2Nlc3NEZW5pZWRSZXF1ZXN0c0xpc3RcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJpZGdlU2VydmljZUZhY3RvcnkoXG4gIGluamVjdG9yOiBhbnksXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gIHJvdXRlcjogUm91dGVyLFxuICBuZ1pvbmU6IE5nWm9uZSxcbiAgcm91dGVyU2VydmljZTogUm91dGVyU2VydmljZSxcbiAgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgcGx1Z2luczogUGx1Z2luc1Jlc29sdmVTZXJ2aWNlXG4pIHtcbiAgcmV0dXJuIG5ldyBCcmlkZ2VTZXJ2aWNlKFxuICAgIGluamVjdG9yLFxuICAgIGFwcFN0YXRlLFxuICAgIHJvdXRlcixcbiAgICBuZ1pvbmUsXG4gICAgcm91dGVyU2VydmljZSxcbiAgICBhY3Rpb25TZXJ2aWNlLFxuICAgIHBsdWdpbnNcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJyaWRnZVNlcnZpY2VQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogQnJpZGdlU2VydmljZSxcbiAgdXNlRmFjdG9yeTogYnJpZGdlU2VydmljZUZhY3RvcnksXG4gIGRlcHM6IFtcbiAgICAnJGluamVjdG9yJyxcbiAgICBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgUm91dGVyLFxuICAgIE5nWm9uZSxcbiAgICBSb3V0ZXJTZXJ2aWNlLFxuICAgIEFjdGlvblNlcnZpY2UsXG4gICAgUGx1Z2luc1Jlc29sdmVTZXJ2aWNlXG4gIF1cbn07XG4iXX0=
@@ -197,26 +197,13 @@ class DatapointLibraryDetailsComponent {
197
197
  }, { validators: [C8yValidators.minMaxValidator(), C8yValidators.requireBothMinAndMax()] });
198
198
  return this.formBuilder.group({
199
199
  color: ['', [Validators.required, Validators.minLength(4)]],
200
- label: ['', [Validators.required, Validators.minLength(1), Validators.maxLength(120)]],
200
+ label: ['', [Validators.required, Validators.minLength(1)]],
201
201
  description: ['', []],
202
202
  fragment: [
203
203
  '',
204
- [
205
- Validators.required,
206
- Validators.minLength(1),
207
- Validators.maxLength(120),
208
- Validators.pattern(/^[^.]*$/)
209
- ]
210
- ],
211
- series: [
212
- '',
213
- [
214
- Validators.required,
215
- Validators.minLength(1),
216
- Validators.maxLength(120),
217
- Validators.pattern(/^[^.]*$/)
218
- ]
204
+ [Validators.required, Validators.minLength(1), Validators.pattern(/^[^.]*$/)]
219
205
  ],
206
+ series: ['', [Validators.required, Validators.minLength(1), Validators.pattern(/^[^.]*$/)]],
220
207
  range: this.range,
221
208
  unit: [undefined, []],
222
209
  target: [undefined, []],