aril 1.0.10 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,248 @@
1
+ import { NgClass } from '@angular/common';
2
+ import { Component, HostListener } from '@angular/core';
3
+ import { toSignal } from '@angular/core/rxjs-interop';
4
+ import { NavigationEnd, RouterLink } from '@angular/router';
5
+ import { TooltipModule } from 'primeng/tooltip';
6
+ import { filter } from 'rxjs';
7
+ import { TranslateJsonPipe } from 'aril/util/pipes';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "aril/util/pipes";
10
+ import * as i2 from "../../service/app.menu.service";
11
+ import * as i3 from "@angular/router";
12
+ import * as i4 from "keycloak-angular";
13
+ import * as i5 from "@ngneat/transloco";
14
+ import * as i6 from "../../service/app.layout.service";
15
+ import * as i7 from "primeng/tooltip";
16
+ export class ExpandableMenuComponent {
17
+ constructor(translateJsonPipe, menuService, router, keycloak, translocoService, layoutService) {
18
+ this.translateJsonPipe = translateJsonPipe;
19
+ this.menuService = menuService;
20
+ this.router = router;
21
+ this.keycloak = keycloak;
22
+ this.translocoService = translocoService;
23
+ this.layoutService = layoutService;
24
+ this.activeLang = toSignal(this.translocoService.langChanges$, { initialValue: 'tr' });
25
+ this.overlayMenuOpenSubscription = null;
26
+ this.routerSubscription = null;
27
+ this.username = this.keycloak.getUsername().charAt(0).toUpperCase();
28
+ this.sidebarIsLocked = false;
29
+ this.isHostMode = globalThis.isHostMode;
30
+ this.hostMenuItems = globalThis.hostMenuItems;
31
+ this.cachedMenuItems = [];
32
+ // Track selected main menu item
33
+ this.selectedMainItem = null;
34
+ this.selectedMainMenuItem = null;
35
+ this.secondarySidebarExpanded = false;
36
+ this.tooltipText = {
37
+ toggleButton: {
38
+ expanded: {
39
+ tr: 'Menüyü Gizle',
40
+ en: 'Hide Menu'
41
+ },
42
+ collapsed: {
43
+ tr: 'Menüyü Göster',
44
+ en: 'Show Menu'
45
+ }
46
+ },
47
+ lockButton: {
48
+ locked: {
49
+ tr: 'Otomatik Kapanmayı Aç',
50
+ en: 'Enable Auto-Close'
51
+ },
52
+ unlocked: {
53
+ tr: 'Menüyü Kilitle',
54
+ en: 'Lock Menu'
55
+ }
56
+ }
57
+ };
58
+ this.MAX_LENGTH = {
59
+ main: 8,
60
+ secondary: 20,
61
+ tertiary: 20
62
+ };
63
+ }
64
+ // Check if text is truncated and needs tooltip
65
+ isTextTruncated(label, lang, menuType = 'secondary') {
66
+ if (!label || !lang || !label[lang])
67
+ return false;
68
+ const text = label[lang];
69
+ const textLength = text.length;
70
+ const maxLength = menuType === 'nested' ? this.MAX_LENGTH.tertiary : this.MAX_LENGTH[menuType];
71
+ return textLength > maxLength;
72
+ }
73
+ // Recursively check if a menu item or its children match the current route
74
+ isActiveRoute(menuItem) {
75
+ if (!menuItem || !menuItem.routerLink)
76
+ return false;
77
+ // Get current URL path after the hash
78
+ const currentUrl = this.router.url;
79
+ const hashUrl = currentUrl.indexOf('#') > -1 ? currentUrl.split('#')[1] : currentUrl;
80
+ // Check for exact match first
81
+ if (hashUrl === menuItem.routerLink || hashUrl === '/' + menuItem.routerLink) {
82
+ return true;
83
+ }
84
+ // Check if current URL starts with the routerLink (handles child routes)
85
+ if (menuItem.routerLink !== '/' &&
86
+ (hashUrl.startsWith(menuItem.routerLink + '/') || hashUrl.startsWith('/' + menuItem.routerLink + '/'))) {
87
+ return true;
88
+ }
89
+ // Check child items if they exist
90
+ if (menuItem.items && menuItem.items.length > 0) {
91
+ return menuItem.items.some((childItem) => this.isActiveRoute(childItem));
92
+ }
93
+ return false;
94
+ }
95
+ ngOnInit() {
96
+ this.updateMenuItems();
97
+ this.initializeMenu();
98
+ this.loadSidebarLockState();
99
+ this.updateActiveMenuFromCurrentRoute();
100
+ // Subscribe to route changes to handle secondary sidebar closing
101
+ this.routerSubscription = this.router.events
102
+ .pipe(filter((event) => event instanceof NavigationEnd))
103
+ .subscribe(() => {
104
+ // Update active menu based on the new route
105
+ this.updateActiveMenuFromCurrentRoute();
106
+ // Close secondary sidebar on navigation if not locked
107
+ if (!this.sidebarIsLocked) {
108
+ this.secondarySidebarExpanded = false;
109
+ }
110
+ });
111
+ // Subscribe to overlay menu open notifications
112
+ this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {
113
+ if (this.layoutService.state.staticMenuMobileActive) {
114
+ this.secondarySidebarExpanded = true;
115
+ }
116
+ });
117
+ }
118
+ ngOnDestroy() {
119
+ if (this.overlayMenuOpenSubscription) {
120
+ this.overlayMenuOpenSubscription.unsubscribe();
121
+ }
122
+ if (this.routerSubscription) {
123
+ this.routerSubscription.unsubscribe();
124
+ }
125
+ }
126
+ loadSidebarLockState() {
127
+ const storedState = localStorage.getItem('sidebarIsLocked');
128
+ this.sidebarIsLocked = storedState === 'true';
129
+ }
130
+ saveSidebarLockState() {
131
+ localStorage.setItem('sidebarIsLocked', this.sidebarIsLocked.toString());
132
+ }
133
+ toggleSidebarLock() {
134
+ this.sidebarIsLocked = !this.sidebarIsLocked;
135
+ this.saveSidebarLockState();
136
+ }
137
+ // Initialize the menu with proper active state
138
+ initializeMenu() {
139
+ this.selectedMainItem = null;
140
+ this.selectedMainMenuItem = null;
141
+ this.secondarySidebarExpanded = false;
142
+ this.updateMenuItems();
143
+ }
144
+ updateMenuFromRootKey(index) {
145
+ this.updateMenuItems();
146
+ const menuItems = this.getMenuItems();
147
+ if (index >= 0 && index < menuItems.length) {
148
+ const item = menuItems[index];
149
+ if (!item.separator) {
150
+ this.selectedMainItem = index;
151
+ this.selectedMainMenuItem = item;
152
+ this.secondarySidebarExpanded = true;
153
+ }
154
+ }
155
+ }
156
+ updateMenuItems() {
157
+ this.cachedMenuItems = this.isHostMode ? this.hostMenuItems() : this.menuService.menuItems();
158
+ }
159
+ getMenuItems() {
160
+ return this.cachedMenuItems;
161
+ }
162
+ selectMainItem(index, item) {
163
+ if (item.routerLink && (!item.items || item.items.length === 0)) {
164
+ this.secondarySidebarExpanded = false;
165
+ this.selectedMainItem = index;
166
+ this.selectedMainMenuItem = item;
167
+ this.router.navigate([item.routerLink]);
168
+ return;
169
+ }
170
+ // Handle regular menu items with submenu
171
+ if (this.selectedMainItem === index) {
172
+ this.secondarySidebarExpanded = !this.secondarySidebarExpanded;
173
+ }
174
+ else {
175
+ this.selectedMainItem = index;
176
+ this.selectedMainMenuItem = item;
177
+ if (item.items && item.items.length > 0) {
178
+ this.secondarySidebarExpanded = true;
179
+ }
180
+ else {
181
+ this.secondarySidebarExpanded = false;
182
+ }
183
+ }
184
+ // For mobile devices, ensure the menu stays open
185
+ if (this.isMobile()) {
186
+ this.layoutService.state.staticMenuMobileActive = true;
187
+ }
188
+ }
189
+ toggleSecondarySidebar() {
190
+ this.secondarySidebarExpanded = !this.secondarySidebarExpanded;
191
+ }
192
+ isMobile() {
193
+ return this.layoutService.isMobile();
194
+ }
195
+ // Listen for resize events to handle responsive behavior for mobile
196
+ onResize() {
197
+ if (!this.isMobile() && this.layoutService.state.staticMenuMobileActive) {
198
+ this.layoutService.state.staticMenuMobileActive = false;
199
+ }
200
+ }
201
+ updateActiveMenuFromCurrentRoute() {
202
+ const menuItems = this.getMenuItems();
203
+ for (let i = 0; i < menuItems.length; i++) {
204
+ const menuItem = menuItems[i];
205
+ if (this.isActiveRoute(menuItem)) {
206
+ this.selectedMainItem = i;
207
+ this.selectedMainMenuItem = menuItem;
208
+ if (menuItem.items && menuItem.items.length > 0) {
209
+ if (!this.isMobile() && !this.secondarySidebarExpanded && !this.layoutService.state.staticMenuMobileActive) {
210
+ this.secondarySidebarExpanded = true;
211
+ }
212
+ }
213
+ else {
214
+ this.secondarySidebarExpanded = false;
215
+ }
216
+ return;
217
+ }
218
+ }
219
+ }
220
+ isHaveSelectedChildItem(item) {
221
+ if (!item || !item.items || item.items.length === 0)
222
+ return false;
223
+ for (const child of item.items) {
224
+ if (this.isActiveRoute(child)) {
225
+ return true;
226
+ }
227
+ if (child.items && child.items.length > 0) {
228
+ if (this.isHaveSelectedChildItem(child)) {
229
+ return true;
230
+ }
231
+ }
232
+ }
233
+ return false;
234
+ }
235
+ getLocalText(text) {
236
+ return this.translateJsonPipe.transform(text);
237
+ }
238
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ExpandableMenuComponent, deps: [{ token: i1.TranslateJsonPipe }, { token: i2.AppMenuService }, { token: i3.Router }, { token: i4.KeycloakService }, { token: i5.TranslocoService }, { token: i6.LayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
239
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ExpandableMenuComponent, isStandalone: true, selector: "app-expandable-menu", host: { listeners: { "window:resize": "onResize()" } }, providers: [TranslateJsonPipe], ngImport: i0, template: "<div class=\"new-layout-sidebar\">\r\n\t<!-- Main sidebar (first level) -->\r\n\t<div class=\"main-sidebar\">\r\n\t\t<div class=\"main-sidebar-header\">\r\n\t\t\t<div class=\"user-avatar\">\r\n\t\t\t\t<span>{{ username }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"main-sidebar-content\">\r\n\t\t\t<ul class=\"main-menu\">\r\n\t\t\t\t@for(item of getMenuItems(); track item; let i = $index){\r\n\t\t\t\t\t@if(!item.separator){\r\n\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(item) || isHaveSelectedChildItem(item)}\"\r\n\t\t\t\t\t\t(click)=\"selectMainItem(i, item)\"\r\n\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(item.label, activeLang(), 'main') ? (item.label && activeLang() ? item.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t<div class=\"main-menu-item\">\r\n\t\t\t\t\t\t\t<i [ngClass]=\"item.icon\" class=\"menu-icon\"></i>\r\n\t\t\t\t\t\t\t<small class=\"menu-label\">{{ item.label && activeLang() ? item.label[activeLang()!] || '' : '' }}</small>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t\t<!-- Toggle button at the bottom of main sidebar -->\r\n\t\t<div class=\"main-sidebar-footer\">\r\n\t\t\t<button class=\"sidebar-toggle-button\" (click)=\"toggleSecondarySidebar()\" \r\n\t\t\t\t[pTooltip]=\"!isMobile() ? (secondarySidebarExpanded ? getLocalText(tooltipText.toggleButton.expanded) : getLocalText(tooltipText.toggleButton.collapsed)) : ''\" \r\n\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t<i class=\"pi\" [ngClass]=\"secondarySidebarExpanded ? 'pi-angle-left' : 'pi-angle-right'\"></i>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<!-- Secondary sidebar (second level) -->\r\n\t<div class=\"secondary-sidebar\" [ngClass]=\"{'expanded': secondarySidebarExpanded}\">\r\n\t\t<!-- Content container wrapper to prevent jumps during transitions -->\r\n\t\t<div class=\"secondary-content-wrapper\">\r\n\t\t\t<!-- Secondary sidebar header -->\r\n\t\t\t<div class=\"secondary-sidebar-header\">\r\n\t\t\t\t<div class=\"secondary-header-content\">\r\n\t\t\t\t\t@if(selectedMainMenuItem){\r\n\t\t\t\t\t\t<h3 class=\"section-title\">\r\n\t\t\t\t\t\t\t<i [ngClass]=\"selectedMainMenuItem.icon\" class=\"section-icon\"></i>\r\n\t\t\t\t\t\t\t<span>{{ selectedMainMenuItem.label && activeLang() ? selectedMainMenuItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t<button class=\"sidebar-lock-button\" (click)=\"toggleSidebarLock()\" \r\n\t\t\t\t\t\t[pTooltip]=\"sidebarIsLocked ? getLocalText(tooltipText.lockButton.locked) : getLocalText(tooltipText.lockButton.unlocked)\" \r\n\t\t\t\t\t\ttooltipPosition=\"left\">\r\n\t\t\t\t\t\t<i class=\"pi\" [ngClass]=\"sidebarIsLocked ? 'pi-lock' : 'pi-lock-open'\"></i>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t\r\n\t\t\t<!-- Secondary sidebar content -->\r\n\t\t\t<div class=\"secondary-sidebar-content\">\r\n\t\t\t\t@if(selectedMainMenuItem){\r\n\t\t\t\t\t<ul class=\"secondary-menu\">\r\n\t\t\t\t\t\t@for(subItem of selectedMainMenuItem.items; track subItem; let i = $index){\r\n\t\t\t\t\t\t\t\t<!-- Create menu item -->\r\n\t\t\t\t\t\t\t\t<li class=\"secondary-menu-item\" [ngClass]=\"{'active': isActiveRoute(subItem)}\">\r\n\t\t\t\t\t\t\t\t\t<a [routerLink]=\"subItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"secondary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(subItem.label, activeLang(), 'secondary') ? (subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t<i [ngClass]=\"subItem.icon\" class=\"submenu-icon\"></i>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"submenu-label\">{{ subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t@if(subItem.items && subItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-angle-down submenu-toggle\"></i>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t<!-- Always render submenu if it exists -->\r\n\t\t\t\t\t\t\t\t\t @if(subItem.items && subItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t <ul class=\"tertiary-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t@for(childItem of subItem.items; track childItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"tertiary-menu-item\" [ngClass]=\"{'active': isActiveRoute(childItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"childItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"tertiary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(childItem.label, activeLang(), 'tertiary') ? (childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\">{{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.items && childItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-angle-down submenu-toggle\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- Always render deeper levels if they exist, also visible by default -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.items && childItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ul class=\"nested-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for(nestedItem of childItem.items; track nestedItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-item\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(nestedItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"nestedItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(nestedItem.label, activeLang(), 'nested') ? (nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\">{{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t </ul>\r\n\t\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n</div>\r\n", styles: [".new-layout-sidebar{display:flex;position:fixed;top:0;left:0;height:100%;z-index:1000;transition:transform .2s cubic-bezier(.4,0,.2,1)}.new-layout-sidebar .main-sidebar{width:64px;height:100%;background-color:#f8f9fa;border-right:1px solid #e9ecef;display:flex;flex-direction:column;align-items:center;box-shadow:none;z-index:2}.new-layout-sidebar .main-sidebar .main-sidebar-header{padding:16px 0;width:100%;display:flex;justify-content:center}.new-layout-sidebar .main-sidebar .main-sidebar-header .user-avatar{width:40px;height:40px;border-radius:50%;background-color:var(--primary-color);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:500;box-shadow:0 2px 4px #0000001a}.new-layout-sidebar .main-sidebar .main-sidebar-header .user-avatar span{font-size:18px}.new-layout-sidebar .main-sidebar .main-sidebar-content{padding:8px 0;width:100%;flex:1;overflow-y:auto}.new-layout-sidebar .main-sidebar .main-sidebar-content::-webkit-scrollbar{width:3px}.new-layout-sidebar .main-sidebar .main-sidebar-content::-webkit-scrollbar-thumb{background-color:#00000026;border-radius:3px}.new-layout-sidebar .main-sidebar .main-sidebar-content::-webkit-scrollbar-track{background-color:transparent}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu{list-style:none;padding:0;margin:0;width:100%}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li{width:100%;cursor:pointer;position:relative;overflow:hidden;margin-bottom:4px}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li .main-menu-item{display:flex;flex-direction:column;align-items:center;padding:12px 0;color:var(--text-muted);transition:all .2s ease}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li .main-menu-item .menu-icon{font-size:24px;margin-bottom:6px;transition:color .2s ease}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li .main-menu-item .menu-label{font-size:11px;font-weight:500;text-align:center;line-height:1.2;transition:color .2s ease;max-width:55px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li:hover .main-menu-item{color:var(--primary-color)}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li:hover:after{content:\"\";position:absolute;left:0;top:0;width:4px;height:100%;background-color:var(--primary-color);opacity:.9}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li.active{background-color:var(--primary-color)!important;position:relative}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li.active:before{content:\"\";position:absolute;left:0;top:0;width:4px;height:100%;background-color:var(--primary-color)}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li.active .main-menu-item{color:#fff!important}.new-layout-sidebar .main-sidebar .main-sidebar-footer{width:100%;padding:12px 0;display:flex;justify-content:center;align-items:center;border-top:1px solid rgba(0,0,0,.05)}.new-layout-sidebar .main-sidebar .main-sidebar-footer .sidebar-toggle-button{width:32px;height:32px;border-radius:4px;background-color:transparent;border:none;color:var(--text-muted);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;outline:none}.new-layout-sidebar .main-sidebar .main-sidebar-footer .sidebar-toggle-button:hover{background-color:#00000008;color:var(--primary-color)}.new-layout-sidebar .main-sidebar .main-sidebar-footer .sidebar-toggle-button:active{background-color:#0000000d}.new-layout-sidebar .main-sidebar .main-sidebar-footer .sidebar-toggle-button .pi{font-size:14px}.new-layout-sidebar .secondary-sidebar{width:0;height:100%;background-color:var(--bg-light);position:relative;transition:width .2s cubic-bezier(.4,0,.2,1);box-shadow:2px 0 5px #0000000d;z-index:1;overflow:hidden}.new-layout-sidebar .secondary-sidebar .secondary-content-wrapper{position:absolute;top:0;left:0;width:240px;height:100%;display:flex;flex-direction:column;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease}.new-layout-sidebar .secondary-sidebar.expanded{width:240px}.new-layout-sidebar .secondary-sidebar.expanded .secondary-content-wrapper{opacity:1;visibility:visible;pointer-events:auto}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header{height:70px;padding:0 16px;display:flex;align-items:center;border-bottom:1px solid var(--border-color);background-color:var(--bg-white);flex-shrink:0}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content{width:100%;display:flex;align-items:center;justify-content:space-between}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .section-title{font-size:15px;font-weight:600;color:var(--text-dark);margin:0;padding:0 8px;white-space:nowrap;display:flex;align-items:center}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .section-title .section-icon{font-size:18px;margin-right:12px;color:var(--primary-color)}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .section-title span{flex:1}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .sidebar-lock-button{width:28px;height:28px;border-radius:4px;background-color:transparent;border:none;color:var(--text-muted);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;outline:none;padding:0;margin-left:8px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .sidebar-lock-button .pi{font-size:14px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .sidebar-lock-button:hover{background-color:#00000008;color:var(--primary-color)}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .sidebar-lock-button:active{background-color:#0000000d}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content{padding:12px;flex:1;overflow-y:auto}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content::-webkit-scrollbar{width:3px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content::-webkit-scrollbar-thumb{background-color:#00000026;border-radius:3px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content::-webkit-scrollbar-track{background-color:transparent}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu{list-style:none;padding:0;margin:0}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item{margin-bottom:4px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .secondary-menu-link{display:flex;align-items:center;padding:10px 12px;border-radius:4px;color:var(--text-dark);text-decoration:none;transition:background-color .2s ease,color .2s ease;white-space:nowrap;position:relative}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .secondary-menu-link .submenu-icon{font-size:18px;margin-right:12px;color:var(--text-muted);flex-shrink:0;position:relative;transition:color .2s ease}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .secondary-menu-link .submenu-label{flex:1;font-size:14px;font-weight:500;color:var(--text-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative;transition:color .2s ease;max-width:160px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .secondary-menu-link .submenu-toggle{font-size:14px;color:var(--text-muted);transition:transform .2s ease;flex-shrink:0;position:relative}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item:hover .secondary-menu-link{color:var(--primary-color);background-color:#1a365d0a}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item:hover .secondary-menu-link .submenu-icon,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item:hover .secondary-menu-link .submenu-label,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item:hover .secondary-menu-link .submenu-toggle{color:var(--primary-color)}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item.active>.secondary-menu-link{background-color:var(--primary-color)!important;color:#fff!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item.active>.secondary-menu-link .submenu-icon,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item.active>.secondary-menu-link .submenu-label,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item.active>.secondary-menu-link .submenu-toggle{color:#fff!important}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu{list-style:none;padding:0;margin:4px 0 8px 10px;max-height:1000px;overflow:hidden;transition:max-height .3s ease}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu.always-open{display:block!important}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item{margin-bottom:3px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item:before{display:none}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item .tertiary-menu-link{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:4px;color:var(--text-dark);text-decoration:none;font-size:13.5px;font-weight:500;transition:background-color .2s ease,color .2s ease;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item .tertiary-menu-link .tertiary-label{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-dark)}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item .tertiary-menu-link .submenu-toggle{font-size:12px;color:var(--text-muted);transition:transform .2s ease;flex-shrink:0}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link{color:var(--primary-color);background-color:#1a365d0a}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link .tertiary-label,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link .submenu-toggle{color:var(--primary-color)}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item.active .tertiary-menu-link{color:#fff!important;background-color:var(--primary-color)!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item.active .tertiary-menu-link .tertiary-label,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item.active .tertiary-menu-link .submenu-toggle{color:#fff!important}.secondary-menu-item.active .secondary-menu-link,.tertiary-menu-item.active .tertiary-menu-link{background-color:var(--primary-color)!important;color:#fff!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.main-menu li.active{background-color:var(--primary-color)!important}.main-menu li.active .main-menu-item{color:#fff!important}.submenu-label,.tertiary-label{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-dark)}.menu-label{max-width:60px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.secondary-menu-link:hover,.tertiary-menu-link:hover{background-color:#1a365d0a!important;transition:background-color .2s ease}.main-sidebar-content::-webkit-scrollbar,.secondary-sidebar-content::-webkit-scrollbar{width:3px}.main-sidebar-content::-webkit-scrollbar-thumb,.secondary-sidebar-content::-webkit-scrollbar-thumb{background-color:#00000026;border-radius:3px}.main-sidebar-content::-webkit-scrollbar-track,.secondary-sidebar-content::-webkit-scrollbar-track{background-color:transparent}@media screen and (max-width: 991px){.new-layout-sidebar{transform:translate(-100%);box-shadow:0 0 15px #0003!important}.new-layout-sidebar .secondary-sidebar.expanded{width:240px}}:host-context(.layout-mobile-active) .new-layout-sidebar{transform:translate(0)!important}.layout-mobile-active .new-layout-sidebar{transform:translate(0)!important}.layout-mask{display:none}.layout-mobile-active .layout-mask{display:block}.tertiary-menu{list-style:none;padding:0;margin:4px 0 8px 10px;max-height:1000px;overflow:hidden;transition:max-height .3s ease}.tertiary-menu.always-open{display:block!important}.tertiary-menu .tertiary-menu-item{margin-bottom:3px}.tertiary-menu .tertiary-menu-item:before{display:none}.tertiary-menu .tertiary-menu-item .tertiary-menu-link{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:4px;color:var(--text-dark);text-decoration:none;font-size:13.5px;font-weight:500;transition:background-color .2s ease,color .2s ease;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}.tertiary-menu .tertiary-menu-item .tertiary-menu-link .tertiary-label{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-dark)}.tertiary-menu .tertiary-menu-item .tertiary-menu-link .submenu-toggle{font-size:12px;color:var(--text-muted);transition:transform .2s ease;flex-shrink:0}.tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link{color:var(--primary-color);background-color:#1a365d0a}.tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link .tertiary-label,.tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link .submenu-toggle{color:var(--primary-color)}.tertiary-menu .tertiary-menu-item.active .tertiary-menu-link{color:#fff!important;background-color:var(--primary-color)!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.tertiary-menu .tertiary-menu-item.active .tertiary-menu-link .tertiary-label,.tertiary-menu .tertiary-menu-item.active .tertiary-menu-link .submenu-toggle{color:#fff!important}.nested-menu{padding:0 0 0 10px;list-style:none;overflow:hidden;max-height:1000px;margin:4px 0 6px 10px}.nested-menu.always-open{display:block!important}.nested-menu.level-1,.nested-menu.level-2,.nested-menu.level-3,.nested-menu.level-4,.nested-menu.level-5,.nested-menu.level-6{padding-left:10px}.nested-menu-item{position:relative;margin:3px 0}.nested-menu-item:before{display:none}.nested-menu-item .nested-menu-link{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;color:var(--text-color);text-decoration:none;font-size:13px;border-radius:4px;transition:all .2s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nested-menu-item .nested-menu-link .nested-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:170px}.nested-menu-item .nested-menu-link .submenu-toggle{font-size:12px;color:var(--text-muted);transition:transform .2s ease;flex-shrink:0}.nested-menu-item:hover .nested-menu-link{background-color:#1a365d0a;color:var(--primary-color)}.nested-menu-item:hover .nested-menu-link .nested-label,.nested-menu-item:hover .nested-menu-link .submenu-toggle{color:var(--primary-color)}.nested-menu-item.active>.nested-menu-link{color:#fff!important;background-color:var(--primary-color)!important;font-weight:500!important}.nested-menu-item.active>.nested-menu-link .nested-label,.nested-menu-item.active>.nested-menu-link .submenu-toggle{color:#fff!important}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] }); }
240
+ }
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ExpandableMenuComponent, decorators: [{
242
+ type: Component,
243
+ args: [{ standalone: true, selector: 'app-expandable-menu', imports: [RouterLink, NgClass, TooltipModule], providers: [TranslateJsonPipe], template: "<div class=\"new-layout-sidebar\">\r\n\t<!-- Main sidebar (first level) -->\r\n\t<div class=\"main-sidebar\">\r\n\t\t<div class=\"main-sidebar-header\">\r\n\t\t\t<div class=\"user-avatar\">\r\n\t\t\t\t<span>{{ username }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"main-sidebar-content\">\r\n\t\t\t<ul class=\"main-menu\">\r\n\t\t\t\t@for(item of getMenuItems(); track item; let i = $index){\r\n\t\t\t\t\t@if(!item.separator){\r\n\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(item) || isHaveSelectedChildItem(item)}\"\r\n\t\t\t\t\t\t(click)=\"selectMainItem(i, item)\"\r\n\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(item.label, activeLang(), 'main') ? (item.label && activeLang() ? item.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t<div class=\"main-menu-item\">\r\n\t\t\t\t\t\t\t<i [ngClass]=\"item.icon\" class=\"menu-icon\"></i>\r\n\t\t\t\t\t\t\t<small class=\"menu-label\">{{ item.label && activeLang() ? item.label[activeLang()!] || '' : '' }}</small>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t\t<!-- Toggle button at the bottom of main sidebar -->\r\n\t\t<div class=\"main-sidebar-footer\">\r\n\t\t\t<button class=\"sidebar-toggle-button\" (click)=\"toggleSecondarySidebar()\" \r\n\t\t\t\t[pTooltip]=\"!isMobile() ? (secondarySidebarExpanded ? getLocalText(tooltipText.toggleButton.expanded) : getLocalText(tooltipText.toggleButton.collapsed)) : ''\" \r\n\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t<i class=\"pi\" [ngClass]=\"secondarySidebarExpanded ? 'pi-angle-left' : 'pi-angle-right'\"></i>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<!-- Secondary sidebar (second level) -->\r\n\t<div class=\"secondary-sidebar\" [ngClass]=\"{'expanded': secondarySidebarExpanded}\">\r\n\t\t<!-- Content container wrapper to prevent jumps during transitions -->\r\n\t\t<div class=\"secondary-content-wrapper\">\r\n\t\t\t<!-- Secondary sidebar header -->\r\n\t\t\t<div class=\"secondary-sidebar-header\">\r\n\t\t\t\t<div class=\"secondary-header-content\">\r\n\t\t\t\t\t@if(selectedMainMenuItem){\r\n\t\t\t\t\t\t<h3 class=\"section-title\">\r\n\t\t\t\t\t\t\t<i [ngClass]=\"selectedMainMenuItem.icon\" class=\"section-icon\"></i>\r\n\t\t\t\t\t\t\t<span>{{ selectedMainMenuItem.label && activeLang() ? selectedMainMenuItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t<button class=\"sidebar-lock-button\" (click)=\"toggleSidebarLock()\" \r\n\t\t\t\t\t\t[pTooltip]=\"sidebarIsLocked ? getLocalText(tooltipText.lockButton.locked) : getLocalText(tooltipText.lockButton.unlocked)\" \r\n\t\t\t\t\t\ttooltipPosition=\"left\">\r\n\t\t\t\t\t\t<i class=\"pi\" [ngClass]=\"sidebarIsLocked ? 'pi-lock' : 'pi-lock-open'\"></i>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t\r\n\t\t\t<!-- Secondary sidebar content -->\r\n\t\t\t<div class=\"secondary-sidebar-content\">\r\n\t\t\t\t@if(selectedMainMenuItem){\r\n\t\t\t\t\t<ul class=\"secondary-menu\">\r\n\t\t\t\t\t\t@for(subItem of selectedMainMenuItem.items; track subItem; let i = $index){\r\n\t\t\t\t\t\t\t\t<!-- Create menu item -->\r\n\t\t\t\t\t\t\t\t<li class=\"secondary-menu-item\" [ngClass]=\"{'active': isActiveRoute(subItem)}\">\r\n\t\t\t\t\t\t\t\t\t<a [routerLink]=\"subItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"secondary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(subItem.label, activeLang(), 'secondary') ? (subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t<i [ngClass]=\"subItem.icon\" class=\"submenu-icon\"></i>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"submenu-label\">{{ subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t@if(subItem.items && subItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-angle-down submenu-toggle\"></i>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t<!-- Always render submenu if it exists -->\r\n\t\t\t\t\t\t\t\t\t @if(subItem.items && subItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t <ul class=\"tertiary-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t@for(childItem of subItem.items; track childItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"tertiary-menu-item\" [ngClass]=\"{'active': isActiveRoute(childItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"childItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"tertiary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(childItem.label, activeLang(), 'tertiary') ? (childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\">{{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.items && childItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-angle-down submenu-toggle\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- Always render deeper levels if they exist, also visible by default -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.items && childItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ul class=\"nested-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for(nestedItem of childItem.items; track nestedItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-item\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(nestedItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"nestedItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(nestedItem.label, activeLang(), 'nested') ? (nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\">{{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t </ul>\r\n\t\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n</div>\r\n", styles: [".new-layout-sidebar{display:flex;position:fixed;top:0;left:0;height:100%;z-index:1000;transition:transform .2s cubic-bezier(.4,0,.2,1)}.new-layout-sidebar .main-sidebar{width:64px;height:100%;background-color:#f8f9fa;border-right:1px solid #e9ecef;display:flex;flex-direction:column;align-items:center;box-shadow:none;z-index:2}.new-layout-sidebar .main-sidebar .main-sidebar-header{padding:16px 0;width:100%;display:flex;justify-content:center}.new-layout-sidebar .main-sidebar .main-sidebar-header .user-avatar{width:40px;height:40px;border-radius:50%;background-color:var(--primary-color);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:500;box-shadow:0 2px 4px #0000001a}.new-layout-sidebar .main-sidebar .main-sidebar-header .user-avatar span{font-size:18px}.new-layout-sidebar .main-sidebar .main-sidebar-content{padding:8px 0;width:100%;flex:1;overflow-y:auto}.new-layout-sidebar .main-sidebar .main-sidebar-content::-webkit-scrollbar{width:3px}.new-layout-sidebar .main-sidebar .main-sidebar-content::-webkit-scrollbar-thumb{background-color:#00000026;border-radius:3px}.new-layout-sidebar .main-sidebar .main-sidebar-content::-webkit-scrollbar-track{background-color:transparent}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu{list-style:none;padding:0;margin:0;width:100%}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li{width:100%;cursor:pointer;position:relative;overflow:hidden;margin-bottom:4px}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li .main-menu-item{display:flex;flex-direction:column;align-items:center;padding:12px 0;color:var(--text-muted);transition:all .2s ease}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li .main-menu-item .menu-icon{font-size:24px;margin-bottom:6px;transition:color .2s ease}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li .main-menu-item .menu-label{font-size:11px;font-weight:500;text-align:center;line-height:1.2;transition:color .2s ease;max-width:55px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li:hover .main-menu-item{color:var(--primary-color)}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li:hover:after{content:\"\";position:absolute;left:0;top:0;width:4px;height:100%;background-color:var(--primary-color);opacity:.9}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li.active{background-color:var(--primary-color)!important;position:relative}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li.active:before{content:\"\";position:absolute;left:0;top:0;width:4px;height:100%;background-color:var(--primary-color)}.new-layout-sidebar .main-sidebar .main-sidebar-content .main-menu li.active .main-menu-item{color:#fff!important}.new-layout-sidebar .main-sidebar .main-sidebar-footer{width:100%;padding:12px 0;display:flex;justify-content:center;align-items:center;border-top:1px solid rgba(0,0,0,.05)}.new-layout-sidebar .main-sidebar .main-sidebar-footer .sidebar-toggle-button{width:32px;height:32px;border-radius:4px;background-color:transparent;border:none;color:var(--text-muted);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;outline:none}.new-layout-sidebar .main-sidebar .main-sidebar-footer .sidebar-toggle-button:hover{background-color:#00000008;color:var(--primary-color)}.new-layout-sidebar .main-sidebar .main-sidebar-footer .sidebar-toggle-button:active{background-color:#0000000d}.new-layout-sidebar .main-sidebar .main-sidebar-footer .sidebar-toggle-button .pi{font-size:14px}.new-layout-sidebar .secondary-sidebar{width:0;height:100%;background-color:var(--bg-light);position:relative;transition:width .2s cubic-bezier(.4,0,.2,1);box-shadow:2px 0 5px #0000000d;z-index:1;overflow:hidden}.new-layout-sidebar .secondary-sidebar .secondary-content-wrapper{position:absolute;top:0;left:0;width:240px;height:100%;display:flex;flex-direction:column;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease}.new-layout-sidebar .secondary-sidebar.expanded{width:240px}.new-layout-sidebar .secondary-sidebar.expanded .secondary-content-wrapper{opacity:1;visibility:visible;pointer-events:auto}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header{height:70px;padding:0 16px;display:flex;align-items:center;border-bottom:1px solid var(--border-color);background-color:var(--bg-white);flex-shrink:0}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content{width:100%;display:flex;align-items:center;justify-content:space-between}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .section-title{font-size:15px;font-weight:600;color:var(--text-dark);margin:0;padding:0 8px;white-space:nowrap;display:flex;align-items:center}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .section-title .section-icon{font-size:18px;margin-right:12px;color:var(--primary-color)}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .section-title span{flex:1}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .sidebar-lock-button{width:28px;height:28px;border-radius:4px;background-color:transparent;border:none;color:var(--text-muted);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;outline:none;padding:0;margin-left:8px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .sidebar-lock-button .pi{font-size:14px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .sidebar-lock-button:hover{background-color:#00000008;color:var(--primary-color)}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-header .secondary-header-content .sidebar-lock-button:active{background-color:#0000000d}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content{padding:12px;flex:1;overflow-y:auto}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content::-webkit-scrollbar{width:3px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content::-webkit-scrollbar-thumb{background-color:#00000026;border-radius:3px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content::-webkit-scrollbar-track{background-color:transparent}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu{list-style:none;padding:0;margin:0}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item{margin-bottom:4px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .secondary-menu-link{display:flex;align-items:center;padding:10px 12px;border-radius:4px;color:var(--text-dark);text-decoration:none;transition:background-color .2s ease,color .2s ease;white-space:nowrap;position:relative}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .secondary-menu-link .submenu-icon{font-size:18px;margin-right:12px;color:var(--text-muted);flex-shrink:0;position:relative;transition:color .2s ease}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .secondary-menu-link .submenu-label{flex:1;font-size:14px;font-weight:500;color:var(--text-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative;transition:color .2s ease;max-width:160px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .secondary-menu-link .submenu-toggle{font-size:14px;color:var(--text-muted);transition:transform .2s ease;flex-shrink:0;position:relative}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item:hover .secondary-menu-link{color:var(--primary-color);background-color:#1a365d0a}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item:hover .secondary-menu-link .submenu-icon,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item:hover .secondary-menu-link .submenu-label,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item:hover .secondary-menu-link .submenu-toggle{color:var(--primary-color)}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item.active>.secondary-menu-link{background-color:var(--primary-color)!important;color:#fff!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item.active>.secondary-menu-link .submenu-icon,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item.active>.secondary-menu-link .submenu-label,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item.active>.secondary-menu-link .submenu-toggle{color:#fff!important}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu{list-style:none;padding:0;margin:4px 0 8px 10px;max-height:1000px;overflow:hidden;transition:max-height .3s ease}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu.always-open{display:block!important}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item{margin-bottom:3px}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item:before{display:none}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item .tertiary-menu-link{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:4px;color:var(--text-dark);text-decoration:none;font-size:13.5px;font-weight:500;transition:background-color .2s ease,color .2s ease;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item .tertiary-menu-link .tertiary-label{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-dark)}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item .tertiary-menu-link .submenu-toggle{font-size:12px;color:var(--text-muted);transition:transform .2s ease;flex-shrink:0}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link{color:var(--primary-color);background-color:#1a365d0a}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link .tertiary-label,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link .submenu-toggle{color:var(--primary-color)}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item.active .tertiary-menu-link{color:#fff!important;background-color:var(--primary-color)!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item.active .tertiary-menu-link .tertiary-label,.new-layout-sidebar .secondary-sidebar .secondary-sidebar-content .secondary-menu .secondary-menu-item .tertiary-menu .tertiary-menu-item.active .tertiary-menu-link .submenu-toggle{color:#fff!important}.secondary-menu-item.active .secondary-menu-link,.tertiary-menu-item.active .tertiary-menu-link{background-color:var(--primary-color)!important;color:#fff!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.main-menu li.active{background-color:var(--primary-color)!important}.main-menu li.active .main-menu-item{color:#fff!important}.submenu-label,.tertiary-label{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-dark)}.menu-label{max-width:60px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.secondary-menu-link:hover,.tertiary-menu-link:hover{background-color:#1a365d0a!important;transition:background-color .2s ease}.main-sidebar-content::-webkit-scrollbar,.secondary-sidebar-content::-webkit-scrollbar{width:3px}.main-sidebar-content::-webkit-scrollbar-thumb,.secondary-sidebar-content::-webkit-scrollbar-thumb{background-color:#00000026;border-radius:3px}.main-sidebar-content::-webkit-scrollbar-track,.secondary-sidebar-content::-webkit-scrollbar-track{background-color:transparent}@media screen and (max-width: 991px){.new-layout-sidebar{transform:translate(-100%);box-shadow:0 0 15px #0003!important}.new-layout-sidebar .secondary-sidebar.expanded{width:240px}}:host-context(.layout-mobile-active) .new-layout-sidebar{transform:translate(0)!important}.layout-mobile-active .new-layout-sidebar{transform:translate(0)!important}.layout-mask{display:none}.layout-mobile-active .layout-mask{display:block}.tertiary-menu{list-style:none;padding:0;margin:4px 0 8px 10px;max-height:1000px;overflow:hidden;transition:max-height .3s ease}.tertiary-menu.always-open{display:block!important}.tertiary-menu .tertiary-menu-item{margin-bottom:3px}.tertiary-menu .tertiary-menu-item:before{display:none}.tertiary-menu .tertiary-menu-item .tertiary-menu-link{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-radius:4px;color:var(--text-dark);text-decoration:none;font-size:13.5px;font-weight:500;transition:background-color .2s ease,color .2s ease;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}.tertiary-menu .tertiary-menu-item .tertiary-menu-link .tertiary-label{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-dark)}.tertiary-menu .tertiary-menu-item .tertiary-menu-link .submenu-toggle{font-size:12px;color:var(--text-muted);transition:transform .2s ease;flex-shrink:0}.tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link{color:var(--primary-color);background-color:#1a365d0a}.tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link .tertiary-label,.tertiary-menu .tertiary-menu-item:hover .tertiary-menu-link .submenu-toggle{color:var(--primary-color)}.tertiary-menu .tertiary-menu-item.active .tertiary-menu-link{color:#fff!important;background-color:var(--primary-color)!important;font-weight:500!important;box-shadow:0 2px 5px #0000001a!important}.tertiary-menu .tertiary-menu-item.active .tertiary-menu-link .tertiary-label,.tertiary-menu .tertiary-menu-item.active .tertiary-menu-link .submenu-toggle{color:#fff!important}.nested-menu{padding:0 0 0 10px;list-style:none;overflow:hidden;max-height:1000px;margin:4px 0 6px 10px}.nested-menu.always-open{display:block!important}.nested-menu.level-1,.nested-menu.level-2,.nested-menu.level-3,.nested-menu.level-4,.nested-menu.level-5,.nested-menu.level-6{padding-left:10px}.nested-menu-item{position:relative;margin:3px 0}.nested-menu-item:before{display:none}.nested-menu-item .nested-menu-link{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;color:var(--text-color);text-decoration:none;font-size:13px;border-radius:4px;transition:all .2s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nested-menu-item .nested-menu-link .nested-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:170px}.nested-menu-item .nested-menu-link .submenu-toggle{font-size:12px;color:var(--text-muted);transition:transform .2s ease;flex-shrink:0}.nested-menu-item:hover .nested-menu-link{background-color:#1a365d0a;color:var(--primary-color)}.nested-menu-item:hover .nested-menu-link .nested-label,.nested-menu-item:hover .nested-menu-link .submenu-toggle{color:var(--primary-color)}.nested-menu-item.active>.nested-menu-link{color:#fff!important;background-color:var(--primary-color)!important;font-weight:500!important}.nested-menu-item.active>.nested-menu-link .nested-label,.nested-menu-item.active>.nested-menu-link .submenu-toggle{color:#fff!important}\n"] }]
244
+ }], ctorParameters: () => [{ type: i1.TranslateJsonPipe }, { type: i2.AppMenuService }, { type: i3.Router }, { type: i4.KeycloakService }, { type: i5.TranslocoService }, { type: i6.LayoutService }], propDecorators: { onResize: [{
245
+ type: HostListener,
246
+ args: ['window:resize']
247
+ }] } });
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kYWJsZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdGhlbWUvbGF5b3V0L2FwcC9leHBhbmRhYmxlTWVudS9leHBhbmRhYmxlLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL2V4cGFuZGFibGVNZW51L2V4cGFuZGFibGUtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFlLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFVLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUloRCxPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBYXBELE1BQU0sT0FBTyx1QkFBdUI7SUErQ25DLFlBQ1MsaUJBQW9DLEVBQ3BDLFdBQTJCLEVBQzNCLE1BQWMsRUFDZCxRQUF5QixFQUN6QixnQkFBa0MsRUFDbEMsYUFBNEI7UUFMNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFuRHJD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SSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO1lBQ2IsQ0FBQztZQUVFLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDekMsT0FBTyxJQUFJLENBQUM7Z0JBQ2IsQ0FBQztZQUNGLENBQUM7UUFDRixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDckIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7OEdBNVFXLHVCQUF1QjtrR0FBdkIsdUJBQXVCLDBIQUZ4QixDQUFDLGlCQUFpQixDQUFDLDBCQ3ZCL0Isd3JOQXNIQSw4NWdCRGxHVyxVQUFVLG9PQUFFLE9BQU8sbUZBQUUsYUFBYTs7MkZBS2hDLHVCQUF1QjtrQkFSbkMsU0FBUztpQ0FDRyxJQUFJLFlBQ04scUJBQXFCLFdBQ3RCLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsYUFHbEMsQ0FBQyxpQkFBaUIsQ0FBQztpT0ErTjlCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJztcclxuaW1wb3J0IHsgS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBQbHVnaW5NZW51SXRlbSB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvYXBwcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUpzb25QaXBlIH0gZnJvbSAnYXJpbC91dGlsL3BpcGVzJztcclxuXHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC5sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAubWVudS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0c2VsZWN0b3I6ICdhcHAtZXhwYW5kYWJsZS1tZW51JyxcclxuXHRpbXBvcnRzOiBbUm91dGVyTGluaywgTmdDbGFzcywgVG9vbHRpcE1vZHVsZV0sXHJcblx0dGVtcGxhdGVVcmw6ICdleHBhbmRhYmxlLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWydleHBhbmRhYmxlLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcclxuXHRwcm92aWRlcnM6IFtUcmFuc2xhdGVKc29uUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEV4cGFuZGFibGVNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuXHRhY3RpdmVMYW5nID0gdG9TaWduYWwodGhpcy50cmFuc2xvY29TZXJ2aWNlLmxhbmdDaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6ICd0cicgfSk7XHJcblx0b3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHRyb3V0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cdHVzZXJuYW1lID0gdGhpcy5rZXljbG9hay5nZXRVc2VybmFtZSgpLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xyXG5cdHNpZGViYXJJc0xvY2tlZCA9IGZhbHNlO1xyXG5cclxuICBpc0hvc3RNb2RlID0gKDxhbnk+Z2xvYmFsVGhpcykuaXNIb3N0TW9kZTtcclxuXHRob3N0TWVudUl0ZW1zID0gKDxhbnk+Z2xvYmFsVGhpcykuaG9zdE1lbnVJdGVtcztcclxuXHRjYWNoZWRNZW51SXRlbXM6IFBsdWdpbk1lbnVJdGVtW10gPSBbXTtcclxuXHJcblxyXG5cdC8vIFRyYWNrIHNlbGVjdGVkIG1haW4gbWVudSBpdGVtXHJcblx0c2VsZWN0ZWRNYWluSXRlbTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblx0c2VsZWN0ZWRNYWluTWVudUl0ZW06IFBsdWdpbk1lbnVJdGVtIHwgbnVsbCA9IG51bGw7XHJcblx0c2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkID0gZmFsc2U7XHJcblxyXG5cdHRvb2x0aXBUZXh0ID0ge1xyXG5cdFx0dG9nZ2xlQnV0dG9uOiB7XHJcblx0XHRcdGV4cGFuZGVkOiB7XHJcblx0XHRcdFx0dHI6ICdNZW7DvHnDvCBHaXpsZScsXHJcblx0XHRcdFx0ZW46ICdIaWRlIE1lbnUnXHJcblx0XHRcdH0sXHJcblx0XHRcdGNvbGxhcHNlZDoge1xyXG5cdFx0XHRcdHRyOiAnTWVuw7x5w7wgR8O2c3RlcicsXHJcblx0XHRcdFx0ZW46ICdTaG93IE1lbnUnXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRsb2NrQnV0dG9uOiB7XHJcblx0XHRcdGxvY2tlZDoge1xyXG5cdFx0XHRcdHRyOiAnT3RvbWF0aWsgS2FwYW5tYXnEsSBBw6cnLFxyXG5cdFx0XHRcdGVuOiAnRW5hYmxlIEF1dG8tQ2xvc2UnXHJcblx0XHRcdH0sXHJcblx0XHRcdHVubG9ja2VkOiB7XHJcblx0XHRcdFx0dHI6ICdNZW7DvHnDvCBLaWxpdGxlJyxcclxuXHRcdFx0XHRlbjogJ0xvY2sgTWVudSdcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdHByaXZhdGUgcmVhZG9ubHkgTUFYX0xFTkdUSCA9IHtcclxuXHRcdG1haW46IDgsIFxyXG5cdFx0c2Vjb25kYXJ5OiAyMCxcclxuXHRcdHRlcnRpYXJ5OiAyMCBcclxuXHR9O1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgdHJhbnNsYXRlSnNvblBpcGU6IFRyYW5zbGF0ZUpzb25QaXBlLFxyXG5cdFx0cHJpdmF0ZSBtZW51U2VydmljZTogQXBwTWVudVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG5cdFx0cHJpdmF0ZSBrZXljbG9hazogS2V5Y2xvYWtTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB0cmFuc2xvY29TZXJ2aWNlOiBUcmFuc2xvY29TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlXHJcblx0KSB7fVxyXG5cclxuXHQvLyBDaGVjayBpZiB0ZXh0IGlzIHRydW5jYXRlZCBhbmQgbmVlZHMgdG9vbHRpcFxyXG5cdGlzVGV4dFRydW5jYXRlZChcclxuXHRcdGxhYmVsOiBhbnksXHJcblx0XHRsYW5nOiBzdHJpbmcgfCBudWxsLFxyXG5cdFx0bWVudVR5cGU6ICdtYWluJyB8ICdzZWNvbmRhcnknIHwgJ3RlcnRpYXJ5JyB8ICduZXN0ZWQnID0gJ3NlY29uZGFyeSdcclxuXHQpOiBib29sZWFuIHtcclxuXHRcdGlmICghbGFiZWwgfHwgIWxhbmcgfHwgIWxhYmVsW2xhbmddKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3QgdGV4dCA9IGxhYmVsW2xhbmddO1xyXG5cdFx0Y29uc3QgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoO1xyXG5cdFx0Y29uc3QgbWF4TGVuZ3RoID0gbWVudVR5cGUgPT09ICduZXN0ZWQnID8gdGhpcy5NQVhfTEVOR1RILnRlcnRpYXJ5IDogdGhpcy5NQVhfTEVOR1RIW21lbnVUeXBlXTtcclxuXHRcdHJldHVybiB0ZXh0TGVuZ3RoID4gbWF4TGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0Ly8gUmVjdXJzaXZlbHkgY2hlY2sgaWYgYSBtZW51IGl0ZW0gb3IgaXRzIGNoaWxkcmVuIG1hdGNoIHRoZSBjdXJyZW50IHJvdXRlXHJcblx0aXNBY3RpdmVSb3V0ZShtZW51SXRlbTogUGx1Z2luTWVudUl0ZW0pOiBib29sZWFuIHtcclxuXHRcdGlmICghbWVudUl0ZW0gfHwgIW1lbnVJdGVtLnJvdXRlckxpbmspIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvLyBHZXQgY3VycmVudCBVUkwgcGF0aCBhZnRlciB0aGUgaGFzaFxyXG5cdFx0Y29uc3QgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcclxuXHRcdGNvbnN0IGhhc2hVcmwgPSBjdXJyZW50VXJsLmluZGV4T2YoJyMnKSA+IC0xID8gY3VycmVudFVybC5zcGxpdCgnIycpWzFdIDogY3VycmVudFVybDtcclxuXHJcblx0XHQvLyBDaGVjayBmb3IgZXhhY3QgbWF0Y2ggZmlyc3RcclxuXHRcdGlmIChoYXNoVXJsID09PSBtZW51SXRlbS5yb3V0ZXJMaW5rIHx8IGhhc2hVcmwgPT09ICcvJyArIG1lbnVJdGVtLnJvdXRlckxpbmspIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2hlY2sgaWYgY3VycmVudCBVUkwgc3RhcnRzIHdpdGggdGhlIHJvdXRlckxpbmsgKGhhbmRsZXMgY2hpbGQgcm91dGVzKVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRtZW51SXRlbS5yb3V0ZXJMaW5rICE9PSAnLycgJiZcclxuXHRcdFx0KGhhc2hVcmwuc3RhcnRzV2l0aChtZW51SXRlbS5yb3V0ZXJMaW5rICsgJy8nKSB8fCBoYXNoVXJsLnN0YXJ0c1dpdGgoJy8nICsgbWVudUl0ZW0ucm91dGVyTGluayArICcvJykpXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2hlY2sgY2hpbGQgaXRlbXMgaWYgdGhleSBleGlzdFxyXG5cdFx0aWYgKG1lbnVJdGVtLml0ZW1zICYmIG1lbnVJdGVtLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0cmV0dXJuIG1lbnVJdGVtLml0ZW1zLnNvbWUoKGNoaWxkSXRlbSkgPT4gdGhpcy5pc0FjdGl2ZVJvdXRlKGNoaWxkSXRlbSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cclxuXHRcdHRoaXMudXBkYXRlTWVudUl0ZW1zKCk7XHJcblx0XHR0aGlzLmluaXRpYWxpemVNZW51KCk7XHJcblxyXG5cdFx0dGhpcy5sb2FkU2lkZWJhckxvY2tTdGF0ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGVBY3RpdmVNZW51RnJvbUN1cnJlbnRSb3V0ZSgpO1xyXG5cclxuXHRcdC8vIFN1YnNjcmliZSB0byByb3V0ZSBjaGFuZ2VzIHRvIGhhbmRsZSBzZWNvbmRhcnkgc2lkZWJhciBjbG9zaW5nXHJcblx0XHR0aGlzLnJvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xyXG5cdFx0XHQucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0XHQvLyBVcGRhdGUgYWN0aXZlIG1lbnUgYmFzZWQgb24gdGhlIG5ldyByb3V0ZVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlQWN0aXZlTWVudUZyb21DdXJyZW50Um91dGUoKTtcclxuXHJcblx0XHRcdFx0Ly8gQ2xvc2Ugc2Vjb25kYXJ5IHNpZGViYXIgb24gbmF2aWdhdGlvbiBpZiBub3QgbG9ja2VkXHJcblx0XHRcdFx0aWYgKCF0aGlzLnNpZGViYXJJc0xvY2tlZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdC8vIFN1YnNjcmliZSB0byBvdmVybGF5IG1lbnUgb3BlbiBub3RpZmljYXRpb25zXHJcblx0XHR0aGlzLm92ZXJsYXlNZW51T3BlblN1YnNjcmlwdGlvbiA9IHRoaXMubGF5b3V0U2VydmljZS5vdmVybGF5T3BlbiQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlKSB7XHJcblx0XHRcdFx0dGhpcy5zZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0aWYgKHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMucm91dGVyU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMucm91dGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRsb2FkU2lkZWJhckxvY2tTdGF0ZSgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHN0b3JlZFN0YXRlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NpZGViYXJJc0xvY2tlZCcpO1xyXG5cdFx0dGhpcy5zaWRlYmFySXNMb2NrZWQgPSBzdG9yZWRTdGF0ZSA9PT0gJ3RydWUnO1xyXG5cdH1cclxuXHJcblx0c2F2ZVNpZGViYXJMb2NrU3RhdGUoKTogdm9pZCB7XHJcblx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2lkZWJhcklzTG9ja2VkJywgdGhpcy5zaWRlYmFySXNMb2NrZWQudG9TdHJpbmcoKSk7XHJcblx0fVxyXG5cclxuXHR0b2dnbGVTaWRlYmFyTG9jaygpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2lkZWJhcklzTG9ja2VkID0gIXRoaXMuc2lkZWJhcklzTG9ja2VkO1xyXG5cdFx0dGhpcy5zYXZlU2lkZWJhckxvY2tTdGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gSW5pdGlhbGl6ZSB0aGUgbWVudSB3aXRoIHByb3BlciBhY3RpdmUgc3RhdGVcclxuXHRpbml0aWFsaXplTWVudSgpIHtcclxuXHRcdHRoaXMuc2VsZWN0ZWRNYWluSXRlbSA9IG51bGw7XHJcblx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gbnVsbDtcclxuXHRcdHRoaXMuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkID0gZmFsc2U7XHJcblx0XHR0aGlzLnVwZGF0ZU1lbnVJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlTWVudUZyb21Sb290S2V5KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdHRoaXMudXBkYXRlTWVudUl0ZW1zKCk7IFxyXG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gdGhpcy5nZXRNZW51SXRlbXMoKTtcclxuXHJcblx0XHRpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IG1lbnVJdGVtcy5sZW5ndGgpIHtcclxuXHRcdFx0Y29uc3QgaXRlbSA9IG1lbnVJdGVtc1tpbmRleF07XHJcblx0XHRcdGlmICghaXRlbS5zZXBhcmF0b3IpIHtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkTWFpbkl0ZW0gPSBpbmRleDtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gaXRlbTtcclxuXHRcdFx0XHR0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHVwZGF0ZU1lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdHRoaXMuY2FjaGVkTWVudUl0ZW1zID0gdGhpcy5pc0hvc3RNb2RlID8gdGhpcy5ob3N0TWVudUl0ZW1zKCkgOiB0aGlzLm1lbnVTZXJ2aWNlLm1lbnVJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0Z2V0TWVudUl0ZW1zKCk6IFBsdWdpbk1lbnVJdGVtW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FjaGVkTWVudUl0ZW1zO1xyXG5cdH1cclxuXHJcblx0c2VsZWN0TWFpbkl0ZW0oaW5kZXg6IG51bWJlciwgaXRlbTogUGx1Z2luTWVudUl0ZW0pOiB2b2lkIHtcclxuXHRcdGlmIChpdGVtLnJvdXRlckxpbmsgJiYgKCFpdGVtLml0ZW1zIHx8IGl0ZW0uaXRlbXMubGVuZ3RoID09PSAwKSkge1xyXG5cdFx0XHR0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTWFpbkl0ZW0gPSBpbmRleDtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbSA9IGl0ZW07XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtpdGVtLnJvdXRlckxpbmtdKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEhhbmRsZSByZWd1bGFyIG1lbnUgaXRlbXMgd2l0aCBzdWJtZW51XHJcblx0XHRpZiAodGhpcy5zZWxlY3RlZE1haW5JdGVtID09PSBpbmRleCkge1xyXG5cdFx0XHR0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA9ICF0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRNYWluSXRlbSA9IGluZGV4O1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gaXRlbTtcclxuXHJcbiAgICAgIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkID0gdHJ1ZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRm9yIG1vYmlsZSBkZXZpY2VzLCBlbnN1cmUgdGhlIG1lbnUgc3RheXMgb3BlblxyXG5cdFx0aWYgKHRoaXMuaXNNb2JpbGUoKSkge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9IHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR0b2dnbGVTZWNvbmRhcnlTaWRlYmFyKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQgPSAhdGhpcy5zZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQ7XHJcblx0fVxyXG5cclxuXHRpc01vYmlsZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2UuaXNNb2JpbGUoKTtcclxuXHR9XHJcblxyXG5cdC8vIExpc3RlbiBmb3IgcmVzaXplIGV2ZW50cyB0byBoYW5kbGUgcmVzcG9uc2l2ZSBiZWhhdmlvciBmb3IgbW9iaWxlXHJcblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcblx0b25SZXNpemUoKSB7XHJcblx0XHRpZiAoIXRoaXMuaXNNb2JpbGUoKSAmJiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dXBkYXRlQWN0aXZlTWVudUZyb21DdXJyZW50Um91dGUoKTogdm9pZCB7XHJcblx0XHRjb25zdCBtZW51SXRlbXMgPSB0aGlzLmdldE1lbnVJdGVtcygpO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbWVudUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1zW2ldO1xyXG5cdFx0XHRpZiAodGhpcy5pc0FjdGl2ZVJvdXRlKG1lbnVJdGVtKSkge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRNYWluSXRlbSA9IGk7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbSA9IG1lbnVJdGVtO1xyXG5cclxuXHRcdFx0XHRpZiAobWVudUl0ZW0uaXRlbXMgJiYgbWVudUl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0aWYgKCF0aGlzLmlzTW9iaWxlKCkgJiYgIXRoaXMuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkICYmICF0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNIYXZlU2VsZWN0ZWRDaGlsZEl0ZW0oaXRlbTogUGx1Z2luTWVudUl0ZW0pOiBib29sZWFuIHtcclxuXHRcdGlmICghaXRlbSB8fCAhaXRlbS5pdGVtcyB8fCBpdGVtLml0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGQgb2YgaXRlbS5pdGVtcykge1xyXG5cdFx0XHRpZiAodGhpcy5pc0FjdGl2ZVJvdXRlKGNoaWxkKSkge1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblxyXG4gICAgICBpZiAoY2hpbGQuaXRlbXMgJiYgY2hpbGQuaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmICh0aGlzLmlzSGF2ZVNlbGVjdGVkQ2hpbGRJdGVtKGNoaWxkKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxUZXh0KHRleHQ6IGFueSk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVKc29uUGlwZS50cmFuc2Zvcm0odGV4dCk7XHJcblx0fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJuZXctbGF5b3V0LXNpZGViYXJcIj5cclxuXHQ8IS0tIE1haW4gc2lkZWJhciAoZmlyc3QgbGV2ZWwpIC0tPlxyXG5cdDxkaXYgY2xhc3M9XCJtYWluLXNpZGViYXJcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJtYWluLXNpZGViYXItaGVhZGVyXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ1c2VyLWF2YXRhclwiPlxyXG5cdFx0XHRcdDxzcGFuPnt7IHVzZXJuYW1lIH19PC9zcGFuPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cIm1haW4tc2lkZWJhci1jb250ZW50XCI+XHJcblx0XHRcdDx1bCBjbGFzcz1cIm1haW4tbWVudVwiPlxyXG5cdFx0XHRcdEBmb3IoaXRlbSBvZiBnZXRNZW51SXRlbXMoKTsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgpe1xyXG5cdFx0XHRcdFx0QGlmKCFpdGVtLnNlcGFyYXRvcil7XHJcblx0XHRcdFx0XHRcdDxsaVxyXG5cdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzQWN0aXZlUm91dGUoaXRlbSkgfHwgaXNIYXZlU2VsZWN0ZWRDaGlsZEl0ZW0oaXRlbSl9XCJcclxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cInNlbGVjdE1haW5JdGVtKGksIGl0ZW0pXCJcclxuXHRcdFx0XHRcdFx0W3BUb29sdGlwXT1cIiFpc01vYmlsZSgpICYmIGlzVGV4dFRydW5jYXRlZChpdGVtLmxhYmVsLCBhY3RpdmVMYW5nKCksICdtYWluJykgPyAoaXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBpdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibWFpbi1tZW51LWl0ZW1cIj5cclxuXHRcdFx0XHRcdFx0XHQ8aSBbbmdDbGFzc109XCJpdGVtLmljb25cIiBjbGFzcz1cIm1lbnUtaWNvblwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHQ8c21hbGwgY2xhc3M9XCJtZW51LWxhYmVsXCI+e3sgaXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBpdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NtYWxsPlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQ8L3VsPlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8IS0tIFRvZ2dsZSBidXR0b24gYXQgdGhlIGJvdHRvbSBvZiBtYWluIHNpZGViYXIgLS0+XHJcblx0XHQ8ZGl2IGNsYXNzPVwibWFpbi1zaWRlYmFyLWZvb3RlclwiPlxyXG5cdFx0XHQ8YnV0dG9uIGNsYXNzPVwic2lkZWJhci10b2dnbGUtYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVNlY29uZGFyeVNpZGViYXIoKVwiIFxyXG5cdFx0XHRcdFtwVG9vbHRpcF09XCIhaXNNb2JpbGUoKSA/IChzZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQgPyBnZXRMb2NhbFRleHQodG9vbHRpcFRleHQudG9nZ2xlQnV0dG9uLmV4cGFuZGVkKSA6IGdldExvY2FsVGV4dCh0b29sdGlwVGV4dC50b2dnbGVCdXR0b24uY29sbGFwc2VkKSkgOiAnJ1wiIFxyXG5cdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XHJcblx0XHRcdFx0PGkgY2xhc3M9XCJwaVwiIFtuZ0NsYXNzXT1cInNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCA/ICdwaS1hbmdsZS1sZWZ0JyA6ICdwaS1hbmdsZS1yaWdodCdcIj48L2k+XHJcblx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcblxyXG5cdDwhLS0gU2Vjb25kYXJ5IHNpZGViYXIgKHNlY29uZCBsZXZlbCkgLS0+XHJcblx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1zaWRlYmFyXCIgW25nQ2xhc3NdPVwieydleHBhbmRlZCc6IHNlY29uZGFyeVNpZGViYXJFeHBhbmRlZH1cIj5cclxuXHRcdDwhLS0gQ29udGVudCBjb250YWluZXIgd3JhcHBlciB0byBwcmV2ZW50IGp1bXBzIGR1cmluZyB0cmFuc2l0aW9ucyAtLT5cclxuXHRcdDxkaXYgY2xhc3M9XCJzZWNvbmRhcnktY29udGVudC13cmFwcGVyXCI+XHJcblx0XHRcdDwhLS0gU2Vjb25kYXJ5IHNpZGViYXIgaGVhZGVyIC0tPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwic2Vjb25kYXJ5LXNpZGViYXItaGVhZGVyXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1oZWFkZXItY29udGVudFwiPlxyXG5cdFx0XHRcdFx0QGlmKHNlbGVjdGVkTWFpbk1lbnVJdGVtKXtcclxuXHRcdFx0XHRcdFx0PGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cInNlbGVjdGVkTWFpbk1lbnVJdGVtLmljb25cIiBjbGFzcz1cInNlY3Rpb24taWNvblwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57eyBzZWxlY3RlZE1haW5NZW51SXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBzZWxlY3RlZE1haW5NZW51SXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2gzPlxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0PGJ1dHRvbiBjbGFzcz1cInNpZGViYXItbG9jay1idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlU2lkZWJhckxvY2soKVwiIFxyXG5cdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwic2lkZWJhcklzTG9ja2VkID8gZ2V0TG9jYWxUZXh0KHRvb2x0aXBUZXh0LmxvY2tCdXR0b24ubG9ja2VkKSA6IGdldExvY2FsVGV4dCh0b29sdGlwVGV4dC5sb2NrQnV0dG9uLnVubG9ja2VkKVwiIFxyXG5cdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJsZWZ0XCI+XHJcblx0XHRcdFx0XHRcdDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJzaWRlYmFySXNMb2NrZWQgPyAncGktbG9jaycgOiAncGktbG9jay1vcGVuJ1wiPjwvaT5cclxuXHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHJcblx0XHRcdDwhLS0gU2Vjb25kYXJ5IHNpZGViYXIgY29udGVudCAtLT5cclxuXHRcdFx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1zaWRlYmFyLWNvbnRlbnRcIj5cclxuXHRcdFx0XHRAaWYoc2VsZWN0ZWRNYWluTWVudUl0ZW0pe1xyXG5cdFx0XHRcdFx0PHVsIGNsYXNzPVwic2Vjb25kYXJ5LW1lbnVcIj5cclxuXHRcdFx0XHRcdFx0QGZvcihzdWJJdGVtIG9mIHNlbGVjdGVkTWFpbk1lbnVJdGVtLml0ZW1zOyB0cmFjayBzdWJJdGVtOyBsZXQgaSA9ICRpbmRleCl7XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIENyZWF0ZSBtZW51IGl0ZW0gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHQ8bGkgY2xhc3M9XCJzZWNvbmRhcnktbWVudS1pdGVtXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0FjdGl2ZVJvdXRlKHN1Ykl0ZW0pfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YSBbcm91dGVyTGlua109XCJzdWJJdGVtLnJvdXRlckxpbmtcIiBcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNlY29uZGFyeS1tZW51LWxpbmtcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCIhaXNNb2JpbGUoKSAmJiBpc1RleHRUcnVuY2F0ZWQoc3ViSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAnc2Vjb25kYXJ5JykgPyAoc3ViSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBzdWJJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGkgW25nQ2xhc3NdPVwic3ViSXRlbS5pY29uXCIgY2xhc3M9XCJzdWJtZW51LWljb25cIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdWJtZW51LWxhYmVsXCI+e3sgc3ViSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBzdWJJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0QGlmKHN1Ykl0ZW0uaXRlbXMgJiYgc3ViSXRlbS5pdGVtcy5sZW5ndGggPiAwKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpIGNsYXNzPVwicGkgcGktYW5nbGUtZG93biBzdWJtZW51LXRvZ2dsZVwiPjwvaT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PCEtLSBBbHdheXMgcmVuZGVyIHN1Ym1lbnUgaWYgaXQgZXhpc3RzIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgQGlmKHN1Ykl0ZW0uaXRlbXMgJiYgc3ViSXRlbS5pdGVtcy5sZW5ndGggPiAwKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgPHVsIGNsYXNzPVwidGVydGlhcnktbWVudSBhbHdheXMtb3BlblwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGZvcihjaGlsZEl0ZW0gb2Ygc3ViSXRlbS5pdGVtczsgdHJhY2sgY2hpbGRJdGVtOyBsZXQgaSA9ICRpbmRleCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsaSBjbGFzcz1cInRlcnRpYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNBY3RpdmVSb3V0ZShjaGlsZEl0ZW0pfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIFtyb3V0ZXJMaW5rXT1cImNoaWxkSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInRlcnRpYXJ5LW1lbnUtbGlua1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKGNoaWxkSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAndGVydGlhcnknKSA/IChjaGlsZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gY2hpbGRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGVydGlhcnktbGFiZWxcIj57eyBjaGlsZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gY2hpbGRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYoY2hpbGRJdGVtLml0ZW1zICYmIGNoaWxkSXRlbS5pdGVtcy5sZW5ndGggPiAwKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJwaSBwaS1hbmdsZS1kb3duIHN1Ym1lbnUtdG9nZ2xlXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIEFsd2F5cyByZW5kZXIgZGVlcGVyIGxldmVscyBpZiB0aGV5IGV4aXN0LCBhbHNvIHZpc2libGUgYnkgZGVmYXVsdCAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYoY2hpbGRJdGVtLml0ZW1zICYmIGNoaWxkSXRlbS5pdGVtcy5sZW5ndGggPiAwKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx1bCBjbGFzcz1cIm5lc3RlZC1tZW51IGFsd2F5cy1vcGVuXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBmb3IobmVzdGVkSXRlbSBvZiBjaGlsZEl0ZW0uaXRlbXM7IHRyYWNrIG5lc3RlZEl0ZW07IGxldCBpID0gJGluZGV4KXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGkgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm5lc3RlZC1tZW51LWl0ZW1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0FjdGl2ZVJvdXRlKG5lc3RlZEl0ZW0pfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgW3JvdXRlckxpbmtdPVwibmVzdGVkSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibmVzdGVkLW1lbnUtbGlua1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCIhaXNNb2JpbGUoKSAmJiBpc1RleHRUcnVuY2F0ZWQobmVzdGVkSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAnbmVzdGVkJykgPyAobmVzdGVkSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBuZXN0ZWRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cIm5lc3RlZC1sYWJlbFwiPnt7IG5lc3RlZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gbmVzdGVkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdWw+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCA8L3VsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgfVxyXG5cdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0PC91bD5cclxuXHRcdFx0XHR9XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcblx0XHJcbjwvZGl2PlxyXG4iXX0=
@@ -11,6 +11,7 @@ import { AppProfileSidebarComponent } from '../profileSidebar/app.profilesidebar
11
11
  import { AppSidebarComponent } from '../sidebar/app.sidebar.component';
12
12
  import { AppTopbarComponent } from '../topbar/app.topbar.component';
13
13
  import { AppChatbotComponent } from '../chatbot/app.chatbot.component';
14
+ import { ExpandableMenuComponent } from '../expandableMenu/expandable-menu.component';
14
15
  import * as i0 from "@angular/core";
15
16
  import * as i1 from "../../service/app.menu.service";
16
17
  import * as i2 from "../../service/app.layout.service";
@@ -108,7 +109,10 @@ export class AppLayoutComponent {
108
109
  'p-input-filled': this.layoutService.config().inputStyle === 'filled',
109
110
  'p-ripple-disabled': !this.layoutService.config().ripple,
110
111
  'layout-sidebar-active': this.layoutService.state.sidebarActive,
111
- 'layout-sidebar-anchored': this.layoutService.state.anchored
112
+ 'layout-sidebar-anchored': this.layoutService.state.anchored,
113
+ // if expandableMenuComponent is present, add the class 'new-sidebar-layout'
114
+ 'new-sidebar-layout': this.layoutService.config().menuMode === 'expandable',
115
+ 'secondary-expanded': this.expandableMenuComponent?.secondarySidebarExpanded
112
116
  };
113
117
  }
114
118
  ngOnDestroy() {
@@ -120,7 +124,7 @@ export class AppLayoutComponent {
120
124
  }
121
125
  }
122
126
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppLayoutComponent, deps: [{ token: i1.AppMenuService }, { token: i2.LayoutService }, { token: i0.Renderer2 }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
123
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AppLayoutComponent, isStandalone: true, selector: "app-layout", viewQueries: [{ propertyName: "appSidebar", first: true, predicate: AppSidebarComponent, descendants: true }, { propertyName: "appTopbar", first: true, predicate: AppTopbarComponent, descendants: true }], ngImport: i0, template: "<div class=\"layout-container\" [ngClass]=\"containerClass\">\r\n\t<app-sidebar />\r\n\t<div class=\"layout-content-wrapper\">\r\n\t\t<app-topbar />\r\n\t\t<div class=\"layout-content card\">\r\n\t\t\t<router-outlet />\r\n\t\t</div>\r\n\t</div>\r\n\t<app-profilemenu />\r\n\t<!--<app-config></app-config>-->\r\n\t<app-chatbot></app-chatbot>\r\n\t<div class=\"layout-mask\"></div>\r\n</div>\r\n\r\n<p-toast key=\"toast-root\" />\r\n<p-dialog key=\"dialog-root\" />\r\n<p-messages key=\"messages-root\" />\r\n<p-confirmPopup key=\"confirmPopup-root\" />\r\n<p-confirmDialog key=\"confirmDialog-root\" />\r\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i4.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i5.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i6.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: MessagesModule }, { kind: "component", type: i7.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i8.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: AppSidebarComponent, selector: "app-sidebar" }, { kind: "component", type: AppTopbarComponent, selector: "app-topbar" }, { kind: "component", type: AppProfileSidebarComponent, selector: "app-profilemenu" }, { kind: "component", type: AppChatbotComponent, selector: "app-chatbot" }] }); }
127
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: AppLayoutComponent, isStandalone: true, selector: "app-layout", viewQueries: [{ propertyName: "appSidebar", first: true, predicate: AppSidebarComponent, descendants: true }, { propertyName: "expandableMenuComponent", first: true, predicate: ExpandableMenuComponent, descendants: true }, { propertyName: "appTopbar", first: true, predicate: AppTopbarComponent, descendants: true }], ngImport: i0, template: "<div class=\"layout-container\" [ngClass]=\"containerClass\">\r\n\t\t<app-expandable-menu />\r\n\t\t<!-- <app-sidebar />\t -->\r\n\t\t<div class=\"layout-content-wrapper\">\r\n\t\t<app-topbar />\r\n\t\t<div class=\"layout-content card\">\r\n\t\t\t<router-outlet />\r\n\t\t</div>\r\n\t</div>\r\n\t<app-profilemenu />\r\n\t<!--<app-config></app-config>-->\r\n\t<app-chatbot></app-chatbot>\r\n\t<div class=\"layout-mask\"></div>\r\n</div>\r\n\r\n<p-toast key=\"toast-root\" />\r\n<p-dialog key=\"dialog-root\" />\r\n<p-messages key=\"messages-root\" />\r\n<p-confirmPopup key=\"confirmPopup-root\" />\r\n<p-confirmDialog key=\"confirmDialog-root\" />\r\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i4.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i5.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i6.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: MessagesModule }, { kind: "component", type: i7.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i8.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: AppTopbarComponent, selector: "app-topbar" }, { kind: "component", type: AppProfileSidebarComponent, selector: "app-profilemenu" }, { kind: "component", type: AppChatbotComponent, selector: "app-chatbot" }, { kind: "component", type: ExpandableMenuComponent, selector: "app-expandable-menu" }] }); }
124
128
  }
125
129
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppLayoutComponent, decorators: [{
126
130
  type: Component,
@@ -132,16 +136,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
132
136
  DialogModule,
133
137
  MessagesModule,
134
138
  ToastModule,
135
- AppSidebarComponent,
136
139
  AppTopbarComponent,
137
140
  AppProfileSidebarComponent,
138
- AppChatbotComponent
139
- ], template: "<div class=\"layout-container\" [ngClass]=\"containerClass\">\r\n\t<app-sidebar />\r\n\t<div class=\"layout-content-wrapper\">\r\n\t\t<app-topbar />\r\n\t\t<div class=\"layout-content card\">\r\n\t\t\t<router-outlet />\r\n\t\t</div>\r\n\t</div>\r\n\t<app-profilemenu />\r\n\t<!--<app-config></app-config>-->\r\n\t<app-chatbot></app-chatbot>\r\n\t<div class=\"layout-mask\"></div>\r\n</div>\r\n\r\n<p-toast key=\"toast-root\" />\r\n<p-dialog key=\"dialog-root\" />\r\n<p-messages key=\"messages-root\" />\r\n<p-confirmPopup key=\"confirmPopup-root\" />\r\n<p-confirmDialog key=\"confirmDialog-root\" />\r\n" }]
141
+ AppChatbotComponent,
142
+ AppSidebarComponent,
143
+ ExpandableMenuComponent
144
+ ], template: "<div class=\"layout-container\" [ngClass]=\"containerClass\">\r\n\t\t<app-expandable-menu />\r\n\t\t<!-- <app-sidebar />\t -->\r\n\t\t<div class=\"layout-content-wrapper\">\r\n\t\t<app-topbar />\r\n\t\t<div class=\"layout-content card\">\r\n\t\t\t<router-outlet />\r\n\t\t</div>\r\n\t</div>\r\n\t<app-profilemenu />\r\n\t<!--<app-config></app-config>-->\r\n\t<app-chatbot></app-chatbot>\r\n\t<div class=\"layout-mask\"></div>\r\n</div>\r\n\r\n<p-toast key=\"toast-root\" />\r\n<p-dialog key=\"dialog-root\" />\r\n<p-messages key=\"messages-root\" />\r\n<p-confirmPopup key=\"confirmPopup-root\" />\r\n<p-confirmDialog key=\"confirmDialog-root\" />\r\n" }]
140
145
  }], ctorParameters: () => [{ type: i1.AppMenuService }, { type: i2.LayoutService }, { type: i0.Renderer2 }, { type: i3.Router }], propDecorators: { appSidebar: [{
141
146
  type: ViewChild,
142
147
  args: [AppSidebarComponent]
148
+ }], expandableMenuComponent: [{
149
+ type: ViewChild,
150
+ args: [ExpandableMenuComponent]
143
151
  }], appTopbar: [{
144
152
  type: ViewChild,
145
153
  args: [AppTopbarComponent]
146
154
  }] } });
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3RoZW1lL2xheW91dC9hcHAvbGF5b3V0L2FwcC5sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL2xheW91dC9hcHAubGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUF3QixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBVSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFnQixNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJNUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDNUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7Ozs7QUFvQnZFLE1BQU0sT0FBTyxrQkFBa0I7SUFhOUIsWUFDUyxXQUEyQixF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SUFBSSxZQUNOLFlBQVksV0FDYjt3QkFDUixPQUFPO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQiwwQkFBMEI7d0JBQzFCLG1CQUFtQjtxQkFDbkI7NEpBWStCLFVBQVU7c0JBQXpDLFNBQVM7dUJBQUMsbUJBQW1CO2dCQUVDLFNBQVM7c0JBQXZDLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlck91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBDb25maXJtRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jb25maXJtZGlhbG9nJztcclxuaW1wb3J0IHsgQ29uZmlybVBvcHVwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jb25maXJtcG9wdXAnO1xyXG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VzTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9tZXNzYWdlcyc7XHJcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYXBwLmxheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC5tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBQcm9maWxlU2lkZWJhckNvbXBvbmVudCB9IGZyb20gJy4uL3Byb2ZpbGVTaWRlYmFyL2FwcC5wcm9maWxlc2lkZWJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBcHBTaWRlYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2lkZWJhci9hcHAuc2lkZWJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBcHBUb3BiYXJDb21wb25lbnQgfSBmcm9tICcuLi90b3BiYXIvYXBwLnRvcGJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBcHBDaGF0Ym90Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hhdGJvdC9hcHAuY2hhdGJvdC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRzZWxlY3RvcjogJ2FwcC1sYXlvdXQnLFxyXG5cdGltcG9ydHM6IFtcclxuXHRcdE5nQ2xhc3MsXHJcblx0XHRSb3V0ZXJPdXRsZXQsXHJcblx0XHRDb25maXJtRGlhbG9nTW9kdWxlLFxyXG5cdFx0Q29uZmlybVBvcHVwTW9kdWxlLFxyXG5cdFx0RGlhbG9nTW9kdWxlLFxyXG5cdFx0TWVzc2FnZXNNb2R1bGUsXHJcblx0XHRUb2FzdE1vZHVsZSxcclxuXHRcdEFwcFNpZGViYXJDb21wb25lbnQsXHJcblx0XHRBcHBUb3BiYXJDb21wb25lbnQsXHJcblx0XHRBcHBQcm9maWxlU2lkZWJhckNvbXBvbmVudCxcclxuXHRcdEFwcENoYXRib3RDb21wb25lbnRcclxuXHRdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9hcHAubGF5b3V0LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwTGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHRvdmVybGF5TWVudU9wZW5TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0bWVudU91dHNpZGVDbGlja0xpc3RlbmVyOiBhbnk7XHJcblxyXG5cdG1lbnVTY3JvbGxMaXN0ZW5lcjogYW55O1xyXG5cclxuXHRnbG9iYWxUaGlzOiBhbnkgPSBnbG9iYWxUaGlzO1xyXG5cclxuXHRAVmlld0NoaWxkKEFwcFNpZGViYXJDb21wb25lbnQpIGFwcFNpZGViYXIhOiBBcHBTaWRlYmFyQ29tcG9uZW50O1xyXG5cclxuXHRAVmlld0NoaWxkKEFwcFRvcGJhckNvbXBvbmVudCkgYXBwVG9wYmFyITogQXBwVG9wYmFyQ29tcG9uZW50O1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgbWVudVNlcnZpY2U6IEFwcE1lbnVTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXHJcblx0XHRwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuXHRcdHB1YmxpYyByb3V0ZXI6IFJvdXRlclxyXG5cdCkge1xyXG5cdFx0dGhpcy5vdmVybGF5TWVudU9wZW5TdWJzY3JpcHRpb24gPSB0aGlzLmxheW91dFNlcnZpY2Uub3ZlcmxheU9wZW4kLnN1YnNjcmliZSgoKSA9PiB7XHJcblx0XHRcdGlmICghdGhpcy5tZW51T3V0c2lkZUNsaWNrTGlzdGVuZXIpIHtcclxuXHRcdFx0XHR0aGlzLm1lbnVPdXRzaWRlQ2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNPdXRzaWRlQ2xpY2tlZCA9ICEoXHJcblx0XHRcdFx0XHRcdHRoaXMuYXBwU2lkZWJhci5lbC5uYXRpdmVFbGVtZW50LmlzU2FtZU5vZGUoZXZlbnQudGFyZ2V0KSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLmFwcFNpZGViYXIuZWwubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8XHJcblx0XHRcdFx0XHRcdHRoaXMuYXBwVG9wYmFyLm1lbnVCdXR0b24ubmF0aXZlRWxlbWVudC5pc1NhbWVOb2RlKGV2ZW50LnRhcmdldCkgfHxcclxuXHRcdFx0XHRcdFx0dGhpcy5hcHBUb3BiYXIubWVudUJ1dHRvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRpZiAoaXNPdXRzaWRlQ2xpY2tlZCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhpZGVNZW51KCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQodGhpcy5sYXlvdXRTZXJ2aWNlLmlzSG9yaXpvbnRhbCgpIHx8IHRoaXMubGF5b3V0U2VydmljZS5pc1NsaW0oKSB8fCB0aGlzLmxheW91dFNlcnZpY2UuaXNTbGltUGx1cygpKSAmJlxyXG5cdFx0XHRcdCF0aGlzLm1lbnVTY3JvbGxMaXN0ZW5lclxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHR0aGlzLm1lbnVTY3JvbGxMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxyXG5cdFx0XHRcdFx0dGhpcy5hcHBTaWRlYmFyLm1lbnVDb250YWluZXIubmF0aXZlRWxlbWVudCxcclxuXHRcdFx0XHRcdCdzY3JvbGwnLFxyXG5cdFx0XHRcdFx0KGV2ZW50KSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmxheW91dFNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGVNZW51KCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUpIHtcclxuXHRcdFx0XHR0aGlzLmJsb2NrQm9keVNjcm9sbCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRpZiAoIXRoaXMubGF5b3V0U2VydmljZS5tZmVBcHBJdGVtQ2xpY2tlZCgpKSB0aGlzLmhpZGVNZW51KCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGJsb2NrQm9keVNjcm9sbCgpOiB2b2lkIHtcclxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdCkge1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2Jsb2NrZWQtc2Nyb2xsJyk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSArPSAnIGJsb2NrZWQtc2Nyb2xsJztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHVuYmxvY2tCb2R5U2Nyb2xsKCk6IHZvaWQge1xyXG5cdFx0aWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0KSB7XHJcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnYmxvY2tlZC1zY3JvbGwnKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lID0gZG9jdW1lbnQuYm9keS5jbGFzc05hbWUucmVwbGFjZShcclxuXHRcdFx0XHRuZXcgUmVnRXhwKCcoXnxcXFxcYiknICsgJ2Jsb2NrZWQtc2Nyb2xsJy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcoXFxcXGJ8JCknLCAnZ2knKSxcclxuXHRcdFx0XHQnICdcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGhpZGVNZW51KCkge1xyXG5cdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLm92ZXJsYXlNZW51QWN0aXZlID0gZmFsc2U7XHJcblx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLm1lbnVIb3ZlckFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5tZW51U2VydmljZS5yZXNldCgpO1xyXG5cclxuXHRcdGlmICh0aGlzLm1lbnVPdXRzaWRlQ2xpY2tMaXN0ZW5lcikge1xyXG5cdFx0XHR0aGlzLm1lbnVPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpO1xyXG5cdFx0XHR0aGlzLm1lbnVPdXRzaWRlQ2xpY2tMaXN0ZW5lciA9IG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMubWVudVNjcm9sbExpc3RlbmVyKSB7XHJcblx0XHRcdHRoaXMubWVudVNjcm9sbExpc3RlbmVyKCk7XHJcblx0XHRcdHRoaXMubWVudVNjcm9sbExpc3RlbmVyID0gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnVuYmxvY2tCb2R5U2Nyb2xsKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgY29udGFpbmVyQ2xhc3MoKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHQnbGF5b3V0LWxpZ2h0JzogdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbmZpZygpLmNvbG9yU2NoZW1lID09PSAnbGlnaHQnLFxyXG5cdFx0XHQnbGF5b3V0LWRpbSc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5jb2xvclNjaGVtZSA9PT0gJ2RpbScsXHJcblx0XHRcdCdsYXlvdXQtZGFyayc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5jb2xvclNjaGVtZSA9PT0gJ2RhcmsnLFxyXG5cdFx0XHQnbGF5b3V0LWNvbG9yc2NoZW1lLW1lbnUnOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkubWVudVRoZW1lID09PSAnY29sb3JTY2hlbWUnLFxyXG5cdFx0XHQnbGF5b3V0LXByaW1hcnljb2xvci1tZW51JzogdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbmZpZygpLm1lbnVUaGVtZSA9PT0gJ3ByaW1hcnlDb2xvcicsXHJcblx0XHRcdCdsYXlvdXQtdHJhbnNwYXJlbnQtbWVudSc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51VGhlbWUgPT09ICd0cmFuc3BhcmVudCcsXHJcblx0XHRcdCdsYXlvdXQtb3ZlcmxheSc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51TW9kZSA9PT0gJ292ZXJsYXknLFxyXG5cdFx0XHQnbGF5b3V0LXN0YXRpYyc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51TW9kZSA9PT0gJ3N0YXRpYycsXHJcblx0XHRcdCdsYXlvdXQtc2xpbSc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51TW9kZSA9PT0gJ3NsaW0nLFxyXG5cdFx0XHQnbGF5b3V0LXNsaW0tcGx1cyc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51TW9kZSA9PT0gJ3NsaW0tcGx1cycsXHJcblx0XHRcdCdsYXlvdXQtaG9yaXpvbnRhbCc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51TW9kZSA9PT0gJ2hvcml6b250YWwnLFxyXG5cdFx0XHQnbGF5b3V0LXJldmVhbCc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51TW9kZSA9PT0gJ3JldmVhbCcsXHJcblx0XHRcdCdsYXlvdXQtZHJhd2VyJzogdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbmZpZygpLm1lbnVNb2RlID09PSAnZHJhd2VyJyxcclxuXHRcdFx0J2xheW91dC1zdGF0aWMtaW5hY3RpdmUnOlxyXG5cdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlICYmIHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51TW9kZSA9PT0gJ3N0YXRpYycsXHJcblx0XHRcdCdsYXlvdXQtb3ZlcmxheS1hY3RpdmUnOiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUub3ZlcmxheU1lbnVBY3RpdmUsXHJcblx0XHRcdCdsYXlvdXQtbW9iaWxlLWFjdGl2ZSc6IHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlLFxyXG5cdFx0XHQncC1pbnB1dC1maWxsZWQnOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkuaW5wdXRTdHlsZSA9PT0gJ2ZpbGxlZCcsXHJcblx0XHRcdCdwLXJpcHBsZS1kaXNhYmxlZCc6ICF0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkucmlwcGxlLFxyXG5cdFx0XHQnbGF5b3V0LXNpZGViYXItYWN0aXZlJzogdGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnNpZGViYXJBY3RpdmUsXHJcblx0XHRcdCdsYXlvdXQtc2lkZWJhci1hbmNob3JlZCc6IHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5hbmNob3JlZFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0aWYgKHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMubWVudU91dHNpZGVDbGlja0xpc3RlbmVyKSB7XHJcblx0XHRcdHRoaXMubWVudU91dHNpZGVDbGlja0xpc3RlbmVyKCk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJsYXlvdXQtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwiY29udGFpbmVyQ2xhc3NcIj5cclxuXHQ8YXBwLXNpZGViYXIgLz5cclxuXHQ8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbnRlbnQtd3JhcHBlclwiPlxyXG5cdFx0PGFwcC10b3BiYXIgLz5cclxuXHRcdDxkaXYgY2xhc3M9XCJsYXlvdXQtY29udGVudCBjYXJkXCI+XHJcblx0XHRcdDxyb3V0ZXItb3V0bGV0IC8+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHQ8YXBwLXByb2ZpbGVtZW51IC8+XHJcblx0PCEtLTxhcHAtY29uZmlnPjwvYXBwLWNvbmZpZz4tLT5cclxuXHQ8YXBwLWNoYXRib3Q+PC9hcHAtY2hhdGJvdD5cclxuXHQ8ZGl2IGNsYXNzPVwibGF5b3V0LW1hc2tcIj48L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48cC10b2FzdCBrZXk9XCJ0b2FzdC1yb290XCIgLz5cclxuPHAtZGlhbG9nIGtleT1cImRpYWxvZy1yb290XCIgLz5cclxuPHAtbWVzc2FnZXMga2V5PVwibWVzc2FnZXMtcm9vdFwiIC8+XHJcbjxwLWNvbmZpcm1Qb3B1cCBrZXk9XCJjb25maXJtUG9wdXAtcm9vdFwiIC8+XHJcbjxwLWNvbmZpcm1EaWFsb2cga2V5PVwiY29uZmlybURpYWxvZy1yb290XCIgLz5cclxuIl19
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3RoZW1lL2xheW91dC9hcHAvbGF5b3V0L2FwcC5sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL2xheW91dC9hcHAubGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUF3QixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBVSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFnQixNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJNUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDNUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7Ozs7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Q3BEOUIsNm9CQW9CQSw0Q0RJRSxPQUFPLG9GQUNQLFlBQVksMEpBQ1osbUJBQW1CLG9tQkFDbkIsa0JBQWtCLHlQQUNsQixZQUFZLHV1QkFDWixjQUFjLDJSQUNkLFdBQVcsd1dBQ1gsa0JBQWtCLHVEQUNsQiwwQkFBMEIsNERBQzFCLG1CQUFtQix3REFFbkIsdUJBQXVCOzsyRkFJWixrQkFBa0I7a0JBbkI5QixTQUFTO2lDQUNHLElBQUksWUFDTixZQUFZLFdBQ2I7d0JBQ1IsT0FBTzt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxrQkFBa0I7d0JBQ2xCLDBCQUEwQjt3QkFDMUIsbUJBQW1CO3dCQUNuQixtQkFBbUI7d0JBQ25CLHVCQUF1QjtxQkFDdkI7NEpBWStCLFVBQVU7c0JBQXpDLFNBQVM7dUJBQUMsbUJBQW1CO2dCQUVNLHVCQUF1QjtzQkFBMUQsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBRUgsU0FBUztzQkFBdkMsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIFJlbmRlcmVyMiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb25maXJtUG9wdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NvbmZpcm1wb3B1cCc7XHJcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcclxuaW1wb3J0IHsgTWVzc2FnZXNNb2R1bGUgfSBmcm9tICdwcmltZW5nL21lc3NhZ2VzJztcclxuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcclxuXHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAubGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYXBwLm1lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFByb2ZpbGVTaWRlYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vcHJvZmlsZVNpZGViYXIvYXBwLnByb2ZpbGVzaWRlYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcFNpZGViYXJDb21wb25lbnQgfSBmcm9tICcuLi9zaWRlYmFyL2FwcC5zaWRlYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcFRvcGJhckNvbXBvbmVudCB9IGZyb20gJy4uL3RvcGJhci9hcHAudG9wYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcENoYXRib3RDb21wb25lbnQgfSBmcm9tICcuLi9jaGF0Ym90L2FwcC5jaGF0Ym90LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEV4cGFuZGFibGVNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vZXhwYW5kYWJsZU1lbnUvZXhwYW5kYWJsZS1tZW51LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHNlbGVjdG9yOiAnYXBwLWxheW91dCcsXHJcblx0aW1wb3J0czogW1xyXG5cdFx0TmdDbGFzcyxcclxuXHRcdFJvdXRlck91dGxldCxcclxuXHRcdENvbmZpcm1EaWFsb2dNb2R1bGUsXHJcblx0XHRDb25maXJtUG9wdXBNb2R1bGUsXHJcblx0XHREaWFsb2dNb2R1bGUsXHJcblx0XHRNZXNzYWdlc01vZHVsZSxcclxuXHRcdFRvYXN0TW9kdWxlLFxyXG5cdFx0QXBwVG9wYmFyQ29tcG9uZW50LFxyXG5cdFx0QXBwUHJvZmlsZVNpZGViYXJDb21wb25lbnQsXHJcblx0XHRBcHBDaGF0Ym90Q29tcG9uZW50LFxyXG5cdFx0QXBwU2lkZWJhckNvbXBvbmVudCxcclxuXHRcdEV4cGFuZGFibGVNZW51Q29tcG9uZW50XHJcblx0XSxcclxuXHR0ZW1wbGF0ZVVybDogJy4vYXBwLmxheW91dC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwcExheW91dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblx0b3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG5cdG1lbnVPdXRzaWRlQ2xpY2tMaXN0ZW5lcjogYW55O1xyXG5cclxuXHRtZW51U2Nyb2xsTGlzdGVuZXI6IGFueTtcclxuXHJcblx0Z2xvYmFsVGhpczogYW55ID0gZ2xvYmFsVGhpcztcclxuXHJcblx0QFZpZXdDaGlsZChBcHBTaWRlYmFyQ29tcG9uZW50KSBhcHBTaWRlYmFyITogQXBwU2lkZWJhckNvbXBvbmVudDtcclxuXHJcblx0QFZpZXdDaGlsZChFeHBhbmRhYmxlTWVudUNvbXBvbmVudCkgZXhwYW5kYWJsZU1lbnVDb21wb25lbnQhOiBFeHBhbmRhYmxlTWVudUNvbXBvbmVudDtcclxuXHJcblx0QFZpZXdDaGlsZChBcHBUb3BiYXJDb21wb25lbnQpIGFwcFRvcGJhciE6IEFwcFRvcGJhckNvbXBvbmVudDtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIG1lbnVTZXJ2aWNlOiBBcHBNZW51U2VydmljZSxcclxuXHRcdHB1YmxpYyBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG5cdFx0cHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcblx0XHRwdWJsaWMgcm91dGVyOiBSb3V0ZXJcclxuXHQpIHtcclxuXHRcdHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uID0gdGhpcy5sYXlvdXRTZXJ2aWNlLm92ZXJsYXlPcGVuJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRpZiAoIXRoaXMubWVudU91dHNpZGVDbGlja0xpc3RlbmVyKSB7XHJcblx0XHRcdFx0dGhpcy5tZW51T3V0c2lkZUNsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IGlzT3V0c2lkZUNsaWNrZWQgPSAhKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmFwcFNpZGViYXIuZWwubmF0aXZlRWxlbWVudC5pc1NhbWVOb2RlKGV2ZW50LnRhcmdldCkgfHxcclxuXHRcdFx0XHRcdFx0dGhpcy5hcHBTaWRlYmFyLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLmFwcFRvcGJhci5tZW51QnV0dG9uLm5hdGl2ZUVsZW1lbnQuaXNTYW1lTm9kZShldmVudC50YXJnZXQpIHx8XHJcblx0XHRcdFx0XHRcdHRoaXMuYXBwVG9wYmFyLm1lbnVCdXR0b24ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0aWYgKGlzT3V0c2lkZUNsaWNrZWQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5oaWRlTWVudSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0KHRoaXMubGF5b3V0U2VydmljZS5pc0hvcml6b250YWwoKSB8fCB0aGlzLmxheW91dFNlcnZpY2UuaXNTbGltKCkgfHwgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzU2xpbVBsdXMoKSkgJiZcclxuXHRcdFx0XHQhdGhpcy5tZW51U2Nyb2xsTGlzdGVuZXJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0dGhpcy5tZW51U2Nyb2xsTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcclxuXHRcdFx0XHRcdHRoaXMuYXBwU2lkZWJhci5tZW51Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsXHJcblx0XHRcdFx0XHQnc2Nyb2xsJyxcclxuXHRcdFx0XHRcdChldmVudCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5oaWRlTWVudSgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlKSB7XHJcblx0XHRcdFx0dGhpcy5ibG9ja0JvZHlTY3JvbGwoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0aWYgKCF0aGlzLmxheW91dFNlcnZpY2UubWZlQXBwSXRlbUNsaWNrZWQoKSkgdGhpcy5oaWRlTWVudSgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRibG9ja0JvZHlTY3JvbGwoKTogdm9pZCB7XHJcblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QpIHtcclxuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdibG9ja2VkLXNjcm9sbCcpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKz0gJyBibG9ja2VkLXNjcm9sbCc7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR1bmJsb2NrQm9keVNjcm9sbCgpOiB2b2lkIHtcclxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdCkge1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2Jsb2NrZWQtc2Nyb2xsJyk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9IGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lLnJlcGxhY2UoXHJcblx0XHRcdFx0bmV3IFJlZ0V4cCgnKF58XFxcXGIpJyArICdibG9ja2VkLXNjcm9sbCcuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKFxcXFxifCQpJywgJ2dpJyksXHJcblx0XHRcdFx0JyAnXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRoaWRlTWVudSgpIHtcclxuXHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5vdmVybGF5TWVudUFjdGl2ZSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSBmYWxzZTtcclxuXHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5tZW51SG92ZXJBY3RpdmUgPSBmYWxzZTtcclxuXHRcdHRoaXMubWVudVNlcnZpY2UucmVzZXQoKTtcclxuXHJcblx0XHRpZiAodGhpcy5tZW51T3V0c2lkZUNsaWNrTGlzdGVuZXIpIHtcclxuXHRcdFx0dGhpcy5tZW51T3V0c2lkZUNsaWNrTGlzdGVuZXIoKTtcclxuXHRcdFx0dGhpcy5tZW51T3V0c2lkZUNsaWNrTGlzdGVuZXIgPSBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLm1lbnVTY3JvbGxMaXN0ZW5lcikge1xyXG5cdFx0XHR0aGlzLm1lbnVTY3JvbGxMaXN0ZW5lcigpO1xyXG5cdFx0XHR0aGlzLm1lbnVTY3JvbGxMaXN0ZW5lciA9IG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy51bmJsb2NrQm9keVNjcm9sbCgpO1xyXG5cdH1cclxuXHJcblx0Z2V0IGNvbnRhaW5lckNsYXNzKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0J2xheW91dC1saWdodCc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5jb2xvclNjaGVtZSA9PT0gJ2xpZ2h0JyxcclxuXHRcdFx0J2xheW91dC1kaW0nOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkuY29sb3JTY2hlbWUgPT09ICdkaW0nLFxyXG5cdFx0XHQnbGF5b3V0LWRhcmsnOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkuY29sb3JTY2hlbWUgPT09ICdkYXJrJyxcclxuXHRcdFx0J2xheW91dC1jb2xvcnNjaGVtZS1tZW51JzogdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbmZpZygpLm1lbnVUaGVtZSA9PT0gJ2NvbG9yU2NoZW1lJyxcclxuXHRcdFx0J2xheW91dC1wcmltYXJ5Y29sb3ItbWVudSc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51VGhlbWUgPT09ICdwcmltYXJ5Q29sb3InLFxyXG5cdFx0XHQnbGF5b3V0LXRyYW5zcGFyZW50LW1lbnUnOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkubWVudVRoZW1lID09PSAndHJhbnNwYXJlbnQnLFxyXG5cdFx0XHQnbGF5b3V0LW92ZXJsYXknOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkubWVudU1vZGUgPT09ICdvdmVybGF5JyxcclxuXHRcdFx0J2xheW91dC1zdGF0aWMnOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkubWVudU1vZGUgPT09ICdzdGF0aWMnLFxyXG5cdFx0XHQnbGF5b3V0LXNsaW0nOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkubWVudU1vZGUgPT09ICdzbGltJyxcclxuXHRcdFx0J2xheW91dC1zbGltLXBsdXMnOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkubWVudU1vZGUgPT09ICdzbGltLXBsdXMnLFxyXG5cdFx0XHQnbGF5b3V0LWhvcml6b250YWwnOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkubWVudU1vZGUgPT09ICdob3Jpem9udGFsJyxcclxuXHRcdFx0J2xheW91dC1yZXZlYWwnOiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkubWVudU1vZGUgPT09ICdyZXZlYWwnLFxyXG5cdFx0XHQnbGF5b3V0LWRyYXdlcic6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51TW9kZSA9PT0gJ2RyYXdlcicsXHJcblx0XHRcdCdsYXlvdXQtc3RhdGljLWluYWN0aXZlJzpcclxuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSAmJiB0aGlzLmxheW91dFNlcnZpY2UuY29uZmlnKCkubWVudU1vZGUgPT09ICdzdGF0aWMnLFxyXG5cdFx0XHQnbGF5b3V0LW92ZXJsYXktYWN0aXZlJzogdGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLm92ZXJsYXlNZW51QWN0aXZlLFxyXG5cdFx0XHQnbGF5b3V0LW1vYmlsZS1hY3RpdmUnOiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSxcclxuXHRcdFx0J3AtaW5wdXQtZmlsbGVkJzogdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbmZpZygpLmlucHV0U3R5bGUgPT09ICdmaWxsZWQnLFxyXG5cdFx0XHQncC1yaXBwbGUtZGlzYWJsZWQnOiAhdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbmZpZygpLnJpcHBsZSxcclxuXHRcdFx0J2xheW91dC1zaWRlYmFyLWFjdGl2ZSc6IHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zaWRlYmFyQWN0aXZlLFxyXG5cdFx0XHQnbGF5b3V0LXNpZGViYXItYW5jaG9yZWQnOiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuYW5jaG9yZWQsXHJcblx0XHRcdC8vIGlmIGV4cGFuZGFibGVNZW51Q29tcG9uZW50IGlzIHByZXNlbnQsIGFkZCB0aGUgY2xhc3MgJ25ldy1zaWRlYmFyLWxheW91dCdcclxuXHRcdFx0J25ldy1zaWRlYmFyLWxheW91dCc6IHRoaXMubGF5b3V0U2VydmljZS5jb25maWcoKS5tZW51TW9kZSA9PT0gJ2V4cGFuZGFibGUnLFxyXG5cdFx0XHQnc2Vjb25kYXJ5LWV4cGFuZGVkJzogdGhpcy5leHBhbmRhYmxlTWVudUNvbXBvbmVudD8uc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHRpZiAodGhpcy5vdmVybGF5TWVudU9wZW5TdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0dGhpcy5vdmVybGF5TWVudU9wZW5TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5tZW51T3V0c2lkZUNsaWNrTGlzdGVuZXIpIHtcclxuXHRcdFx0dGhpcy5tZW51T3V0c2lkZUNsaWNrTGlzdGVuZXIoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImxheW91dC1jb250YWluZXJcIiBbbmdDbGFzc109XCJjb250YWluZXJDbGFzc1wiPlxyXG5cdFx0PGFwcC1leHBhbmRhYmxlLW1lbnUgLz5cclxuXHRcdDwhLS0gPGFwcC1zaWRlYmFyIC8+XHQgLS0+XHJcblx0XHQ8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbnRlbnQtd3JhcHBlclwiPlxyXG5cdFx0PGFwcC10b3BiYXIgLz5cclxuXHRcdDxkaXYgY2xhc3M9XCJsYXlvdXQtY29udGVudCBjYXJkXCI+XHJcblx0XHRcdDxyb3V0ZXItb3V0bGV0IC8+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHQ8YXBwLXByb2ZpbGVtZW51IC8+XHJcblx0PCEtLTxhcHAtY29uZmlnPjwvYXBwLWNvbmZpZz4tLT5cclxuXHQ8YXBwLWNoYXRib3Q+PC9hcHAtY2hhdGJvdD5cclxuXHQ8ZGl2IGNsYXNzPVwibGF5b3V0LW1hc2tcIj48L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48cC10b2FzdCBrZXk9XCJ0b2FzdC1yb290XCIgLz5cclxuPHAtZGlhbG9nIGtleT1cImRpYWxvZy1yb290XCIgLz5cclxuPHAtbWVzc2FnZXMga2V5PVwibWVzc2FnZXMtcm9vdFwiIC8+XHJcbjxwLWNvbmZpcm1Qb3B1cCBrZXk9XCJjb25maXJtUG9wdXAtcm9vdFwiIC8+XHJcbjxwLWNvbmZpcm1EaWFsb2cga2V5PVwiY29uZmlybURpYWxvZy1yb290XCIgLz5cclxuIl19