UNPKG

@netgrif/components

Version:

Netgrif Application Engine frontend Angular components

40 lines 48 kB
import { Component } from '@angular/core'; import { AbstractLdapGroupRoleAssignmentComponent, RoleAssignmentLdapGroupService, } from '@netgrif/components-core'; import * as i0 from "@angular/core"; import * as i1 from "@netgrif/components-core"; import * as i2 from "@angular/common"; import * as i3 from "@ngbracket/ngx-layout"; import * as i4 from "@ngbracket/ngx-layout/extended"; import * as i5 from "@angular/material/button"; import * as i6 from "@angular/material/divider"; import * as i7 from "@angular/material/expansion"; import * as i8 from "@angular/material/core"; import * as i9 from "@angular/material/icon"; import * as i10 from "@angular/material/input"; import * as i11 from "@angular/material/form-field"; import * as i12 from "@angular/material/list"; import * as i13 from "@angular/material/progress-bar"; import * as i14 from "@angular/material/progress-spinner"; import * as i15 from "@angular/material/toolbar"; import * as i16 from "@angular/material/tooltip"; import * as i17 from "@angular/cdk/scrolling"; import * as i18 from "@angular/forms"; import * as i19 from "@ngx-translate/core"; export class LdapGroupRoleAssignmentComponent extends AbstractLdapGroupRoleAssignmentComponent { _service; constructor(_service) { super(_service); this._service = _service; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LdapGroupRoleAssignmentComponent, deps: [{ token: i1.RoleAssignmentLdapGroupService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LdapGroupRoleAssignmentComponent, selector: "nc-ldap-group-role-assignment", providers: [ RoleAssignmentLdapGroupService ], usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"row\" fxLayout.lt-sm=\"column\" fxLayoutAlign=\"start center\" class=\"full-height full-width padding-default\">\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxFlex=\"49\" class=\"role-height\">\n <ng-container *ngIf=\"ldapGroup.ldapGroups$ | async as ldapGroups_\">\n\n <mat-toolbar color=\"primary\" class=\"min-height-radius\">\n <span matTooltip=\"{{ldapGroups_.length}}/{{ldapGroup.totalLdapGroups}}\">\n {{'admin.ldapGroup-list.count' | translate }}: {{ldapGroups_.length}}\n </span>\n <div fxFlex=\"5\"></div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"netgrif-input netgrif-input-search-fix netgrif-input-primary-search-fix\">\n <mat-form-field fxFlex=\"100\" class=\"ldapGroup-assign-search\" color=\"primary\" appearance=\"outline\">\n <mat-icon matPrefix class=\"prefix-icon\">search</mat-icon>\n <input matInput [formControl]=\"searchLdapGroupControl\" placeholder=\"{{ 'side-menu.ldapGroup.choose' | translate }}\">\n <button color=\"warn\" *ngIf=\"searchLdapGroupControl.value\" matSuffix mat-icon-button\n (click)=\"searchLdapGroupControl.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <span style=\"flex: 1 1 auto;\"></span>\n <button mat-icon-button matTooltip=\"{{ 'side-menu.tooltip.SelectAll' | translate }}\" (click)=\"selectAllLdapGroup(true)\">\n <mat-icon>done_all</mat-icon>\n </button>\n <button mat-icon-button matTooltip=\"{{ 'side-menu.tooltip.DeselectAll' | translate }}\" (click)=\"selectAllLdapGroup(false)\">\n <mat-icon>clear</mat-icon>\n </button>\n </mat-toolbar>\n\n <div *ngIf=\"(ldapGroup.loading$ | async) === false && ldapGroups_.length === 0\" fxLayout=\"column\"\n fxLayoutAlign=\"center center\" fxFlex class=\"margin-top-x2\">\n <mat-icon color=\"accent\" class=\"margin-bottom-default no-ldapGroup-icon\">perm_identity</mat-icon>\n <span class=\"font-size-20\">{{ 'admin.ldapGroup-list.noLdapGroupsWereFound' | translate}}</span>\n </div>\n\n <mat-selection-list #ldapGroupList color=\"primary\" fxFlex=\"100\" class=\"full-width advanced-option-list\">\n\n <cdk-virtual-scroll-viewport itemSize=\"48\" (scrolledIndexChange)=\"loadNextLdapGroupPage()\"\n class=\"full-width full-height\">\n <mat-list-option class=\"min-height-option\" *cdkVirtualFor=\"let ldapGroup of ldapGroups_; let i = index;\" checkboxPosition=\"before\"\n [selected]=\"ldapGroup.selected\"\n [value]=\"ldapGroup\"\n [ngClass]=\"{'list-item-selected':ldapGroup.selected}\"\n (click)=\"ldapGroup.toggle();autoSelectRoles()\" fxLayoutAlign=\"start center\" fxLayout=\"row\">\n <h3 matLine class=\"primary-color-line margin-none\">{{ldapGroup.cn}}</h3>\n <p *ngIf=\"ldapGroup.description !== undefined\" matLine class=\"paragraph-fix margin-none\">DN: {{ldapGroup.dn}}, Description: {{ldapGroup.description}}</p>\n <p *ngIf=\"ldapGroup.description === undefined\" matLine class=\"paragraph-fix margin-none\">DN: {{ldapGroup.dn}}</p>\n </mat-list-option>\n\n <div *ngIf=\"ldapGroup.loading$ | async\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\n <mat-spinner color=\"primary\" diameter=\"50\"></mat-spinner>\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n </mat-selection-list>\n </ng-container>\n </div>\n\n <div fxFlex=\"2\"></div>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxFlex=\"49\" class=\"role-height\">\n\n <mat-toolbar color=\"primary\" class=\"min-height-radius\">\n <span>{{'admin.process-list.listTitle' | translate}}</span>\n <div fxFlex=\"5\"></div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"netgrif-input netgrif-input-search-fix\">\n <mat-form-field fxFlex=\"100\" class=\"ldapGroup-assign-search\" color=\"primary\" appearance=\"outline\">\n <mat-icon matPrefix class=\"prefix-icon\">search</mat-icon>\n <mat-label>{{ 'side-menu.import-net.search' | translate }}</mat-label>\n <input matInput [formControl]=\"searchNetControl\">\n <button *ngIf=\"searchNetControl.value\" matSuffix mat-icon-button\n (click)=\"searchNetControl.setValue('')\" color=\"warn\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <span style=\"flex: 1 1 auto;\"></span>\n <mat-spinner *ngIf=\"ldapGroup.updating$ | async\" color=\"accent\" diameter=\"30\"></mat-spinner>\n </mat-toolbar>\n\n <div *ngIf=\"(ldapGroup.loading$ | async) === false && nets.processes.length === 0\" fxLayout=\"column\"\n fxLayoutAlign=\"center center\" fxFlex class=\"margin-top-x2\">\n <mat-icon color=\"accent\" class=\"margin-bottom-default no-ldapGroup-icon\">timeline</mat-icon>\n <span class=\"font-size-20\">{{ 'admin.process-list.noProcessesWereFound' | translate}}</span>\n </div>\n\n <mat-accordion class=\"full-width margin-top-default process-list-accordion\" multi fxFlex>\n\n <mat-expansion-panel *ngFor=\"let item of filteredProcesses; let last = last;\" (afterExpand)=\"nets.loadProcessItemRoles(item)\"\n (afterCollapse)=\"nets.prepareToTryAgainToLoadRoles(item)\" class=\"panel-body\" [ngClass]=\"{'panel-last':last}\">\n\n <mat-expansion-panel-header class=\"role-header panel-color\">\n <mat-panel-title>\n <mat-icon *ngIf=\"item.someRolesSelected\" color=\"accent\" class=\"margin-right-x2\">tour</mat-icon>\n <span>{{item.initials}} - {{item.title}}</span>\n </mat-panel-title>\n <mat-panel-description class=\"process-item-description\">\n <span\n class=\"process-item-description full-width\">{{'admin.process-list.newestVersion' | translate}}\n : {{item.newestVersion}}</span>\n </mat-panel-description>\n </mat-expansion-panel-header>\n\n <div *ngIf=\"item.loading\" fxFlex=\"100\" class=\"full-width\">\n <mat-progress-bar mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n </div>\n\n <div *ngIf=\"!item.loading && item.emptyRoles\" fxLayout=\"column\"\n fxLayoutAlign=\"center center\" fxFlex class=\"full-width full-height net-panel-content\">\n <mat-icon color=\"accent\" class=\"margin-bottom-default\">account_circle</mat-icon>\n <span class=\"font-size-15\">{{ 'admin.process-list.noRoles' | translate}}</span>\n </div>\n\n <div *ngIf=\"!item.loading && !item.emptyRoles\" fxLayout=\"column\" fxLayoutAlign=\"start start\"\n class=\"full-height full-width net-panel-content\">\n <div *ngFor=\"let net of item.processes; let first = first\" fxLayout=\"column\"\n fxLayoutAlign=\"start center\" class=\"full-width\">\n <mat-divider *ngIf=\"!first\" style=\"position: relative\"></mat-divider>\n\n <div class=\"full-width\">\n <div fxFlex fxLayoutAlign=\"start center\">\n <h3 class=\"margin-none\" *ngIf=\"first\">{{ 'admin.process-list.roles' | translate}}</h3>\n </div>\n <div fxFlex fxLayoutAlign=\"center center\">\n <button mat-stroked-button matTooltip=\"{{item.someRolesSelected ? 'Deselect All' : 'Select All'}}\"\n (click)=\"toggleAllRoles(net, !item.someRolesSelected)\">\n {{net.version}}\n </button>\n </div>\n <div fxFlex></div>\n </div>\n\n <mat-selection-list color=\"accent\" fxLayout=\"row wrap\" fxLayoutAlign=\"start center\"\n class=\"full-width\">\n <mat-list-option *ngFor=\"let role of net.roles\" checkboxPosition=\"before\"\n [selected]=\"role.selected\" (click)=\"role.toggle();update(role)\"\n fxFlex=\"50\">\n <h3 matLine class=\"margin-none\">{{role.name}}</h3>\n </mat-list-option>\n </mat-selection-list>\n </div>\n </div>\n\n </mat-expansion-panel>\n\n </mat-accordion>\n\n <div *ngIf=\"nets.loading$ | async\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex=\"100\">\n <mat-spinner color=\"primary\" diameter=\"65\"></mat-spinner>\n </div>\n </div>\n</div>\n", styles: [".full-height{height:100%;min-height:100%}.full-width{width:100%;min-width:100%}.padding-default{padding:8px}.padding-half{padding:4px}.padding-x2{padding:16px}.margin-default{margin:8px}.margin-half{margin:4px}.margin-x2{margin:16px}.margin-top-default{margin-top:8px}.margin-top-half{margin-top:4px}.margin-top-x2{margin-top:16px}.margin-bottom-default{margin-bottom:8px}.margin-bottom-half{margin-bottom:4px}.margin-bottom-x2{margin-bottom:16px}.margin-left-default{margin-left:8px}.margin-left-half{margin-left:4px}.margin-left-x2{margin-left:16px}.margin-right-default{margin-right:8px}.margin-right-half{margin-right:4px}.margin-right-x2{margin-right:16px}.user-list-item-margin{margin:4px 0}.net-panel-content{padding-left:24px;padding-right:24px;padding-bottom:24px}.font-size-20{font-size:20px}.font-size-15{font-size:15px}.no-user-icon{font-size:40px;width:40px;height:40px}.process-item-description{text-align:right}.process-list-accordion{overflow-y:auto;padding:0 2px 4px}.process-list-accordion .mat-mdc-expansion-panel-spacing{margin:8px 0}.ldapGroup-assign-search{width:100%;color:#64748b;min-width:250px;border-radius:6px}.search-icon{margin-right:10px}.min-height-radius{min-height:64px;border-radius:8px}.prefix-icon{font-size:22px}.paragraph-fix{word-break:break-all;white-space:pre-wrap!important}.min-height-option{height:auto!important;min-height:48px;padding:3px 0!important}.role-header{min-height:48px!important;height:auto!important}.panel-last{padding-bottom:16px}.margin-none{margin-top:0!important;margin-bottom:0!important}.role-height{height:100%;min-height:100%}@media only screen and (max-width: 599.99px){.role-height{height:50%;min-height:50%;width:100%}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i4.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i7.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i7.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i7.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i7.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i7.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "directive", type: i8.MatLine, selector: "[mat-line], [matLine]" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "directive", type: i11.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i11.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i12.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i12.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i14.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i15.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i17.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i17.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i17.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i18.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i18.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i18.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i19.TranslatePipe, name: "translate" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LdapGroupRoleAssignmentComponent, decorators: [{ type: Component, args: [{ selector: 'nc-ldap-group-role-assignment', providers: [ RoleAssignmentLdapGroupService ], template: "<div fxLayout=\"row\" fxLayout.lt-sm=\"column\" fxLayoutAlign=\"start center\" class=\"full-height full-width padding-default\">\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxFlex=\"49\" class=\"role-height\">\n <ng-container *ngIf=\"ldapGroup.ldapGroups$ | async as ldapGroups_\">\n\n <mat-toolbar color=\"primary\" class=\"min-height-radius\">\n <span matTooltip=\"{{ldapGroups_.length}}/{{ldapGroup.totalLdapGroups}}\">\n {{'admin.ldapGroup-list.count' | translate }}: {{ldapGroups_.length}}\n </span>\n <div fxFlex=\"5\"></div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"netgrif-input netgrif-input-search-fix netgrif-input-primary-search-fix\">\n <mat-form-field fxFlex=\"100\" class=\"ldapGroup-assign-search\" color=\"primary\" appearance=\"outline\">\n <mat-icon matPrefix class=\"prefix-icon\">search</mat-icon>\n <input matInput [formControl]=\"searchLdapGroupControl\" placeholder=\"{{ 'side-menu.ldapGroup.choose' | translate }}\">\n <button color=\"warn\" *ngIf=\"searchLdapGroupControl.value\" matSuffix mat-icon-button\n (click)=\"searchLdapGroupControl.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <span style=\"flex: 1 1 auto;\"></span>\n <button mat-icon-button matTooltip=\"{{ 'side-menu.tooltip.SelectAll' | translate }}\" (click)=\"selectAllLdapGroup(true)\">\n <mat-icon>done_all</mat-icon>\n </button>\n <button mat-icon-button matTooltip=\"{{ 'side-menu.tooltip.DeselectAll' | translate }}\" (click)=\"selectAllLdapGroup(false)\">\n <mat-icon>clear</mat-icon>\n </button>\n </mat-toolbar>\n\n <div *ngIf=\"(ldapGroup.loading$ | async) === false && ldapGroups_.length === 0\" fxLayout=\"column\"\n fxLayoutAlign=\"center center\" fxFlex class=\"margin-top-x2\">\n <mat-icon color=\"accent\" class=\"margin-bottom-default no-ldapGroup-icon\">perm_identity</mat-icon>\n <span class=\"font-size-20\">{{ 'admin.ldapGroup-list.noLdapGroupsWereFound' | translate}}</span>\n </div>\n\n <mat-selection-list #ldapGroupList color=\"primary\" fxFlex=\"100\" class=\"full-width advanced-option-list\">\n\n <cdk-virtual-scroll-viewport itemSize=\"48\" (scrolledIndexChange)=\"loadNextLdapGroupPage()\"\n class=\"full-width full-height\">\n <mat-list-option class=\"min-height-option\" *cdkVirtualFor=\"let ldapGroup of ldapGroups_; let i = index;\" checkboxPosition=\"before\"\n [selected]=\"ldapGroup.selected\"\n [value]=\"ldapGroup\"\n [ngClass]=\"{'list-item-selected':ldapGroup.selected}\"\n (click)=\"ldapGroup.toggle();autoSelectRoles()\" fxLayoutAlign=\"start center\" fxLayout=\"row\">\n <h3 matLine class=\"primary-color-line margin-none\">{{ldapGroup.cn}}</h3>\n <p *ngIf=\"ldapGroup.description !== undefined\" matLine class=\"paragraph-fix margin-none\">DN: {{ldapGroup.dn}}, Description: {{ldapGroup.description}}</p>\n <p *ngIf=\"ldapGroup.description === undefined\" matLine class=\"paragraph-fix margin-none\">DN: {{ldapGroup.dn}}</p>\n </mat-list-option>\n\n <div *ngIf=\"ldapGroup.loading$ | async\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\n <mat-spinner color=\"primary\" diameter=\"50\"></mat-spinner>\n </div>\n\n </cdk-virtual-scroll-viewport>\n\n </mat-selection-list>\n </ng-container>\n </div>\n\n <div fxFlex=\"2\"></div>\n\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\" fxFlex=\"49\" class=\"role-height\">\n\n <mat-toolbar color=\"primary\" class=\"min-height-radius\">\n <span>{{'admin.process-list.listTitle' | translate}}</span>\n <div fxFlex=\"5\"></div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"netgrif-input netgrif-input-search-fix\">\n <mat-form-field fxFlex=\"100\" class=\"ldapGroup-assign-search\" color=\"primary\" appearance=\"outline\">\n <mat-icon matPrefix class=\"prefix-icon\">search</mat-icon>\n <mat-label>{{ 'side-menu.import-net.search' | translate }}</mat-label>\n <input matInput [formControl]=\"searchNetControl\">\n <button *ngIf=\"searchNetControl.value\" matSuffix mat-icon-button\n (click)=\"searchNetControl.setValue('')\" color=\"warn\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <span style=\"flex: 1 1 auto;\"></span>\n <mat-spinner *ngIf=\"ldapGroup.updating$ | async\" color=\"accent\" diameter=\"30\"></mat-spinner>\n </mat-toolbar>\n\n <div *ngIf=\"(ldapGroup.loading$ | async) === false && nets.processes.length === 0\" fxLayout=\"column\"\n fxLayoutAlign=\"center center\" fxFlex class=\"margin-top-x2\">\n <mat-icon color=\"accent\" class=\"margin-bottom-default no-ldapGroup-icon\">timeline</mat-icon>\n <span class=\"font-size-20\">{{ 'admin.process-list.noProcessesWereFound' | translate}}</span>\n </div>\n\n <mat-accordion class=\"full-width margin-top-default process-list-accordion\" multi fxFlex>\n\n <mat-expansion-panel *ngFor=\"let item of filteredProcesses; let last = last;\" (afterExpand)=\"nets.loadProcessItemRoles(item)\"\n (afterCollapse)=\"nets.prepareToTryAgainToLoadRoles(item)\" class=\"panel-body\" [ngClass]=\"{'panel-last':last}\">\n\n <mat-expansion-panel-header class=\"role-header panel-color\">\n <mat-panel-title>\n <mat-icon *ngIf=\"item.someRolesSelected\" color=\"accent\" class=\"margin-right-x2\">tour</mat-icon>\n <span>{{item.initials}} - {{item.title}}</span>\n </mat-panel-title>\n <mat-panel-description class=\"process-item-description\">\n <span\n class=\"process-item-description full-width\">{{'admin.process-list.newestVersion' | translate}}\n : {{item.newestVersion}}</span>\n </mat-panel-description>\n </mat-expansion-panel-header>\n\n <div *ngIf=\"item.loading\" fxFlex=\"100\" class=\"full-width\">\n <mat-progress-bar mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n </div>\n\n <div *ngIf=\"!item.loading && item.emptyRoles\" fxLayout=\"column\"\n fxLayoutAlign=\"center center\" fxFlex class=\"full-width full-height net-panel-content\">\n <mat-icon color=\"accent\" class=\"margin-bottom-default\">account_circle</mat-icon>\n <span class=\"font-size-15\">{{ 'admin.process-list.noRoles' | translate}}</span>\n </div>\n\n <div *ngIf=\"!item.loading && !item.emptyRoles\" fxLayout=\"column\" fxLayoutAlign=\"start start\"\n class=\"full-height full-width net-panel-content\">\n <div *ngFor=\"let net of item.processes; let first = first\" fxLayout=\"column\"\n fxLayoutAlign=\"start center\" class=\"full-width\">\n <mat-divider *ngIf=\"!first\" style=\"position: relative\"></mat-divider>\n\n <div class=\"full-width\">\n <div fxFlex fxLayoutAlign=\"start center\">\n <h3 class=\"margin-none\" *ngIf=\"first\">{{ 'admin.process-list.roles' | translate}}</h3>\n </div>\n <div fxFlex fxLayoutAlign=\"center center\">\n <button mat-stroked-button matTooltip=\"{{item.someRolesSelected ? 'Deselect All' : 'Select All'}}\"\n (click)=\"toggleAllRoles(net, !item.someRolesSelected)\">\n {{net.version}}\n </button>\n </div>\n <div fxFlex></div>\n </div>\n\n <mat-selection-list color=\"accent\" fxLayout=\"row wrap\" fxLayoutAlign=\"start center\"\n class=\"full-width\">\n <mat-list-option *ngFor=\"let role of net.roles\" checkboxPosition=\"before\"\n [selected]=\"role.selected\" (click)=\"role.toggle();update(role)\"\n fxFlex=\"50\">\n <h3 matLine class=\"margin-none\">{{role.name}}</h3>\n </mat-list-option>\n </mat-selection-list>\n </div>\n </div>\n\n </mat-expansion-panel>\n\n </mat-accordion>\n\n <div *ngIf=\"nets.loading$ | async\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex=\"100\">\n <mat-spinner color=\"primary\" diameter=\"65\"></mat-spinner>\n </div>\n </div>\n</div>\n", styles: [".full-height{height:100%;min-height:100%}.full-width{width:100%;min-width:100%}.padding-default{padding:8px}.padding-half{padding:4px}.padding-x2{padding:16px}.margin-default{margin:8px}.margin-half{margin:4px}.margin-x2{margin:16px}.margin-top-default{margin-top:8px}.margin-top-half{margin-top:4px}.margin-top-x2{margin-top:16px}.margin-bottom-default{margin-bottom:8px}.margin-bottom-half{margin-bottom:4px}.margin-bottom-x2{margin-bottom:16px}.margin-left-default{margin-left:8px}.margin-left-half{margin-left:4px}.margin-left-x2{margin-left:16px}.margin-right-default{margin-right:8px}.margin-right-half{margin-right:4px}.margin-right-x2{margin-right:16px}.user-list-item-margin{margin:4px 0}.net-panel-content{padding-left:24px;padding-right:24px;padding-bottom:24px}.font-size-20{font-size:20px}.font-size-15{font-size:15px}.no-user-icon{font-size:40px;width:40px;height:40px}.process-item-description{text-align:right}.process-list-accordion{overflow-y:auto;padding:0 2px 4px}.process-list-accordion .mat-mdc-expansion-panel-spacing{margin:8px 0}.ldapGroup-assign-search{width:100%;color:#64748b;min-width:250px;border-radius:6px}.search-icon{margin-right:10px}.min-height-radius{min-height:64px;border-radius:8px}.prefix-icon{font-size:22px}.paragraph-fix{word-break:break-all;white-space:pre-wrap!important}.min-height-option{height:auto!important;min-height:48px;padding:3px 0!important}.role-header{min-height:48px!important;height:auto!important}.panel-last{padding-bottom:16px}.margin-none{margin-top:0!important;margin-bottom:0!important}.role-height{height:100%;min-height:100%}@media only screen and (max-width: 599.99px){.role-height{height:50%;min-height:50%;width:100%}}\n"] }] }], ctorParameters: () => [{ type: i1.RoleAssignmentLdapGroupService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGRhcC1ncm91cC1yb2xlLWFzc2lnbm1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzL3NyYy9saWIvYWRtaW4vbGRhcC1ncm91cC1yb2xlLWFzc2lnbm1lbnQvbGRhcC1ncm91cC1yb2xlLWFzc2lnbm1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzL3NyYy9saWIvYWRtaW4vbGRhcC1ncm91cC1yb2xlLWFzc2lnbm1lbnQvbGRhcC1ncm91cC1yb2xlLWFzc2lnbm1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQ0gsd0NBQXdDLEVBQ3hDLDhCQUE4QixHQUNqQyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVbEMsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLHdDQUF3QztJQUNwRTtJQUF0QixZQUFzQixRQUF3QztRQUMxRCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFERSxhQUFRLEdBQVIsUUFBUSxDQUFnQztJQUU5RCxDQUFDO3dHQUhRLGdDQUFnQzs0RkFBaEMsZ0NBQWdDLHdEQUo5QjtZQUNQLDhCQUE4QjtTQUNqQyxpRENaTCxpdFRBNkpBOzs0RkQvSWEsZ0NBQWdDO2tCQVI1QyxTQUFTOytCQUNJLCtCQUErQixhQUc5Qjt3QkFDUCw4QkFBOEI7cUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdExkYXBHcm91cFJvbGVBc3NpZ25tZW50Q29tcG9uZW50LFxuICAgIFJvbGVBc3NpZ25tZW50TGRhcEdyb3VwU2VydmljZSxcbn0gZnJvbSAnQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYy1sZGFwLWdyb3VwLXJvbGUtYXNzaWdubWVudCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xkYXAtZ3JvdXAtcm9sZS1hc3NpZ25tZW50LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9sZGFwLWdyb3VwLXJvbGUtYXNzaWdubWVudC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBSb2xlQXNzaWdubWVudExkYXBHcm91cFNlcnZpY2VcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIExkYXBHcm91cFJvbGVBc3NpZ25tZW50Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RMZGFwR3JvdXBSb2xlQXNzaWdubWVudENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9zZXJ2aWNlOiBSb2xlQXNzaWdubWVudExkYXBHcm91cFNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoX3NlcnZpY2UpO1xuICAgIH1cbn1cbiIsIjxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dC5sdC1zbT1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBjbGFzcz1cImZ1bGwtaGVpZ2h0IGZ1bGwtd2lkdGggcGFkZGluZy1kZWZhdWx0XCI+XG5cbiAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmxleD1cIjQ5XCIgY2xhc3M9XCJyb2xlLWhlaWdodFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGRhcEdyb3VwLmxkYXBHcm91cHMkIHwgYXN5bmMgYXMgbGRhcEdyb3Vwc19cIj5cblxuICAgICAgICAgICAgPG1hdC10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwibWluLWhlaWdodC1yYWRpdXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBtYXRUb29sdGlwPVwie3tsZGFwR3JvdXBzXy5sZW5ndGh9fS97e2xkYXBHcm91cC50b3RhbExkYXBHcm91cHN9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eydhZG1pbi5sZGFwR3JvdXAtbGlzdC5jb3VudCcgfCB0cmFuc2xhdGUgfX06IHt7bGRhcEdyb3Vwc18ubGVuZ3RofX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI1XCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGNsYXNzPVwibmV0Z3JpZi1pbnB1dCBuZXRncmlmLWlucHV0LXNlYXJjaC1maXggbmV0Z3JpZi1pbnB1dC1wcmltYXJ5LXNlYXJjaC1maXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMFwiIGNsYXNzPVwibGRhcEdyb3VwLWFzc2lnbi1zZWFyY2hcIiBjb2xvcj1cInByaW1hcnlcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeCBjbGFzcz1cInByZWZpeC1pY29uXCI+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwic2VhcmNoTGRhcEdyb3VwQ29udHJvbFwiIHBsYWNlaG9sZGVyPVwie3sgJ3NpZGUtbWVudS5sZGFwR3JvdXAuY2hvb3NlJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjb2xvcj1cIndhcm5cIiAqbmdJZj1cInNlYXJjaExkYXBHcm91cENvbnRyb2wudmFsdWVcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2hMZGFwR3JvdXBDb250cm9sLnNldFZhbHVlKCcnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZmxleDogMSAxIGF1dG87XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJ7eyAnc2lkZS1tZW51LnRvb2x0aXAuU2VsZWN0QWxsJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJzZWxlY3RBbGxMZGFwR3JvdXAodHJ1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRvbmVfYWxsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwie3sgJ3NpZGUtbWVudS50b29sdGlwLkRlc2VsZWN0QWxsJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJzZWxlY3RBbGxMZGFwR3JvdXAoZmFsc2UpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC10b29sYmFyPlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGxkYXBHcm91cC5sb2FkaW5nJCB8IGFzeW5jKSA9PT0gZmFsc2UgJiYgbGRhcEdyb3Vwc18ubGVuZ3RoID09PSAwXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4RmxleCBjbGFzcz1cIm1hcmdpbi10b3AteDJcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJhY2NlbnRcIiBjbGFzcz1cIm1hcmdpbi1ib3R0b20tZGVmYXVsdCBuby1sZGFwR3JvdXAtaWNvblwiPnBlcm1faWRlbnRpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zaXplLTIwXCI+e3sgJ2FkbWluLmxkYXBHcm91cC1saXN0Lm5vTGRhcEdyb3Vwc1dlcmVGb3VuZCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8bWF0LXNlbGVjdGlvbi1saXN0ICNsZGFwR3JvdXBMaXN0IGNvbG9yPVwicHJpbWFyeVwiIGZ4RmxleD1cIjEwMFwiIGNsYXNzPVwiZnVsbC13aWR0aCBhZHZhbmNlZC1vcHRpb24tbGlzdFwiPlxuXG4gICAgICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBpdGVtU2l6ZT1cIjQ4XCIgKHNjcm9sbGVkSW5kZXhDaGFuZ2UpPVwibG9hZE5leHRMZGFwR3JvdXBQYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoIGZ1bGwtaGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1vcHRpb24gY2xhc3M9XCJtaW4taGVpZ2h0LW9wdGlvblwiICpjZGtWaXJ0dWFsRm9yPVwibGV0IGxkYXBHcm91cCBvZiBsZGFwR3JvdXBzXzsgbGV0IGkgPSBpbmRleDtcIiBjaGVja2JveFBvc2l0aW9uPVwiYmVmb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwibGRhcEdyb3VwLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGRhcEdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2xpc3QtaXRlbS1zZWxlY3RlZCc6bGRhcEdyb3VwLnNlbGVjdGVkfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxkYXBHcm91cC50b2dnbGUoKTthdXRvU2VsZWN0Um9sZXMoKVwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeExheW91dD1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIG1hdExpbmUgY2xhc3M9XCJwcmltYXJ5LWNvbG9yLWxpbmUgbWFyZ2luLW5vbmVcIj57e2xkYXBHcm91cC5jbn19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwibGRhcEdyb3VwLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWRcIiBtYXRMaW5lIGNsYXNzPVwicGFyYWdyYXBoLWZpeCBtYXJnaW4tbm9uZVwiPkROOiB7e2xkYXBHcm91cC5kbn19LCBEZXNjcmlwdGlvbjoge3tsZGFwR3JvdXAuZGVzY3JpcHRpb259fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwibGRhcEdyb3VwLmRlc2NyaXB0aW9uID09PSB1bmRlZmluZWRcIiBtYXRMaW5lIGNsYXNzPVwicGFyYWdyYXBoLWZpeCBtYXJnaW4tbm9uZVwiPkROOiB7e2xkYXBHcm91cC5kbn19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGRhcEdyb3VwLmxvYWRpbmckIHwgYXN5bmNcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgY29sb3I9XCJwcmltYXJ5XCIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgZnhGbGV4PVwiMlwiPjwvZGl2PlxuXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZsZXg9XCI0OVwiIGNsYXNzPVwicm9sZS1oZWlnaHRcIj5cblxuICAgICAgICA8bWF0LXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJtaW4taGVpZ2h0LXJhZGl1c1wiPlxuICAgICAgICAgICAgPHNwYW4+e3snYWRtaW4ucHJvY2Vzcy1saXN0Lmxpc3RUaXRsZScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiNVwiPjwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGNsYXNzPVwibmV0Z3JpZi1pbnB1dCBuZXRncmlmLWlucHV0LXNlYXJjaC1maXhcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTAwXCIgY2xhc3M9XCJsZGFwR3JvdXAtYXNzaWduLXNlYXJjaFwiIGNvbG9yPVwicHJpbWFyeVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXggY2xhc3M9XCJwcmVmaXgtaWNvblwiPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NpZGUtbWVudS5pbXBvcnQtbmV0LnNlYXJjaCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJzZWFyY2hOZXRDb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWFyY2hOZXRDb250cm9sLnZhbHVlXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2hOZXRDb250cm9sLnNldFZhbHVlKCcnKVwiIGNvbG9yPVwid2FyblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZsZXg6IDEgMSBhdXRvO1wiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImxkYXBHcm91cC51cGRhdGluZyQgfCBhc3luY1wiIGNvbG9yPVwiYWNjZW50XCIgZGlhbWV0ZXI9XCIzMFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvbWF0LXRvb2xiYXI+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIihsZGFwR3JvdXAubG9hZGluZyQgfCBhc3luYykgPT09IGZhbHNlICYmIG5ldHMucHJvY2Vzc2VzLmxlbmd0aCA9PT0gMFwiIGZ4TGF5b3V0PVwiY29sdW1uXCJcbiAgICAgICAgICAgICBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4RmxleCBjbGFzcz1cIm1hcmdpbi10b3AteDJcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cImFjY2VudFwiIGNsYXNzPVwibWFyZ2luLWJvdHRvbS1kZWZhdWx0IG5vLWxkYXBHcm91cC1pY29uXCI+dGltZWxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNpemUtMjBcIj57eyAnYWRtaW4ucHJvY2Vzcy1saXN0Lm5vUHJvY2Vzc2VzV2VyZUZvdW5kJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bWF0LWFjY29yZGlvbiBjbGFzcz1cImZ1bGwtd2lkdGggbWFyZ2luLXRvcC1kZWZhdWx0IHByb2Nlc3MtbGlzdC1hY2NvcmRpb25cIiBtdWx0aSBmeEZsZXg+XG5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkUHJvY2Vzc2VzOyBsZXQgbGFzdCA9IGxhc3Q7XCIgKGFmdGVyRXhwYW5kKT1cIm5ldHMubG9hZFByb2Nlc3NJdGVtUm9sZXMoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFmdGVyQ29sbGFwc2UpPVwibmV0cy5wcmVwYXJlVG9UcnlBZ2FpblRvTG9hZFJvbGVzKGl0ZW0pXCIgY2xhc3M9XCJwYW5lbC1ib2R5XCIgW25nQ2xhc3NdPVwieydwYW5lbC1sYXN0JzpsYXN0fVwiPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwicm9sZS1oZWFkZXIgcGFuZWwtY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIml0ZW0uc29tZVJvbGVzU2VsZWN0ZWRcIiBjb2xvcj1cImFjY2VudFwiIGNsYXNzPVwibWFyZ2luLXJpZ2h0LXgyXCI+dG91cjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2l0ZW0uaW5pdGlhbHN9fSAtIHt7aXRlbS50aXRsZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbiBjbGFzcz1cInByb2Nlc3MtaXRlbS1kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2Nlc3MtaXRlbS1kZXNjcmlwdGlvbiBmdWxsLXdpZHRoXCI+e3snYWRtaW4ucHJvY2Vzcy1saXN0Lm5ld2VzdFZlcnNpb24nIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt7aXRlbS5uZXdlc3RWZXJzaW9ufX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5sb2FkaW5nXCIgZnhGbGV4PVwiMTAwXCIgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgY29sb3I9XCJwcmltYXJ5XCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpdGVtLmxvYWRpbmcgJiYgaXRlbS5lbXB0eVJvbGVzXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBmeEZsZXggY2xhc3M9XCJmdWxsLXdpZHRoIGZ1bGwtaGVpZ2h0IG5ldC1wYW5lbC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cImFjY2VudFwiIGNsYXNzPVwibWFyZ2luLWJvdHRvbS1kZWZhdWx0XCI+YWNjb3VudF9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2l6ZS0xNVwiPnt7ICdhZG1pbi5wcm9jZXNzLWxpc3Qubm9Sb2xlcycgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS5sb2FkaW5nICYmICFpdGVtLmVtcHR5Um9sZXNcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdGFydFwiXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ1bGwtaGVpZ2h0IGZ1bGwtd2lkdGggbmV0LXBhbmVsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbmV0IG9mIGl0ZW0ucHJvY2Vzc2VzOyBsZXQgZmlyc3QgPSBmaXJzdFwiIGZ4TGF5b3V0PVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgKm5nSWY9XCIhZmlyc3RcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPjwvbWF0LWRpdmlkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtYXJnaW4tbm9uZVwiICpuZ0lmPVwiZmlyc3RcIj57eyAnYWRtaW4ucHJvY2Vzcy1saXN0LnJvbGVzJyB8IHRyYW5zbGF0ZX19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBtYXRUb29sdGlwPVwie3tpdGVtLnNvbWVSb2xlc1NlbGVjdGVkID8gJ0Rlc2VsZWN0IEFsbCcgOiAnU2VsZWN0IEFsbCd9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbFJvbGVzKG5ldCwgIWl0ZW0uc29tZVJvbGVzU2VsZWN0ZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e25ldC52ZXJzaW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3Rpb24tbGlzdCBjb2xvcj1cImFjY2VudFwiIGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1saXN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcm9sZSBvZiBuZXQucm9sZXNcIiBjaGVja2JveFBvc2l0aW9uPVwiYmVmb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJyb2xlLnNlbGVjdGVkXCIgKGNsaWNrKT1cInJvbGUudG9nZ2xlKCk7dXBkYXRlKHJvbGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ4RmxleD1cIjUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBtYXRMaW5lIGNsYXNzPVwibWFyZ2luLW5vbmVcIj57e3JvbGUubmFtZX19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgICAgIDwvbWF0LWFjY29yZGlvbj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwibmV0cy5sb2FkaW5nJCB8IGFzeW5jXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4RmxleD1cIjEwMFwiPlxuICAgICAgICAgICAgPG1hdC1zcGlubmVyIGNvbG9yPVwicHJpbWFyeVwiIGRpYW1ldGVyPVwiNjVcIj48L21hdC1zcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19