@netgrif/components-core 6.4.0-beta.2 → 6.4.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/esm2020/assets/i18n/de.json +5 -1
  2. package/esm2020/assets/i18n/en.json +5 -1
  3. package/esm2020/assets/i18n/sk.json +5 -1
  4. package/esm2020/lib/header/abstract-header.component.mjs +22 -7
  5. package/esm2020/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.mjs +1 -10
  6. package/esm2020/lib/navigation/model/group-navigation-constants.mjs +116 -35
  7. package/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +118 -117
  8. package/esm2020/lib/navigation/navigation-tree/abstract-navigation-tree.component.mjs +3 -126
  9. package/esm2020/lib/navigation/service/uri.service.mjs +3 -3
  10. package/esm2020/lib/navigation/utility/filter-extraction.service.mjs +33 -9
  11. package/esm2020/lib/navigation/utility/navigation-item-task-utility-methods.mjs +38 -4
  12. package/esm2020/lib/panel/task-panel/abstract-task-panel.component.mjs +5 -2
  13. package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.mjs +5 -2
  14. package/esm2020/lib/routing/routing-builder/routing-builder.service.mjs +7 -5
  15. package/esm2020/lib/side-menu/content-components/import-net/abstract-import-net.component.mjs +10 -7
  16. package/esm2020/lib/side-menu/content-components/new-case/model/new-case-injection-data.mjs +1 -1
  17. package/esm2020/lib/utility/navigation-item-default-headers-factory.mjs +22 -0
  18. package/esm2020/lib/utility/public-api.mjs +2 -1
  19. package/esm2020/lib/view/case-view/service/case-view-service.mjs +10 -7
  20. package/fesm2015/netgrif-components-core.mjs +1552 -1475
  21. package/fesm2015/netgrif-components-core.mjs.map +1 -1
  22. package/fesm2020/netgrif-components-core.mjs +1538 -1468
  23. package/fesm2020/netgrif-components-core.mjs.map +1 -1
  24. package/lib/header/abstract-header.component.d.ts +7 -2
  25. package/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.d.ts +0 -1
  26. package/lib/navigation/model/group-navigation-constants.d.ts +115 -34
  27. package/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.d.ts +30 -32
  28. package/lib/navigation/navigation-tree/abstract-navigation-tree.component.d.ts +2 -27
  29. package/lib/navigation/utility/filter-extraction.service.d.ts +9 -2
  30. package/lib/navigation/utility/navigation-item-task-utility-methods.d.ts +16 -1
  31. package/lib/panel/task-panel/abstract-task-panel.component.d.ts +2 -1
  32. package/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.d.ts +2 -1
  33. package/lib/routing/routing-builder/routing-builder.service.d.ts +2 -0
  34. package/lib/side-menu/content-components/import-net/abstract-import-net.component.d.ts +3 -1
  35. package/lib/side-menu/content-components/new-case/model/new-case-injection-data.d.ts +2 -1
  36. package/lib/utility/navigation-item-default-headers-factory.d.ts +3 -0
  37. package/lib/utility/public-api.d.ts +1 -0
  38. package/lib/view/case-view/service/case-view-service.d.ts +2 -2
  39. package/package.json +1 -1
  40. package/src/assets/i18n/de.json +5 -1
  41. package/src/assets/i18n/en.json +5 -1
  42. package/src/assets/i18n/sk.json +5 -1
@@ -1,36 +1,44 @@
1
1
  import { Breakpoints } from '@angular/cdk/layout';
2
2
  import { Component, Input } from '@angular/core';
3
- import { forkJoin, of } from 'rxjs';
3
+ import { of } from 'rxjs';
4
4
  import { map } from 'rxjs/operators';
5
- import { NAE_ROUTING_CONFIGURATION_PATH } from '../../routing/routing-builder/routing-builder.service';
6
5
  import { LoadingEmitter } from '../../utility/loading-emitter';
6
+ import { GroupNavigationConstants } from "../model/group-navigation-constants";
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/router";
9
9
  import * as i2 from "@angular/cdk/layout";
10
10
  import * as i3 from "../../translate/language.service";
11
- import * as i4 from "../../user/services/user.service";
12
- import * as i5 from "../../authorization/permission/access.service";
13
- import * as i6 from "../../logger/services/logger.service";
14
- import * as i7 from "../../configuration/configuration.service";
15
- import * as i8 from "../service/uri.service";
16
- import * as i9 from "../../impersonation/services/impersonation-user-select.service";
17
- import * as i10 from "../../impersonation/services/impersonation.service";
18
- import * as i11 from "../../routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service";
19
- export const FILTER_IDENTIFIERS = [
20
- 'preference_filter_item',
11
+ import * as i4 from "@ngx-translate/core";
12
+ import * as i5 from "../../user/services/user.service";
13
+ import * as i6 from "../../authorization/permission/access.service";
14
+ import * as i7 from "../../logger/services/logger.service";
15
+ import * as i8 from "../../configuration/configuration.service";
16
+ import * as i9 from "../service/uri.service";
17
+ import * as i10 from "../../impersonation/services/impersonation-user-select.service";
18
+ import * as i11 from "../../impersonation/services/impersonation.service";
19
+ import * as i12 from "../../routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service";
20
+ export const MENU_IDENTIFIERS = [
21
+ 'preference_item',
21
22
  ];
22
- export const FILTER_VIEW_TASK_TRANSITION_ID = 'view';
23
- export const FILTER_DEFAULT_HEADERS_ID = 'default_headers';
23
+ export const SETTINGS_TRANSITION_ID = 'item_settings';
24
24
  const LEFT_DRAWER_DEFAULT_WIDTH = 60;
25
25
  const RIGHT_DRAWER_DEFAULT_WIDTH = 240;
26
26
  const RIGHT_DRAWER_DEFAULT_MIN_WIDTH = 180;
27
27
  const RIGHT_DRAWER_MAX_WIDTH = 460;
28
+ const RIGHT_SIDE_NEW_PAGE_SIZE = 10;
29
+ const RIGHT_SIDE_INIT_PAGE_SIZE = 20;
30
+ var MenuOrder;
31
+ (function (MenuOrder) {
32
+ MenuOrder[MenuOrder["Ascending"] = 0] = "Ascending";
33
+ MenuOrder[MenuOrder["Descending"] = 1] = "Descending";
34
+ })(MenuOrder || (MenuOrder = {}));
28
35
  export class AbstractNavigationDoubleDrawerComponent {
29
- constructor(_router, _activatedRoute, _breakpoint, _languageService, _userService, _accessService, _log, _config, _uriService, _impersonationUserSelect, _impersonation, _dynamicRoutingService) {
36
+ constructor(_router, _activatedRoute, _breakpoint, _languageService, _translateService, _userService, _accessService, _log, _config, _uriService, _impersonationUserSelect, _impersonation, _dynamicRoutingService) {
30
37
  this._router = _router;
31
38
  this._activatedRoute = _activatedRoute;
32
39
  this._breakpoint = _breakpoint;
33
40
  this._languageService = _languageService;
41
+ this._translateService = _translateService;
34
42
  this._userService = _userService;
35
43
  this._accessService = _accessService;
36
44
  this._log = _log;
@@ -64,14 +72,12 @@ export class AbstractNavigationDoubleDrawerComponent {
64
72
  disableClose: false,
65
73
  width: RIGHT_DRAWER_DEFAULT_WIDTH,
66
74
  };
67
- this.leftNodes = new Array();
68
- this.rightNodes = new Array();
69
- this.views = new Array();
75
+ this.leftItems = new Array();
76
+ this.rightItems = new Array();
70
77
  this.leftLoading$ = new LoadingEmitter();
71
78
  this.rightLoading$ = new LoadingEmitter();
72
79
  this.nodeLoading$ = new LoadingEmitter();
73
- this._childCustomViews = {};
74
- this.moreMenuItems = new Array();
80
+ this.itemsOrder = MenuOrder.Ascending;
75
81
  }
76
82
  ngOnInit() {
77
83
  this._breakpointSubscription = this._breakpoint.observe([Breakpoints.HandsetLandscape]).subscribe(() => {
@@ -89,14 +95,6 @@ export class AbstractNavigationDoubleDrawerComponent {
89
95
  this._currentNodeSubscription = this._uriService.activeNode$.subscribe(node => {
90
96
  this.currentNode = node;
91
97
  });
92
- const viewConfigurationPath = this._activatedRoute.snapshot.data[NAE_ROUTING_CONFIGURATION_PATH];
93
- if (!!viewConfigurationPath) {
94
- const viewConfiguration = this._config.getViewByPath(viewConfigurationPath);
95
- Object.entries(viewConfiguration.children).forEach(([key, childView]) => {
96
- this.resolveUriForChildViews(viewConfigurationPath + '/' + key, childView);
97
- this.resolveHiddenMenuItemFromChildViews(viewConfigurationPath + '/' + key, childView);
98
- });
99
- }
100
98
  }
101
99
  get currentNode() {
102
100
  return this._currentNode;
@@ -127,47 +125,17 @@ export class AbstractNavigationDoubleDrawerComponent {
127
125
  this.rightLoading$.off();
128
126
  }
129
127
  if (this._uriService.isRoot(node)) {
130
- this.leftNodes = [];
128
+ this.leftItems = [];
131
129
  this.loadRightSide();
132
130
  return;
133
131
  }
134
- if (!this.leftNodes.find(n => n.id === node.id)) {
132
+ if (!this.leftItems.find(item => item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value === node.uriPath)) {
135
133
  this.loadLeftSide();
136
134
  }
137
135
  this.loadRightSide();
138
136
  }
139
- resolveUriForChildViews(configPath, childView) {
140
- if (!childView.processUri)
141
- return;
142
- if (!this._accessService.canAccessView(childView, configPath))
143
- return;
144
- if (!this._childCustomViews[childView.processUri]) {
145
- this._childCustomViews[childView.processUri] = {};
146
- }
147
- this._childCustomViews[childView.processUri][configPath] = {
148
- id: configPath,
149
- ...childView,
150
- };
151
- }
152
- resolveHiddenMenuItemFromChildViews(configPath, childView) {
153
- if (!childView.navigation)
154
- return;
155
- if (!this._accessService.canAccessView(childView, configPath))
156
- return;
157
- // @ts-ignore
158
- if (!!(childView?.navigation?.hidden)) {
159
- this.moreMenuItems.push({
160
- id: configPath,
161
- ...childView,
162
- });
163
- }
164
- }
165
137
  ngOnDestroy() {
166
138
  this._breakpointSubscription?.unsubscribe();
167
- this._leftNodesSubscription?.unsubscribe();
168
- this._rightNodesSubscription?.unsubscribe();
169
- this._filtersSubscription?.unsubscribe();
170
- this._rootSubscription?.unsubscribe();
171
139
  this._currentNodeSubscription?.unsubscribe();
172
140
  this.leftLoading$.complete();
173
141
  this.rightLoading$.complete();
@@ -258,73 +226,111 @@ export class AbstractNavigationDoubleDrawerComponent {
258
226
  return;
259
227
  this.currentNode = this._currentNode.parent;
260
228
  }
261
- onNodeClick(node) {
262
- this.currentNode = node;
263
- }
264
- onViewClick(view) {
229
+ onItemClick(item) {
265
230
  this._uriService.activeNode = this._currentNode;
231
+ if (this.hasItemChildren(item)) {
232
+ const path = item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value;
233
+ this._uriService.getNodeByPath(path).subscribe(node => {
234
+ this.currentNode = node;
235
+ }, error => {
236
+ this._log.error(error);
237
+ });
238
+ }
239
+ }
240
+ hasItemChildren(item) {
241
+ return item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_HAS_CHILDREN)?.value;
242
+ }
243
+ isItemAndNodeEqual(item, node) {
244
+ return item.resource.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_NODE_PATH)?.value === node.uriPath;
266
245
  }
267
246
  loadLeftSide() {
268
247
  if (this._uriService.isRoot(this._currentNode)) {
269
- this.leftNodes = [];
248
+ this.leftItems = [];
270
249
  return;
271
250
  }
272
251
  this.leftLoading$.on();
273
- this._leftNodesSubscription = this._uriService.getSiblingsOfNode(this._currentNode).subscribe(nodes => {
274
- this.leftNodes = nodes instanceof Array ? nodes : [];
275
- this.leftNodes.sort((a, b) => this.compareStrings(a.name, b.name));
276
- this.leftLoading$.off();
252
+ this._uriService.getCasesOfNode(this.currentNode.parent, MENU_IDENTIFIERS, 0, 1).subscribe(page => {
253
+ page?.pagination?.totalElements === 0 ? of([]) : this._uriService.getCasesOfNode(this.currentNode.parent, MENU_IDENTIFIERS, 0, page.pagination.totalElements).pipe(map(p => p.content)).subscribe(result => {
254
+ this.leftItems = result.filter(folder => folder.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_HAS_CHILDREN)?.value === true).map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
255
+ this.leftItems.sort((a, b) => a?.navigation?.title.localeCompare(b?.navigation?.title));
256
+ this.leftLoading$.off();
257
+ }, error => {
258
+ this._log.error(error);
259
+ this.leftItems = [];
260
+ this.leftLoading$.off();
261
+ });
277
262
  }, error => {
278
263
  this._log.error(error);
279
- this.leftNodes = [];
264
+ this.leftItems = [];
280
265
  this.leftLoading$.off();
281
266
  });
282
267
  }
283
268
  loadRightSide() {
284
269
  this.rightLoading$.on();
285
- this._uriService.getCasesOfNode(this.currentNode, FILTER_IDENTIFIERS, 0, 1).subscribe(page => {
286
- this._log.debug('Number of filters for uri ' + this._currentNode.uriPath + ': ' + page?.pagination?.totalElements);
287
- forkJoin({
288
- folders: this._uriService.getChildNodes(this._currentNode),
289
- filters: page?.pagination?.totalElements === 0 ? of([]) : this._uriService.getCasesOfNode(this._currentNode, FILTER_IDENTIFIERS, 0, page.pagination.totalElements).pipe(map(p => p.content)),
290
- }).subscribe(result => {
291
- this.rightNodes = result.folders instanceof Array ? result.folders : [];
292
- this.rightNodes.sort((a, b) => this.compareStrings(a.name, b.name));
293
- this.views = (result.filters instanceof Array ? result.filters : []).map(f => this.resolveFilterCaseToViewNavigationItem(f)).filter(i => !!i);
294
- if (!!this._childCustomViews[this._currentNode.uriPath]) {
295
- this.views.push(...Object.values(this._childCustomViews[this._currentNode.uriPath]));
270
+ this.moreItems = [];
271
+ this._uriService.getCasesOfNode(this.currentNode, MENU_IDENTIFIERS, 0, 1).subscribe(page => {
272
+ this._log.debug('Number of items for uri ' + this._currentNode.uriPath + ': ' + page?.pagination?.totalElements);
273
+ (page?.pagination?.totalElements === 0 ? of([]) : this._uriService.getCasesOfNode(this._currentNode, MENU_IDENTIFIERS, 0, page.pagination.totalElements).pipe(map(p => p.content))).subscribe(result => {
274
+ result = result.sort((a, b) => a?.title.localeCompare(b?.title));
275
+ if (result.length > RIGHT_SIDE_INIT_PAGE_SIZE) {
276
+ const rawRightItems = result.splice(0, RIGHT_SIDE_INIT_PAGE_SIZE);
277
+ this.rightItems = rawRightItems.map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
278
+ this.moreItems = result.map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
279
+ }
280
+ else {
281
+ this.rightItems = result.map(folder => this.resolveItemCaseToNavigationItem(folder)).filter(i => !!i);
296
282
  }
297
- // @ts-ignore
298
- this.views.sort((a, b) => this.compareStrings(a?.navigation?.title, b?.navigation?.title));
299
283
  this.rightLoading$.off();
300
284
  }, error => {
301
285
  this._log.error(error);
302
- this.rightNodes = [];
303
- this.views = [];
286
+ this.rightItems = [];
287
+ this.moreItems = [];
304
288
  this.rightLoading$.off();
305
289
  });
306
290
  }, error => {
307
291
  this._log.error(error);
308
- this.rightNodes = [];
309
- this.views = [];
292
+ this.rightItems = [];
293
+ this.moreItems = [];
310
294
  this.rightLoading$.off();
311
295
  });
312
296
  }
313
- resolveFilterCaseToViewNavigationItem(filter) {
297
+ loadMoreItems() {
298
+ if (this.moreItems.length > RIGHT_SIDE_NEW_PAGE_SIZE) {
299
+ this.rightItems.push(...this.moreItems.splice(0, RIGHT_SIDE_NEW_PAGE_SIZE));
300
+ }
301
+ else {
302
+ this.rightItems.push(...this.moreItems);
303
+ this.moreItems = [];
304
+ }
305
+ }
306
+ isAscending() {
307
+ return this.itemsOrder === MenuOrder.Ascending;
308
+ }
309
+ switchOrder() {
310
+ this.itemsOrder = (this.itemsOrder + 1) % 2;
311
+ let multiplier = 1;
312
+ if (this.itemsOrder === MenuOrder.Descending) {
313
+ multiplier = -1;
314
+ }
315
+ this.rightItems = this.rightItems.sort((a, b) => multiplier * a?.navigation?.title.localeCompare(b?.navigation?.title));
316
+ this.leftItems = this.leftItems.sort((a, b) => multiplier * a?.navigation?.title.localeCompare(b?.navigation?.title));
317
+ this.moreItems = this.moreItems.sort((a, b) => multiplier * a?.navigation?.title.localeCompare(b?.navigation?.title));
318
+ }
319
+ resolveItemCaseToNavigationItem(itemCase) {
314
320
  const item = {
315
321
  access: {},
316
322
  navigation: {
317
- icon: filter.immediateData.find(f => f.stringId === 'icon_name')?.value || this.filterIcon,
318
- title: filter.immediateData.find(f => f.stringId === 'entry_name')?.value?.defaultValue || filter.title,
323
+ icon: itemCase.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_MENU_ICON)?.value || this.filterIcon,
324
+ title: this.getTranslation(itemCase.immediateData.find(f => f.stringId === GroupNavigationConstants.ITEM_FIELD_ID_MENU_NAME)?.value) || itemCase.title,
319
325
  },
320
326
  routing: {
321
- path: this.getFilterRoutingPath(filter),
327
+ path: this.getItemRoutingPath(itemCase),
322
328
  },
323
- id: filter.stringId,
324
- resource: filter,
329
+ id: itemCase.stringId,
330
+ resource: itemCase,
325
331
  };
326
- const resolvedRoles = this.resolveAccessRoles(filter, 'allowed_roles');
327
- const resolvedBannedRoles = this.resolveAccessRoles(filter, 'banned_roles');
332
+ const resolvedRoles = this.resolveAccessRoles(itemCase, GroupNavigationConstants.ITEM_FIELD_ID_ALLOWED_ROLES);
333
+ const resolvedBannedRoles = this.resolveAccessRoles(itemCase, GroupNavigationConstants.ITEM_FIELD_ID_BANNED_ROLES);
328
334
  if (!!resolvedRoles)
329
335
  item.access['role'] = resolvedRoles;
330
336
  if (!!resolvedBannedRoles)
@@ -333,6 +339,10 @@ export class AbstractNavigationDoubleDrawerComponent {
333
339
  return;
334
340
  return item;
335
341
  }
342
+ getTranslation(value) {
343
+ const locale = this._translateService.currentLang.split('-')[0];
344
+ return locale in value.translations ? value.translations[locale] : value.defaultValue;
345
+ }
336
346
  resolveAccessRoles(filter, roleType) {
337
347
  const allowedRoles = filter.immediateData.find(f => f.stringId === roleType)?.options;
338
348
  if (!allowedRoles || Object.keys(allowedRoles).length === 0)
@@ -347,17 +357,11 @@ export class AbstractNavigationDoubleDrawerComponent {
347
357
  });
348
358
  return roles;
349
359
  }
350
- getFilterRoutingPath(filterCase) {
351
- const viewTaskId = filterCase.tasks.find(taskPair => taskPair.transition === FILTER_VIEW_TASK_TRANSITION_ID).task;
360
+ getItemRoutingPath(itemCase) {
361
+ const transId = SETTINGS_TRANSITION_ID;
362
+ const taskId = itemCase.tasks.find(taskPair => taskPair.transition === transId).task;
352
363
  const url = this._dynamicRoutingService.route;
353
- return `/${url}/${viewTaskId}`;
354
- }
355
- compareStrings(a, b) {
356
- if (!a && !b)
357
- return 0;
358
- if (a < b)
359
- return -1;
360
- return a > b ? 1 : 0;
364
+ return `/${url}/${taskId}`;
361
365
  }
362
366
  /**
363
367
  * Function to check whether the back button should be displayed
@@ -366,20 +370,17 @@ export class AbstractNavigationDoubleDrawerComponent {
366
370
  isOnZeroLevel() {
367
371
  return !!this._currentNode?.level ? this._currentNode.level == 0 : true;
368
372
  }
369
- isLeftNodesEmpty() {
370
- return this.leftNodes === undefined || this.leftNodes.length === 0;
371
- }
372
- isRightNodesEmpty() {
373
- return this.rightNodes === undefined || this.rightNodes.length === 0;
373
+ isLeftItemsEmpty() {
374
+ return this.leftItems === undefined || this.leftItems.length === 0;
374
375
  }
375
- isViewsEmpty() {
376
- return this.views === undefined || this.views.length === 0;
376
+ isRightItemsEmpty() {
377
+ return this.rightItems === undefined || this.rightItems.length === 0;
377
378
  }
378
379
  uriNodeTrackBy(index, node) {
379
380
  return node.id;
380
381
  }
381
- viewsTrackBy(index, view) {
382
- return view.id;
382
+ itemsTrackBy(index, item) {
383
+ return item.id;
383
384
  }
384
385
  onResizeEvent(event) {
385
386
  if (event.rectangle.width > RIGHT_DRAWER_MAX_WIDTH) {
@@ -396,7 +397,7 @@ export class AbstractNavigationDoubleDrawerComponent {
396
397
  // this.contentWidth.next(this.width);
397
398
  }
398
399
  }
399
- AbstractNavigationDoubleDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractNavigationDoubleDrawerComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.BreakpointObserver }, { token: i3.LanguageService }, { token: i4.UserService }, { token: i5.AccessService }, { token: i6.LoggerService }, { token: i7.ConfigurationService }, { token: i8.UriService }, { token: i9.ImpersonationUserSelectService }, { token: i10.ImpersonationService }, { token: i11.DynamicNavigationRouteProviderService }], target: i0.ɵɵFactoryTarget.Component });
400
+ AbstractNavigationDoubleDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractNavigationDoubleDrawerComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.BreakpointObserver }, { token: i3.LanguageService }, { token: i4.TranslateService }, { token: i5.UserService }, { token: i6.AccessService }, { token: i7.LoggerService }, { token: i8.ConfigurationService }, { token: i9.UriService }, { token: i10.ImpersonationUserSelectService }, { token: i11.ImpersonationService }, { token: i12.DynamicNavigationRouteProviderService }], target: i0.ɵɵFactoryTarget.Component });
400
401
  AbstractNavigationDoubleDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractNavigationDoubleDrawerComponent, selector: "ncc-abstract-navigation-double-drawer", inputs: { portalLeftMenu: "portalLeftMenu", portalRightMenu: "portalRightMenu", imageRouterLink: "imageRouterLink", imageAlt: "imageAlt", image: "image", profileRouterLink: "profileRouterLink", includeUser: "includeUser", includeLanguage: "includeLanguage", includeMoreMenu: "includeMoreMenu", includeImpersonation: "includeImpersonation", allClosable: "allClosable", folderIcon: "folderIcon", openedFolderIcon: "openedFolderIcon", filterIcon: "filterIcon", foldersCategoryName: "foldersCategoryName", viewsCategoryName: "viewsCategoryName" }, ngImport: i0, template: '', isInline: true });
401
402
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractNavigationDoubleDrawerComponent, decorators: [{
402
403
  type: Component,
@@ -404,7 +405,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
404
405
  selector: 'ncc-abstract-navigation-double-drawer',
405
406
  template: '',
406
407
  }]
407
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.BreakpointObserver }, { type: i3.LanguageService }, { type: i4.UserService }, { type: i5.AccessService }, { type: i6.LoggerService }, { type: i7.ConfigurationService }, { type: i8.UriService }, { type: i9.ImpersonationUserSelectService }, { type: i10.ImpersonationService }, { type: i11.DynamicNavigationRouteProviderService }]; }, propDecorators: { portalLeftMenu: [{
408
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.BreakpointObserver }, { type: i3.LanguageService }, { type: i4.TranslateService }, { type: i5.UserService }, { type: i6.AccessService }, { type: i7.LoggerService }, { type: i8.ConfigurationService }, { type: i9.UriService }, { type: i10.ImpersonationUserSelectService }, { type: i11.ImpersonationService }, { type: i12.DynamicNavigationRouteProviderService }]; }, propDecorators: { portalLeftMenu: [{
408
409
  type: Input
409
410
  }], portalRightMenu: [{
410
411
  type: Input
@@ -437,4 +438,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
437
438
  }], viewsCategoryName: [{
438
439
  type: Input
439
440
  }] } });
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9uYXZpZ2F0aW9uL25hdmlnYXRpb24tZG91YmxlLWRyYXdlci9hYnN0cmFjdC1uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFJL0UsT0FBTyxFQUFDLFFBQVEsRUFBYyxFQUFFLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBV25DLE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBSXJHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWdCN0QsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDOUIsd0JBQXdCO0NBQzNCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxNQUFNLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsaUJBQWlCLENBQUM7QUFFM0QsTUFBTSx5QkFBeUIsR0FBRyxFQUFFLENBQUM7QUFDckMsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFDdkMsTUFBTSw4QkFBOEIsR0FBRyxHQUFHLENBQUM7QUFDM0MsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFNbkMsTUFBTSxPQUFnQix1Q0FBdUM7SUFvRXpELFlBQWdDLE9BQWUsRUFDZixlQUErQixFQUMvQixXQUErQixFQUMvQixnQkFBaUMsRUFDakMsWUFBeUIs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QUcsc0JBQXNCLENBQUM7U0FDeEQ7YUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLDhCQUE4QixFQUFFO1lBQy9ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsOEJBQThCLENBQUM7U0FDaEU7YUFBTTtZQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7U0FDdkQ7UUFDRCx5REFBeUQ7UUFDekQsb0VBQW9FO1FBQ3BFLHNDQUFzQztJQUMxQyxDQUFDOztxSUFoYmlCLHVDQUF1Qzt5SEFBdkMsdUNBQXVDLDZtQkFGL0MsRUFBRTs0RkFFTSx1Q0FBdUM7a0JBSjVELFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHVDQUF1QztvQkFDakQsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7NmNBR1ksY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50c30gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdERyYXdlck1vZGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtSZXNpemVFdmVudH0gZnJvbSAnYW5ndWxhci1yZXNpemFibGUtZWxlbWVudCc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JvbGVBY2Nlc3MsIFZpZXd9IGZyb20gJy4uLy4uLy4uL2NvbW1vbnMvc2NoZW1hJztcbmltcG9ydCB7QWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aG9yaXphdGlvbi9wZXJtaXNzaW9uL2FjY2Vzcy5zZXJ2aWNlJztcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7SW1wZXJzb25hdGlvblVzZXJTZWxlY3RTZXJ2aWNlfSBmcm9tICcuLi8uLi9pbXBlcnNvbmF0aW9uL3NlcnZpY2VzL2ltcGVyc29uYXRpb24tdXNlci1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQge0ltcGVyc29uYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9pbXBlcnNvbmF0aW9uL3NlcnZpY2VzL2ltcGVyc29uYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0Nhc2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvY2FzZSc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNOYXZpZ2F0aW9uUm91dGVQcm92aWRlclNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3JvdXRpbmcvZHluYW1pYy1uYXZpZ2F0aW9uLXJvdXRlLXByb3ZpZGVyL2R5bmFtaWMtbmF2aWdhdGlvbi1yb3V0ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1JPVVRJTkdfQ09ORklHVVJBVElPTl9QQVRIfSBmcm9tICcuLi8uLi9yb3V0aW5nL3JvdXRpbmctYnVpbGRlci9yb3V0aW5nLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQge0xhbmd1YWdlU2VydmljZX0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL2xhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi8uLi91c2VyL21vZGVscy91c2VyJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyJztcbmltcG9ydCB7VXJpTm9kZVJlc291cmNlfSBmcm9tICcuLi9tb2RlbC91cmktcmVzb3VyY2UnO1xuaW1wb3J0IHtVcmlTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3VyaS5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25maWdEb3VibGVNZW51IHtcbiAgICBtb2RlOiBNYXREcmF3ZXJNb2RlO1xuICAgIG9wZW5lZDogYm9vbGVhbjtcbiAgICBkaXNhYmxlQ2xvc2U6IGJvb2xlYW47XG4gICAgd2lkdGg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWV3TmF2aWdhdGlvbkl0ZW0gZXh0ZW5kcyBWaWV3IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHJlc291cmNlPzogQ2FzZTtcbn1cblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9JREVOVElGSUVSUyA9IFtcbiAgICAncHJlZmVyZW5jZV9maWx0ZXJfaXRlbScsXG5dO1xuZXhwb3J0IGNvbnN0IEZJTFRFUl9WSUVXX1RBU0tfVFJBTlNJVElPTl9JRCA9ICd2aWV3JztcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9ERUZBVUxUX0hFQURFUlNfSUQgPSAnZGVmYXVsdF9oZWFkZXJzJztcblxuY29uc3QgTEVGVF9EUkFXRVJfREVGQVVMVF9XSURUSCA9IDYwO1xuY29uc3QgUklHSFRfRFJBV0VSX0RFRkFVTFRfV0lEVEggPSAyNDA7XG5jb25zdCBSSUdIVF9EUkFXRVJfREVGQVVMVF9NSU5fV0lEVEggPSAxODA7XG5jb25zdCBSSUdIVF9EUkFXRVJfTUFYX1dJRFRIID0gNDYwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXInLFxuICAgIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROYXZpZ2F0aW9uRG91YmxlRHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgcG9ydGFsTGVmdE1lbnU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgcG9ydGFsUmlnaHRNZW51OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGltYWdlUm91dGVyTGluazogc3RyaW5nID0gJy8nO1xuICAgIEBJbnB1dCgpIGltYWdlQWx0OiBzdHJpbmcgPSAnTG9nbyc7XG4gICAgQElucHV0KCkgaW1hZ2U6IHN0cmluZztcbiAgICBASW5wdXQoKSBwcm9maWxlUm91dGVyTGluazogc3RyaW5nID0gJy9wcm9maWxlJztcbiAgICBASW5wdXQoKSBpbmNsdWRlVXNlcjogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgaW5jbHVkZUxhbmd1YWdlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBpbmNsdWRlTW9yZU1lbnU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVJbXBlcnNvbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBhbGxDbG9zYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgZm9sZGVySWNvbjogc3RyaW5nID0gJ2ZvbGRlcic7XG4gICAgQElucHV0KCkgb3BlbmVkRm9sZGVySWNvbjogc3RyaW5nID0gJ2ZvbGRlcl9vcGVuJztcbiAgICBASW5wdXQoKSBmaWx0ZXJJY29uOiBzdHJpbmcgPSAnZmlsdGVyX2FsdCc7XG4gICAgQElucHV0KCkgZm9sZGVyc0NhdGVnb3J5TmFtZTogc3RyaW5nID0gJ3Rvb2xiYXIubWVudS5mb2xkZXJzJztcbiAgICBASW5wdXQoKSB2aWV3c0NhdGVnb3J5TmFtZTogc3RyaW5nID0gJ3Rvb2xiYXIubWVudS52aWV3cyc7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBmb2xkZXIgbm9kZXMgb24gbGVmdCBzaWRlXG4gICAgICogKi9cbiAgICBsZWZ0Tm9kZXM6IEFycmF5PFVyaU5vZGVSZXNvdXJjZT47XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBmb2xkZXIgbm9kZXMgb24gcmlnaHQgc2lkZVxuICAgICAqICovXG4gICAgcmlnaHROb2RlczogQXJyYXk8VXJpTm9kZVJlc291cmNlPjtcblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgdW5kZXIgZm9sZGVycyBvbiByaWdodCBzaWRlIG1lbnVcbiAgICAgKiAqL1xuICAgIHZpZXdzOiBBcnJheTxWaWV3TmF2aWdhdGlvbkl0ZW0+O1xuXG4gICAgbW9yZU1lbnVJdGVtczogQXJyYXk8Vmlld05hdmlnYXRpb25JdGVtPjtcblxuICAgIHByb3RlY3RlZCBfbGVmdE5vZGVzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIF9yaWdodE5vZGVzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIF9maWx0ZXJzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIF9icmVha3BvaW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIF9yb290U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIF9jdXJyZW50Tm9kZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudGx5IGRpc3BsYXkgdXJpXG4gICAgICogU2libGluZ3Mgb2YgdGhlIG5vZGUgYXJlIG9uIHRoZSBsZWZ0LCBjaGlsZHJlbiBhcmUgb24gdGhlIHJpZ2h0XG4gICAgICovXG4gICAgcHJpdmF0ZSBfY3VycmVudE5vZGU6IFVyaU5vZGVSZXNvdXJjZTtcblxuICAgIGxlZnRMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgcmlnaHRMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgbm9kZUxvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcblxuICAgIHByb3RlY3RlZCBfY29uZmlnTGVmdE1lbnU6IENvbmZpZ0RvdWJsZU1lbnUgPSB7XG4gICAgICAgIG1vZGU6ICdzaWRlJyxcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICB3aWR0aDogTEVGVF9EUkFXRVJfREVGQVVMVF9XSURUSCxcbiAgICB9O1xuICAgIHByb3RlY3RlZCBfY29uZmlnUmlnaHRNZW51OiBDb25maWdEb3VibGVNZW51ID0ge1xuICAgICAgICBtb2RlOiAnc2lkZScsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6IFJJR0hUX0RSQVdFUl9ERUZBVUxUX1dJRFRILFxuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgX2NoaWxkQ3VzdG9tVmlld3M6IHsgW3VyaTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBWaWV3TmF2aWdhdGlvbkl0ZW0gfSB9O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2JyZWFrcG9pbnQ6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWNjZXNzU2VydmljZTogQWNjZXNzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfY29uZmlnOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF91cmlTZXJ2aWNlOiBVcmlTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2ltcGVyc29uYXRpb25Vc2VyU2VsZWN0OiBJbXBlcnNvbmF0aW9uVXNlclNlbGVjdFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfaW1wZXJzb25hdGlvbjogSW1wZXJzb25hdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZHluYW1pY1JvdXRpbmdTZXJ2aWNlOiBEeW5hbWljTmF2aWdhdGlvblJvdXRlUHJvdmlkZXJTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMubGVmdE5vZGVzID0gbmV3IEFycmF5PFVyaU5vZGVSZXNvdXJjZT4oKTtcbiAgICAgICAgdGhpcy5yaWdodE5vZGVzID0gbmV3IEFycmF5PFVyaU5vZGVSZXNvdXJjZT4oKTtcbiAgICAgICAgdGhpcy52aWV3cyA9IG5ldyBBcnJheTxWaWV3TmF2aWdhdGlvbkl0ZW0+KCk7XG4gICAgICAgIHRoaXMubGVmdExvYWRpbmckID0gbmV3IExvYWRpbmdFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLl9jaGlsZEN1c3RvbVZpZXdzID0ge307XG4gICAgICAgIHRoaXMubW9yZU1lbnVJdGVtcyA9IG5ldyBBcnJheTxWaWV3TmF2aWdhdGlvbkl0ZW0+KCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRTdWJzY3JpcHRpb24gPSB0aGlzLl9icmVha3BvaW50Lm9ic2VydmUoW0JyZWFrcG9pbnRzLkhhbmRzZXRMYW5kc2NhcGVdKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnQuaXNNYXRjaGVkKCcobWF4LXdpZHRoOiA5NTkuOTlweCknKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUxheW91dChmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUxheW91dCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5fY3VycmVudE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9uKCk7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQub24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50Tm9kZVN1YnNjcmlwdGlvbiA9IHRoaXMuX3VyaVNlcnZpY2UuYWN0aXZlTm9kZSQuc3Vic2NyaWJlKG5vZGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHZpZXdDb25maWd1cmF0aW9uUGF0aCA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGFbTkFFX1JPVVRJTkdfQ09ORklHVVJBVElPTl9QQVRIXTtcbiAgICAgICAgaWYgKCEhdmlld0NvbmZpZ3VyYXRpb25QYXRoKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29uZmlndXJhdGlvbiA9IHRoaXMuX2NvbmZpZy5nZXRWaWV3QnlQYXRoKHZpZXdDb25maWd1cmF0aW9uUGF0aCk7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh2aWV3Q29uZmlndXJhdGlvbi5jaGlsZHJlbikuZm9yRWFjaCgoW2tleSwgY2hpbGRWaWV3XSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVVyaUZvckNoaWxkVmlld3Modmlld0NvbmZpZ3VyYXRpb25QYXRoICsgJy8nICsga2V5LCBjaGlsZFZpZXcpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUhpZGRlbk1lbnVJdGVtRnJvbUNoaWxkVmlld3Modmlld0NvbmZpZ3VyYXRpb25QYXRoICsgJy8nICsga2V5LCBjaGlsZFZpZXcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgY3VycmVudE5vZGUoKTogVXJpTm9kZVJlc291cmNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnROb2RlO1xuICAgIH1cblxuICAgIHNldCBjdXJyZW50Tm9kZShub2RlOiBVcmlOb2RlUmVzb3VyY2UpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IHRoaXMuX2N1cnJlbnROb2RlKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2N1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgaWYgKCFub2RlKSByZXR1cm47XG4gICAgICAgIGlmIChub2RlLnBhcmVudElkICYmICFub2RlLnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50SWQgPT09IHRoaXMuX3VyaVNlcnZpY2Uucm9vdC5pZCkge1xuICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcy5fdXJpU2VydmljZS5yb290O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJC5vbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuZ2V0Tm9kZUJ5UGF0aCh0aGlzLl91cmlTZXJ2aWNlLnJlc29sdmVQYXJlbnRQYXRoKG5vZGUpKS5zdWJzY3JpYmUobiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gIW4gPyB0aGlzLl91cmlTZXJ2aWNlLnJvb3QgOiBuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZUxvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGVmdExvYWRpbmckLmlzQWN0aXZlIHx8IHRoaXMucmlnaHRMb2FkaW5nJC5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3VyaVNlcnZpY2UuaXNSb290KG5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmxlZnROb2RlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5sb2FkUmlnaHRTaWRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmxlZnROb2Rlcy5maW5kKG4gPT4gbi5pZCA9PT0gbm9kZS5pZCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZExlZnRTaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkUmlnaHRTaWRlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVVcmlGb3JDaGlsZFZpZXdzKGNvbmZpZ1BhdGg6IHN0cmluZywgY2hpbGRWaWV3OiBWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmICghY2hpbGRWaWV3LnByb2Nlc3NVcmkpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNhbkFjY2Vzc1ZpZXcoY2hpbGRWaWV3LCBjb25maWdQYXRoKSkgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbY2hpbGRWaWV3LnByb2Nlc3NVcmldKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW2NoaWxkVmlldy5wcm9jZXNzVXJpXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoaWxkQ3VzdG9tVmlld3NbY2hpbGRWaWV3LnByb2Nlc3NVcmldW2NvbmZpZ1BhdGhdID0ge1xuICAgICAgICAgICAgaWQ6IGNvbmZpZ1BhdGgsXG4gICAgICAgICAgICAuLi5jaGlsZFZpZXcsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVIaWRkZW5NZW51SXRlbUZyb21DaGlsZFZpZXdzKGNvbmZpZ1BhdGg6IHN0cmluZywgY2hpbGRWaWV3OiBWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmICghY2hpbGRWaWV3Lm5hdmlnYXRpb24pIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNhbkFjY2Vzc1ZpZXcoY2hpbGRWaWV3LCBjb25maWdQYXRoKSkgcmV0dXJuO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICghIShjaGlsZFZpZXc/Lm5hdmlnYXRpb24/LmhpZGRlbikpIHtcbiAgICAgICAgICAgIHRoaXMubW9yZU1lbnVJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogY29uZmlnUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5jaGlsZFZpZXcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9sZWZ0Tm9kZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX3JpZ2h0Tm9kZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX3Jvb3RTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnTGVmdE1lbnUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWdMZWZ0TWVudTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnUmlnaHRNZW51KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnUmlnaHRNZW51O1xuICAgIH1cblxuICAgIHRvZ2dsZU1lbnUoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlUmlnaHRNZW51KCk7XG4gICAgICAgIGlmICh0aGlzLmFsbENsb3NhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUxlZnRNZW51KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVMZWZ0TWVudSgpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnTGVmdE1lbnUub3BlbmVkID0gIXRoaXMuX2NvbmZpZ0xlZnRNZW51Lm9wZW5lZDtcbiAgICB9XG5cbiAgICB0b2dnbGVSaWdodE1lbnUoKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS5vcGVuZWQgPSAhdGhpcy5fY29uZmlnUmlnaHRNZW51Lm9wZW5lZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUxheW91dChpc0xhcmdlU2NyZWVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmZpZ0xlZnRNZW51ID0gaXNMYXJnZVNjcmVlbiA/IHtcbiAgICAgICAgICAgIG1vZGU6ICdzaWRlJyxcbiAgICAgICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9jb25maWdMZWZ0TWVudS53aWR0aCxcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIG1vZGU6ICdvdmVyJyxcbiAgICAgICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ0xlZnRNZW51LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9jb25maWdSaWdodE1lbnUgPSBpc0xhcmdlU2NyZWVuID8ge1xuICAgICAgICAgICAgbW9kZTogJ3NpZGUnLFxuICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCxcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIG1vZGU6ICdvdmVyJyxcbiAgICAgICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRMYW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XG4gICAgfVxuXG4gICAgbG9nb3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91c2VyU2VydmljZS5sb2dvdXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdVc2VyIGlzIGxvZ2dlZCBvdXQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuZ2V0KCkuc2VydmljZXMgJiYgdGhpcy5fY29uZmlnLmdldCgpLnNlcnZpY2VzLmF1dGggJiYgdGhpcy5fY29uZmlnLmdldCgpLnNlcnZpY2VzLmF1dGgubG9nb3V0UmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdFBhdGggPSB0aGlzLl9jb25maWcuZ2V0KCkuc2VydmljZXMuYXV0aC5sb2dvdXRSZWRpcmVjdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuaW5mbygnUmVkaXJlY3RpbmcgdG8gJyArIHJlZGlyZWN0UGF0aCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtyZWRpcmVjdFBhdGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW1wZXJzb25hdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ltcGVyc29uYXRpb25Vc2VyU2VsZWN0LnNlbGVjdEltcGVyc29uYXRlKCk7XG4gICAgfVxuXG4gICAgc3RvcEltcGVyc29uYXRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ltcGVyc29uYXRpb24uY2Vhc2UoKTtcbiAgICB9XG5cbiAgICBnZXQgdXNlcigpOiBVc2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXI7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkdvQmFja0xvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlTG9hZGluZyQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gaG9tZSBjbGljaywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgc2V0IHRvIDAsIGFuZCBjdXJyZW50IHBhcmVudCBpc1xuICAgICAqIHNldCB0byByb290IG5vZGUuXG4gICAgICogKi9cbiAgICBvbkhvbWVDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IHRoaXMuX3VyaVNlcnZpY2Uucm9vdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBiYWNrIGNsaWNrLCB0aGUgcGFyZW50IGlzIHNldCB0byBwYXJlbnQgb2YgbGVmdCBub2RlcywgdGhhdCB3aWxsIHNvbHZlXG4gICAgICogdGhlIHJpZ2h0IHNpZGUgbWVudSAoZWxlbWVudHMgdGhhdCB3ZXJlIGluIGxlZnQgc2lkZSwgYWZ0ZXIgYmFja3dhcmRcbiAgICAgKiBuYXZpZ2F0aW9uIHdpbGwgYmUgb24gdGhlIHJpZ2h0IHNpZGUpLlxuICAgICAqIEN1cnJlbnQgbGV2ZWwgaXMgc2V0IHRvIGEgbG93ZXIgbnVtYmVyIGluIG9yZGVyIHRvIHNldCB0aGUgbGVmdCBzaWRlIG1lbnUuXG4gICAgICogKi9cbiAgICBvbkJhY2tDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3VyaVNlcnZpY2UuaXNSb290KHRoaXMuX2N1cnJlbnROb2RlKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gdGhpcy5fY3VycmVudE5vZGUucGFyZW50O1xuICAgIH1cblxuICAgIG9uTm9kZUNsaWNrKG5vZGU6IFVyaU5vZGVSZXNvdXJjZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbm9kZTtcbiAgICB9XG5cbiAgICBvblZpZXdDbGljayh2aWV3OiBWaWV3TmF2aWdhdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlID0gdGhpcy5fY3VycmVudE5vZGU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRMZWZ0U2lkZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3VyaVNlcnZpY2UuaXNSb290KHRoaXMuX2N1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0Tm9kZXMgPSBbXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5vbigpO1xuICAgICAgICB0aGlzLl9sZWZ0Tm9kZXNTdWJzY3JpcHRpb24gPSB0aGlzLl91cmlTZXJ2aWNlLmdldFNpYmxpbmdzT2ZOb2RlKHRoaXMuX2N1cnJlbnROb2RlKS5zdWJzY3JpYmUobm9kZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5sZWZ0Tm9kZXMgPSBub2RlcyBpbnN0YW5jZW9mIEFycmF5ID8gbm9kZXMgOiBbXTtcbiAgICAgICAgICAgIHRoaXMubGVmdE5vZGVzLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcGFyZVN0cmluZ3MoYS5uYW1lLCBiLm5hbWUpKTtcbiAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5sZWZ0Tm9kZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZFJpZ2h0U2lkZSgpIHtcbiAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9uKCk7XG4gICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuZ2V0Q2FzZXNPZk5vZGUodGhpcy5jdXJyZW50Tm9kZSwgRklMVEVSX0lERU5USUZJRVJTLCAwLCAxKS5zdWJzY3JpYmUocGFnZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ051bWJlciBvZiBmaWx0ZXJzIGZvciB1cmkgJyArIHRoaXMuX2N1cnJlbnROb2RlLnVyaVBhdGggKyAnOiAnICsgcGFnZT8ucGFnaW5hdGlvbj8udG90YWxFbGVtZW50cyk7XG4gICAgICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICAgICAgZm9sZGVyczogdGhpcy5fdXJpU2VydmljZS5nZXRDaGlsZE5vZGVzKHRoaXMuX2N1cnJlbnROb2RlKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBwYWdlPy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzID09PSAwID8gb2YoW10pIDogdGhpcy5fdXJpU2VydmljZS5nZXRDYXNlc09mTm9kZSh0aGlzLl9jdXJyZW50Tm9kZSwgRklMVEVSX0lERU5USUZJRVJTLCAwLCBwYWdlLnBhZ2luYXRpb24udG90YWxFbGVtZW50cykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKHAgPT4gcC5jb250ZW50KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodE5vZGVzID0gcmVzdWx0LmZvbGRlcnMgaW5zdGFuY2VvZiBBcnJheSA/IHJlc3VsdC5mb2xkZXJzIDogW107XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodE5vZGVzLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcGFyZVN0cmluZ3MoYS5uYW1lLCBiLm5hbWUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gKHJlc3VsdC5maWx0ZXJzIGluc3RhbmNlb2YgQXJyYXkgPyByZXN1bHQuZmlsdGVycyA6IFtdKS5tYXAoZiA9PiB0aGlzLnJlc29sdmVGaWx0ZXJDYXNlVG9WaWV3TmF2aWdhdGlvbkl0ZW0oZikpLmZpbHRlcihpID0+ICEhaSk7XG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5fY2hpbGRDdXN0b21WaWV3c1t0aGlzLl9jdXJyZW50Tm9kZS51cmlQYXRoXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzLnB1c2goLi4uT2JqZWN0LnZhbHVlcyh0aGlzLl9jaGlsZEN1c3RvbVZpZXdzW3RoaXMuX2N1cnJlbnROb2RlLnVyaVBhdGhdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdzLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcGFyZVN0cmluZ3MoYT8ubmF2aWdhdGlvbj8udGl0bGUsIGI/Lm5hdmlnYXRpb24/LnRpdGxlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodE5vZGVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5yaWdodE5vZGVzID0gW107XG4gICAgICAgICAgICB0aGlzLnZpZXdzID0gW107XG4gICAgICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlRmlsdGVyQ2FzZVRvVmlld05hdmlnYXRpb25JdGVtKGZpbHRlcjogQ2FzZSk6IFZpZXdOYXZpZ2F0aW9uSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGl0ZW06IFZpZXdOYXZpZ2F0aW9uSXRlbSA9IHtcbiAgICAgICAgICAgIGFjY2Vzczoge30sXG4gICAgICAgICAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgaWNvbjogZmlsdGVyLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09ICdpY29uX25hbWUnKT8udmFsdWUgfHwgdGhpcy5maWx0ZXJJY29uLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBmaWx0ZXIuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gJ2VudHJ5X25hbWUnKT8udmFsdWU/LmRlZmF1bHRWYWx1ZSB8fCBmaWx0ZXIudGl0bGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcm91dGluZzoge1xuICAgICAgICAgICAgICAgIHBhdGg6IHRoaXMuZ2V0RmlsdGVyUm91dGluZ1BhdGgoZmlsdGVyKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZDogZmlsdGVyLnN0cmluZ0lkLFxuICAgICAgICAgICAgcmVzb3VyY2U6IGZpbHRlcixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRSb2xlcyA9IHRoaXMucmVzb2x2ZUFjY2Vzc1JvbGVzKGZpbHRlciwgJ2FsbG93ZWRfcm9sZXMnKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRCYW5uZWRSb2xlcyA9IHRoaXMucmVzb2x2ZUFjY2Vzc1JvbGVzKGZpbHRlciwgJ2Jhbm5lZF9yb2xlcycpO1xuICAgICAgICBpZiAoISFyZXNvbHZlZFJvbGVzKSBpdGVtLmFjY2Vzc1sncm9sZSddID0gcmVzb2x2ZWRSb2xlcztcbiAgICAgICAgaWYgKCEhcmVzb2x2ZWRCYW5uZWRSb2xlcykgaXRlbS5hY2Nlc3NbJ2Jhbm5lZFJvbGUnXSA9IHJlc29sdmVkQmFubmVkUm9sZXM7XG4gICAgICAgIGlmICghdGhpcy5fYWNjZXNzU2VydmljZS5jYW5BY2Nlc3NWaWV3KGl0ZW0sIGl0ZW0ucm91dGluZ1BhdGgpKSByZXR1cm47XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQWNjZXNzUm9sZXMoZmlsdGVyOiBDYXNlLCByb2xlVHlwZTogc3RyaW5nKTogQXJyYXk8Um9sZUFjY2Vzcz4gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBhbGxvd2VkUm9sZXMgPSBmaWx0ZXIuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gcm9sZVR5cGUpPy5vcHRpb25zO1xuICAgICAgICBpZiAoIWFsbG93ZWRSb2xlcyB8fCBPYmplY3Qua2V5cyhhbGxvd2VkUm9sZXMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgcm9sZXMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMoYWxsb3dlZFJvbGVzKS5mb3JFYWNoKGNvbWJpbmVkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gY29tYmluZWQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHJvbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJZDogcGFydHNbMV0sXG4gICAgICAgICAgICAgICAgcm9sZUlkOiBwYXJ0c1swXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvbGVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGaWx0ZXJSb3V0aW5nUGF0aChmaWx0ZXJDYXNlOiBDYXNlKSB7XG4gICAgICAgIGNvbnN0IHZpZXdUYXNrSWQgPSBmaWx0ZXJDYXNlLnRhc2tzLmZpbmQodGFza1BhaXIgPT4gdGFza1BhaXIudHJhbnNpdGlvbiA9PT0gRklMVEVSX1ZJRVdfVEFTS19UUkFOU0lUSU9OX0lEKS50YXNrO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9keW5hbWljUm91dGluZ1NlcnZpY2Uucm91dGU7XG4gICAgICAgIHJldHVybiBgLyR7dXJsfS8ke3ZpZXdUYXNrSWR9YDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29tcGFyZVN0cmluZ3MoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBpZiAoIWEgJiYgIWIpIHJldHVybiAwO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgcmV0dXJuIGEgPiBiID8gMSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB0aGUgYmFjayBidXR0b24gc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgICAqIEByZXR1cm5zIGJvb2xlYW4gaWYgdGhlIGJhY2sgYnV0dG9uIHNob3VsZCBiZSBkaXNwbGF5ZWRcbiAgICAgKiAqL1xuICAgIGlzT25aZXJvTGV2ZWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2N1cnJlbnROb2RlPy5sZXZlbCA/IHRoaXMuX2N1cnJlbnROb2RlLmxldmVsID09IDAgOiB0cnVlO1xuICAgIH1cblxuICAgIGlzTGVmdE5vZGVzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZnROb2RlcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubGVmdE5vZGVzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBpc1JpZ2h0Tm9kZXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmlnaHROb2RlcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucmlnaHROb2Rlcy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgaXNWaWV3c0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3cyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmlld3MubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVyaU5vZGVUcmFja0J5KGluZGV4OiBudW1iZXIsIG5vZGU6IFVyaU5vZGVSZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5pZDtcbiAgICB9XG5cbiAgICB2aWV3c1RyYWNrQnkoaW5kZXg6IG51bWJlciwgdmlldzogVmlld05hdmlnYXRpb25JdGVtKSB7XG4gICAgICAgIHJldHVybiB2aWV3LmlkO1xuICAgIH1cblxuICAgIG9uUmVzaXplRXZlbnQoZXZlbnQ6IFJlc2l6ZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5yZWN0YW5nbGUud2lkdGggPiBSSUdIVF9EUkFXRVJfTUFYX1dJRFRIKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25maWdSaWdodE1lbnUud2lkdGggPSBSSUdIVF9EUkFXRVJfTUFYX1dJRFRIO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnJlY3RhbmdsZS53aWR0aCA8IFJJR0hUX0RSQVdFUl9ERUZBVUxUX01JTl9XSURUSCkge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnUmlnaHRNZW51LndpZHRoID0gUklHSFRfRFJBV0VSX0RFRkFVTFRfTUlOX1dJRFRIO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnUmlnaHRNZW51LndpZHRoID0gZXZlbnQucmVjdGFuZ2xlLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gaW1wbGVtZW50IHNhdmluZyBkcmF3ZXIgd2lkdGggdG8gdXNlciBwcmVmZXJlbmNlc1xuICAgICAgICAvLyB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5fZHJhd2VyV2lkdGhDaGFuZ2VkJC5uZXh0KHRoaXMud2lkdGgpO1xuICAgICAgICAvLyB0aGlzLmNvbnRlbnRXaWR0aC5uZXh0KHRoaXMud2lkdGgpO1xuICAgIH1cblxufVxuIl19
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi1kb3VibGUtZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9uYXZpZ2F0aW9uL25hdmlnYXRpb24tZG91YmxlLWRyYXdlci9hYnN0cmFjdC1uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixXQUFXLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFJL0UsT0FBTyxFQUFhLEVBQUUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFlbkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSzdELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWM3RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM1QixpQkFBaUI7Q0FDcEIsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQztBQUV0RCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUN2QyxNQUFNLDhCQUE4QixHQUFHLEdBQUcsQ0FBQztBQUMzQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLHdCQUF3QixHQUFHLEVBQUUsQ0FBQTtBQUNuQyxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQTtBQUVwQyxJQUFLLFNBR0o7QUFIRCxXQUFLLFNBQVM7SUFDVixtREFBUyxDQUFBO0lBQ1QscURBQVUsQ0FBQTtBQUNkLENBQUMsRUFISSxT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QUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0RHJhd2VyTW9kZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1Jlc2l6ZUV2ZW50fSBmcm9tICdhbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50JztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtSb2xlQWNjZXNzLCBWaWV3fSBmcm9tICcuLi8uLi8uLi9jb21tb25zL3NjaGVtYSc7XG5pbXBvcnQge0FjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGhvcml6YXRpb24vcGVybWlzc2lvbi9hY2Nlc3Muc2VydmljZSc7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0ltcGVyc29uYXRpb25Vc2VyU2VsZWN0U2VydmljZX0gZnJvbSAnLi4vLi4vaW1wZXJzb25hdGlvbi9zZXJ2aWNlcy9pbXBlcnNvbmF0aW9uLXVzZXItc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHtJbXBlcnNvbmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vaW1wZXJzb25hdGlvbi9zZXJ2aWNlcy9pbXBlcnNvbmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYXNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UnO1xuaW1wb3J0IHtcbiAgICBEeW5hbWljTmF2aWdhdGlvblJvdXRlUHJvdmlkZXJTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9yb3V0aW5nL2R5bmFtaWMtbmF2aWdhdGlvbi1yb3V0ZS1wcm92aWRlci9keW5hbWljLW5hdmlnYXRpb24tcm91dGUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge05BRV9ST1VUSU5HX0NPTkZJR1VSQVRJT05fUEFUSH0gZnJvbSAnLi4vLi4vcm91dGluZy9yb3V0aW5nLWJ1aWxkZXIvcm91dGluZy1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtMYW5ndWFnZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RyYW5zbGF0ZS9sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vLi4vdXNlci9tb2RlbHMvdXNlcic7XG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi91c2VyL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQge0xvYWRpbmdFbWl0dGVyfSBmcm9tICcuLi8uLi91dGlsaXR5L2xvYWRpbmctZW1pdHRlcic7XG5pbXBvcnQge1VyaU5vZGVSZXNvdXJjZX0gZnJvbSAnLi4vbW9kZWwvdXJpLXJlc291cmNlJztcbmltcG9ydCB7VXJpU2VydmljZX0gZnJvbSAnLi4vc2VydmljZS91cmkuc2VydmljZSc7XG5pbXBvcnQge0kxOG5GaWVsZFZhbHVlfSBmcm9tIFwiLi4vLi4vZGF0YS1maWVsZHMvaTE4bi1maWVsZC9tb2RlbHMvaTE4bi1maWVsZC12YWx1ZVwiO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHtHcm91cE5hdmlnYXRpb25Db25zdGFudHN9IGZyb20gXCIuLi9tb2RlbC9ncm91cC1uYXZpZ2F0aW9uLWNvbnN0YW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0RvdWJsZU1lbnUge1xuICAgIG1vZGU6IE1hdERyYXdlck1vZGU7XG4gICAgb3BlbmVkOiBib29sZWFuO1xuICAgIGRpc2FibGVDbG9zZTogYm9vbGVhbjtcbiAgICB3aWR0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25JdGVtIGV4dGVuZHMgVmlldyB7XG4gICAgaWQ6IHN0cmluZztcbiAgICByZXNvdXJjZT86IENhc2U7XG59XG5cbmV4cG9ydCBjb25zdCBNRU5VX0lERU5USUZJRVJTID0gW1xuICAgICdwcmVmZXJlbmNlX2l0ZW0nLFxuXTtcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19UUkFOU0lUSU9OX0lEID0gJ2l0ZW1fc2V0dGluZ3MnO1xuXG5jb25zdCBMRUZUX0RSQVdFUl9ERUZBVUxUX1dJRFRIID0gNjA7XG5jb25zdCBSSUdIVF9EUkFXRVJfREVGQVVMVF9XSURUSCA9IDI0MDtcbmNvbnN0IFJJR0hUX0RSQVdFUl9ERUZBVUxUX01JTl9XSURUSCA9IDE4MDtcbmNvbnN0IFJJR0hUX0RSQVdFUl9NQVhfV0lEVEggPSA0NjA7XG5jb25zdCBSSUdIVF9TSURFX05FV19QQUdFX1NJWkUgPSAxMFxuY29uc3QgUklHSFRfU0lERV9JTklUX1BBR0VfU0laRSA9IDIwXG5cbmVudW0gTWVudU9yZGVyIHtcbiAgICBBc2NlbmRpbmcsXG4gICAgRGVzY2VuZGluZ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXInLFxuICAgIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROYXZpZ2F0aW9uRG91YmxlRHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgcG9ydGFsTGVmdE1lbnU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgcG9ydGFsUmlnaHRNZW51OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGltYWdlUm91dGVyTGluazogc3RyaW5nID0gJy8nO1xuICAgIEBJbnB1dCgpIGltYWdlQWx0OiBzdHJpbmcgPSAnTG9nbyc7XG4gICAgQElucHV0KCkgaW1hZ2U6IHN0cmluZztcbiAgICBASW5wdXQoKSBwcm9maWxlUm91dGVyTGluazogc3RyaW5nID0gJy9wcm9maWxlJztcbiAgICBASW5wdXQoKSBpbmNsdWRlVXNlcjogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgaW5jbHVkZUxhbmd1YWdlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBpbmNsdWRlTW9yZU1lbnU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGluY2x1ZGVJbXBlcnNvbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBhbGxDbG9zYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgZm9sZGVySWNvbjogc3RyaW5nID0gJ2ZvbGRlcic7XG4gICAgQElucHV0KCkgb3BlbmVkRm9sZGVySWNvbjogc3RyaW5nID0gJ2ZvbGRlcl9vcGVuJztcbiAgICBASW5wdXQoKSBmaWx0ZXJJY29uOiBzdHJpbmcgPSAnZmlsdGVyX2FsdCc7XG4gICAgQElucHV0KCkgZm9sZGVyc0NhdGVnb3J5TmFtZTogc3RyaW5nID0gJ3Rvb2xiYXIubWVudS5mb2xkZXJzJztcbiAgICBASW5wdXQoKSB2aWV3c0NhdGVnb3J5TmFtZTogc3RyaW5nID0gJ3Rvb2xiYXIubWVudS52aWV3cyc7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGRpc3BsYXllZCBpdGVtcyBvbiB0aGUgbGVmdCBzaWRlXG4gICAgICogKi9cbiAgICBsZWZ0SXRlbXM6IEFycmF5PE5hdmlnYXRpb25JdGVtPlxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBkaXNwbGF5ZWQgaXRlbXMgb24gdGhlIHJpZ2h0IHNpZGVcbiAgICAgKiAqL1xuICAgIHJpZ2h0SXRlbXM6IEFycmF5PE5hdmlnYXRpb25JdGVtPlxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBoaWRkZW4gaXRlbXNcbiAgICAgKiAqL1xuICAgIG1vcmVJdGVtczogQXJyYXk8TmF2aWdhdGlvbkl0ZW0+O1xuXG4gICAgaXRlbXNPcmRlcjogTWVudU9yZGVyO1xuXG4gICAgcHJvdGVjdGVkIF9icmVha3BvaW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIF9jdXJyZW50Tm9kZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudGx5IGRpc3BsYXkgdXJpXG4gICAgICogU2libGluZ3Mgb2YgdGhlIG5vZGUgYXJlIG9uIHRoZSBsZWZ0LCBjaGlsZHJlbiBhcmUgb24gdGhlIHJpZ2h0XG4gICAgICovXG4gICAgcHJpdmF0ZSBfY3VycmVudE5vZGU6IFVyaU5vZGVSZXNvdXJjZTtcblxuICAgIGxlZnRMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgcmlnaHRMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgbm9kZUxvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcblxuICAgIHByb3RlY3RlZCBfY29uZmlnTGVmdE1lbnU6IENvbmZpZ0RvdWJsZU1lbnUgPSB7XG4gICAgICAgIG1vZGU6ICdzaWRlJyxcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICB3aWR0aDogTEVGVF9EUkFXRVJfREVGQVVMVF9XSURUSCxcbiAgICB9O1xuICAgIHByb3RlY3RlZCBfY29uZmlnUmlnaHRNZW51OiBDb25maWdEb3VibGVNZW51ID0ge1xuICAgICAgICBtb2RlOiAnc2lkZScsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6IFJJR0hUX0RSQVdFUl9ERUZBVUxUX1dJRFRILFxuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYnJlYWtwb2ludDogQnJlYWtwb2ludE9ic2VydmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjY2Vzc1NlcnZpY2U6IEFjY2Vzc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2NvbmZpZzogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdXJpU2VydmljZTogVXJpU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9pbXBlcnNvbmF0aW9uVXNlclNlbGVjdDogSW1wZXJzb25hdGlvblVzZXJTZWxlY3RTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2ltcGVyc29uYXRpb246IEltcGVyc29uYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2R5bmFtaWNSb3V0aW5nU2VydmljZTogRHluYW1pY05hdmlnYXRpb25Sb3V0ZVByb3ZpZGVyU2VydmljZSkge1xuICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IG5ldyBBcnJheTxOYXZpZ2F0aW9uSXRlbT4oKTtcbiAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gbmV3IEFycmF5PE5hdmlnYXRpb25JdGVtPigpO1xuICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5pdGVtc09yZGVyID0gTWVudU9yZGVyLkFzY2VuZGluZztcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbiA9IHRoaXMuX2JyZWFrcG9pbnQub2JzZXJ2ZShbQnJlYWtwb2ludHMuSGFuZHNldExhbmRzY2FwZV0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludC5pc01hdGNoZWQoJyhtYXgtd2lkdGg6IDk1OS45OXB4KScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGF5b3V0KGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGF5b3V0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub24oKTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uID0gdGhpcy5fdXJpU2VydmljZS5hY3RpdmVOb2RlJC5zdWJzY3JpYmUobm9kZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGN1cnJlbnROb2RlKCk6IFVyaU5vZGVSZXNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50Tm9kZTtcbiAgICB9XG5cbiAgICBzZXQgY3VycmVudE5vZGUobm9kZTogVXJpTm9kZVJlc291cmNlKSB7XG4gICAgICAgIGlmIChub2RlID09PSB0aGlzLl9jdXJyZW50Tm9kZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9jdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgICAgICBpZiAobm9kZS5wYXJlbnRJZCAmJiAhbm9kZS5wYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudElkID09PSB0aGlzLl91cmlTZXJ2aWNlLnJvb3QuaWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXMuX3VyaVNlcnZpY2Uucm9vdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQub24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmdldE5vZGVCeVBhdGgodGhpcy5fdXJpU2VydmljZS5yZXNvbHZlUGFyZW50UGF0aChub2RlKSkuc3Vic2NyaWJlKG4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9ICFuID8gdGhpcy5fdXJpU2VydmljZS5yb290IDogbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxlZnRMb2FkaW5nJC5pc0FjdGl2ZSB8fCB0aGlzLnJpZ2h0TG9hZGluZyQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9mZigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl91cmlTZXJ2aWNlLmlzUm9vdChub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubG9hZFJpZ2h0U2lkZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5sZWZ0SXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucmVzb3VyY2UuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTk9ERV9QQVRIKT8udmFsdWUgPT09IG5vZGUudXJpUGF0aCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZExlZnRTaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkUmlnaHRTaWRlKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnROb2RlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxlZnRMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5ub2RlTG9hZGluZyQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnTGVmdE1lbnUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWdMZWZ0TWVudTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnUmlnaHRNZW51KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnUmlnaHRNZW51O1xuICAgIH1cblxuICAgIHRvZ2dsZU1lbnUoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlUmlnaHRNZW51KCk7XG4gICAgICAgIGlmICh0aGlzLmFsbENsb3NhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUxlZnRNZW51KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVMZWZ0TWVudSgpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnTGVmdE1lbnUub3BlbmVkID0gIXRoaXMuX2NvbmZpZ0xlZnRNZW51Lm9wZW5lZDtcbiAgICB9XG5cbiAgICB0b2dnbGVSaWdodE1lbnUoKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS5vcGVuZWQgPSAhdGhpcy5fY29uZmlnUmlnaHRNZW51Lm9wZW5lZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUxheW91dChpc0xhcmdlU2NyZWVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmZpZ0xlZnRNZW51ID0gaXNMYXJnZVNjcmVlbiA/IHtcbiAgICAgICAgICAgIG1vZGU6ICdzaWRlJyxcbiAgICAgICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9jb25maWdMZWZ0TWVudS53aWR0aCxcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIG1vZGU6ICdvdmVyJyxcbiAgICAgICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ0xlZnRNZW51LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9jb25maWdSaWdodE1lbnUgPSBpc0xhcmdlU2NyZWVuID8ge1xuICAgICAgICAgICAgbW9kZTogJ3NpZGUnLFxuICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCxcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIG1vZGU6ICdvdmVyJyxcbiAgICAgICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2NvbmZpZ1JpZ2h0TWVudS53aWR0aCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRMYW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XG4gICAgfVxuXG4gICAgbG9nb3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91c2VyU2VydmljZS5sb2dvdXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKCdVc2VyIGlzIGxvZ2dlZCBvdXQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuZ2V0KCkuc2VydmljZXMgJiYgdGhpcy5fY29uZmlnLmdldCgpLnNlcnZpY2VzLmF1dGggJiYgdGhpcy5fY29uZmlnLmdldCgpLnNlcnZpY2VzLmF1dGgubG9nb3V0UmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdFBhdGggPSB0aGlzLl9jb25maWcuZ2V0KCkuc2VydmljZXMuYXV0aC5sb2dvdXRSZWRpcmVjdDtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuaW5mbygnUmVkaXJlY3RpbmcgdG8gJyArIHJlZGlyZWN0UGF0aCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtyZWRpcmVjdFBhdGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW1wZXJzb25hdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ltcGVyc29uYXRpb25Vc2VyU2VsZWN0LnNlbGVjdEltcGVyc29uYXRlKCk7XG4gICAgfVxuXG4gICAgc3RvcEltcGVyc29uYXRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ltcGVyc29uYXRpb24uY2Vhc2UoKTtcbiAgICB9XG5cbiAgICBnZXQgdXNlcigpOiBVc2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXI7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkdvQmFja0xvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlTG9hZGluZyQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gaG9tZSBjbGljaywgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgc2V0IHRvIDAsIGFuZCBjdXJyZW50IHBhcmVudCBpc1xuICAgICAqIHNldCB0byByb290IG5vZGUuXG4gICAgICogKi9cbiAgICBvbkhvbWVDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IHRoaXMuX3VyaVNlcnZpY2Uucm9vdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBiYWNrIGNsaWNrLCB0aGUgcGFyZW50IGlzIHNldCB0byBwYXJlbnQgb2YgbGVmdCBub2RlcywgdGhhdCB3aWxsIHNvbHZlXG4gICAgICogdGhlIHJpZ2h0IHNpZGUgbWVudSAoZWxlbWVudHMgdGhhdCB3ZXJlIGluIGxlZnQgc2lkZSwgYWZ0ZXIgYmFja3dhcmRcbiAgICAgKiBuYXZpZ2F0aW9uIHdpbGwgYmUgb24gdGhlIHJpZ2h0IHNpZGUpLlxuICAgICAqIEN1cnJlbnQgbGV2ZWwgaXMgc2V0IHRvIGEgbG93ZXIgbnVtYmVyIGluIG9yZGVyIHRvIHNldCB0aGUgbGVmdCBzaWRlIG1lbnUuXG4gICAgICogKi9cbiAgICBvbkJhY2tDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3VyaVNlcnZpY2UuaXNSb290KHRoaXMuX2N1cnJlbnROb2RlKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gdGhpcy5fY3VycmVudE5vZGUucGFyZW50O1xuICAgIH1cblxuICAgIG9uSXRlbUNsaWNrKGl0ZW06IE5hdmlnYXRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VyaVNlcnZpY2UuYWN0aXZlTm9kZSA9IHRoaXMuX2N1cnJlbnROb2RlO1xuICAgICAgICBpZiAodGhpcy5oYXNJdGVtQ2hpbGRyZW4oaXRlbSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBpdGVtLnJlc291cmNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX05PREVfUEFUSCk/LnZhbHVlXG4gICAgICAgICAgICB0aGlzLl91cmlTZXJ2aWNlLmdldE5vZGVCeVBhdGgocGF0aCkuc3Vic2NyaWJlKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE5vZGUgPSBub2RlXG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzSXRlbUNoaWxkcmVuKGl0ZW06IE5hdmlnYXRpb25JdGVtKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpdGVtLnJlc291cmNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX0hBU19DSElMRFJFTik/LnZhbHVlXG4gICAgfVxuXG4gICAgaXNJdGVtQW5kTm9kZUVxdWFsKGl0ZW06IE5hdmlnYXRpb25JdGVtLCBub2RlOiBVcmlOb2RlUmVzb3VyY2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ucmVzb3VyY2UuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTk9ERV9QQVRIKT8udmFsdWUgPT09IG5vZGUudXJpUGF0aFxuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkTGVmdFNpZGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl91cmlTZXJ2aWNlLmlzUm9vdCh0aGlzLl9jdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub24oKTtcbiAgICAgICAgdGhpcy5fdXJpU2VydmljZS5nZXRDYXNlc09mTm9kZSh0aGlzLmN1cnJlbnROb2RlLnBhcmVudCwgTUVOVV9JREVOVElGSUVSUywgMCwgMSkuc3Vic2NyaWJlKHBhZ2UgPT4ge1xuICAgICAgICAgICAgcGFnZT8ucGFnaW5hdGlvbj8udG90YWxFbGVtZW50cyA9PT0gMCA/IG9mKFtdKSA6IHRoaXMuX3VyaVNlcnZpY2UuZ2V0Q2FzZXNPZk5vZGUodGhpcy5jdXJyZW50Tm9kZS5wYXJlbnQsIE1FTlVfSURFTlRJRklFUlMsIDAsIHBhZ2UucGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChwID0+IHAuY29udGVudCksXG4gICAgICAgICAgICApLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zID0gcmVzdWx0LmZpbHRlcihmb2xkZXIgPT4gZm9sZGVyLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX0hBU19DSElMRFJFTik/LnZhbHVlID09PSB0cnVlKS5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEl0ZW1zLnNvcnQoKGEsIGIpID0+IChhPy5uYXZpZ2F0aW9uIGFzIE5hdmlnYXRpb25JdGVtKT8udGl0bGUubG9jYWxlQ29tcGFyZSgoYj8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5sZWZ0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkUmlnaHRTaWRlKCkge1xuICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQub24oKTtcbiAgICAgICAgdGhpcy5tb3JlSXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5fdXJpU2VydmljZS5nZXRDYXNlc09mTm9kZSh0aGlzLmN1cnJlbnROb2RlLCBNRU5VX0lERU5USUZJRVJTLCAwLCAxKS5zdWJzY3JpYmUocGFnZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoJ051bWJlciBvZiBpdGVtcyBmb3IgdXJpICcgKyB0aGlzLl9jdXJyZW50Tm9kZS51cmlQYXRoICsgJzogJyArIHBhZ2U/LnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHMpO1xuICAgICAgICAgICAgKHBhZ2U/LnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHMgPT09IDAgPyBvZihbXSkgOiB0aGlzLl91cmlTZXJ2aWNlLmdldENhc2VzT2ZOb2RlKHRoaXMuX2N1cnJlbnROb2RlLCBNRU5VX0lERU5USUZJRVJTLCAwLCBwYWdlLnBhZ2luYXRpb24udG90YWxFbGVtZW50cykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocCA9PiBwLmNvbnRlbnQpLFxuICAgICAgICAgICAgKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCBhcyBDYXNlW10pLnNvcnQoKGEsIGIpID0+IGE/LnRpdGxlLmxvY2FsZUNvbXBhcmUoYj8udGl0bGUpKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IFJJR0hUX1NJREVfSU5JVF9QQUdFX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3UmlnaHRJdGVtczogQ2FzZVtdID0gcmVzdWx0LnNwbGljZSgwLCBSSUdIVF9TSURFX0lOSVRfUEFHRV9TSVpFKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gcmF3UmlnaHRJdGVtcy5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IHJlc3VsdC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtcyA9IHJlc3VsdC5tYXAoZm9sZGVyID0+IHRoaXMucmVzb2x2ZUl0ZW1DYXNlVG9OYXZpZ2F0aW9uSXRlbShmb2xkZXIpKS5maWx0ZXIoaSA9PiAhIWkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yaWdodExvYWRpbmckLm9mZigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZE1vcmVJdGVtcygpIHtcbiAgICAgICAgaWYgKHRoaXMubW9yZUl0ZW1zLmxlbmd0aCA+IFJJR0hUX1NJREVfTkVXX1BBR0VfU0laRSkge1xuICAgICAgICAgICAgdGhpcy5yaWdodEl0ZW1zLnB1c2goLi4udGhpcy5tb3JlSXRlbXMuc3BsaWNlKDAsIFJJR0hUX1NJREVfTkVXX1BBR0VfU0laRSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbXMucHVzaCguLi50aGlzLm1vcmVJdGVtcylcbiAgICAgICAgICAgIHRoaXMubW9yZUl0ZW1zID0gW11cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc0FzY2VuZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNPcmRlciA9PT0gTWVudU9yZGVyLkFzY2VuZGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3dpdGNoT3JkZXIoKSB7XG4gICAgICAgIHRoaXMuaXRlbXNPcmRlciA9ICh0aGlzLml0ZW1zT3JkZXIgKyAxKSAlIDI7XG4gICAgICAgIGxldCBtdWx0aXBsaWVyID0gMVxuICAgICAgICBpZiAodGhpcy5pdGVtc09yZGVyID09PSBNZW51T3JkZXIuRGVzY2VuZGluZykge1xuICAgICAgICAgICAgbXVsdGlwbGllciA9IC0xXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yaWdodEl0ZW1zID0gdGhpcy5yaWdodEl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgICAgICB0aGlzLmxlZnRJdGVtcyA9IHRoaXMubGVmdEl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgICAgICB0aGlzLm1vcmVJdGVtcyA9IHRoaXMubW9yZUl0ZW1zLnNvcnQoKGEsIGIpID0+IG11bHRpcGxpZXIgKiAoYT8ubmF2aWdhdGlvbiBhcyBOYXZpZ2F0aW9uSXRlbSk/LnRpdGxlLmxvY2FsZUNvbXBhcmUoKGI/Lm5hdmlnYXRpb24gYXMgTmF2aWdhdGlvbkl0ZW0pPy50aXRsZSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlSXRlbUNhc2VUb05hdmlnYXRpb25JdGVtKGl0ZW1DYXNlOiBDYXNlKTogTmF2aWdhdGlvbkl0ZW0gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBpdGVtOiBOYXZpZ2F0aW9uSXRlbSA9IHtcbiAgICAgICAgICAgIGFjY2Vzczoge30sXG4gICAgICAgICAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgaWNvbjogaXRlbUNhc2UuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfTUVOVV9JQ09OKT8udmFsdWUgfHwgdGhpcy5maWx0ZXJJY29uLFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldFRyYW5zbGF0aW9uKGl0ZW1DYXNlLmltbWVkaWF0ZURhdGEuZmluZChmID0+IGYuc3RyaW5nSWQgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5JVEVNX0ZJRUxEX0lEX01FTlVfTkFNRSk/LnZhbHVlKSB8fCBpdGVtQ2FzZS50aXRsZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByb3V0aW5nOiB7XG4gICAgICAgICAgICAgICAgcGF0aDogdGhpcy5nZXRJdGVtUm91dGluZ1BhdGgoaXRlbUNhc2UpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlkOiBpdGVtQ2FzZS5zdHJpbmdJZCxcbiAgICAgICAgICAgIHJlc291cmNlOiBpdGVtQ2FzZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRSb2xlcyA9IHRoaXMucmVzb2x2ZUFjY2Vzc1JvbGVzKGl0ZW1DYXNlLCBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9BTExPV0VEX1JPTEVTKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRCYW5uZWRSb2xlcyA9IHRoaXMucmVzb2x2ZUFjY2Vzc1JvbGVzKGl0ZW1DYXNlLCBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9CQU5ORURfUk9MRVMpO1xuICAgICAgICBpZiAoISFyZXNvbHZlZFJvbGVzKSBpdGVtLmFjY2Vzc1sncm9sZSddID0gcmVzb2x2ZWRSb2xlcztcbiAgICAgICAgaWYgKCEhcmVzb2x2ZWRCYW5uZWRSb2xlcykgaXRlbS5hY2Nlc3NbJ2Jhbm5lZFJvbGUnXSA9IHJlc29sdmVkQmFubmVkUm9sZXM7XG4gICAgICAgIGlmICghdGhpcy5fYWNjZXNzU2VydmljZS5jYW5BY2Nlc3NWaWV3KGl0ZW0sIGl0ZW0ucm91dGluZ1BhdGgpKSByZXR1cm47XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNsYXRpb24odmFsdWU6IEkxOG5GaWVsZFZhbHVlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZy5zcGxpdCgnLScpWzBdO1xuICAgICAgICByZXR1cm4gbG9jYWxlIGluIHZhbHVlLnRyYW5zbGF0aW9ucyA/IHZhbHVlLnRyYW5zbGF0aW9uc1tsb2NhbGVdIDogdmFsdWUuZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQWNjZXNzUm9sZXMoZmlsdGVyOiBDYXNlLCByb2xlVHlwZTogc3RyaW5nKTogQXJyYXk8Um9sZUFjY2Vzcz4gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBhbGxvd2VkUm9sZXMgPSBmaWx0ZXIuaW1tZWRpYXRlRGF0YS5maW5kKGYgPT4gZi5zdHJpbmdJZCA9PT0gcm9sZVR5cGUpPy5vcHRpb25zO1xuICAgICAgICBpZiAoIWFsbG93ZWRSb2xlcyB8fCBPYmplY3Qua2V5cyhhbGxvd2VkUm9sZXMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgcm9sZXMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMoYWxsb3dlZFJvbGVzKS5mb3JFYWNoKGNvbWJpbmVkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gY29tYmluZWQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHJvbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJZDogcGFydHNbMV0sXG4gICAgICAgICAgICAgICAgcm9sZUlkOiBwYXJ0c1swXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvbGVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRJdGVtUm91dGluZ1BhdGgoaXRlbUNhc2U6IENhc2UpIHtcbiAgICAgICAgY29uc3QgdHJhbnNJZCA9IFNFVFRJTkdTX1RSQU5TSVRJT05fSUQ7XG4gICAgICAgIGNvbnN0IHRhc2tJZCA9IGl0ZW1DYXNlLnRhc2tzLmZpbmQodGFza1BhaXIgPT4gdGFza1BhaXIudHJhbnNpdGlvbiA9PT0gdHJhbnNJZCkudGFzaztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fZHluYW1pY1JvdXRpbmdTZXJ2aWNlLnJvdXRlO1xuICAgICAgICByZXR1cm4gYC8ke3VybH0vJHt0YXNrSWR9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHRoZSBiYWNrIGJ1dHRvbiBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAgICogQHJldHVybnMgYm9vbGVhbiBpZiB0aGUgYmFjayBidXR0b24gc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgICAqICovXG4gICAgaXNPblplcm9MZXZlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fY3VycmVudE5vZGU/LmxldmVsID8gdGhpcy5fY3VycmVudE5vZGUubGV2ZWwgPT0gMCA6IHRydWU7XG4gICAgfVxuXG4gICAgaXNMZWZ0SXRlbXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVmdEl0ZW1zID09PSB1bmRlZmluZWQgfHwgdGhpcy5sZWZ0SXRlbXMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGlzUmlnaHRJdGVtc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yaWdodEl0ZW1zID09PSB1bmRlZmluZWQgfHwgdGhpcy5yaWdodEl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICB1cmlOb2RlVHJhY2tCeShpbmRleDogbnVtYmVyLCBub2RlOiBVcmlOb2RlUmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuaWQ7XG4gICAgfVxuXG4gICAgaXRlbXNUcmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IE5hdmlnYXRpb25JdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIG9uUmVzaXplRXZlbnQoZXZlbnQ6IFJlc2l6ZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5yZWN0YW5nbGUud2lkdGggPiBSSUdIVF9EUkFXRVJfTUFYX1dJRFRIKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25maWdSaWdodE1lbnUud2lkdGggPSBSSUdIVF9EUkFXRVJfTUFYX1dJRFRIO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnJlY3RhbmdsZS53aWR0aCA8IFJJR0hUX0RSQVdFUl9ERUZBVUxUX01JTl9XSURUSCkge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnUmlnaHRNZW51LndpZHRoID0gUklHSFRfRFJBV0VSX0RFRkFVTFRfTUlOX1dJRFRIO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnUmlnaHRNZW51LndpZHRoID0gZXZlbnQucmVjdGFuZ2xlLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gaW1wbGVtZW50IHNhdmluZyBkcmF3ZXIgd2lkdGggdG8gdXNlciBwcmVmZXJlbmNlc1xuICAgICAgICAvLyB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5fZHJhd2VyV2lkdGhDaGFuZ2VkJC5uZXh0KHRoaXMud2lkdGgpO1xuICAgICAgICAvLyB0aGlzLmNvbnRlbnRXaWR0aC5uZXh0KHRoaXMud2lkdGgpO1xuICAgIH1cblxufVxuIl19