UNPKG

@abp/ng.permission-management

Version:

ABP Framework is a complete open-source infrastructure to create modern web applications by following the best practices and conventions of software development. This package is a part of the [ABP Framework](https://abp.io) and contains client-side files.

1 lines 103 kB
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../tmp-esm2022/lib/components/permission-management.component.js","../tmp-esm2022/lib/permission-management.module.js","../tmp-esm2022/abp-ng.permission-management.js"],"sourcesContent":["import { ConfigStateService, LocalizationPipe } from '@abp/ng.core';\nimport { ButtonComponent, ModalCloseDirective, ModalComponent, ToasterService, } from '@abp/ng.theme.shared';\nimport { PermissionsService, } from '@abp/ng.permission-management/proxy';\nimport { Component, computed, DOCUMENT, EventEmitter, inject, Input, Output, QueryList, signal, ViewChildren, } from '@angular/core';\nimport { concat, of } from 'rxjs';\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\nimport { NgStyle } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class PermissionManagementComponent {\n    constructor() {\n        this.service = inject(PermissionsService);\n        this.configState = inject(ConfigStateService);\n        this.toasterService = inject(ToasterService);\n        this.document = inject(DOCUMENT);\n        this.hideBadges = false;\n        this._visible = false;\n        this.visibleChange = new EventEmitter();\n        this.data = { groups: [], entityDisplayName: '' };\n        this.permissions = [];\n        this.selectThisTab = false;\n        this.selectAllTab = false;\n        this.disableSelectAllTab = false;\n        this.disabledSelectAllInAllTabs = false;\n        this.modalBusy = false;\n        this.filter = signal('');\n        this.selectedGroupPermissions = [];\n        this.permissionGroupSignal = signal([]);\n        this.permissionGroups = computed(() => {\n            const search = this.filter().toLowerCase().trim();\n            let groups = this.permissionGroupSignal();\n            if (!search) {\n                this.setSelectedGroup(groups[0]);\n                return groups;\n            }\n            const includesSearch = text => text.toLowerCase().includes(search);\n            groups = groups.filter(group => group.permissions.some(permission => includesSearch(permission.displayName) || includesSearch(group.displayName)));\n            if (groups.length) {\n                this.setSelectedGroup(groups[0]);\n            }\n            else {\n                this.selectedGroupPermissions = [];\n            }\n            return groups;\n        });\n        this.trackByFn = (_, item) => item.name;\n    }\n    get visible() {\n        return this._visible;\n    }\n    set visible(value) {\n        if (value === this._visible) {\n            return;\n        }\n        if (value) {\n            this.openModal().subscribe(() => {\n                this._visible = true;\n                this.visibleChange.emit(true);\n                concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\n                    .pipe(take(1))\n                    .subscribe(() => {\n                    this.initModal();\n                });\n            });\n        }\n        else {\n            this.setSelectedGroup(null);\n            this._visible = false;\n            this.visibleChange.emit(false);\n            this.filter.set('');\n        }\n    }\n    getChecked(name) {\n        return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\n    }\n    setSelectedGroup(group) {\n        this.selectedGroup = group;\n        if (!this.selectedGroup) {\n            this.selectedGroupPermissions = [];\n            return;\n        }\n        const margin = `margin-${this.document.body?.dir === 'rtl' ? 'right' : 'left'}.px`;\n        const permissions = (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\n            [];\n        this.selectedGroupPermissions = permissions.map(permission => ({\n            ...permission,\n            style: { [margin]: findMargin(permissions, permission) },\n            isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\n        }));\n    }\n    setDisabled(permissions) {\n        if (permissions.length) {\n            this.disableSelectAllTab = permissions.every(permission => permission.isGranted &&\n                permission.grantedProviders?.every(p => p.providerName !== this.providerName));\n        }\n        else {\n            this.disableSelectAllTab = false;\n        }\n    }\n    isGrantedByOtherProviderName(grantedProviders) {\n        if (grantedProviders.length) {\n            return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\n        }\n        return false;\n    }\n    onClickCheckbox(clickedPermission) {\n        const { isGranted, grantedProviders } = clickedPermission;\n        if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {\n            return;\n        }\n        this.setSelectedGroup(this.selectedGroup);\n        setTimeout(() => {\n            this.updatePermissionStatus(clickedPermission);\n            this.updateSelectedGroupPermissions(clickedPermission);\n            this.setParentClicked(clickedPermission);\n            this.setTabCheckboxState();\n            this.setGrantCheckboxState();\n        }, 0);\n    }\n    updatePermissionStatus(clickedPermission) {\n        this.permissions = this.permissions.map(permission => {\n            const isExactMatch = clickedPermission.name == permission.name;\n            const isParentOfPermission = clickedPermission.parentName === permission.name;\n            const isChildOfPermission = clickedPermission.name === permission.parentName;\n            if (isExactMatch) {\n                return { ...permission, isGranted: !permission.isGranted };\n            }\n            if (isChildOfPermission && permission.isGranted) {\n                return { ...permission, isGranted: false };\n            }\n            if (isParentOfPermission && !permission.isGranted) {\n                return { ...permission, isGranted: true };\n            }\n            return permission;\n        });\n    }\n    setParentClicked(clickedPermission) {\n        if (clickedPermission.parentName) {\n            const parentPermissions = findParentPermissions(this.permissions, clickedPermission);\n            if (parentPermissions.length > 0) {\n                const parentNames = new Set(parentPermissions.map(parent => parent.name));\n                this.permissions = this.permissions.map(per => {\n                    let updatedIsGranted = per.isGranted;\n                    if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {\n                        updatedIsGranted = false;\n                    }\n                    if (parentNames.has(per.name)) {\n                        updatedIsGranted = true;\n                    }\n                    return { ...per, isGranted: updatedIsGranted };\n                });\n            }\n            return;\n        }\n        this.permissions = this.permissions.map(per => {\n            const parents = findParentPermissions(this.permissions, per);\n            if (parents.length > 0) {\n                const rootParent = parents[parents.length - 1];\n                if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {\n                    return { ...per, isGranted: false };\n                }\n            }\n            return per;\n        });\n    }\n    updateSelectedGroupPermissions(clickedPermissions) {\n        this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\n            if (per.name === clickedPermissions.name) {\n                per.isGranted = !per.isGranted;\n            }\n            return per;\n        });\n    }\n    setTabCheckboxState() {\n        const selectablePermissions = this.selectedGroupPermissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName));\n        const selectedPermissions = selectablePermissions.filter(per => per.isGranted);\n        const element = this.document.querySelector('#select-all-in-this-tabs');\n        if (!element) {\n            return;\n        }\n        if (selectedPermissions.length === selectablePermissions.length) {\n            element.indeterminate = false;\n            this.selectThisTab = true;\n        }\n        else if (selectedPermissions.length === 0) {\n            element.indeterminate = false;\n            this.selectThisTab = false;\n        }\n        else {\n            element.indeterminate = true;\n        }\n    }\n    setGrantCheckboxState() {\n        const selectablePermissions = this.permissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName));\n        const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\n        const checkboxElement = this.document.querySelector('#select-all-in-all-tabs');\n        if (selectedAllPermissions.length === selectablePermissions.length) {\n            checkboxElement.indeterminate = false;\n            this.selectAllTab = true;\n        }\n        else if (selectedAllPermissions.length === 0) {\n            checkboxElement.indeterminate = false;\n            this.selectAllTab = false;\n        }\n        else {\n            checkboxElement.indeterminate = true;\n        }\n    }\n    onClickSelectThisTab() {\n        this.selectedGroupPermissions.forEach(permission => {\n            if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\n                return;\n            const index = this.permissions.findIndex(per => per.name === permission.name);\n            this.permissions = [\n                ...this.permissions.slice(0, index),\n                { ...this.permissions[index], isGranted: !this.selectThisTab },\n                ...this.permissions.slice(index + 1),\n            ];\n        });\n        this.setGrantCheckboxState();\n    }\n    onClickSelectAll() {\n        if (this.filter()) {\n            this.filter.set('');\n        }\n        this.permissions = this.permissions.map(permission => ({\n            ...permission,\n            isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\n        }));\n        if (!this.disableSelectAllTab) {\n            this.selectThisTab = !this.selectAllTab;\n            this.setTabCheckboxState();\n            if (this.filter()) {\n                this.setGrantCheckboxState();\n            }\n        }\n        this.onChangeGroup(this.selectedGroup);\n    }\n    onChangeGroup(group) {\n        this.setDisabled(group.permissions);\n        this.setSelectedGroup(group);\n        this.setTabCheckboxState();\n    }\n    submit() {\n        const unchangedPermissions = getPermissions(this.data.groups);\n        const changedPermissions = this.permissions\n            .filter(per => (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\n            per.isGranted\n            ? false\n            : true)\n            .map(({ name, isGranted }) => ({ name, isGranted }));\n        if (!changedPermissions.length) {\n            this.visible = false;\n            return;\n        }\n        this.modalBusy = true;\n        this.service\n            .update(this.providerName, this.providerKey, { permissions: changedPermissions })\n            .pipe(switchMap(() => this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null)), finalize(() => (this.modalBusy = false)))\n            .subscribe(() => {\n            this.visible = false;\n            this.toasterService.success('AbpUi::SavedSuccessfully');\n        });\n    }\n    openModal() {\n        if (!this.providerKey || !this.providerName) {\n            throw new Error('Provider Key and Provider Name are required.');\n        }\n        return this.service.get(this.providerName, this.providerKey).pipe(tap((permissionRes) => {\n            const { groups } = permissionRes || {};\n            this.data = permissionRes;\n            this.permissionGroupSignal.set(groups);\n            this.permissions = getPermissions(groups);\n            this.setSelectedGroup(groups[0]);\n            this.disabledSelectAllInAllTabs = this.permissions.every(per => per.isGranted &&\n                per.grantedProviders.every(provider => provider.providerName !== this.providerName));\n        }));\n    }\n    initModal() {\n        // TODO: Refactor\n        setTimeout(() => {\n            this.setDisabled(this.selectedGroup?.permissions || []);\n            this.setTabCheckboxState();\n            this.setGrantCheckboxState();\n        });\n    }\n    getAssignedCount(groupName) {\n        return this.permissions.reduce((acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc), 0);\n    }\n    shouldFetchAppConfig() {\n        const currentUser = this.configState.getOne('currentUser');\n        if (this.providerName === 'R')\n            return currentUser.roles.some(role => role === this.providerKey);\n        if (this.providerName === 'U')\n            return currentUser.id === this.providerKey;\n        return false;\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.7\", type: PermissionManagementComponent, isStandalone: true, selector: \"abp-permission-management\", inputs: { providerName: \"providerName\", providerKey: \"providerKey\", hideBadges: \"hideBadges\", entityDisplayName: \"entityDisplayName\", visible: \"visible\" }, outputs: { visibleChange: \"visibleChange\" }, viewQueries: [{ propertyName: \"selectAllInThisTabsRef\", predicate: [\"selectAllInThisTabsRef\"], descendants: true }, { propertyName: \"selectAllInAllTabsRef\", predicate: [\"selectAllInAllTabsRef\"], descendants: true }], exportAs: [\"abpPermissionManagement\"], ngImport: i0, template: \"<abp-modal [(visible)]=\\\"visible\\\" [busy]=\\\"modalBusy\\\" [options]=\\\"{ size: 'lg', scrollable: false }\\\">\\r\\n  @if (data.entityDisplayName || entityDisplayName) {\\r\\n    <ng-template #abpHeader>\\r\\n      <h4>\\r\\n        {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\\r\\n        {{ entityDisplayName || data.entityDisplayName }}\\r\\n      </h4>\\r\\n    </ng-template>\\r\\n    <ng-template #abpBody>\\r\\n      <div class=\\\"row d-flex align-items-center mb-2\\\">\\r\\n        <div class=\\\"col\\\">\\r\\n          <div class=\\\"input-group mb-2\\\">\\r\\n            <span class=\\\"input-group-text\\\" id=\\\"basic-addon1\\\"><i class=\\\"bi bi-search\\\"></i></span>\\r\\n            <input\\r\\n              type=\\\"text\\\"\\r\\n              class=\\\"form-control\\\"\\r\\n              id=\\\"permission-search\\\"\\r\\n              placeholder=\\\"Filter\\\"\\r\\n              [ngModel]=\\\"filter()\\\"\\r\\n              (ngModelChange)=\\\"filter.set($event)\\\"\\r\\n            />\\r\\n          </div>\\r\\n        </div>\\r\\n        <div class=\\\"col-auto\\\">\\r\\n          <div class=\\\"form-check mb-2\\\">\\r\\n            <input\\r\\n              #selectAllInAllTabsRef\\r\\n              type=\\\"checkbox\\\"\\r\\n              id=\\\"select-all-in-all-tabs\\\"\\r\\n              name=\\\"select-all-in-all-tabs\\\"\\r\\n              class=\\\"form-check-input\\\"\\r\\n              [(ngModel)]=\\\"selectAllTab\\\"\\r\\n              (click)=\\\"onClickSelectAll()\\\"\\r\\n              [disabled]=\\\"disabledSelectAllInAllTabs\\\"\\r\\n            />\\r\\n            <label class=\\\"form-check-label\\\" for=\\\"select-all-in-all-tabs\\\">{{\\r\\n              'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\\r\\n            }}</label>\\r\\n          </div>\\r\\n        </div>\\r\\n      </div>\\r\\n      <fieldset class=\\\"border rounded-4 p-3\\\">\\r\\n        <legend class=\\\"px-1 h5 mb-0\\\">\\r\\n          {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\\r\\n        </legend>\\r\\n        <div class=\\\"row\\\">\\r\\n          <div class=\\\"col-md-4\\\">\\r\\n            <div class=\\\"overflow-auto lpx-scroll-pills-container scroll-in-modal\\\">\\r\\n              <ul class=\\\"nav nav-pills flex-column\\\">\\r\\n                @for (group of permissionGroups(); track $index) {\\r\\n                  <li class=\\\"border nav-item\\\">\\r\\n                    @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\\r\\n                      <a\\r\\n                        class=\\\"nav-link pointer\\\"\\r\\n                        [class.active]=\\\"selectedGroup?.name === group?.name\\\"\\r\\n                        (click)=\\\"onChangeGroup(group)\\\"\\r\\n                        (select)=\\\"setDisabled(group.permissions)\\\"\\r\\n                      >\\r\\n                        <div [class.font-weight-bold]=\\\"count.assignedCount\\\">\\r\\n                          {{ group?.displayName }}\\r\\n                          @if (count.assignedCount > 0) {\\r\\n                            <span>({{ count.assignedCount }})</span>\\r\\n                          }\\r\\n                        </div>\\r\\n                      </a>\\r\\n                    }\\r\\n                  </li>\\r\\n                }\\r\\n              </ul>\\r\\n            </div>\\r\\n          </div>\\r\\n\\r\\n          <div class=\\\"col-md-8 scroll-in-modal\\\">\\r\\n            <div class=\\\"ps-1\\\">\\r\\n              @if (selectedGroupPermissions.length) {\\r\\n                <div class=\\\"form-check mb-2\\\">\\r\\n                  <input\\r\\n                    #selectAllInThisTabsRef\\r\\n                    type=\\\"checkbox\\\"\\r\\n                    id=\\\"select-all-in-this-tabs\\\"\\r\\n                    name=\\\"select-all-in-this-tabs\\\"\\r\\n                    class=\\\"form-check-input\\\"\\r\\n                    [(ngModel)]=\\\"selectThisTab\\\"\\r\\n                    [disabled]=\\\"disableSelectAllTab\\\"\\r\\n                    (click)=\\\"onClickSelectThisTab()\\\"\\r\\n                  />\\r\\n                  <label class=\\\"form-check-label\\\" for=\\\"select-all-in-this-tabs\\\">{{\\r\\n                    'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\\r\\n                  }}</label>\\r\\n                </div>\\r\\n                <hr class=\\\"my-2\\\" />\\r\\n                @for (permission of selectedGroupPermissions; track $index; let i = $index) {\\r\\n                  <div [ngStyle]=\\\"permission.style\\\" class=\\\"form-check mb-2\\\">\\r\\n                    <input\\r\\n                      #permissionCheckbox\\r\\n                      type=\\\"checkbox\\\"\\r\\n                      [checked]=\\\"getChecked(permission.name)\\\"\\r\\n                      [value]=\\\"getChecked(permission.name)\\\"\\r\\n                      [attr.id]=\\\"permission.name\\\"\\r\\n                      class=\\\"form-check-input\\\"\\r\\n                      [disabled]=\\\"isGrantedByOtherProviderName(permission.grantedProviders)\\\"\\r\\n                      (click)=\\\"onClickCheckbox(permission, permissionCheckbox.value)\\\"\\r\\n                    />\\r\\n                    <label class=\\\"form-check-label\\\" [attr.for]=\\\"permission.name\\\"\\r\\n                      >{{ permission.displayName }}\\r\\n                      @if (!hideBadges) {\\r\\n                        @for (provider of permission.grantedProviders; track $index) {\\r\\n                          <span class=\\\"badge bg-primary text-dark\\\"\\r\\n                            >{{ provider.providerName }}: {{ provider.providerKey }}</span\\r\\n                          >\\r\\n                        }\\r\\n                      }\\r\\n                    </label>\\r\\n                  </div>\\r\\n                }\\r\\n              }\\r\\n            </div>\\r\\n          </div>\\r\\n        </div>\\r\\n      </fieldset>\\r\\n    </ng-template>\\r\\n    <ng-template #abpFooter>\\r\\n      <button type=\\\"button\\\" class=\\\"btn btn-outline-primary\\\" abpClose>\\r\\n        {{ 'AbpIdentity::Cancel' | abpLocalization }}\\r\\n      </button>\\r\\n      <abp-button iconClass=\\\"fa fa-check\\\" (click)=\\\"submit()\\\">{{\\r\\n        'AbpIdentity::Save' | abpLocalization\\r\\n      }}</abp-button>\\r\\n    </ng-template>\\r\\n  }\\r\\n</abp-modal>\\r\\n\", styles: [\".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media(max-width:768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.CheckboxControlValueAccessor, selector: \"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: ModalComponent, selector: \"abp-modal\", inputs: [\"visible\", \"busy\", \"options\", \"suppressUnsavedChangesWarning\"], outputs: [\"visibleChange\", \"init\", \"appear\", \"disappear\"] }, { kind: \"pipe\", type: LocalizationPipe, name: \"abpLocalization\" }, { kind: \"component\", type: ButtonComponent, selector: \"abp-button\", inputs: [\"buttonId\", \"buttonClass\", \"buttonType\", \"formName\", \"iconClass\", \"loading\", \"disabled\", \"attributes\"], outputs: [\"click\", \"focus\", \"blur\", \"abpClick\", \"abpFocus\", \"abpBlur\"] }, { kind: \"directive\", type: ModalCloseDirective, selector: \"[abpClose]\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', imports: [\n                        FormsModule,\n                        NgStyle,\n                        ModalComponent,\n                        LocalizationPipe,\n                        ButtonComponent,\n                        ModalCloseDirective,\n                    ], template: \"<abp-modal [(visible)]=\\\"visible\\\" [busy]=\\\"modalBusy\\\" [options]=\\\"{ size: 'lg', scrollable: false }\\\">\\r\\n  @if (data.entityDisplayName || entityDisplayName) {\\r\\n    <ng-template #abpHeader>\\r\\n      <h4>\\r\\n        {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\\r\\n        {{ entityDisplayName || data.entityDisplayName }}\\r\\n      </h4>\\r\\n    </ng-template>\\r\\n    <ng-template #abpBody>\\r\\n      <div class=\\\"row d-flex align-items-center mb-2\\\">\\r\\n        <div class=\\\"col\\\">\\r\\n          <div class=\\\"input-group mb-2\\\">\\r\\n            <span class=\\\"input-group-text\\\" id=\\\"basic-addon1\\\"><i class=\\\"bi bi-search\\\"></i></span>\\r\\n            <input\\r\\n              type=\\\"text\\\"\\r\\n              class=\\\"form-control\\\"\\r\\n              id=\\\"permission-search\\\"\\r\\n              placeholder=\\\"Filter\\\"\\r\\n              [ngModel]=\\\"filter()\\\"\\r\\n              (ngModelChange)=\\\"filter.set($event)\\\"\\r\\n            />\\r\\n          </div>\\r\\n        </div>\\r\\n        <div class=\\\"col-auto\\\">\\r\\n          <div class=\\\"form-check mb-2\\\">\\r\\n            <input\\r\\n              #selectAllInAllTabsRef\\r\\n              type=\\\"checkbox\\\"\\r\\n              id=\\\"select-all-in-all-tabs\\\"\\r\\n              name=\\\"select-all-in-all-tabs\\\"\\r\\n              class=\\\"form-check-input\\\"\\r\\n              [(ngModel)]=\\\"selectAllTab\\\"\\r\\n              (click)=\\\"onClickSelectAll()\\\"\\r\\n              [disabled]=\\\"disabledSelectAllInAllTabs\\\"\\r\\n            />\\r\\n            <label class=\\\"form-check-label\\\" for=\\\"select-all-in-all-tabs\\\">{{\\r\\n              'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\\r\\n            }}</label>\\r\\n          </div>\\r\\n        </div>\\r\\n      </div>\\r\\n      <fieldset class=\\\"border rounded-4 p-3\\\">\\r\\n        <legend class=\\\"px-1 h5 mb-0\\\">\\r\\n          {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\\r\\n        </legend>\\r\\n        <div class=\\\"row\\\">\\r\\n          <div class=\\\"col-md-4\\\">\\r\\n            <div class=\\\"overflow-auto lpx-scroll-pills-container scroll-in-modal\\\">\\r\\n              <ul class=\\\"nav nav-pills flex-column\\\">\\r\\n                @for (group of permissionGroups(); track $index) {\\r\\n                  <li class=\\\"border nav-item\\\">\\r\\n                    @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\\r\\n                      <a\\r\\n                        class=\\\"nav-link pointer\\\"\\r\\n                        [class.active]=\\\"selectedGroup?.name === group?.name\\\"\\r\\n                        (click)=\\\"onChangeGroup(group)\\\"\\r\\n                        (select)=\\\"setDisabled(group.permissions)\\\"\\r\\n                      >\\r\\n                        <div [class.font-weight-bold]=\\\"count.assignedCount\\\">\\r\\n                          {{ group?.displayName }}\\r\\n                          @if (count.assignedCount > 0) {\\r\\n                            <span>({{ count.assignedCount }})</span>\\r\\n                          }\\r\\n                        </div>\\r\\n                      </a>\\r\\n                    }\\r\\n                  </li>\\r\\n                }\\r\\n              </ul>\\r\\n            </div>\\r\\n          </div>\\r\\n\\r\\n          <div class=\\\"col-md-8 scroll-in-modal\\\">\\r\\n            <div class=\\\"ps-1\\\">\\r\\n              @if (selectedGroupPermissions.length) {\\r\\n                <div class=\\\"form-check mb-2\\\">\\r\\n                  <input\\r\\n                    #selectAllInThisTabsRef\\r\\n                    type=\\\"checkbox\\\"\\r\\n                    id=\\\"select-all-in-this-tabs\\\"\\r\\n                    name=\\\"select-all-in-this-tabs\\\"\\r\\n                    class=\\\"form-check-input\\\"\\r\\n                    [(ngModel)]=\\\"selectThisTab\\\"\\r\\n                    [disabled]=\\\"disableSelectAllTab\\\"\\r\\n                    (click)=\\\"onClickSelectThisTab()\\\"\\r\\n                  />\\r\\n                  <label class=\\\"form-check-label\\\" for=\\\"select-all-in-this-tabs\\\">{{\\r\\n                    'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\\r\\n                  }}</label>\\r\\n                </div>\\r\\n                <hr class=\\\"my-2\\\" />\\r\\n                @for (permission of selectedGroupPermissions; track $index; let i = $index) {\\r\\n                  <div [ngStyle]=\\\"permission.style\\\" class=\\\"form-check mb-2\\\">\\r\\n                    <input\\r\\n                      #permissionCheckbox\\r\\n                      type=\\\"checkbox\\\"\\r\\n                      [checked]=\\\"getChecked(permission.name)\\\"\\r\\n                      [value]=\\\"getChecked(permission.name)\\\"\\r\\n                      [attr.id]=\\\"permission.name\\\"\\r\\n                      class=\\\"form-check-input\\\"\\r\\n                      [disabled]=\\\"isGrantedByOtherProviderName(permission.grantedProviders)\\\"\\r\\n                      (click)=\\\"onClickCheckbox(permission, permissionCheckbox.value)\\\"\\r\\n                    />\\r\\n                    <label class=\\\"form-check-label\\\" [attr.for]=\\\"permission.name\\\"\\r\\n                      >{{ permission.displayName }}\\r\\n                      @if (!hideBadges) {\\r\\n                        @for (provider of permission.grantedProviders; track $index) {\\r\\n                          <span class=\\\"badge bg-primary text-dark\\\"\\r\\n                            >{{ provider.providerName }}: {{ provider.providerKey }}</span\\r\\n                          >\\r\\n                        }\\r\\n                      }\\r\\n                    </label>\\r\\n                  </div>\\r\\n                }\\r\\n              }\\r\\n            </div>\\r\\n          </div>\\r\\n        </div>\\r\\n      </fieldset>\\r\\n    </ng-template>\\r\\n    <ng-template #abpFooter>\\r\\n      <button type=\\\"button\\\" class=\\\"btn btn-outline-primary\\\" abpClose>\\r\\n        {{ 'AbpIdentity::Cancel' | abpLocalization }}\\r\\n      </button>\\r\\n      <abp-button iconClass=\\\"fa fa-check\\\" (click)=\\\"submit()\\\">{{\\r\\n        'AbpIdentity::Save' | abpLocalization\\r\\n      }}</abp-button>\\r\\n    </ng-template>\\r\\n  }\\r\\n</abp-modal>\\r\\n\", styles: [\".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media(max-width:768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\\n\"] }]\n        }], propDecorators: { providerName: [{\n                type: Input\n            }], providerKey: [{\n                type: Input\n            }], hideBadges: [{\n                type: Input\n            }], entityDisplayName: [{\n                type: Input\n            }], visible: [{\n                type: Input\n            }], visibleChange: [{\n                type: Output\n            }], selectAllInThisTabsRef: [{\n                type: ViewChildren,\n                args: ['selectAllInThisTabsRef']\n            }], selectAllInAllTabsRef: [{\n                type: ViewChildren,\n                args: ['selectAllInAllTabsRef']\n            }] } });\nfunction findParentPermissions(permissions, permission) {\n    const permissionMap = new Map(permissions.map(p => [p.name, p]));\n    let currentPermission = permissionMap.get(permission.name) ?? null;\n    const parentPermissions = [];\n    while (currentPermission && currentPermission.parentName) {\n        const parentPermission = permissionMap.get(currentPermission.parentName);\n        if (!parentPermission) {\n            break;\n        }\n        parentPermissions.push(parentPermission);\n        currentPermission = parentPermission;\n    }\n    return parentPermissions;\n}\nfunction findMargin(permissions, permission) {\n    const parentPermission = permissions.find(per => per.name === permission.parentName);\n    if (parentPermission && parentPermission.parentName) {\n        let margin = 20;\n        return (margin += findMargin(permissions, parentPermission));\n    }\n    return parentPermission ? 20 : 0;\n}\nfunction getPermissions(groups) {\n    return groups.reduce((acc, val) => [\n        ...acc,\n        ...val.permissions.map(p => ({ ...p, groupName: val.name || '' })),\n    ], []);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEYsT0FBTyxFQUNMLGVBQWUsRUFFZixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGNBQWMsR0FDZixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFJTCxrQkFBa0IsR0FHbkIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBRVIsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBRU4sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFzRTdDLE1BQU0sT0FBTyw2QkFBNkI7SUE1RDFDO1FBaUVxQixZQUFPLEdBQUcsTUFBTSxDQUFDLGtC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QUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLGlCQUFpQixDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FDakIsV0FBcUMsRUFDckMsVUFBa0M7SUFFbEMsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFckYsSUFBSSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLE1BQTRCO0lBQ2xELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FDbEIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNaLEdBQUcsR0FBRztRQUNOLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQTBCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDNUYsRUFDRCxFQUErQixDQUNoQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSwgQ3VycmVudFVzZXJEdG8sIExvY2FsaXphdGlvblBpcGUgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEJ1dHRvbkNvbXBvbmVudCxcclxuICBMb2NhbGVEaXJlY3Rpb24sXHJcbiAgTW9kYWxDbG9zZURpcmVjdGl2ZSxcclxuICBNb2RhbENvbXBvbmVudCxcclxuICBUb2FzdGVyU2VydmljZSxcclxufSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7XHJcbiAgR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8sXHJcbiAgUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuICBQZXJtaXNzaW9uR3JvdXBEdG8sXHJcbiAgUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gIFByb3ZpZGVySW5mb0R0byxcclxuICBVcGRhdGVQZXJtaXNzaW9uRHRvLFxyXG59IGZyb20gJ0BhYnAvbmcucGVybWlzc2lvbi1tYW5hZ2VtZW50L3Byb3h5JztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgRE9DVU1FTlQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgaW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgc2lnbmFsLFxyXG4gIFRyYWNrQnlGdW5jdGlvbixcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNvbmNhdCwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uTWFuYWdlbWVudCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhTdHlsZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgc3R5bGU6IHN0cmluZztcclxufTtcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhHcm91cE5hbWUgPSBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvICYge1xyXG4gIGdyb3VwTmFtZTogc3RyaW5nO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtcGVybWlzc2lvbi1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2FicFBlcm1pc3Npb25NYW5hZ2VtZW50JyxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLnNjcm9sbC1pbi1tb2RhbCB7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgLypcclxuICAgICAgICBUbyBtYWludGFpbiBhIDI4cHggdG9wIG1hcmdpbiBhbmQgMjhweCBib3R0b20gbWFyZ2luIHdoZW4gdGhlIG1vZGFsIHJlYWNoZXMgZnVsbCBoZWlnaHQsIHRoZSBzY3JvbGxhYmxlIGFyZWEgbmVlZHMgdG8gYmUgMTAwdmggLSAyMy4xcmVtXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDIzLjFyZW0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubHB4LXNjcm9sbC1waWxscy1jb250YWluZXIgdWwge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFRhcmdldCBtb2JpbGUgc2NyZWVucyAqL1xyXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcclxuICAgICAgICAuc2Nyb2xsLWluLW1vZGFsIHtcclxuICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxNXJlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciB1bCB7XHJcbiAgICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZpZWxkc2V0IGxlZ2VuZCB7XHJcbiAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICAgICAgd2lkdGg6IGF1dG87XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciAudGFiLWNvbnRlbnQge1xyXG4gICAgICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmxweC1zY3JvbGwtcGlsbHMtY29udGFpbmVyIHVsIGxpIHtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciB1bCBsaSBhLmFjdGl2ZSB7XHJcbiAgICAgICAgY29sb3I6ICNmZmYgIWltcG9ydGFudDtcclxuICAgICAgICBib3JkZXItY29sb3I6ICM2YzVkZDMgIWltcG9ydGFudDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM1ZGQzICFpbXBvcnRhbnQ7XHJcbiAgICAgIH1cclxuICAgIGAsXHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE5nU3R5bGUsXHJcbiAgICBNb2RhbENvbXBvbmVudCxcclxuICAgIExvY2FsaXphdGlvblBpcGUsXHJcbiAgICBCdXR0b25Db21wb25lbnQsXHJcbiAgICBNb2RhbENsb3NlRGlyZWN0aXZlLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudFxyXG4gIGltcGxlbWVudHNcclxuICAgIFBlcm1pc3Npb25NYW5hZ2VtZW50LlBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50SW5wdXRzLFxyXG4gICAgUGVybWlzc2lvbk1hbmFnZW1lbnQuUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRPdXRwdXRzXHJcbntcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZSA9IGluamVjdChQZXJtaXNzaW9uc1NlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWdTdGF0ZSA9IGluamVjdChDb25maWdTdGF0ZVNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSB0b2FzdGVyU2VydmljZSA9IGluamVjdChUb2FzdGVyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgcHJvdmlkZXJOYW1lITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5IHByb3ZpZGVyS2V5ITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5IGhpZGVCYWRnZXMgPSBmYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIF92aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZW50aXR5RGlzcGxheU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fdmlzaWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3Blbk1vZGFsKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl92aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgICAgICBjb25jYXQodGhpcy5zZWxlY3RBbGxJbkFsbFRhYnNSZWYuY2hhbmdlcywgdGhpcy5zZWxlY3RBbGxJblRoaXNUYWJzUmVmLmNoYW5nZXMpXHJcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdE1vZGFsKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAobnVsbCk7XHJcbiAgICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLmZpbHRlci5zZXQoJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3NlbGVjdEFsbEluVGhpc1RhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluVGhpc1RhYnNSZWYhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj47XHJcbiAgQFZpZXdDaGlsZHJlbignc2VsZWN0QWxsSW5BbGxUYWJzUmVmJylcclxuICBzZWxlY3RBbGxJbkFsbFRhYnNSZWYhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj47XHJcblxyXG4gIGRhdGE6IEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvID0geyBncm91cHM6IFtdLCBlbnRpdHlEaXNwbGF5TmFtZTogJycgfTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cD86IFBlcm1pc3Npb25Hcm91cER0byB8IG51bGw7XHJcblxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZVtdID0gW107XHJcblxyXG4gIHNlbGVjdFRoaXNUYWIgPSBmYWxzZTtcclxuXHJcbiAgc2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcblxyXG4gIGRpc2FibGVTZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuXHJcbiAgZGlzYWJsZWRTZWxlY3RBbGxJbkFsbFRhYnMgPSBmYWxzZTtcclxuXHJcbiAgbW9kYWxCdXN5ID0gZmFsc2U7XHJcblxyXG4gIGZpbHRlciA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zOiBQZXJtaXNzaW9uV2l0aFN0eWxlW10gPSBbXTtcclxuXHJcbiAgcGVybWlzc2lvbkdyb3VwU2lnbmFsID0gc2lnbmFsPFBlcm1pc3Npb25Hcm91cER0b1tdPihbXSk7XHJcblxyXG4gIHBlcm1pc3Npb25Hcm91cHMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLmZpbHRlcigpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgbGV0IGdyb3VwcyA9IHRoaXMucGVybWlzc2lvbkdyb3VwU2lnbmFsKCk7XHJcblxyXG4gICAgaWYgKCFzZWFyY2gpIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKGdyb3Vwc1swXSk7XHJcbiAgICAgIHJldHVybiBncm91cHM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5jbHVkZXNTZWFyY2ggPSB0ZXh0ID0+IHRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpO1xyXG4gICAgZ3JvdXBzID0gZ3JvdXBzLmZpbHRlcihncm91cCA9PlxyXG4gICAgICBncm91cC5wZXJtaXNzaW9ucy5zb21lKFxyXG4gICAgICAgIHBlcm1pc3Npb24gPT4gaW5jbHVkZXNTZWFyY2gocGVybWlzc2lvbi5kaXNwbGF5TmFtZSkgfHwgaW5jbHVkZXNTZWFyY2goZ3JvdXAuZGlzcGxheU5hbWUpLFxyXG4gICAgICApLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoZ3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAoZ3JvdXBzWzBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwcztcclxuICB9KTtcclxuXHJcbiAgdHJhY2tCeUZuOiBUcmFja0J5RnVuY3Rpb248UGVybWlzc2lvbkdyb3VwRHRvPiA9IChfLCBpdGVtKSA9PiBpdGVtLm5hbWU7XHJcblxyXG4gIGdldENoZWNrZWQobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKHRoaXMucGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IG5hbWUpIHx8IHsgaXNHcmFudGVkOiBmYWxzZSB9KS5pc0dyYW50ZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZEdyb3VwKGdyb3VwOiBQZXJtaXNzaW9uR3JvdXBEdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hcmdpbiA9IGBtYXJnaW4tJHtcclxuICAgICAgKHRoaXMuZG9jdW1lbnQuYm9keT8uZGlyIGFzIExvY2FsZURpcmVjdGlvbikgPT09ICdydGwnID8gJ3JpZ2h0JyA6ICdsZWZ0J1xyXG4gICAgfS5weGA7XHJcblxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPVxyXG4gICAgICAodGhpcy5kYXRhLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8ubmFtZSkgfHwge30pLnBlcm1pc3Npb25zIHx8XHJcbiAgICAgIFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucy5tYXAoXHJcbiAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgICAoe1xyXG4gICAgICAgICAgLi4ucGVybWlzc2lvbixcclxuICAgICAgICAgIHN0eWxlOiB7IFttYXJnaW5dOiBmaW5kTWFyZ2luKHBlcm1pc3Npb25zLCBwZXJtaXNzaW9uKSB9LFxyXG4gICAgICAgICAgaXNHcmFudGVkOiAodGhpcy5wZXJtaXNzaW9ucy5maW5kKHBlciA9PiBwZXIubmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lKSB8fCB7fSkuaXNHcmFudGVkLFxyXG4gICAgICAgIH0pIGFzIHVua25vd24gYXMgUGVybWlzc2lvbldpdGhTdHlsZSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZChwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdKSB7XHJcbiAgICBpZiAocGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYiA9IHBlcm1pc3Npb25zLmV2ZXJ5KFxyXG4gICAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgICAgIHBlcm1pc3Npb24uaXNHcmFudGVkICYmXHJcbiAgICAgICAgICBwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnM/LmV2ZXJ5KHAgPT4gcC5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShncmFudGVkUHJvdmlkZXJzOiBQcm92aWRlckluZm9EdG9bXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGdyYW50ZWRQcm92aWRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBncmFudGVkUHJvdmlkZXJzLmZpbmRJbmRleChwID0+IHAucHJvdmlkZXJOYW1lICE9PSB0aGlzLnByb3ZpZGVyTmFtZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDaGVja2JveChjbGlja2VkUGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgY29uc3QgeyBpc0dyYW50ZWQsIGdyYW50ZWRQcm92aWRlcnMgfSA9IGNsaWNrZWRQZXJtaXNzaW9uO1xyXG4gICAgaWYgKGlzR3JhbnRlZCAmJiB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUoZ3JhbnRlZFByb3ZpZGVycykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cCh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlUGVybWlzc2lvblN0YXR1cyhjbGlja2VkUGVybWlzc2lvbik7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy5zZXRQYXJlbnRDbGlja2VkKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVBlcm1pc3Npb25TdGF0dXMoY2xpY2tlZFBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXJtaXNzaW9uID0+IHtcclxuICAgICAgY29uc3QgaXNFeGFjdE1hdGNoID0gY2xpY2tlZFBlcm1pc3Npb24ubmFtZSA9PSBwZXJtaXNzaW9uLm5hbWU7XHJcbiAgICAgIGNvbnN0IGlzUGFyZW50T2ZQZXJtaXNzaW9uID0gY2xpY2tlZFBlcm1pc3Npb24ucGFyZW50TmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lO1xyXG4gICAgICBjb25zdCBpc0NoaWxkT2ZQZXJtaXNzaW9uID0gY2xpY2tlZFBlcm1pc3Npb24ubmFtZSA9PT0gcGVybWlzc2lvbi5wYXJlbnROYW1lO1xyXG5cclxuICAgICAgaWYgKGlzRXhhY3RNYXRjaCkge1xyXG4gICAgICAgIHJldHVybiB7IC4uLnBlcm1pc3Npb24sIGlzR3JhbnRlZDogIXBlcm1pc3Npb24uaXNHcmFudGVkIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0NoaWxkT2ZQZXJtaXNzaW9uICYmIHBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucGVybWlzc2lvbiwgaXNHcmFudGVkOiBmYWxzZSB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNQYXJlbnRPZlBlcm1pc3Npb24gJiYgIXBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucGVybWlzc2lvbiwgaXNHcmFudGVkOiB0cnVlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBwZXJtaXNzaW9uO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYXJlbnRDbGlja2VkKGNsaWNrZWRQZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgICBpZiAoY2xpY2tlZFBlcm1pc3Npb24ucGFyZW50TmFtZSkge1xyXG4gICAgICBjb25zdCBwYXJlbnRQZXJtaXNzaW9ucyA9IGZpbmRQYXJlbnRQZXJtaXNzaW9ucyh0aGlzLnBlcm1pc3Npb25zLCBjbGlja2VkUGVybWlzc2lvbik7XHJcbiAgICAgIGlmIChwYXJlbnRQZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50TmFtZXMgPSBuZXcgU2V0KHBhcmVudFBlcm1pc3Npb25zLm1hcChwYXJlbnQgPT4gcGFyZW50Lm5hbWUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgICAgICBsZXQgdXBkYXRlZElzR3JhbnRlZCA9IHBlci5pc0dyYW50ZWQ7XHJcblxyXG4gICAgICAgICAgaWYgKHBlci5wYXJlbnROYW1lID09PSBjbGlja2VkUGVybWlzc2lvbi5uYW1lICYmICFjbGlja2VkUGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICAgICAgdXBkYXRlZElzR3JhbnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChwYXJlbnROYW1lcy5oYXMocGVyLm5hbWUpKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRJc0dyYW50ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiB7IC4uLnBlciwgaXNHcmFudGVkOiB1cGRhdGVkSXNHcmFudGVkIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXIgPT4ge1xyXG4gICAgICBjb25zdCBwYXJlbnRzID0gZmluZFBhcmVudFBlcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnMsIHBlcik7XHJcbiAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCByb290UGFyZW50ID0gcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICBpZiAocm9vdFBhcmVudC5uYW1lID09PSBjbGlja2VkUGVybWlzc2lvbi5uYW1lICYmICFyb290UGFyZW50LmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IGZhbHNlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwZXI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyhjbGlja2VkUGVybWlzc2lvbnM6IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zID0gdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgIGlmIChwZXIubmFtZSA9PT0gY2xpY2tlZFBlcm1pc3Npb25zLm5hbWUpIHtcclxuICAgICAgICBwZXIuaXNHcmFudGVkID0gIXBlci5pc0dyYW50ZWQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VGFiQ2hlY2tib3hTdGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVQZXJtaXNzaW9ucyA9IHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT5cclxuICAgICAgcGVyLmdyYW50ZWRQcm92aWRlcnMuZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSA9PT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFBlcm1pc3Npb25zID0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT4gcGVyLmlzR3JhbnRlZCk7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LWFsbC1pbi10aGlzLXRhYnMnKSBhcyBhbnk7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxlY3RlZFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBlbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEdyYW50Q2hlY2tib3hTdGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PlxyXG4gICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwID0+IHAucHJvdmlkZXJOYW1lID09PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucyA9IHNlbGVjdGFibGVQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+IHBlci5pc0dyYW50ZWQpO1xyXG4gICAgY29uc3QgY2hlY2tib3hFbGVtZW50ID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LWFsbC1pbi1hbGwtdGFicycpIGFzIGFueTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucy5sZW5ndGggPT09IHNlbGVjdGFibGVQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgY2hlY2tib3hFbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGxUYWIgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZEFsbFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tib3hFbGVtZW50LmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGlja1NlbGVjdFRoaXNUYWIoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5mb3JFYWNoKHBlcm1pc3Npb24gPT4ge1xyXG4gICAgICBpZiAocGVybWlzc2lvbi5pc0dyYW50ZWQgJiYgdGhpcy5pc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycykpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBlcm1pc3Npb25zLmZpbmRJbmRleChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ubmFtZSk7XHJcblxyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zID0gW1xyXG4gICAgICAgIC4uLnRoaXMucGVybWlzc2lvbnMuc2xpY2UoMCwgaW5kZXgpLFxyXG4gICAgICAgIHsgLi4udGhpcy5wZXJtaXNzaW9uc1tpbmRleF0sIGlzR3JhbnRlZDogIXRoaXMuc2VsZWN0VGhpc1RhYiB9LFxyXG4gICAgICAgIC4uLnRoaXMucGVybWlzc2lvbnMuc2xpY2UoaW5kZXggKyAxKSxcclxuICAgICAgXTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrU2VsZWN0QWxsKCkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyKCkpIHtcclxuICAgICAgdGhpcy5maWx0ZXIuc2V0KCcnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5tYXAocGVybWlzc2lvbiA9PiAoe1xyXG4gICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICBpc0dyYW50ZWQ6XHJcbiAgICAgICAgdGhpcy5pc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycykgfHwgIXRoaXMuc2VsZWN0QWxsVGFiLFxyXG4gICAgfSkpO1xyXG5cclxuICAgIGlmICghdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9ICF0aGlzLnNlbGVjdEFsbFRhYjtcclxuICAgICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlcigpKSB7XHJcbiAgICAgICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoYW5nZUdyb3VwKHRoaXMuc2VsZWN0ZWRHcm91cCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUdyb3VwKGdyb3VwOiBQZXJtaXNzaW9uR3JvdXBEdG8pIHtcclxuICAgIHRoaXMuc2V0RGlzYWJsZWQoZ3JvdXAucGVybWlzc2lvbnMpO1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKGdyb3VwKTtcclxuICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0KCkge1xyXG4gICAgY29uc3QgdW5jaGFuZ2VkUGVybWlzc2lvbnMgPSBnZXRQZXJtaXNzaW9ucyh0aGlzLmRhdGEuZ3JvdXBzKTtcclxuXHJcbiAgICBjb25zdCBjaGFuZ2VkUGVybWlzc2lvbnM6IFVwZGF0ZVBlcm1pc3Npb25EdG9bXSA9IHRoaXMucGVybWlzc2lvbnNcclxuICAgICAgLmZpbHRlcihwZXIgPT5cclxuICAgICAgICAodW5jaGFuZ2VkUGVybWlzc2lvbnMuZmluZCh1bmNoYW5nZWQgPT4gdW5jaGFuZ2VkLm5hbWUgPT09IHBlci5uYW1lKSB8fCB7fSkuaXNHcmFudGVkID09PVxyXG4gICAgICAgIHBlci5pc0dyYW50ZWRcclxuICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgIDogdHJ1ZSxcclxuICAgICAgKVxyXG4gICAgICAubWFwKCh7IG5hbWUsIGlzR3JhbnRlZCB9KSA9PiAoeyBuYW1lLCBpc0dyYW50ZWQgfSkpO1xyXG5cclxuICAgIGlmICghY2hhbmdlZFBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubW9kYWxCdXN5ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAudXBkYXRlKHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5LCB7IHBlcm1pc3Npb25zOiBjaGFuZ2VkUGVybWlzc2lvbnMgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XHJcbiAgICAgICAgICB0aGlzLnNob3VsZEZldGNoQXBwQ29uZmlnKCkgPyB0aGlzLmNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpIDogb2YobnVsbCksXHJcbiAgICAgICAgKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5tb2RhbEJ1c3kgPSBmYWxzZSkpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcygnQWJwVWk6OlNhdmVkU3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1vZGFsKCkge1xyXG4gICAgaWYgKCF0aGlzLnByb3ZpZGVyS2V5IHx8ICF0aGlzLnByb3ZpZGVyTmFtZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVyIEtleSBhbmQgUHJvdmlkZXIgTmFtZSBhcmUgcmVxdWlyZWQuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXQodGhpcy5wcm92aWRlck5hbWUsIHRoaXMucHJvdmlkZXJLZXkpLnBpcGUoXHJcbiAgICAgIHRhcCgocGVybWlzc2lvblJlczogR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8pID0+IHtcclxuICAgICAgICBjb25zdCB7IGdyb3VwcyB9ID0gcGVybWlzc2lvblJlcyB8fCB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gcGVybWlzc2lvblJlcztcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25Hcm91cFNpZ25hbC5zZXQoZ3JvdXBzKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnMoZ3JvdXBzKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAoZ3JvdXBzWzBdKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IHRoaXMucGVybWlzc2lvbnMuZXZlcnkoXHJcbiAgICAgICAgICBwZXIgPT5cclxuICAgICAgICAgICAgcGVyLmlzR3JhbnRlZCAmJlxyXG4gICAgICAgICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwcm92aWRlciA9PiBwcm92aWRlci5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbml0TW9kYWwoKSB7XHJcbiAgICAvLyBUT0RPOiBSZWZhY3RvclxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RGlzYWJsZWQodGhpcy5zZWxlY3RlZEdyb3VwPy5wZXJtaXNzaW9ucyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25lZENvdW50KGdyb3VwTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIHZhbCkgPT4gKHZhbC5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSAmJiB2YWwuaXNHcmFudGVkID8gYWNjICsgMSA6IGFjYyksXHJcbiAgICAgIDAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkRmV0Y2hBcHBDb25maWcoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lKCdjdXJyZW50VXNlcicpIGFzIEN1cnJlbnRVc2VyRHRvO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1InKSByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZShyb2xlID0+IHJvbGUgPT09IHRoaXMucHJvdmlkZXJLZXkpO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1UnKSByZXR1cm4gY3VycmVudFVzZXIuaWQgPT09IHRoaXMucHJvdmlkZXJLZXk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZmluZFBhcmVudFBlcm1pc3Npb25zKFxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10sXHJcbiAgcGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuKTogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdIHtcclxuICBjb25zdCBwZXJtaXNzaW9uTWFwID0gbmV3IE1hcChwZXJtaXNzaW9ucy5tYXAocCA9PiBbcC5uYW1lLCBwXSkpO1xyXG4gIGxldCBjdXJyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25NYXAuZ2V0KHBlcm1pc3Npb24ubmFtZSkgPz8gbnVsbDtcclxuICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdID0gW107XHJcblxyXG4gIHdoaWxlIChjdXJyZW50UGVybWlzc2lvbiAmJiBjdXJyZW50UGVybWlzc2lvbi5wYXJlbnROYW1lKSB7XHJcbiAgICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uID0gcGVybWlzc2lvbk1hcC5nZXQoY3VycmVudFBlcm1pc3Npb24ucGFyZW50TmFtZSk7XHJcbiAgICBpZiAoIXBhcmVudFBlcm1pc3Npb24pIHtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBwYXJlbnRQZXJtaXNzaW9ucy5wdXNoKHBhcmVudFBlcm1pc3Npb24pO1xyXG4gICAgY3VycmVudFBlcm1pc3Npb24gPSBwYXJlbnRQZXJtaXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcmVudFBlcm1pc3Npb25zO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTWFyZ2luKFxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10sXHJcbiAgcGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuKTogbnVtYmVyIHtcclxuICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uID0gcGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ucGFyZW50TmFtZSk7XHJcblxyXG4gIGlmIChwYXJlbnRQZXJtaXNzaW9uICYmIHBhcmVudFBlcm1pc3Npb24ucGFyZW50TmFtZSkge1xyXG4gICAgbGV0IG1hcmdpbiA9IDIwO1xyXG4gICAgcmV0dXJuIChtYXJnaW4gKz0gZmluZE1hcmdpbihwZXJtaXNzaW9ucywgcGFyZW50UGVybWlzc2lvbikpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcmVudFBlcm1pc3Npb24gPyAyMCA6IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBlcm1pc3Npb25zKGdyb3VwczogUGVybWlzc2lvbkdyb3VwRHRvW10pOiBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZVtdIHtcclxuICByZXR1cm4gZ3JvdXBzLnJlZHVjZShcclxuICAgIChhY2MsIHZhbCkgPT4gW1xyXG4gICAgICAuLi5hY2MsXHJcbiAgICAgIC4uLnZhbC5wZXJtaXNzaW9ucy5tYXA8UGVybWlzc2lvbldpdGhHcm91cE5hbWU+KHAgPT4gKHsgLi4ucCwgZ3JvdXBOYW1lOiB2YWwubmFtZSB8fCAnJyB9KSksXHJcbiAgICBdLFxyXG4gICAgW10gYXMgUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSxcclxuICApO1xyXG59XHJcbiIsIjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnLCBzY3JvbGxhYmxlOiBmYWxzZSB9XCI+XHJcbiAgQGlmIChkYXRhLmVudGl0eURpc3BsYXlOYW1lIHx8IGVudGl0eURpc3BsYXlOYW1lKSB7XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgICAgPGg0PlxyXG4gICAgICAgIHt7ICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6UGVybWlzc2lvbnMnIHwgYWJwTG9jYWxpemF0aW9uIH19IC1cclxuICAgICAgICB7eyBlbnRpdHlEaXNwbGF5TmFtZSB8fCBkYXRhLmVudGl0eURpc3BsYXlOYW1lIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiIGlkPVwiYmFzaWMtYWRkb24xXCI+PGkgY2xhc3M9XCJiaSBiaS1zZWFyY2hcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgIGlkPVwicGVybWlzc2lvbi1zZWFyY2hcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyXCJcclxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXIoKVwiXHJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyLnNldCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAjc2VsZWN0QWxsSW5BbGxUYWJzUmVmXHJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtaW4tYWxsLXRhYnNcIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3QtYWxsLWluLWFsbC10YWJzXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0QWxsVGFiXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja1NlbGVjdEFsbCgpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRTZWxlY3RBbGxJbkFsbFRhYnNcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiPnt7XHJcbiAgICAgICAgICAgICAgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpTZWxlY3RBbGxJbkFsbFRhYnMnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQtNCBwLTNcIj5cclxuICAgICAgICA8bGVnZW5kIGNsYXNzPVwicHgtMSBoNSBtYi0wXCI+XHJcbiAgICAgICAgICB7eyAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlBlcm1pc3Npb25Hcm91cCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICA8L2xlZ2VuZD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gbHB4LXNjcm9sbC1waWxscy1jb250YWluZXIgc2Nyb2xsLWluLW1vZGFsXCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi1waWxscyBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoZ3JvdXAgb2YgcGVybWlzc2lvbkdyb3VwcygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiYm9yZGVyIG5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICh7IGFzc2lnbmVkQ291bnQ6IGdldEFzc2lnbmVkQ291bnQoZ3JvdXAubmFtZSkgfTsgYXMgY291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRHcm91cD8ubmFtZSA9PT0gZ3JvdXA/Lm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGFuZ2VHcm91cChncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0KT1cInNldERpc2FibGVkKGdyb3VwLnBlcm1pc3Npb25zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmZvbnQtd2VpZ2h0LWJvbGRdPVwiY291bnQuYXNzaWduZWRDb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5kaXNwbGF5TmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY291bnQuYXNzaWduZWRDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPih7eyBjb3VudC5hc3NpZ25lZENvdW50IH19KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBzY3JvbGwtaW4tbW9kYWxcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBzLTFcIj5cclxuICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgI3NlbGVjdEFsbEluVGhpc1RhYnNSZWZcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdFRoaXNUYWJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2VsZWN0QWxsVGFiXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja1NlbGVjdFRoaXNUYWIoKVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpTZWxlY3RBbGxJblRoaXNUYWInIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwibXktMlwiIC8+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChwZXJtaXNzaW9uIG9mIHNlbGVjdGVkR3JvdXBQZXJtaXNzaW9uczsgdHJhY2sgJGluZGV4OyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInBlcm1pc3Npb24uc3R5bGVcIiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgI3Blcm1pc3Npb25DaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0Q2hlY2tlZChwZXJtaXNzaW9uLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cInBlcm1pc3Npb24ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0NoZWNrYm94KHBlcm1pc3Npb24sIHBlcm1pc3Npb25DaGVja2JveC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFthdHRyLmZvcl09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPnt7IHBlcm1pc3Npb24uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWhpZGVCYWRnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAocHJvdmlkZXIgb2YgcGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLXByaW1hcnkgdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBwcm92aWRlci5wcm92aWRlck5hbWUgfX06IHt7IHByb3ZpZGVyLnByb3ZpZGVyS2V5IH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgYWJwQ2xvc2U+XHJcbiAgICAgICAge3sgJ0FicElkZW50aXR5OjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIChjbGljayk9XCJzdWJtaXQoKVwiPnt7XHJcbiAgICAgICAgJ0FicElkZW50aXR5OjpTYXZlJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICB9fTwvYWJwLWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgfVxyXG48L2FicC1tb2RhbD5cclxuIl19","import { NgModule } from '@angular/core';\nimport { PermissionManagementComponent } from './components';\nimport * as i0 from \"@angular/core\";\nexport class PermissionManagementModule {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n    static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, imports: [PermissionManagementComponent], exports: [PermissionManagementComponent] }); }\n    static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, imports: [PermissionManagementComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, decorators: [{\n            type: NgModule,\n            args: [{\n                    declarations: [],\n                    imports: [PermissionManagementComponent],\n                    exports: [PermissionManagementComponent],\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL3Blcm1pc3Npb24tbWFuYWdlbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBTzdELE1BQU0sT0FBTywwQkFBMEI7OEdBQTFCLDBCQUEwQjsrR0FBMUIsMEJBQTBCLFlBSDNCLDZCQUE2QixhQUM3Qiw2QkFBNkI7K0dBRTVCLDBCQUEwQixZQUgzQiw2QkFBNkI7OzJGQUc1QiwwQkFBMEI7a0JBTHRDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDekMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW10sXHJcbiAgaW1wb3J0czogW1Blcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50XSxcclxuICBleHBvcnRzOiBbUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbk1hbmFnZW1lbnRNb2R1bGUge31cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public-api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLnBlcm1pc3Npb24tbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvYWJwLW5nLnBlcm1pc3Npb24tbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19"],"names":[],"mappings":"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"}