@smartbit4all/ng-client 6.0.45 → 6.0.46

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.
@@ -13,11 +13,12 @@ import * as i4 from "../../../../../smart-icon/smart-icon/smart-icon.component";
13
13
  import * as i5 from "../../../ui-action-button/ui-action-button.component";
14
14
  import * as i6 from "../../../../utility/componentLibrary";
15
15
  export class ClickMenuComponent {
16
- constructor(menuService, overlay, viewContainerRef, overlayPositionBuilder, compLib) {
16
+ constructor(menuService, overlay, viewContainerRef, overlayPositionBuilder, scrollDispatcher, compLib) {
17
17
  this.menuService = menuService;
18
18
  this.overlay = overlay;
19
19
  this.viewContainerRef = viewContainerRef;
20
20
  this.overlayPositionBuilder = overlayPositionBuilder;
21
+ this.scrollDispatcher = scrollDispatcher;
21
22
  this.compLib = compLib;
22
23
  this.overlayRef = null;
23
24
  this.isSubmenu = false;
@@ -27,6 +28,10 @@ export class ClickMenuComponent {
27
28
  this.submenuOpenMap = new Map();
28
29
  this.subActions = [];
29
30
  this.hasCheckedChildren = false;
31
+ this.lastScrollContainer = null;
32
+ this.onContainerScroll = () => {
33
+ this.overlayRef?.updatePosition();
34
+ };
30
35
  this.compLib = compLib ?? ComponentLibrary.PRIMENG;
31
36
  if (this.compLib === ComponentLibrary.PRIMENG) {
32
37
  this.icon = 'chevron-right';
@@ -100,6 +105,11 @@ export class ClickMenuComponent {
100
105
  }
101
106
  closeMenu() {
102
107
  if (this.overlayRef) {
108
+ const container = this.lastScrollContainer;
109
+ if (container) {
110
+ container.removeEventListener('scroll', this.onContainerScroll);
111
+ this.lastScrollContainer = null;
112
+ }
103
113
  this.overlayRef.dispose();
104
114
  this.overlayRef = null;
105
115
  this.hasCheckedChildren = false;
@@ -133,19 +143,39 @@ export class ClickMenuComponent {
133
143
  var positions = this.isSubmenu
134
144
  ? getSubmenuPositions(this.menuOpenDirection)
135
145
  : getMenuPositions(this.triggerAction?.descriptor?.menu?.openDirection);
146
+ const scrollContainer = this.getScrollContainer(triggerElement);
136
147
  let positionStrategy = this.overlayPositionBuilder
137
148
  .flexibleConnectedTo(triggerElement)
138
149
  .withFlexibleDimensions(false)
139
150
  .withPush(true)
140
- .withPositions(positions);
151
+ .withPositions(positions)
152
+ .withScrollableContainers(this.scrollDispatcher.getAncestorScrollContainers(triggerElement));
141
153
  this.overlayRef = this.overlay.create({
142
154
  positionStrategy,
143
- scrollStrategy: this.overlay.scrollStrategies.reposition(),
155
+ scrollStrategy: scrollContainer
156
+ ? this.overlay.scrollStrategies.reposition()
157
+ : this.overlay.scrollStrategies.reposition(),
144
158
  hasBackdrop: false,
145
159
  });
160
+ if (scrollContainer) {
161
+ this.lastScrollContainer = scrollContainer;
162
+ scrollContainer.addEventListener('scroll', this.onContainerScroll, { passive: true });
163
+ }
146
164
  let portal = new TemplatePortal(this.menuTemplate, this.viewContainerRef);
147
165
  this.overlayRef.attach(portal);
148
166
  }
167
+ getScrollContainer(el) {
168
+ let parent = el.parentElement;
169
+ while (parent) {
170
+ const style = window.getComputedStyle(parent);
171
+ const overflow = style.overflow + style.overflowY;
172
+ if (/auto|scroll/.test(overflow) && parent.scrollHeight > parent.clientHeight) {
173
+ return parent;
174
+ }
175
+ parent = parent.parentElement;
176
+ }
177
+ return null;
178
+ }
149
179
  toggleMenu(event) {
150
180
  if (!this.isOpen) {
151
181
  this.openMenu(event);
@@ -217,13 +247,13 @@ export class ClickMenuComponent {
217
247
  iconPosition() {
218
248
  return IconPosition;
219
249
  }
220
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ClickMenuComponent, deps: [{ token: i1.UiMenuService }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i2.OverlayPositionBuilder }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
250
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ClickMenuComponent, deps: [{ token: i1.UiMenuService }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i2.OverlayPositionBuilder }, { token: i2.ScrollDispatcher }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
221
251
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: ClickMenuComponent, selector: "ui-tiered-menu", inputs: { triggerAction: "triggerAction", isSubmenu: "isSubmenu", menuOpenDirection: "menuOpenDirection" }, outputs: { actionClick: "actionClick", submenuOpened: "submenuOpened" }, host: { listeners: { "click": "onMenuClick($event)", "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "menuTemplate", first: true, predicate: ["menuTemplate"], descendants: true }, { propertyName: "submenuComponents", predicate: ["submenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isSubmenu) {\r\n <div class=\"submenu hoverEffect\" [class.activeSubmenu]=\"isOpen\" (mouseenter)=\"openMenu($event)\">\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n <smart-icon class=\"sb4-menu-indicator\" [icon]=\"icon\" color=\"black\"></smart-icon>\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n}\r\n\r\n<ng-template #menuTemplate>\r\n <ul class=\"ui-tiered-menu sb4-menu-panel\">\r\n <li\r\n *ngFor=\"let action of subActions\"\r\n class=\"hoverEffect\"\r\n [class.disabled]=\"action.disabled\"\r\n [class.sb4-post-icon]=\"action.descriptor?.iconPosition === iconPosition().POST\"\r\n (mouseenter)=\"closeSiblingSubmenus(action)\"\r\n >\r\n @if (action.subActions && action.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #submenu\r\n [triggerAction]=\"action\"\r\n [isSubmenu]=\"true\"\r\n [subActions]=\"action.subActions!\"\r\n [menuOpenDirection]=\"triggerAction.descriptor?.menu?.openDirection\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (submenuOpened)=\"onSubmenuOpened(submenu)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"action.descriptor!\"\r\n [code]=\"action.code\"\r\n [disabled]=\"!!action.disabled\"\r\n [viewActivated]=\"action.viewActivated\"\r\n [iconPlaceholder]=\"\r\n action.descriptor?.icon || action.descriptor?.iconResource\r\n ? undefined\r\n : computedIconPlaceholder\r\n \"\r\n (actionClick)=\"!action.subActions?.length && onActionClick(action)\"\r\n ></ui-action-button>\r\n @if (hasSubActionSiblings) {\r\n <smart-icon\r\n class=\"sb4-menu-placeholder\"\r\n (click)=\"!action.disabled && !action.subActions?.length && onActionClick(action)\"\r\n ></smart-icon>\r\n }\r\n }\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #triggerTempalte>\r\n <ui-action-button\r\n [descriptor]=\"triggerAction.descriptor!\"\r\n [code]=\"triggerAction.code\"\r\n [disabled]=\"!!triggerAction.disabled\"\r\n [viewActivated]=\"triggerAction.viewActivated\"\r\n (actionClick)=\"toggleMenu($event.event)\"\r\n [class.submenuTrigger]=\"isSubmenu\"\r\n >\r\n </ui-action-button>\r\n</ng-template>\r\n", styles: [":host{display:inline-block;position:relative}.ui-tiered-menu{--sb4-panel-bg-color: white;--sb4-panel-hover-bg-color: rgb(241, 245, 249)}li{display:flex}ul,.ui-tiered-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:var(--sb4-panel-bg-color);width:fit-content;box-shadow:2px 2px 8px #0003;z-index:1000;border-radius:5px;padding:.1rem}.submenuTrigger,.ui-tiered-menu ::ng-deep button{background-color:var(--sb4-panel-bg-color);box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.ui-tiered-menu .sb4-post-icon ::ng-deep button{justify-content:flex-end}.hoverEffect:hover,.hoverEffect ::ng-deep button:hover{background-color:var(--sb4-panel-hover-bg-color)!important}.hoverEffect.activeSubmenu,.hoverEffect.activeSubmenu ::ng-deep button{background-color:var(--sb4-panel-hover-bg-color)!important}.ui-tiered-menu ::ng-deep ui-action-button,.ui-tiered-menu ::ng-deep ui-badge{width:100%}.ui-tiered-menu>li{position:relative}.submenu{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.submenu ::ng-deep ui-action-button{flex:1}.disabled{color:#aaa;cursor:not-allowed}.ui-tiered-menu ui-tiered-menu{width:100%}smart-icon{align-content:center}.sb4-menu-placeholder{cursor:pointer}.sb4-menu-panel:has(.separator) .sb4-menu-placeholder{display:none}.hoverEffect:hover:has(.separator){background-color:unset!important}.hoverEffect.activeSubmenu,.hoverEffect:hover,.sb4-menu-panel .hoverEffect.activeSubmenu ::ng-deep button,.sb4-menu-panel .hoverEffect:hover ::ng-deep button{background-color:var(--sb4-panel-hover-bg-color)!important;transition:none!important}.sb4-menu-panel ::ng-deep button{background-color:unset!important;border-color:unset!important;transition:none!important}.sb4-menu-panel ::ng-deep button .mdc-button__ripple:before,.sb4-menu-panel ::ng-deep button:before{background-color:transparent!important;opacity:0!important}.sb4-menu-panel ::ng-deep button.sb4-view-activated,.sb4-menu-panel ::ng-deep button.sb4-view-activated *{color:var( --sb4-view-activated-menu-color, var(--sb4-view-activated-bg, var(--primary-color, #1976d2)) )!important;font-weight:var(--sb4-view-activated-font-weight, 600)}.sb4-menu-panel ::ng-deep button.sb4-view-activated,.sb4-menu-panel .hoverEffect:hover ::ng-deep button.sb4-view-activated{background-color:var( --sb4-view-activated-menu-bg, rgb(from var(--primary-color, #1976d2) r g b / .12) )!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: ClickMenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection"], outputs: ["actionClick", "submenuOpened"] }] }); }
222
252
  }
223
253
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ClickMenuComponent, decorators: [{
224
254
  type: Component,
225
255
  args: [{ selector: 'ui-tiered-menu', template: "@if (isSubmenu) {\r\n <div class=\"submenu hoverEffect\" [class.activeSubmenu]=\"isOpen\" (mouseenter)=\"openMenu($event)\">\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n <smart-icon class=\"sb4-menu-indicator\" [icon]=\"icon\" color=\"black\"></smart-icon>\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n}\r\n\r\n<ng-template #menuTemplate>\r\n <ul class=\"ui-tiered-menu sb4-menu-panel\">\r\n <li\r\n *ngFor=\"let action of subActions\"\r\n class=\"hoverEffect\"\r\n [class.disabled]=\"action.disabled\"\r\n [class.sb4-post-icon]=\"action.descriptor?.iconPosition === iconPosition().POST\"\r\n (mouseenter)=\"closeSiblingSubmenus(action)\"\r\n >\r\n @if (action.subActions && action.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #submenu\r\n [triggerAction]=\"action\"\r\n [isSubmenu]=\"true\"\r\n [subActions]=\"action.subActions!\"\r\n [menuOpenDirection]=\"triggerAction.descriptor?.menu?.openDirection\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (submenuOpened)=\"onSubmenuOpened(submenu)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"action.descriptor!\"\r\n [code]=\"action.code\"\r\n [disabled]=\"!!action.disabled\"\r\n [viewActivated]=\"action.viewActivated\"\r\n [iconPlaceholder]=\"\r\n action.descriptor?.icon || action.descriptor?.iconResource\r\n ? undefined\r\n : computedIconPlaceholder\r\n \"\r\n (actionClick)=\"!action.subActions?.length && onActionClick(action)\"\r\n ></ui-action-button>\r\n @if (hasSubActionSiblings) {\r\n <smart-icon\r\n class=\"sb4-menu-placeholder\"\r\n (click)=\"!action.disabled && !action.subActions?.length && onActionClick(action)\"\r\n ></smart-icon>\r\n }\r\n }\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #triggerTempalte>\r\n <ui-action-button\r\n [descriptor]=\"triggerAction.descriptor!\"\r\n [code]=\"triggerAction.code\"\r\n [disabled]=\"!!triggerAction.disabled\"\r\n [viewActivated]=\"triggerAction.viewActivated\"\r\n (actionClick)=\"toggleMenu($event.event)\"\r\n [class.submenuTrigger]=\"isSubmenu\"\r\n >\r\n </ui-action-button>\r\n</ng-template>\r\n", styles: [":host{display:inline-block;position:relative}.ui-tiered-menu{--sb4-panel-bg-color: white;--sb4-panel-hover-bg-color: rgb(241, 245, 249)}li{display:flex}ul,.ui-tiered-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:var(--sb4-panel-bg-color);width:fit-content;box-shadow:2px 2px 8px #0003;z-index:1000;border-radius:5px;padding:.1rem}.submenuTrigger,.ui-tiered-menu ::ng-deep button{background-color:var(--sb4-panel-bg-color);box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.ui-tiered-menu .sb4-post-icon ::ng-deep button{justify-content:flex-end}.hoverEffect:hover,.hoverEffect ::ng-deep button:hover{background-color:var(--sb4-panel-hover-bg-color)!important}.hoverEffect.activeSubmenu,.hoverEffect.activeSubmenu ::ng-deep button{background-color:var(--sb4-panel-hover-bg-color)!important}.ui-tiered-menu ::ng-deep ui-action-button,.ui-tiered-menu ::ng-deep ui-badge{width:100%}.ui-tiered-menu>li{position:relative}.submenu{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.submenu ::ng-deep ui-action-button{flex:1}.disabled{color:#aaa;cursor:not-allowed}.ui-tiered-menu ui-tiered-menu{width:100%}smart-icon{align-content:center}.sb4-menu-placeholder{cursor:pointer}.sb4-menu-panel:has(.separator) .sb4-menu-placeholder{display:none}.hoverEffect:hover:has(.separator){background-color:unset!important}.hoverEffect.activeSubmenu,.hoverEffect:hover,.sb4-menu-panel .hoverEffect.activeSubmenu ::ng-deep button,.sb4-menu-panel .hoverEffect:hover ::ng-deep button{background-color:var(--sb4-panel-hover-bg-color)!important;transition:none!important}.sb4-menu-panel ::ng-deep button{background-color:unset!important;border-color:unset!important;transition:none!important}.sb4-menu-panel ::ng-deep button .mdc-button__ripple:before,.sb4-menu-panel ::ng-deep button:before{background-color:transparent!important;opacity:0!important}.sb4-menu-panel ::ng-deep button.sb4-view-activated,.sb4-menu-panel ::ng-deep button.sb4-view-activated *{color:var( --sb4-view-activated-menu-color, var(--sb4-view-activated-bg, var(--primary-color, #1976d2)) )!important;font-weight:var(--sb4-view-activated-font-weight, 600)}.sb4-menu-panel ::ng-deep button.sb4-view-activated,.sb4-menu-panel .hoverEffect:hover ::ng-deep button.sb4-view-activated{background-color:var( --sb4-view-activated-menu-bg, rgb(from var(--primary-color, #1976d2) r g b / .12) )!important}\n"] }]
226
- }], ctorParameters: () => [{ type: i1.UiMenuService }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i2.OverlayPositionBuilder }, { type: i6.ComponentLibrary, decorators: [{
256
+ }], ctorParameters: () => [{ type: i1.UiMenuService }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i2.OverlayPositionBuilder }, { type: i2.ScrollDispatcher }, { type: i6.ComponentLibrary, decorators: [{
227
257
  type: Inject,
228
258
  args: [COMPONENT_LIBRARY]
229
259
  }, {
@@ -251,4 +281,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
251
281
  type: HostListener,
252
282
  args: ['document:click', ['$event']]
253
283
  }] } });
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvbWVudS9jbGljay9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy9tZW51L2NsaWNrL21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsWUFBWSxHQUdiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsWUFBWSxFQUdaLGtCQUFrQixHQUVuQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7OztBQU8xRixNQUFNLE9BQU8sa0JBQWtCO0lBbUI3QixZQUNVLFdBQTBCLEVBQzFCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDUixPQUEwQjtRQUpoRSxnQkFBVyxHQUFYLFdB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QUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBNkZQLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTWpDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBDb25uZWN0ZWRQb3NpdGlvbixcclxuICBPdmVybGF5LFxyXG4gIE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgT3ZlcmxheVJlZixcclxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7XHJcbiAgSWNvblBvc2l0aW9uLFxyXG4gIE1lbnVPcGVuRGlyZWN0aW9uLFxyXG4gIFVpQWN0aW9uLFxyXG4gIFVpQWN0aW9uQnV0dG9uVHlwZSxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3IsXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpJztcclxuaW1wb3J0IHsgVWlNZW51U2VydmljZSB9IGZyb20gJy4uL21lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IENPTVBPTkVOVF9MSUJSQVJZLCBDb21wb25lbnRMaWJyYXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0eS9jb21wb25lbnRMaWJyYXJ5JztcclxuaW1wb3J0IHsgZ2V0TWVudVBvc2l0aW9ucywgZ2V0U3VibWVudVBvc2l0aW9ucyB9IGZyb20gJy4uL21lbnUuY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQnV0dG9uSWNvblBsYWNlaG9sZGVyIH0gZnJvbSAnLi4vLi4vLi4vdWktYWN0aW9uLWJ1dHRvbi9idXR0b24taWNvbi1wbGFjZWhvbGRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLXRpZXJlZC1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL21lbnUuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlja01lbnVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcclxuICBAVmlld0NoaWxkcmVuKCdzdWJtZW51Jykgc3VibWVudUNvbXBvbmVudHMhOiBRdWVyeUxpc3Q8Q2xpY2tNZW51Q29tcG9uZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWVudVRlbXBsYXRlJykgbWVudVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBvdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIHRyaWdnZXJBY3Rpb24hOiBVaUFjdGlvbjtcclxuICBASW5wdXQoKSBpc1N1Ym1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtZW51T3BlbkRpcmVjdGlvbj86IE1lbnVPcGVuRGlyZWN0aW9uO1xyXG5cclxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFVpQWN0aW9uPigpO1xyXG4gIEBPdXRwdXQoKSBzdWJtZW51T3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxVaUFjdGlvbj4oKTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgaWNvbiE6IHN0cmluZztcclxuICBzdWJtZW51T3Blbk1hcCA9IG5ldyBNYXA8VWlBY3Rpb24sIGJvb2xlYW4+KCk7XHJcbiAgc3ViQWN0aW9uczogVWlBY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgaGFzQ2hlY2tlZENoaWxkcmVuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBtZW51U2VydmljZTogVWlNZW51U2VydmljZSxcclxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgb3ZlcmxheVBvc2l0aW9uQnVpbGRlcjogT3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcclxuICAgIEBJbmplY3QoQ09NUE9ORU5UX0xJQlJBUlkpIEBPcHRpb25hbCgpIHB1YmxpYyBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeVxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wTGliID0gY29tcExpYiA/PyBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkc7XHJcblxyXG4gICAgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdjaGV2cm9uLXJpZ2h0JztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jb21wTGliID09PSBDb21wb25lbnRMaWJyYXJ5Lk1BVEVSSUFMKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdjaGV2cm9uX3JpZ2h0JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZW51U2VydmljZVxyXG4gICAgICAuZ2V0Q2xvc2VTaWduYWwoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2VNZW51KCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuICYmICF0aGlzLmhhc0NoZWNrZWRDaGlsZHJlbiAmJiB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXSkge1xyXG4gICAgICBjb25zdCB0cmlnZ2VyID0gY2hhbmdlc1sndHJpZ2dlckFjdGlvbiddLmN1cnJlbnRWYWx1ZSBhcyBVaUFjdGlvbjtcclxuICAgICAgY29uc3QgcHJldmlvdXNUcmlnZ2VyID0gY2hhbmdlc1sndHJpZ2dlckFjdGlvbiddLnByZXZpb3VzVmFsdWUgYXMgVWlBY3Rpb247XHJcblxyXG4gICAgICB0aGlzLnN1YkFjdGlvbnMgPSB0aGlzLm5vcm1hbGl6ZVN1YkFjdGlvbnModHJpZ2dlcj8uc3ViQWN0aW9ucyA/PyBbXSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc09wZW4gJiYgcHJldmlvdXNUcmlnZ2VyKSB7XHJcbiAgICAgICAgY29uc3QgaGFzU3ViQWN0aW9uc0NoYW5nZWQgPSB0aGlzLmhhc1N1YkFjdGlvbnNDaGFuZ2VkKFxyXG4gICAgICAgICAgcHJldmlvdXNUcmlnZ2VyPy5zdWJBY3Rpb25zLFxyXG4gICAgICAgICAgdHJpZ2dlcj8uc3ViQWN0aW9uc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGhhc1N1YkFjdGlvbnNDaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hPdmVybGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc1N1YkFjdGlvbnNDaGFuZ2VkKFxyXG4gICAgb2xkU3ViQWN0aW9uczogVWlBY3Rpb25bXSB8IHVuZGVmaW5lZCxcclxuICAgIG5ld1N1YkFjdGlvbnM6IFVpQWN0aW9uW10gfCB1bmRlZmluZWRcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9sZExlbmd0aCA9IG9sZFN1YkFjdGlvbnM/Lmxlbmd0aCA/PyAwO1xyXG4gICAgY29uc3QgbmV3TGVuZ3RoID0gbmV3U3ViQWN0aW9ucz8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgaWYgKG9sZExlbmd0aCAhPT0gbmV3TGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvbGRMZW5ndGggPiAwICYmIG5ld0xlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChvbGRTdWJBY3Rpb25zIVtpXS5jb2RlICE9PSBuZXdTdWJBY3Rpb25zIVtpXS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25BY3Rpb25DbGljayhhY3Rpb246IFVpQWN0aW9uKSB7XHJcbiAgICBpZiAoIWFjdGlvbi5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoYWN0aW9uKTtcclxuICAgICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25NZW51Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLm1lbnVTZXJ2aWNlLmNsb3NlQWxsTWVudXMoKTtcclxuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLm92ZXJsYXlSZWY7XHJcbiAgfVxyXG5cclxuICBjbG9zZU1lbnUoKSB7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc3VibWVudUNvbXBvbmVudHMgJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHMuZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaE92ZXJsYXkoKSB7XHJcbiAgICBpZiAoIXRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xyXG5cclxuICAgIGxldCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5tZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcblxyXG4gICAgdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9wZW5NZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzU3VibWVudSkge1xyXG4gICAgICB0aGlzLnN1Ym1lbnVPcGVuZWQuZW1pdCh0aGlzLnRyaWdnZXJBY3Rpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRyaWdnZXJFbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHZhciBwb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSB0aGlzLmlzU3VibWVudVxyXG4gICAgICA/IGdldFN1Ym1lbnVQb3NpdGlvbnModGhpcy5tZW51T3BlbkRpcmVjdGlvbilcclxuICAgICAgOiBnZXRNZW51UG9zaXRpb25zKHRoaXMudHJpZ2dlckFjdGlvbj8uZGVzY3JpcHRvcj8ubWVudT8ub3BlbkRpcmVjdGlvbik7XHJcblxyXG4gICAgbGV0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlQb3NpdGlvbkJ1aWxkZXJcclxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odHJpZ2dlckVsZW1lbnQpXHJcbiAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxyXG4gICAgICAud2l0aFB1c2godHJ1ZSlcclxuICAgICAgLndpdGhQb3NpdGlvbnMocG9zaXRpb25zKTtcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcclxuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLm1lbnVUZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcclxuICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5vcGVuTWVudShldmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdWJtZW51T3BlbmVkKG9wZW5lZEFjdGlvbjogVWlBY3Rpb24pIHtcclxuICAgIGlmICghdGhpcy5zdWJtZW51Q29tcG9uZW50cyB8fCB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uU3VibWVudU9wZW5lZChvcGVuZWRBY3Rpb24pO1xyXG4gICAgICB9LCAwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHMuZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICBpZiAoc3VibWVudS50cmlnZ2VyQWN0aW9uLmNvZGUgIT09IG9wZW5lZEFjdGlvbi5jb2RlICYmIHN1Ym1lbnUub3ZlcmxheVJlZikge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTaWJsaW5nU3VibWVudXMoZXhjZXB0QWN0aW9uOiBVaUFjdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJtZW51Q29tcG9uZW50cz8uZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICBpZiAoc3VibWVudS50cmlnZ2VyQWN0aW9uLmNvZGUgIT09IGV4Y2VwdEFjdGlvbi5jb2RlICYmIHN1Ym1lbnUuaXNPcGVuKSB7XHJcbiAgICAgICAgc3VibWVudS5jbG9zZU1lbnUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNvbXB1dGVkSWNvblBsYWNlaG9sZGVyPzogQnV0dG9uSWNvblBsYWNlaG9sZGVyO1xyXG4gIGhhc1N1YkFjdGlvblNpYmxpbmdzPzogYm9vbGVhbjtcclxuXHJcbiAgcHJpdmF0ZSBub3JtYWxpemVTdWJBY3Rpb25zKGFjdGlvbnM6IFVpQWN0aW9uW10pOiBVaUFjdGlvbltdIHtcclxuICAgIHRoaXMuaGFzU3ViQWN0aW9uU2libGluZ3MgPSBhY3Rpb25zLnNvbWUoKGEpID0+IGEuc3ViQWN0aW9ucyAmJiBhLnN1YkFjdGlvbnMubGVuZ3RoID4gMCk7XHJcblxyXG4gICAgY29uc3Qgbm9uU2VwYXJhdG9ycyA9IGFjdGlvbnMuZmlsdGVyKFxyXG4gICAgICAoYSkgPT4gYS5kZXNjcmlwdG9yPy50eXBlICE9PSBVaUFjdGlvbkJ1dHRvblR5cGUuU0VQQVJBVE9SXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGFueUhhc0ljb24gPSBub25TZXBhcmF0b3JzLnNvbWUoKGEpID0+IGEuZGVzY3JpcHRvcj8uaWNvbiB8fCBhLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZSk7XHJcblxyXG4gICAgY29uc3QgYW55SGFzUHJlSWNvbiA9IG5vblNlcGFyYXRvcnMuc29tZShcclxuICAgICAgKGEpID0+XHJcbiAgICAgICAgKGEuZGVzY3JpcHRvcj8uaWNvbiB8fCBhLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZSkgJiZcclxuICAgICAgICBhLmRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiA9PT0gSWNvblBvc2l0aW9uLlBSRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGFueUhhc1Bvc3RJY29uID0gbm9uU2VwYXJhdG9ycy5zb21lKFxyXG4gICAgICAoYSkgPT5cclxuICAgICAgICAoYS5kZXNjcmlwdG9yPy5pY29uIHx8IGEuZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKSAmJlxyXG4gICAgICAgIGEuZGVzY3JpcHRvcj8uaWNvblBvc2l0aW9uID09PSBJY29uUG9zaXRpb24uUE9TVFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNvbXB1dGVkSWNvblBsYWNlaG9sZGVyID0gYW55SGFzSWNvblxyXG4gICAgICA/IGFueUhhc1ByZUljb24gJiYgYW55SGFzUG9zdEljb25cclxuICAgICAgICA/IEJ1dHRvbkljb25QbGFjZWhvbGRlci5CT1RIXHJcbiAgICAgICAgOiBhbnlIYXNQb3N0SWNvblxyXG4gICAgICAgICAgPyBCdXR0b25JY29uUGxhY2Vob2xkZXIuUE9TVFxyXG4gICAgICAgICAgOiBCdXR0b25JY29uUGxhY2Vob2xkZXIuUFJFXHJcbiAgICAgIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IGxhc3RTZXRQb3NpdGlvbiA9XHJcbiAgICAgIFsuLi5ub25TZXBhcmF0b3JzXS5yZXZlcnNlKCkuZmluZCgoYSkgPT4gYS5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gIT0gbnVsbCk/LmRlc2NyaXB0b3JcclxuICAgICAgICA/Lmljb25Qb3NpdGlvbiA/PyBJY29uUG9zaXRpb24uUFJFO1xyXG5cclxuICAgIHJldHVybiBhY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChhY3Rpb24uZGVzY3JpcHRvcj8udHlwZSA9PT0gVWlBY3Rpb25CdXR0b25UeXBlLlNFUEFSQVRPUikge1xyXG4gICAgICAgIHJldHVybiBhY3Rpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGhhc0ljb24gPSAhIShhY3Rpb24uZGVzY3JpcHRvcj8uaWNvbiB8fCBhY3Rpb24uZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5hY3Rpb24sXHJcbiAgICAgICAgZGVzY3JpcHRvcjogYWN0aW9uLmRlc2NyaXB0b3JcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIC4uLmFjdGlvbi5kZXNjcmlwdG9yLFxyXG4gICAgICAgICAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgICAgaWNvblBvc2l0aW9uOiBhbnlIYXNJY29uXHJcbiAgICAgICAgICAgICAgICA/IGhhc0ljb25cclxuICAgICAgICAgICAgICAgICAgPyAoYWN0aW9uLmRlc2NyaXB0b3IuaWNvblBvc2l0aW9uID8/IGxhc3RTZXRQb3NpdGlvbilcclxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIDogYWN0aW9uLmRlc2NyaXB0b3IuaWNvblBvc2l0aW9uLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6ICh7XHJcbiAgICAgICAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgfSBhcyBVaUFjdGlvbkRlc2NyaXB0b3IpLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpY29uUG9zaXRpb24oKTogdHlwZW9mIEljb25Qb3NpdGlvbiB7XHJcbiAgICByZXR1cm4gSWNvblBvc2l0aW9uO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGlzU3VibWVudSkge1xyXG4gIDxkaXYgY2xhc3M9XCJzdWJtZW51IGhvdmVyRWZmZWN0XCIgW2NsYXNzLmFjdGl2ZVN1Ym1lbnVdPVwiaXNPcGVuXCIgKG1vdXNlZW50ZXIpPVwib3Blbk1lbnUoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJUZW1wYWx0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPHNtYXJ0LWljb24gY2xhc3M9XCJzYjQtbWVudS1pbmRpY2F0b3JcIiBbaWNvbl09XCJpY29uXCIgY29sb3I9XCJibGFja1wiPjwvc21hcnQtaWNvbj5cclxuICA8L2Rpdj5cclxufSBAZWxzZSB7XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJUZW1wYWx0ZVwiPjwvbmctY29udGFpbmVyPlxyXG59XHJcblxyXG48bmctdGVtcGxhdGUgI21lbnVUZW1wbGF0ZT5cclxuICA8dWwgY2xhc3M9XCJ1aS10aWVyZWQtbWVudSBzYjQtbWVudS1wYW5lbFwiPlxyXG4gICAgPGxpXHJcbiAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygc3ViQWN0aW9uc1wiXHJcbiAgICAgIGNsYXNzPVwiaG92ZXJFZmZlY3RcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcclxuICAgICAgW2NsYXNzLnNiNC1wb3N0LWljb25dPVwiYWN0aW9uLmRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiA9PT0gaWNvblBvc2l0aW9uKCkuUE9TVFwiXHJcbiAgICAgIChtb3VzZWVudGVyKT1cImNsb3NlU2libGluZ1N1Ym1lbnVzKGFjdGlvbilcIlxyXG4gICAgPlxyXG4gICAgICBAaWYgKGFjdGlvbi5zdWJBY3Rpb25zICYmIGFjdGlvbi5zdWJBY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICA8dWktdGllcmVkLW1lbnVcclxuICAgICAgICAgICNzdWJtZW51XHJcbiAgICAgICAgICBbdHJpZ2dlckFjdGlvbl09XCJhY3Rpb25cIlxyXG4gICAgICAgICAgW2lzU3VibWVudV09XCJ0cnVlXCJcclxuICAgICAgICAgIFtzdWJBY3Rpb25zXT1cImFjdGlvbi5zdWJBY3Rpb25zIVwiXHJcbiAgICAgICAgICBbbWVudU9wZW5EaXJlY3Rpb25dPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yPy5tZW51Py5vcGVuRGlyZWN0aW9uXCJcclxuICAgICAgICAgIChhY3Rpb25DbGljayk9XCJhY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgKHN1Ym1lbnVPcGVuZWQpPVwib25TdWJtZW51T3BlbmVkKHN1Ym1lbnUpXCJcclxuICAgICAgICA+PC91aS10aWVyZWQtbWVudT5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImFjdGlvbi5kZXNjcmlwdG9yIVwiXHJcbiAgICAgICAgICBbY29kZV09XCJhY3Rpb24uY29kZVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiISFhY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgW3ZpZXdBY3RpdmF0ZWRdPVwiYWN0aW9uLnZpZXdBY3RpdmF0ZWRcIlxyXG4gICAgICAgICAgW2ljb25QbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICAgYWN0aW9uLmRlc2NyaXB0b3I/Lmljb24gfHwgYWN0aW9uLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZVxyXG4gICAgICAgICAgICAgID8gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgOiBjb21wdXRlZEljb25QbGFjZWhvbGRlclxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChhY3Rpb25DbGljayk9XCIhYWN0aW9uLnN1YkFjdGlvbnM/Lmxlbmd0aCAmJiBvbkFjdGlvbkNsaWNrKGFjdGlvbilcIlxyXG4gICAgICAgID48L3VpLWFjdGlvbi1idXR0b24+XHJcbiAgICAgICAgQGlmIChoYXNTdWJBY3Rpb25TaWJsaW5ncykge1xyXG4gICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgY2xhc3M9XCJzYjQtbWVudS1wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIhYWN0aW9uLmRpc2FibGVkICYmICFhY3Rpb24uc3ViQWN0aW9ucz8ubGVuZ3RoICYmIG9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiXHJcbiAgICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgPC9saT5cclxuICA8L3VsPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0cmlnZ2VyVGVtcGFsdGU+XHJcbiAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgIFtkZXNjcmlwdG9yXT1cInRyaWdnZXJBY3Rpb24uZGVzY3JpcHRvciFcIlxyXG4gICAgW2NvZGVdPVwidHJpZ2dlckFjdGlvbi5jb2RlXCJcclxuICAgIFtkaXNhYmxlZF09XCIhIXRyaWdnZXJBY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgW3ZpZXdBY3RpdmF0ZWRdPVwidHJpZ2dlckFjdGlvbi52aWV3QWN0aXZhdGVkXCJcclxuICAgIChhY3Rpb25DbGljayk9XCJ0b2dnbGVNZW51KCRldmVudC5ldmVudClcIlxyXG4gICAgW2NsYXNzLnN1Ym1lbnVUcmlnZ2VyXT1cImlzU3VibWVudVwiXHJcbiAgPlxyXG4gIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvbWVudS9jbGljay9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy9tZW51L2NsaWNrL21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsWUFBWSxHQUdiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUTFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsWUFBWSxFQUdaLGtCQUFrQixHQUVuQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7OztBQU8xRixNQUFNLE9BQU8sa0JBQWtCO0lBcUI3QixZQUNVLFdBQTBCLEVBQzFCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDOUMsZ0JBQWtDLEVBQ0ksT0FBMEI7UUFMaEUs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L0IsbzdFQStEQSxrbUdEcEJhLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7OzBCQStCdkIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUFHLFFBQVE7eUNBMUJiLGlCQUFpQjtzQkFBekMsWUFBWTt1QkFBQyxTQUFTO2dCQUVJLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFHaEIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBZ0dQLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTWpDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBDb25uZWN0ZWRQb3NpdGlvbixcclxuICBPdmVybGF5LFxyXG4gIE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgT3ZlcmxheVJlZixcclxuICBTY3JvbGxEaXNwYXRjaGVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHtcclxuICBJY29uUG9zaXRpb24sXHJcbiAgTWVudU9wZW5EaXJlY3Rpb24sXHJcbiAgVWlBY3Rpb24sXHJcbiAgVWlBY3Rpb25CdXR0b25UeXBlLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvcixcclxufSBmcm9tICcuLi8uLi8uLi8uLi9hcGknO1xyXG5pbXBvcnQgeyBVaU1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQgeyBnZXRNZW51UG9zaXRpb25zLCBnZXRTdWJtZW51UG9zaXRpb25zIH0gZnJvbSAnLi4vbWVudS5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBCdXR0b25JY29uUGxhY2Vob2xkZXIgfSBmcm9tICcuLi8uLi8uLi91aS1hY3Rpb24tYnV0dG9uL2J1dHRvbi1pY29uLXBsYWNlaG9sZGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktdGllcmVkLW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbWVudS5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaWNrTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ3N1Ym1lbnUnKSBzdWJtZW51Q29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxDbGlja01lbnVDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkKCdtZW51VGVtcGxhdGUnKSBtZW51VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgdHJpZ2dlckFjdGlvbiE6IFVpQWN0aW9uO1xyXG4gIEBJbnB1dCgpIGlzU3VibWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1lbnVPcGVuRGlyZWN0aW9uPzogTWVudU9wZW5EaXJlY3Rpb247XHJcblxyXG4gIEBPdXRwdXQoKSBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VWlBY3Rpb24+KCk7XHJcbiAgQE91dHB1dCgpIHN1Ym1lbnVPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVpQWN0aW9uPigpO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBpY29uITogc3RyaW5nO1xyXG4gIHN1Ym1lbnVPcGVuTWFwID0gbmV3IE1hcDxVaUFjdGlvbiwgYm9vbGVhbj4oKTtcclxuICBzdWJBY3Rpb25zOiBVaUFjdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBoYXNDaGVja2VkQ2hpbGRyZW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBsYXN0U2Nyb2xsQ29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IFVpTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlQb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29tcExpYj86IENvbXBvbmVudExpYnJhcnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbi1yaWdodCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5NQVRFUklBTCkge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbl9yaWdodCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudVNlcnZpY2VcclxuICAgICAgLmdldENsb3NlU2lnbmFsKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0cmlnZ2VyQWN0aW9uJ10pIHtcclxuICAgICAgY29uc3QgdHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5jdXJyZW50VmFsdWUgYXMgVWlBY3Rpb247XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzVHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5wcmV2aW91c1ZhbHVlIGFzIFVpQWN0aW9uO1xyXG5cclxuICAgICAgdGhpcy5zdWJBY3Rpb25zID0gdGhpcy5ub3JtYWxpemVTdWJBY3Rpb25zKHRyaWdnZXI/LnN1YkFjdGlvbnMgPz8gW10pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHByZXZpb3VzVHJpZ2dlcikge1xyXG4gICAgICAgIGNvbnN0IGhhc1N1YkFjdGlvbnNDaGFuZ2VkID0gdGhpcy5oYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgICAgICAgIHByZXZpb3VzVHJpZ2dlcj8uc3ViQWN0aW9ucyxcclxuICAgICAgICAgIHRyaWdnZXI/LnN1YkFjdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoYXNTdWJBY3Rpb25zQ2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoT3ZlcmxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgIG9sZFN1YkFjdGlvbnM6IFVpQWN0aW9uW10gfCB1bmRlZmluZWQsXHJcbiAgICBuZXdTdWJBY3Rpb25zOiBVaUFjdGlvbltdIHwgdW5kZWZpbmVkXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvbGRMZW5ndGggPSBvbGRTdWJBY3Rpb25zPy5sZW5ndGggPz8gMDtcclxuICAgIGNvbnN0IG5ld0xlbmd0aCA9IG5ld1N1YkFjdGlvbnM/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgIGlmIChvbGRMZW5ndGggIT09IG5ld0xlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2xkTGVuZ3RoID4gMCAmJiBuZXdMZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAob2xkU3ViQWN0aW9ucyFbaV0uY29kZSAhPT0gbmV3U3ViQWN0aW9ucyFbaV0uY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBVaUFjdGlvbikge1xyXG4gICAgaWYgKCFhY3Rpb24uZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGFjdGlvbik7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY2xvc2VBbGxNZW51cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uTWVudUNsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5vdmVybGF5UmVmO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VNZW51KCkge1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmxhc3RTY3JvbGxDb250YWluZXI7XHJcbiAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbkNvbnRhaW5lclNjcm9sbCk7XHJcbiAgICAgICAgdGhpcy5sYXN0U2Nyb2xsQ29udGFpbmVyID0gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5vdmVybGF5UmVmID0gbnVsbDtcclxuICAgICAgdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zdWJtZW51Q29tcG9uZW50cyAmJiB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5mb3JFYWNoKChzdWJtZW51KSA9PiB7XHJcbiAgICAgICAgc3VibWVudS5jbG9zZU1lbnUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWZyZXNoT3ZlcmxheSgpIHtcclxuICAgIGlmICghdGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XHJcblxyXG4gICAgbGV0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLm1lbnVUZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcclxuICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcclxuXHJcbiAgICB0aGlzLmhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTdWJtZW51KSB7XHJcbiAgICAgIHRoaXMuc3VibWVudU9wZW5lZC5lbWl0KHRoaXMudHJpZ2dlckFjdGlvbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLmNsb3NlQWxsTWVudXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdHJpZ2dlckVsZW1lbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgdmFyIHBvc2l0aW9uczogQ29ubmVjdGVkUG9zaXRpb25bXSA9IHRoaXMuaXNTdWJtZW51XHJcbiAgICAgID8gZ2V0U3VibWVudVBvc2l0aW9ucyh0aGlzLm1lbnVPcGVuRGlyZWN0aW9uKVxyXG4gICAgICA6IGdldE1lbnVQb3NpdGlvbnModGhpcy50cmlnZ2VyQWN0aW9uPy5kZXNjcmlwdG9yPy5tZW51Py5vcGVuRGlyZWN0aW9uKTtcclxuXHJcbiAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLmdldFNjcm9sbENvbnRhaW5lcih0cmlnZ2VyRWxlbWVudCk7XHJcblxyXG4gICAgbGV0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlQb3NpdGlvbkJ1aWxkZXJcclxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odHJpZ2dlckVsZW1lbnQpXHJcbiAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxyXG4gICAgICAud2l0aFB1c2godHJ1ZSlcclxuICAgICAgLndpdGhQb3NpdGlvbnMocG9zaXRpb25zKVxyXG4gICAgICAud2l0aFNjcm9sbGFibGVDb250YWluZXJzKHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModHJpZ2dlckVsZW1lbnQpKTtcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHNjcm9sbENvbnRhaW5lclxyXG4gICAgICAgID8gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpXHJcbiAgICAgICAgOiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXHJcbiAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzY3JvbGxDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5sYXN0U2Nyb2xsQ29udGFpbmVyID0gc2Nyb2xsQ29udGFpbmVyO1xyXG4gICAgICBzY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbkNvbnRhaW5lclNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5tZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ29udGFpbmVyU2Nyb2xsID0gKCkgPT4ge1xyXG4gICAgdGhpcy5vdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvbigpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ2V0U2Nyb2xsQ29udGFpbmVyKGVsOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XHJcbiAgICBsZXQgcGFyZW50ID0gZWwucGFyZW50RWxlbWVudDtcclxuICAgIHdoaWxlIChwYXJlbnQpIHtcclxuICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpO1xyXG4gICAgICBjb25zdCBvdmVyZmxvdyA9IHN0eWxlLm92ZXJmbG93ICsgc3R5bGUub3ZlcmZsb3dZO1xyXG4gICAgICBpZiAoL2F1dG98c2Nyb2xsLy50ZXN0KG92ZXJmbG93KSAmJiBwYXJlbnQuc2Nyb2xsSGVpZ2h0ID4gcGFyZW50LmNsaWVudEhlaWdodCkge1xyXG4gICAgICAgIHJldHVybiBwYXJlbnQ7XHJcbiAgICAgIH1cclxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5vcGVuTWVudShldmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdWJtZW51T3BlbmVkKG9wZW5lZEFjdGlvbjogVWlBY3Rpb24pIHtcclxuICAgIGlmICghdGhpcy5zdWJtZW51Q29tcG9uZW50cyB8fCB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uU3VibWVudU9wZW5lZChvcGVuZWRBY3Rpb24pO1xyXG4gICAgICB9LCAwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHMuZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICBpZiAoc3VibWVudS50cmlnZ2VyQWN0aW9uLmNvZGUgIT09IG9wZW5lZEFjdGlvbi5jb2RlICYmIHN1Ym1lbnUub3ZlcmxheVJlZikge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTaWJsaW5nU3VibWVudXMoZXhjZXB0QWN0aW9uOiBVaUFjdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJtZW51Q29tcG9uZW50cz8uZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICBpZiAoc3VibWVudS50cmlnZ2VyQWN0aW9uLmNvZGUgIT09IGV4Y2VwdEFjdGlvbi5jb2RlICYmIHN1Ym1lbnUuaXNPcGVuKSB7XHJcbiAgICAgICAgc3VibWVudS5jbG9zZU1lbnUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNvbXB1dGVkSWNvblBsYWNlaG9sZGVyPzogQnV0dG9uSWNvblBsYWNlaG9sZGVyO1xyXG4gIGhhc1N1YkFjdGlvblNpYmxpbmdzPzogYm9vbGVhbjtcclxuXHJcbiAgcHJpdmF0ZSBub3JtYWxpemVTdWJBY3Rpb25zKGFjdGlvbnM6IFVpQWN0aW9uW10pOiBVaUFjdGlvbltdIHtcclxuICAgIHRoaXMuaGFzU3ViQWN0aW9uU2libGluZ3MgPSBhY3Rpb25zLnNvbWUoKGEpID0+IGEuc3ViQWN0aW9ucyAmJiBhLnN1YkFjdGlvbnMubGVuZ3RoID4gMCk7XHJcblxyXG4gICAgY29uc3Qgbm9uU2VwYXJhdG9ycyA9IGFjdGlvbnMuZmlsdGVyKFxyXG4gICAgICAoYSkgPT4gYS5kZXNjcmlwdG9yPy50eXBlICE9PSBVaUFjdGlvbkJ1dHRvblR5cGUuU0VQQVJBVE9SXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGFueUhhc0ljb24gPSBub25TZXBhcmF0b3JzLnNvbWUoKGEpID0+IGEuZGVzY3JpcHRvcj8uaWNvbiB8fCBhLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZSk7XHJcblxyXG4gICAgY29uc3QgYW55SGFzUHJlSWNvbiA9IG5vblNlcGFyYXRvcnMuc29tZShcclxuICAgICAgKGEpID0+XHJcbiAgICAgICAgKGEuZGVzY3JpcHRvcj8uaWNvbiB8fCBhLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZSkgJiZcclxuICAgICAgICBhLmRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiA9PT0gSWNvblBvc2l0aW9uLlBSRVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGFueUhhc1Bvc3RJY29uID0gbm9uU2VwYXJhdG9ycy5zb21lKFxyXG4gICAgICAoYSkgPT5cclxuICAgICAgICAoYS5kZXNjcmlwdG9yPy5pY29uIHx8IGEuZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKSAmJlxyXG4gICAgICAgIGEuZGVzY3JpcHRvcj8uaWNvblBvc2l0aW9uID09PSBJY29uUG9zaXRpb24uUE9TVFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNvbXB1dGVkSWNvblBsYWNlaG9sZGVyID0gYW55SGFzSWNvblxyXG4gICAgICA/IGFueUhhc1ByZUljb24gJiYgYW55SGFzUG9zdEljb25cclxuICAgICAgICA/IEJ1dHRvbkljb25QbGFjZWhvbGRlci5CT1RIXHJcbiAgICAgICAgOiBhbnlIYXNQb3N0SWNvblxyXG4gICAgICAgICAgPyBCdXR0b25JY29uUGxhY2Vob2xkZXIuUE9TVFxyXG4gICAgICAgICAgOiBCdXR0b25JY29uUGxhY2Vob2xkZXIuUFJFXHJcbiAgICAgIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IGxhc3RTZXRQb3NpdGlvbiA9XHJcbiAgICAgIFsuLi5ub25TZXBhcmF0b3JzXS5yZXZlcnNlKCkuZmluZCgoYSkgPT4gYS5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gIT0gbnVsbCk/LmRlc2NyaXB0b3JcclxuICAgICAgICA/Lmljb25Qb3NpdGlvbiA/PyBJY29uUG9zaXRpb24uUFJFO1xyXG5cclxuICAgIHJldHVybiBhY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChhY3Rpb24uZGVzY3JpcHRvcj8udHlwZSA9PT0gVWlBY3Rpb25CdXR0b25UeXBlLlNFUEFSQVRPUikge1xyXG4gICAgICAgIHJldHVybiBhY3Rpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGhhc0ljb24gPSAhIShhY3Rpb24uZGVzY3JpcHRvcj8uaWNvbiB8fCBhY3Rpb24uZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5hY3Rpb24sXHJcbiAgICAgICAgZGVzY3JpcHRvcjogYWN0aW9uLmRlc2NyaXB0b3JcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIC4uLmFjdGlvbi5kZXNjcmlwdG9yLFxyXG4gICAgICAgICAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgICAgaWNvblBvc2l0aW9uOiBhbnlIYXNJY29uXHJcbiAgICAgICAgICAgICAgICA/IGhhc0ljb25cclxuICAgICAgICAgICAgICAgICAgPyAoYWN0aW9uLmRlc2NyaXB0b3IuaWNvblBvc2l0aW9uID8/IGxhc3RTZXRQb3NpdGlvbilcclxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIDogYWN0aW9uLmRlc2NyaXB0b3IuaWNvblBvc2l0aW9uLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6ICh7XHJcbiAgICAgICAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgfSBhcyBVaUFjdGlvbkRlc2NyaXB0b3IpLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpY29uUG9zaXRpb24oKTogdHlwZW9mIEljb25Qb3NpdGlvbiB7XHJcbiAgICByZXR1cm4gSWNvblBvc2l0aW9uO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGlzU3VibWVudSkge1xyXG4gIDxkaXYgY2xhc3M9XCJzdWJtZW51IGhvdmVyRWZmZWN0XCIgW2NsYXNzLmFjdGl2ZVN1Ym1lbnVdPVwiaXNPcGVuXCIgKG1vdXNlZW50ZXIpPVwib3Blbk1lbnUoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJUZW1wYWx0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPHNtYXJ0LWljb24gY2xhc3M9XCJzYjQtbWVudS1pbmRpY2F0b3JcIiBbaWNvbl09XCJpY29uXCIgY29sb3I9XCJibGFja1wiPjwvc21hcnQtaWNvbj5cclxuICA8L2Rpdj5cclxufSBAZWxzZSB7XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJUZW1wYWx0ZVwiPjwvbmctY29udGFpbmVyPlxyXG59XHJcblxyXG48bmctdGVtcGxhdGUgI21lbnVUZW1wbGF0ZT5cclxuICA8dWwgY2xhc3M9XCJ1aS10aWVyZWQtbWVudSBzYjQtbWVudS1wYW5lbFwiPlxyXG4gICAgPGxpXHJcbiAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygc3ViQWN0aW9uc1wiXHJcbiAgICAgIGNsYXNzPVwiaG92ZXJFZmZlY3RcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcclxuICAgICAgW2NsYXNzLnNiNC1wb3N0LWljb25dPVwiYWN0aW9uLmRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiA9PT0gaWNvblBvc2l0aW9uKCkuUE9TVFwiXHJcbiAgICAgIChtb3VzZWVudGVyKT1cImNsb3NlU2libGluZ1N1Ym1lbnVzKGFjdGlvbilcIlxyXG4gICAgPlxyXG4gICAgICBAaWYgKGFjdGlvbi5zdWJBY3Rpb25zICYmIGFjdGlvbi5zdWJBY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICA8dWktdGllcmVkLW1lbnVcclxuICAgICAgICAgICNzdWJtZW51XHJcbiAgICAgICAgICBbdHJpZ2dlckFjdGlvbl09XCJhY3Rpb25cIlxyXG4gICAgICAgICAgW2lzU3VibWVudV09XCJ0cnVlXCJcclxuICAgICAgICAgIFtzdWJBY3Rpb25zXT1cImFjdGlvbi5zdWJBY3Rpb25zIVwiXHJcbiAgICAgICAgICBbbWVudU9wZW5EaXJlY3Rpb25dPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yPy5tZW51Py5vcGVuRGlyZWN0aW9uXCJcclxuICAgICAgICAgIChhY3Rpb25DbGljayk9XCJhY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgKHN1Ym1lbnVPcGVuZWQpPVwib25TdWJtZW51T3BlbmVkKHN1Ym1lbnUpXCJcclxuICAgICAgICA+PC91aS10aWVyZWQtbWVudT5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImFjdGlvbi5kZXNjcmlwdG9yIVwiXHJcbiAgICAgICAgICBbY29kZV09XCJhY3Rpb24uY29kZVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiISFhY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgW3ZpZXdBY3RpdmF0ZWRdPVwiYWN0aW9uLnZpZXdBY3RpdmF0ZWRcIlxyXG4gICAgICAgICAgW2ljb25QbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICAgYWN0aW9uLmRlc2NyaXB0b3I/Lmljb24gfHwgYWN0aW9uLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZVxyXG4gICAgICAgICAgICAgID8gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgOiBjb21wdXRlZEljb25QbGFjZWhvbGRlclxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChhY3Rpb25DbGljayk9XCIhYWN0aW9uLnN1YkFjdGlvbnM/Lmxlbmd0aCAmJiBvbkFjdGlvbkNsaWNrKGFjdGlvbilcIlxyXG4gICAgICAgID48L3VpLWFjdGlvbi1idXR0b24+XHJcbiAgICAgICAgQGlmIChoYXNTdWJBY3Rpb25TaWJsaW5ncykge1xyXG4gICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgY2xhc3M9XCJzYjQtbWVudS1wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIhYWN0aW9uLmRpc2FibGVkICYmICFhY3Rpb24uc3ViQWN0aW9ucz8ubGVuZ3RoICYmIG9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiXHJcbiAgICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgPC9saT5cclxuICA8L3VsPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0cmlnZ2VyVGVtcGFsdGU+XHJcbiAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgIFtkZXNjcmlwdG9yXT1cInRyaWdnZXJBY3Rpb24uZGVzY3JpcHRvciFcIlxyXG4gICAgW2NvZGVdPVwidHJpZ2dlckFjdGlvbi5jb2RlXCJcclxuICAgIFtkaXNhYmxlZF09XCIhIXRyaWdnZXJBY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgW3ZpZXdBY3RpdmF0ZWRdPVwidHJpZ2dlckFjdGlvbi52aWV3QWN0aXZhdGVkXCJcclxuICAgIChhY3Rpb25DbGljayk9XCJ0b2dnbGVNZW51KCRldmVudC5ldmVudClcIlxyXG4gICAgW2NsYXNzLnN1Ym1lbnVUcmlnZ2VyXT1cImlzU3VibWVudVwiXHJcbiAgPlxyXG4gIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -13,11 +13,12 @@ import * as i4 from "../../../../../smart-icon/smart-icon/smart-icon.component";
13
13
  import * as i5 from "../../../ui-action-button/ui-action-button.component";
14
14
  import * as i6 from "../../../../utility/componentLibrary";
15
15
  export class HoverMenuComponent {
16
- constructor(menuService, overlay, viewContainerRef, overlayPositionBuilder, compLib) {
16
+ constructor(menuService, overlay, viewContainerRef, overlayPositionBuilder, scrollDispatcher, compLib) {
17
17
  this.menuService = menuService;
18
18
  this.overlay = overlay;
19
19
  this.viewContainerRef = viewContainerRef;
20
20
  this.overlayPositionBuilder = overlayPositionBuilder;
21
+ this.scrollDispatcher = scrollDispatcher;
21
22
  this.compLib = compLib;
22
23
  this.overlayRef = null;
23
24
  this.isSubmenu = false;
@@ -28,6 +29,10 @@ export class HoverMenuComponent {
28
29
  this.submenuOpenMap = new Map();
29
30
  this.subActions = [];
30
31
  this.hasCheckedChildren = false;
32
+ this.lastScrollContainer = null;
33
+ this.onContainerScroll = () => {
34
+ this.overlayRef?.updatePosition();
35
+ };
31
36
  this.compLib = compLib ?? ComponentLibrary.PRIMENG;
32
37
  if (this.compLib === ComponentLibrary.PRIMENG) {
33
38
  this.icon = 'chevron-right';
@@ -101,6 +106,11 @@ export class HoverMenuComponent {
101
106
  }
102
107
  closeMenu() {
103
108
  if (this.overlayRef) {
109
+ const container = this.lastScrollContainer;
110
+ if (container) {
111
+ container.removeEventListener('scroll', this.onContainerScroll);
112
+ this.lastScrollContainer = null;
113
+ }
104
114
  this.overlayRef.dispose();
105
115
  this.overlayRef = null;
106
116
  this.hasCheckedChildren = false;
@@ -135,19 +145,39 @@ export class HoverMenuComponent {
135
145
  var positions = this.isSubmenu
136
146
  ? getSubmenuPositions(this.menuOpenDirection)
137
147
  : getMenuPositions(this.triggerAction?.descriptor?.menu?.openDirection);
148
+ const scrollContainer = this.getScrollContainer(triggerElement);
138
149
  let positionStrategy = this.overlayPositionBuilder
139
150
  .flexibleConnectedTo(triggerElement)
140
151
  .withFlexibleDimensions(false)
141
152
  .withPush(true)
142
- .withPositions(positions);
153
+ .withPositions(positions)
154
+ .withScrollableContainers(this.scrollDispatcher.getAncestorScrollContainers(triggerElement));
143
155
  this.overlayRef = this.overlay.create({
144
156
  positionStrategy,
145
- scrollStrategy: this.overlay.scrollStrategies.reposition(),
157
+ scrollStrategy: scrollContainer
158
+ ? this.overlay.scrollStrategies.reposition()
159
+ : this.overlay.scrollStrategies.reposition(),
146
160
  hasBackdrop: false,
147
161
  });
162
+ if (scrollContainer) {
163
+ this.lastScrollContainer = scrollContainer;
164
+ scrollContainer.addEventListener('scroll', this.onContainerScroll, { passive: true });
165
+ }
148
166
  let portal = new TemplatePortal(this.menuTemplate, this.viewContainerRef);
149
167
  this.overlayRef.attach(portal);
150
168
  }
169
+ getScrollContainer(el) {
170
+ let parent = el.parentElement;
171
+ while (parent) {
172
+ const style = window.getComputedStyle(parent);
173
+ const overflow = style.overflow + style.overflowY;
174
+ if (/auto|scroll/.test(overflow) && parent.scrollHeight > parent.clientHeight) {
175
+ return parent;
176
+ }
177
+ parent = parent.parentElement;
178
+ }
179
+ return null;
180
+ }
151
181
  toggleMenu(event) {
152
182
  if (!this.isOpen) {
153
183
  this.openMenu(event);
@@ -219,13 +249,13 @@ export class HoverMenuComponent {
219
249
  iconPosition() {
220
250
  return IconPosition;
221
251
  }
222
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HoverMenuComponent, deps: [{ token: i1.UiMenuService }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i2.OverlayPositionBuilder }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
252
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HoverMenuComponent, deps: [{ token: i1.UiMenuService }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i2.OverlayPositionBuilder }, { token: i2.ScrollDispatcher }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
223
253
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: HoverMenuComponent, selector: "ui-hover-menu", inputs: { triggerAction: { classPropertyName: "triggerAction", publicName: "triggerAction", isSignal: false, isRequired: false, transformFunction: null }, isSubmenu: { classPropertyName: "isSubmenu", publicName: "isSubmenu", isSignal: false, isRequired: false, transformFunction: null }, menuOpenDirection: { classPropertyName: "menuOpenDirection", publicName: "menuOpenDirection", isSignal: false, isRequired: false, transformFunction: null }, toolbarId: { classPropertyName: "toolbarId", publicName: "toolbarId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionClick: "actionClick", submenuOpened: "submenuOpened" }, host: { listeners: { "click": "onMenuClick($event)", "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "menuTemplate", first: true, predicate: ["menuTemplate"], descendants: true }, { propertyName: "submenuComponents", predicate: ["submenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isSubmenu) {\r\n <div class=\"submenu hoverEffect\" [class.activeSubmenu]=\"isOpen\" (mouseenter)=\"openMenu($event)\">\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n <smart-icon class=\"sb4-menu-indicator\" [icon]=\"icon\" color=\"black\"></smart-icon>\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n}\r\n\r\n<ng-template #menuTemplate>\r\n <ul class=\"ui-hover-menu sb4-menu-panel\">\r\n <li\r\n *ngFor=\"let action of subActions\"\r\n class=\"hoverEffect\"\r\n [class.disabled]=\"action.disabled\"\r\n [class.sb4-post-icon]=\"action.descriptor?.iconPosition === iconPosition().POST\"\r\n (mouseenter)=\"closeSiblingSubmenus(action)\"\r\n >\r\n @if (action.subActions && action.subActions.length > 0) {\r\n <ui-hover-menu\r\n #submenu\r\n [triggerAction]=\"action\"\r\n [isSubmenu]=\"true\"\r\n [subActions]=\"action.subActions!\"\r\n [menuOpenDirection]=\"triggerAction.descriptor?.menu?.openDirection\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (submenuOpened)=\"onSubmenuOpened(submenu)\"\r\n ></ui-hover-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"action.descriptor!\"\r\n [code]=\"action.code\"\r\n [disabled]=\"!!action.disabled\"\r\n [viewActivated]=\"action.viewActivated\"\r\n [iconPlaceholder]=\"\r\n action.descriptor?.icon || action.descriptor?.iconResource\r\n ? undefined\r\n : computedIconPlaceholder\r\n \"\r\n (actionClick)=\"!action.subActions?.length && onActionClick(action)\"\r\n ></ui-action-button>\r\n @if (hasSubActionSiblings) {\r\n <smart-icon\r\n class=\"sb4-menu-placeholder\"\r\n (click)=\"!action.disabled && !action.subActions?.length && onActionClick(action)\"\r\n ></smart-icon>\r\n }\r\n }\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #triggerTempalte>\r\n <ui-action-button\r\n [descriptor]=\"triggerAction.descriptor!\"\r\n [code]=\"triggerAction.code\"\r\n [disabled]=\"!!triggerAction.disabled\"\r\n [viewActivated]=\"triggerAction.viewActivated\"\r\n (mouseenter)=\"openMenu($event)\"\r\n (actionClick)=\"onActionClick(triggerAction)\"\r\n [class.submenuTrigger]=\"isSubmenu\"\r\n >\r\n </ui-action-button>\r\n</ng-template>\r\n", styles: [":host{display:inline-block;position:relative}li{display:flex}.ui-hover-menu{--sb4-panel-bg-color: white;--sb4-panel-hover-bg-color: rgb(241, 245, 249)}ul,.ui-hover-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:var(--sb4-panel-bg-color);width:fit-content;box-shadow:2px 2px 8px #0003;z-index:1000;border-radius:5px;padding:.1rem}.submenuTrigger,.ui-hover-menu ::ng-deep button{background-color:var(--sb4-panel-bg-color);box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.ui-hover-menu .sb4-post-icon ::ng-deep button{justify-content:flex-end}.ui-hover-menu ::ng-deep ui-action-button,.ui-hover-menu ::ng-deep ui-badge{width:100%}.ui-hover-menu>li{position:relative}.submenu{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.submenu ::ng-deep ui-action-button{flex:1}.disabled{color:#aaa;cursor:not-allowed}.ui-hover-menu ui-hover-menu{width:100%}smart-icon{align-content:center}.sb4-menu-placeholder{cursor:pointer}.sb4-menu-panel:has(.separator) .sb4-menu-placeholder{display:none}.hoverEffect:hover:has(.separator){background-color:unset!important}.hoverEffect.activeSubmenu,.hoverEffect:hover,.sb4-menu-panel .hoverEffect.activeSubmenu ::ng-deep .submenuTrigger,.sb4-menu-panel .hoverEffect:hover ::ng-deep .submenuTrigger,.sb4-menu-panel .hoverEffect.activeSubmenu ::ng-deep button,.sb4-menu-panel .hoverEffect:hover ::ng-deep button{background-color:var(--sb4-panel-hover-bg-color)!important;transition:none!important}.sb4-menu-panel ::ng-deep button{background-color:unset!important;border-color:unset!important;transition:none!important}.sb4-menu-panel ::ng-deep button .mdc-button__ripple:before,.sb4-menu-panel ::ng-deep button:before{background-color:transparent!important;opacity:0!important}.sb4-menu-panel ::ng-deep button.sb4-view-activated,.sb4-menu-panel ::ng-deep button.sb4-view-activated *{color:var( --sb4-view-activated-menu-color, var(--sb4-view-activated-bg, var(--primary-color, #1976d2)) )!important;font-weight:var(--sb4-view-activated-font-weight, 600)}.sb4-menu-panel ::ng-deep button.sb4-view-activated,.sb4-menu-panel .hoverEffect:hover ::ng-deep button.sb4-view-activated{background-color:var( --sb4-view-activated-menu-bg, rgb(from var(--primary-color, #1976d2) r g b / .12) )!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: HoverMenuComponent, selector: "ui-hover-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection", "toolbarId"], outputs: ["actionClick", "submenuOpened"] }] }); }
224
254
  }
225
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HoverMenuComponent, decorators: [{
226
256
  type: Component,
227
257
  args: [{ selector: 'ui-hover-menu', template: "@if (isSubmenu) {\r\n <div class=\"submenu hoverEffect\" [class.activeSubmenu]=\"isOpen\" (mouseenter)=\"openMenu($event)\">\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n <smart-icon class=\"sb4-menu-indicator\" [icon]=\"icon\" color=\"black\"></smart-icon>\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n}\r\n\r\n<ng-template #menuTemplate>\r\n <ul class=\"ui-hover-menu sb4-menu-panel\">\r\n <li\r\n *ngFor=\"let action of subActions\"\r\n class=\"hoverEffect\"\r\n [class.disabled]=\"action.disabled\"\r\n [class.sb4-post-icon]=\"action.descriptor?.iconPosition === iconPosition().POST\"\r\n (mouseenter)=\"closeSiblingSubmenus(action)\"\r\n >\r\n @if (action.subActions && action.subActions.length > 0) {\r\n <ui-hover-menu\r\n #submenu\r\n [triggerAction]=\"action\"\r\n [isSubmenu]=\"true\"\r\n [subActions]=\"action.subActions!\"\r\n [menuOpenDirection]=\"triggerAction.descriptor?.menu?.openDirection\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (submenuOpened)=\"onSubmenuOpened(submenu)\"\r\n ></ui-hover-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"action.descriptor!\"\r\n [code]=\"action.code\"\r\n [disabled]=\"!!action.disabled\"\r\n [viewActivated]=\"action.viewActivated\"\r\n [iconPlaceholder]=\"\r\n action.descriptor?.icon || action.descriptor?.iconResource\r\n ? undefined\r\n : computedIconPlaceholder\r\n \"\r\n (actionClick)=\"!action.subActions?.length && onActionClick(action)\"\r\n ></ui-action-button>\r\n @if (hasSubActionSiblings) {\r\n <smart-icon\r\n class=\"sb4-menu-placeholder\"\r\n (click)=\"!action.disabled && !action.subActions?.length && onActionClick(action)\"\r\n ></smart-icon>\r\n }\r\n }\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #triggerTempalte>\r\n <ui-action-button\r\n [descriptor]=\"triggerAction.descriptor!\"\r\n [code]=\"triggerAction.code\"\r\n [disabled]=\"!!triggerAction.disabled\"\r\n [viewActivated]=\"triggerAction.viewActivated\"\r\n (mouseenter)=\"openMenu($event)\"\r\n (actionClick)=\"onActionClick(triggerAction)\"\r\n [class.submenuTrigger]=\"isSubmenu\"\r\n >\r\n </ui-action-button>\r\n</ng-template>\r\n", styles: [":host{display:inline-block;position:relative}li{display:flex}.ui-hover-menu{--sb4-panel-bg-color: white;--sb4-panel-hover-bg-color: rgb(241, 245, 249)}ul,.ui-hover-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:var(--sb4-panel-bg-color);width:fit-content;box-shadow:2px 2px 8px #0003;z-index:1000;border-radius:5px;padding:.1rem}.submenuTrigger,.ui-hover-menu ::ng-deep button{background-color:var(--sb4-panel-bg-color);box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.ui-hover-menu .sb4-post-icon ::ng-deep button{justify-content:flex-end}.ui-hover-menu ::ng-deep ui-action-button,.ui-hover-menu ::ng-deep ui-badge{width:100%}.ui-hover-menu>li{position:relative}.submenu{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.submenu ::ng-deep ui-action-button{flex:1}.disabled{color:#aaa;cursor:not-allowed}.ui-hover-menu ui-hover-menu{width:100%}smart-icon{align-content:center}.sb4-menu-placeholder{cursor:pointer}.sb4-menu-panel:has(.separator) .sb4-menu-placeholder{display:none}.hoverEffect:hover:has(.separator){background-color:unset!important}.hoverEffect.activeSubmenu,.hoverEffect:hover,.sb4-menu-panel .hoverEffect.activeSubmenu ::ng-deep .submenuTrigger,.sb4-menu-panel .hoverEffect:hover ::ng-deep .submenuTrigger,.sb4-menu-panel .hoverEffect.activeSubmenu ::ng-deep button,.sb4-menu-panel .hoverEffect:hover ::ng-deep button{background-color:var(--sb4-panel-hover-bg-color)!important;transition:none!important}.sb4-menu-panel ::ng-deep button{background-color:unset!important;border-color:unset!important;transition:none!important}.sb4-menu-panel ::ng-deep button .mdc-button__ripple:before,.sb4-menu-panel ::ng-deep button:before{background-color:transparent!important;opacity:0!important}.sb4-menu-panel ::ng-deep button.sb4-view-activated,.sb4-menu-panel ::ng-deep button.sb4-view-activated *{color:var( --sb4-view-activated-menu-color, var(--sb4-view-activated-bg, var(--primary-color, #1976d2)) )!important;font-weight:var(--sb4-view-activated-font-weight, 600)}.sb4-menu-panel ::ng-deep button.sb4-view-activated,.sb4-menu-panel .hoverEffect:hover ::ng-deep button.sb4-view-activated{background-color:var( --sb4-view-activated-menu-bg, rgb(from var(--primary-color, #1976d2) r g b / .12) )!important}\n"] }]
228
- }], ctorParameters: () => [{ type: i1.UiMenuService }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i2.OverlayPositionBuilder }, { type: i6.ComponentLibrary, decorators: [{
258
+ }], ctorParameters: () => [{ type: i1.UiMenuService }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i2.OverlayPositionBuilder }, { type: i2.ScrollDispatcher }, { type: i6.ComponentLibrary, decorators: [{
229
259
  type: Inject,
230
260
  args: [COMPONENT_LIBRARY]
231
261
  }, {
@@ -253,4 +283,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
253
283
  type: HostListener,
254
284
  args: ['document:click', ['$event']]
255
285
  }] } });
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvbWVudS9ob3Zlci9ob3Zlci1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy9tZW51L2hvdmVyL2hvdmVyLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBSU4sU0FBUyxFQUNULFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8xQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNMLFlBQVksRUFHWixrQkFBa0IsR0FFbkIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7Ozs7Ozs7QUFPMUYsTUFBTSxPQUFPLGtCQUFrQjtJQW9CN0IsWUFDVSxXQUEwQixFQUMxQixPQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsc0JBQThDLEVB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QVE7eUNBeEJiLGlCQUFpQjtzQkFBekMsWUFBWTt1QkFBQyxTQUFTO2dCQUVJLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFHaEIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBNkZQLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTWpDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBpbnB1dCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENvbm5lY3RlZFBvc2l0aW9uLFxyXG4gIE92ZXJsYXksXHJcbiAgT3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcclxuICBPdmVybGF5UmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHtcclxuICBJY29uUG9zaXRpb24sXHJcbiAgTWVudU9wZW5EaXJlY3Rpb24sXHJcbiAgVWlBY3Rpb24sXHJcbiAgVWlBY3Rpb25CdXR0b25UeXBlLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvcixcclxufSBmcm9tICcuLi8uLi8uLi8uLi9hcGknO1xyXG5pbXBvcnQgeyBVaU1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQgeyBnZXRNZW51UG9zaXRpb25zLCBnZXRTdWJtZW51UG9zaXRpb25zIH0gZnJvbSAnLi4vbWVudS5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBCdXR0b25JY29uUGxhY2Vob2xkZXIgfSBmcm9tICcuLi8uLi8uLi91aS1hY3Rpb24tYnV0dG9uL2J1dHRvbi1pY29uLXBsYWNlaG9sZGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktaG92ZXItbWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvdmVyLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9ob3Zlci1tZW51LmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG92ZXJNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ3N1Ym1lbnUnKSBzdWJtZW51Q29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxIb3Zlck1lbnVDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkKCdtZW51VGVtcGxhdGUnKSBtZW51VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgdHJpZ2dlckFjdGlvbiE6IFVpQWN0aW9uO1xyXG4gIEBJbnB1dCgpIGlzU3VibWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1lbnVPcGVuRGlyZWN0aW9uPzogTWVudU9wZW5EaXJlY3Rpb247XHJcbiAgdG9vbGJhcklkID0gaW5wdXQ8c3RyaW5nPigpO1xyXG5cclxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFVpQWN0aW9uPigpO1xyXG4gIEBPdXRwdXQoKSBzdWJtZW51T3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxVaUFjdGlvbj4oKTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgaWNvbiE6IHN0cmluZztcclxuICBzdWJtZW51T3Blbk1hcCA9IG5ldyBNYXA8VWlBY3Rpb24sIGJvb2xlYW4+KCk7XHJcbiAgc3ViQWN0aW9uczogVWlBY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgaGFzQ2hlY2tlZENoaWxkcmVuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBtZW51U2VydmljZTogVWlNZW51U2VydmljZSxcclxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgb3ZlcmxheVBvc2l0aW9uQnVpbGRlcjogT3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcclxuICAgIEBJbmplY3QoQ09NUE9ORU5UX0xJQlJBUlkpIEBPcHRpb25hbCgpIHB1YmxpYyBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeVxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wTGliID0gY29tcExpYiA/PyBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkc7XHJcblxyXG4gICAgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdjaGV2cm9uLXJpZ2h0JztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jb21wTGliID09PSBDb21wb25lbnRMaWJyYXJ5Lk1BVEVSSUFMKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdjaGV2cm9uX3JpZ2h0JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZW51U2VydmljZVxyXG4gICAgICAuZ2V0Q2xvc2VTaWduYWwoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2VNZW51KCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuICYmICF0aGlzLmhhc0NoZWNrZWRDaGlsZHJlbiAmJiB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXSkge1xyXG4gICAgICBjb25zdCB0cmlnZ2VyID0gY2hhbmdlc1sndHJpZ2dlckFjdGlvbiddLmN1cnJlbnRWYWx1ZSBhcyBVaUFjdGlvbjtcclxuICAgICAgY29uc3QgcHJldmlvdXNUcmlnZ2VyID0gY2hhbmdlc1sndHJpZ2dlckFjdGlvbiddLnByZXZpb3VzVmFsdWUgYXMgVWlBY3Rpb247XHJcblxyXG4gICAgICB0aGlzLnN1YkFjdGlvbnMgPSB0aGlzLm5vcm1hbGl6ZVN1YkFjdGlvbnModHJpZ2dlcj8uc3ViQWN0aW9ucyA/PyBbXSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc09wZW4gJiYgcHJldmlvdXNUcmlnZ2VyKSB7XHJcbiAgICAgICAgY29uc3QgaGFzU3ViQWN0aW9uc0NoYW5nZWQgPSB0aGlzLmhhc1N1YkFjdGlvbnNDaGFuZ2VkKFxyXG4gICAgICAgICAgcHJldmlvdXNUcmlnZ2VyPy5zdWJBY3Rpb25zLFxyXG4gICAgICAgICAgdHJpZ2dlcj8uc3ViQWN0aW9uc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGhhc1N1YkFjdGlvbnNDaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hPdmVybGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc1N1YkFjdGlvbnNDaGFuZ2VkKFxyXG4gICAgb2xkU3ViQWN0aW9uczogVWlBY3Rpb25bXSB8IHVuZGVmaW5lZCxcclxuICAgIG5ld1N1YkFjdGlvbnM6IFVpQWN0aW9uW10gfCB1bmRlZmluZWRcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9sZExlbmd0aCA9IG9sZFN1YkFjdGlvbnM/Lmxlbmd0aCA/PyAwO1xyXG4gICAgY29uc3QgbmV3TGVuZ3RoID0gbmV3U3ViQWN0aW9ucz8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgaWYgKG9sZExlbmd0aCAhPT0gbmV3TGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvbGRMZW5ndGggPiAwICYmIG5ld0xlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChvbGRTdWJBY3Rpb25zIVtpXS5jb2RlICE9PSBuZXdTdWJBY3Rpb25zIVtpXS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25BY3Rpb25DbGljayhhY3Rpb246IFVpQWN0aW9uKSB7XHJcbiAgICBpZiAoIWFjdGlvbi5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoYWN0aW9uKTtcclxuICAgICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25NZW51Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLm1lbnVTZXJ2aWNlLmNsb3NlQWxsTWVudXMoKTtcclxuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLm92ZXJsYXlSZWY7XHJcbiAgfVxyXG5cclxuICBjbG9zZU1lbnUoKSB7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc3VibWVudUNvbXBvbmVudHMgJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHMuZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaE92ZXJsYXkoKSB7XHJcbiAgICBpZiAoIXRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xyXG5cclxuICAgIGxldCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5tZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcblxyXG4gICAgdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9wZW5NZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzU3VibWVudSkge1xyXG4gICAgICB0aGlzLnN1Ym1lbnVPcGVuZWQuZW1pdCh0aGlzLnRyaWdnZXJBY3Rpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2Uuc2V0VG9vbGJhcklkKHRoaXMudG9vbGJhcklkKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0cmlnZ2VyRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB2YXIgcG9zaXRpb25zOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gdGhpcy5pc1N1Ym1lbnVcclxuICAgICAgPyBnZXRTdWJtZW51UG9zaXRpb25zKHRoaXMubWVudU9wZW5EaXJlY3Rpb24pXHJcbiAgICAgIDogZ2V0TWVudVBvc2l0aW9ucyh0aGlzLnRyaWdnZXJBY3Rpb24/LmRlc2NyaXB0b3I/Lm1lbnU/Lm9wZW5EaXJlY3Rpb24pO1xyXG5cclxuICAgIGxldCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5UG9zaXRpb25CdWlsZGVyXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRyaWdnZXJFbGVtZW50KVxyXG4gICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcclxuICAgICAgLndpdGhQdXNoKHRydWUpXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKHBvc2l0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXHJcbiAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5tZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMub3Blbk1lbnUoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3VibWVudU9wZW5lZChvcGVuZWRBY3Rpb246IFVpQWN0aW9uKSB7XHJcbiAgICBpZiAoIXRoaXMuc3VibWVudUNvbXBvbmVudHMgfHwgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblN1Ym1lbnVPcGVuZWQob3BlbmVkQWN0aW9uKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBvcGVuZWRBY3Rpb24uY29kZSAmJiBzdWJtZW51Lm92ZXJsYXlSZWYpIHtcclxuICAgICAgICBzdWJtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlU2libGluZ1N1Ym1lbnVzKGV4Y2VwdEFjdGlvbjogVWlBY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHM/LmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBleGNlcHRBY3Rpb24uY29kZSAmJiBzdWJtZW51LmlzT3Blbikge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZWRJY29uUGxhY2Vob2xkZXI/OiBCdXR0b25JY29uUGxhY2Vob2xkZXI7XHJcbiAgaGFzU3ViQWN0aW9uU2libGluZ3M/OiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIG5vcm1hbGl6ZVN1YkFjdGlvbnMoYWN0aW9uczogVWlBY3Rpb25bXSk6IFVpQWN0aW9uW10ge1xyXG4gICAgdGhpcy5oYXNTdWJBY3Rpb25TaWJsaW5ncyA9IGFjdGlvbnMuc29tZSgoYSkgPT4gYS5zdWJBY3Rpb25zICYmIGEuc3ViQWN0aW9ucy5sZW5ndGggPiAwKTtcclxuXHJcbiAgICBjb25zdCBub25TZXBhcmF0b3JzID0gYWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgIChhKSA9PiBhLmRlc2NyaXB0b3I/LnR5cGUgIT09IFVpQWN0aW9uQnV0dG9uVHlwZS5TRVBBUkFUT1JcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYW55SGFzSWNvbiA9IG5vblNlcGFyYXRvcnMuc29tZSgoYSkgPT4gYS5kZXNjcmlwdG9yPy5pY29uIHx8IGEuZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKTtcclxuXHJcbiAgICBjb25zdCBhbnlIYXNQcmVJY29uID0gbm9uU2VwYXJhdG9ycy5zb21lKFxyXG4gICAgICAoYSkgPT5cclxuICAgICAgICAoYS5kZXNjcmlwdG9yPy5pY29uIHx8IGEuZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKSAmJlxyXG4gICAgICAgIGEuZGVzY3JpcHRvcj8uaWNvblBvc2l0aW9uID09PSBJY29uUG9zaXRpb24uUFJFXHJcbiAgICApO1xyXG4gICAgY29uc3QgYW55SGFzUG9zdEljb24gPSBub25TZXBhcmF0b3JzLnNvbWUoXHJcbiAgICAgIChhKSA9PlxyXG4gICAgICAgIChhLmRlc2NyaXB0b3I/Lmljb24gfHwgYS5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpICYmXHJcbiAgICAgICAgYS5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09IEljb25Qb3NpdGlvbi5QT1NUXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29tcHV0ZWRJY29uUGxhY2Vob2xkZXIgPSBhbnlIYXNJY29uXHJcbiAgICAgID8gYW55SGFzUHJlSWNvbiAmJiBhbnlIYXNQb3N0SWNvblxyXG4gICAgICAgID8gQnV0dG9uSWNvblBsYWNlaG9sZGVyLkJPVEhcclxuICAgICAgICA6IGFueUhhc1Bvc3RJY29uXHJcbiAgICAgICAgICA/IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QT1NUXHJcbiAgICAgICAgICA6IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QUkVcclxuICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3QgbGFzdFNldFBvc2l0aW9uID1cclxuICAgICAgWy4uLm5vblNlcGFyYXRvcnNdLnJldmVyc2UoKS5maW5kKChhKSA9PiBhLmRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiAhPSBudWxsKT8uZGVzY3JpcHRvclxyXG4gICAgICAgID8uaWNvblBvc2l0aW9uID8/IEljb25Qb3NpdGlvbi5QUkU7XHJcblxyXG4gICAgcmV0dXJuIGFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcclxuICAgICAgaWYgKGFjdGlvbi5kZXNjcmlwdG9yPy50eXBlID09PSBVaUFjdGlvbkJ1dHRvblR5cGUuU0VQQVJBVE9SKSB7XHJcbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaGFzSWNvbiA9ICEhKGFjdGlvbi5kZXNjcmlwdG9yPy5pY29uIHx8IGFjdGlvbi5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmFjdGlvbixcclxuICAgICAgICBkZXNjcmlwdG9yOiBhY3Rpb24uZGVzY3JpcHRvclxyXG4gICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgLi4uYWN0aW9uLmRlc2NyaXB0b3IsXHJcbiAgICAgICAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgICBpY29uUG9zaXRpb246IGFueUhhc0ljb25cclxuICAgICAgICAgICAgICAgID8gaGFzSWNvblxyXG4gICAgICAgICAgICAgICAgICA/IChhY3Rpb24uZGVzY3JpcHRvci5pY29uUG9zaXRpb24gPz8gbGFzdFNldFBvc2l0aW9uKVxyXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgOiBhY3Rpb24uZGVzY3JpcHRvci5pY29uUG9zaXRpb24sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDogKHtcclxuICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICB9IGFzIFVpQWN0aW9uRGVzY3JpcHRvciksXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGljb25Qb3NpdGlvbigpOiB0eXBlb2YgSWNvblBvc2l0aW9uIHtcclxuICAgIHJldHVybiBJY29uUG9zaXRpb247XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoaXNTdWJtZW51KSB7XHJcbiAgPGRpdiBjbGFzcz1cInN1Ym1lbnUgaG92ZXJFZmZlY3RcIiBbY2xhc3MuYWN0aXZlU3VibWVudV09XCJpc09wZW5cIiAobW91c2VlbnRlcik9XCJvcGVuTWVudSgkZXZlbnQpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJpZ2dlclRlbXBhbHRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8c21hcnQtaWNvbiBjbGFzcz1cInNiNC1tZW51LWluZGljYXRvclwiIFtpY29uXT1cImljb25cIiBjb2xvcj1cImJsYWNrXCI+PC9zbWFydC1pY29uPlxyXG4gIDwvZGl2PlxyXG59IEBlbHNlIHtcclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJpZ2dlclRlbXBhbHRlXCI+PC9uZy1jb250YWluZXI+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbWVudVRlbXBsYXRlPlxyXG4gIDx1bCBjbGFzcz1cInVpLWhvdmVyLW1lbnUgc2I0LW1lbnUtcGFuZWxcIj5cclxuICAgIDxsaVxyXG4gICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHN1YkFjdGlvbnNcIlxyXG4gICAgICBjbGFzcz1cImhvdmVyRWZmZWN0XCJcclxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgIFtjbGFzcy5zYjQtcG9zdC1pY29uXT1cImFjdGlvbi5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09IGljb25Qb3NpdGlvbigpLlBPU1RcIlxyXG4gICAgICAobW91c2VlbnRlcik9XCJjbG9zZVNpYmxpbmdTdWJtZW51cyhhY3Rpb24pXCJcclxuICAgID5cclxuICAgICAgQGlmIChhY3Rpb24uc3ViQWN0aW9ucyAmJiBhY3Rpb24uc3ViQWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgPHVpLWhvdmVyLW1lbnVcclxuICAgICAgICAgICNzdWJtZW51XHJcbiAgICAgICAgICBbdHJpZ2dlckFjdGlvbl09XCJhY3Rpb25cIlxyXG4gICAgICAgICAgW2lzU3VibWVudV09XCJ0cnVlXCJcclxuICAgICAgICAgIFtzdWJBY3Rpb25zXT1cImFjdGlvbi5zdWJBY3Rpb25zIVwiXHJcbiAgICAgICAgICBbbWVudU9wZW5EaXJlY3Rpb25dPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yPy5tZW51Py5vcGVuRGlyZWN0aW9uXCJcclxuICAgICAgICAgIChhY3Rpb25DbGljayk9XCJhY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgKHN1Ym1lbnVPcGVuZWQpPVwib25TdWJtZW51T3BlbmVkKHN1Ym1lbnUpXCJcclxuICAgICAgICA+PC91aS1ob3Zlci1tZW51PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiYWN0aW9uLmRlc2NyaXB0b3IhXCJcclxuICAgICAgICAgIFtjb2RlXT1cImFjdGlvbi5jb2RlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhIWFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICBbdmlld0FjdGl2YXRlZF09XCJhY3Rpb24udmlld0FjdGl2YXRlZFwiXHJcbiAgICAgICAgICBbaWNvblBsYWNlaG9sZGVyXT1cIlxyXG4gICAgICAgICAgICBhY3Rpb24uZGVzY3JpcHRvcj8uaWNvbiB8fCBhY3Rpb24uZGVzY3JpcHRvcj8uaWNvblJlc291cmNlXHJcbiAgICAgICAgICAgICAgPyB1bmRlZmluZWRcclxuICAgICAgICAgICAgICA6IGNvbXB1dGVkSWNvblBsYWNlaG9sZGVyXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIiFhY3Rpb24uc3ViQWN0aW9ucz8ubGVuZ3RoICYmIG9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiXHJcbiAgICAgICAgPjwvdWktYWN0aW9uLWJ1dHRvbj5cclxuICAgICAgICBAaWYgKGhhc1N1YkFjdGlvblNpYmxpbmdzKSB7XHJcbiAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICBjbGFzcz1cInNiNC1tZW51LXBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIiFhY3Rpb24uZGlzYWJsZWQgJiYgIWFjdGlvbi5zdWJBY3Rpb25zPy5sZW5ndGggJiYgb25BY3Rpb25DbGljayhhY3Rpb24pXCJcclxuICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICA8L2xpPlxyXG4gIDwvdWw+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RyaWdnZXJUZW1wYWx0ZT5cclxuICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgW2Rlc2NyaXB0b3JdPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yIVwiXHJcbiAgICBbY29kZV09XCJ0cmlnZ2VyQWN0aW9uLmNvZGVcIlxyXG4gICAgW2Rpc2FibGVkXT1cIiEhdHJpZ2dlckFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICBbdmlld0FjdGl2YXRlZF09XCJ0cmlnZ2VyQWN0aW9uLnZpZXdBY3RpdmF0ZWRcIlxyXG4gICAgKG1vdXNlZW50ZXIpPVwib3Blbk1lbnUoJGV2ZW50KVwiXHJcbiAgICAoYWN0aW9uQ2xpY2spPVwib25BY3Rpb25DbGljayh0cmlnZ2VyQWN0aW9uKVwiXHJcbiAgICBbY2xhc3Muc3VibWVudVRyaWdnZXJdPVwiaXNTdWJtZW51XCJcclxuICA+XHJcbiAgPC91aS1hY3Rpb24tYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvbWVudS9ob3Zlci9ob3Zlci1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy9tZW51L2hvdmVyL2hvdmVyLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBSU4sU0FBUyxFQUNULFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVExQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUNMLFlBQVksRUFHWixrQkFBa0IsR0FFbkIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7Ozs7Ozs7QUFPMUYsTUFBTSxPQUFPLGtCQUFrQjtJQXNCN0IsWUFDVSxXQUEwQixFQUMxQixPQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsc0JBQThDLEVB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QUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7K0dBdFRVLGtCQUFrQiw0S0E0Qm5CLGlCQUFpQjttR0E1QmhCLGtCQUFrQiw0L0JDOUMvQiw4OUVBZ0VBLHUrRkRsQmEsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGVBQWU7OzBCQWdDdEIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUFHLFFBQVE7eUNBM0JiLGlCQUFpQjtzQkFBekMsWUFBWTt1QkFBQyxTQUFTO2dCQUVJLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFHaEIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBZ0dQLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTWpDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBpbnB1dCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENvbm5lY3RlZFBvc2l0aW9uLFxyXG4gIE92ZXJsYXksXHJcbiAgT3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcclxuICBPdmVybGF5UmVmLFxyXG4gIFNjcm9sbERpc3BhdGNoZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQge1xyXG4gIEljb25Qb3NpdGlvbixcclxuICBNZW51T3BlbkRpcmVjdGlvbixcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uL2FwaSc7XHJcbmltcG9ydCB7IFVpTWVudVNlcnZpY2UgfSBmcm9tICcuLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IGdldE1lbnVQb3NpdGlvbnMsIGdldFN1Ym1lbnVQb3NpdGlvbnMgfSBmcm9tICcuLi9tZW51LmNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEJ1dHRvbkljb25QbGFjZWhvbGRlciB9IGZyb20gJy4uLy4uLy4uL3VpLWFjdGlvbi1idXR0b24vYnV0dG9uLWljb24tcGxhY2Vob2xkZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1ob3Zlci1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG92ZXItbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2hvdmVyLW1lbnUuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb3Zlck1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZHJlbignc3VibWVudScpIHN1Ym1lbnVDb21wb25lbnRzITogUXVlcnlMaXN0PEhvdmVyTWVudUNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVUZW1wbGF0ZScpIG1lbnVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB0cmlnZ2VyQWN0aW9uITogVWlBY3Rpb247XHJcbiAgQElucHV0KCkgaXNTdWJtZW51OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVudU9wZW5EaXJlY3Rpb24/OiBNZW51T3BlbkRpcmVjdGlvbjtcclxuICB0b29sYmFySWQgPSBpbnB1dDxzdHJpbmc+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VWlBY3Rpb24+KCk7XHJcbiAgQE91dHB1dCgpIHN1Ym1lbnVPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVpQWN0aW9uPigpO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBpY29uITogc3RyaW5nO1xyXG4gIHN1Ym1lbnVPcGVuTWFwID0gbmV3IE1hcDxVaUFjdGlvbiwgYm9vbGVhbj4oKTtcclxuICBzdWJBY3Rpb25zOiBVaUFjdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBoYXNDaGVja2VkQ2hpbGRyZW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBsYXN0U2Nyb2xsQ29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IFVpTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlQb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29tcExpYj86IENvbXBvbmVudExpYnJhcnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbi1yaWdodCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5NQVRFUklBTCkge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbl9yaWdodCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudVNlcnZpY2VcclxuICAgICAgLmdldENsb3NlU2lnbmFsKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0cmlnZ2VyQWN0aW9uJ10pIHtcclxuICAgICAgY29uc3QgdHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5jdXJyZW50VmFsdWUgYXMgVWlBY3Rpb247XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzVHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5wcmV2aW91c1ZhbHVlIGFzIFVpQWN0aW9uO1xyXG5cclxuICAgICAgdGhpcy5zdWJBY3Rpb25zID0gdGhpcy5ub3JtYWxpemVTdWJBY3Rpb25zKHRyaWdnZXI/LnN1YkFjdGlvbnMgPz8gW10pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHByZXZpb3VzVHJpZ2dlcikge1xyXG4gICAgICAgIGNvbnN0IGhhc1N1YkFjdGlvbnNDaGFuZ2VkID0gdGhpcy5oYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgICAgICAgIHByZXZpb3VzVHJpZ2dlcj8uc3ViQWN0aW9ucyxcclxuICAgICAgICAgIHRyaWdnZXI/LnN1YkFjdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoYXNTdWJBY3Rpb25zQ2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoT3ZlcmxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgIG9sZFN1YkFjdGlvbnM6IFVpQWN0aW9uW10gfCB1bmRlZmluZWQsXHJcbiAgICBuZXdTdWJBY3Rpb25zOiBVaUFjdGlvbltdIHwgdW5kZWZpbmVkXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvbGRMZW5ndGggPSBvbGRTdWJBY3Rpb25zPy5sZW5ndGggPz8gMDtcclxuICAgIGNvbnN0IG5ld0xlbmd0aCA9IG5ld1N1YkFjdGlvbnM/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgIGlmIChvbGRMZW5ndGggIT09IG5ld0xlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2xkTGVuZ3RoID4gMCAmJiBuZXdMZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAob2xkU3ViQWN0aW9ucyFbaV0uY29kZSAhPT0gbmV3U3ViQWN0aW9ucyFbaV0uY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBVaUFjdGlvbikge1xyXG4gICAgaWYgKCFhY3Rpb24uZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGFjdGlvbik7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY2xvc2VBbGxNZW51cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uTWVudUNsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5vdmVybGF5UmVmO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VNZW51KCkge1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmxhc3RTY3JvbGxDb250YWluZXI7XHJcbiAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbkNvbnRhaW5lclNjcm9sbCk7XHJcbiAgICAgICAgdGhpcy5sYXN0U2Nyb2xsQ29udGFpbmVyID0gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5vdmVybGF5UmVmID0gbnVsbDtcclxuICAgICAgdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zdWJtZW51Q29tcG9uZW50cyAmJiB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5mb3JFYWNoKChzdWJtZW51KSA9PiB7XHJcbiAgICAgICAgc3VibWVudS5jbG9zZU1lbnUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWZyZXNoT3ZlcmxheSgpIHtcclxuICAgIGlmICghdGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XHJcblxyXG4gICAgbGV0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLm1lbnVUZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcclxuICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcclxuXHJcbiAgICB0aGlzLmhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTdWJtZW51KSB7XHJcbiAgICAgIHRoaXMuc3VibWVudU9wZW5lZC5lbWl0KHRoaXMudHJpZ2dlckFjdGlvbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLmNsb3NlQWxsTWVudXMoKTtcclxuICAgICAgdGhpcy5tZW51U2VydmljZS5zZXRUb29sYmFySWQodGhpcy50b29sYmFySWQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRyaWdnZXJFbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHZhciBwb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSB0aGlzLmlzU3VibWVudVxyXG4gICAgICA/IGdldFN1Ym1lbnVQb3NpdGlvbnModGhpcy5tZW51T3BlbkRpcmVjdGlvbilcclxuICAgICAgOiBnZXRNZW51UG9zaXRpb25zKHRoaXMudHJpZ2dlckFjdGlvbj8uZGVzY3JpcHRvcj8ubWVudT8ub3BlbkRpcmVjdGlvbik7XHJcblxyXG4gICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5nZXRTY3JvbGxDb250YWluZXIodHJpZ2dlckVsZW1lbnQpO1xyXG5cclxuICAgIGxldCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5UG9zaXRpb25CdWlsZGVyXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRyaWdnZXJFbGVtZW50KVxyXG4gICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcclxuICAgICAgLndpdGhQdXNoKHRydWUpXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKHBvc2l0aW9ucylcclxuICAgICAgLndpdGhTY3JvbGxhYmxlQ29udGFpbmVycyh0aGlzLnNjcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRyaWdnZXJFbGVtZW50KSk7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiBzY3JvbGxDb250YWluZXJcclxuICAgICAgICA/IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxyXG4gICAgICAgIDogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxyXG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2Nyb2xsQ29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbENvbnRhaW5lciA9IHNjcm9sbENvbnRhaW5lcjtcclxuICAgICAgc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25Db250YWluZXJTY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMubWVudVRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xyXG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNvbnRhaW5lclNjcm9sbCA9ICgpID0+IHtcclxuICAgIHRoaXMub3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGdldFNjcm9sbENvbnRhaW5lcihlbDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB8IG51bGwge1xyXG4gICAgbGV0IHBhcmVudCA9IGVsLnBhcmVudEVsZW1lbnQ7XHJcbiAgICB3aGlsZSAocGFyZW50KSB7XHJcbiAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcclxuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBzdHlsZS5vdmVyZmxvdyArIHN0eWxlLm92ZXJmbG93WTtcclxuICAgICAgaWYgKC9hdXRvfHNjcm9sbC8udGVzdChvdmVyZmxvdykgJiYgcGFyZW50LnNjcm9sbEhlaWdodCA+IHBhcmVudC5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMub3Blbk1lbnUoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3VibWVudU9wZW5lZChvcGVuZWRBY3Rpb246IFVpQWN0aW9uKSB7XHJcbiAgICBpZiAoIXRoaXMuc3VibWVudUNvbXBvbmVudHMgfHwgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblN1Ym1lbnVPcGVuZWQob3BlbmVkQWN0aW9uKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBvcGVuZWRBY3Rpb24uY29kZSAmJiBzdWJtZW51Lm92ZXJsYXlSZWYpIHtcclxuICAgICAgICBzdWJtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlU2libGluZ1N1Ym1lbnVzKGV4Y2VwdEFjdGlvbjogVWlBY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHM/LmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBleGNlcHRBY3Rpb24uY29kZSAmJiBzdWJtZW51LmlzT3Blbikge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZWRJY29uUGxhY2Vob2xkZXI/OiBCdXR0b25JY29uUGxhY2Vob2xkZXI7XHJcbiAgaGFzU3ViQWN0aW9uU2libGluZ3M/OiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIG5vcm1hbGl6ZVN1YkFjdGlvbnMoYWN0aW9uczogVWlBY3Rpb25bXSk6IFVpQWN0aW9uW10ge1xyXG4gICAgdGhpcy5oYXNTdWJBY3Rpb25TaWJsaW5ncyA9IGFjdGlvbnMuc29tZSgoYSkgPT4gYS5zdWJBY3Rpb25zICYmIGEuc3ViQWN0aW9ucy5sZW5ndGggPiAwKTtcclxuXHJcbiAgICBjb25zdCBub25TZXBhcmF0b3JzID0gYWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgIChhKSA9PiBhLmRlc2NyaXB0b3I/LnR5cGUgIT09IFVpQWN0aW9uQnV0dG9uVHlwZS5TRVBBUkFUT1JcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYW55SGFzSWNvbiA9IG5vblNlcGFyYXRvcnMuc29tZSgoYSkgPT4gYS5kZXNjcmlwdG9yPy5pY29uIHx8IGEuZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKTtcclxuXHJcbiAgICBjb25zdCBhbnlIYXNQcmVJY29uID0gbm9uU2VwYXJhdG9ycy5zb21lKFxyXG4gICAgICAoYSkgPT5cclxuICAgICAgICAoYS5kZXNjcmlwdG9yPy5pY29uIHx8IGEuZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKSAmJlxyXG4gICAgICAgIGEuZGVzY3JpcHRvcj8uaWNvblBvc2l0aW9uID09PSBJY29uUG9zaXRpb24uUFJFXHJcbiAgICApO1xyXG4gICAgY29uc3QgYW55SGFzUG9zdEljb24gPSBub25TZXBhcmF0b3JzLnNvbWUoXHJcbiAgICAgIChhKSA9PlxyXG4gICAgICAgIChhLmRlc2NyaXB0b3I/Lmljb24gfHwgYS5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpICYmXHJcbiAgICAgICAgYS5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09IEljb25Qb3NpdGlvbi5QT1NUXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29tcHV0ZWRJY29uUGxhY2Vob2xkZXIgPSBhbnlIYXNJY29uXHJcbiAgICAgID8gYW55SGFzUHJlSWNvbiAmJiBhbnlIYXNQb3N0SWNvblxyXG4gICAgICAgID8gQnV0dG9uSWNvblBsYWNlaG9sZGVyLkJPVEhcclxuICAgICAgICA6IGFueUhhc1Bvc3RJY29uXHJcbiAgICAgICAgICA/IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QT1NUXHJcbiAgICAgICAgICA6IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QUkVcclxuICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3QgbGFzdFNldFBvc2l0aW9uID1cclxuICAgICAgWy4uLm5vblNlcGFyYXRvcnNdLnJldmVyc2UoKS5maW5kKChhKSA9PiBhLmRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiAhPSBudWxsKT8uZGVzY3JpcHRvclxyXG4gICAgICAgID8uaWNvblBvc2l0aW9uID8/IEljb25Qb3NpdGlvbi5QUkU7XHJcblxyXG4gICAgcmV0dXJuIGFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcclxuICAgICAgaWYgKGFjdGlvbi5kZXNjcmlwdG9yPy50eXBlID09PSBVaUFjdGlvbkJ1dHRvblR5cGUuU0VQQVJBVE9SKSB7XHJcbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaGFzSWNvbiA9ICEhKGFjdGlvbi5kZXNjcmlwdG9yPy5pY29uIHx8IGFjdGlvbi5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmFjdGlvbixcclxuICAgICAgICBkZXNjcmlwdG9yOiBhY3Rpb24uZGVzY3JpcHRvclxyXG4gICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgLi4uYWN0aW9uLmRlc2NyaXB0b3IsXHJcbiAgICAgICAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgICBpY29uUG9zaXRpb246IGFueUhhc0ljb25cclxuICAgICAgICAgICAgICAgID8gaGFzSWNvblxyXG4gICAgICAgICAgICAgICAgICA/IChhY3Rpb24uZGVzY3JpcHRvci5pY29uUG9zaXRpb24gPz8gbGFzdFNldFBvc2l0aW9uKVxyXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgOiBhY3Rpb24uZGVzY3JpcHRvci5pY29uUG9zaXRpb24sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDogKHtcclxuICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICB9IGFzIFVpQWN0aW9uRGVzY3JpcHRvciksXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGljb25Qb3NpdGlvbigpOiB0eXBlb2YgSWNvblBvc2l0aW9uIHtcclxuICAgIHJldHVybiBJY29uUG9zaXRpb247XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoaXNTdWJtZW51KSB7XHJcbiAgPGRpdiBjbGFzcz1cInN1Ym1lbnUgaG92ZXJFZmZlY3RcIiBbY2xhc3MuYWN0aXZlU3VibWVudV09XCJpc09wZW5cIiAobW91c2VlbnRlcik9XCJvcGVuTWVudSgkZXZlbnQpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJpZ2dlclRlbXBhbHRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8c21hcnQtaWNvbiBjbGFzcz1cInNiNC1tZW51LWluZGljYXRvclwiIFtpY29uXT1cImljb25cIiBjb2xvcj1cImJsYWNrXCI+PC9zbWFydC1pY29uPlxyXG4gIDwvZGl2PlxyXG59IEBlbHNlIHtcclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJpZ2dlclRlbXBhbHRlXCI+PC9uZy1jb250YWluZXI+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbWVudVRlbXBsYXRlPlxyXG4gIDx1bCBjbGFzcz1cInVpLWhvdmVyLW1lbnUgc2I0LW1lbnUtcGFuZWxcIj5cclxuICAgIDxsaVxyXG4gICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHN1YkFjdGlvbnNcIlxyXG4gICAgICBjbGFzcz1cImhvdmVyRWZmZWN0XCJcclxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgIFtjbGFzcy5zYjQtcG9zdC1pY29uXT1cImFjdGlvbi5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09IGljb25Qb3NpdGlvbigpLlBPU1RcIlxyXG4gICAgICAobW91c2VlbnRlcik9XCJjbG9zZVNpYmxpbmdTdWJtZW51cyhhY3Rpb24pXCJcclxuICAgID5cclxuICAgICAgQGlmIChhY3Rpb24uc3ViQWN0aW9ucyAmJiBhY3Rpb24uc3ViQWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgPHVpLWhvdmVyLW1lbnVcclxuICAgICAgICAgICNzdWJtZW51XHJcbiAgICAgICAgICBbdHJpZ2dlckFjdGlvbl09XCJhY3Rpb25cIlxyXG4gICAgICAgICAgW2lzU3VibWVudV09XCJ0cnVlXCJcclxuICAgICAgICAgIFtzdWJBY3Rpb25zXT1cImFjdGlvbi5zdWJBY3Rpb25zIVwiXHJcbiAgICAgICAgICBbbWVudU9wZW5EaXJlY3Rpb25dPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yPy5tZW51Py5vcGVuRGlyZWN0aW9uXCJcclxuICAgICAgICAgIChhY3Rpb25DbGljayk9XCJhY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgKHN1Ym1lbnVPcGVuZWQpPVwib25TdWJtZW51T3BlbmVkKHN1Ym1lbnUpXCJcclxuICAgICAgICA+PC91aS1ob3Zlci1tZW51PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiYWN0aW9uLmRlc2NyaXB0b3IhXCJcclxuICAgICAgICAgIFtjb2RlXT1cImFjdGlvbi5jb2RlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhIWFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICBbdmlld0FjdGl2YXRlZF09XCJhY3Rpb24udmlld0FjdGl2YXRlZFwiXHJcbiAgICAgICAgICBbaWNvblBsYWNlaG9sZGVyXT1cIlxyXG4gICAgICAgICAgICBhY3Rpb24uZGVzY3JpcHRvcj8uaWNvbiB8fCBhY3Rpb24uZGVzY3JpcHRvcj8uaWNvblJlc291cmNlXHJcbiAgICAgICAgICAgICAgPyB1bmRlZmluZWRcclxuICAgICAgICAgICAgICA6IGNvbXB1dGVkSWNvblBsYWNlaG9sZGVyXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIiFhY3Rpb24uc3ViQWN0aW9ucz8ubGVuZ3RoICYmIG9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiXHJcbiAgICAgICAgPjwvdWktYWN0aW9uLWJ1dHRvbj5cclxuICAgICAgICBAaWYgKGhhc1N1YkFjdGlvblNpYmxpbmdzKSB7XHJcbiAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICBjbGFzcz1cInNiNC1tZW51LXBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIiFhY3Rpb24uZGlzYWJsZWQgJiYgIWFjdGlvbi5zdWJBY3Rpb25zPy5sZW5ndGggJiYgb25BY3Rpb25DbGljayhhY3Rpb24pXCJcclxuICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICA8L2xpPlxyXG4gIDwvdWw+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RyaWdnZXJUZW1wYWx0ZT5cclxuICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgW2Rlc2NyaXB0b3JdPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yIVwiXHJcbiAgICBbY29kZV09XCJ0cmlnZ2VyQWN0aW9uLmNvZGVcIlxyXG4gICAgW2Rpc2FibGVkXT1cIiEhdHJpZ2dlckFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICBbdmlld0FjdGl2YXRlZF09XCJ0cmlnZ2VyQWN0aW9uLnZpZXdBY3RpdmF0ZWRcIlxyXG4gICAgKG1vdXNlZW50ZXIpPVwib3Blbk1lbnUoJGV2ZW50KVwiXHJcbiAgICAoYWN0aW9uQ2xpY2spPVwib25BY3Rpb25DbGljayh0cmlnZ2VyQWN0aW9uKVwiXHJcbiAgICBbY2xhc3Muc3VibWVudVRyaWdnZXJdPVwiaXNTdWJtZW51XCJcclxuICA+XHJcbiAgPC91aS1hY3Rpb24tYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -31,7 +31,7 @@ export class SmartViewContextDialogService {
31
31
  closeOnEscape: false,
32
32
  duplicate: true,
33
33
  closable: !this.inject.get(DIALOG_DISABLE_CLOSE),
34
- autoZIndex: false,
34
+ baseZIndex: -102,
35
35
  });
36
36
  dialogRef.onClose.pipe(take(1)).subscribe((result) => {
37
37
  this.closeDialog(dialogRef, dialogData);
@@ -75,4 +75,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
75
75
  type: Inject,
76
76
  args: [COMPONENT_LIBRARY]
77
77
  }] }] });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmlldy1jb250ZXh0LWRpYWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXZpZXctY29udGV4dC1kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUc3RCxPQUFPLEVBQWlCLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFLNUIsTUFBTSxPQUFPLDZCQUE2QjtJQUV4QyxZQUNZLE1BQWlCLEVBQ2pCLGFBQTRCLEVBQzVCLE1BQWdCLEVBQ1EsT0FBeUI7UUFIakQsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBQ1EsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFMN0QscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7SUFNakMsQ0FBQztJQUVKLFlBQVksQ0FDVixXQUE0QixFQUM1QixTQUE2QjtRQUU3QixJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUVsRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2pELElBQUksRUFBRSxVQUFVO2dCQUNoQixXQUFXLEVBQUUsS0FBSztnQkFDbEIsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO2dCQUNoRCxVQUFVLEVBQUUsS0FBSzthQUNsQixDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FDYixXQUE0QixFQUM1QixTQUE2QjtRQUU3QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVyRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0MsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHFCQUFxQixDQUNuQixTQUE2QixFQUM3QixRQUFnQixFQUNoQixJQUFhO1FBRWIsSUFBSSxXQUFXLEdBQW9CO1lBQ2pDLElBQUksRUFBRSxFQUFFO1lBQ1IsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxRQUFRO2FBQ2hCO1lBQ0QsZUFBZSxFQUFFLFNBQVM7WUFDMUIsSUFBSTtTQUNMLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUNmLFNBQW9ELEVBQ3BELFVBQTJCO1FBRTNCLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuQixJQUFJLFNBQVMsWUFBWSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzsrR0EzRVUsNkJBQTZCLGdHQU05QixpQkFBaUI7bUhBTmhCLDZCQUE2QixjQUY1QixNQUFNOzs0RkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFPSSxNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFNtYXJ0RGlhbG9nRGF0YSB9IGZyb20gJy4uL3NtYXJ0LWRpYWxvZy9zbWFydGRpYWxvZy5tb2RlbCc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4vdXRpbGl0eS9jb21wb25lbnRMaWJyYXJ5JztcclxuaW1wb3J0IHsgRElBTE9HX0RJU0FCTEVfQ0xPU0UgfSBmcm9tICcuL3NtYXJ0LXZpZXctY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0Vmlld0NvbnRleHREaWFsb2dTZXJ2aWNlIHtcclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgaW5qZWN0OiBJbmplY3RvcixcclxuICAgIEBJbmplY3QoQ09NUE9ORU5UX0xJQlJBUlkpIHB1YmxpYyBjb21wTGliOiBDb21wb25lbnRMaWJyYXJ5XHJcbiAgKSB7fVxyXG5cclxuICBjcmVhdGVEaWFsb2coXHJcbiAgICBzbWFydERpYWxvZzogU21hcnREaWFsb2dEYXRhLFxyXG4gICAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT5cclxuICApOiBNYXREaWFsb2dSZWY8YW55LCBhbnk+IHwgRHluYW1pY0RpYWxvZ1JlZiB7XHJcbiAgICBsZXQgZGlhbG9nRGF0YSA9IHNtYXJ0RGlhbG9nO1xyXG4gICAgaWYgKHRoaXMuY29tcExpYiA9PT0gdGhpcy5jb21wb25lbnRMaWJyYXJ5Lk1BVEVSSUFMKSB7XHJcbiAgICAgIGxldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKGNvbXBvbmVudCwgeyBkYXRhOiBkaWFsb2dEYXRhIH0pO1xyXG5cclxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKGRpYWxvZ1JlZiwgZGlhbG9nRGF0YSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZGlhbG9nUmVmO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGNvbXBvbmVudCwge1xyXG4gICAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXHJcbiAgICAgICAgZm9jdXNPblNob3c6IGZhbHNlLFxyXG4gICAgICAgIGNsb3NlT25Fc2NhcGU6IGZhbHNlLFxyXG4gICAgICAgIGR1cGxpY2F0ZTogdHJ1ZSxcclxuICAgICAgICBjbG9zYWJsZTogIXRoaXMuaW5qZWN0LmdldChESUFMT0dfRElTQUJMRV9DTE9TRSksXHJcbiAgICAgICAgYXV0b1pJbmRleDogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICBkaWFsb2dSZWYub25DbG9zZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZyhkaWFsb2dSZWYsIGRpYWxvZ0RhdGEpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGRpYWxvZ1JlZjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZURpYWxvZ1JlZihcclxuICAgIHNtYXJ0RGlhbG9nOiBTbWFydERpYWxvZ0RhdGEsXHJcbiAgICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8YW55PlxyXG4gICk6IE1hdERpYWxvZ1JlZjxhbnksIGFueT4gfCBEeW5hbWljRGlhbG9nUmVmIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oY29tcG9uZW50LCB7IGRhdGE6IHNtYXJ0RGlhbG9nIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGRpYWxvZ1JlZjtcclxuICB9XHJcblxyXG4gIG9wZW5Db21wb25lbnRBc0RpYWxvZyhcclxuICAgIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxhbnk+LFxyXG4gICAgdmlld05hbWU6IHN0cmluZyxcclxuICAgIHV1aWQ/OiBzdHJpbmdcclxuICApOiBNYXREaWFsb2dSZWY8YW55LCBhbnk+IHwgRHluYW1pY0RpYWxvZ1JlZiB7XHJcbiAgICBsZXQgc21hcnREaWFsb2c6IFNtYXJ0RGlhbG9nRGF0YSA9IHtcclxuICAgICAgc2l6ZToge30sXHJcbiAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICB0aXRsZTogdmlld05hbWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudDogY29tcG9uZW50LFxyXG4gICAgICB1dWlkLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVEaWFsb2coc21hcnREaWFsb2csIGNvbXBvbmVudCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjbG9zZURpYWxvZyhcclxuICAgIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPGFueSwgYW55PiB8IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBkaWFsb2dEYXRhOiBTbWFydERpYWxvZ0RhdGFcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGRpYWxvZ1JlZj8uY2xvc2UoKTtcclxuICAgIGlmIChkaWFsb2dSZWYgaW5zdGFuY2VvZiBEeW5hbWljRGlhbG9nUmVmKSB7XHJcbiAgICAgIGRpYWxvZ1JlZj8uZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmlldy1jb250ZXh0LWRpYWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXZpZXctY29udGV4dC1kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUc3RCxPQUFPLEVBQWlCLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFLNUIsTUFBTSxPQUFPLDZCQUE2QjtJQUV4QyxZQUNZLE1BQWlCLEVBQ2pCLGFBQTRCLEVBQzVCLE1BQWdCLEVBQ1EsT0FBeUI7UUFIakQsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBQ1EsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFMN0QscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7SUFNakMsQ0FBQztJQUVKLFlBQVksQ0FDVixXQUE0QixFQUM1QixTQUE2QjtRQUU3QixJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUVsRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2pELElBQUksRUFBRSxVQUFVO2dCQUNoQixXQUFXLEVBQUUsS0FBSztnQkFDbEIsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO2dCQUNoRCxVQUFVLEVBQUUsQ0FBQyxHQUFHO2FBQ2pCLENBQUMsQ0FBQztZQUNILFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUNiLFdBQTRCLEVBQzVCLFNBQTZCO1FBRTdCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRXJFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMzQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQscUJBQXFCLENBQ25CLFNBQTZCLEVBQzdCLFFBQWdCLEVBQ2hCLElBQWE7UUFFYixJQUFJLFdBQVcsR0FBb0I7WUFDakMsSUFBSSxFQUFFLEVBQUU7WUFDUixPQUFPLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLFFBQVE7YUFDaEI7WUFDRCxlQUFlLEVBQUUsU0FBUztZQUMxQixJQUFJO1NBQ0wsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQ2YsU0FBb0QsRUFDcEQsVUFBMkI7UUFFM0IsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksU0FBUyxZQUFZLGdCQUFnQixFQUFFLENBQUM7WUFDMUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDOytHQTNFVSw2QkFBNkIsZ0dBTTlCLGlCQUFpQjttSEFOaEIsNkJBQTZCLGNBRjVCLE1BQU07OzRGQUVQLDZCQUE2QjtrQkFIekMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQU9JLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgU21hcnREaWFsb2dEYXRhIH0gZnJvbSAnLi4vc21hcnQtZGlhbG9nL3NtYXJ0ZGlhbG9nLm1vZGVsJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IENPTVBPTkVOVF9MSUJSQVJZLCBDb21wb25lbnRMaWJyYXJ5IH0gZnJvbSAnLi91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQgeyBESUFMT0dfRElTQUJMRV9DTE9TRSB9IGZyb20gJy4vc21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRWaWV3Q29udGV4dERpYWxvZ1NlcnZpY2Uge1xyXG4gIGNvbXBvbmVudExpYnJhcnkgPSBDb21wb25lbnRMaWJyYXJ5O1xyXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBpbmplY3Q6IEluamVjdG9yLFxyXG4gICAgQEluamVjdChDT01QT05FTlRfTElCUkFSWSkgcHVibGljIGNvbXBMaWI6IENvbXBvbmVudExpYnJhcnlcclxuICApIHt9XHJcblxyXG4gIGNyZWF0ZURpYWxvZyhcclxuICAgIHNtYXJ0RGlhbG9nOiBTbWFydERpYWxvZ0RhdGEsXHJcbiAgICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8YW55PlxyXG4gICk6IE1hdERpYWxvZ1JlZjxhbnksIGFueT4gfCBEeW5hbWljRGlhbG9nUmVmIHtcclxuICAgIGxldCBkaWFsb2dEYXRhID0gc21hcnREaWFsb2c7XHJcbiAgICBpZiAodGhpcy5jb21wTGliID09PSB0aGlzLmNvbXBvbmVudExpYnJhcnkuTUFURVJJQUwpIHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oY29tcG9uZW50LCB7IGRhdGE6IGRpYWxvZ0RhdGEgfSk7XHJcblxyXG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2coZGlhbG9nUmVmLCBkaWFsb2dEYXRhKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oY29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcclxuICAgICAgICBmb2N1c09uU2hvdzogZmFsc2UsXHJcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogZmFsc2UsXHJcbiAgICAgICAgZHVwbGljYXRlOiB0cnVlLFxyXG4gICAgICAgIGNsb3NhYmxlOiAhdGhpcy5pbmplY3QuZ2V0KERJQUxPR19ESVNBQkxFX0NMT1NFKSxcclxuICAgICAgICBiYXNlWkluZGV4OiAtMTAyLFxyXG4gICAgICB9KTtcclxuICAgICAgZGlhbG9nUmVmLm9uQ2xvc2UucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2coZGlhbG9nUmVmLCBkaWFsb2dEYXRhKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVEaWFsb2dSZWYoXHJcbiAgICBzbWFydERpYWxvZzogU21hcnREaWFsb2dEYXRhLFxyXG4gICAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT5cclxuICApOiBNYXREaWFsb2dSZWY8YW55LCBhbnk+IHwgRHluYW1pY0RpYWxvZ1JlZiB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKGNvbXBvbmVudCwgeyBkYXRhOiBzbWFydERpYWxvZyB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgfVxyXG5cclxuICBvcGVuQ29tcG9uZW50QXNEaWFsb2coXHJcbiAgICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8YW55PixcclxuICAgIHZpZXdOYW1lOiBzdHJpbmcsXHJcbiAgICB1dWlkPzogc3RyaW5nXHJcbiAgKTogTWF0RGlhbG9nUmVmPGFueSwgYW55PiB8IER5bmFtaWNEaWFsb2dSZWYge1xyXG4gICAgbGV0IHNtYXJ0RGlhbG9nOiBTbWFydERpYWxvZ0RhdGEgPSB7XHJcbiAgICAgIHNpemU6IHt9LFxyXG4gICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgdGl0bGU6IHZpZXdOYW1lLFxyXG4gICAgICB9LFxyXG4gICAgICBjdXN0b21Db21wb25lbnQ6IGNvbXBvbmVudCxcclxuICAgICAgdXVpZCxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRGlhbG9nKHNtYXJ0RGlhbG9nLCBjb21wb25lbnQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2xvc2VEaWFsb2coXHJcbiAgICBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxhbnksIGFueT4gfCBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgZGlhbG9nRGF0YTogU21hcnREaWFsb2dEYXRhXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBkaWFsb2dSZWY/LmNsb3NlKCk7XHJcbiAgICBpZiAoZGlhbG9nUmVmIGluc3RhbmNlb2YgRHluYW1pY0RpYWxvZ1JlZikge1xyXG4gICAgICBkaWFsb2dSZWY/LmRlc3Ryb3koKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19