@c8y/ngx-components 1021.56.5 → 1021.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
  2. package/context-dashboard/context-dashboard.service.d.ts +1 -1
  3. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  4. package/core/dashboard/dashboard.model.d.ts +1 -1
  5. package/core/dashboard/dashboard.model.d.ts.map +1 -1
  6. package/core/dashboard/widgets-dashboard.component.d.ts +3 -2
  7. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  8. package/ecosystem/microservices/add-microservice.component.d.ts.map +1 -1
  9. package/esm2022/context-dashboard/context-dashboard.component.mjs +2 -6
  10. package/esm2022/context-dashboard/context-dashboard.service.mjs +14 -8
  11. package/esm2022/context-dashboard/dashboard-detail.component.mjs +2 -2
  12. package/esm2022/core/dashboard/dashboard.model.mjs +2 -2
  13. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +9 -8
  14. package/esm2022/ecosystem/microservices/add-microservice.component.mjs +2 -2
  15. package/esm2022/upgrade/upgraded-services/roles.service.mjs +1 -1
  16. package/esm2022/user-roles/roles-asset-tree/roles-asset-tree.component.mjs +2 -2
  17. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +14 -12
  18. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
  20. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-user-roles.mjs +1 -1
  23. package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components.mjs +8 -7
  25. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  26. package/package.json +1 -1
  27. package/upgrade/upgraded-services/roles.service.d.ts +1 -1
  28. package/upgrade/upgraded-services/roles.service.d.ts.map +1 -1
@@ -1,6 +1,6 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { ActivatedRoute } from '@angular/router';
3
- import { CopyDashboardDisabledReason, NEW_DASHBOARD_QUERY_PARAM } from './dashboard.model';
2
+ import { ActivatedRoute, Router } from '@angular/router';
3
+ import { CopyDashboardDisabledReason, NEW_DASHBOARD_ROUTER_STATE_PROP } from './dashboard.model';
4
4
  import { DynamicComponentService } from '../dynamic-component/dynamic-component.service';
5
5
  import { BehaviorSubject, combineLatest, fromEvent, merge } from 'rxjs';
6
6
  import { map, shareReplay, startWith, switchMap } from 'rxjs/operators';
@@ -48,12 +48,13 @@ export class WidgetsDashboardComponent {
48
48
  this.settings = { ...this.settings, ...settings };
49
49
  this.isLoading$.next(!!this.settings.isLoading);
50
50
  }
51
- constructor(dynamic, translateService, route, modal, widgetGlobalAutoRefresh) {
51
+ constructor(dynamic, translateService, route, modal, widgetGlobalAutoRefresh, router) {
52
52
  this.dynamic = dynamic;
53
53
  this.translateService = translateService;
54
54
  this.route = route;
55
55
  this.modal = modal;
56
56
  this.widgetGlobalAutoRefresh = widgetGlobalAutoRefresh;
57
+ this.router = router;
57
58
  /**
58
59
  * Indicates if device info in config should be overridden with values from context property.
59
60
  */
@@ -93,8 +94,8 @@ export class WidgetsDashboardComponent {
93
94
  this.ACTION_BAR_EDIT_WIDGETS_PRIORITY = 10;
94
95
  this._widgets = new BehaviorSubject([]);
95
96
  this.isLoading$ = new BehaviorSubject(!!this._settings?.isLoading);
96
- const isNewDashboard = this.route.snapshot.queryParams[NEW_DASHBOARD_QUERY_PARAM];
97
- if (isNewDashboard === 'true') {
97
+ const navigation = this.router.getCurrentNavigation();
98
+ if (navigation?.extras.state?.[NEW_DASHBOARD_ROUTER_STATE_PROP]) {
98
99
  this.enableEditMode();
99
100
  }
100
101
  this.resolvedWidgets$ = this._widgets.pipe(switchMap(widgets => this.executeResolversOfWidgets(widgets)), shareReplay(1));
@@ -253,7 +254,7 @@ export class WidgetsDashboardComponent {
253
254
  });
254
255
  return widgets;
255
256
  }
256
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WidgetsDashboardComponent, deps: [{ token: i1.DynamicComponentService }, { token: i2.TranslateService }, { token: i3.ActivatedRoute }, { token: i4.ModalService }, { token: i5.WidgetGlobalAutoRefreshService }], target: i0.ɵɵFactoryTarget.Component }); }
257
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WidgetsDashboardComponent, deps: [{ token: i1.DynamicComponentService }, { token: i2.TranslateService }, { token: i3.ActivatedRoute }, { token: i4.ModalService }, { token: i5.WidgetGlobalAutoRefreshService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
257
258
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: { widgets: "widgets", context: "context", contextDashboard: "contextDashboard", _settings: ["settings", "_settings"], isCopyDisabled: "isCopyDisabled", breadcrumb: "breadcrumb", editModeButtons: "editModeButtons" }, outputs: { onAddWidget: "onAddWidget", onEditWidget: "onEditWidget", onDeleteWidget: "onDeleteWidget", onChangeDashboard: "onChangeDashboard", onResize: "onResize", onEditDashboard: "onEditDashboard", onCopyDashboard: "onCopyDashboard", onDeleteDashboard: "onDeleteDashboard", onChangeStart: "onChangeStart", onChangeEnd: "onChangeEnd", onSaveDashboard: "onSaveDashboard", onCancelDashboard: "onCancelDashboard", revertChange: "revertChange" }, host: { styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, providers: [WidgetsDashboardEventService], usesOnChanges: true, ngImport: i0, template: "<c8y-title *ngIf=\"!!settings.title\">\n {{ settings.title | translate }}\n</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"!!breadcrumb\">\n <c8y-breadcrumb-item\n [icon]=\"breadcrumb.icon\"\n [label]=\"breadcrumb.label\"\n [path]=\"breadcrumb.path\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n [priority]=\"ACTION_BAR_EDIT_WIDGETS_PRIORITY\"\n *ngIf=\"!(editMode$ | async)\"\n>\n <button\n class=\"btn btn-link animated fadeIn hidden-xs\"\n title=\"{{ 'Edit widgets' | translate }}\"\n type=\"button\"\n [disabled]=\"settings.isDisabled\"\n (click)=\"enableEditMode()\"\n data-cy=\"c8y-widget-dashboard--edit-widgets\"\n >\n <i c8yIcon=\"send-backward\"></i>\n <span class=\"m-l-4\">{{ 'Edit widgets' | translate }}</span>\n </button>\n <button\n class=\"btn btn-link visible-xs m-l-0\"\n tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n type=\"button\"\n [disabled]=\"true\"\n >\n <i c8yIcon=\"send-backward\"></i>\n <span class=\"m-l-4\">{{ 'Edit widgets' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n *ngIf=\"editMode$ | async\"\n>\n <button\n class=\"btn btn-link animated fadeIn\"\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n (click)=\"onAddWidget.emit()\"\n data-cy=\"widget-dashboard--Add-widget\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add widget' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"d-flex a-i-center gap-8\"\n *ngIf=\"editMode$ | async\"\n>\n <div class=\"input-group input-group-sm animated fadeIn\">\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default btn-sm btn-icon\"\n [attr.aria-label]=\"'Undo' | translate\"\n [tooltip]=\"\n editModeButtons.undoButtonDisabled\n ? ''\n : (undoMessage\n | translate: { changeToUndo: editModeButtons.changeToUndoName | translate })\n \"\n container=\"body\"\n (click)=\"revertChange.emit('undo')\"\n [disabled]=\"editModeButtons.undoButtonDisabled\"\n >\n <i [c8yIcon]=\"'undo'\"></i>\n </button>\n </div>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default btn-sm btn-icon\"\n [attr.aria-label]=\"'Redo' | translate\"\n [tooltip]=\"\n editModeButtons.redoButtonDisabled\n ? ''\n : (redoMessage\n | translate: { changeToRedo: editModeButtons.changeToRedoName | translate })\n \"\n container=\"body\"\n (click)=\"revertChange.emit('redo')\"\n [disabled]=\"editModeButtons.redoButtonDisabled\"\n >\n <i [c8yIcon]=\"'redo'\"></i>\n </button>\n </div>\n <span></span>\n </div>\n <div class=\"btn-group animated fadeIn\">\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancelDashboardSave()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm m-l-8\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"editModeButtons.undoButtonDisabled\"\n (click)=\"saveDashboard()\"\n data-cy=\"c8y-widgets-dashboard--save\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"onEditDashboard.observers.length\"\n>\n <button\n class=\"btn btn-link hidden-xs m-l-0\"\n title=\"{{ 'Dashboard settings' | translate }}\"\n type=\"button\"\n [disabled]=\"settings.isDisabled || (editMode$ | async)\"\n (click)=\"onEditDashboard.emit()\"\n data-cy=\"c8y-widgets-dashboard--edit-dashboard\"\n >\n <i c8yIcon=\"sorting-slider\"></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Dashboard settings' | translate }}\n </span>\n </button>\n <button\n class=\"btn btn-link visible-xs m-l-0\"\n tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n type=\"button\"\n [disabled]=\"true\"\n >\n <i c8yIcon=\"sorting-slider\"></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Dashboard settings' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"settings.allowFullscreen\"\n [priority]=\"-5000\"\n itemClass=\"pull-right\"\n>\n <button\n class=\"btn btn-link\"\n [attr.aria-label]=\"'Full screen' | translate\"\n tooltip=\"{{ 'Full screen' | translate }}\"\n placement=\"left\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleFullscreen()\"\n data-cy=\"widgets-dashboard--Full-screen\"\n >\n <i [c8yIcon]=\"(inFullScreen$ | async) ? 'compress' : 'expand'\"></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visibile-lg-inline\">\n {{ 'Full screen' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n *ngIf=\"settings.canCopy\"\n>\n <div\n [ngStyle]=\"{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center'\n }\"\n >\n <button\n class=\"hidden-xs\"\n title=\"{{\n (isCopyDisabled === true || !isCopyDisabled?.state ? 'Disabled' : copyDashboardLabel)\n | translate\n }}\"\n type=\"button\"\n [ngClass]=\"{ 'btn btn-link': !settings.canDelete }\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"onCopyDashboard.emit()\"\n [disabled]=\"isCopyDisabled === true || !isCopyDisabled?.state || (editMode$ | async)\"\n >\n <i c8yIcon=\"clone\"></i>\n <span>{{ copyDashboardLabel | translate }}</span>\n </button>\n <button\n class=\"btn-help btn-help--sm m-r-16 hidden-xs\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"copyDisabledPopoverMsg | translate\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n *ngIf=\"!isCopyDisabled?.state && copyDisabledPopoverMsg\"\n data-cy=\"widgets-dashboard--info-copy-dashboard\"\n (click)=\"$event.stopPropagation()\"\n ></button>\n </div>\n <button\n class=\"visible-xs m-l-0\"\n tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n type=\"button\"\n [ngClass]=\"{ 'btn btn-link': !settings.canDelete }\"\n [disabled]=\"true\"\n >\n <i c8yIcon=\"clone\"></i>\n <span>{{ copyDashboardLabel | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-3000\"\n *ngIf=\"settings.canDelete && onDeleteDashboard.observers.length\"\n>\n <button\n class=\"hidden-xs\"\n title=\"{{ 'Delete dashboard' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--delete-dashboard\"\n [ngClass]=\"{ 'btn btn-link': !settings.canCopy }\"\n (click)=\"onDeleteDashboard.emit()\"\n [disabled]=\"settings.isDisabled || (editMode$ | async)\"\n >\n <i c8yIcon=\"delete\"></i>\n <span translate>Delete dashboard</span>\n </button>\n <button\n class=\"visible-xs m-l-0\"\n tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--delete-dashboard-mobile\"\n [ngClass]=\"{ 'btn btn-link': !settings.canCopy }\"\n [disabled]=\"true\"\n >\n <i c8yIcon=\"delete\"></i>\n <span translate>Delete dashboard</span>\n </button>\n</c8y-action-bar-item>\n\n<ng-template #loadingIndicator>\n <c8y-loading\n class=\"col-xs-12 text-center\"\n *ngIf=\"isLoadingWidgets$ | async\"\n ></c8y-loading>\n</ng-template>\n\n<ng-container *ngIf=\"!(isLoadingWidgets$ | async); else loadingIndicator\">\n <ng-container *ngIf=\"resolvedWidgets$ | async as widgetsToDisplay\">\n <!-- empty state -->\n <c8y-ui-empty-state\n [icon]=\"'c8y-device'\"\n [title]=\"'No widgets to display.' | translate\"\n *ngIf=\"widgetsToDisplay?.length === 0\"\n >\n <div *ngIf=\"onAddWidget.observers.length\">\n <p\n translate\n *ngIf=\"editMode$ | async\"\n >\n Add widgets to this dashboard.\n </p>\n <p\n translate\n *ngIf=\"!(editMode$ | async)\"\n >\n Click \"Edit widgets\" to unlock\n </p>\n <div>\n <button\n class=\"btn btn-primary m-t-16\"\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n [disabled]=\"settings.isDisabled || !(editMode$ | async)\"\n (click)=\"onAddWidget.emit()\"\n data-cy=\"c8y-widgets-dashboard--add-widget\"\n translate\n >\n Add widget\n </button>\n </div>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/cockpit/working-with-dashboards\">user documentation</a>\n .\n </small>\n </p>\n </div>\n </c8y-ui-empty-state>\n\n <c8y-dashboard\n [columns]=\"settings.columns\"\n (dashboardChange)=\"onChangeDashboard.emit($event)\"\n #dashboard\n >\n <c8y-dashboard-child\n [class]=\"widget.classes\"\n *ngFor=\"let widget of widgetsToDisplay\"\n [x]=\"widget._x\"\n [y]=\"widget._y\"\n [width]=\"widget._width || settings.defaultWidth\"\n [height]=\"widget._height || settings.defaultHeight\"\n [margin]=\"settings.widgetMargin\"\n [data]=\"widget\"\n [useIntersection]=\"true\"\n [editMode]=\"editMode$ | async\"\n (changeStart)=\"onChangeStart.emit({ widget: widget, source: child, dashboard: dashboard })\"\n (changeEnd)=\"onChangeEnd.emit({ widget: widget, source: child, dashboard: dashboard })\"\n (toggleFullscreen)=\"toggleFullscreenOnWidget(child)\"\n [canToggleFullscreen]=\"!(inFullScreen$ | async) || widgetInFullscreenMode\"\n #child\n >\n <c8y-dashboard-child-title>\n <span\n data-cy=\"c8y-dashboard-list--device-widget\"\n *ngIf=\"settings.translateWidgetTitle\"\n >\n {{ widget.title | translate }}\n </span>\n <span *ngIf=\"!settings.translateWidgetTitle\">\n {{ widget.title }}\n </span>\n </c8y-dashboard-child-title>\n <c8y-dashboard-child-action *ngIf=\"onEditWidget.observers.length\">\n <button\n title=\"{{ 'Edit widget' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--Edit-widget\"\n (click)=\"onEditWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"pencil\"></i>\n <span translate>Edit</span>\n </button>\n </c8y-dashboard-child-action>\n <c8y-dashboard-child-action *ngIf=\"onDeleteWidget.observers.length\">\n <button\n title=\"{{ 'Remove widget' | translate }}\"\n type=\"button\"\n data-cy=\"c8y-widgets-dashboard--remove-widget\"\n (click)=\"onDeleteWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"delete\"></i>\n <span translate>Remove</span>\n </button>\n </c8y-dashboard-child-action>\n\n <c8y-widget-time-context\n *ngIf=\"\n (widget.config?.displaySettings?.globalTimeContext ||\n widget.config?.displaySettings?.globalRealtimeContext) &&\n (widget.config.widgetInstanceGlobalTimeContext ||\n widget.config.widgetInstanceGlobalAutoRefreshContext)\n \"\n (dateContextChange)=\"updateWidgetConfig($event, widget)\"\n [canDecouple]=\"widget.config.canDecoupleGlobalTimeContext\"\n [displaySettings]=\"widget.config.displaySettings\"\n [hidden]=\"editMode$ | async\"\n ></c8y-widget-time-context>\n\n <c8y-widget-auto-refresh-context\n *ngIf=\"\n widget?.config?.widgetInstanceGlobalAutoRefreshContext &&\n widget.config?.displaySettings.globalAutoRefreshContext\n \"\n [editMode$]=\"editMode$\"\n ></c8y-widget-auto-refresh-context>\n\n <c8y-dynamic-component\n [componentId]=\"widget.componentId || widget.name\"\n [config]=\"\n widget.templateUrl || widget.widgetComponent\n ? { child: widget, dashboard: contextDashboard, context: context }\n : widget.config\n \"\n *ngIf=\"child.intersected\"\n (updateWidgetClasses)=\"updateWidgetClasses(widget, $event)\"\n ></c8y-dynamic-component>\n </c8y-dashboard-child>\n </c8y-dashboard>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "component", type: i6.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i7.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i8.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i10.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i11.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i12.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "directive", type: i13.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: "component", type: i14.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i15.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i16.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i17.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i18.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i19.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: i20.WidgetTimeContextComponent, selector: "c8y-widget-time-context", inputs: ["canDecouple", "displaySettings", "hidden"], outputs: ["dateContextChange"] }, { kind: "component", type: i21.DashboardChildActionComponent, selector: "c8y-dashboard-child-action" }, { kind: "component", type: i22.DashboardChildComponent, selector: "c8y-dashboard-child", inputs: ["x", "y", "width", "height", "data", "margin", "useIntersection", "isFrozen", "canToggleFullscreen", "editMode", "class"], outputs: ["changeStart", "changeEnd", "toggleFullscreen"] }, { kind: "component", type: i23.DashboardComponent, selector: "c8y-dashboard", inputs: ["columns", "gap", "rows"], outputs: ["dashboardChange"] }, { kind: "component", type: i24.DashboardChildTitleComponent, selector: "c8y-dashboard-child-title" }, { kind: "component", type: i25.WidgetAutoRefreshContextComponent, selector: "c8y-widget-auto-refresh-context", inputs: ["editMode$"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
258
259
  }
259
260
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WidgetsDashboardComponent, decorators: [{
@@ -264,7 +265,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
264
265
  `,
265
266
  class: 'dashboard c8y-grid-dashboard'
266
267
  }, providers: [WidgetsDashboardEventService], template: "<c8y-title *ngIf=\"!!settings.title\">\n {{ settings.title | translate }}\n</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"!!breadcrumb\">\n <c8y-breadcrumb-item\n [icon]=\"breadcrumb.icon\"\n [label]=\"breadcrumb.label\"\n [path]=\"breadcrumb.path\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n [priority]=\"ACTION_BAR_EDIT_WIDGETS_PRIORITY\"\n *ngIf=\"!(editMode$ | async)\"\n>\n <button\n class=\"btn btn-link animated fadeIn hidden-xs\"\n title=\"{{ 'Edit widgets' | translate }}\"\n type=\"button\"\n [disabled]=\"settings.isDisabled\"\n (click)=\"enableEditMode()\"\n data-cy=\"c8y-widget-dashboard--edit-widgets\"\n >\n <i c8yIcon=\"send-backward\"></i>\n <span class=\"m-l-4\">{{ 'Edit widgets' | translate }}</span>\n </button>\n <button\n class=\"btn btn-link visible-xs m-l-0\"\n tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n type=\"button\"\n [disabled]=\"true\"\n >\n <i c8yIcon=\"send-backward\"></i>\n <span class=\"m-l-4\">{{ 'Edit widgets' | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n *ngIf=\"editMode$ | async\"\n>\n <button\n class=\"btn btn-link animated fadeIn\"\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n (click)=\"onAddWidget.emit()\"\n data-cy=\"widget-dashboard--Add-widget\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add widget' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"d-flex a-i-center gap-8\"\n *ngIf=\"editMode$ | async\"\n>\n <div class=\"input-group input-group-sm animated fadeIn\">\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default btn-sm btn-icon\"\n [attr.aria-label]=\"'Undo' | translate\"\n [tooltip]=\"\n editModeButtons.undoButtonDisabled\n ? ''\n : (undoMessage\n | translate: { changeToUndo: editModeButtons.changeToUndoName | translate })\n \"\n container=\"body\"\n (click)=\"revertChange.emit('undo')\"\n [disabled]=\"editModeButtons.undoButtonDisabled\"\n >\n <i [c8yIcon]=\"'undo'\"></i>\n </button>\n </div>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default btn-sm btn-icon\"\n [attr.aria-label]=\"'Redo' | translate\"\n [tooltip]=\"\n editModeButtons.redoButtonDisabled\n ? ''\n : (redoMessage\n | translate: { changeToRedo: editModeButtons.changeToRedoName | translate })\n \"\n container=\"body\"\n (click)=\"revertChange.emit('redo')\"\n [disabled]=\"editModeButtons.redoButtonDisabled\"\n >\n <i [c8yIcon]=\"'redo'\"></i>\n </button>\n </div>\n <span></span>\n </div>\n <div class=\"btn-group animated fadeIn\">\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancelDashboardSave()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm m-l-8\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"editModeButtons.undoButtonDisabled\"\n (click)=\"saveDashboard()\"\n data-cy=\"c8y-widgets-dashboard--save\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"onEditDashboard.observers.length\"\n>\n <button\n class=\"btn btn-link hidden-xs m-l-0\"\n title=\"{{ 'Dashboard settings' | translate }}\"\n type=\"button\"\n [disabled]=\"settings.isDisabled || (editMode$ | async)\"\n (click)=\"onEditDashboard.emit()\"\n data-cy=\"c8y-widgets-dashboard--edit-dashboard\"\n >\n <i c8yIcon=\"sorting-slider\"></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Dashboard settings' | translate }}\n </span>\n </button>\n <button\n class=\"btn btn-link visible-xs m-l-0\"\n tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n type=\"button\"\n [disabled]=\"true\"\n >\n <i c8yIcon=\"sorting-slider\"></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Dashboard settings' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"settings.allowFullscreen\"\n [priority]=\"-5000\"\n itemClass=\"pull-right\"\n>\n <button\n class=\"btn btn-link\"\n [attr.aria-label]=\"'Full screen' | translate\"\n tooltip=\"{{ 'Full screen' | translate }}\"\n placement=\"left\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleFullscreen()\"\n data-cy=\"widgets-dashboard--Full-screen\"\n >\n <i [c8yIcon]=\"(inFullScreen$ | async) ? 'compress' : 'expand'\"></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visibile-lg-inline\">\n {{ 'Full screen' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-2000\"\n *ngIf=\"settings.canCopy\"\n>\n <div\n [ngStyle]=\"{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center'\n }\"\n >\n <button\n class=\"hidden-xs\"\n title=\"{{\n (isCopyDisabled === true || !isCopyDisabled?.state ? 'Disabled' : copyDashboardLabel)\n | translate\n }}\"\n type=\"button\"\n [ngClass]=\"{ 'btn btn-link': !settings.canDelete }\"\n data-cy=\"widgets-dashboard--copy-dashboard\"\n (click)=\"onCopyDashboard.emit()\"\n [disabled]=\"isCopyDisabled === true || !isCopyDisabled?.state || (editMode$ | async)\"\n >\n <i c8yIcon=\"clone\"></i>\n <span>{{ copyDashboardLabel | translate }}</span>\n </button>\n <button\n class=\"btn-help btn-help--sm m-r-16 hidden-xs\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"copyDisabledPopoverMsg | translate\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n *ngIf=\"!isCopyDisabled?.state && copyDisabledPopoverMsg\"\n data-cy=\"widgets-dashboard--info-copy-dashboard\"\n (click)=\"$event.stopPropagation()\"\n ></button>\n </div>\n <button\n class=\"visible-xs m-l-0\"\n tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n type=\"button\"\n [ngClass]=\"{ 'btn btn-link': !settings.canDelete }\"\n [disabled]=\"true\"\n >\n <i c8yIcon=\"clone\"></i>\n <span>{{ copyDashboardLabel | translate }}</span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'more'\"\n [priority]=\"-3000\"\n *ngIf=\"settings.canDelete && onDeleteDashboard.observers.length\"\n>\n <button\n class=\"hidden-xs\"\n title=\"{{ 'Delete dashboard' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--delete-dashboard\"\n [ngClass]=\"{ 'btn btn-link': !settings.canCopy }\"\n (click)=\"onDeleteDashboard.emit()\"\n [disabled]=\"settings.isDisabled || (editMode$ | async)\"\n >\n <i c8yIcon=\"delete\"></i>\n <span translate>Delete dashboard</span>\n </button>\n <button\n class=\"visible-xs m-l-0\"\n tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--delete-dashboard-mobile\"\n [ngClass]=\"{ 'btn btn-link': !settings.canCopy }\"\n [disabled]=\"true\"\n >\n <i c8yIcon=\"delete\"></i>\n <span translate>Delete dashboard</span>\n </button>\n</c8y-action-bar-item>\n\n<ng-template #loadingIndicator>\n <c8y-loading\n class=\"col-xs-12 text-center\"\n *ngIf=\"isLoadingWidgets$ | async\"\n ></c8y-loading>\n</ng-template>\n\n<ng-container *ngIf=\"!(isLoadingWidgets$ | async); else loadingIndicator\">\n <ng-container *ngIf=\"resolvedWidgets$ | async as widgetsToDisplay\">\n <!-- empty state -->\n <c8y-ui-empty-state\n [icon]=\"'c8y-device'\"\n [title]=\"'No widgets to display.' | translate\"\n *ngIf=\"widgetsToDisplay?.length === 0\"\n >\n <div *ngIf=\"onAddWidget.observers.length\">\n <p\n translate\n *ngIf=\"editMode$ | async\"\n >\n Add widgets to this dashboard.\n </p>\n <p\n translate\n *ngIf=\"!(editMode$ | async)\"\n >\n Click \"Edit widgets\" to unlock\n </p>\n <div>\n <button\n class=\"btn btn-primary m-t-16\"\n title=\"{{ 'Add widget' | translate }}\"\n type=\"button\"\n [disabled]=\"settings.isDisabled || !(editMode$ | async)\"\n (click)=\"onAddWidget.emit()\"\n data-cy=\"c8y-widgets-dashboard--add-widget\"\n translate\n >\n Add widget\n </button>\n </div>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/cockpit/working-with-dashboards\">user documentation</a>\n .\n </small>\n </p>\n </div>\n </c8y-ui-empty-state>\n\n <c8y-dashboard\n [columns]=\"settings.columns\"\n (dashboardChange)=\"onChangeDashboard.emit($event)\"\n #dashboard\n >\n <c8y-dashboard-child\n [class]=\"widget.classes\"\n *ngFor=\"let widget of widgetsToDisplay\"\n [x]=\"widget._x\"\n [y]=\"widget._y\"\n [width]=\"widget._width || settings.defaultWidth\"\n [height]=\"widget._height || settings.defaultHeight\"\n [margin]=\"settings.widgetMargin\"\n [data]=\"widget\"\n [useIntersection]=\"true\"\n [editMode]=\"editMode$ | async\"\n (changeStart)=\"onChangeStart.emit({ widget: widget, source: child, dashboard: dashboard })\"\n (changeEnd)=\"onChangeEnd.emit({ widget: widget, source: child, dashboard: dashboard })\"\n (toggleFullscreen)=\"toggleFullscreenOnWidget(child)\"\n [canToggleFullscreen]=\"!(inFullScreen$ | async) || widgetInFullscreenMode\"\n #child\n >\n <c8y-dashboard-child-title>\n <span\n data-cy=\"c8y-dashboard-list--device-widget\"\n *ngIf=\"settings.translateWidgetTitle\"\n >\n {{ widget.title | translate }}\n </span>\n <span *ngIf=\"!settings.translateWidgetTitle\">\n {{ widget.title }}\n </span>\n </c8y-dashboard-child-title>\n <c8y-dashboard-child-action *ngIf=\"onEditWidget.observers.length\">\n <button\n title=\"{{ 'Edit widget' | translate }}\"\n type=\"button\"\n data-cy=\"widgets-dashboard--Edit-widget\"\n (click)=\"onEditWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"pencil\"></i>\n <span translate>Edit</span>\n </button>\n </c8y-dashboard-child-action>\n <c8y-dashboard-child-action *ngIf=\"onDeleteWidget.observers.length\">\n <button\n title=\"{{ 'Remove widget' | translate }}\"\n type=\"button\"\n data-cy=\"c8y-widgets-dashboard--remove-widget\"\n (click)=\"onDeleteWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n >\n <i c8yIcon=\"delete\"></i>\n <span translate>Remove</span>\n </button>\n </c8y-dashboard-child-action>\n\n <c8y-widget-time-context\n *ngIf=\"\n (widget.config?.displaySettings?.globalTimeContext ||\n widget.config?.displaySettings?.globalRealtimeContext) &&\n (widget.config.widgetInstanceGlobalTimeContext ||\n widget.config.widgetInstanceGlobalAutoRefreshContext)\n \"\n (dateContextChange)=\"updateWidgetConfig($event, widget)\"\n [canDecouple]=\"widget.config.canDecoupleGlobalTimeContext\"\n [displaySettings]=\"widget.config.displaySettings\"\n [hidden]=\"editMode$ | async\"\n ></c8y-widget-time-context>\n\n <c8y-widget-auto-refresh-context\n *ngIf=\"\n widget?.config?.widgetInstanceGlobalAutoRefreshContext &&\n widget.config?.displaySettings.globalAutoRefreshContext\n \"\n [editMode$]=\"editMode$\"\n ></c8y-widget-auto-refresh-context>\n\n <c8y-dynamic-component\n [componentId]=\"widget.componentId || widget.name\"\n [config]=\"\n widget.templateUrl || widget.widgetComponent\n ? { child: widget, dashboard: contextDashboard, context: context }\n : widget.config\n \"\n *ngIf=\"child.intersected\"\n (updateWidgetClasses)=\"updateWidgetClasses(widget, $event)\"\n ></c8y-dynamic-component>\n </c8y-dashboard-child>\n </c8y-dashboard>\n </ng-container>\n</ng-container>\n" }]
267
- }], ctorParameters: () => [{ type: i1.DynamicComponentService }, { type: i2.TranslateService }, { type: i3.ActivatedRoute }, { type: i4.ModalService }, { type: i5.WidgetGlobalAutoRefreshService }], propDecorators: { widgets: [{
268
+ }], ctorParameters: () => [{ type: i1.DynamicComponentService }, { type: i2.TranslateService }, { type: i3.ActivatedRoute }, { type: i4.ModalService }, { type: i5.WidgetGlobalAutoRefreshService }, { type: i3.Router }], propDecorators: { widgets: [{
268
269
  type: Input
269
270
  }], context: [{
270
271
  type: Input
@@ -306,4 +307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
306
307
  }], revertChange: [{
307
308
  type: Output
308
309
  }] } });
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvd2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvd2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2pELE9BQU8sRUFNTCwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQzFCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNwRixPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYS9FLE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsSUFDSSxPQUFPLENBQUMsS0FBZTtRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBV0QsSUFDSSxTQUFTLENBQUMsUUFBb0M7UUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUEyRkQsWUFDVSxPQUFnQyxFQUNoQyxnQkFBa0MsRUFDbEMsS0FBcUIsRUFDckIsS0FBbUIsRUFDbkIsdUJBQXVEO1FBSnZELFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWdDO1FBMUdqRTs7V0FFRztRQUVILHFCQUFnQixHQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1FBcUIvQyxhQUFRLEdBQXNCO1lBQzVCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsb0JBQW9CLEVBQUUsS0FBSztZQUMzQixhQUFhLEVBQUUsQ0FBQztZQUNoQixZQUFZLEVBQUUsQ0FBQztZQUNmLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7WUFDZixTQUFTLEVBQUUsS0FBSztZQUNoQixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFHRixnQkFBVyxHQUFxQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR25FLGlCQUFZLEdBQStCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHOUQsbUJBQWMsR0FBK0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUdoRSxzQkFBaUIsR0FBa0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUd0RSxhQUFRLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHbEQsb0JBQWUsR0FBcUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUd2RSxvQkFBZSxHQUFxQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3ZFLHNCQUFpQixHQUFxQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3pFLGtCQUFhLEdBQStCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHL0QsZ0JBQVcsR0FBK0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUc3RCxvQkFBZSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3hELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRzFELGlCQUFZLEdBQW1DLElBQUksWUFBWSxFQUFFLENBQUM7UUFRbEUsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBRS9CLGtCQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FDMUQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQzdCLENBQUM7UUFDRixjQUFTLEdBQTZCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRWpFLHVCQUFrQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9DLGdCQUFXLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDcEQsZ0JBQVcsR0FBRyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNwRCxxQ0FBZ0MsR0FBRyxFQUFFLENBQUM7UUFFdkMsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQVVwRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNsRixJQUFJLGNBQWMsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDeEMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQzdELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBQ0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzdDLENBQUM7UUFDRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDeEYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ2xELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLEtBQUs7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNyRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsS0FBSztRQUNoQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBVyxDQUFDO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLFFBQWUsQ0FBQztRQUM1QixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsdUJBQXVCLENBQUUsT0FBZSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDdEUsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM5QixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDaEMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekIsQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDbkMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDNUIsQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDcEMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxHQUFHLEdBQVEsUUFBUSxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxDQUFDLENBQ1AsR0FBRyxDQUFDLGlCQUFpQjtZQUNyQixHQUFHLENBQUMsb0JBQW9CO1lBQ3hCLEdBQUcsQ0FBQyx1QkFBdUI7WUFDM0IsR0FBRyxDQUFDLG1CQUFtQixDQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QixDQUFDLEtBQThCO1FBQ3JELEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sWUFBWSxHQUFHLEdBQUcsRUFBRTtnQkFDeEIsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO2dCQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN0QixRQUFRLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLENBQUM7b0JBQy9ELFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDL0MsNkRBQTZEO29CQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWMsRUFBRSxPQUFnQztRQUNsRSxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVMsRUFBRSxNQUFjO1FBQzFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQjtRQUN2QixJQUFJLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLHlGQUF5RjtRQUN6RixrR0FBa0c7UUFDbEcsK0JBQStCO1FBQy9CLHFFQUFxRTtRQUNyRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVPLHlCQUF5QjtRQUMvQixJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMzRSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEtBQUssMkJBQTJCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FDbkMsMEZBQTBGLENBQzNGLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sS0FBSywyQkFBMkIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztZQUU3RCxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQ3ZCLG1LQUFtSyxDQUNwSyxDQUFDO2dCQUNGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FDdEIsa0tBQWtLLENBQ25LLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3ZFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjO1FBQzFCLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ3RCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN6QixPQUFPLENBQUMsZ0ZBQWdGLENBQUMsRUFDekYsTUFBTSxDQUFDLE9BQU8sRUFDZDtnQkFDRSxFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDbkIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUM7YUFDMUIsQ0FDRixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMseUJBQXlCLENBQUMsT0FBaUI7UUFDdkQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJO1lBQzlDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtTQUN0QixDQUFDLENBQUMsQ0FBQztRQUVKLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hDLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ25CLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixDQUFDO2dCQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUM5RCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQy9CLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOytHQXRUVSx5QkFBeUI7bUdBQXpCLHlCQUF5Qix3ekJBRnpCLENBQUMsNEJBQTRCLENBQUMsK0NDbkMzQyxtN1pBZ1pBOzs0RkQzV2EseUJBQXlCO2tCQVhyQyxTQUFTOytCQUNFLHVCQUF1QixRQUUzQjt3QkFDSixLQUFLLEVBQUU7O0tBRU47d0JBQ0QsS0FBSyxFQUFFLDhCQUE4QjtxQkFDdEMsYUFDVSxDQUFDLDRCQUE0QixDQUFDO2dPQUlyQyxPQUFPO3NCQURWLEtBQUs7Z0JBVU4sT0FBTztzQkFETixLQUFLO2dCQU9OLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlGLFNBQVM7c0JBRFosS0FBSzt1QkFBQyxVQUFVO2dCQU1SLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkF1Qk4sV0FBVztzQkFEVixNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU07Z0JBSVAsaUJBQWlCO3NCQURoQixNQUFNO2dCQUlQLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxlQUFlO3NCQURkLE1BQU07Z0JBSVAsZUFBZTtzQkFEZCxNQUFNO2dCQUlQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFJUCxhQUFhO3NCQURaLE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQUlQLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxpQkFBaUI7c0JBRGhCLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi4vYnJlYWRjcnVtYi9icmVhZGNydW1iLm1vZGVsJztcbmltcG9ydCB7IERhc2hib2FyZENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBEYXNoYm9hcmRDaGFuZ2UsXG4gIERhc2hib2FyZFNldHRpbmdzLFxuICBXaWRnZXQsXG4gIFdpZGdldENoYW5nZSxcbiAgRGFzaGJvYXJkQ29weVBlcm1pc3Npb24sXG4gIENvcHlEYXNoYm9hcmREaXNhYmxlZFJlYXNvbixcbiAgTkVXX0RBU0hCT0FSRF9RVUVSWV9QQVJBTVxufSBmcm9tICcuL2Rhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHNldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBXaWRnZXRzRGFzaGJvYXJkRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXRzLWRhc2hib2FyZC1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IFJldmVydENoYW5nZVR5cGUgfSBmcm9tICcuL3dpZGdldC1jaGFuZ2UtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbW9kYWwnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IFdpZGdldEdsb2JhbEF1dG9SZWZyZXNoU2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LWF1dG8tcmVmcmVzaC1jb250ZXh0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXdpZGdldHMtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldHMtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiBgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICBgLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkIGM4eS1ncmlkLWRhc2hib2FyZCdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbV2lkZ2V0c0Rhc2hib2FyZEV2ZW50U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHNldCB3aWRnZXRzKHZhbHVlOiBXaWRnZXRbXSkge1xuICAgIHRoaXMuX3dpZGdldHMubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgd2lkZ2V0cygpOiBXaWRnZXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3dpZGdldHMudmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBjb250ZXh0OiBhbnk7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBkZXZpY2UgaW5mbyBpbiBjb25maWcgc2hvdWxkIGJlIG92ZXJyaWRkZW4gd2l0aCB2YWx1ZXMgZnJvbSBjb250ZXh0IHByb3BlcnR5LlxuICAgKi9cbiAgQElucHV0KClcbiAgY29udGV4dERhc2hib2FyZDogYW55ID0geyB1cGRhdGVUYXJnZXQ6IHRydWUgfTtcblxuICBASW5wdXQoJ3NldHRpbmdzJylcbiAgc2V0IF9zZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxEYXNoYm9hcmRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLnNldHRpbmdzID0geyAuLi50aGlzLnNldHRpbmdzLCAuLi5zZXR0aW5ncyB9O1xuICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KCEhdGhpcy5zZXR0aW5ncy5pc0xvYWRpbmcpO1xuICB9XG5cbiAgQElucHV0KCkgaXNDb3B5RGlzYWJsZWQ6IERhc2hib2FyZENvcHlQZXJtaXNzaW9uIHwgYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBicmVhZGNydW1iOiBCcmVhZGNydW1iSXRlbTtcblxuICBASW5wdXQoKVxuICBlZGl0TW9kZUJ1dHRvbnM6IHtcbiAgICB1bmRvQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgY2hhbmdlVG9VbmRvTmFtZTogc3RyaW5nO1xuICAgIHJlZG9CdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcbiAgICBjaGFuZ2VUb1JlZG9OYW1lOiBzdHJpbmc7XG4gIH07XG5cbiAgc2V0dGluZ3M6IERhc2hib2FyZFNldHRpbmdzID0ge1xuICAgIGlzRnJvemVuOiBmYWxzZSxcbiAgICBpc0Rpc2FibGVkOiBmYWxzZSxcbiAgICB3aWRnZXRNYXJnaW46IDEyLFxuICAgIHRyYW5zbGF0ZVdpZGdldFRpdGxlOiBmYWxzZSxcbiAgICBkZWZhdWx0SGVpZ2h0OiA0LFxuICAgIGRlZmF1bHRXaWR0aDogNCxcbiAgICBhbGxvd0Z1bGxzY3JlZW46IGZhbHNlLFxuICAgIGNhbkNvcHk6IHRydWUsXG4gICAgY2FuRGVsZXRlOiB0cnVlLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgY29sdW1uczogMTJcbiAgfTtcblxuICBAT3V0cHV0KClcbiAgb25BZGRXaWRnZXQ6IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDb21wb25lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkVkaXRXaWRnZXQ6IEV2ZW50RW1pdHRlcjxXaWRnZXRDaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkRlbGV0ZVdpZGdldDogRXZlbnRFbWl0dGVyPFdpZGdldENoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlRGFzaGJvYXJkOiBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25SZXNpemU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25FZGl0RGFzaGJvYXJkOiBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ29tcG9uZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25Db3B5RGFzaGJvYXJkOiBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ29tcG9uZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25EZWxldGVEYXNoYm9hcmQ6IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDb21wb25lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZVN0YXJ0OiBFdmVudEVtaXR0ZXI8V2lkZ2V0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2VFbmQ6IEV2ZW50RW1pdHRlcjxXaWRnZXRDaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvblNhdmVEYXNoYm9hcmQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNhbmNlbERhc2hib2FyZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHJldmVydENoYW5nZTogRXZlbnRFbWl0dGVyPFJldmVydENoYW5nZVR5cGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHJlc29sdmVkV2lkZ2V0cyQ6IE9ic2VydmFibGU8V2lkZ2V0W10+O1xuXG4gIGlzTG9hZGluZ1dpZGdldHMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIGNvcHlEaXNhYmxlZFBvcG92ZXJNc2c6IHN0cmluZztcblxuICB3aWRnZXRJbkZ1bGxzY3JlZW5Nb2RlID0gZmFsc2U7XG5cbiAgaW5GdWxsU2NyZWVuJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ2Z1bGxzY3JlZW5jaGFuZ2UnKS5waXBlKFxuICAgIG1hcCgoKSA9PiB0aGlzLmZ1bGxTY3JlZW4oKSksXG4gICAgc3RhcnRXaXRoKHRoaXMuZnVsbFNjcmVlbigpKVxuICApO1xuICBlZGl0TW9kZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGNvcHlEYXNoYm9hcmRMYWJlbCA9IGdldHRleHQoJ0NvcHkgZGFzaGJvYXJkJyk7XG4gIHJlYWRvbmx5IHVuZG9NZXNzYWdlID0gZ2V0dGV4dCgnVW5kbzogXCJ7eyBjaGFuZ2VUb1VuZG8gfX1cIicpO1xuICByZWFkb25seSByZWRvTWVzc2FnZSA9IGdldHRleHQoJ1JlZG86IFwie3sgY2hhbmdlVG9SZWRvIH19XCInKTtcbiAgcmVhZG9ubHkgQUNUSU9OX0JBUl9FRElUX1dJREdFVFNfUFJJT1JJVFkgPSAxMDtcblxuICBwcml2YXRlIF93aWRnZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxXaWRnZXRbXT4oW10pO1xuICBwcml2YXRlIGlzTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCEhdGhpcy5fc2V0dGluZ3M/LmlzTG9hZGluZyk7XG4gIHByaXZhdGUgaXNFeGVjdXRpbmdSZXNvbHZlcnMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZHluYW1pYzogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldEdsb2JhbEF1dG9SZWZyZXNoOiBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2VcbiAgKSB7XG4gICAgY29uc3QgaXNOZXdEYXNoYm9hcmQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW05FV19EQVNIQk9BUkRfUVVFUllfUEFSQU1dO1xuICAgIGlmIChpc05ld0Rhc2hib2FyZCA9PT0gJ3RydWUnKSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvbHZlZFdpZGdldHMkID0gdGhpcy5fd2lkZ2V0cy5waXBlKFxuICAgICAgc3dpdGNoTWFwKHdpZGdldHMgPT4gdGhpcy5leGVjdXRlUmVzb2x2ZXJzT2ZXaWRnZXRzKHdpZGdldHMpKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgICB0aGlzLmlzRXhlY3V0aW5nUmVzb2x2ZXJzJCA9IG1lcmdlKFxuICAgICAgdGhpcy5fd2lkZ2V0cy5waXBlKG1hcCgoKSA9PiB0cnVlKSksXG4gICAgICB0aGlzLnJlc29sdmVkV2lkZ2V0cyQucGlwZShtYXAoKCkgPT4gZmFsc2UpKVxuICAgICk7XG4gICAgdGhpcy5pc0xvYWRpbmdXaWRnZXRzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaXNMb2FkaW5nJCwgdGhpcy5pc0V4ZWN1dGluZ1Jlc29sdmVycyRdKS5waXBlKFxuICAgICAgbWFwKGxvYWRpbmdzID0+IGxvYWRpbmdzLnNvbWUobG9hZGluZyA9PiBsb2FkaW5nKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuaXNDb3B5RGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29weURpc2FibGVkUG9wb3Zlck1zZygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNhbkRlYWN0aXZhdGUob21pdENvbmZpcm0gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5lZGl0TW9kZSQudmFsdWUgfHwgdGhpcy5lZGl0TW9kZUJ1dHRvbnMudW5kb0J1dHRvbkRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9taXRDb25maXJtKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbmZpcm1DbG9zaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRnVsbHNjcmVlbihoYXNXaWRnZXQgPSBmYWxzZSkge1xuICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5ib2R5IGFzIGFueTtcbiAgICBjb25zdCBkb2MgPSBkb2N1bWVudCBhcyBhbnk7XG4gICAgaWYgKGhhc1dpZGdldCkge1xuICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKCdzaW5nbGVXaWRnZXQnKTtcbiAgICAgIHRoaXMud2lkZ2V0SW5GdWxsc2NyZWVuTW9kZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZSgnc2luZ2xlV2lkZ2V0Jyk7XG4gICAgICB0aGlzLndpZGdldEluRnVsbHNjcmVlbk1vZGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgaWYgKGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtLm1zUmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcbiAgICAgICAgZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgIGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKEVsZW1lbnQgYXMgYW55KS5BTExPV19LRVlCT0FSRF9JTlBVVCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkb2MuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGRvYy5leGl0RnVsbHNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZG9jLm1zRXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGRvYy5tc0V4aXRGdWxsc2NyZWVuKCk7XG4gICAgfSBlbHNlIGlmIChkb2MubW96Q2FuY2VsRnVsbFNjcmVlbikge1xuICAgICAgZG9jLm1vekNhbmNlbEZ1bGxTY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGRvYy53ZWJraXRFeGl0RnVsbHNjcmVlbikge1xuICAgICAgZG9jLndlYmtpdEV4aXRGdWxsc2NyZWVuKCk7XG4gICAgfVxuICB9XG5cbiAgZnVsbFNjcmVlbigpIHtcbiAgICBjb25zdCBkb2M6IGFueSA9IGRvY3VtZW50O1xuICAgIHJldHVybiAhIShcbiAgICAgIGRvYy5mdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgZG9jLm1vekZ1bGxTY3JlZW5FbGVtZW50IHx8XG4gICAgICBkb2Mud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQgfHxcbiAgICAgIGRvYy5tc0Z1bGxzY3JlZW5FbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIHRvZ2dsZUZ1bGxzY3JlZW5PbldpZGdldChjaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQpIHtcbiAgICBjaGlsZC5mdWxsc2NyZWVuID0gIWNoaWxkLmZ1bGxzY3JlZW47XG4gICAgaWYgKGNoaWxkLmZ1bGxzY3JlZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsbFNjcmVlbiA9ICgpID0+IHtcbiAgICAgICAgY2hpbGQuZnVsbHNjcmVlbiA9ICEhZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQ7XG4gICAgICAgIGlmICghY2hpbGQuZnVsbHNjcmVlbikge1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCBvbkZ1bGxTY3JlZW4pO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnc2luZ2xlV2lkZ2V0Jyk7XG4gICAgICAgICAgLy8gcmVxdWlyZWQgaW4gY2FzZSBmdWxsc2NyZWVuIGlzIGV4aXRlZCBieSBlLmcuIHByZXNzaW5nIEVTQ1xuICAgICAgICAgIHRoaXMub25SZXNpemUubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIG9uRnVsbFNjcmVlbik7XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlRnVsbHNjcmVlbihjaGlsZC5mdWxsc2NyZWVuKTtcbiAgICB0aGlzLm9uUmVzaXplLm5leHQoKTtcbiAgfVxuXG4gIHVwZGF0ZVdpZGdldENsYXNzZXMod2lkZ2V0OiBXaWRnZXQsIGNsYXNzZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KSB7XG4gICAgd2lkZ2V0LmNsYXNzZXMgPSB7IC4uLndpZGdldC5jbGFzc2VzLCAuLi5jbGFzc2VzIH07XG4gIH1cblxuICB1cGRhdGVXaWRnZXRDb25maWcoZGF0YTogYW55LCB3aWRnZXQ6IFdpZGdldCkge1xuICAgIHdpZGdldC5jb25maWcgPSB7IC4uLndpZGdldC5jb25maWcsIC4uLmRhdGEgfTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbERhc2hib2FyZFNhdmUoKSB7XG4gICAgaWYgKGF3YWl0IHRoaXMuY2FuRGVhY3RpdmF0ZSgpKSB7XG4gICAgICB0aGlzLm9uQ2FuY2VsRGFzaGJvYXJkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBzYXZlRGFzaGJvYXJkKCkge1xuICAgIC8vIERyb3Bkb3duIHRvZ2dsZSAoU2V0dGluZ3MpIGJ1dHRvbiB3YXMgZGVsZXRlZCBpbW1lZGlhdGVseSBhZnRlciBlZGl0TW9kZSBzZXQgdG8gZmFsc2UuXG4gICAgLy8gSXQgbGVhZHMgdG8gYW4gaXNzdWUgd2l0aCB0aGUgYWN0dWFsIGhpZGluZyBkcm9wZG93biwgc28gd2UgaGF2ZSB0byBhZGQgc29tZSBkZWxheSBpbiBvcmRlciB0bzpcbiAgICAvLyAxLiBtYWtlIGRyb3Bkb3duIGNsb3NlIGZpcnN0XG4gICAgLy8gMi4gdGhlbiBzZXQgZWRpdE1vZGUgdG8gZmFsc2UgYW5kIG9ubHkgdGhlbiByZW1vdmUgYnV0dG9uIGZyb20gRE9NXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmVkaXRNb2RlJC5uZXh0KGZhbHNlKSk7XG4gICAgdGhpcy5vblNhdmVEYXNoYm9hcmQuZW1pdCgpO1xuICAgIHRoaXMud2lkZ2V0R2xvYmFsQXV0b1JlZnJlc2gub25EYXNoYm9hcmRTYXZlJC5uZXh0KCk7XG4gIH1cblxuICBlbmFibGVFZGl0TW9kZSgpIHtcbiAgICB0aGlzLmVkaXRNb2RlJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuY29udGV4dERhc2hib2FyZC5oaXN0b3J5RGVzY3JpcHRpb24gPSB7fTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29weURpc2FibGVkUG9wb3Zlck1zZygpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuaXNDb3B5RGlzYWJsZWQgPT09ICdib29sZWFuJyB8fCB0aGlzLmlzQ29weURpc2FibGVkPy5zdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ29weURpc2FibGVkPy5yZWFzb24gPT09IENvcHlEYXNoYm9hcmREaXNhYmxlZFJlYXNvbi5QRVJNSVNTSU9OUykge1xuICAgICAgdGhpcy5jb3B5RGlzYWJsZWRQb3BvdmVyTXNnID0gZ2V0dGV4dChcbiAgICAgICAgJ1RvIGNvcHkgdGhpcyBkYXNoYm9hcmQsIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yIHRvIHJlcXVlc3QgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucy4nXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvcHlEaXNhYmxlZD8ucmVhc29uID09PSBDb3B5RGFzaGJvYXJkRGlzYWJsZWRSZWFzb24uV1JPTkdfUkVGRVJFTkNFKSB7XG4gICAgICBjb25zdCB2aWV3Q29udGV4dCA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LmRhdGE/LmNvbnRleHQ7XG5cbiAgICAgIGlmICh2aWV3Q29udGV4dCkge1xuICAgICAgICBjb25zdCBjdHggPSB2aWV3Q29udGV4dC5zcGxpdCgnLycpLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IGRldmljZVN0ciA9IGdldHRleHQoXG4gICAgICAgICAgJ0NvcHkgbm90IHBvc3NpYmxlOiBTb21lIHdpZGdldHMgcmVmZXJlbmNlIGRhdGEgZnJvbSBhbm90aGVyIGdyb3VwIG9yIGRldmljZS4gVG8gY29weSB0aGlzIGRhc2hib2FyZCwgbWFrZSBzdXJlIGFsbCB3aWRnZXRzIHVzZSBkYXRhIGZyb20gdGhlIGN1cnJlbnQgZGV2aWNlIG9ubHkuJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBncm91cFN0ciA9IGdldHRleHQoXG4gICAgICAgICAgJ0NvcHkgbm90IHBvc3NpYmxlOiBTb21lIHdpZGdldHMgcmVmZXJlbmNlIGRhdGEgZnJvbSBhbm90aGVyIGdyb3VwIG9yIGRldmljZS4gVG8gY29weSB0aGlzIGRhc2hib2FyZCwgbWFrZSBzdXJlIGFsbCB3aWRnZXRzIHVzZSBkYXRhIGZyb20gdGhlIGN1cnJlbnQgZ3JvdXAgb25seS4nXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29weURpc2FibGVkUG9wb3Zlck1zZyA9IGN0eCA9PT0gJ2dyb3VwJyA/IGdyb3VwU3RyIDogZGV2aWNlU3RyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29uZmlybUNsb3NpbmcoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRXhpdCBlZGl0IG1vZGUnKSxcbiAgICAgICAgZ2V0dGV4dCgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGV4aXQgdGhlIGVkaXQgbW9kZT8gQWxsIHVuc2F2ZWQgY2hhbmdlcyB3aWxsIGJlIGxvc3QuJyksXG4gICAgICAgIFN0YXR1cy5XQVJOSU5HLFxuICAgICAgICB7XG4gICAgICAgICAgb2s6IGdldHRleHQoJ0V4aXQnKSxcbiAgICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlUmVzb2x2ZXJzT2ZXaWRnZXRzKHdpZGdldHM6IFdpZGdldFtdKTogUHJvbWlzZTxXaWRnZXRbXT4ge1xuICAgIGlmICghd2lkZ2V0cykge1xuICAgICAgcmV0dXJuIHdpZGdldHM7XG4gICAgfVxuXG4gICAgY29uc3QgdHVwbGUgPSB3aWRnZXRzLm1hcCh3aWRnZXQgPT4gKHtcbiAgICAgIGNvbXBvbmVudElkOiB3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWUsXG4gICAgICBjb25maWc6IHdpZGdldC5jb25maWdcbiAgICB9KSk7XG5cbiAgICBjb25zdCByZXNvbHZlZFJlc3VsdHMgPSBhd2FpdCB0aGlzLmR5bmFtaWMuZXhlY3V0ZVJlc29sdmVycyh0dXBsZSk7XG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAocmVzb2x2ZWRSZXN1bHRzW2luZGV4XSkge1xuICAgICAgICBpZiAoIXdpZGdldC5jb25maWcpIHtcbiAgICAgICAgICB3aWRnZXQuY29uZmlnID0ge307XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzb2x2ZWRSZXN1bHRzW2luZGV4XSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgIHNldCh3aWRnZXQuY29uZmlnLCBrZXksIHZhbHVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB3aWRnZXRzO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlICpuZ0lmPVwiISFzZXR0aW5ncy50aXRsZVwiPlxuICB7eyBzZXR0aW5ncy50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuPC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYiAqbmdJZj1cIiEhYnJlYWRjcnVtYlwiPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cImJyZWFkY3J1bWIuaWNvblwiXG4gICAgW2xhYmVsXT1cImJyZWFkY3J1bWIubGFiZWxcIlxuICAgIFtwYXRoXT1cImJyZWFkY3J1bWIucGF0aFwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidsZWZ0J1wiXG4gIFtwcmlvcml0eV09XCJBQ1RJT05fQkFSX0VESVRfV0lER0VUU19QUklPUklUWVwiXG4gICpuZ0lmPVwiIShlZGl0TW9kZSQgfCBhc3luYylcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgYW5pbWF0ZWQgZmFkZUluIGhpZGRlbi14c1wiXG4gICAgdGl0bGU9XCJ7eyAnRWRpdCB3aWRnZXRzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW2Rpc2FibGVkXT1cInNldHRpbmdzLmlzRGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJlbmFibGVFZGl0TW9kZSgpXCJcbiAgICBkYXRhLWN5PVwiYzh5LXdpZGdldC1kYXNoYm9hcmQtLWVkaXQtd2lkZ2V0c1wiXG4gID5cbiAgICA8aSBjOHlJY29uPVwic2VuZC1iYWNrd2FyZFwiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cIm0tbC00XCI+e3sgJ0VkaXQgd2lkZ2V0cycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgdmlzaWJsZS14cyBtLWwtMFwiXG4gICAgdG9vbHRpcD1cInt7ICdOb3QgYXZhaWxhYmxlIG9uIG1vYmlsZSBwaG9uZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJzZW5kLWJhY2t3YXJkXCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwibS1sLTRcIj57eyAnRWRpdCB3aWRnZXRzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCJcbiAgKm5nSWY9XCJlZGl0TW9kZSQgfCBhc3luY1wiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGluayBhbmltYXRlZCBmYWRlSW5cIlxuICAgIHRpdGxlPVwie3sgJ0FkZCB3aWRnZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwib25BZGRXaWRnZXQuZW1pdCgpXCJcbiAgICBkYXRhLWN5PVwid2lkZ2V0LWRhc2hib2FyZC0tQWRkLXdpZGdldFwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0FkZCB3aWRnZXQnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidsZWZ0J1wiXG4gIGl0ZW1DbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGdhcC04XCJcbiAgKm5nSWY9XCJlZGl0TW9kZSQgfCBhc3luY1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBhbmltYXRlZCBmYWRlSW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBidG4taWNvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1VuZG8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgZWRpdE1vZGVCdXR0b25zLnVuZG9CdXR0b25EaXNhYmxlZFxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiAodW5kb01lc3NhZ2VcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgY2hhbmdlVG9VbmRvOiBlZGl0TW9kZUJ1dHRvbnMuY2hhbmdlVG9VbmRvTmFtZSB8IHRyYW5zbGF0ZSB9KVxuICAgICAgICBcIlxuICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgKGNsaWNrKT1cInJldmVydENoYW5nZS5lbWl0KCd1bmRvJylcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZWRpdE1vZGVCdXR0b25zLnVuZG9CdXR0b25EaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICAgIDxpIFtjOHlJY29uXT1cIid1bmRvJ1wiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGJ0bi1pY29uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVkbycgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICBlZGl0TW9kZUJ1dHRvbnMucmVkb0J1dHRvbkRpc2FibGVkXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IChyZWRvTWVzc2FnZVxuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBjaGFuZ2VUb1JlZG86IGVkaXRNb2RlQnV0dG9ucy5jaGFuZ2VUb1JlZG9OYW1lIHwgdHJhbnNsYXRlIH0pXG4gICAgICAgIFwiXG4gICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAoY2xpY2spPVwicmV2ZXJ0Q2hhbmdlLmVtaXQoJ3JlZG8nKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJlZGl0TW9kZUJ1dHRvbnMucmVkb0J1dHRvbkRpc2FibGVkXCJcbiAgICAgID5cbiAgICAgICAgPGkgW2M4eUljb25dPVwiJ3JlZG8nXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4+PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBhbmltYXRlZCBmYWRlSW5cIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJjYW5jZWxEYXNoYm9hcmRTYXZlKClcIlxuICAgID5cbiAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIG0tbC04XCJcbiAgICAgIHRpdGxlPVwie3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cImVkaXRNb2RlQnV0dG9ucy51bmRvQnV0dG9uRGlzYWJsZWRcIlxuICAgICAgKGNsaWNrKT1cInNhdmVEYXNoYm9hcmQoKVwiXG4gICAgICBkYXRhLWN5PVwiYzh5LXdpZGdldHMtZGFzaGJvYXJkLS1zYXZlXCJcbiAgICA+XG4gICAgICB7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICpuZ0lmPVwib25FZGl0RGFzaGJvYXJkLm9ic2VydmVycy5sZW5ndGhcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgaGlkZGVuLXhzIG0tbC0wXCJcbiAgICB0aXRsZT1cInt7ICdEYXNoYm9hcmQgc2V0dGluZ3MnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBbZGlzYWJsZWRdPVwic2V0dGluZ3MuaXNEaXNhYmxlZCB8fCAoZWRpdE1vZGUkIHwgYXN5bmMpXCJcbiAgICAoY2xpY2spPVwib25FZGl0RGFzaGJvYXJkLmVtaXQoKVwiXG4gICAgZGF0YS1jeT1cImM4eS13aWRnZXRzLWRhc2hib2FyZC0tZWRpdC1kYXNoYm9hcmRcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInNvcnRpbmctc2xpZGVyXCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwidmlzaWJsZS14cy1pbmxpbmUgaGlkZGVuLXNtIHZpc2libGUtbWQtaW5saW5lIHZpc2libGUtbGctaW5saW5lXCI+XG4gICAgICB7eyAnRGFzaGJvYXJkIHNldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGluayB2aXNpYmxlLXhzIG0tbC0wXCJcbiAgICB0b29sdGlwPVwie3sgJ05vdCBhdmFpbGFibGUgb24gbW9iaWxlIHBob25lJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW2Rpc2FibGVkXT1cInRydWVcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInNvcnRpbmctc2xpZGVyXCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwidmlzaWJsZS14cy1pbmxpbmUgaGlkZGVuLXNtIHZpc2libGUtbWQtaW5saW5lIHZpc2libGUtbGctaW5saW5lXCI+XG4gICAgICB7eyAnRGFzaGJvYXJkIHNldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiXG4gICpuZ0lmPVwic2V0dGluZ3MuYWxsb3dGdWxsc2NyZWVuXCJcbiAgW3ByaW9yaXR5XT1cIi01MDAwXCJcbiAgaXRlbUNsYXNzPVwicHVsbC1yaWdodFwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRnVsbCBzY3JlZW4nIHwgdHJhbnNsYXRlXCJcbiAgICB0b29sdGlwPVwie3sgJ0Z1bGwgc2NyZWVuJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiXG4gICAgZGF0YS1jeT1cIndpZGdldHMtZGFzaGJvYXJkLS1GdWxsLXNjcmVlblwiXG4gID5cbiAgICA8aSBbYzh5SWNvbl09XCIoaW5GdWxsU2NyZWVuJCB8IGFzeW5jKSA/ICdjb21wcmVzcycgOiAnZXhwYW5kJ1wiPjwvaT5cbiAgICA8c3BhbiBjbGFzcz1cInZpc2libGUteHMtaW5saW5lIGhpZGRlbi1zbSB2aXNpYmxlLW1kLWlubGluZSB2aXNpYmlsZS1sZy1pbmxpbmVcIj5cbiAgICAgIHt7ICdGdWxsIHNjcmVlbicgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidtb3JlJ1wiXG4gIFtwcmlvcml0eV09XCItMjAwMFwiXG4gICpuZ0lmPVwic2V0dGluZ3MuY2FuQ29weVwiXG4+XG4gIDxkaXZcbiAgICBbbmdTdHlsZV09XCJ7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInXG4gICAgfVwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImhpZGRlbi14c1wiXG4gICAgICB0aXRsZT1cInt7XG4gICAgICAgIChpc0NvcHlEaXNhYmxlZCA9PT0gdHJ1ZSB8fCAhaXNDb3B5RGlzYWJsZWQ/LnN0YXRlID8gJ0Rpc2FibGVkJyA6IGNvcHlEYXNoYm9hcmRMYWJlbClcbiAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdidG4gYnRuLWxpbmsnOiAhc2V0dGluZ3MuY2FuRGVsZXRlIH1cIlxuICAgICAgZGF0YS1jeT1cIndpZGdldHMtZGFzaGJvYXJkLS1jb3B5LWRhc2hib2FyZFwiXG4gICAgICAoY2xpY2spPVwib25Db3B5RGFzaGJvYXJkLmVtaXQoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNDb3B5RGlzYWJsZWQgPT09IHRydWUgfHwgIWlzQ29weURpc2FibGVkPy5zdGF0ZSB8fCAoZWRpdE1vZGUkIHwgYXN5bmMpXCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwiY2xvbmVcIj48L2k+XG4gICAgICA8c3Bhbj57eyBjb3B5RGFzaGJvYXJkTGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc20gbS1yLTE2IGhpZGRlbi14c1wiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbcG9wb3Zlcl09XCJjb3B5RGlzYWJsZWRQb3BvdmVyTXNnIHwgdHJhbnNsYXRlXCJcbiAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICpuZ0lmPVwiIWlzQ29weURpc2FibGVkPy5zdGF0ZSAmJiBjb3B5RGlzYWJsZWRQb3BvdmVyTXNnXCJcbiAgICAgIGRhdGEtY3k9XCJ3aWRnZXRzLWRhc2hib2FyZC0taW5mby1jb3B5LWRhc2hib2FyZFwiXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICA+PC9idXR0b24+XG4gIDwvZGl2PlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJ2aXNpYmxlLXhzIG0tbC0wXCJcbiAgICB0b29sdGlwPVwie3sgJ05vdCBhdmFpbGFibGUgb24gbW9iaWxlIHBob25lJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW25nQ2xhc3NdPVwieyAnYnRuIGJ0bi1saW5rJzogIXNldHRpbmdzLmNhbkRlbGV0ZSB9XCJcbiAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiY2xvbmVcIj48L2k+XG4gICAgPHNwYW4+e3sgY29weURhc2hib2FyZExhYmVsIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCInbW9yZSdcIlxuICBbcHJpb3JpdHldPVwiLTMwMDBcIlxuICAqbmdJZj1cInNldHRpbmdzLmNhbkRlbGV0ZSAmJiBvbkRlbGV0ZURhc2hib2FyZC5vYnNlcnZlcnMubGVuZ3RoXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiaGlkZGVuLXhzXCJcbiAgICB0aXRsZT1cInt7ICdEZWxldGUgZGFzaGJvYXJkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgZGF0YS1jeT1cIndpZGdldHMtZGFzaGJvYXJkLS1kZWxldGUtZGFzaGJvYXJkXCJcbiAgICBbbmdDbGFzc109XCJ7ICdidG4gYnRuLWxpbmsnOiAhc2V0dGluZ3MuY2FuQ29weSB9XCJcbiAgICAoY2xpY2spPVwib25EZWxldGVEYXNoYm9hcmQuZW1pdCgpXCJcbiAgICBbZGlzYWJsZWRdPVwic2V0dGluZ3MuaXNEaXNhYmxlZCB8fCAoZWRpdE1vZGUkIHwgYXN5bmMpXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJkZWxldGVcIj48L2k+XG4gICAgPHNwYW4gdHJhbnNsYXRlPkRlbGV0ZSBkYXNoYm9hcmQ8L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJ2aXNpYmxlLXhzIG0tbC0wXCJcbiAgICB0b29sdGlwPVwie3sgJ05vdCBhdmFpbGFibGUgb24gbW9iaWxlIHBob25lJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgZGF0YS1jeT1cIndpZGdldHMtZGFzaGJvYXJkLS1kZWxldGUtZGFzaGJvYXJkLW1vYmlsZVwiXG4gICAgW25nQ2xhc3NdPVwieyAnYnRuIGJ0bi1saW5rJzogIXNldHRpbmdzLmNhbkNvcHkgfVwiXG4gICAgW2Rpc2FibGVkXT1cInRydWVcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cImRlbGV0ZVwiPjwvaT5cbiAgICA8c3BhbiB0cmFuc2xhdGU+RGVsZXRlIGRhc2hib2FyZDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ0luZGljYXRvcj5cbiAgPGM4eS1sb2FkaW5nXG4gICAgY2xhc3M9XCJjb2wteHMtMTIgdGV4dC1jZW50ZXJcIlxuICAgICpuZ0lmPVwiaXNMb2FkaW5nV2lkZ2V0cyQgfCBhc3luY1wiXG4gID48L2M4eS1sb2FkaW5nPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoaXNMb2FkaW5nV2lkZ2V0cyQgfCBhc3luYyk7IGVsc2UgbG9hZGluZ0luZGljYXRvclwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVzb2x2ZWRXaWRnZXRzJCB8IGFzeW5jIGFzIHdpZGdldHNUb0Rpc3BsYXlcIj5cbiAgICA8IS0tIGVtcHR5IHN0YXRlIC0tPlxuICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgIFtpY29uXT1cIidjOHktZGV2aWNlJ1wiXG4gICAgICBbdGl0bGVdPVwiJ05vIHdpZGdldHMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICpuZ0lmPVwid2lkZ2V0c1RvRGlzcGxheT8ubGVuZ3RoID09PSAwXCJcbiAgICA+XG4gICAgICA8ZGl2ICpuZ0lmPVwib25BZGRXaWRnZXQub2JzZXJ2ZXJzLmxlbmd0aFwiPlxuICAgICAgICA8cFxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICpuZ0lmPVwiZWRpdE1vZGUkIHwgYXN5bmNcIlxuICAgICAgICA+XG4gICAgICAgICAgQWRkIHdpZGdldHMgdG8gdGhpcyBkYXNoYm9hcmQuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAqbmdJZj1cIiEoZWRpdE1vZGUkIHwgYXN5bmMpXCJcbiAgICAgICAgPlxuICAgICAgICAgIENsaWNrIFwiRWRpdCB3aWRnZXRzXCIgdG8gdW5sb2NrXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtLXQtMTZcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwic2V0dGluZ3MuaXNEaXNhYmxlZCB8fCAhKGVkaXRNb2RlJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BZGRXaWRnZXQuZW1pdCgpXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktd2lkZ2V0cy1kYXNoYm9hcmQtLWFkZC13aWRnZXRcIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQWRkIHdpZGdldFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAgYzh5LWd1aWRlLWRvY3M+XG4gICAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICBGaW5kIG91dCBtb3JlIGluIHRoZVxuICAgICAgICAgICAgPGEgYzh5LWd1aWRlLWhyZWY9XCIvZG9jcy9jb2NrcGl0L3dvcmtpbmctd2l0aC1kYXNoYm9hcmRzXCI+dXNlciBkb2N1bWVudGF0aW9uPC9hPlxuICAgICAgICAgICAgLlxuICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG4gICAgPGM4eS1kYXNoYm9hcmRcbiAgICAgIFtjb2x1bW5zXT1cInNldHRpbmdzLmNvbHVtbnNcIlxuICAgICAgKGRhc2hib2FyZENoYW5nZSk9XCJvbkNoYW5nZURhc2hib2FyZC5lbWl0KCRldmVudClcIlxuICAgICAgI2Rhc2hib2FyZFxuICAgID5cbiAgICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkXG4gICAgICAgIFtjbGFzc109XCJ3aWRnZXQuY2xhc3Nlc1wiXG4gICAgICAgICpuZ0Zvcj1cImxldCB3aWRnZXQgb2Ygd2lkZ2V0c1RvRGlzcGxheVwiXG4gICAgICAgIFt4XT1cIndpZGdldC5feFwiXG4gICAgICAgIFt5XT1cIndpZGdldC5feVwiXG4gICAgICAgIFt3aWR0aF09XCJ3aWRnZXQuX3dpZHRoIHx8IHNldHRpbmdzLmRlZmF1bHRXaWR0aFwiXG4gICAgICAgIFtoZWlnaHRdPVwid2lkZ2V0Ll9oZWlnaHQgfHwgc2V0dGluZ3MuZGVmYXVsdEhlaWdodFwiXG4gICAgICAgIFttYXJnaW5dPVwic2V0dGluZ3Mud2lkZ2V0TWFyZ2luXCJcbiAgICAgICAgW2RhdGFdPVwid2lkZ2V0XCJcbiAgICAgICAgW3VzZUludGVyc2VjdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgW2VkaXRNb2RlXT1cImVkaXRNb2RlJCB8IGFzeW5jXCJcbiAgICAgICAgKGNoYW5nZVN0YXJ0KT1cIm9uQ2hhbmdlU3RhcnQuZW1pdCh7IHdpZGdldDogd2lkZ2V0LCBzb3VyY2U6IGNoaWxkLCBkYXNoYm9hcmQ6IGRhc2hib2FyZCB9KVwiXG4gICAgICAgIChjaGFuZ2VFbmQpPVwib25DaGFuZ2VFbmQuZW1pdCh7IHdpZGdldDogd2lkZ2V0LCBzb3VyY2U6IGNoaWxkLCBkYXNoYm9hcmQ6IGRhc2hib2FyZCB9KVwiXG4gICAgICAgICh0b2dnbGVGdWxsc2NyZWVuKT1cInRvZ2dsZUZ1bGxzY3JlZW5PbldpZGdldChjaGlsZClcIlxuICAgICAgICBbY2FuVG9nZ2xlRnVsbHNjcmVlbl09XCIhKGluRnVsbFNjcmVlbiQgfCBhc3luYykgfHwgd2lkZ2V0SW5GdWxsc2NyZWVuTW9kZVwiXG4gICAgICAgICNjaGlsZFxuICAgICAgPlxuICAgICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZT5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1kYXNoYm9hcmQtbGlzdC0tZGV2aWNlLXdpZGdldFwiXG4gICAgICAgICAgICAqbmdJZj1cInNldHRpbmdzLnRyYW5zbGF0ZVdpZGdldFRpdGxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB3aWRnZXQudGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhc2V0dGluZ3MudHJhbnNsYXRlV2lkZ2V0VGl0bGVcIj5cbiAgICAgICAgICAgIHt7IHdpZGdldC50aXRsZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlPlxuICAgICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24gKm5nSWY9XCJvbkVkaXRXaWRnZXQub2JzZXJ2ZXJzLmxlbmd0aFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0VkaXQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJ3aWRnZXRzLWRhc2hib2FyZC0tRWRpdC13aWRnZXRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdFdpZGdldC5lbWl0KHsgd2lkZ2V0OiB3aWRnZXQsIHNvdXJjZTogY2hpbGQsIGRhc2hib2FyZDogZGFzaGJvYXJkIH0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwicGVuY2lsXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkVkaXQ8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gICAgICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbiAqbmdJZj1cIm9uRGVsZXRlV2lkZ2V0Lm9ic2VydmVycy5sZW5ndGhcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdSZW1vdmUgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktd2lkZ2V0cy1kYXNoYm9hcmQtLXJlbW92ZS13aWRnZXRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlV2lkZ2V0LmVtaXQoeyB3aWRnZXQ6IHdpZGdldCwgc291cmNlOiBjaGlsZCwgZGFzaGJvYXJkOiBkYXNoYm9hcmQgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJkZWxldGVcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+UmVtb3ZlPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuXG4gICAgICAgIDxjOHktd2lkZ2V0LXRpbWUtY29udGV4dFxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAod2lkZ2V0LmNvbmZpZz8uZGlzcGxheVNldHRpbmdzPy5nbG9iYWxUaW1lQ29udGV4dCB8fFxuICAgICAgICAgICAgICB3aWRnZXQuY29uZmlnPy5kaXNwbGF5U2V0dGluZ3M/Lmdsb2JhbFJlYWx0aW1lQ29udGV4dCkgJiZcbiAgICAgICAgICAgICh3aWRnZXQuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsVGltZUNvbnRleHQgfHxcbiAgICAgICAgICAgICAgd2lkZ2V0LmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dClcbiAgICAgICAgICBcIlxuICAgICAgICAgIChkYXRlQ29udGV4dENoYW5nZSk9XCJ1cGRhdGVXaWRnZXRDb25maWcoJGV2ZW50LCB3aWRnZXQpXCJcbiAgICAgICAgICBbY2FuRGVjb3VwbGVdPVwid2lkZ2V0LmNvbmZpZy5jYW5EZWNvdXBsZUdsb2JhbFRpbWVDb250ZXh0XCJcbiAgICAgICAgICBbZGlzcGxheVNldHRpbmdzXT1cIndpZGdldC5jb25maWcuZGlzcGxheVNldHRpbmdzXCJcbiAgICAgICAgICBbaGlkZGVuXT1cImVkaXRNb2RlJCB8IGFzeW5jXCJcbiAgICAgICAgPjwvYzh5LXdpZGdldC10aW1lLWNvbnRleHQ+XG5cbiAgICAgICAgPGM4eS13aWRnZXQtYXV0by1yZWZyZXNoLWNvbnRleHRcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgd2lkZ2V0Py5jb25maWc/LndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0ICYmXG4gICAgICAgICAgICB3aWRnZXQuY29uZmlnPy5kaXNwbGF5U2V0dGluZ3MuZ2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0XG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZWRpdE1vZGUkXT1cImVkaXRNb2RlJFwiXG4gICAgICAgID48L2M4eS13aWRnZXQtYXV0by1yZWZyZXNoLWNvbnRleHQ+XG5cbiAgICAgICAgPGM4eS1keW5hbWljLWNvbXBvbmVudFxuICAgICAgICAgIFtjb21wb25lbnRJZF09XCJ3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWVcIlxuICAgICAgICAgIFtjb25maWddPVwiXG4gICAgICAgICAgICB3aWRnZXQudGVtcGxhdGVVcmwgfHwgd2lkZ2V0LndpZGdldENvbXBvbmVudFxuICAgICAgICAgICAgICA/IHsgY2hpbGQ6IHdpZGdldCwgZGFzaGJvYXJkOiBjb250ZXh0RGFzaGJvYXJkLCBjb250ZXh0OiBjb250ZXh0IH1cbiAgICAgICAgICAgICAgOiB3aWRnZXQuY29uZmlnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAqbmdJZj1cImNoaWxkLmludGVyc2VjdGVkXCJcbiAgICAgICAgICAodXBkYXRlV2lkZ2V0Q2xhc3Nlcyk9XCJ1cGRhdGVXaWRnZXRDbGFzc2VzKHdpZGdldCwgJGV2ZW50KVwiXG4gICAgICAgID48L2M4eS1keW5hbWljLWNvbXBvbmVudD5cbiAgICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZD5cbiAgICA8L2M4eS1kYXNoYm9hcmQ+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvd2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9kYXNoYm9hcmQvd2lkZ2V0cy1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBTUwsMkJBQTJCLEVBQzNCLCtCQUErQixFQUNoQyxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDcEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7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LE1BQU07Z0JBSVAsYUFBYTtzQkFEWixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxlQUFlO3NCQURkLE1BQU07Z0JBSVAsaUJBQWlCO3NCQURoQixNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi4vYnJlYWRjcnVtYi9icmVhZGNydW1iLm1vZGVsJztcbmltcG9ydCB7IERhc2hib2FyZENvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBEYXNoYm9hcmRDaGFuZ2UsXG4gIERhc2hib2FyZFNldHRpbmdzLFxuICBXaWRnZXQsXG4gIFdpZGdldENoYW5nZSxcbiAgRGFzaGJvYXJkQ29weVBlcm1pc3Npb24sXG4gIENvcHlEYXNoYm9hcmREaXNhYmxlZFJlYXNvbixcbiAgTkVXX0RBU0hCT0FSRF9ST1VURVJfU1RBVEVfUFJPUFxufSBmcm9tICcuL2Rhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHNldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBXaWRnZXRzRGFzaGJvYXJkRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXRzLWRhc2hib2FyZC1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IFJldmVydENoYW5nZVR5cGUgfSBmcm9tICcuL3dpZGdldC1jaGFuZ2UtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbW9kYWwnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IFdpZGdldEdsb2JhbEF1dG9SZWZyZXNoU2VydmljZSB9IGZyb20gJy4vd2lkZ2V0LWF1dG8tcmVmcmVzaC1jb250ZXh0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXdpZGdldHMtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldHMtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiBgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICBgLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkIGM4eS1ncmlkLWRhc2hib2FyZCdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbV2lkZ2V0c0Rhc2hib2FyZEV2ZW50U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0c0Rhc2hib2FyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHNldCB3aWRnZXRzKHZhbHVlOiBXaWRnZXRbXSkge1xuICAgIHRoaXMuX3dpZGdldHMubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgd2lkZ2V0cygpOiBXaWRnZXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3dpZGdldHMudmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBjb250ZXh0OiBhbnk7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBkZXZpY2UgaW5mbyBpbiBjb25maWcgc2hvdWxkIGJlIG92ZXJyaWRkZW4gd2l0aCB2YWx1ZXMgZnJvbSBjb250ZXh0IHByb3BlcnR5LlxuICAgKi9cbiAgQElucHV0KClcbiAgY29udGV4dERhc2hib2FyZDogYW55ID0geyB1cGRhdGVUYXJnZXQ6IHRydWUgfTtcblxuICBASW5wdXQoJ3NldHRpbmdzJylcbiAgc2V0IF9zZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxEYXNoYm9hcmRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLnNldHRpbmdzID0geyAuLi50aGlzLnNldHRpbmdzLCAuLi5zZXR0aW5ncyB9O1xuICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KCEhdGhpcy5zZXR0aW5ncy5pc0xvYWRpbmcpO1xuICB9XG5cbiAgQElucHV0KCkgaXNDb3B5RGlzYWJsZWQ6IERhc2hib2FyZENvcHlQZXJtaXNzaW9uIHwgYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBicmVhZGNydW1iOiBCcmVhZGNydW1iSXRlbTtcblxuICBASW5wdXQoKVxuICBlZGl0TW9kZUJ1dHRvbnM6IHtcbiAgICB1bmRvQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgY2hhbmdlVG9VbmRvTmFtZTogc3RyaW5nO1xuICAgIHJlZG9CdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcbiAgICBjaGFuZ2VUb1JlZG9OYW1lOiBzdHJpbmc7XG4gIH07XG5cbiAgc2V0dGluZ3M6IERhc2hib2FyZFNldHRpbmdzID0ge1xuICAgIGlzRnJvemVuOiBmYWxzZSxcbiAgICBpc0Rpc2FibGVkOiBmYWxzZSxcbiAgICB3aWRnZXRNYXJnaW46IDEyLFxuICAgIHRyYW5zbGF0ZVdpZGdldFRpdGxlOiBmYWxzZSxcbiAgICBkZWZhdWx0SGVpZ2h0OiA0LFxuICAgIGRlZmF1bHRXaWR0aDogNCxcbiAgICBhbGxvd0Z1bGxzY3JlZW46IGZhbHNlLFxuICAgIGNhbkNvcHk6IHRydWUsXG4gICAgY2FuRGVsZXRlOiB0cnVlLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgY29sdW1uczogMTJcbiAgfTtcblxuICBAT3V0cHV0KClcbiAgb25BZGRXaWRnZXQ6IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDb21wb25lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkVkaXRXaWRnZXQ6IEV2ZW50RW1pdHRlcjxXaWRnZXRDaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkRlbGV0ZVdpZGdldDogRXZlbnRFbWl0dGVyPFdpZGdldENoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlRGFzaGJvYXJkOiBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25SZXNpemU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25FZGl0RGFzaGJvYXJkOiBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ29tcG9uZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25Db3B5RGFzaGJvYXJkOiBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ29tcG9uZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25EZWxldGVEYXNoYm9hcmQ6IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDb21wb25lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNoYW5nZVN0YXJ0OiBFdmVudEVtaXR0ZXI8V2lkZ2V0Q2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2VFbmQ6IEV2ZW50RW1pdHRlcjxXaWRnZXRDaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvblNhdmVEYXNoYm9hcmQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNhbmNlbERhc2hib2FyZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHJldmVydENoYW5nZTogRXZlbnRFbWl0dGVyPFJldmVydENoYW5nZVR5cGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHJlc29sdmVkV2lkZ2V0cyQ6IE9ic2VydmFibGU8V2lkZ2V0W10+O1xuXG4gIGlzTG9hZGluZ1dpZGdldHMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIGNvcHlEaXNhYmxlZFBvcG92ZXJNc2c6IHN0cmluZztcblxuICB3aWRnZXRJbkZ1bGxzY3JlZW5Nb2RlID0gZmFsc2U7XG5cbiAgaW5GdWxsU2NyZWVuJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ2Z1bGxzY3JlZW5jaGFuZ2UnKS5waXBlKFxuICAgIG1hcCgoKSA9PiB0aGlzLmZ1bGxTY3JlZW4oKSksXG4gICAgc3RhcnRXaXRoKHRoaXMuZnVsbFNjcmVlbigpKVxuICApO1xuICBlZGl0TW9kZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGNvcHlEYXNoYm9hcmRMYWJlbCA9IGdldHRleHQoJ0NvcHkgZGFzaGJvYXJkJyk7XG4gIHJlYWRvbmx5IHVuZG9NZXNzYWdlID0gZ2V0dGV4dCgnVW5kbzogXCJ7eyBjaGFuZ2VUb1VuZG8gfX1cIicpO1xuICByZWFkb25seSByZWRvTWVzc2FnZSA9IGdldHRleHQoJ1JlZG86IFwie3sgY2hhbmdlVG9SZWRvIH19XCInKTtcbiAgcmVhZG9ubHkgQUNUSU9OX0JBUl9FRElUX1dJREdFVFNfUFJJT1JJVFkgPSAxMDtcblxuICBwcml2YXRlIF93aWRnZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxXaWRnZXRbXT4oW10pO1xuICBwcml2YXRlIGlzTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCEhdGhpcy5fc2V0dGluZ3M/LmlzTG9hZGluZyk7XG4gIHByaXZhdGUgaXNFeGVjdXRpbmdSZXNvbHZlcnMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZHluYW1pYzogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldEdsb2JhbEF1dG9SZWZyZXNoOiBXaWRnZXRHbG9iYWxBdXRvUmVmcmVzaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKTtcbiAgICBpZiAobmF2aWdhdGlvbj8uZXh0cmFzLnN0YXRlPy5bTkVXX0RBU0hCT0FSRF9ST1VURVJfU1RBVEVfUFJPUF0pIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVkV2lkZ2V0cyQgPSB0aGlzLl93aWRnZXRzLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAod2lkZ2V0cyA9PiB0aGlzLmV4ZWN1dGVSZXNvbHZlcnNPZldpZGdldHMod2lkZ2V0cykpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICAgIHRoaXMuaXNFeGVjdXRpbmdSZXNvbHZlcnMkID0gbWVyZ2UoXG4gICAgICB0aGlzLl93aWRnZXRzLnBpcGUobWFwKCgpID0+IHRydWUpKSxcbiAgICAgIHRoaXMucmVzb2x2ZWRXaWRnZXRzJC5waXBlKG1hcCgoKSA9PiBmYWxzZSkpXG4gICAgKTtcbiAgICB0aGlzLmlzTG9hZGluZ1dpZGdldHMkID0gY29tYmluZUxhdGVzdChbdGhpcy5pc0xvYWRpbmckLCB0aGlzLmlzRXhlY3V0aW5nUmVzb2x2ZXJzJF0pLnBpcGUoXG4gICAgICBtYXAobG9hZGluZ3MgPT4gbG9hZGluZ3Muc29tZShsb2FkaW5nID0+IGxvYWRpbmcpKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5pc0NvcHlEaXNhYmxlZCkge1xuICAgICAgdGhpcy5zZXRDb3B5RGlzYWJsZWRQb3BvdmVyTXNnKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2FuRGVhY3RpdmF0ZShvbWl0Q29uZmlybSA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmVkaXRNb2RlJC52YWx1ZSB8fCB0aGlzLmVkaXRNb2RlQnV0dG9ucy51bmRvQnV0dG9uRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob21pdENvbmZpcm0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlybUNsb3NpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b2dnbGVGdWxsc2NyZWVuKGhhc1dpZGdldCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmJvZHkgYXMgYW55O1xuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50IGFzIGFueTtcbiAgICBpZiAoaGFzV2lkZ2V0KSB7XG4gICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoJ3NpbmdsZVdpZGdldCcpO1xuICAgICAgdGhpcy53aWRnZXRJbkZ1bGxzY3JlZW5Nb2RlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKCdzaW5nbGVXaWRnZXQnKTtcbiAgICAgIHRoaXMud2lkZ2V0SW5GdWxsc2NyZWVuTW9kZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICBpZiAoZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICBlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ubXNSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICBlbGVtLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xuICAgICAgICBlbGVtLm1velJlcXVlc3RGdWxsU2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigoRWxlbWVudCBhcyBhbnkpLkFMTE9XX0tFWUJPQVJEX0lOUFVUKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRvYy5leGl0RnVsbHNjcmVlbikge1xuICAgICAgZG9jLmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgfSBlbHNlIGlmIChkb2MubXNFeGl0RnVsbHNjcmVlbikge1xuICAgICAgZG9jLm1zRXhpdEZ1bGxzY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGRvYy5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7XG4gICAgICBkb2MubW96Q2FuY2VsRnVsbFNjcmVlbigpO1xuICAgIH0gZWxzZSBpZiAoZG9jLndlYmtpdEV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICBkb2Mud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtcbiAgICB9XG4gIH1cblxuICBmdWxsU2NyZWVuKCkge1xuICAgIGNvbnN0IGRvYzogYW55ID0gZG9jdW1lbnQ7XG4gICAgcmV0dXJuICEhKFxuICAgICAgZG9jLmZ1bGxzY3JlZW5FbGVtZW50IHx8XG4gICAgICBkb2MubW96RnVsbFNjcmVlbkVsZW1lbnQgfHxcbiAgICAgIGRvYy53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgZG9jLm1zRnVsbHNjcmVlbkVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgdG9nZ2xlRnVsbHNjcmVlbk9uV2lkZ2V0KGNoaWxkOiBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCkge1xuICAgIGNoaWxkLmZ1bGxzY3JlZW4gPSAhY2hpbGQuZnVsbHNjcmVlbjtcbiAgICBpZiAoY2hpbGQuZnVsbHNjcmVlbikge1xuICAgICAgY29uc3Qgb25GdWxsU2NyZWVuID0gKCkgPT4ge1xuICAgICAgICBjaGlsZC5mdWxsc2NyZWVuID0gISFkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudDtcbiAgICAgICAgaWYgKCFjaGlsZC5mdWxsc2NyZWVuKSB7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIG9uRnVsbFNjcmVlbik7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzaW5nbGVXaWRnZXQnKTtcbiAgICAgICAgICAvLyByZXF1aXJlZCBpbiBjYXNlIGZ1bGxzY3JlZW4gaXMgZXhpdGVkIGJ5IGUuZy4gcHJlc3NpbmcgRVNDXG4gICAgICAgICAgdGhpcy5vblJlc2l6ZS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmdWxsc2NyZWVuY2hhbmdlJywgb25GdWxsU2NyZWVuKTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGVGdWxsc2NyZWVuKGNoaWxkLmZ1bGxzY3JlZW4pO1xuICAgIHRoaXMub25SZXNpemUubmV4dCgpO1xuICB9XG5cbiAgdXBkYXRlV2lkZ2V0Q2xhc3Nlcyh3aWRnZXQ6IFdpZGdldCwgY2xhc3NlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pIHtcbiAgICB3aWRnZXQuY2xhc3NlcyA9IHsgLi4ud2lkZ2V0LmNsYXNzZXMsIC4uLmNsYXNzZXMgfTtcbiAgfVxuXG4gIHVwZGF0ZVdpZGdldENvbmZpZyhkYXRhOiBhbnksIHdpZGdldDogV2lkZ2V0KSB7XG4gICAgd2lkZ2V0LmNvbmZpZyA9IHsgLi4ud2lkZ2V0LmNvbmZpZywgLi4uZGF0YSB9O1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsRGFzaGJvYXJkU2F2ZSgpIHtcbiAgICBpZiAoYXdhaXQgdGhpcy5jYW5EZWFjdGl2YXRlKCkpIHtcbiAgICAgIHRoaXMub25DYW5jZWxEYXNoYm9hcmQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHNhdmVEYXNoYm9hcmQoKSB7XG4gICAgLy8gRHJvcGRvd24gdG9nZ2xlIChTZXR0aW5ncykgYnV0dG9uIHdhcyBkZWxldGVkIGltbWVkaWF0ZWx5IGFmdGVyIGVkaXRNb2RlIHNldCB0byBmYWxzZS5cbiAgICAvLyBJdCBsZWFkcyB0byBhbiBpc3N1ZSB3aXRoIHRoZSBhY3R1YWwgaGlkaW5nIGRyb3Bkb3duLCBzbyB3ZSBoYXZlIHRvIGFkZCBzb21lIGRlbGF5IGluIG9yZGVyIHRvOlxuICAgIC8vIDEuIG1ha2UgZHJvcGRvd24gY2xvc2UgZmlyc3RcbiAgICAvLyAyLiB0aGVuIHNldCBlZGl0TW9kZSB0byBmYWxzZSBhbmQgb25seSB0aGVuIHJlbW92ZSBidXR0b24gZnJvbSBET01cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZWRpdE1vZGUkLm5leHQoZmFsc2UpKTtcbiAgICB0aGlzLm9uU2F2ZURhc2hib2FyZC5lbWl0KCk7XG4gICAgdGhpcy53aWRnZXRHbG9iYWxBdXRvUmVmcmVzaC5vbkRhc2hib2FyZFNhdmUkLm5leHQoKTtcbiAgfVxuXG4gIGVuYWJsZUVkaXRNb2RlKCkge1xuICAgIHRoaXMuZWRpdE1vZGUkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkLmhpc3RvcnlEZXNjcmlwdGlvbiA9IHt9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb3B5RGlzYWJsZWRQb3BvdmVyTXNnKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5pc0NvcHlEaXNhYmxlZCA9PT0gJ2Jvb2xlYW4nIHx8IHRoaXMuaXNDb3B5RGlzYWJsZWQ/LnN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNDb3B5RGlzYWJsZWQ/LnJlYXNvbiA9PT0gQ29weURhc2hib2FyZERpc2FibGVkUmVhc29uLlBFUk1JU1NJT05TKSB7XG4gICAgICB0aGlzLmNvcHlEaXNhYmxlZFBvcG92ZXJNc2cgPSBnZXR0ZXh0KFxuICAgICAgICAnVG8gY29weSB0aGlzIGRhc2hib2FyZCwgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IgdG8gcmVxdWVzdCB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zLidcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQ29weURpc2FibGVkPy5yZWFzb24gPT09IENvcHlEYXNoYm9hcmREaXNhYmxlZFJlYXNvbi5XUk9OR19SRUZFUkVOQ0UpIHtcbiAgICAgIGNvbnN0IHZpZXdDb250ZXh0ID0gdGhpcy5yb3V0ZS5wYXJlbnQuc25hcHNob3QuZGF0YT8uY29udGV4dDtcblxuICAgICAgaWYgKHZpZXdDb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHZpZXdDb250ZXh0LnNwbGl0KCcvJykuc2hpZnQoKTtcbiAgICAgICAgY29uc3QgZGV2aWNlU3RyID0gZ2V0dGV4dChcbiAgICAgICAgICAnQ29weSBub3QgcG9zc2libGU6IFNvbWUgd2lkZ2V0cyByZWZlcmVuY2UgZGF0YSBmcm9tIGFub3RoZXIgZ3JvdXAgb3IgZGV2aWNlLiBUbyBjb3B5IHRoaXMgZGFzaGJvYXJkLCBtYWtlIHN1cmUgYWxsIHdpZGdldHMgdXNlIGRhdGEgZnJvbSB0aGUgY3VycmVudCBkZXZpY2Ugb25seS4nXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGdyb3VwU3RyID0gZ2V0dGV4dChcbiAgICAgICAgICAnQ29weSBub3QgcG9zc2libGU6IFNvbWUgd2lkZ2V0cyByZWZlcmVuY2UgZGF0YSBmcm9tIGFub3RoZXIgZ3JvdXAgb3IgZGV2aWNlLiBUbyBjb3B5IHRoaXMgZGFzaGJvYXJkLCBtYWtlIHN1cmUgYWxsIHdpZGdldHMgdXNlIGRhdGEgZnJvbSB0aGUgY3VycmVudCBncm91cCBvbmx5LidcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb3B5RGlzYWJsZWRQb3BvdmVyTXNnID0gY3R4ID09PSAnZ3JvdXAnID8gZ3JvdXBTdHIgOiBkZXZpY2VTdHI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25maXJtQ2xvc2luZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdFeGl0IGVkaXQgbW9kZScpLFxuICAgICAgICBnZXR0ZXh0KCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZXhpdCB0aGUgZWRpdCBtb2RlPyBBbGwgdW5zYXZlZCBjaGFuZ2VzIHdpbGwgYmUgbG9zdC4nKSxcbiAgICAgICAgU3RhdHVzLldBUk5JTkcsXG4gICAgICAgIHtcbiAgICAgICAgICBvazogZ2V0dGV4dCgnRXhpdCcpLFxuICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVSZXNvbHZlcnNPZldpZGdldHMod2lkZ2V0czogV2lkZ2V0W10pOiBQcm9taXNlPFdpZGdldFtdPiB7XG4gICAgaWYgKCF3aWRnZXRzKSB7XG4gICAgICByZXR1cm4gd2lkZ2V0cztcbiAgICB9XG5cbiAgICBjb25zdCB0dXBsZSA9IHdpZGdldHMubWFwKHdpZGdldCA9PiAoe1xuICAgICAgY29tcG9uZW50SWQ6IHdpZGdldC5jb21wb25lbnRJZCB8fCB3aWRnZXQubmFtZSxcbiAgICAgIGNvbmZpZzogd2lkZ2V0LmNvbmZpZ1xuICAgIH0pKTtcblxuICAgIGNvbnN0IHJlc29sdmVkUmVzdWx0cyA9IGF3YWl0IHRoaXMuZHluYW1pYy5leGVjdXRlUmVzb2x2ZXJzKHR1cGxlKTtcbiAgICB3aWRnZXRzLmZvckVhY2goKHdpZGdldCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChyZXNvbHZlZFJlc3VsdHNbaW5kZXhdKSB7XG4gICAgICAgIGlmICghd2lkZ2V0LmNvbmZpZykge1xuICAgICAgICAgIHdpZGdldC5jb25maWcgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZW50cmllcyhyZXNvbHZlZFJlc3VsdHNbaW5kZXhdKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+XG4gICAgICAgICAgc2V0KHdpZGdldC5jb25maWcsIGtleSwgdmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHdpZGdldHM7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGUgKm5nSWY9XCIhIXNldHRpbmdzLnRpdGxlXCI+XG4gIHt7IHNldHRpbmdzLnRpdGxlIHwgdHJhbnNsYXRlIH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iICpuZ0lmPVwiISFicmVhZGNydW1iXCI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiYnJlYWRjcnVtYi5pY29uXCJcbiAgICBbbGFiZWxdPVwiYnJlYWRjcnVtYi5sYWJlbFwiXG4gICAgW3BhdGhdPVwiYnJlYWRjcnVtYi5wYXRoXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCJcbiAgW3ByaW9yaXR5XT1cIkFDVElPTl9CQVJfRURJVF9XSURHRVRTX1BSSU9SSVRZXCJcbiAgKm5nSWY9XCIhKGVkaXRNb2RlJCB8IGFzeW5jKVwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGluayBhbmltYXRlZCBmYWRlSW4gaGlkZGVuLXhzXCJcbiAgICB0aXRsZT1cInt7ICdFZGl0IHdpZGdldHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBbZGlzYWJsZWRdPVwic2V0dGluZ3MuaXNEaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cImVuYWJsZUVkaXRNb2RlKClcIlxuICAgIGRhdGEtY3k9XCJjOHktd2lkZ2V0LWRhc2hib2FyZC0tZWRpdC13aWRnZXRzXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJzZW5kLWJhY2t3YXJkXCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwibS1sLTRcIj57eyAnRWRpdCB3aWRnZXRzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGluayB2aXNpYmxlLXhzIG0tbC0wXCJcbiAgICB0b29sdGlwPVwie3sgJ05vdCBhdmFpbGFibGUgb24gbW9iaWxlIHBob25lJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW2Rpc2FibGVkXT1cInRydWVcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInNlbmQtYmFja3dhcmRcIj48L2k+XG4gICAgPHNwYW4gY2xhc3M9XCJtLWwtNFwiPnt7ICdFZGl0IHdpZGdldHMnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCInbGVmdCdcIlxuICAqbmdJZj1cImVkaXRNb2RlJCB8IGFzeW5jXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGFuaW1hdGVkIGZhZGVJblwiXG4gICAgdGl0bGU9XCJ7eyAnQWRkIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJvbkFkZFdpZGdldC5lbWl0KClcIlxuICAgIGRhdGEtY3k9XCJ3aWRnZXQtZGFzaGJvYXJkLS1BZGQtd2lkZ2V0XCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICB7eyAnQWRkIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ2xlZnQnXCJcbiAgaXRlbUNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgZ2FwLThcIlxuICAqbmdJZj1cImVkaXRNb2RlJCB8IGFzeW5jXCJcbj5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtIGFuaW1hdGVkIGZhZGVJblwiPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGJ0bi1pY29uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVW5kbycgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICBlZGl0TW9kZUJ1dHRvbnMudW5kb0J1dHRvbkRpc2FibGVkXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6ICh1bmRvTWVzc2FnZVxuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBjaGFuZ2VUb1VuZG86IGVkaXRNb2RlQnV0dG9ucy5jaGFuZ2VUb1VuZG9OYW1lIHwgdHJhbnNsYXRlIH0pXG4gICAgICAgIFwiXG4gICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAoY2xpY2spPVwicmV2ZXJ0Q2hhbmdlLmVtaXQoJ3VuZG8nKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJlZGl0TW9kZUJ1dHRvbnMudW5kb0J1dHRvbkRpc2FibGVkXCJcbiAgICAgID5cbiAgICAgICAgPGkgW2M4eUljb25dPVwiJ3VuZG8nXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc20gYnRuLWljb25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZWRvJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgIGVkaXRNb2RlQnV0dG9ucy5yZWRvQnV0dG9uRGlzYWJsZWRcbiAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgIDogKHJlZG9NZXNzYWdlXG4gICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IGNoYW5nZVRvUmVkbzogZWRpdE1vZGVCdXR0b25zLmNoYW5nZVRvUmVkb05hbWUgfCB0cmFuc2xhdGUgfSlcbiAgICAgICAgXCJcbiAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgIChjbGljayk9XCJyZXZlcnRDaGFuZ2UuZW1pdCgncmVkbycpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImVkaXRNb2RlQnV0dG9ucy5yZWRvQnV0dG9uRGlzYWJsZWRcIlxuICAgICAgPlxuICAgICAgICA8aSBbYzh5SWNvbl09XCIncmVkbydcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8c3Bhbj48L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGFuaW1hdGVkIGZhZGVJblwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbVwiXG4gICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImNhbmNlbERhc2hib2FyZFNhdmUoKVwiXG4gICAgPlxuICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gbS1sLThcIlxuICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiZWRpdE1vZGVCdXR0b25zLnVuZG9CdXR0b25EaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwic2F2ZURhc2hib2FyZCgpXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktd2lkZ2V0cy1kYXNoYm9hcmQtLXNhdmVcIlxuICAgID5cbiAgICAgIHt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgKm5nSWY9XCJvbkVkaXREYXNoYm9hcmQub2JzZXJ2ZXJzLmxlbmd0aFwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGluayBoaWRkZW4teHMgbS1sLTBcIlxuICAgIHRpdGxlPVwie3sgJ0Rhc2hib2FyZCBzZXR0aW5ncycgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIFtkaXNhYmxlZF09XCJzZXR0aW5ncy5pc0Rpc2FibGVkIHx8IChlZGl0TW9kZSQgfCBhc3luYylcIlxuICAgIChjbGljayk9XCJvbkVkaXREYXNoYm9hcmQuZW1pdCgpXCJcbiAgICBkYXRhLWN5PVwiYzh5LXdpZGdldHMtZGFzaGJvYXJkLS1lZGl0LWRhc2hib2FyZFwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwic29ydGluZy1zbGlkZXJcIj48L2k+XG4gICAgPHNwYW4gY2xhc3M9XCJ2aXNpYmxlLXhzLWlubGluZSBoaWRkZW4tc20gdmlzaWJsZS1tZC1pbmxpbmUgdmlzaWJsZS1sZy1pbmxpbmVcIj5cbiAgICAgIHt7ICdEYXNoYm9hcmQgc2V0dGluZ3MnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHZpc2libGUteHMgbS1sLTBcIlxuICAgIHRvb2x0aXA9XCJ7eyAnTm90IGF2YWlsYWJsZSBvbiBtb2JpbGUgcGhvbmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwic29ydGluZy1zbGlkZXJcIj48L2k+XG4gICAgPHNwYW4gY2xhc3M9XCJ2aXNpYmxlLXhzLWlubGluZSBoaWRkZW4tc20gdmlzaWJsZS1tZC1pbmxpbmUgdmlzaWJsZS1sZy1pbmxpbmVcIj5cbiAgICAgIHt7ICdEYXNoYm9hcmQgc2V0dGluZ3MnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgKm5nSWY9XCJzZXR0aW5ncy5hbGxvd0Z1bGxzY3JlZW5cIlxuICBbcHJpb3JpdHldPVwiLTUwMDBcIlxuICBpdGVtQ2xhc3M9XCJwdWxsLXJpZ2h0XCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidGdWxsIHNjcmVlbicgfCB0cmFuc2xhdGVcIlxuICAgIHRvb2x0aXA9XCJ7eyAnRnVsbCBzY3JlZW4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlRnVsbHNjcmVlbigpXCJcbiAgICBkYXRhLWN5PVwid2lkZ2V0cy1kYXNoYm9hcmQtLUZ1bGwtc2NyZWVuXCJcbiAgPlxuICAgIDxpIFtjOHlJY29uXT1cIihpbkZ1bGxTY3JlZW4kIHwgYXN5bmMpID8gJ2NvbXByZXNzJyA6ICdleHBhbmQnXCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwidmlzaWJsZS14cy1pbmxpbmUgaGlkZGVuLXNtIHZpc2libGUtbWQtaW5saW5lIHZpc2liaWxlLWxnLWlubGluZVwiPlxuICAgICAge3sgJ0Z1bGwgc2NyZWVuJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtXG4gIFtwbGFjZW1lbnRdPVwiJ21vcmUnXCJcbiAgW3ByaW9yaXR5XT1cIi0yMDAwXCJcbiAgKm5nSWY9XCJzZXR0aW5ncy5jYW5Db3B5XCJcbj5cbiAgPGRpdlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcidcbiAgICB9XCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiaGlkZGVuLXhzXCJcbiAgICAgIHRpdGxlPVwie3tcbiAgICAgICAgKGlzQ29weURpc2FibGVkID09PSB0cnVlIHx8ICFpc0NvcHlEaXNhYmxlZD8uc3RhdGUgPyAnRGlzYWJsZWQnIDogY29weURhc2hib2FyZExhYmVsKVxuICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0biBidG4tbGluayc6ICFzZXR0aW5ncy5jYW5EZWxldGUgfVwiXG4gICAgICBkYXRhLWN5PVwid2lkZ2V0cy1kYXNoYm9hcmQtLWNvcHktZGFzaGJvYXJkXCJcbiAgICAgIChjbGljayk9XCJvbkNvcHlEYXNoYm9hcmQuZW1pdCgpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJpc0NvcHlEaXNhYmxlZCA9PT0gdHJ1ZSB8fCAhaXNDb3B5RGlzYWJsZWQ/LnN0YXRlIHx8IChlZGl0TW9kZSQgfCBhc3luYylcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJjbG9uZVwiPjwvaT5cbiAgICAgIDxzcGFuPnt7IGNvcHlEYXNoYm9hcmRMYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbSBtLXItMTYgaGlkZGVuLXhzXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtwb3BvdmVyXT1cImNvcHlEaXNhYmxlZFBvcG92ZXJNc2cgfCB0cmFuc2xhdGVcIlxuICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKm5nSWY9XCIhaXNDb3B5RGlzYWJsZWQ/LnN0YXRlICYmIGNvcHlEaXNhYmxlZFBvcG92ZXJNc2dcIlxuICAgICAgZGF0YS1jeT1cIndpZGdldHMtZGFzaGJvYXJkLS1pbmZvLWNvcHktZGFzaGJvYXJkXCJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgID48L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cInZpc2libGUteHMgbS1sLTBcIlxuICAgIHRvb2x0aXA9XCJ7eyAnTm90IGF2YWlsYWJsZSBvbiBtb2JpbGUgcGhvbmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBbbmdDbGFzc109XCJ7ICdidG4gYnRuLWxpbmsnOiAhc2V0dGluZ3MuY2FuRGVsZXRlIH1cIlxuICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJjbG9uZVwiPjwvaT5cbiAgICA8c3Bhbj57eyBjb3B5RGFzaGJvYXJkTGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidtb3JlJ1wiXG4gIFtwcmlvcml0eV09XCItMzAwMFwiXG4gICpuZ0lmPVwic2V0dGluZ3MuY2FuRGVsZXRlICYmIG9uRGVsZXRlRGFzaGJvYXJkLm9ic2VydmVycy5sZW5ndGhcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJoaWRkZW4teHNcIlxuICAgIHRpdGxlPVwie3sgJ0RlbGV0ZSBkYXNoYm9hcmQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBkYXRhLWN5PVwid2lkZ2V0cy1kYXNoYm9hcmQtLWRlbGV0ZS1kYXNoYm9hcmRcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2J0biBidG4tbGluayc6ICFzZXR0aW5ncy5jYW5Db3B5IH1cIlxuICAgIChjbGljayk9XCJvbkRlbGV0ZURhc2hib2FyZC5lbWl0KClcIlxuICAgIFtkaXNhYmxlZF09XCJzZXR0aW5ncy5pc0Rpc2FibGVkIHx8IChlZGl0TW9kZSQgfCBhc3luYylcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cImRlbGV0ZVwiPjwvaT5cbiAgICA8c3BhbiB0cmFuc2xhdGU+RGVsZXRlIGRhc2hib2FyZDwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cInZpc2libGUteHMgbS1sLTBcIlxuICAgIHRvb2x0aXA9XCJ7eyAnTm90IGF2YWlsYWJsZSBvbiBtb2JpbGUgcGhvbmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBkYXRhLWN5PVwid2lkZ2V0cy1kYXNoYm9hcmQtLWRlbGV0ZS1kYXNoYm9hcmQtbW9iaWxlXCJcbiAgICBbbmdDbGFzc109XCJ7ICdidG4gYnRuLWxpbmsnOiAhc2V0dGluZ3MuY2FuQ29weSB9XCJcbiAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiZGVsZXRlXCI+PC9pPlxuICAgIDxzcGFuIHRyYW5zbGF0ZT5EZWxldGUgZGFzaGJvYXJkPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nSW5kaWNhdG9yPlxuICA8Yzh5LWxvYWRpbmdcbiAgICBjbGFzcz1cImNvbC14cy0xMiB0ZXh0LWNlbnRlclwiXG4gICAgKm5nSWY9XCJpc0xvYWRpbmdXaWRnZXRzJCB8IGFzeW5jXCJcbiAgPjwvYzh5LWxvYWRpbmc+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIShpc0xvYWRpbmdXaWRnZXRzJCB8IGFzeW5jKTsgZWxzZSBsb2FkaW5nSW5kaWNhdG9yXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZXNvbHZlZFdpZGdldHMkIHwgYXN5bmMgYXMgd2lkZ2V0c1RvRGlzcGxheVwiPlxuICAgIDwhLS0gZW1wdHkgc3RhdGUgLS0+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgW2ljb25dPVwiJ2M4eS1kZXZpY2UnXCJcbiAgICAgIFt0aXRsZV09XCInTm8gd2lkZ2V0cyB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGVcIlxuICAgICAgKm5nSWY9XCJ3aWRnZXRzVG9EaXNwbGF5Py5sZW5ndGggPT09IDBcIlxuICAgID5cbiAgICAgIDxkaXYgKm5nSWY9XCJvbkFkZFdpZGdldC5vYnNlcnZlcnMubGVuZ3RoXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgKm5nSWY9XCJlZGl0TW9kZSQgfCBhc3luY1wiXG4gICAgICAgID5cbiAgICAgICAgICBBZGQgd2lkZ2V0cyB0byB0aGlzIGRhc2hib2FyZC5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cFxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICpuZ0lmPVwiIShlZGl0TW9kZSQgfCBhc3luYylcIlxuICAgICAgICA+XG4gICAgICAgICAgQ2xpY2sgXCJFZGl0IHdpZGdldHNcIiB0byB1bmxvY2tcbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG0tdC0xNlwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdBZGQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZXR0aW5ncy5pc0Rpc2FibGVkIHx8ICEoZWRpdE1vZGUkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFkZFdpZGdldC5lbWl0KClcIlxuICAgICAgICAgICAgZGF0YS1jeT1cImM4eS13aWRnZXRzLWRhc2hib2FyZC0tYWRkLXdpZGdldFwiXG4gICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICBBZGQgd2lkZ2V0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBjOHktZ3VpZGUtZG9jcz5cbiAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEZpbmQgb3V0IG1vcmUgaW4gdGhlXG4gICAgICAgICAgICA8YSBjOHktZ3VpZGUtaHJlZj1cIi9kb2NzL2NvY2twaXQvd29ya2luZy13aXRoLWRhc2hib2FyZHNcIj51c2VyIGRvY3VtZW50YXRpb248L2E+XG4gICAgICAgICAgICAuXG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG5cbiAgICA8Yzh5LWRhc2hib2FyZFxuICAgICAgW2NvbHVtbnNdPVwic2V0dGluZ3MuY29sdW1uc1wiXG4gICAgICAoZGFzaGJvYXJkQ2hhbmdlKT1cIm9uQ2hhbmdlRGFzaGJvYXJkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAjZGFzaGJvYXJkXG4gICAgPlxuICAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGRcbiAgICAgICAgW2NsYXNzXT1cIndpZGdldC5jbGFzc2VzXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHdpZGdldCBvZiB3aWRnZXRzVG9EaXNwbGF5XCJcbiAgICAgICAgW3hdPVwid2lkZ2V0Ll94XCJcbiAgICAgICAgW3ldPVwid2lkZ2V0Ll95XCJcbiAgICAgICAgW3dpZHRoXT1cIndpZGdldC5fd2lkdGggfHwgc2V0dGluZ3MuZGVmYXVsdFdpZHRoXCJcbiAgICAgICAgW2hlaWdodF09XCJ3aWRnZXQuX2hlaWdodCB8fCBzZXR0aW5ncy5kZWZhdWx0SGVpZ2h0XCJcbiAgICAgICAgW21hcmdpbl09XCJzZXR0aW5ncy53aWRnZXRNYXJnaW5cIlxuICAgICAgICBbZGF0YV09XCJ3aWRnZXRcIlxuICAgICAgICBbdXNlSW50ZXJzZWN0aW9uXT1cInRydWVcIlxuICAgICAgICBbZWRpdE1vZGVdPVwiZWRpdE1vZGUkIHwgYXN5bmNcIlxuICAgICAgICAoY2hhbmdlU3RhcnQpPVwib25DaGFuZ2VTdGFydC5lbWl0KHsgd2lkZ2V0OiB3aWRnZXQsIHNvdXJjZTogY2hpbGQsIGRhc2hib2FyZDogZGFzaGJvYXJkIH0pXCJcbiAgICAgICAgKGNoYW5nZUVuZCk9XCJvbkNoYW5nZUVuZC5lbWl0KHsgd2lkZ2V0OiB3aWRnZXQsIHNvdXJjZTogY2hpbGQsIGRhc2hib2FyZDogZGFzaGJvYXJkIH0pXCJcbiAgICAgICAgKHRvZ2dsZUZ1bGxzY3JlZW4pPVwidG9nZ2xlRnVsbHNjcmVlbk9uV2lkZ2V0KGNoaWxkKVwiXG4gICAgICAgIFtjYW5Ub2dnbGVGdWxsc2NyZWVuXT1cIiEoaW5GdWxsU2NyZWVuJCB8IGFzeW5jKSB8fCB3aWRnZXRJbkZ1bGxzY3JlZW5Nb2RlXCJcbiAgICAgICAgI2NoaWxkXG4gICAgICA+XG4gICAgICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBkYXRhLWN5PVwiYzh5LWRhc2hib2FyZC1saXN0LS1kZXZpY2Utd2lkZ2V0XCJcbiAgICAgICAgICAgICpuZ0lmPVwic2V0dGluZ3MudHJhbnNsYXRlV2lkZ2V0VGl0bGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHdpZGdldC50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzZXR0aW5ncy50cmFuc2xhdGVXaWRnZXRUaXRsZVwiPlxuICAgICAgICAgICAge3sgd2lkZ2V0LnRpdGxlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQtdGl0bGU+XG4gICAgICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbiAqbmdJZj1cIm9uRWRpdFdpZGdldC5vYnNlcnZlcnMubGVuZ3RoXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRWRpdCB3aWRnZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgZGF0YS1jeT1cIndpZGdldHMtZGFzaGJvYXJkLS1FZGl0LXdpZGdldFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25FZGl0V2lkZ2V0LmVtaXQoeyB3aWRnZXQ6IHdpZGdldCwgc291cmNlOiBjaGlsZCwgZGFzaGJvYXJkOiBkYXNoYm9hcmQgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJwZW5jaWxcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RWRpdDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAgICAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uICpuZ0lmPVwib25EZWxldGVXaWRnZXQub2JzZXJ2ZXJzLmxlbmd0aFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZSB3aWRnZXQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgZGF0YS1jeT1cImM4eS13aWRnZXRzLWRhc2hib2FyZC0tcmVtb3ZlLXdpZGdldFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVXaWRnZXQuZW1pdCh7IHdpZGdldDogd2lkZ2V0LCBzb3VyY2U6IGNoaWxkLCBkYXNoYm9hcmQ6IGRhc2hib2FyZCB9KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cImRlbGV0ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5SZW1vdmU8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG5cbiAgICAgICAgPGM4eS13aWRnZXQtdGltZS1jb250ZXh0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICh3aWRnZXQuY29uZmlnPy5kaXNwbGF5U2V0dGluZ3M/Lmdsb2JhbFRpbWVDb250ZXh0IHx8XG4gICAgICAgICAgICAgIHdpZGdldC5jb25maWc/LmRpc3BsYXlTZXR0aW5ncz8uZ2xvYmFsUmVhbHRpbWVDb250ZXh0KSAmJlxuICAgICAgICAgICAgKHdpZGdldC5jb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCB8fFxuICAgICAgICAgICAgICB3aWRnZXQuY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0KVxuICAgICAgICAgIFwiXG4gICAgICAgICAgKGRhdGVDb250ZXh0Q2hhbmdlKT1cInVwZGF0ZVdpZGdldENvbmZpZygkZXZlbnQsIHdpZGdldClcIlxuICAgICAgICAgIFtjYW5EZWNvdXBsZV09XCJ3aWRnZXQuY29uZmlnLmNhbkRlY291cGxlR2xvYmFsVGltZUNvbnRleHRcIlxuICAgICAgICAgIFtkaXNwbGF5U2V0dGluZ3NdPVwid2lkZ2V0LmNvbmZpZy5kaXNwbGF5U2V0dGluZ3NcIlxuICAgICAgICAgIFtoaWRkZW5dPVwiZWRpdE1vZGUkIHwgYXN5bmNcIlxuICAgICAgICA+PC9jOHktd2lkZ2V0LXRpbWUtY29udGV4dD5cblxuICAgICAgICA8Yzh5LXdpZGdldC1hdXRvLXJlZnJlc2gtY29udGV4dFxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICB3aWRnZXQ/LmNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgJiZcbiAgICAgICAgICAgIHdpZGdldC5jb25maWc/LmRpc3BsYXlTZXR0aW5ncy5nbG9iYWxBdXRvUmVmcmVzaENvbnRleHRcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtlZGl0TW9kZSRdPVwiZWRpdE1vZGUkXCJcbiAgICAgICAgPjwvYzh5LXdpZGdldC1hdXRvLXJlZnJlc2gtY29udGV4dD5cblxuICAgICAgICA8Yzh5LWR5bmFtaWMtY29tcG9uZW50XG4gICAgICAgICAgW2NvbXBvbmVudElkXT1cIndpZGdldC5jb21wb25lbnRJZCB8fCB3aWRnZXQubmFtZVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJcbiAgICAgICAgICAgIHdpZGdldC50ZW1wbGF0ZVVybCB8fCB3aWRnZXQud2lkZ2V0Q29tcG9uZW50XG4gICAgICAgICAgICAgID8geyBjaGlsZDogd2lkZ2V0LCBkYXNoYm9hcmQ6IGNvbnRleHREYXNoYm9hcmQsIGNvbnRleHQ6IGNvbnRleHQgfVxuICAgICAgICAgICAgICA6IHdpZGdldC5jb25maWdcbiAgICAgICAgICBcIlxuICAgICAgICAgICpuZ0lmPVwiY2hpbGQuaW50ZXJzZWN0ZWRcIlxuICAgICAgICAgICh1cGRhdGVXaWRnZXRDbGFzc2VzKT1cInVwZGF0ZVdpZGdldENsYXNzZXMod2lkZ2V0LCAkZXZlbnQpXCJcbiAgICAgICAgPjwvYzh5LWR5bmFtaWMtY29tcG9uZW50PlxuICAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkPlxuICAgIDwvYzh5LWRhc2hib2FyZD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -12,7 +12,7 @@ export class AddMicroserviceComponent {
12
12
  this.modal = modal;
13
13
  this.tenantService = tenantService;
14
14
  this.docs = docs;
15
- this.slaHref = this.docs.getUserGuideLink('docs/microservice-sdk/microservices-sla');
15
+ this.slaHref = this.docs.getUserGuideLink('docs/service-terms/service-level/#microservices-sla');
16
16
  this.headerText = gettext('Add microservice');
17
17
  this.successText = gettext('Microservice created');
18
18
  this.createMicroserviceApplicationHandler = (f) => this.createMicroserviceApplication(f);
@@ -90,4 +90,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
90
90
  ></c8y-add-application>`
91
91
  }]
92
92
  }], ctorParameters: () => [{ type: i1.EcosystemService }, { type: i2.ModalService }, { type: i3.TenantService }, { type: i2.DocsService }] });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW1pY3Jvc2VydmljZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vbWljcm9zZXJ2aWNlcy9hZGQtbWljcm9zZXJ2aWNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFnQixhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7OztBQW1CcEYsTUFBTSxPQUFPLHdCQUF3QjtJQUtuQyxZQUNVLGdCQUFrQyxFQUNsQyxLQUFtQixFQUNuQixhQUE0QixFQUM1QixJQUFpQjtRQUhqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQVJsQixZQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ3pGLGVBQVUsR0FBVyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqRCxnQkFBVyxHQUFXLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBU3RELHlDQUFvQyxHQUFHLENBQUMsQ0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUYsOEJBQXlCLEdBQUcsQ0FBQyxDQUFPLEVBQUUsR0FBaUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUh6RixDQUFDO0lBS0osS0FBSyxDQUFDLDZCQUE2QixDQUFDLElBQVU7UUFDNUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0UsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFVLEVBQUUsWUFBMEI7UUFDN0QsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO1FBQy9FLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuRSxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sS0FBSyxDQUFDLGdDQUFnQztRQUM1QyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUN0QixPQUFPLENBQUMsMkJBQTJCLENBQUMsRUFDcEMsT0FBTyxDQUNMLDhGQUE4RixDQUMvRixFQUNELE1BQU0sQ0FBQyxJQUFJLEVBQ1gsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUNqRSxDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNaLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMscUJBQXFCLENBQ2pDLEdBQWlCLEVBQ2pCLHdCQUFpQztRQUVqQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN6RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUVwRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLFlBQVksSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQztnQkFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUN2QixNQUFNLEtBQUssQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxZQUFZLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3JELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7K0dBN0RVLHdCQUF3QjttR0FBeEIsd0JBQXdCLDREQWZ6Qjs7Ozs7Ozs7Ozs7Ozs0QkFhZ0I7OzRGQUVmLHdCQUF3QjtrQkFqQnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7OzRCQWFnQjtpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvY3NTZXJ2aWNlLCBnZXR0ZXh0LCBNb2RhbFNlcnZpY2UsIFN0YXR1cyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UeXBlLCBJQXBwbGljYXRpb24sIFRlbmFudFNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlLCBFUlJPUl9UWVBFIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFkZC1taWNyb3NlcnZpY2UnLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwLTE2XCIgdHJhbnNsYXRlIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBzbGFIcmVmOiBzbGFIcmVmIH1cIiBuZ05vbkJpbmRhYmxlPlxuICAgICAgQnkgdXBsb2FkaW5nIGEgbWljcm9zZXJ2aWNlLCB5b3UgYWdyZWUgdG8gdGhlXG4gICAgICA8YSBocmVmPVwie3sgc2xhSHJlZiB9fVwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICA+TWljcm9zZXJ2aWNlIERlcGxveW1lbnQgU0xBPC9hXG4gICAgICA+XG4gICAgICB3aGljaCBvdXRsaW5lcyBvdXIgbWljcm9zZXJ2aWNlcyBob3N0aW5nIHRlcm1zLCBjb25kaXRpb25zLCBhbmQgcGVyZm9ybWFuY2Ugc3RhbmRhcmRzLlxuICAgIDwvZGl2PlxuICAgIDxjOHktYWRkLWFwcGxpY2F0aW9uXG4gICAgICBbaGVhZGVySWNvbl09XCInbWljcm9jaGlwJ1wiXG4gICAgICBbaGVhZGVyVGV4dF09XCJoZWFkZXJUZXh0XCJcbiAgICAgIFtzdWNjZXNzVGV4dF09XCJzdWNjZXNzVGV4dFwiXG4gICAgICBbY3JlYXRlQXBwbGljYXRpb25IYW5kbGVyXT1cImNyZWF0ZU1pY3Jvc2VydmljZUFwcGxpY2F0aW9uSGFuZGxlclwiXG4gICAgICBbdXBsb2FkQXBwbGljYXRpb25IYW5kbGVyXT1cInVwbG9hZE1pY3Jvc2VydmljZUhhbmRsZXJcIlxuICAgID48L2M4eS1hZGQtYXBwbGljYXRpb24+YFxufSlcbmV4cG9ydCBjbGFzcyBBZGRNaWNyb3NlcnZpY2VDb21wb25lbnQge1xuICByZWFkb25seSBzbGFIcmVmID0gdGhpcy5kb2NzLmdldFVzZXJHdWlkZUxpbmsoJ2RvY3MvbWljcm9zZXJ2aWNlLXNkay9taWNyb3NlcnZpY2VzLXNsYScpO1xuICBoZWFkZXJUZXh0OiBzdHJpbmcgPSBnZXR0ZXh0KCdBZGQgbWljcm9zZXJ2aWNlJyk7XG4gIHN1Y2Nlc3NUZXh0OiBzdHJpbmcgPSBnZXR0ZXh0KCdNaWNyb3NlcnZpY2UgY3JlYXRlZCcpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlOiBUZW5hbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZG9jczogRG9jc1NlcnZpY2VcbiAgKSB7fVxuXG4gIGNyZWF0ZU1pY3Jvc2VydmljZUFwcGxpY2F0aW9uSGFuZGxlciA9IChmOiBGaWxlKSA9PiB0aGlzLmNyZWF0ZU1pY3Jvc2VydmljZUFwcGxpY2F0aW9uKGYpO1xuICB1cGxvYWRNaWNyb3NlcnZpY2VIYW5kbGVyID0gKGY6IEZpbGUsIGFwcDogSUFwcGxpY2F0aW9uKSA9PiB0aGlzLnVwbG9hZE1pY3Jvc2VydmljZShmLCBhcHApO1xuXG4gIGFzeW5jIGNyZWF0ZU1pY3Jvc2VydmljZUFwcGxpY2F0aW9uKGZpbGU6IEZpbGUpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc1ZhbGlkQXBwVHlwZShmaWxlLCBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFKTtcbiAgICByZXR1cm4gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmNyZWF0ZUFwcEZvckFyY2hpdmUoZmlsZSk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRNaWNyb3NlcnZpY2UoZmlsZTogRmlsZSwgbWljcm9zZXJ2aWNlOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdWJzY3JpYmVUb0N1cnJlbnRUZW5hbnQgPSBhd2FpdCB0aGlzLmFza0lmQWN0aXZhdGlvbkFmdGVyVXBsb2FkTmVlZGVkKCk7XG4gICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwbG9hZEFyY2hpdmVUb0FwcChmaWxlLCBtaWNyb3NlcnZpY2UpO1xuICAgIGF3YWl0IHRoaXMuc3Vic2NyaWJlTWljcm9zZXJ2aWNlKG1pY3Jvc2VydmljZSwgc3Vic2NyaWJlVG9DdXJyZW50VGVuYW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXNrSWZBY3RpdmF0aW9uQWZ0ZXJVcGxvYWROZWVkZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnU3Vic2NyaWJlIHRvIG1pY3Jvc2VydmljZScpLFxuICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICdZb3UgYXJlIGFib3V0IHRvIHN1YnNjcmliZSB0byB0aGUgbWljcm9zZXJ2aWNlIGFmdGVyIHVwbG9hZC4gRG8geW91IHdhbnQgdG8gc3Vic2NyaWJlIHRvIGl0PydcbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLklORk8sXG4gICAgICAgIHsgb2s6IGdldHRleHQoJ1N1YnNjcmliZScpLCBjYW5jZWw6IGdldHRleHQoXCJEb24ndCBzdWJzY3JpYmVcIikgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdWJzY3JpYmVNaWNyb3NlcnZpY2UoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgc3Vic2NyaWJlVG9DdXJyZW50VGVuYW50OiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdGVuYW50ID0gKGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5jdXJyZW50KCkpLmRhdGE7XG4gICAgY29uc3QgYXBwbGljYXRpb25zID0gdGVuYW50LmFwcGxpY2F0aW9ucy5yZWZlcmVuY2VzO1xuXG4gICAgY29uc3QgaXNTdWJzY3JpYmVkID0gYXBwbGljYXRpb25zLnNvbWUoKHsgYXBwbGljYXRpb24gfSkgPT4gYXBwbGljYXRpb24uaWQgPT09IGFwcC5pZCk7XG4gICAgaWYgKCFpc1N1YnNjcmliZWQgJiYgc3Vic2NyaWJlVG9DdXJyZW50VGVuYW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLnN1YnNjcmliZUFwcGxpY2F0aW9uKHRlbmFudCwgYXBwKTtcbiAgICAgIH0gY2F0Y2ggKHJlcykge1xuICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDA5KSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoRVJST1JfVFlQRS5BTFJFQURZX1NVQlNDUklCRUQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1N1YnNjcmliZWQgJiYgIXN1YnNjcmliZVRvQ3VycmVudFRlbmFudCkge1xuICAgICAgcmV0dXJuIHRoaXMudGVuYW50U2VydmljZS51bnN1YnNjcmliZUFwcGxpY2F0aW9uKHRlbmFudCwgYXBwKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW1pY3Jvc2VydmljZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vbWljcm9zZXJ2aWNlcy9hZGQtbWljcm9zZXJ2aWNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFnQixhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7OztBQW1CcEYsTUFBTSxPQUFPLHdCQUF3QjtJQU9uQyxZQUNVLGdCQUFrQyxFQUNsQyxLQUFtQixFQUNuQixhQUE0QixFQUM1QixJQUFpQjtRQUhqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQVZsQixZQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FDM0MscURBQXFELENBQ3RELENBQUM7UUFDRixlQUFVLEdBQVcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakQsZ0JBQVcsR0FBVyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQVN0RCx5Q0FBb0MsR0FBRyxDQUFDLENBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFGLDhCQUF5QixHQUFHLENBQUMsQ0FBTyxFQUFFLEdBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFIekYsQ0FBQztJQUtKLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxJQUFVO1FBQzVDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9FLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBVSxFQUFFLFlBQTBCO1FBQzdELE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUMvRSxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkUsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVPLEtBQUssQ0FBQyxnQ0FBZ0M7UUFDNUMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDdEIsT0FBTyxDQUFDLDJCQUEyQixDQUFDLEVBQ3BDLE9BQU8sQ0FDTCw4RkFBOEYsQ0FDL0YsRUFDRCxNQUFNLENBQUMsSUFBSSxFQUNYLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FDakUsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDWixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLHFCQUFxQixDQUNqQyxHQUFpQixFQUNqQix3QkFBaUM7UUFFakMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFFcEQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxZQUFZLElBQUksd0JBQXdCLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDdkIsTUFBTSxLQUFLLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQzdDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksWUFBWSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNyRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDOytHQS9EVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qiw0REFmekI7Ozs7Ozs7Ozs7Ozs7NEJBYWdCOzs0RkFFZix3QkFBd0I7a0JBakJwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs0QkFhZ0I7aUJBQzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb2NzU2VydmljZSwgZ2V0dGV4dCwgTW9kYWxTZXJ2aWNlLCBTdGF0dXMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uVHlwZSwgSUFwcGxpY2F0aW9uLCBUZW5hbnRTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgRWNvc3lzdGVtU2VydmljZSwgRVJST1JfVFlQRSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hZGQtbWljcm9zZXJ2aWNlJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicC0xNlwiIHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cInsgc2xhSHJlZjogc2xhSHJlZiB9XCIgbmdOb25CaW5kYWJsZT5cbiAgICAgIEJ5IHVwbG9hZGluZyBhIG1pY3Jvc2VydmljZSwgeW91IGFncmVlIHRvIHRoZVxuICAgICAgPGEgaHJlZj1cInt7IHNsYUhyZWYgfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgPk1pY3Jvc2VydmljZSBEZXBsb3ltZW50IFNMQTwvYVxuICAgICAgPlxuICAgICAgd2hpY2ggb3V0bGluZXMgb3VyIG1pY3Jvc2VydmljZXMgaG9zdGluZyB0ZXJtcywgY29uZGl0aW9ucywgYW5kIHBlcmZvcm1hbmNlIHN0YW5kYXJkcy5cbiAgICA8L2Rpdj5cbiAgICA8Yzh5LWFkZC1hcHBsaWNhdGlvblxuICAgICAgW2hlYWRlckljb25dPVwiJ21pY3JvY2hpcCdcIlxuICAgICAgW2hlYWRlclRleHRdPVwiaGVhZGVyVGV4dFwiXG4gICAgICBbc3VjY2Vzc1RleHRdPVwic3VjY2Vzc1RleHRcIlxuICAgICAgW2NyZWF0ZUFwcGxpY2F0aW9uSGFuZGxlcl09XCJjcmVhdGVNaWNyb3NlcnZpY2VBcHBsaWNhdGlvbkhhbmRsZXJcIlxuICAgICAgW3VwbG9hZEFwcGxpY2F0aW9uSGFuZGxlcl09XCJ1cGxvYWRNaWNyb3NlcnZpY2VIYW5kbGVyXCJcbiAgICA+PC9jOHktYWRkLWFwcGxpY2F0aW9uPmBcbn0pXG5leHBvcnQgY2xhc3MgQWRkTWljcm9zZXJ2aWNlQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgc2xhSHJlZiA9IHRoaXMuZG9jcy5nZXRVc2VyR3VpZGVMaW5rKFxuICAgICdkb2NzL3NlcnZpY2UtdGVybXMvc2VydmljZS1sZXZlbC8jbWljcm9zZXJ2aWNlcy1zbGEnXG4gICk7XG4gIGhlYWRlclRleHQ6IHN0cmluZyA9IGdldHRleHQoJ0FkZCBtaWNyb3NlcnZpY2UnKTtcbiAgc3VjY2Vzc1RleHQ6IHN0cmluZyA9IGdldHRleHQoJ01pY3Jvc2VydmljZSBjcmVhdGVkJyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb2NzOiBEb2NzU2VydmljZVxuICApIHt9XG5cbiAgY3JlYXRlTWljcm9zZXJ2aWNlQXBwbGljYXRpb25IYW5kbGVyID0gKGY6IEZpbGUpID0+IHRoaXMuY3JlYXRlTWljcm9zZXJ2aWNlQXBwbGljYXRpb24oZik7XG4gIHVwbG9hZE1pY3Jvc2VydmljZUhhbmRsZXIgPSAoZjogRmlsZSwgYXBwOiBJQXBwbGljYXRpb24pID0+IHRoaXMudXBsb2FkTWljcm9zZXJ2aWNlKGYsIGFwcCk7XG5cbiAgYXN5bmMgY3JlYXRlTWljcm9zZXJ2aWNlQXBwbGljYXRpb24oZmlsZTogRmlsZSk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzVmFsaWRBcHBUeXBlKGZpbGUsIEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UpO1xuICAgIHJldHVybiB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuY3JlYXRlQXBwRm9yQXJjaGl2ZShmaWxlKTtcbiAgfVxuXG4gIGFzeW5jIHVwbG9hZE1pY3Jvc2VydmljZShmaWxlOiBGaWxlLCBtaWNyb3NlcnZpY2U6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN1YnNjcmliZVRvQ3VycmVudFRlbmFudCA9IGF3YWl0IHRoaXMuYXNrSWZBY3RpdmF0aW9uQWZ0ZXJVcGxvYWROZWVkZWQoKTtcbiAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBsb2FkQXJjaGl2ZVRvQXBwKGZpbGUsIG1pY3Jvc2VydmljZSk7XG4gICAgYXdhaXQgdGhpcy5zdWJzY3JpYmVNaWNyb3NlcnZpY2UobWljcm9zZXJ2aWNlLCBzdWJzY3JpYmVUb0N1cnJlbnRUZW5hbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhc2tJZkFjdGl2YXRpb25BZnRlclVwbG9hZE5lZWRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdTdWJzY3JpYmUgdG8gbWljcm9zZXJ2aWNlJyksXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gc3Vic2NyaWJlIHRvIHRoZSBtaWNyb3NlcnZpY2UgYWZ0ZXIgdXBsb2FkLiBEbyB5b3Ugd2FudCB0byBzdWJzY3JpYmUgdG8gaXQ/J1xuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuSU5GTyxcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnU3Vic2NyaWJlJyksIGNhbmNlbDogZ2V0dGV4dChcIkRvbid0IHN1YnNjcmliZVwiKSB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN1YnNjcmliZU1pY3Jvc2VydmljZShcbiAgICBhcHA6IElBcHBsaWNhdGlvbixcbiAgICBzdWJzY3JpYmVUb0N1cnJlbnRUZW5hbnQ6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB0ZW5hbnQgPSAoYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLmN1cnJlbnQoKSkuZGF0YTtcbiAgICBjb25zdCBhcHBsaWNhdGlvbnMgPSB0ZW5hbnQuYXBwbGljYXRpb25zLnJlZmVyZW5jZXM7XG5cbiAgICBjb25zdCBpc1N1YnNjcmliZWQgPSBhcHBsaWNhdGlvbnMuc29tZSgoeyBhcHBsaWNhdGlvbiB9KSA9PiBhcHBsaWNhdGlvbi5pZCA9PT0gYXBwLmlkKTtcbiAgICBpZiAoIWlzU3Vic2NyaWJlZCAmJiBzdWJzY3JpYmVUb0N1cnJlbnRUZW5hbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2Uuc3Vic2NyaWJlQXBwbGljYXRpb24odGVuYW50LCBhcHApO1xuICAgICAgfSBjYXRjaCAocmVzKSB7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDkpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihFUlJPUl9UWVBFLkFMUkVBRFlfU1VCU0NSSUJFRCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzU3Vic2NyaWJlZCAmJiAhc3Vic2NyaWJlVG9DdXJyZW50VGVuYW50KSB7XG4gICAgICByZXR1cm4gdGhpcy50ZW5hbnRTZXJ2aWNlLnVuc3Vic2NyaWJlQXBwbGljYXRpb24odGVuYW50LCBhcHApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -8,4 +8,4 @@ export const rolesServiceProvider = {
8
8
  useFactory: RolesServiceFactory,
9
9
  deps: ['$injector']
10
10
  };
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3VwZ3JhZGUvdXBncmFkZWQtc2VydmljZXMvcm9sZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQWdCLGVBQWU7Q0FFcEM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsUUFBUTtJQUMxQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLE9BQU8sRUFBRSxlQUFlO0lBQ3hCLFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nMVJvbGVzU2VydmljZSB7XG4gIGFic3RyYWN0IGxpc3QoKTogUHJvbWlzZTxJTWFuYWdlZE9iamVjdD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSb2xlc1NlcnZpY2VGYWN0b3J5KGluamVjdG9yKSB7XG4gIHJldHVybiBpbmplY3Rvci5nZXQoJ2M4eVJvbGVzJyk7XG59XG5cbmV4cG9ydCBjb25zdCByb2xlc1NlcnZpY2VQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTmcxUm9sZXNTZXJ2aWNlLFxuICB1c2VGYWN0b3J5OiBSb2xlc1NlcnZpY2VGYWN0b3J5LFxuICBkZXBzOiBbJyRpbmplY3RvciddXG59O1xuIl19
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3VwZ3JhZGUvdXBncmFkZWQtc2VydmljZXMvcm9sZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQWdCLGVBQWU7Q0FFcEM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsUUFBUTtJQUMxQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLE9BQU8sRUFBRSxlQUFlO0lBQ3hCLFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nMVJvbGVzU2VydmljZSB7XG4gIGFic3RyYWN0IGxpc3QoZmlsdGVyczogb2JqZWN0KTogUHJvbWlzZTxJTWFuYWdlZE9iamVjdD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSb2xlc1NlcnZpY2VGYWN0b3J5KGluamVjdG9yKSB7XG4gIHJldHVybiBpbmplY3Rvci5nZXQoJ2M4eVJvbGVzJyk7XG59XG5cbmV4cG9ydCBjb25zdCByb2xlc1NlcnZpY2VQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTmcxUm9sZXNTZXJ2aWNlLFxuICB1c2VGYWN0b3J5OiBSb2xlc1NlcnZpY2VGYWN0b3J5LFxuICBkZXBzOiBbJyRpbmplY3RvciddXG59O1xuIl19
@@ -61,7 +61,7 @@ export class RolesAssetTreeComponent {
61
61
  }
62
62
  }
63
63
  loadInventoryRoles() {
64
- this.c8yRoles.list().then(roles => {
64
+ this.c8yRoles.list({ pageSize: 1000 }).then(roles => {
65
65
  this.inventoryRoles = roles;
66
66
  });
67
67
  }
@@ -150,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
150
150
  }], onChangeItemCount: [{
151
151
  type: Output
152
152
  }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZXMtYXNzZXQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi91c2VyLXJvbGVzL3JvbGVzLWFzc2V0LXRyZWUvcm9sZXMtYXNzZXQtdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi91c2VyLXJvbGVzL3JvbGVzLWFzc2V0LXRyZWUvcm9sZXMtYXNzZXQtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsR0FBRyxJQUFJLElBQUksRUFDWCxNQUFNLEVBQ04sT0FBTyxFQUNQLE1BQU0sRUFDTixRQUFRLEVBQ1IsUUFBUSxFQUNSLEdBQUcsRUFDSCxNQUFNLEVBQ1AsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLDRCQUE0QixFQUM3QixNQUFNLCtDQUErQyxDQUFDOzs7Ozs7QUFNdkQsTUFBTSxPQUFPLHVCQUF1QjtJQXVDbEMsWUFDcUIscUJBQW1ELEVBQ25ELFFBQXlCO1FBRHpCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBOEI7UUFDbkQsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFqQ3BDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBU2pELG9CQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFD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QztRQUN4QixDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQUUsRUFBRSxlQUFlO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDN0IsZUFBZSxFQUFFLGVBQWU7WUFDaEMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSztRQUNmLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBeEpVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDJZQzFCcEMsd21HQXNGQTs7NEZENURhLHVCQUF1QjtrQkFKbkMsU0FBUzsrQkFDRSwrQkFBK0I7OzBCQTJDdEMsUUFBUTs7MEJBQ1IsUUFBUTt5Q0F4Q0YsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtcbiAgbWVyZ2VXaXRoLFxuICBtYXAgYXMgX21hcCxcbiAgZmlsdGVyLFxuICBmbGF0dGVuLFxuICB1bmlxQnksXG4gIGlkZW50aXR5LFxuICBwcm9wZXJ0eSxcbiAgZ2V0LFxuICByZWR1Y2Vcbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJSWRlbnRpZmllZCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIE5nMVJvbGVzU2VydmljZSxcbiAgTmcxVXNlckludmVudG9yeVJvbGVzU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3VwZ3JhZGUvdXBncmFkZWQtc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcm9sZXMtYXNzZXQtdHJlZS11cGdyYWRlZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yb2xlcy1hc3NldC10cmVlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBSb2xlc0Fzc2V0VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdXNlcjtcbiAgQElucHV0KCkgc2VhcmNoRmlsdGVyO1xuICBASW5wdXQoKSBhc3NpZ25lZFJvbGVzO1xuICBASW5wdXQoKSBvd25lckFzc2lnbmVkUm9sZXM7XG4gIEBJbnB1dCgpIGV4cGFuZEdyb3VwcztcbiAgQElucHV0KCkgcGFnZVNpemU7XG4gIEBJbnB1dCgpIHBhZ2luYXRpb25PZmZzZXQ7XG4gIEBPdXRwdXQoKSBvbkNoYW5nZVJvbGVzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25DaGFuZ2VJdGVtQ291bnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcm9vdEdyb3VwcztcbiAgZmxhdEFzc2V0VHJlZTtcbiAgaW52ZW50b3J5Um9sZXM7XG4gIGxvYWRpbmdBc3NldFRyZWU7XG4gIGluaGVyaXRlZFJvbGVzO1xuICBvd25lckFsbEFzc2lnbmVkUm9sZXM7XG5cbiAgbm9TdWJncm91cFRpdGxlID0gZ2V0dGV4dCgnTm8gc3ViZ3JvdXBzJyk7XG4gIG1hbnlTdWJncm91cHNUaXRsZSA9IGdldHRleHQoJ1N1Ymdyb3Vwczoge3sgY291bnQgfX0nKTtcbiAgb25lU3ViZ3JvdXBUaXRsZSA9IGdldHRleHQoJ1N1Ymdyb3VwOiAxJyk7XG4gIGNsaWNrVG9PcGVuVGl0bGUgPSBnZXR0ZXh0KCdDbGljayB0byBmZXRjaCBzdWJncm91cHMnKTtcbiAgZXhwYW5kQXJpYUxhYmVsID0gZ2V0dGV4dCgnRXhwYW5kJyk7XG4gIGNvbGxhcHNlQXJpYUxhYmVsID0gZ2V0dGV4dCgnQ29sbGFwc2UnKTtcblxuICBzZWFyY2hUZXJtU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIGZsYXRUcmVlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUlkZW50aWZpZWRbXT4oW10pO1xuXG4gIGZsYXRBc3NldFRyZWUkID0gY29tYmluZUxhdGVzdChbdGhpcy5zZWFyY2hUZXJtU3ViamVjdCwgdGhpcy5mbGF0VHJlZVN1YmplY3RdKS5waXBlKFxuICAgIG1hcCgoW3NlYXJjaFRlcm0sIGZsYXRUcmVlXSkgPT4ge1xuICAgICAgcmV0dXJuIGZsYXRUcmVlXG4gICAgICAgIC5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSkpXG4gICAgICAgIC5maWx0ZXIodGhpcy5maWx0ZXJBc3NldC5iaW5kKHRoaXMpKTtcbiAgICB9KSxcbiAgICB0YXAoZmxhdFRyZWUgPT4ge1xuICAgICAgdGhpcy5vbkNoYW5nZUl0ZW1Db3VudC5lbWl0KGZsYXRUcmVlLmxlbmd0aCk7XG4gICAgfSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgYzh5VXNlckludmVudG9yeVJvbGVzOiBOZzFVc2VySW52ZW50b3J5Um9sZXNTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBjOHlSb2xlczogTmcxUm9sZXNTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRJbnZlbnRvcnlSb2xlcygpO1xuICB9XG5cbiAgbG9hZEFzc2V0VHJlZSgpIHtcbiAgICBjb25zdCBvbmx5Um9vdHNVc2VyID0gdGhpcy51c2VyLm93bmVyO1xuICAgIHJldHVybiB0aGlzLmM4eVVzZXJJbnZlbnRvcnlSb2xlcy5saXN0Um9vdEdyb3Vwcyh7IG9ubHlSb290c1VzZXIgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgdGhpcy5yb290R3JvdXBzID0gcmVzdWx0O1xuICAgICAgdGhpcy51cGRhdGVUcmVlKCk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVUcmVlKCkge1xuICAgIHRoaXMuZmxhdEFzc2V0VHJlZSA9IHRoaXMuYzh5VXNlckludmVudG9yeVJvbGVzLmZsYXRUcmVlKHRoaXMucm9vdEdyb3Vwcyk7XG4gICAgdGhpcy5zZXRJbmhlcml0ZWRSb2xlcygpO1xuICAgIHRoaXMuZmxhdFRyZWVTdWJqZWN0Lm5leHQodGhpcy5mbGF0QXNzZXRUcmVlKTtcbiAgfVxuXG4gIGxvYWRDaGlsZHJlbihtbykge1xuICAgIGlmIChtby5pc09wZW5lZCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgICBtby5fc3ViR3JvdXBzID0gW107XG4gICAgICBtby5pc09wZW5lZCA9IGZhbHNlO1xuICAgICAgdGhpcy51cGRhdGVUcmVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYzh5VXNlckludmVudG9yeVJvbGVzLmxvYWRDaGlsZHJlbihtbykudGhlbihfID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVUcmVlKCk7XG4gICAgICB9KTtcbiAgICAgIG1vLmlzT3BlbmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBsb2FkSW52ZW50b3J5Um9sZXMoKSB7XG4gICAgdGhpcy5jOHlSb2xlcy5saXN0KCkudGhlbihyb2xlcyA9PiB7XG4gICAgICB0aGlzLmludmVudG9yeVJvbGVzID0gcm9sZXM7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICB0aGlzLnNlYXJjaFRlcm1TdWJqZWN0Lm5leHQodGhpcy5zZWFyY2hGaWx0ZXIgfHwgJycpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy51c2VyICYmICF0aGlzLmxvYWRpbmdBc3NldFRyZWUpIHtcbiAgICAgIHRoaXMubG9hZGluZ0Fzc2V0VHJlZSA9IHRoaXMubG9hZEFzc2V0VHJlZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5hc3NpZ25lZFJvbGVzIHx8IGNoYW5nZXMub3duZXJBc3NpZ25lZFJvbGVzKSB7XG4gICAgICB0aGlzLmxvYWRpbmdBc3NldFRyZWUudGhlbih0aGlzLnNldEluaGVyaXRlZFJvbGVzLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5leHBhbmRHcm91cHMgJiYgdGhpcy5leHBhbmRHcm91cHMpIHtcbiAgICAgIHRoaXMuYzh5VXNlckludmVudG9yeVJvbGVzLmV4cGFuZEFsbCh0aGlzLnJvb3RHcm91cHMsIHRoaXMudXBkYXRlVHJlZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBzZXRJbmhlcml0ZWRSb2xlcygpIHtcbiAgICBpZiAodGhpcy5hc3NpZ25lZFJvbGVzKSB7XG4gICAgICB0aGlzLmluaGVyaXRlZFJvbGVzID0gdGhpcy5nZXRJbnZlbnRvcnlJbmhlcml0ZWRSb2xlcyh0aGlzLmZsYXRBc3NldFRyZWUsIHRoaXMuYXNzaWduZWRSb2xlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm93bmVyQXNzaWduZWRSb2xlcykge1xuICAgICAgY29uc3Qgb3duZXJJbmhlcml0ZWRSb2xlcyA9IHRoaXMuZ2V0SW52ZW50b3J5SW5oZXJpdGVkUm9sZXMoXG4gICAgICAgIHRoaXMuZmxhdEFzc2V0VHJlZSxcbiAgICAgICAgdGhpcy5vd25lckFzc2lnbmVkUm9sZXNcbiAgICAgICk7XG4gICAgICB0aGlzLm93bmVyQWxsQXNzaWduZWRSb2xlcyA9IG1lcmdlV2l0aChcbiAgICAgICAgb3duZXJJbmhlcml0ZWRSb2xlcyxcbiAgICAgICAgdGhpcy5vd25lckFzc2lnbmVkUm9sZXMsXG4gICAgICAgIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoc3JjVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChvYmpWYWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW5pcUJ5KG9ialZhbHVlLmNvbmNhdChzcmNWYWx1ZS5yb2xlcyksICdpZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNyY1ZhbHVlLnJvbGVzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb2JqVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0SW52ZW50b3J5SW5oZXJpdGVkUm9sZXMoZmxhdFRyZWUsIGFzc2lnbmVkUm9sZXMpIHtcbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgZmxhdFRyZWUsXG4gICAgICAoaW5oZXJpdGVkUm9sZXMsIGFzc2V0KSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgICAgICBsZXQgY2hhaW4gPSBhc3NldC5fcGFyZW50R3JvdXBzO1xuICAgICAgICBjaGFpbiA9IF9tYXAoY2hhaW4sIGdyb3VwID0+IGdldChhc3NpZ25lZFJvbGVzLCBncm91cC5pZCkpO1xuICAgICAgICBjaGFpbiA9IGZpbHRlcihjaGFpbiwgaWRlbnRpdHkpO1xuICAgICAgICBjaGFpbiA9IF9tYXAoY2hhaW4sIHByb3BlcnR5KCdyb2xlcycpKTtcbiAgICAgICAgY2hhaW4gPSBmbGF0dGVuKGNoYWluKTtcbiAgICAgICAgY2hhaW4gPSB1bmlxQnkoY2hhaW4sICdpZCcpO1xuICAgICAgICBpbmhlcml0ZWRSb2xlc1thc3NldC5pZF0gPSBjaGFpbjtcbiAgICAgICAgcmV0dXJuIGluaGVyaXRlZFJvbGVzO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIG9uQXBwbHkoZXYsIG1hbmFnZWRPYmplY3RJZCkge1xuICAgIHJldHVybiB0aGlzLm9uQ2hhbmdlUm9sZXMuZW1pdCh7XG4gICAgICBtYW5hZ2VkT2JqZWN0SWQ6IG1hbmFnZWRPYmplY3RJZCxcbiAgICAgIHJvbGVzOiBldi5yb2xlc1xuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyQXNzZXQoYXNzZXQpIHtcbiAgICBpZiAodGhpcy5vd25lckFsbEFzc2lnbmVkUm9sZXMpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcy5vd25lckFsbEFzc2lnbmVkUm9sZXMsIFthc3NldC5pZCwgJ2xlbmd0aCddKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktbGlzdF9fZ3JvdXAgbS1iLTAgbm8tYm9yZGVyLWxhc3RcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1cIlxuICAgICpuZ0Zvcj1cIlxuICAgICAgbGV0IGFzc2V0IG9mIGZsYXRBc3NldFRyZWUkIHwgYXN5bmMgfCBzbGljZTogcGFnaW5hdGlvbk9mZnNldDpwYWdpbmF0aW9uT2Zmc2V0ICsgcGFnZVNpemVcbiAgICBcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fYmxvY2tcIlxuICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAoYXNzZXQuX3N1Ykdyb3VwcyAmJiBhc3NldC5pc09wZW5lZFxuICAgICAgICAgID8gYXNzZXQuX3N1Ykdyb3Vwcy5sZW5ndGhcbiAgICAgICAgICAgID8gYXNzZXQuX3N1Ykdyb3Vwcy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgID8gbWFueVN1Ymdyb3Vwc1RpdGxlXG4gICAgICAgICAgICAgIDogb25lU3ViZ3JvdXBUaXRsZVxuICAgICAgICAgICAgOiBub1N1Ymdyb3VwVGl0bGVcbiAgICAgICAgICA6IGNsaWNrVG9PcGVuVGl0bGVcbiAgICAgICAgKSB8IHRyYW5zbGF0ZTogeyBjb3VudDogYXNzZXQuX3N1Ykdyb3Vwcz8ubGVuZ3RoIH1cbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7ICdwYWRkaW5nLWxlZnQnOiBhc3NldC5fZGVwdGggKiA4ICsgJ3B4JyB9XCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2ljb24gbS10LTQgcC1sLTBcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIighYXNzZXQuaXNPcGVuZWQgPyBleHBhbmRBcmlhTGFiZWwgOiBjb2xsYXBzZUFyaWFMYWJlbCkgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJsb2FkQ2hpbGRyZW4oYXNzZXQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yXCJcbiAgICAgICAgICAgIGM4eUljb249XCJjOHktZ3JvdXBcIlxuICAgICAgICAgICAgKm5nSWY9XCIhYXNzZXQuaXNPcGVuZWRcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LWljb24tZHVvY29sb3JcIlxuICAgICAgICAgICAgYzh5SWNvbj1cImM4eS1ncm91cC1vcGVuXCJcbiAgICAgICAgICAgICpuZ0lmPVwiYXNzZXQuaXNPcGVuZWRcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2JvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IHAtbC0wIGNvbC14cy0xMlwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1jbGVhblwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZENoaWxkcmVuKGFzc2V0KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGN1cnNvcjogJ3BvaW50ZXInIH1cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgYXNzZXQubmFtZSB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBhc3NldC5uYW1lIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXQtOCBjb2wteHMtMTIgdmlzaWJsZS14c1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNSBwLWwtMCBjb2wteHMtMTIgcC1yLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3JvdyBmb3JtLWdyb3VwLXNtIG1heC13aWR0aC0xMDBcIj5cbiAgICAgICAgICAgICAgICA8Yzh5LWludmVudG9yeS1yb2xlLXNlbGVjdG9yLXVwZ3JhZGVkXG4gICAgICAgICAgICAgICAgICBbb3duZXJBbGxvd2VkUm9sZXNdPVwiXG4gICAgICAgICAgICAgICAgICAgIG93bmVyQWxsQXNzaWduZWRSb2xlcyA/IG93bmVyQWxsQXNzaWduZWRSb2xlc1thc3NldC5pZF0gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbaW5oZXJpdGVkUm9sZXNdPVwiaW5oZXJpdGVkUm9sZXMgPyBpbmhlcml0ZWRSb2xlc1thc3NldC5pZF0gOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgW2Fzc2lnbmVkUm9sZXNdPVwiYXNzaWduZWRSb2xlcyA/IGFzc2lnbmVkUm9sZXNbYXNzZXQuaWRdIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgIFtpbnZlbnRvcnlSb2xlc109XCJpbnZlbnRvcnlSb2xlc1wiXG4gICAgICAgICAgICAgICAgICAob25BcHBseSk9XCJvbkFwcGx5KCRldmVudCwgYXNzZXQuaWQpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgID48L2M4eS1pbnZlbnRvcnktcm9sZS1zZWxlY3Rvci11cGdyYWRlZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICBbaWNvbl09XCInc2VhcmNoJ1wiXG4gICAgW3RpdGxlXT1cIidObyBtYXRjaGluZyBncm91cCBmb3VuZCBhbW9uZyB0aGUgZXhwYW5kZWQgZ3JvdXBzLicgfCB0cmFuc2xhdGVcIlxuICAgIFtzdWJ0aXRsZV09XCInVHJ5IHRvIGV4cGFuZCBtb3JlIGdyb3VwcyBvciB0byByZWZpbmUgeW91ciBzZWFyY2ggdGVybS4nIHwgdHJhbnNsYXRlXCJcbiAgICAqbmdJZj1cInNlYXJjaEZpbHRlciAmJiAhKGZsYXRBc3NldFRyZWUkIHwgYXN5bmMpLmxlbmd0aFwiXG4gICAgW2hvcml6b250YWxdPVwiZmFsc2VcIlxuICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG48L2Rpdj5cbiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZXMtYXNzZXQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi91c2VyLXJvbGVzL3JvbGVzLWFzc2V0LXRyZWUvcm9sZXMtYXNzZXQtdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi91c2VyLXJvbGVzL3JvbGVzLWFzc2V0LXRyZWUvcm9sZXMtYXNzZXQtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsR0FBRyxJQUFJLElBQUksRUFDWCxNQUFNLEVBQ04sT0FBTyxFQUNQLE1BQU0sRUFDTixRQUFRLEVBQ1IsUUFBUSxFQUNSLEdBQUcsRUFDSCxNQUFNLEVBQ1AsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLDRCQUE0QixFQUM3QixNQUFNLCtDQUErQyxDQUFDOzs7Ozs7QUFNdkQsTUFBTSxPQUFPLHVCQUF1QjtJQXVDbEMsWUFDcUIscUJBQW1ELEVBQ25ELFFBQXlCO1FBRHpCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBOEI7UUFDbkQsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFqQ3BDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBU2pELG9CQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFD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LEtBQUssQ0FBQztZQUNqQyxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQUUsRUFBRSxlQUFlO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDN0IsZUFBZSxFQUFFLGVBQWU7WUFDaEMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSztRQUNmLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBeEpVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDJZQzFCcEMsd21HQXNGQTs7NEZENURhLHVCQUF1QjtrQkFKbkMsU0FBUzsrQkFDRSwrQkFBK0I7OzBCQTJDdEMsUUFBUTs7MEJBQ1IsUUFBUTt5Q0F4Q0YsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtcbiAgbWVyZ2VXaXRoLFxuICBtYXAgYXMgX21hcCxcbiAgZmlsdGVyLFxuICBmbGF0dGVuLFxuICB1bmlxQnksXG4gIGlkZW50aXR5LFxuICBwcm9wZXJ0eSxcbiAgZ2V0LFxuICByZWR1Y2Vcbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJSWRlbnRpZmllZCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIE5nMVJvbGVzU2VydmljZSxcbiAgTmcxVXNlckludmVudG9yeVJvbGVzU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3VwZ3JhZGUvdXBncmFkZWQtc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcm9sZXMtYXNzZXQtdHJlZS11cGdyYWRlZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9yb2xlcy1hc3NldC10cmVlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBSb2xlc0Fzc2V0VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdXNlcjtcbiAgQElucHV0KCkgc2VhcmNoRmlsdGVyO1xuICBASW5wdXQoKSBhc3NpZ25lZFJvbGVzO1xuICBASW5wdXQoKSBvd25lckFzc2lnbmVkUm9sZXM7XG4gIEBJbnB1dCgpIGV4cGFuZEdyb3VwcztcbiAgQElucHV0KCkgcGFnZVNpemU7XG4gIEBJbnB1dCgpIHBhZ2luYXRpb25PZmZzZXQ7XG4gIEBPdXRwdXQoKSBvbkNoYW5nZVJvbGVzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25DaGFuZ2VJdGVtQ291bnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcm9vdEdyb3VwcztcbiAgZmxhdEFzc2V0VHJlZTtcbiAgaW52ZW50b3J5Um9sZXM7XG4gIGxvYWRpbmdBc3NldFRyZWU7XG4gIGluaGVyaXRlZFJvbGVzO1xuICBvd25lckFsbEFzc2lnbmVkUm9sZXM7XG5cbiAgbm9TdWJncm91cFRpdGxlID0gZ2V0dGV4dCgnTm8gc3ViZ3JvdXBzJyk7XG4gIG1hbnlTdWJncm91cHNUaXRsZSA9IGdldHRleHQoJ1N1Ymdyb3Vwczoge3sgY291bnQgfX0nKTtcbiAgb25lU3ViZ3JvdXBUaXRsZSA9IGdldHRleHQoJ1N1Ymdyb3VwOiAxJyk7XG4gIGNsaWNrVG9PcGVuVGl0bGUgPSBnZXR0ZXh0KCdDbGljayB0byBmZXRjaCBzdWJncm91cHMnKTtcbiAgZXhwYW5kQXJpYUxhYmVsID0gZ2V0dGV4dCgnRXhwYW5kJyk7XG4gIGNvbGxhcHNlQXJpYUxhYmVsID0gZ2V0dGV4dCgnQ29sbGFwc2UnKTtcblxuICBzZWFyY2hUZXJtU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIGZsYXRUcmVlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUlkZW50aWZpZWRbXT4oW10pO1xuXG4gIGZsYXRBc3NldFRyZWUkID0gY29tYmluZUxhdGVzdChbdGhpcy5zZWFyY2hUZXJtU3ViamVjdCwgdGhpcy5mbGF0VHJlZVN1YmplY3RdKS5waXBlKFxuICAgIG1hcCgoW3NlYXJjaFRlcm0sIGZsYXRUcmVlXSkgPT4ge1xuICAgICAgcmV0dXJuIGZsYXRUcmVlXG4gICAgICAgIC5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSkpXG4gICAgICAgIC5maWx0ZXIodGhpcy5maWx0ZXJBc3NldC5iaW5kKHRoaXMpKTtcbiAgICB9KSxcbiAgICB0YXAoZmxhdFRyZWUgPT4ge1xuICAgICAgdGhpcy5vbkNoYW5nZUl0ZW1Db3VudC5lbWl0KGZsYXRUcmVlLmxlbmd0aCk7XG4gICAgfSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgYzh5VXNlckludmVudG9yeVJvbGVzOiBOZzFVc2VySW52ZW50b3J5Um9sZXNTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBjOHlSb2xlczogTmcxUm9sZXNTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRJbnZlbnRvcnlSb2xlcygpO1xuICB9XG5cbiAgbG9hZEFzc2V0VHJlZSgpIHtcbiAgICBjb25zdCBvbmx5Um9vdHNVc2VyID0gdGhpcy51c2VyLm93bmVyO1xuICAgIHJldHVybiB0aGlzLmM4eVVzZXJJbnZlbnRvcnlSb2xlcy5saXN0Um9vdEdyb3Vwcyh7IG9ubHlSb290c1VzZXIgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgdGhpcy5yb290R3JvdXBzID0gcmVzdWx0O1xuICAgICAgdGhpcy51cGRhdGVUcmVlKCk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVUcmVlKCkge1xuICAgIHRoaXMuZmxhdEFzc2V0VHJlZSA9IHRoaXMuYzh5VXNlckludmVudG9yeVJvbGVzLmZsYXRUcmVlKHRoaXMucm9vdEdyb3Vwcyk7XG4gICAgdGhpcy5zZXRJbmhlcml0ZWRSb2xlcygpO1xuICAgIHRoaXMuZmxhdFRyZWVTdWJqZWN0Lm5leHQodGhpcy5mbGF0QXNzZXRUcmVlKTtcbiAgfVxuXG4gIGxvYWRDaGlsZHJlbihtbykge1xuICAgIGlmIChtby5pc09wZW5lZCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgICBtby5fc3ViR3JvdXBzID0gW107XG4gICAgICBtby5pc09wZW5lZCA9IGZhbHNlO1xuICAgICAgdGhpcy51cGRhdGVUcmVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYzh5VXNlckludmVudG9yeVJvbGVzLmxvYWRDaGlsZHJlbihtbykudGhlbihfID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVUcmVlKCk7XG4gICAgICB9KTtcbiAgICAgIG1vLmlzT3BlbmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBsb2FkSW52ZW50b3J5Um9sZXMoKSB7XG4gICAgdGhpcy5jOHlSb2xlcy5saXN0KHsgcGFnZVNpemU6IDEwMDAgfSkudGhlbihyb2xlcyA9PiB7XG4gICAgICB0aGlzLmludmVudG9yeVJvbGVzID0gcm9sZXM7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICB0aGlzLnNlYXJjaFRlcm1TdWJqZWN0Lm5leHQodGhpcy5zZWFyY2hGaWx0ZXIgfHwgJycpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy51c2VyICYmICF0aGlzLmxvYWRpbmdBc3NldFRyZWUpIHtcbiAgICAgIHRoaXMubG9hZGluZ0Fzc2V0VHJlZSA9IHRoaXMubG9hZEFzc2V0VHJlZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5hc3NpZ25lZFJvbGVzIHx8IGNoYW5nZXMub3duZXJBc3NpZ25lZFJvbGVzKSB7XG4gICAgICB0aGlzLmxvYWRpbmdBc3NldFRyZWUudGhlbih0aGlzLnNldEluaGVyaXRlZFJvbGVzLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5leHBhbmRHcm91cHMgJiYgdGhpcy5leHBhbmRHcm91cHMpIHtcbiAgICAgIHRoaXMuYzh5VXNlckludmVudG9yeVJvbGVzLmV4cGFuZEFsbCh0aGlzLnJvb3RHcm91cHMsIHRoaXMudXBkYXRlVHJlZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBzZXRJbmhlcml0ZWRSb2xlcygpIHtcbiAgICBpZiAodGhpcy5hc3NpZ25lZFJvbGVzKSB7XG4gICAgICB0aGlzLmluaGVyaXRlZFJvbGVzID0gdGhpcy5nZXRJbnZlbnRvcnlJbmhlcml0ZWRSb2xlcyh0aGlzLmZsYXRBc3NldFRyZWUsIHRoaXMuYXNzaWduZWRSb2xlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLm93bmVyQXNzaWduZWRSb2xlcykge1xuICAgICAgY29uc3Qgb3duZXJJbmhlcml0ZWRSb2xlcyA9IHRoaXMuZ2V0SW52ZW50b3J5SW5oZXJpdGVkUm9sZXMoXG4gICAgICAgIHRoaXMuZmxhdEFzc2V0VHJlZSxcbiAgICAgICAgdGhpcy5vd25lckFzc2lnbmVkUm9sZXNcbiAgICAgICk7XG4gICAgICB0aGlzLm93bmVyQWxsQXNzaWduZWRSb2xlcyA9IG1lcmdlV2l0aChcbiAgICAgICAgb3duZXJJbmhlcml0ZWRSb2xlcyxcbiAgICAgICAgdGhpcy5vd25lckFzc2lnbmVkUm9sZXMsXG4gICAgICAgIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoc3JjVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChvYmpWYWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW5pcUJ5KG9ialZhbHVlLmNvbmNhdChzcmNWYWx1ZS5yb2xlcyksICdpZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNyY1ZhbHVlLnJvbGVzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb2JqVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0SW52ZW50b3J5SW5oZXJpdGVkUm9sZXMoZmxhdFRyZWUsIGFzc2lnbmVkUm9sZXMpIHtcbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgZmxhdFRyZWUsXG4gICAgICAoaW5oZXJpdGVkUm9sZXMsIGFzc2V0KSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgICAgICBsZXQgY2hhaW4gPSBhc3NldC5fcGFyZW50R3JvdXBzO1xuICAgICAgICBjaGFpbiA9IF9tYXAoY2hhaW4sIGdyb3VwID0+IGdldChhc3NpZ25lZFJvbGVzLCBncm91cC5pZCkpO1xuICAgICAgICBjaGFpbiA9IGZpbHRlcihjaGFpbiwgaWRlbnRpdHkpO1xuICAgICAgICBjaGFpbiA9IF9tYXAoY2hhaW4sIHByb3BlcnR5KCdyb2xlcycpKTtcbiAgICAgICAgY2hhaW4gPSBmbGF0dGVuKGNoYWluKTtcbiAgICAgICAgY2hhaW4gPSB1bmlxQnkoY2hhaW4sICdpZCcpO1xuICAgICAgICBpbmhlcml0ZWRSb2xlc1thc3NldC5pZF0gPSBjaGFpbjtcbiAgICAgICAgcmV0dXJuIGluaGVyaXRlZFJvbGVzO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIG9uQXBwbHkoZXYsIG1hbmFnZWRPYmplY3RJZCkge1xuICAgIHJldHVybiB0aGlzLm9uQ2hhbmdlUm9sZXMuZW1pdCh7XG4gICAgICBtYW5hZ2VkT2JqZWN0SWQ6IG1hbmFnZWRPYmplY3RJZCxcbiAgICAgIHJvbGVzOiBldi5yb2xlc1xuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyQXNzZXQoYXNzZXQpIHtcbiAgICBpZiAodGhpcy5vd25lckFsbEFzc2lnbmVkUm9sZXMpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcy5vd25lckFsbEFzc2lnbmVkUm9sZXMsIFthc3NldC5pZCwgJ2xlbmd0aCddKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjOHktbGlzdF9fZ3JvdXAgbS1iLTAgbm8tYm9yZGVyLWxhc3RcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1cIlxuICAgICpuZ0Zvcj1cIlxuICAgICAgbGV0IGFzc2V0IG9mIGZsYXRBc3NldFRyZWUkIHwgYXN5bmMgfCBzbGljZTogcGFnaW5hdGlvbk9mZnNldDpwYWdpbmF0aW9uT2Zmc2V0ICsgcGFnZVNpemVcbiAgICBcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fYmxvY2tcIlxuICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAoYXNzZXQuX3N1Ykdyb3VwcyAmJiBhc3NldC5pc09wZW5lZFxuICAgICAgICAgID8gYXNzZXQuX3N1Ykdyb3Vwcy5sZW5ndGhcbiAgICAgICAgICAgID8gYXNzZXQuX3N1Ykdyb3Vwcy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgID8gbWFueVN1Ymdyb3Vwc1RpdGxlXG4gICAgICAgICAgICAgIDogb25lU3ViZ3JvdXBUaXRsZVxuICAgICAgICAgICAgOiBub1N1Ymdyb3VwVGl0bGVcbiAgICAgICAgICA6IGNsaWNrVG9PcGVuVGl0bGVcbiAgICAgICAgKSB8IHRyYW5zbGF0ZTogeyBjb3VudDogYXNzZXQuX3N1Ykdyb3Vwcz8ubGVuZ3RoIH1cbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7ICdwYWRkaW5nLWxlZnQnOiBhc3NldC5fZGVwdGggKiA4ICsgJ3B4JyB9XCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2ljb24gbS10LTQgcC1sLTBcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIighYXNzZXQuaXNPcGVuZWQgPyBleHBhbmRBcmlhTGFiZWwgOiBjb2xsYXBzZUFyaWFMYWJlbCkgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJsb2FkQ2hpbGRyZW4oYXNzZXQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yXCJcbiAgICAgICAgICAgIGM4eUljb249XCJjOHktZ3JvdXBcIlxuICAgICAgICAgICAgKm5nSWY9XCIhYXNzZXQuaXNPcGVuZWRcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LWljb24tZHVvY29sb3JcIlxuICAgICAgICAgICAgYzh5SWNvbj1cImM4eS1ncm91cC1vcGVuXCJcbiAgICAgICAgICAgICpuZ0lmPVwiYXNzZXQuaXNPcGVuZWRcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2JvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IHAtbC0wIGNvbC14cy0xMlwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1jbGVhblwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZENoaWxkcmVuKGFzc2V0KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGN1cnNvcjogJ3BvaW50ZXInIH1cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgYXNzZXQubmFtZSB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBhc3NldC5uYW1lIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXQtOCBjb2wteHMtMTIgdmlzaWJsZS14c1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNSBwLWwtMCBjb2wteHMtMTIgcC1yLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3JvdyBmb3JtLWdyb3VwLXNtIG1heC13aWR0aC0xMDBcIj5cbiAgICAgICAgICAgICAgICA8Yzh5LWludmVudG9yeS1yb2xlLXNlbGVjdG9yLXVwZ3JhZGVkXG4gICAgICAgICAgICAgICAgICBbb3duZXJBbGxvd2VkUm9sZXNdPVwiXG4gICAgICAgICAgICAgICAgICAgIG93bmVyQWxsQXNzaWduZWRSb2xlcyA/IG93bmVyQWxsQXNzaWduZWRSb2xlc1thc3NldC5pZF0gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbaW5oZXJpdGVkUm9sZXNdPVwiaW5oZXJpdGVkUm9sZXMgPyBpbmhlcml0ZWRSb2xlc1thc3NldC5pZF0gOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgW2Fzc2lnbmVkUm9sZXNdPVwiYXNzaWduZWRSb2xlcyA/IGFzc2lnbmVkUm9sZXNbYXNzZXQuaWRdIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgIFtpbnZlbnRvcnlSb2xlc109XCJpbnZlbnRvcnlSb2xlc1wiXG4gICAgICAgICAgICAgICAgICAob25BcHBseSk9XCJvbkFwcGx5KCRldmVudCwgYXNzZXQuaWQpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgID48L2M4eS1pbnZlbnRvcnktcm9sZS1zZWxlY3Rvci11cGdyYWRlZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICBbaWNvbl09XCInc2VhcmNoJ1wiXG4gICAgW3RpdGxlXT1cIidObyBtYXRjaGluZyBncm91cCBmb3VuZCBhbW9uZyB0aGUgZXhwYW5kZWQgZ3JvdXBzLicgfCB0cmFuc2xhdGVcIlxuICAgIFtzdWJ0aXRsZV09XCInVHJ5IHRvIGV4cGFuZCBtb3JlIGdyb3VwcyBvciB0byByZWZpbmUgeW91ciBzZWFyY2ggdGVybS4nIHwgdHJhbnNsYXRlXCJcbiAgICAqbmdJZj1cInNlYXJjaEZpbHRlciAmJiAhKGZsYXRBc3NldFRyZWUkIHwgYXN5bmMpLmxlbmd0aFwiXG4gICAgW2hvcml6b250YWxdPVwiZmFsc2VcIlxuICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG48L2Rpdj5cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, Component, inject, InjectionToken, EventEmitter, Input, Output, forwardRef, Optional, Inject, ViewChild, HostBinding, HostListener, TemplateRef, NgModule } from '@angular/core';
3
3
  import * as i2 from '@c8y/ngx-components';
4
- import { gettext, Permissions, ContextRouteService, ViewContext, Status, NavigatorNode, getActivatedRoute, NEW_DASHBOARD_QUERY_PARAM, SupportedApps, memoize, DashboardChildChange, CopyDashboardDisabledReason, WidgetsDashboardComponent, hookRoute, CoreModule, hookTab, HookProviderTypes, hookActionBar, hookNavigator, BaseColumn, getBasicInputArrayFormFieldConfig, DataGridService, alertOnError, BuiltInActionType, ModalModule } from '@c8y/ngx-components';
4
+ import { gettext, Permissions, ContextRouteService, ViewContext, Status, NavigatorNode, getActivatedRoute, NEW_DASHBOARD_ROUTER_STATE_PROP, SupportedApps, memoize, DashboardChildChange, CopyDashboardDisabledReason, WidgetsDashboardComponent, hookRoute, CoreModule, hookTab, HookProviderTypes, hookActionBar, hookNavigator, BaseColumn, getBasicInputArrayFormFieldConfig, DataGridService, alertOnError, BuiltInActionType, ModalModule } from '@c8y/ngx-components';
5
5
  import * as i1 from '@angular/router';
6
6
  import { of, Subject, from, combineLatest, iif, timer } from 'rxjs';
7
7
  import * as i4 from '@angular/common';
@@ -561,24 +561,30 @@ class ContextDashboardService {
561
561
  this.navigator.add(nodeToAdd);
562
562
  }
563
563
  }
564
- async navigateToDashboard(dashboardMO) {
564
+ async navigateToDashboard(dashboardMO, isNewDashboard = false) {
565
565
  if (/dashboard/.test(this.router.url)) {
566
566
  this.router.navigate(['..', dashboardMO.id], {
567
567
  relativeTo: getActivatedRoute(this.router),
568
- queryParams: {
569
- [NEW_DASHBOARD_QUERY_PARAM]: true
570
- }
568
+ ...(isNewDashboard && {
569
+ state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }
570
+ })
571
571
  });
572
572
  }
573
573
  else if (/^\/(device|group)\/[0-9]+$/.test(this.router.url)) {
574
574
  // in case the add dashboard button is the only tab on that route
575
575
  this.router.navigate(['.', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {
576
- relativeTo: getActivatedRoute(this.router)
576
+ relativeTo: getActivatedRoute(this.router),
577
+ ...(isNewDashboard && {
578
+ state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }
579
+ })
577
580
  });
578
581
  }
579
582
  else {
580
583
  this.router.navigate(['..', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {
581
- relativeTo: getActivatedRoute(this.router)
584
+ relativeTo: getActivatedRoute(this.router),
585
+ ...(isNewDashboard && {
586
+ state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }
587
+ })
582
588
  });
583
589
  }
584
590
  }
@@ -1849,7 +1855,7 @@ class DashboardDetailComponent {
1849
1855
  const mo = await this.contextDashboardService.create(this.dashboard, this.currentContext);
1850
1856
  await this.onCreateGSEvent(mo);
1851
1857
  this.cleanupAfterDetailsClose();
1852
- await this.contextDashboardService.navigateToDashboard(mo);
1858
+ await this.contextDashboardService.navigateToDashboard(mo, true);
1853
1859
  }
1854
1860
  async onCreateGSEvent(mo) {
1855
1861
  const parentName = await this.convertStringToHash(this.context?.name);
@@ -2622,10 +2628,6 @@ class ContextDashboardComponent {
2622
2628
  if (this.dataSub) {
2623
2629
  this.dataSub.unsubscribe();
2624
2630
  }
2625
- const isNewDashboard = this.route.snapshot.queryParams[NEW_DASHBOARD_QUERY_PARAM];
2626
- if (isNewDashboard) {
2627
- this.router.navigate([], { queryParams: null });
2628
- }
2629
2631
  }
2630
2632
  /**
2631
2633
  * Guards component from unintended navigation away or closing tab without saving changes.