@smartbit4all/ng-client 6.0.15 → 6.0.16

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.
@@ -215,11 +215,11 @@ export class ClickMenuComponent {
215
215
  });
216
216
  }
217
217
  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 }); }
218
- 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 (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 [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 (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}li{display:flex}ul,.ui-tiered-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;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:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.hoverEffect:hover,.hoverEffect ::ng-deep button:hover{background-color:#f1f5f9}.hoverEffect.activeSubmenu,.hoverEffect.activeSubmenu ::ng-deep button{background-color:#f1f5f9}.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:hover,.hoverEffect:hover ::ng-deep button{background-color:#f1f5f9}\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", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: ClickMenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection"], outputs: ["actionClick", "submenuOpened"] }] }); }
218
+ 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 (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 [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 (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}li{display:flex}ul,.ui-tiered-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;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:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.hoverEffect:hover,.hoverEffect ::ng-deep button:hover{background-color:#f1f5f9}.hoverEffect.activeSubmenu,.hoverEffect.activeSubmenu ::ng-deep button{background-color:#f1f5f9}.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:#f1f5f9!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}\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", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: ClickMenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection"], outputs: ["actionClick", "submenuOpened"] }] }); }
219
219
  }
220
220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ClickMenuComponent, decorators: [{
221
221
  type: Component,
222
- 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 (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 [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 (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}li{display:flex}ul,.ui-tiered-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;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:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.hoverEffect:hover,.hoverEffect ::ng-deep button:hover{background-color:#f1f5f9}.hoverEffect.activeSubmenu,.hoverEffect.activeSubmenu ::ng-deep button{background-color:#f1f5f9}.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:hover,.hoverEffect:hover ::ng-deep button{background-color:#f1f5f9}\n"] }]
222
+ 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 (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 [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 (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}li{display:flex}ul,.ui-tiered-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;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:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.hoverEffect:hover,.hoverEffect ::ng-deep button:hover{background-color:#f1f5f9}.hoverEffect.activeSubmenu,.hoverEffect.activeSubmenu ::ng-deep button{background-color:#f1f5f9}.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:#f1f5f9!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}\n"] }]
223
223
  }], ctorParameters: () => [{ type: i1.UiMenuService }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i2.OverlayPositionBuilder }, { type: i6.ComponentLibrary, decorators: [{
224
224
  type: Inject,
225
225
  args: [COMPONENT_LIBRARY]
@@ -248,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
248
248
  type: HostListener,
249
249
  args: ['document:click', ['$event']]
250
250
  }] } });
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvbWVudS9jbGljay9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy9tZW51L2NsaWNrL21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsWUFBWSxHQUdiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsWUFBWSxFQUdaLGtCQUFrQixHQUVuQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7OztBQU8xRixNQUFNLE9BQU8sa0JBQWtCO0lBbUI3QixZQUNVLFdBQTBCLEVBQzFCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDUixPQUEwQjtRQUpoRSxnQkFBVyxHQUFYLFdB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TUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQTZGUCxXQUFXO3NCQURWLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1qQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29ubmVjdGVkUG9zaXRpb24sXHJcbiAgT3ZlcmxheSxcclxuICBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxyXG4gIE92ZXJsYXlSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQge1xyXG4gIEljb25Qb3NpdGlvbixcclxuICBNZW51T3BlbkRpcmVjdGlvbixcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uL2FwaSc7XHJcbmltcG9ydCB7IFVpTWVudVNlcnZpY2UgfSBmcm9tICcuLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IGdldE1lbnVQb3NpdGlvbnMsIGdldFN1Ym1lbnVQb3NpdGlvbnMgfSBmcm9tICcuLi9tZW51LmNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEJ1dHRvbkljb25QbGFjZWhvbGRlciB9IGZyb20gJy4uLy4uLy4uL3VpLWFjdGlvbi1idXR0b24vYnV0dG9uLWljb24tcGxhY2Vob2xkZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS10aWVyZWQtbWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpY2tNZW51Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcbiAgQFZpZXdDaGlsZHJlbignc3VibWVudScpIHN1Ym1lbnVDb21wb25lbnRzITogUXVlcnlMaXN0PENsaWNrTWVudUNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVUZW1wbGF0ZScpIG1lbnVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB0cmlnZ2VyQWN0aW9uITogVWlBY3Rpb247XHJcbiAgQElucHV0KCkgaXNTdWJtZW51OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVudU9wZW5EaXJlY3Rpb24/OiBNZW51T3BlbkRpcmVjdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVaUFjdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgc3VibWVudU9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8VWlBY3Rpb24+KCk7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGljb24hOiBzdHJpbmc7XHJcbiAgc3VibWVudU9wZW5NYXAgPSBuZXcgTWFwPFVpQWN0aW9uLCBib29sZWFuPigpO1xyXG4gIHN1YkFjdGlvbnM6IFVpQWN0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIGhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IFVpTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlQb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29tcExpYj86IENvbXBvbmVudExpYnJhcnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbi1yaWdodCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5NQVRFUklBTCkge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbl9yaWdodCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudVNlcnZpY2VcclxuICAgICAgLmdldENsb3NlU2lnbmFsKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0cmlnZ2VyQWN0aW9uJ10pIHtcclxuICAgICAgY29uc3QgdHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5jdXJyZW50VmFsdWUgYXMgVWlBY3Rpb247XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzVHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5wcmV2aW91c1ZhbHVlIGFzIFVpQWN0aW9uO1xyXG5cclxuICAgICAgdGhpcy5zdWJBY3Rpb25zID0gdGhpcy5ub3JtYWxpemVTdWJBY3Rpb25zKHRyaWdnZXI/LnN1YkFjdGlvbnMgPz8gW10pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHByZXZpb3VzVHJpZ2dlcikge1xyXG4gICAgICAgIGNvbnN0IGhhc1N1YkFjdGlvbnNDaGFuZ2VkID0gdGhpcy5oYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgICAgICAgIHByZXZpb3VzVHJpZ2dlcj8uc3ViQWN0aW9ucyxcclxuICAgICAgICAgIHRyaWdnZXI/LnN1YkFjdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoYXNTdWJBY3Rpb25zQ2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoT3ZlcmxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgIG9sZFN1YkFjdGlvbnM6IFVpQWN0aW9uW10gfCB1bmRlZmluZWQsXHJcbiAgICBuZXdTdWJBY3Rpb25zOiBVaUFjdGlvbltdIHwgdW5kZWZpbmVkXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvbGRMZW5ndGggPSBvbGRTdWJBY3Rpb25zPy5sZW5ndGggPz8gMDtcclxuICAgIGNvbnN0IG5ld0xlbmd0aCA9IG5ld1N1YkFjdGlvbnM/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgIGlmIChvbGRMZW5ndGggIT09IG5ld0xlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2xkTGVuZ3RoID4gMCAmJiBuZXdMZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAob2xkU3ViQWN0aW9ucyFbaV0uY29kZSAhPT0gbmV3U3ViQWN0aW9ucyFbaV0uY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBVaUFjdGlvbikge1xyXG4gICAgaWYgKCFhY3Rpb24uZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGFjdGlvbik7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY2xvc2VBbGxNZW51cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uTWVudUNsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5vdmVybGF5UmVmO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VNZW51KCkge1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xyXG4gICAgICB0aGlzLmhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnN1Ym1lbnVDb21wb25lbnRzICYmIHRoaXMuc3VibWVudUNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgICBzdWJtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hPdmVybGF5KCkge1xyXG4gICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcclxuXHJcbiAgICBsZXQgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMubWVudVRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xyXG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG5cclxuICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvcGVuTWVudShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1N1Ym1lbnUpIHtcclxuICAgICAgdGhpcy5zdWJtZW51T3BlbmVkLmVtaXQodGhpcy50cmlnZ2VyQWN0aW9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY2xvc2VBbGxNZW51cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0cmlnZ2VyRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB2YXIgcG9zaXRpb25zOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gdGhpcy5pc1N1Ym1lbnVcclxuICAgICAgPyBnZXRTdWJtZW51UG9zaXRpb25zKHRoaXMubWVudU9wZW5EaXJlY3Rpb24pXHJcbiAgICAgIDogZ2V0TWVudVBvc2l0aW9ucyh0aGlzLnRyaWdnZXJBY3Rpb24/LmRlc2NyaXB0b3I/Lm1lbnU/Lm9wZW5EaXJlY3Rpb24pO1xyXG5cclxuICAgIGxldCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5UG9zaXRpb25CdWlsZGVyXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRyaWdnZXJFbGVtZW50KVxyXG4gICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcclxuICAgICAgLndpdGhQdXNoKHRydWUpXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKHBvc2l0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXHJcbiAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5tZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMub3Blbk1lbnUoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3VibWVudU9wZW5lZChvcGVuZWRBY3Rpb246IFVpQWN0aW9uKSB7XHJcbiAgICBpZiAoIXRoaXMuc3VibWVudUNvbXBvbmVudHMgfHwgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblN1Ym1lbnVPcGVuZWQob3BlbmVkQWN0aW9uKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBvcGVuZWRBY3Rpb24uY29kZSAmJiBzdWJtZW51Lm92ZXJsYXlSZWYpIHtcclxuICAgICAgICBzdWJtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlU2libGluZ1N1Ym1lbnVzKGV4Y2VwdEFjdGlvbjogVWlBY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHM/LmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBleGNlcHRBY3Rpb24uY29kZSAmJiBzdWJtZW51LmlzT3Blbikge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBjb21wdXRlZEljb25QbGFjZWhvbGRlcj86IEJ1dHRvbkljb25QbGFjZWhvbGRlcjtcclxuICBoYXNTdWJBY3Rpb25TaWJsaW5ncz86IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgbm9ybWFsaXplU3ViQWN0aW9ucyhhY3Rpb25zOiBVaUFjdGlvbltdKTogVWlBY3Rpb25bXSB7XHJcbiAgICB0aGlzLmhhc1N1YkFjdGlvblNpYmxpbmdzID0gYWN0aW9ucy5zb21lKChhKSA9PiBhLnN1YkFjdGlvbnMgJiYgYS5zdWJBY3Rpb25zLmxlbmd0aCA+IDApO1xyXG5cclxuICAgIGNvbnN0IG5vblNlcGFyYXRvcnMgPSBhY3Rpb25zLmZpbHRlcihcclxuICAgICAgKGEpID0+IGEuZGVzY3JpcHRvcj8udHlwZSAhPT0gVWlBY3Rpb25CdXR0b25UeXBlLlNFUEFSQVRPUlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBhbnlIYXNJY29uID0gbm9uU2VwYXJhdG9ycy5zb21lKChhKSA9PiBhLmRlc2NyaXB0b3I/Lmljb24gfHwgYS5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpO1xyXG5cclxuICAgIGNvbnN0IGFueUhhc1ByZUljb24gPSBub25TZXBhcmF0b3JzLnNvbWUoXHJcbiAgICAgIChhKSA9PlxyXG4gICAgICAgIChhLmRlc2NyaXB0b3I/Lmljb24gfHwgYS5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpICYmXHJcbiAgICAgICAgYS5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09IEljb25Qb3NpdGlvbi5QUkVcclxuICAgICk7XHJcbiAgICBjb25zdCBhbnlIYXNQb3N0SWNvbiA9IG5vblNlcGFyYXRvcnMuc29tZShcclxuICAgICAgKGEpID0+XHJcbiAgICAgICAgKGEuZGVzY3JpcHRvcj8uaWNvbiB8fCBhLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZSkgJiZcclxuICAgICAgICBhLmRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiA9PT0gSWNvblBvc2l0aW9uLlBPU1RcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb21wdXRlZEljb25QbGFjZWhvbGRlciA9IGFueUhhc0ljb25cclxuICAgICAgPyBhbnlIYXNQcmVJY29uICYmIGFueUhhc1Bvc3RJY29uXHJcbiAgICAgICAgPyBCdXR0b25JY29uUGxhY2Vob2xkZXIuQk9USFxyXG4gICAgICAgIDogYW55SGFzUG9zdEljb25cclxuICAgICAgICAgID8gQnV0dG9uSWNvblBsYWNlaG9sZGVyLlBPU1RcclxuICAgICAgICAgIDogQnV0dG9uSWNvblBsYWNlaG9sZGVyLlBSRVxyXG4gICAgICA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCBsYXN0U2V0UG9zaXRpb24gPVxyXG4gICAgICBbLi4ubm9uU2VwYXJhdG9yc10ucmV2ZXJzZSgpLmZpbmQoKGEpID0+IGEuZGVzY3JpcHRvcj8uaWNvblBvc2l0aW9uICE9IG51bGwpPy5kZXNjcmlwdG9yXHJcbiAgICAgICAgPy5pY29uUG9zaXRpb24gPz8gSWNvblBvc2l0aW9uLlBSRTtcclxuXHJcbiAgICByZXR1cm4gYWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xyXG4gICAgICBpZiAoYWN0aW9uLmRlc2NyaXB0b3I/LnR5cGUgPT09IFVpQWN0aW9uQnV0dG9uVHlwZS5TRVBBUkFUT1IpIHtcclxuICAgICAgICByZXR1cm4gYWN0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBoYXNJY29uID0gISEoYWN0aW9uLmRlc2NyaXB0b3I/Lmljb24gfHwgYWN0aW9uLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uYWN0aW9uLFxyXG4gICAgICAgIGRlc2NyaXB0b3I6IGFjdGlvbi5kZXNjcmlwdG9yXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAuLi5hY3Rpb24uZGVzY3JpcHRvcixcclxuICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICAgIGljb25Qb3NpdGlvbjogYW55SGFzSWNvblxyXG4gICAgICAgICAgICAgICAgPyBoYXNJY29uXHJcbiAgICAgICAgICAgICAgICAgID8gKGFjdGlvbi5kZXNjcmlwdG9yLmljb25Qb3NpdGlvbiA/PyBsYXN0U2V0UG9zaXRpb24pXHJcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICA6IGFjdGlvbi5kZXNjcmlwdG9yLmljb25Qb3NpdGlvbixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiAoe1xyXG4gICAgICAgICAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgIH0gYXMgVWlBY3Rpb25EZXNjcmlwdG9yKSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGlzU3VibWVudSkge1xyXG4gIDxkaXYgY2xhc3M9XCJzdWJtZW51IGhvdmVyRWZmZWN0XCIgW2NsYXNzLmFjdGl2ZVN1Ym1lbnVdPVwiaXNPcGVuXCIgKG1vdXNlZW50ZXIpPVwib3Blbk1lbnUoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJUZW1wYWx0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPHNtYXJ0LWljb24gY2xhc3M9XCJzYjQtbWVudS1pbmRpY2F0b3JcIiBbaWNvbl09XCJpY29uXCIgY29sb3I9XCJibGFja1wiPjwvc21hcnQtaWNvbj5cclxuICA8L2Rpdj5cclxufSBAZWxzZSB7XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJUZW1wYWx0ZVwiPjwvbmctY29udGFpbmVyPlxyXG59XHJcblxyXG48bmctdGVtcGxhdGUgI21lbnVUZW1wbGF0ZT5cclxuICA8dWwgY2xhc3M9XCJ1aS10aWVyZWQtbWVudSBzYjQtbWVudS1wYW5lbFwiPlxyXG4gICAgPGxpXHJcbiAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygc3ViQWN0aW9uc1wiXHJcbiAgICAgIGNsYXNzPVwiaG92ZXJFZmZlY3RcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcclxuICAgICAgKG1vdXNlZW50ZXIpPVwiY2xvc2VTaWJsaW5nU3VibWVudXMoYWN0aW9uKVwiXHJcbiAgICA+XHJcbiAgICAgIEBpZiAoYWN0aW9uLnN1YkFjdGlvbnMgJiYgYWN0aW9uLnN1YkFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIDx1aS10aWVyZWQtbWVudVxyXG4gICAgICAgICAgI3N1Ym1lbnVcclxuICAgICAgICAgIFt0cmlnZ2VyQWN0aW9uXT1cImFjdGlvblwiXHJcbiAgICAgICAgICBbaXNTdWJtZW51XT1cInRydWVcIlxyXG4gICAgICAgICAgW3N1YkFjdGlvbnNdPVwiYWN0aW9uLnN1YkFjdGlvbnMhXCJcclxuICAgICAgICAgIFttZW51T3BlbkRpcmVjdGlvbl09XCJ0cmlnZ2VyQWN0aW9uLmRlc2NyaXB0b3I/Lm1lbnU/Lm9wZW5EaXJlY3Rpb25cIlxyXG4gICAgICAgICAgKGFjdGlvbkNsaWNrKT1cImFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAoc3VibWVudU9wZW5lZCk9XCJvblN1Ym1lbnVPcGVuZWQoc3VibWVudSlcIlxyXG4gICAgICAgID48L3VpLXRpZXJlZC1tZW51PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiYWN0aW9uLmRlc2NyaXB0b3IhXCJcclxuICAgICAgICAgIFtjb2RlXT1cImFjdGlvbi5jb2RlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhIWFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICBbaWNvblBsYWNlaG9sZGVyXT1cIlxyXG4gICAgICAgICAgICBhY3Rpb24uZGVzY3JpcHRvcj8uaWNvbiB8fCBhY3Rpb24uZGVzY3JpcHRvcj8uaWNvblJlc291cmNlXHJcbiAgICAgICAgICAgICAgPyB1bmRlZmluZWRcclxuICAgICAgICAgICAgICA6IGNvbXB1dGVkSWNvblBsYWNlaG9sZGVyXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIiFhY3Rpb24uc3ViQWN0aW9ucz8ubGVuZ3RoICYmIG9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiXHJcbiAgICAgICAgPjwvdWktYWN0aW9uLWJ1dHRvbj5cclxuICAgICAgICBAaWYgKGhhc1N1YkFjdGlvblNpYmxpbmdzKSB7XHJcbiAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICBjbGFzcz1cInNiNC1tZW51LXBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIiFhY3Rpb24uZGlzYWJsZWQgJiYgIWFjdGlvbi5zdWJBY3Rpb25zPy5sZW5ndGggJiYgb25BY3Rpb25DbGljayhhY3Rpb24pXCJcclxuICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICA8L2xpPlxyXG4gIDwvdWw+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RyaWdnZXJUZW1wYWx0ZT5cclxuICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgW2Rlc2NyaXB0b3JdPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yIVwiXHJcbiAgICBbY29kZV09XCJ0cmlnZ2VyQWN0aW9uLmNvZGVcIlxyXG4gICAgW2Rpc2FibGVkXT1cIiEhdHJpZ2dlckFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAoYWN0aW9uQ2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQuZXZlbnQpXCJcclxuICAgIFtjbGFzcy5zdWJtZW51VHJpZ2dlcl09XCJpc1N1Ym1lbnVcIlxyXG4gID5cclxuICA8L3VpLWFjdGlvbi1idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvbWVudS9jbGljay9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy9tZW51L2NsaWNrL21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsWUFBWSxHQUdiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsWUFBWSxFQUdaLGtCQUFrQixHQUVuQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7OztBQU8xRixNQUFNLE9BQU8sa0JBQWtCO0lBbUI3QixZQUNVLFdBQTBCLEVBQzFCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDUixPQUEwQjtRQUpoRSxnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUMxQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUNSLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBcEIxRSxlQUFVLEdBQXNCLElBQUksQ0FBQztRQUc1QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRzFCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUMzQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFFL0MsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdkMsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztRQUM5QyxlQUFVLEdBQWUsRUFBRSxDQUFDO1FBQ3BCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQVNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1FBQzlCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVc7YUFDYixjQUFjLEVBQUU7YUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxZQUF3QixDQUFDO1lBQ2xFLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxhQUF5QixDQUFDO1lBRTNFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7WUFFdEUsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDcEQsZUFBZSxFQUFFLFVBQVUsRUFDM0IsT0FBTyxFQUFFLFVBQVUsQ0FDcEIsQ0FBQztnQkFDRixJQUFJLG9CQUFvQixFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUMxQixhQUFxQyxFQUNyQyxhQUFxQztRQUVyQyxNQUFNLFNBQVMsR0FBRyxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUM3QyxNQUFNLFNBQVMsR0FBRyxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUU3QyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxhQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGFBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDdEQsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWdCO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUdELFdBQVcsQ0FBQyxLQUFZO1FBQ3RCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBR0QsZUFBZSxDQUFDLEtBQVk7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDekMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFekIsSUFBSSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBaUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsYUFBNEIsQ0FBQztRQUN4RCxJQUFJLFNBQVMsR0FBd0IsSUFBSSxDQUFDLFNBQVM7WUFDakQsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUM3QyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTFFLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQjthQUMvQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUM7YUFDbkMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO2FBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUM7YUFDZCxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNwQyxnQkFBZ0I7WUFDaEIsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFO1lBQzFELFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsWUFBc0I7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25FLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDTixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN6QyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMzRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUFDLFlBQXNCO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMxQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2RSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlPLG1CQUFtQixDQUFDLE9BQW1CO1FBQzdDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXpGLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQ2xDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxTQUFTLENBQzNELENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRS9GLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQ3RDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO1lBQ2xELENBQUMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQ2xELENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUN2QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztZQUNsRCxDQUFDLENBQUMsVUFBVSxFQUFFLFlBQVksS0FBSyxZQUFZLENBQUMsSUFBSSxDQUNuRCxDQUFDO1FBRUYsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFVBQVU7WUFDdkMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxjQUFjO2dCQUMvQixDQUFDLENBQUMscUJBQXFCLENBQUMsSUFBSTtnQkFDNUIsQ0FBQyxDQUFDLGNBQWM7b0JBQ2QsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLElBQUk7b0JBQzVCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHO1lBQy9CLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxNQUFNLGVBQWUsR0FDbkIsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLEVBQUUsVUFBVTtZQUN0RixFQUFFLFlBQVksSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBRXZDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzVCLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEtBQUssa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzdELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQy9FLE9BQU87Z0JBQ0wsR0FBRyxNQUFNO2dCQUNULFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtvQkFDM0IsQ0FBQyxDQUFDO3dCQUNFLEdBQUcsTUFBTSxDQUFDLFVBQVU7d0JBQ3BCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO3dCQUMvQixZQUFZLEVBQUUsVUFBVTs0QkFDdEIsQ0FBQyxDQUFDLE9BQU87Z0NBQ1AsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLElBQUksZUFBZSxDQUFDO2dDQUNyRCxDQUFDLENBQUMsU0FBUzs0QkFDYixDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZO3FCQUNuQztvQkFDSCxDQUFDLENBQUU7d0JBQ0MsSUFBSSxFQUFFLGtCQUFrQixDQUFDLE1BQU07cUJBQ1Q7YUFDN0IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0EzUVUsa0JBQWtCLDRJQXdCbkIsaUJBQWlCO21HQXhCaEIsa0JBQWtCLHNpQkMxQy9CLDR1RUE0REEsbXlFRGxCYSxrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCOzswQkE0QnZCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFBRyxRQUFRO3lDQXZCYixpQkFBaUI7c0JBQXpDLFlBQVk7dUJBQUMsU0FBUztnQkFFSSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBR2hCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQTZGUCxXQUFXO3NCQURWLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1qQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29ubmVjdGVkUG9zaXRpb24sXHJcbiAgT3ZlcmxheSxcclxuICBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxyXG4gIE92ZXJsYXlSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQge1xyXG4gIEljb25Qb3NpdGlvbixcclxuICBNZW51T3BlbkRpcmVjdGlvbixcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uL2FwaSc7XHJcbmltcG9ydCB7IFVpTWVudVNlcnZpY2UgfSBmcm9tICcuLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IGdldE1lbnVQb3NpdGlvbnMsIGdldFN1Ym1lbnVQb3NpdGlvbnMgfSBmcm9tICcuLi9tZW51LmNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEJ1dHRvbkljb25QbGFjZWhvbGRlciB9IGZyb20gJy4uLy4uLy4uL3VpLWFjdGlvbi1idXR0b24vYnV0dG9uLWljb24tcGxhY2Vob2xkZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS10aWVyZWQtbWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpY2tNZW51Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcbiAgQFZpZXdDaGlsZHJlbignc3VibWVudScpIHN1Ym1lbnVDb21wb25lbnRzITogUXVlcnlMaXN0PENsaWNrTWVudUNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVUZW1wbGF0ZScpIG1lbnVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB0cmlnZ2VyQWN0aW9uITogVWlBY3Rpb247XHJcbiAgQElucHV0KCkgaXNTdWJtZW51OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVudU9wZW5EaXJlY3Rpb24/OiBNZW51T3BlbkRpcmVjdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVaUFjdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgc3VibWVudU9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8VWlBY3Rpb24+KCk7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGljb24hOiBzdHJpbmc7XHJcbiAgc3VibWVudU9wZW5NYXAgPSBuZXcgTWFwPFVpQWN0aW9uLCBib29sZWFuPigpO1xyXG4gIHN1YkFjdGlvbnM6IFVpQWN0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIGhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IFVpTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlQb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29tcExpYj86IENvbXBvbmVudExpYnJhcnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbi1yaWdodCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5NQVRFUklBTCkge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbl9yaWdodCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudVNlcnZpY2VcclxuICAgICAgLmdldENsb3NlU2lnbmFsKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0cmlnZ2VyQWN0aW9uJ10pIHtcclxuICAgICAgY29uc3QgdHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5jdXJyZW50VmFsdWUgYXMgVWlBY3Rpb247XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzVHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5wcmV2aW91c1ZhbHVlIGFzIFVpQWN0aW9uO1xyXG5cclxuICAgICAgdGhpcy5zdWJBY3Rpb25zID0gdGhpcy5ub3JtYWxpemVTdWJBY3Rpb25zKHRyaWdnZXI/LnN1YkFjdGlvbnMgPz8gW10pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHByZXZpb3VzVHJpZ2dlcikge1xyXG4gICAgICAgIGNvbnN0IGhhc1N1YkFjdGlvbnNDaGFuZ2VkID0gdGhpcy5oYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgICAgICAgIHByZXZpb3VzVHJpZ2dlcj8uc3ViQWN0aW9ucyxcclxuICAgICAgICAgIHRyaWdnZXI/LnN1YkFjdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoYXNTdWJBY3Rpb25zQ2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoT3ZlcmxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgIG9sZFN1YkFjdGlvbnM6IFVpQWN0aW9uW10gfCB1bmRlZmluZWQsXHJcbiAgICBuZXdTdWJBY3Rpb25zOiBVaUFjdGlvbltdIHwgdW5kZWZpbmVkXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvbGRMZW5ndGggPSBvbGRTdWJBY3Rpb25zPy5sZW5ndGggPz8gMDtcclxuICAgIGNvbnN0IG5ld0xlbmd0aCA9IG5ld1N1YkFjdGlvbnM/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgIGlmIChvbGRMZW5ndGggIT09IG5ld0xlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2xkTGVuZ3RoID4gMCAmJiBuZXdMZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAob2xkU3ViQWN0aW9ucyFbaV0uY29kZSAhPT0gbmV3U3ViQWN0aW9ucyFbaV0uY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBVaUFjdGlvbikge1xyXG4gICAgaWYgKCFhY3Rpb24uZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGFjdGlvbik7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY2xvc2VBbGxNZW51cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uTWVudUNsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5vdmVybGF5UmVmO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VNZW51KCkge1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xyXG4gICAgICB0aGlzLmhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnN1Ym1lbnVDb21wb25lbnRzICYmIHRoaXMuc3VibWVudUNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgICBzdWJtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hPdmVybGF5KCkge1xyXG4gICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcclxuXHJcbiAgICBsZXQgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMubWVudVRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xyXG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG5cclxuICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvcGVuTWVudShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1N1Ym1lbnUpIHtcclxuICAgICAgdGhpcy5zdWJtZW51T3BlbmVkLmVtaXQodGhpcy50cmlnZ2VyQWN0aW9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY2xvc2VBbGxNZW51cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0cmlnZ2VyRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB2YXIgcG9zaXRpb25zOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gdGhpcy5pc1N1Ym1lbnVcclxuICAgICAgPyBnZXRTdWJtZW51UG9zaXRpb25zKHRoaXMubWVudU9wZW5EaXJlY3Rpb24pXHJcbiAgICAgIDogZ2V0TWVudVBvc2l0aW9ucyh0aGlzLnRyaWdnZXJBY3Rpb24/LmRlc2NyaXB0b3I/Lm1lbnU/Lm9wZW5EaXJlY3Rpb24pO1xyXG5cclxuICAgIGxldCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5UG9zaXRpb25CdWlsZGVyXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRyaWdnZXJFbGVtZW50KVxyXG4gICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcclxuICAgICAgLndpdGhQdXNoKHRydWUpXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKHBvc2l0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXHJcbiAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5tZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMub3Blbk1lbnUoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3VibWVudU9wZW5lZChvcGVuZWRBY3Rpb246IFVpQWN0aW9uKSB7XHJcbiAgICBpZiAoIXRoaXMuc3VibWVudUNvbXBvbmVudHMgfHwgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblN1Ym1lbnVPcGVuZWQob3BlbmVkQWN0aW9uKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBvcGVuZWRBY3Rpb24uY29kZSAmJiBzdWJtZW51Lm92ZXJsYXlSZWYpIHtcclxuICAgICAgICBzdWJtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlU2libGluZ1N1Ym1lbnVzKGV4Y2VwdEFjdGlvbjogVWlBY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHM/LmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBleGNlcHRBY3Rpb24uY29kZSAmJiBzdWJtZW51LmlzT3Blbikge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBjb21wdXRlZEljb25QbGFjZWhvbGRlcj86IEJ1dHRvbkljb25QbGFjZWhvbGRlcjtcclxuICBoYXNTdWJBY3Rpb25TaWJsaW5ncz86IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgbm9ybWFsaXplU3ViQWN0aW9ucyhhY3Rpb25zOiBVaUFjdGlvbltdKTogVWlBY3Rpb25bXSB7XHJcbiAgICB0aGlzLmhhc1N1YkFjdGlvblNpYmxpbmdzID0gYWN0aW9ucy5zb21lKChhKSA9PiBhLnN1YkFjdGlvbnMgJiYgYS5zdWJBY3Rpb25zLmxlbmd0aCA+IDApO1xyXG5cclxuICAgIGNvbnN0IG5vblNlcGFyYXRvcnMgPSBhY3Rpb25zLmZpbHRlcihcclxuICAgICAgKGEpID0+IGEuZGVzY3JpcHRvcj8udHlwZSAhPT0gVWlBY3Rpb25CdXR0b25UeXBlLlNFUEFSQVRPUlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBhbnlIYXNJY29uID0gbm9uU2VwYXJhdG9ycy5zb21lKChhKSA9PiBhLmRlc2NyaXB0b3I/Lmljb24gfHwgYS5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpO1xyXG5cclxuICAgIGNvbnN0IGFueUhhc1ByZUljb24gPSBub25TZXBhcmF0b3JzLnNvbWUoXHJcbiAgICAgIChhKSA9PlxyXG4gICAgICAgIChhLmRlc2NyaXB0b3I/Lmljb24gfHwgYS5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpICYmXHJcbiAgICAgICAgYS5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09IEljb25Qb3NpdGlvbi5QUkVcclxuICAgICk7XHJcbiAgICBjb25zdCBhbnlIYXNQb3N0SWNvbiA9IG5vblNlcGFyYXRvcnMuc29tZShcclxuICAgICAgKGEpID0+XHJcbiAgICAgICAgKGEuZGVzY3JpcHRvcj8uaWNvbiB8fCBhLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZSkgJiZcclxuICAgICAgICBhLmRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiA9PT0gSWNvblBvc2l0aW9uLlBPU1RcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb21wdXRlZEljb25QbGFjZWhvbGRlciA9IGFueUhhc0ljb25cclxuICAgICAgPyBhbnlIYXNQcmVJY29uICYmIGFueUhhc1Bvc3RJY29uXHJcbiAgICAgICAgPyBCdXR0b25JY29uUGxhY2Vob2xkZXIuQk9USFxyXG4gICAgICAgIDogYW55SGFzUG9zdEljb25cclxuICAgICAgICAgID8gQnV0dG9uSWNvblBsYWNlaG9sZGVyLlBPU1RcclxuICAgICAgICAgIDogQnV0dG9uSWNvblBsYWNlaG9sZGVyLlBSRVxyXG4gICAgICA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCBsYXN0U2V0UG9zaXRpb24gPVxyXG4gICAgICBbLi4ubm9uU2VwYXJhdG9yc10ucmV2ZXJzZSgpLmZpbmQoKGEpID0+IGEuZGVzY3JpcHRvcj8uaWNvblBvc2l0aW9uICE9IG51bGwpPy5kZXNjcmlwdG9yXHJcbiAgICAgICAgPy5pY29uUG9zaXRpb24gPz8gSWNvblBvc2l0aW9uLlBSRTtcclxuXHJcbiAgICByZXR1cm4gYWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xyXG4gICAgICBpZiAoYWN0aW9uLmRlc2NyaXB0b3I/LnR5cGUgPT09IFVpQWN0aW9uQnV0dG9uVHlwZS5TRVBBUkFUT1IpIHtcclxuICAgICAgICByZXR1cm4gYWN0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBoYXNJY29uID0gISEoYWN0aW9uLmRlc2NyaXB0b3I/Lmljb24gfHwgYWN0aW9uLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uYWN0aW9uLFxyXG4gICAgICAgIGRlc2NyaXB0b3I6IGFjdGlvbi5kZXNjcmlwdG9yXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAuLi5hY3Rpb24uZGVzY3JpcHRvcixcclxuICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICAgIGljb25Qb3NpdGlvbjogYW55SGFzSWNvblxyXG4gICAgICAgICAgICAgICAgPyBoYXNJY29uXHJcbiAgICAgICAgICAgICAgICAgID8gKGFjdGlvbi5kZXNjcmlwdG9yLmljb25Qb3NpdGlvbiA/PyBsYXN0U2V0UG9zaXRpb24pXHJcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICA6IGFjdGlvbi5kZXNjcmlwdG9yLmljb25Qb3NpdGlvbixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgOiAoe1xyXG4gICAgICAgICAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgIH0gYXMgVWlBY3Rpb25EZXNjcmlwdG9yKSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGlzU3VibWVudSkge1xyXG4gIDxkaXYgY2xhc3M9XCJzdWJtZW51IGhvdmVyRWZmZWN0XCIgW2NsYXNzLmFjdGl2ZVN1Ym1lbnVdPVwiaXNPcGVuXCIgKG1vdXNlZW50ZXIpPVwib3Blbk1lbnUoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJUZW1wYWx0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPHNtYXJ0LWljb24gY2xhc3M9XCJzYjQtbWVudS1pbmRpY2F0b3JcIiBbaWNvbl09XCJpY29uXCIgY29sb3I9XCJibGFja1wiPjwvc21hcnQtaWNvbj5cclxuICA8L2Rpdj5cclxufSBAZWxzZSB7XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJUZW1wYWx0ZVwiPjwvbmctY29udGFpbmVyPlxyXG59XHJcblxyXG48bmctdGVtcGxhdGUgI21lbnVUZW1wbGF0ZT5cclxuICA8dWwgY2xhc3M9XCJ1aS10aWVyZWQtbWVudSBzYjQtbWVudS1wYW5lbFwiPlxyXG4gICAgPGxpXHJcbiAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygc3ViQWN0aW9uc1wiXHJcbiAgICAgIGNsYXNzPVwiaG92ZXJFZmZlY3RcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcclxuICAgICAgKG1vdXNlZW50ZXIpPVwiY2xvc2VTaWJsaW5nU3VibWVudXMoYWN0aW9uKVwiXHJcbiAgICA+XHJcbiAgICAgIEBpZiAoYWN0aW9uLnN1YkFjdGlvbnMgJiYgYWN0aW9uLnN1YkFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIDx1aS10aWVyZWQtbWVudVxyXG4gICAgICAgICAgI3N1Ym1lbnVcclxuICAgICAgICAgIFt0cmlnZ2VyQWN0aW9uXT1cImFjdGlvblwiXHJcbiAgICAgICAgICBbaXNTdWJtZW51XT1cInRydWVcIlxyXG4gICAgICAgICAgW3N1YkFjdGlvbnNdPVwiYWN0aW9uLnN1YkFjdGlvbnMhXCJcclxuICAgICAgICAgIFttZW51T3BlbkRpcmVjdGlvbl09XCJ0cmlnZ2VyQWN0aW9uLmRlc2NyaXB0b3I/Lm1lbnU/Lm9wZW5EaXJlY3Rpb25cIlxyXG4gICAgICAgICAgKGFjdGlvbkNsaWNrKT1cImFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAoc3VibWVudU9wZW5lZCk9XCJvblN1Ym1lbnVPcGVuZWQoc3VibWVudSlcIlxyXG4gICAgICAgID48L3VpLXRpZXJlZC1tZW51PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiYWN0aW9uLmRlc2NyaXB0b3IhXCJcclxuICAgICAgICAgIFtjb2RlXT1cImFjdGlvbi5jb2RlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhIWFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICBbaWNvblBsYWNlaG9sZGVyXT1cIlxyXG4gICAgICAgICAgICBhY3Rpb24uZGVzY3JpcHRvcj8uaWNvbiB8fCBhY3Rpb24uZGVzY3JpcHRvcj8uaWNvblJlc291cmNlXHJcbiAgICAgICAgICAgICAgPyB1bmRlZmluZWRcclxuICAgICAgICAgICAgICA6IGNvbXB1dGVkSWNvblBsYWNlaG9sZGVyXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIiFhY3Rpb24uc3ViQWN0aW9ucz8ubGVuZ3RoICYmIG9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiXHJcbiAgICAgICAgPjwvdWktYWN0aW9uLWJ1dHRvbj5cclxuICAgICAgICBAaWYgKGhhc1N1YkFjdGlvblNpYmxpbmdzKSB7XHJcbiAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICBjbGFzcz1cInNiNC1tZW51LXBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIiFhY3Rpb24uZGlzYWJsZWQgJiYgIWFjdGlvbi5zdWJBY3Rpb25zPy5sZW5ndGggJiYgb25BY3Rpb25DbGljayhhY3Rpb24pXCJcclxuICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICA8L2xpPlxyXG4gIDwvdWw+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RyaWdnZXJUZW1wYWx0ZT5cclxuICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgW2Rlc2NyaXB0b3JdPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yIVwiXHJcbiAgICBbY29kZV09XCJ0cmlnZ2VyQWN0aW9uLmNvZGVcIlxyXG4gICAgW2Rpc2FibGVkXT1cIiEhdHJpZ2dlckFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAoYWN0aW9uQ2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQuZXZlbnQpXCJcclxuICAgIFtjbGFzcy5zdWJtZW51VHJpZ2dlcl09XCJpc1N1Ym1lbnVcIlxyXG4gID5cclxuICA8L3VpLWFjdGlvbi1idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -215,11 +215,11 @@ export class HoverMenuComponent {
215
215
  });
216
216
  }
217
217
  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 }); }
218
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: HoverMenuComponent, selector: "ui-hover-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-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 (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 [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 (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}ul,.ui-hover-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;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:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.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:hover,.hoverEffect:hover ::ng-deep button{background-color:#f1f5f9}\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", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: HoverMenuComponent, selector: "ui-hover-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection"], outputs: ["actionClick", "submenuOpened"] }] }); }
218
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: HoverMenuComponent, selector: "ui-hover-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-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 (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 [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 (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}ul,.ui-hover-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;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:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.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 button,.sb4-menu-panel .hoverEffect:hover ::ng-deep button{background-color:#f1f5f9!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}\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", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: HoverMenuComponent, selector: "ui-hover-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection"], outputs: ["actionClick", "submenuOpened"] }] }); }
219
219
  }
220
220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HoverMenuComponent, decorators: [{
221
221
  type: Component,
222
- 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 (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 [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 (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}ul,.ui-hover-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;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:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.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:hover,.hoverEffect:hover ::ng-deep button{background-color:#f1f5f9}\n"] }]
222
+ 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 (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 [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 (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}ul,.ui-hover-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;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:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.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 button,.sb4-menu-panel .hoverEffect:hover ::ng-deep button{background-color:#f1f5f9!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}\n"] }]
223
223
  }], ctorParameters: () => [{ type: i1.UiMenuService }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i2.OverlayPositionBuilder }, { type: i6.ComponentLibrary, decorators: [{
224
224
  type: Inject,
225
225
  args: [COMPONENT_LIBRARY]
@@ -248,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
248
248
  type: HostListener,
249
249
  args: ['document:click', ['$event']]
250
250
  }] } });
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvbWVudS9ob3Zlci9ob3Zlci1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy9tZW51L2hvdmVyL2hvdmVyLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsWUFBWSxHQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsWUFBWSxFQUdaLGtCQUFrQixHQUVuQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7OztBQU8xRixNQUFNLE9BQU8sa0JBQWtCO0lBbUI3QixZQUNVLFdBQTBCLEVBQzFCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDUixPQUEwQjtR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QUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkE2RlAsV0FBVztzQkFEVixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNakMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29ubmVjdGVkUG9zaXRpb24sXHJcbiAgT3ZlcmxheSxcclxuICBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxyXG4gIE92ZXJsYXlSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQge1xyXG4gIEljb25Qb3NpdGlvbixcclxuICBNZW51T3BlbkRpcmVjdGlvbixcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uL2FwaSc7XHJcbmltcG9ydCB7IFVpTWVudVNlcnZpY2UgfSBmcm9tICcuLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IGdldE1lbnVQb3NpdGlvbnMsIGdldFN1Ym1lbnVQb3NpdGlvbnMgfSBmcm9tICcuLi9tZW51LmNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEJ1dHRvbkljb25QbGFjZWhvbGRlciB9IGZyb20gJy4uLy4uLy4uL3VpLWFjdGlvbi1idXR0b24vYnV0dG9uLWljb24tcGxhY2Vob2xkZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1ob3Zlci1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG92ZXItbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2hvdmVyLW1lbnUuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb3Zlck1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZHJlbignc3VibWVudScpIHN1Ym1lbnVDb21wb25lbnRzITogUXVlcnlMaXN0PEhvdmVyTWVudUNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVUZW1wbGF0ZScpIG1lbnVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB0cmlnZ2VyQWN0aW9uITogVWlBY3Rpb247XHJcbiAgQElucHV0KCkgaXNTdWJtZW51OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVudU9wZW5EaXJlY3Rpb24/OiBNZW51T3BlbkRpcmVjdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVaUFjdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgc3VibWVudU9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8VWlBY3Rpb24+KCk7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGljb24hOiBzdHJpbmc7XHJcbiAgc3VibWVudU9wZW5NYXAgPSBuZXcgTWFwPFVpQWN0aW9uLCBib29sZWFuPigpO1xyXG4gIHN1YkFjdGlvbnM6IFVpQWN0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIGhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IFVpTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlQb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29tcExpYj86IENvbXBvbmVudExpYnJhcnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbi1yaWdodCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5NQVRFUklBTCkge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbl9yaWdodCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudVNlcnZpY2VcclxuICAgICAgLmdldENsb3NlU2lnbmFsKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0cmlnZ2VyQWN0aW9uJ10pIHtcclxuICAgICAgY29uc3QgdHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5jdXJyZW50VmFsdWUgYXMgVWlBY3Rpb247XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzVHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5wcmV2aW91c1ZhbHVlIGFzIFVpQWN0aW9uO1xyXG5cclxuICAgICAgdGhpcy5zdWJBY3Rpb25zID0gdGhpcy5ub3JtYWxpemVTdWJBY3Rpb25zKHRyaWdnZXI/LnN1YkFjdGlvbnMgPz8gW10pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHByZXZpb3VzVHJpZ2dlcikge1xyXG4gICAgICAgIGNvbnN0IGhhc1N1YkFjdGlvbnNDaGFuZ2VkID0gdGhpcy5oYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgICAgICAgIHByZXZpb3VzVHJpZ2dlcj8uc3ViQWN0aW9ucyxcclxuICAgICAgICAgIHRyaWdnZXI/LnN1YkFjdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoYXNTdWJBY3Rpb25zQ2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoT3ZlcmxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgIG9sZFN1YkFjdGlvbnM6IFVpQWN0aW9uW10gfCB1bmRlZmluZWQsXHJcbiAgICBuZXdTdWJBY3Rpb25zOiBVaUFjdGlvbltdIHwgdW5kZWZpbmVkXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvbGRMZW5ndGggPSBvbGRTdWJBY3Rpb25zPy5sZW5ndGggPz8gMDtcclxuICAgIGNvbnN0IG5ld0xlbmd0aCA9IG5ld1N1YkFjdGlvbnM/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgIGlmIChvbGRMZW5ndGggIT09IG5ld0xlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2xkTGVuZ3RoID4gMCAmJiBuZXdMZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAob2xkU3ViQWN0aW9ucyFbaV0uY29kZSAhPT0gbmV3U3ViQWN0aW9ucyFbaV0uY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBVaUFjdGlvbikge1xyXG4gICAgaWYgKCFhY3Rpb24uZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGFjdGlvbik7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY2xvc2VBbGxNZW51cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uTWVudUNsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5vdmVybGF5UmVmO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VNZW51KCkge1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xyXG4gICAgICB0aGlzLmhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnN1Ym1lbnVDb21wb25lbnRzICYmIHRoaXMuc3VibWVudUNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgICBzdWJtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hPdmVybGF5KCkge1xyXG4gICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcclxuXHJcbiAgICBsZXQgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMubWVudVRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xyXG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG5cclxuICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvcGVuTWVudShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1N1Ym1lbnUpIHtcclxuICAgICAgdGhpcy5zdWJtZW51T3BlbmVkLmVtaXQodGhpcy50cmlnZ2VyQWN0aW9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY2xvc2VBbGxNZW51cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0cmlnZ2VyRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB2YXIgcG9zaXRpb25zOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gdGhpcy5pc1N1Ym1lbnVcclxuICAgICAgPyBnZXRTdWJtZW51UG9zaXRpb25zKHRoaXMubWVudU9wZW5EaXJlY3Rpb24pXHJcbiAgICAgIDogZ2V0TWVudVBvc2l0aW9ucyh0aGlzLnRyaWdnZXJBY3Rpb24/LmRlc2NyaXB0b3I/Lm1lbnU/Lm9wZW5EaXJlY3Rpb24pO1xyXG5cclxuICAgIGxldCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5UG9zaXRpb25CdWlsZGVyXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRyaWdnZXJFbGVtZW50KVxyXG4gICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcclxuICAgICAgLndpdGhQdXNoKHRydWUpXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKHBvc2l0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXHJcbiAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5tZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMub3Blbk1lbnUoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3VibWVudU9wZW5lZChvcGVuZWRBY3Rpb246IFVpQWN0aW9uKSB7XHJcbiAgICBpZiAoIXRoaXMuc3VibWVudUNvbXBvbmVudHMgfHwgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblN1Ym1lbnVPcGVuZWQob3BlbmVkQWN0aW9uKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBvcGVuZWRBY3Rpb24uY29kZSAmJiBzdWJtZW51Lm92ZXJsYXlSZWYpIHtcclxuICAgICAgICBzdWJtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlU2libGluZ1N1Ym1lbnVzKGV4Y2VwdEFjdGlvbjogVWlBY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHM/LmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBleGNlcHRBY3Rpb24uY29kZSAmJiBzdWJtZW51LmlzT3Blbikge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZWRJY29uUGxhY2Vob2xkZXI/OiBCdXR0b25JY29uUGxhY2Vob2xkZXI7XHJcbiAgaGFzU3ViQWN0aW9uU2libGluZ3M/OiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIG5vcm1hbGl6ZVN1YkFjdGlvbnMoYWN0aW9uczogVWlBY3Rpb25bXSk6IFVpQWN0aW9uW10ge1xyXG4gICAgdGhpcy5oYXNTdWJBY3Rpb25TaWJsaW5ncyA9IGFjdGlvbnMuc29tZSgoYSkgPT4gYS5zdWJBY3Rpb25zICYmIGEuc3ViQWN0aW9ucy5sZW5ndGggPiAwKTtcclxuXHJcbiAgICBjb25zdCBub25TZXBhcmF0b3JzID0gYWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgIChhKSA9PiBhLmRlc2NyaXB0b3I/LnR5cGUgIT09IFVpQWN0aW9uQnV0dG9uVHlwZS5TRVBBUkFUT1JcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYW55SGFzSWNvbiA9IG5vblNlcGFyYXRvcnMuc29tZSgoYSkgPT4gYS5kZXNjcmlwdG9yPy5pY29uIHx8IGEuZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKTtcclxuXHJcbiAgICBjb25zdCBhbnlIYXNQcmVJY29uID0gbm9uU2VwYXJhdG9ycy5zb21lKFxyXG4gICAgICAoYSkgPT5cclxuICAgICAgICAoYS5kZXNjcmlwdG9yPy5pY29uIHx8IGEuZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKSAmJlxyXG4gICAgICAgIGEuZGVzY3JpcHRvcj8uaWNvblBvc2l0aW9uID09PSBJY29uUG9zaXRpb24uUFJFXHJcbiAgICApO1xyXG4gICAgY29uc3QgYW55SGFzUG9zdEljb24gPSBub25TZXBhcmF0b3JzLnNvbWUoXHJcbiAgICAgIChhKSA9PlxyXG4gICAgICAgIChhLmRlc2NyaXB0b3I/Lmljb24gfHwgYS5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpICYmXHJcbiAgICAgICAgYS5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09IEljb25Qb3NpdGlvbi5QT1NUXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29tcHV0ZWRJY29uUGxhY2Vob2xkZXIgPSBhbnlIYXNJY29uXHJcbiAgICAgID8gYW55SGFzUHJlSWNvbiAmJiBhbnlIYXNQb3N0SWNvblxyXG4gICAgICAgID8gQnV0dG9uSWNvblBsYWNlaG9sZGVyLkJPVEhcclxuICAgICAgICA6IGFueUhhc1Bvc3RJY29uXHJcbiAgICAgICAgICA/IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QT1NUXHJcbiAgICAgICAgICA6IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QUkVcclxuICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3QgbGFzdFNldFBvc2l0aW9uID1cclxuICAgICAgWy4uLm5vblNlcGFyYXRvcnNdLnJldmVyc2UoKS5maW5kKChhKSA9PiBhLmRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiAhPSBudWxsKT8uZGVzY3JpcHRvclxyXG4gICAgICAgID8uaWNvblBvc2l0aW9uID8/IEljb25Qb3NpdGlvbi5QUkU7XHJcblxyXG4gICAgcmV0dXJuIGFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcclxuICAgICAgaWYgKGFjdGlvbi5kZXNjcmlwdG9yPy50eXBlID09PSBVaUFjdGlvbkJ1dHRvblR5cGUuU0VQQVJBVE9SKSB7XHJcbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaGFzSWNvbiA9ICEhKGFjdGlvbi5kZXNjcmlwdG9yPy5pY29uIHx8IGFjdGlvbi5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmFjdGlvbixcclxuICAgICAgICBkZXNjcmlwdG9yOiBhY3Rpb24uZGVzY3JpcHRvclxyXG4gICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgLi4uYWN0aW9uLmRlc2NyaXB0b3IsXHJcbiAgICAgICAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgICBpY29uUG9zaXRpb246IGFueUhhc0ljb25cclxuICAgICAgICAgICAgICAgID8gaGFzSWNvblxyXG4gICAgICAgICAgICAgICAgICA/IChhY3Rpb24uZGVzY3JpcHRvci5pY29uUG9zaXRpb24gPz8gbGFzdFNldFBvc2l0aW9uKVxyXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgOiBhY3Rpb24uZGVzY3JpcHRvci5pY29uUG9zaXRpb24sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDogKHtcclxuICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICB9IGFzIFVpQWN0aW9uRGVzY3JpcHRvciksXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChpc1N1Ym1lbnUpIHtcclxuICA8ZGl2IGNsYXNzPVwic3VibWVudSBob3ZlckVmZmVjdFwiIFtjbGFzcy5hY3RpdmVTdWJtZW51XT1cImlzT3BlblwiIChtb3VzZWVudGVyKT1cIm9wZW5NZW51KCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmlnZ2VyVGVtcGFsdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxzbWFydC1pY29uIGNsYXNzPVwic2I0LW1lbnUtaW5kaWNhdG9yXCIgW2ljb25dPVwiaWNvblwiIGNvbG9yPVwiYmxhY2tcIj48L3NtYXJ0LWljb24+XHJcbiAgPC9kaXY+XHJcbn0gQGVsc2Uge1xyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmlnZ2VyVGVtcGFsdGVcIj48L25nLWNvbnRhaW5lcj5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNtZW51VGVtcGxhdGU+XHJcbiAgPHVsIGNsYXNzPVwidWktaG92ZXItbWVudSBzYjQtbWVudS1wYW5lbFwiPlxyXG4gICAgPGxpXHJcbiAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygc3ViQWN0aW9uc1wiXHJcbiAgICAgIGNsYXNzPVwiaG92ZXJFZmZlY3RcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcclxuICAgICAgKG1vdXNlZW50ZXIpPVwiY2xvc2VTaWJsaW5nU3VibWVudXMoYWN0aW9uKVwiXHJcbiAgICA+XHJcbiAgICAgIEBpZiAoYWN0aW9uLnN1YkFjdGlvbnMgJiYgYWN0aW9uLnN1YkFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIDx1aS1ob3Zlci1tZW51XHJcbiAgICAgICAgICAjc3VibWVudVxyXG4gICAgICAgICAgW3RyaWdnZXJBY3Rpb25dPVwiYWN0aW9uXCJcclxuICAgICAgICAgIFtpc1N1Ym1lbnVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbc3ViQWN0aW9uc109XCJhY3Rpb24uc3ViQWN0aW9ucyFcIlxyXG4gICAgICAgICAgW21lbnVPcGVuRGlyZWN0aW9uXT1cInRyaWdnZXJBY3Rpb24uZGVzY3JpcHRvcj8ubWVudT8ub3BlbkRpcmVjdGlvblwiXHJcbiAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwiYWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgIChzdWJtZW51T3BlbmVkKT1cIm9uU3VibWVudU9wZW5lZChzdWJtZW51KVwiXHJcbiAgICAgICAgPjwvdWktaG92ZXItbWVudT5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImFjdGlvbi5kZXNjcmlwdG9yIVwiXHJcbiAgICAgICAgICBbY29kZV09XCJhY3Rpb24uY29kZVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiISFhY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgW2ljb25QbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICAgYWN0aW9uLmRlc2NyaXB0b3I/Lmljb24gfHwgYWN0aW9uLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZVxyXG4gICAgICAgICAgICAgID8gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgOiBjb21wdXRlZEljb25QbGFjZWhvbGRlclxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChhY3Rpb25DbGljayk9XCIhYWN0aW9uLnN1YkFjdGlvbnM/Lmxlbmd0aCAmJiBvbkFjdGlvbkNsaWNrKGFjdGlvbilcIlxyXG4gICAgICAgID48L3VpLWFjdGlvbi1idXR0b24+XHJcbiAgICAgICAgQGlmIChoYXNTdWJBY3Rpb25TaWJsaW5ncykge1xyXG4gICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgY2xhc3M9XCJzYjQtbWVudS1wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIhYWN0aW9uLmRpc2FibGVkICYmICFhY3Rpb24uc3ViQWN0aW9ucz8ubGVuZ3RoICYmIG9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiXHJcbiAgICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgPC9saT5cclxuICA8L3VsPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0cmlnZ2VyVGVtcGFsdGU+XHJcbiAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgIFtkZXNjcmlwdG9yXT1cInRyaWdnZXJBY3Rpb24uZGVzY3JpcHRvciFcIlxyXG4gICAgW2NvZGVdPVwidHJpZ2dlckFjdGlvbi5jb2RlXCJcclxuICAgIFtkaXNhYmxlZF09XCIhIXRyaWdnZXJBY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgKG1vdXNlZW50ZXIpPVwib3Blbk1lbnUoJGV2ZW50KVwiXHJcbiAgICAoYWN0aW9uQ2xpY2spPVwib25BY3Rpb25DbGljayh0cmlnZ2VyQWN0aW9uKVwiXHJcbiAgICBbY2xhc3Muc3VibWVudVRyaWdnZXJdPVwiaXNTdWJtZW51XCJcclxuICA+XHJcbiAgPC91aS1hY3Rpb24tYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvbWVudS9ob3Zlci9ob3Zlci1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy9tZW51L2hvdmVyL2hvdmVyLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsWUFBWSxHQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsWUFBWSxFQUdaLGtCQUFrQixHQUVuQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7OztBQU8xRixNQUFNLE9BQU8sa0JBQWtCO0lBbUI3QixZQUNVLFdBQTBCLEVBQzFCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDUixPQUEwQjtR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QUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkE2RlAsV0FBVztzQkFEVixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNakMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29ubmVjdGVkUG9zaXRpb24sXHJcbiAgT3ZlcmxheSxcclxuICBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxyXG4gIE92ZXJsYXlSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQge1xyXG4gIEljb25Qb3NpdGlvbixcclxuICBNZW51T3BlbkRpcmVjdGlvbixcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uL2FwaSc7XHJcbmltcG9ydCB7IFVpTWVudVNlcnZpY2UgfSBmcm9tICcuLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IGdldE1lbnVQb3NpdGlvbnMsIGdldFN1Ym1lbnVQb3NpdGlvbnMgfSBmcm9tICcuLi9tZW51LmNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEJ1dHRvbkljb25QbGFjZWhvbGRlciB9IGZyb20gJy4uLy4uLy4uL3VpLWFjdGlvbi1idXR0b24vYnV0dG9uLWljb24tcGxhY2Vob2xkZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1ob3Zlci1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG92ZXItbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2hvdmVyLW1lbnUuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb3Zlck1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZHJlbignc3VibWVudScpIHN1Ym1lbnVDb21wb25lbnRzITogUXVlcnlMaXN0PEhvdmVyTWVudUNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVUZW1wbGF0ZScpIG1lbnVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB0cmlnZ2VyQWN0aW9uITogVWlBY3Rpb247XHJcbiAgQElucHV0KCkgaXNTdWJtZW51OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVudU9wZW5EaXJlY3Rpb24/OiBNZW51T3BlbkRpcmVjdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVaUFjdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgc3VibWVudU9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8VWlBY3Rpb24+KCk7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGljb24hOiBzdHJpbmc7XHJcbiAgc3VibWVudU9wZW5NYXAgPSBuZXcgTWFwPFVpQWN0aW9uLCBib29sZWFuPigpO1xyXG4gIHN1YkFjdGlvbnM6IFVpQWN0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIGhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IFVpTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlQb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29tcExpYj86IENvbXBvbmVudExpYnJhcnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbi1yaWdodCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5NQVRFUklBTCkge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbl9yaWdodCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudVNlcnZpY2VcclxuICAgICAgLmdldENsb3NlU2lnbmFsKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0cmlnZ2VyQWN0aW9uJ10pIHtcclxuICAgICAgY29uc3QgdHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5jdXJyZW50VmFsdWUgYXMgVWlBY3Rpb247XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzVHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5wcmV2aW91c1ZhbHVlIGFzIFVpQWN0aW9uO1xyXG5cclxuICAgICAgdGhpcy5zdWJBY3Rpb25zID0gdGhpcy5ub3JtYWxpemVTdWJBY3Rpb25zKHRyaWdnZXI/LnN1YkFjdGlvbnMgPz8gW10pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHByZXZpb3VzVHJpZ2dlcikge1xyXG4gICAgICAgIGNvbnN0IGhhc1N1YkFjdGlvbnNDaGFuZ2VkID0gdGhpcy5oYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgICAgICAgIHByZXZpb3VzVHJpZ2dlcj8uc3ViQWN0aW9ucyxcclxuICAgICAgICAgIHRyaWdnZXI/LnN1YkFjdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoYXNTdWJBY3Rpb25zQ2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoT3ZlcmxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNTdWJBY3Rpb25zQ2hhbmdlZChcclxuICAgIG9sZFN1YkFjdGlvbnM6IFVpQWN0aW9uW10gfCB1bmRlZmluZWQsXHJcbiAgICBuZXdTdWJBY3Rpb25zOiBVaUFjdGlvbltdIHwgdW5kZWZpbmVkXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvbGRMZW5ndGggPSBvbGRTdWJBY3Rpb25zPy5sZW5ndGggPz8gMDtcclxuICAgIGNvbnN0IG5ld0xlbmd0aCA9IG5ld1N1YkFjdGlvbnM/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgIGlmIChvbGRMZW5ndGggIT09IG5ld0xlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob2xkTGVuZ3RoID4gMCAmJiBuZXdMZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAob2xkU3ViQWN0aW9ucyFbaV0uY29kZSAhPT0gbmV3U3ViQWN0aW9ucyFbaV0uY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBVaUFjdGlvbikge1xyXG4gICAgaWYgKCFhY3Rpb24uZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KGFjdGlvbik7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY2xvc2VBbGxNZW51cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uTWVudUNsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5vdmVybGF5UmVmO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VNZW51KCkge1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xyXG4gICAgICB0aGlzLmhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnN1Ym1lbnVDb21wb25lbnRzICYmIHRoaXMuc3VibWVudUNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgICBzdWJtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hPdmVybGF5KCkge1xyXG4gICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcclxuXHJcbiAgICBsZXQgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMubWVudVRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xyXG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG5cclxuICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvcGVuTWVudShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1N1Ym1lbnUpIHtcclxuICAgICAgdGhpcy5zdWJtZW51T3BlbmVkLmVtaXQodGhpcy50cmlnZ2VyQWN0aW9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY2xvc2VBbGxNZW51cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0cmlnZ2VyRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB2YXIgcG9zaXRpb25zOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gdGhpcy5pc1N1Ym1lbnVcclxuICAgICAgPyBnZXRTdWJtZW51UG9zaXRpb25zKHRoaXMubWVudU9wZW5EaXJlY3Rpb24pXHJcbiAgICAgIDogZ2V0TWVudVBvc2l0aW9ucyh0aGlzLnRyaWdnZXJBY3Rpb24/LmRlc2NyaXB0b3I/Lm1lbnU/Lm9wZW5EaXJlY3Rpb24pO1xyXG5cclxuICAgIGxldCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5UG9zaXRpb25CdWlsZGVyXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRyaWdnZXJFbGVtZW50KVxyXG4gICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcclxuICAgICAgLndpdGhQdXNoKHRydWUpXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKHBvc2l0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXHJcbiAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5tZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVNZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMub3Blbk1lbnUoZXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3VibWVudU9wZW5lZChvcGVuZWRBY3Rpb246IFVpQWN0aW9uKSB7XHJcbiAgICBpZiAoIXRoaXMuc3VibWVudUNvbXBvbmVudHMgfHwgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblN1Ym1lbnVPcGVuZWQob3BlbmVkQWN0aW9uKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBvcGVuZWRBY3Rpb24uY29kZSAmJiBzdWJtZW51Lm92ZXJsYXlSZWYpIHtcclxuICAgICAgICBzdWJtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlU2libGluZ1N1Ym1lbnVzKGV4Y2VwdEFjdGlvbjogVWlBY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHM/LmZvckVhY2goKHN1Ym1lbnUpID0+IHtcclxuICAgICAgaWYgKHN1Ym1lbnUudHJpZ2dlckFjdGlvbi5jb2RlICE9PSBleGNlcHRBY3Rpb24uY29kZSAmJiBzdWJtZW51LmlzT3Blbikge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZWRJY29uUGxhY2Vob2xkZXI/OiBCdXR0b25JY29uUGxhY2Vob2xkZXI7XHJcbiAgaGFzU3ViQWN0aW9uU2libGluZ3M/OiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIG5vcm1hbGl6ZVN1YkFjdGlvbnMoYWN0aW9uczogVWlBY3Rpb25bXSk6IFVpQWN0aW9uW10ge1xyXG4gICAgdGhpcy5oYXNTdWJBY3Rpb25TaWJsaW5ncyA9IGFjdGlvbnMuc29tZSgoYSkgPT4gYS5zdWJBY3Rpb25zICYmIGEuc3ViQWN0aW9ucy5sZW5ndGggPiAwKTtcclxuXHJcbiAgICBjb25zdCBub25TZXBhcmF0b3JzID0gYWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgIChhKSA9PiBhLmRlc2NyaXB0b3I/LnR5cGUgIT09IFVpQWN0aW9uQnV0dG9uVHlwZS5TRVBBUkFUT1JcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYW55SGFzSWNvbiA9IG5vblNlcGFyYXRvcnMuc29tZSgoYSkgPT4gYS5kZXNjcmlwdG9yPy5pY29uIHx8IGEuZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKTtcclxuXHJcbiAgICBjb25zdCBhbnlIYXNQcmVJY29uID0gbm9uU2VwYXJhdG9ycy5zb21lKFxyXG4gICAgICAoYSkgPT5cclxuICAgICAgICAoYS5kZXNjcmlwdG9yPy5pY29uIHx8IGEuZGVzY3JpcHRvcj8uaWNvblJlc291cmNlKSAmJlxyXG4gICAgICAgIGEuZGVzY3JpcHRvcj8uaWNvblBvc2l0aW9uID09PSBJY29uUG9zaXRpb24uUFJFXHJcbiAgICApO1xyXG4gICAgY29uc3QgYW55SGFzUG9zdEljb24gPSBub25TZXBhcmF0b3JzLnNvbWUoXHJcbiAgICAgIChhKSA9PlxyXG4gICAgICAgIChhLmRlc2NyaXB0b3I/Lmljb24gfHwgYS5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpICYmXHJcbiAgICAgICAgYS5kZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09IEljb25Qb3NpdGlvbi5QT1NUXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29tcHV0ZWRJY29uUGxhY2Vob2xkZXIgPSBhbnlIYXNJY29uXHJcbiAgICAgID8gYW55SGFzUHJlSWNvbiAmJiBhbnlIYXNQb3N0SWNvblxyXG4gICAgICAgID8gQnV0dG9uSWNvblBsYWNlaG9sZGVyLkJPVEhcclxuICAgICAgICA6IGFueUhhc1Bvc3RJY29uXHJcbiAgICAgICAgICA/IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QT1NUXHJcbiAgICAgICAgICA6IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QUkVcclxuICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3QgbGFzdFNldFBvc2l0aW9uID1cclxuICAgICAgWy4uLm5vblNlcGFyYXRvcnNdLnJldmVyc2UoKS5maW5kKChhKSA9PiBhLmRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiAhPSBudWxsKT8uZGVzY3JpcHRvclxyXG4gICAgICAgID8uaWNvblBvc2l0aW9uID8/IEljb25Qb3NpdGlvbi5QUkU7XHJcblxyXG4gICAgcmV0dXJuIGFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcclxuICAgICAgaWYgKGFjdGlvbi5kZXNjcmlwdG9yPy50eXBlID09PSBVaUFjdGlvbkJ1dHRvblR5cGUuU0VQQVJBVE9SKSB7XHJcbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaGFzSWNvbiA9ICEhKGFjdGlvbi5kZXNjcmlwdG9yPy5pY29uIHx8IGFjdGlvbi5kZXNjcmlwdG9yPy5pY29uUmVzb3VyY2UpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmFjdGlvbixcclxuICAgICAgICBkZXNjcmlwdG9yOiBhY3Rpb24uZGVzY3JpcHRvclxyXG4gICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgLi4uYWN0aW9uLmRlc2NyaXB0b3IsXHJcbiAgICAgICAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgICBpY29uUG9zaXRpb246IGFueUhhc0ljb25cclxuICAgICAgICAgICAgICAgID8gaGFzSWNvblxyXG4gICAgICAgICAgICAgICAgICA/IChhY3Rpb24uZGVzY3JpcHRvci5pY29uUG9zaXRpb24gPz8gbGFzdFNldFBvc2l0aW9uKVxyXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgOiBhY3Rpb24uZGVzY3JpcHRvci5pY29uUG9zaXRpb24sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDogKHtcclxuICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICB9IGFzIFVpQWN0aW9uRGVzY3JpcHRvciksXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChpc1N1Ym1lbnUpIHtcclxuICA8ZGl2IGNsYXNzPVwic3VibWVudSBob3ZlckVmZmVjdFwiIFtjbGFzcy5hY3RpdmVTdWJtZW51XT1cImlzT3BlblwiIChtb3VzZWVudGVyKT1cIm9wZW5NZW51KCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmlnZ2VyVGVtcGFsdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxzbWFydC1pY29uIGNsYXNzPVwic2I0LW1lbnUtaW5kaWNhdG9yXCIgW2ljb25dPVwiaWNvblwiIGNvbG9yPVwiYmxhY2tcIj48L3NtYXJ0LWljb24+XHJcbiAgPC9kaXY+XHJcbn0gQGVsc2Uge1xyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmlnZ2VyVGVtcGFsdGVcIj48L25nLWNvbnRhaW5lcj5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNtZW51VGVtcGxhdGU+XHJcbiAgPHVsIGNsYXNzPVwidWktaG92ZXItbWVudSBzYjQtbWVudS1wYW5lbFwiPlxyXG4gICAgPGxpXHJcbiAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygc3ViQWN0aW9uc1wiXHJcbiAgICAgIGNsYXNzPVwiaG92ZXJFZmZlY3RcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcclxuICAgICAgKG1vdXNlZW50ZXIpPVwiY2xvc2VTaWJsaW5nU3VibWVudXMoYWN0aW9uKVwiXHJcbiAgICA+XHJcbiAgICAgIEBpZiAoYWN0aW9uLnN1YkFjdGlvbnMgJiYgYWN0aW9uLnN1YkFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIDx1aS1ob3Zlci1tZW51XHJcbiAgICAgICAgICAjc3VibWVudVxyXG4gICAgICAgICAgW3RyaWdnZXJBY3Rpb25dPVwiYWN0aW9uXCJcclxuICAgICAgICAgIFtpc1N1Ym1lbnVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbc3ViQWN0aW9uc109XCJhY3Rpb24uc3ViQWN0aW9ucyFcIlxyXG4gICAgICAgICAgW21lbnVPcGVuRGlyZWN0aW9uXT1cInRyaWdnZXJBY3Rpb24uZGVzY3JpcHRvcj8ubWVudT8ub3BlbkRpcmVjdGlvblwiXHJcbiAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwiYWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgIChzdWJtZW51T3BlbmVkKT1cIm9uU3VibWVudU9wZW5lZChzdWJtZW51KVwiXHJcbiAgICAgICAgPjwvdWktaG92ZXItbWVudT5cclxuICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImFjdGlvbi5kZXNjcmlwdG9yIVwiXHJcbiAgICAgICAgICBbY29kZV09XCJhY3Rpb24uY29kZVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiISFhY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgW2ljb25QbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICAgYWN0aW9uLmRlc2NyaXB0b3I/Lmljb24gfHwgYWN0aW9uLmRlc2NyaXB0b3I/Lmljb25SZXNvdXJjZVxyXG4gICAgICAgICAgICAgID8gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgOiBjb21wdXRlZEljb25QbGFjZWhvbGRlclxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChhY3Rpb25DbGljayk9XCIhYWN0aW9uLnN1YkFjdGlvbnM/Lmxlbmd0aCAmJiBvbkFjdGlvbkNsaWNrKGFjdGlvbilcIlxyXG4gICAgICAgID48L3VpLWFjdGlvbi1idXR0b24+XHJcbiAgICAgICAgQGlmIChoYXNTdWJBY3Rpb25TaWJsaW5ncykge1xyXG4gICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgY2xhc3M9XCJzYjQtbWVudS1wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIhYWN0aW9uLmRpc2FibGVkICYmICFhY3Rpb24uc3ViQWN0aW9ucz8ubGVuZ3RoICYmIG9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiXHJcbiAgICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgPC9saT5cclxuICA8L3VsPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0cmlnZ2VyVGVtcGFsdGU+XHJcbiAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgIFtkZXNjcmlwdG9yXT1cInRyaWdnZXJBY3Rpb24uZGVzY3JpcHRvciFcIlxyXG4gICAgW2NvZGVdPVwidHJpZ2dlckFjdGlvbi5jb2RlXCJcclxuICAgIFtkaXNhYmxlZF09XCIhIXRyaWdnZXJBY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgKG1vdXNlZW50ZXIpPVwib3Blbk1lbnUoJGV2ZW50KVwiXHJcbiAgICAoYWN0aW9uQ2xpY2spPVwib25BY3Rpb25DbGljayh0cmlnZ2VyQWN0aW9uKVwiXHJcbiAgICBbY2xhc3Muc3VibWVudVRyaWdnZXJdPVwiaXNTdWJtZW51XCJcclxuICA+XHJcbiAgPC91aS1hY3Rpb24tYnV0dG9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -209,26 +209,29 @@ export class UiActionButtonComponent {
209
209
  this.iconPlaceholder === ButtonIconPlaceholder.BOTH);
210
210
  }
211
211
  getJustifyContent() {
212
+ if (!this.iconPlaceholder) {
213
+ return null;
214
+ }
212
215
  if (this.iconPlaceholder === ButtonIconPlaceholder.BOTH) {
213
216
  return 'center';
214
217
  }
215
- if (this.iconPlaceholder === ButtonIconPlaceholder.PRE || this.renderPre()) {
218
+ if (this.iconPlaceholder === ButtonIconPlaceholder.PRE) {
216
219
  return 'flex-start';
217
220
  }
218
- if (this.iconPlaceholder === ButtonIconPlaceholder.POST || this.renderPost()) {
221
+ if (this.iconPlaceholder === ButtonIconPlaceholder.POST) {
219
222
  return 'flex-end';
220
223
  }
221
- return 'flex-start';
224
+ return null;
222
225
  }
223
226
  getSeparatorColor() {
224
227
  return 'rgb(from var(--' + this.getColor() + '-color) r g b / 0.8)';
225
228
  }
226
229
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionButtonComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
227
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionButtonComponent, selector: "ui-action-button", inputs: { disabled: "disabled", descriptor: "descriptor", code: "code", addedCssClass: "addedCssClass", addBasicClasses: "addBasicClasses", iconPlaceholder: "iconPlaceholder" }, outputs: { actionClick: "actionClick", actionDoubleClick: "actionDoubleClick" }, usesOnChanges: true, ngImport: i0, template: "@if (descriptor.type === 'SEPARATOR') {\r\n <div class=\"separator\">\r\n @if (descriptor.title) {\r\n <span class=\"separator-label\" [style.color]=\"getSeparatorColor()\">\r\n {{ descriptor.title }}\r\n </span>\r\n }\r\n <hr class=\"separator-line\" [style.border-top-color]=\"getSeparatorColor()\" />\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"buttonWithBadge\"></ng-container>\r\n}\r\n\r\n<ng-template #buttonWithBadge>\r\n @if (descriptor && descriptor.badge) {\r\n <ui-badge [descriptor]=\"descriptor.badge\">\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n </ui-badge>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonTemplate>\r\n @if (compLib === componentLibrary.PRIMENG) {\r\n <button\r\n pButton\r\n pRipple\r\n [smartTooltip]=\"descriptor.tooltip\"\r\n [disabled]=\"!!disabled\"\r\n (click)=\"onActionClicked($event, mainActionModel)\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [autofocus]=\"false\"\r\n [ngStyle]=\"calcStyle(descriptor.style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n } @else {\r\n <button\r\n mat-button\r\n [smartTooltip]=\"descriptor.tooltip\"\r\n [color]=\"descriptor.color\"\r\n [disabled]=\"!!disabled\"\r\n (click)=\"onActionClicked($event, mainActionModel)\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [ngStyle]=\"calcStyle(descriptor.style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #text>\r\n @if (renderPre() || renderPlaceholderPre()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n {{ descriptor.title }}\r\n @if (renderPost() || renderPlaceholderPost()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonIcon>\r\n @if (renderPlaceholderPre() || renderPlaceholderPost()) {\r\n <smart-icon></smart-icon>\r\n } @else if (descriptor.iconResource) {\r\n <smart-icon [imageResource]=\"descriptor.iconResource\"></smart-icon>\r\n } @else {\r\n <smart-icon\r\n [icon]=\"descriptor.icon\"\r\n [color]=\"descriptor.iconColor || descriptor.color\"\r\n ></smart-icon>\r\n }\r\n</ng-template>\r\n", styles: [":host{--text-color: black}:host ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center;line-height:1;padding:.75rem 1rem}:host{height:fit-content;width:fit-content;padding:unset;margin:unset}:host ::ng-deep .mdc-button__label{display:flex;flex-direction:row;gap:1rem;align-items:center;justify-content:center}:host ::ng-deep .mdc-button{height:fit-content;min-height:var(--mdc-text-button-container-height)}:host ::ng-deep .mat-mdc-icon-button ::ng-deep img{width:unset;height:unset}.separator{display:flex;flex-direction:column;padding:0 .5rem;width:100%}.separator-label{font-size:.7rem;color:#888;padding-bottom:.15rem}.separator-line{border:none;border-top:1px solid #e2e5e9;margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5.UiBadgeComponent, selector: "ui-badge", inputs: ["descriptor", "inputValue"] }, { kind: "directive", type: i6.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }] }); }
230
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionButtonComponent, selector: "ui-action-button", inputs: { disabled: "disabled", descriptor: "descriptor", code: "code", addedCssClass: "addedCssClass", addBasicClasses: "addBasicClasses", iconPlaceholder: "iconPlaceholder" }, outputs: { actionClick: "actionClick", actionDoubleClick: "actionDoubleClick" }, usesOnChanges: true, ngImport: i0, template: "@if (descriptor.type === 'SEPARATOR') {\r\n <div class=\"separator\">\r\n @if (descriptor.title) {\r\n <span class=\"separator-label\" [style.color]=\"getSeparatorColor()\">\r\n {{ descriptor.title }}\r\n </span>\r\n }\r\n <hr class=\"separator-line\" [style.border-top-color]=\"getSeparatorColor()\" />\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"buttonWithBadge\"></ng-container>\r\n}\r\n\r\n<ng-template #buttonWithBadge>\r\n @if (descriptor && descriptor.badge) {\r\n <ui-badge [descriptor]=\"descriptor.badge\">\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n </ui-badge>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonTemplate>\r\n @if (compLib === componentLibrary.PRIMENG) {\r\n <button\r\n pButton\r\n pRipple\r\n [smartTooltip]=\"descriptor.tooltip\"\r\n [disabled]=\"!!disabled\"\r\n (click)=\"onActionClicked($event, mainActionModel)\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [autofocus]=\"false\"\r\n [ngStyle]=\"calcStyle(descriptor.style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n } @else {\r\n <button\r\n mat-button\r\n [smartTooltip]=\"descriptor.tooltip\"\r\n [color]=\"descriptor.color\"\r\n [disabled]=\"!!disabled\"\r\n (click)=\"onActionClicked($event, mainActionModel)\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [ngStyle]=\"calcStyle(descriptor.style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #text>\r\n @if (renderPre() || renderPlaceholderPre()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n {{ descriptor.title }}\r\n @if (renderPost() || renderPlaceholderPost()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonIcon>\r\n @if (renderPlaceholderPre() || renderPlaceholderPost()) {\r\n <smart-icon></smart-icon>\r\n } @else if (descriptor.iconResource) {\r\n <smart-icon\r\n [imageResource]=\"descriptor.iconResource\"\r\n [color]=\"descriptor.iconColor || descriptor.color\"\r\n ></smart-icon>\r\n } @else {\r\n <smart-icon\r\n [icon]=\"descriptor.icon\"\r\n [color]=\"descriptor.iconColor || descriptor.color\"\r\n ></smart-icon>\r\n }\r\n</ng-template>\r\n", styles: [":host{--text-color: black}:host ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center;line-height:1;padding:.75rem 1rem}:host{height:fit-content;width:fit-content;padding:unset;margin:unset}:host ::ng-deep .mdc-button__label{display:flex;flex-direction:row;gap:1rem;align-items:center;justify-content:center}:host ::ng-deep .mdc-button{height:fit-content;min-height:var(--mdc-text-button-container-height)}:host ::ng-deep .mat-mdc-icon-button ::ng-deep img{width:unset;height:unset}.separator{display:flex;flex-direction:column;padding:0 .5rem;width:100%}.separator-label{font-size:.7rem;color:#888;padding-bottom:.15rem}.separator-line{border:none;border-top:1px solid #e2e5e9;margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5.UiBadgeComponent, selector: "ui-badge", inputs: ["descriptor", "inputValue"] }, { kind: "directive", type: i6.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }] }); }
228
231
  }
229
232
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionButtonComponent, decorators: [{
230
233
  type: Component,
231
- args: [{ selector: 'ui-action-button', template: "@if (descriptor.type === 'SEPARATOR') {\r\n <div class=\"separator\">\r\n @if (descriptor.title) {\r\n <span class=\"separator-label\" [style.color]=\"getSeparatorColor()\">\r\n {{ descriptor.title }}\r\n </span>\r\n }\r\n <hr class=\"separator-line\" [style.border-top-color]=\"getSeparatorColor()\" />\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"buttonWithBadge\"></ng-container>\r\n}\r\n\r\n<ng-template #buttonWithBadge>\r\n @if (descriptor && descriptor.badge) {\r\n <ui-badge [descriptor]=\"descriptor.badge\">\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n </ui-badge>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonTemplate>\r\n @if (compLib === componentLibrary.PRIMENG) {\r\n <button\r\n pButton\r\n pRipple\r\n [smartTooltip]=\"descriptor.tooltip\"\r\n [disabled]=\"!!disabled\"\r\n (click)=\"onActionClicked($event, mainActionModel)\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [autofocus]=\"false\"\r\n [ngStyle]=\"calcStyle(descriptor.style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n } @else {\r\n <button\r\n mat-button\r\n [smartTooltip]=\"descriptor.tooltip\"\r\n [color]=\"descriptor.color\"\r\n [disabled]=\"!!disabled\"\r\n (click)=\"onActionClicked($event, mainActionModel)\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [ngStyle]=\"calcStyle(descriptor.style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #text>\r\n @if (renderPre() || renderPlaceholderPre()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n {{ descriptor.title }}\r\n @if (renderPost() || renderPlaceholderPost()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonIcon>\r\n @if (renderPlaceholderPre() || renderPlaceholderPost()) {\r\n <smart-icon></smart-icon>\r\n } @else if (descriptor.iconResource) {\r\n <smart-icon [imageResource]=\"descriptor.iconResource\"></smart-icon>\r\n } @else {\r\n <smart-icon\r\n [icon]=\"descriptor.icon\"\r\n [color]=\"descriptor.iconColor || descriptor.color\"\r\n ></smart-icon>\r\n }\r\n</ng-template>\r\n", styles: [":host{--text-color: black}:host ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center;line-height:1;padding:.75rem 1rem}:host{height:fit-content;width:fit-content;padding:unset;margin:unset}:host ::ng-deep .mdc-button__label{display:flex;flex-direction:row;gap:1rem;align-items:center;justify-content:center}:host ::ng-deep .mdc-button{height:fit-content;min-height:var(--mdc-text-button-container-height)}:host ::ng-deep .mat-mdc-icon-button ::ng-deep img{width:unset;height:unset}.separator{display:flex;flex-direction:column;padding:0 .5rem;width:100%}.separator-label{font-size:.7rem;color:#888;padding-bottom:.15rem}.separator-line{border:none;border-top:1px solid #e2e5e9;margin:0}\n"] }]
234
+ args: [{ selector: 'ui-action-button', template: "@if (descriptor.type === 'SEPARATOR') {\r\n <div class=\"separator\">\r\n @if (descriptor.title) {\r\n <span class=\"separator-label\" [style.color]=\"getSeparatorColor()\">\r\n {{ descriptor.title }}\r\n </span>\r\n }\r\n <hr class=\"separator-line\" [style.border-top-color]=\"getSeparatorColor()\" />\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"buttonWithBadge\"></ng-container>\r\n}\r\n\r\n<ng-template #buttonWithBadge>\r\n @if (descriptor && descriptor.badge) {\r\n <ui-badge [descriptor]=\"descriptor.badge\">\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n </ui-badge>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonTemplate>\r\n @if (compLib === componentLibrary.PRIMENG) {\r\n <button\r\n pButton\r\n pRipple\r\n [smartTooltip]=\"descriptor.tooltip\"\r\n [disabled]=\"!!disabled\"\r\n (click)=\"onActionClicked($event, mainActionModel)\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [autofocus]=\"false\"\r\n [ngStyle]=\"calcStyle(descriptor.style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n } @else {\r\n <button\r\n mat-button\r\n [smartTooltip]=\"descriptor.tooltip\"\r\n [color]=\"descriptor.color\"\r\n [disabled]=\"!!disabled\"\r\n (click)=\"onActionClicked($event, mainActionModel)\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [ngStyle]=\"calcStyle(descriptor.style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #text>\r\n @if (renderPre() || renderPlaceholderPre()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n {{ descriptor.title }}\r\n @if (renderPost() || renderPlaceholderPost()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonIcon>\r\n @if (renderPlaceholderPre() || renderPlaceholderPost()) {\r\n <smart-icon></smart-icon>\r\n } @else if (descriptor.iconResource) {\r\n <smart-icon\r\n [imageResource]=\"descriptor.iconResource\"\r\n [color]=\"descriptor.iconColor || descriptor.color\"\r\n ></smart-icon>\r\n } @else {\r\n <smart-icon\r\n [icon]=\"descriptor.icon\"\r\n [color]=\"descriptor.iconColor || descriptor.color\"\r\n ></smart-icon>\r\n }\r\n</ng-template>\r\n", styles: [":host{--text-color: black}:host ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center;line-height:1;padding:.75rem 1rem}:host{height:fit-content;width:fit-content;padding:unset;margin:unset}:host ::ng-deep .mdc-button__label{display:flex;flex-direction:row;gap:1rem;align-items:center;justify-content:center}:host ::ng-deep .mdc-button{height:fit-content;min-height:var(--mdc-text-button-container-height)}:host ::ng-deep .mat-mdc-icon-button ::ng-deep img{width:unset;height:unset}.separator{display:flex;flex-direction:column;padding:0 .5rem;width:100%}.separator-label{font-size:.7rem;color:#888;padding-bottom:.15rem}.separator-line{border:none;border-top:1px solid #e2e5e9;margin:0}\n"] }]
232
235
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i7.ComponentLibrary, decorators: [{
233
236
  type: Inject,
234
237
  args: [COMPONENT_LIBRARY]
@@ -251,4 +254,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
251
254
  }], actionDoubleClick: [{
252
255
  type: Output
253
256
  }] } });
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi1idXR0b24vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi1idXR0b24vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7OztBQU9sRSxNQUFNLE9BQU8sdUJBQXVCO0lBNkJsQyxZQUNTLGNBQWlDLEVBQ0QsT0FBMEI7UUFEMUQsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBN0JsQyxjQUFTLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFNeEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFHL0IsZ0JBQVcs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QUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLHNCQUFzQixDQUFDO0lBQ3RFLENBQUM7K0dBMVFVLHVCQUF1QixtREErQnhCLGlCQUFpQjttR0EvQmhCLHVCQUF1QixnVkMxQnBDLHM0RkFvRkE7OzRGRDFEYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usa0JBQWtCOzswQkFtQ3pCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFBRyxRQUFRO3lDQTVCN0IsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQU1HLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVWlBY3Rpb25Nb2RlbCB9IGZyb20gJy4uL3VpLWFjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuLi8uLi91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQgeyBVaUFjdGlvbkJ1dHRvblR5cGUgfSBmcm9tICcuLi8uLi9hcGkvbW9kZWwvdWlBY3Rpb25CdXR0b25UeXBlJztcclxuaW1wb3J0IHsgSWNvblBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vYXBpL21vZGVsL2ljb25Qb3NpdGlvbic7XHJcbmltcG9ydCB7IFN0eWxlLCBVaUFjdGlvbiwgVWlBY3Rpb25EZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vYXBpJztcclxuaW1wb3J0IHsgU21hcnRTdHlsZVV0aWxpdHkgfSBmcm9tICcuLi8uLi91dGlsaXR5L3NtYXJ0LXN0eWxlLXV0aWxpdHknO1xyXG5pbXBvcnQgeyBCdXR0b25JY29uUGxhY2Vob2xkZXIgfSBmcm9tICcuL2J1dHRvbi1pY29uLXBsYWNlaG9sZGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktYWN0aW9uLWJ1dHRvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VpLWFjdGlvbi1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91aS1hY3Rpb24tYnV0dG9uLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlBY3Rpb25CdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGVzY3JpcHRvciE6IFVpQWN0aW9uRGVzY3JpcHRvcjtcclxuICBASW5wdXQoKSBjb2RlPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFkZGVkQ3NzQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYWRkQmFzaWNDbGFzc2VzOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpY29uUGxhY2Vob2xkZXI/OiBCdXR0b25JY29uUGxhY2Vob2xkZXI7XHJcblxyXG4gIEBPdXRwdXQoKSBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQ7XHJcbiAgICBkZXNjcmlwdG9yPzogVWlBY3Rpb25EZXNjcmlwdG9yO1xyXG4gICAgY29kZT86IHN0cmluZztcclxuICAgIHVpQWN0aW9uPzogVWlBY3Rpb247XHJcbiAgfT4oKTtcclxuICBAT3V0cHV0KCkgYWN0aW9uRG91YmxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGV2ZW50OiBhbnk7XHJcbiAgICBkZXNjcmlwdG9yPzogVWlBY3Rpb25EZXNjcmlwdG9yO1xyXG4gICAgY29kZT86IHN0cmluZztcclxuICB9PigpO1xyXG5cclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuICBjb21wTGliOiBDb21wb25lbnRMaWJyYXJ5O1xyXG4gIG1haW5BY3Rpb25Nb2RlbCE6IFVpQWN0aW9uTW9kZWw7XHJcblxyXG4gIHByZXNzZWRCdXR0b25BY3RpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIG1lbnVPcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChDT01QT05FTlRfTElCUkFSWSkgQE9wdGlvbmFsKCkgY29tcExpYj86IENvbXBvbmVudExpYnJhcnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkZWZhdWx0czogUGFydGlhbDxVaUFjdGlvbkRlc2NyaXB0b3I+ID0ge1xyXG4gICAgICB0aXRsZTogdGhpcy5jb2RlID8/ICdVTkRFRklORURfQlVUVE9OJyxcclxuICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTCxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5kZXNjcmlwdG9yID0ge1xyXG4gICAgICAuLi5kZWZhdWx0cyxcclxuICAgICAgLi4udGhpcy5kZXNjcmlwdG9yLFxyXG4gICAgICB0aXRsZTogdGhpcy5kZXNjcmlwdG9yPy50aXRsZSA/PyBkZWZhdWx0cy50aXRsZSxcclxuICAgICAgY29sb3I6IHRoaXMuZGVzY3JpcHRvcj8uY29sb3IgPz8gZGVmYXVsdHMuY29sb3IsXHJcbiAgICAgIHR5cGU6IHRoaXMuZGVzY3JpcHRvcj8udHlwZSA/PyBkZWZhdWx0cy50eXBlLFxyXG4gICAgfSBhcyBVaUFjdGlvbkRlc2NyaXB0b3I7XHJcblxyXG4gICAgdGhpcy5idWlsZE1haW5BY3Rpb25Nb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2Rlc2NyaXB0b3InXSAmJiB0aGlzLmRlc2NyaXB0b3IpIHtcclxuICAgICAgdGhpcy5idWlsZE1haW5BY3Rpb25Nb2RlbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZE1haW5BY3Rpb25Nb2RlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWFpbkFjdGlvbk1vZGVsID0ge1xyXG4gICAgICBkZXNjcmlwdG9yOiB0aGlzLmRlc2NyaXB0b3IsXHJcbiAgICAgIHVpQWN0aW9uOiB7XHJcbiAgICAgICAgZGVzY3JpcHRvcjogdGhpcy5kZXNjcmlwdG9yLFxyXG4gICAgICAgIGNvZGU6IHRoaXMuY29kZSxcclxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCA/PyBmYWxzZSxcclxuICAgICAgfSxcclxuICAgIH0gYXMgVWlBY3Rpb25Nb2RlbDtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25BY3Rpb25DbGlja2VkKGV2ZW50OiBNb3VzZUV2ZW50LCBtb2RlbDogVWlBY3Rpb25Nb2RlbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoe1xyXG4gICAgICBldmVudCxcclxuICAgICAgY29kZTogbW9kZWwudWlBY3Rpb24uY29kZSxcclxuICAgICAgZGVzY3JpcHRvcjogbW9kZWwuZGVzY3JpcHRvciEsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQWN0aW9uRG91YmxlQ2xpY2tlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuYWN0aW9uRG91YmxlQ2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50LFxyXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXHJcbiAgICAgIGRlc2NyaXB0b3I6IHRoaXMuZGVzY3JpcHRvcixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaWNvblBvc2l0aW9uKCk6IHR5cGVvZiBJY29uUG9zaXRpb24ge1xyXG4gICAgcmV0dXJuIEljb25Qb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIGlzT25seUljb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmRlc2NyaXB0b3I/LnR5cGUgPT09IFVpQWN0aW9uQnV0dG9uVHlwZS5JQ09OIHx8XHJcbiAgICAgIHRoaXMuZGVzY3JpcHRvcj8udHlwZSA9PT0gVWlBY3Rpb25CdXR0b25UeXBlLk1JTklfRkFCIHx8XHJcbiAgICAgIHRoaXMuZGVzY3JpcHRvcj8udHlwZSA9PT0gVWlBY3Rpb25CdXR0b25UeXBlLkZBQlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldGJ0bkNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuYWRkQmFzaWNDbGFzc2VzKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kZXNjcmlwdG9yLmNvbG9yKSB7XHJcbiAgICAgIHJldHVybiAncC1idXR0b24tJyArIHRoaXMuZGVzY3JpcHRvcj8uY29sb3IgKyAnIHNiNC0nICsgdGhpcy5kZXNjcmlwdG9yPy5jb2xvcjtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldFR5cGUoKTogYW55IHtcclxuICAgIGlmICghdGhpcy5hZGRCYXNpY0NsYXNzZXMpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZGVzY3JpcHRvci50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMOlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1ub3JtYWwnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tdGV4dCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuRkxBVDpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtZmxhdCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLlJBSVNFRDpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtcmFpc2VkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJhaXNlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuU1RST0tFRDpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtc3Ryb2tlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1vdXRsaW5lZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuTUlOSV9GQUI6XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnc2I0LW1pbmlmYWInOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi10ZXh0JzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJhaXNlZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLkZBQjpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtZmFiJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tdGV4dCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5JQ09OOlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1pY29uJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tdGV4dCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1iYXNpYyc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi10ZXh0JzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJhaXNlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLW91dGxpbmVkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5kZXNjcmlwdG9yLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUw6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtYnV0dG9uIHNiNC1ub3JtYWwnO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLkZMQVQ6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtZmxhdC1idXR0b24gc2I0LWZsYXQnO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLlJBSVNFRDpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1yYWlzZWQtYnV0dG9uIHNiNC1yYWlzZWQnO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLlNUUk9LRUQ6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtc3Ryb2tlZC1idXR0b24gc2I0LXN0cm9rZWQnO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLklDT046XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtaWNvbi1idXR0b24gc2I0LWljb24nO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLk1JTklfRkFCOlxyXG4gICAgICAgICAgcmV0dXJuICdtYXQtbWRjLW1pbmktZmFiIHNiNC1taW5pZmFiJztcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5GQUI6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtZmFiIHNiNC1mYWInO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4gYG1hdC1idXR0b24gc2I0LWJhc2ljYDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY1N0eWxlKHN0eWxlPzogU3R5bGUpOiBhbnkge1xyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKHN0eWxlKTtcclxuICB9XHJcbiAgY2FsY0NsYXNzZXMoc3R5bGU/OiBTdHlsZSk6IGFueSB7XHJcbiAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdDbGFzc2VzKHN0eWxlKTtcclxuICB9XHJcblxyXG4gIGdldENvbWJpbmVkQ2xhc3NlcygpOiBhbnkge1xyXG4gICAgY29uc3QgdHlwZUNsYXNzZXMgPSB0aGlzLmdldFR5cGUoKTtcclxuICAgIGNvbnN0IHN0eWxlQ2xhc3NlcyA9IHRoaXMuY2FsY0NsYXNzZXModGhpcy5kZXNjcmlwdG9yLnN0eWxlKTtcclxuXHJcbiAgICAvLyBOb3JtYWxpemUgdHlwZUNsYXNzZXMgdG8gb2JqZWN0XHJcbiAgICBjb25zdCB0eXBlT2JqID1cclxuICAgICAgdHlwZW9mIHR5cGVDbGFzc2VzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdHlwZUNsYXNzZXMuc3BsaXQoJyAnKS5yZWR1Y2UoKGFjYywgY2xzKSA9PiAoeyAuLi5hY2MsIFtjbHNdOiB0cnVlIH0pLCB7fSlcclxuICAgICAgICA6IHR5cGVDbGFzc2VzO1xyXG5cclxuICAgIHJldHVybiB7IC4uLnR5cGVPYmosIC4uLnN0eWxlQ2xhc3NlcyB9O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyUHJlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5kZXNjcmlwdG9yLmljb25Qb3NpdGlvbiA9PT0gSWNvblBvc2l0aW9uLlBSRSAmJlxyXG4gICAgICAodGhpcy5kZXNjcmlwdG9yLmljb24gIT0gbnVsbCB8fCB0aGlzLmRlc2NyaXB0b3IuaWNvblJlc291cmNlICE9IG51bGwpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyUG9zdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZGVzY3JpcHRvci5pY29uUG9zaXRpb24gPT09IEljb25Qb3NpdGlvbi5QT1NUICYmXHJcbiAgICAgICh0aGlzLmRlc2NyaXB0b3IuaWNvbiAhPSBudWxsIHx8IHRoaXMuZGVzY3JpcHRvci5pY29uUmVzb3VyY2UgIT0gbnVsbClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvcj8uY29sb3IgfHwgJ3RleHQnO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyUGxhY2Vob2xkZXJQcmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmljb25QbGFjZWhvbGRlciA9PT0gQnV0dG9uSWNvblBsYWNlaG9sZGVyLlBSRSB8fFxyXG4gICAgICB0aGlzLmljb25QbGFjZWhvbGRlciA9PT0gQnV0dG9uSWNvblBsYWNlaG9sZGVyLkJPVEhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJQbGFjZWhvbGRlclBvc3QoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmljb25QbGFjZWhvbGRlciA9PT0gQnV0dG9uSWNvblBsYWNlaG9sZGVyLlBPU1QgfHxcclxuICAgICAgdGhpcy5pY29uUGxhY2Vob2xkZXIgPT09IEJ1dHRvbkljb25QbGFjZWhvbGRlci5CT1RIXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0SnVzdGlmeUNvbnRlbnQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmljb25QbGFjZWhvbGRlciA9PT0gQnV0dG9uSWNvblBsYWNlaG9sZGVyLkJPVEgpIHtcclxuICAgICAgcmV0dXJuICdjZW50ZXInO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuUFJFIHx8IHRoaXMucmVuZGVyUHJlKCkpIHtcclxuICAgICAgcmV0dXJuICdmbGV4LXN0YXJ0JztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmljb25QbGFjZWhvbGRlciA9PT0gQnV0dG9uSWNvblBsYWNlaG9sZGVyLlBPU1QgfHwgdGhpcy5yZW5kZXJQb3N0KCkpIHtcclxuICAgICAgcmV0dXJuICdmbGV4LWVuZCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ2ZsZXgtc3RhcnQnO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VwYXJhdG9yQ29sb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAncmdiKGZyb20gdmFyKC0tJyArIHRoaXMuZ2V0Q29sb3IoKSArICctY29sb3IpIHIgZyBiIC8gMC44KSc7XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoZGVzY3JpcHRvci50eXBlID09PSAnU0VQQVJBVE9SJykge1xyXG4gIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3JcIj5cclxuICAgIEBpZiAoZGVzY3JpcHRvci50aXRsZSkge1xyXG4gICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvci1sYWJlbFwiIFtzdHlsZS5jb2xvcl09XCJnZXRTZXBhcmF0b3JDb2xvcigpXCI+XHJcbiAgICAgICAge3sgZGVzY3JpcHRvci50aXRsZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICB9XHJcbiAgICA8aHIgY2xhc3M9XCJzZXBhcmF0b3ItbGluZVwiIFtzdHlsZS5ib3JkZXItdG9wLWNvbG9yXT1cImdldFNlcGFyYXRvckNvbG9yKClcIiAvPlxyXG4gIDwvZGl2PlxyXG59IEBlbHNlIHtcclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uV2l0aEJhZGdlXCI+PC9uZy1jb250YWluZXI+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uV2l0aEJhZGdlPlxyXG4gIEBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmJhZGdlKSB7XHJcbiAgICA8dWktYmFkZ2UgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvci5iYWRnZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdWktYmFkZ2U+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2J1dHRvblRlbXBsYXRlPlxyXG4gIEBpZiAoY29tcExpYiA9PT0gY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHBCdXR0b25cclxuICAgICAgcFJpcHBsZVxyXG4gICAgICBbc21hcnRUb29sdGlwXT1cImRlc2NyaXB0b3IudG9vbHRpcFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhIWRpc2FibGVkXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIG1haW5BY3Rpb25Nb2RlbClcIlxyXG4gICAgICAoZGJsY2xpY2spPVwib25BY3Rpb25Eb3VibGVDbGlja2VkKCRldmVudClcIlxyXG4gICAgICBbYXV0b2ZvY3VzXT1cImZhbHNlXCJcclxuICAgICAgW25nU3R5bGVdPVwiY2FsY1N0eWxlKGRlc2NyaXB0b3Iuc3R5bGUpXCJcclxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Q29tYmluZWRDbGFzc2VzKClcIlxyXG4gICAgICBbc3R5bGUuanVzdGlmeS1jb250ZW50XT1cImdldEp1c3RpZnlDb250ZW50KClcIlxyXG4gICAgICBjbGFzcz1cInt7IGdldGJ0bkNsYXNzKCkgfX0ge3sgYWRkZWRDc3NDbGFzcyB9fVwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJjb2RlID8/IG51bGxcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNPbmx5SWNvbigpOyB0aGVuIGJ1dHRvbkljb247IGVsc2UgdGV4dFwiPjwvZGl2PlxyXG4gICAgPC9idXR0b24+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1idXR0b25cclxuICAgICAgW3NtYXJ0VG9vbHRpcF09XCJkZXNjcmlwdG9yLnRvb2x0aXBcIlxyXG4gICAgICBbY29sb3JdPVwiZGVzY3JpcHRvci5jb2xvclwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhIWRpc2FibGVkXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIG1haW5BY3Rpb25Nb2RlbClcIlxyXG4gICAgICAoZGJsY2xpY2spPVwib25BY3Rpb25Eb3VibGVDbGlja2VkKCRldmVudClcIlxyXG4gICAgICBbbmdTdHlsZV09XCJjYWxjU3R5bGUoZGVzY3JpcHRvci5zdHlsZSlcIlxyXG4gICAgICBbbmdDbGFzc109XCJnZXRDb21iaW5lZENsYXNzZXMoKVwiXHJcbiAgICAgIFtzdHlsZS5qdXN0aWZ5LWNvbnRlbnRdPVwiZ2V0SnVzdGlmeUNvbnRlbnQoKVwiXHJcbiAgICAgIGNsYXNzPVwie3sgZ2V0YnRuQ2xhc3MoKSB9fSB7eyBhZGRlZENzc0NsYXNzIH19XCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cImNvZGUgPz8gbnVsbFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc09ubHlJY29uKCk7IHRoZW4gYnV0dG9uSWNvbjsgZWxzZSB0ZXh0XCI+PC9kaXY+XHJcbiAgICA8L2J1dHRvbj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RleHQ+XHJcbiAgQGlmIChyZW5kZXJQcmUoKSB8fCByZW5kZXJQbGFjZWhvbGRlclByZSgpKSB7XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uSWNvblwiIC8+XHJcbiAgfVxyXG4gIHt7IGRlc2NyaXB0b3IudGl0bGUgfX1cclxuICBAaWYgKHJlbmRlclBvc3QoKSB8fCByZW5kZXJQbGFjZWhvbGRlclBvc3QoKSkge1xyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkljb25cIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uSWNvbj5cclxuICBAaWYgKHJlbmRlclBsYWNlaG9sZGVyUHJlKCkgfHwgcmVuZGVyUGxhY2Vob2xkZXJQb3N0KCkpIHtcclxuICAgIDxzbWFydC1pY29uPjwvc21hcnQtaWNvbj5cclxuICB9IEBlbHNlIGlmIChkZXNjcmlwdG9yLmljb25SZXNvdXJjZSkge1xyXG4gICAgPHNtYXJ0LWljb24gW2ltYWdlUmVzb3VyY2VdPVwiZGVzY3JpcHRvci5pY29uUmVzb3VyY2VcIj48L3NtYXJ0LWljb24+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8c21hcnQtaWNvblxyXG4gICAgICBbaWNvbl09XCJkZXNjcmlwdG9yLmljb25cIlxyXG4gICAgICBbY29sb3JdPVwiZGVzY3JpcHRvci5pY29uQ29sb3IgfHwgZGVzY3JpcHRvci5jb2xvclwiXHJcbiAgICA+PC9zbWFydC1pY29uPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi1idXR0b24vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi1idXR0b24vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7OztBQU9sRSxNQUFNLE9BQU8sdUJBQXVCO0lBNkJsQyxZQUNTLGNBQWlDLEVBQ0QsT0FBMEI7UUFEMUQsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBN0JsQyxjQUFTLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFNeEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFHL0IsZ0JBQVcs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QUNwQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsc0JBQXNCLENBQUM7SUFDdEUsQ0FBQzsrR0E3UVUsdUJBQXVCLG1EQStCeEIsaUJBQWlCO21HQS9CaEIsdUJBQXVCLGdWQzFCcEMscTlGQXVGQTs7NEZEN0RhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0I7OzBCQW1DekIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUFHLFFBQVE7eUNBNUI3QixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUcsaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vdWktYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IFVpQWN0aW9uQnV0dG9uVHlwZSB9IGZyb20gJy4uLy4uL2FwaS9tb2RlbC91aUFjdGlvbkJ1dHRvblR5cGUnO1xyXG5pbXBvcnQgeyBJY29uUG9zaXRpb24gfSBmcm9tICcuLi8uLi9hcGkvbW9kZWwvaWNvblBvc2l0aW9uJztcclxuaW1wb3J0IHsgU3R5bGUsIFVpQWN0aW9uLCBVaUFjdGlvbkRlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9hcGknO1xyXG5pbXBvcnQgeyBTbWFydFN0eWxlVXRpbGl0eSB9IGZyb20gJy4uLy4uL3V0aWxpdHkvc21hcnQtc3R5bGUtdXRpbGl0eSc7XHJcbmltcG9ydCB7IEJ1dHRvbkljb25QbGFjZWhvbGRlciB9IGZyb20gJy4vYnV0dG9uLWljb24tcGxhY2Vob2xkZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1hY3Rpb24tYnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VpLWFjdGlvbi1idXR0b24uY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUFjdGlvbkJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZXNjcmlwdG9yITogVWlBY3Rpb25EZXNjcmlwdG9yO1xyXG4gIEBJbnB1dCgpIGNvZGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYWRkZWRDc3NDbGFzcz86IHN0cmluZztcclxuICBASW5wdXQoKSBhZGRCYXNpY0NsYXNzZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGljb25QbGFjZWhvbGRlcj86IEJ1dHRvbkljb25QbGFjZWhvbGRlcjtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBldmVudDogTW91c2VFdmVudDtcclxuICAgIGRlc2NyaXB0b3I/OiBVaUFjdGlvbkRlc2NyaXB0b3I7XHJcbiAgICBjb2RlPzogc3RyaW5nO1xyXG4gICAgdWlBY3Rpb24/OiBVaUFjdGlvbjtcclxuICB9PigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25Eb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZXZlbnQ6IGFueTtcclxuICAgIGRlc2NyaXB0b3I/OiBVaUFjdGlvbkRlc2NyaXB0b3I7XHJcbiAgICBjb2RlPzogc3RyaW5nO1xyXG4gIH0+KCk7XHJcblxyXG4gIGNvbXBvbmVudExpYnJhcnkgPSBDb21wb25lbnRMaWJyYXJ5O1xyXG4gIGNvbXBMaWI6IENvbXBvbmVudExpYnJhcnk7XHJcbiAgbWFpbkFjdGlvbk1vZGVsITogVWlBY3Rpb25Nb2RlbDtcclxuXHJcbiAgcHJlc3NlZEJ1dHRvbkFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgbWVudU9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeVxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wTGliID0gY29tcExpYiA/PyBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkc7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlZmF1bHRzOiBQYXJ0aWFsPFVpQWN0aW9uRGVzY3JpcHRvcj4gPSB7XHJcbiAgICAgIHRpdGxlOiB0aGlzLmNvZGUgPz8gJ1VOREVGSU5FRF9CVVRUT04nLFxyXG4gICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmRlc2NyaXB0b3IgPSB7XHJcbiAgICAgIC4uLmRlZmF1bHRzLFxyXG4gICAgICAuLi50aGlzLmRlc2NyaXB0b3IsXHJcbiAgICAgIHRpdGxlOiB0aGlzLmRlc2NyaXB0b3I/LnRpdGxlID8/IGRlZmF1bHRzLnRpdGxlLFxyXG4gICAgICBjb2xvcjogdGhpcy5kZXNjcmlwdG9yPy5jb2xvciA/PyBkZWZhdWx0cy5jb2xvcixcclxuICAgICAgdHlwZTogdGhpcy5kZXNjcmlwdG9yPy50eXBlID8/IGRlZmF1bHRzLnR5cGUsXHJcbiAgICB9IGFzIFVpQWN0aW9uRGVzY3JpcHRvcjtcclxuXHJcbiAgICB0aGlzLmJ1aWxkTWFpbkFjdGlvbk1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snZGVzY3JpcHRvciddICYmIHRoaXMuZGVzY3JpcHRvcikge1xyXG4gICAgICB0aGlzLmJ1aWxkTWFpbkFjdGlvbk1vZGVsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkTWFpbkFjdGlvbk1vZGVsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tYWluQWN0aW9uTW9kZWwgPSB7XHJcbiAgICAgIGRlc2NyaXB0b3I6IHRoaXMuZGVzY3JpcHRvcixcclxuICAgICAgdWlBY3Rpb246IHtcclxuICAgICAgICBkZXNjcmlwdG9yOiB0aGlzLmRlc2NyaXB0b3IsXHJcbiAgICAgICAgY29kZTogdGhpcy5jb2RlLFxyXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkID8/IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgfSBhcyBVaUFjdGlvbk1vZGVsO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkFjdGlvbkNsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIG1vZGVsOiBVaUFjdGlvbk1vZGVsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50LFxyXG4gICAgICBjb2RlOiBtb2RlbC51aUFjdGlvbi5jb2RlLFxyXG4gICAgICBkZXNjcmlwdG9yOiBtb2RlbC5kZXNjcmlwdG9yISxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25BY3Rpb25Eb3VibGVDbGlja2VkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5hY3Rpb25Eb3VibGVDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQsXHJcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcclxuICAgICAgZGVzY3JpcHRvcjogdGhpcy5kZXNjcmlwdG9yLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpY29uUG9zaXRpb24oKTogdHlwZW9mIEljb25Qb3NpdGlvbiB7XHJcbiAgICByZXR1cm4gSWNvblBvc2l0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNPbmx5SWNvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZGVzY3JpcHRvcj8udHlwZSA9PT0gVWlBY3Rpb25CdXR0b25UeXBlLklDT04gfHxcclxuICAgICAgdGhpcy5kZXNjcmlwdG9yPy50eXBlID09PSBVaUFjdGlvbkJ1dHRvblR5cGUuTUlOSV9GQUIgfHxcclxuICAgICAgdGhpcy5kZXNjcmlwdG9yPy50eXBlID09PSBVaUFjdGlvbkJ1dHRvblR5cGUuRkFCXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0YnRuQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5hZGRCYXNpY0NsYXNzZXMpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRlc2NyaXB0b3IuY29sb3IpIHtcclxuICAgICAgcmV0dXJuICdwLWJ1dHRvbi0nICsgdGhpcy5kZXNjcmlwdG9yPy5jb2xvciArICcgc2I0LScgKyB0aGlzLmRlc2NyaXB0b3I/LmNvbG9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0VHlwZSgpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLmFkZEJhc2ljQ2xhc3Nlcykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5kZXNjcmlwdG9yLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUw6XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnc2I0LW5vcm1hbCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi10ZXh0JzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5GTEFUOlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1mbGF0JzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJhaXNlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuUkFJU0VEOlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcmFpc2VkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5TVFJPS0VEOlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1zdHJva2VkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLW91dGxpbmVkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5NSU5JX0ZBQjpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtbWluaWZhYic6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXRleHQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcmFpc2VkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuRkFCOlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1mYWInOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi10ZXh0JzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJhaXNlZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLklDT046XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnc2I0LWljb24nOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi10ZXh0JzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJhaXNlZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnc2I0LWJhc2ljJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXRleHQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcmFpc2VkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tb3V0bGluZWQnOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3dpdGNoICh0aGlzLmRlc2NyaXB0b3IudHlwZSkge1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTDpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1idXR0b24gc2I0LW5vcm1hbCc7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuRkxBVDpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1mbGF0LWJ1dHRvbiBzYjQtZmxhdCc7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuUkFJU0VEOlxyXG4gICAgICAgICAgcmV0dXJuICdtYXQtbWRjLXJhaXNlZC1idXR0b24gc2I0LXJhaXNlZCc7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuU1RST0tFRDpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1zdHJva2VkLWJ1dHRvbiBzYjQtc3Ryb2tlZCc7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuSUNPTjpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1pY29uLWJ1dHRvbiBzYjQtaWNvbic7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuTUlOSV9GQUI6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtbWluaS1mYWIgc2I0LW1pbmlmYWInO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLkZBQjpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1mYWIgc2I0LWZhYic7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiBgbWF0LWJ1dHRvbiBzYjQtYmFzaWNgO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxjU3R5bGUoc3R5bGU/OiBTdHlsZSk6IGFueSB7XHJcbiAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdTdHlsZXMoc3R5bGUpO1xyXG4gIH1cclxuICBjYWxjQ2xhc3NlcyhzdHlsZT86IFN0eWxlKTogYW55IHtcclxuICAgIHJldHVybiBTbWFydFN0eWxlVXRpbGl0eS5nZXROZ0NsYXNzZXMoc3R5bGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tYmluZWRDbGFzc2VzKCk6IGFueSB7XHJcbiAgICBjb25zdCB0eXBlQ2xhc3NlcyA9IHRoaXMuZ2V0VHlwZSgpO1xyXG4gICAgY29uc3Qgc3R5bGVDbGFzc2VzID0gdGhpcy5jYWxjQ2xhc3Nlcyh0aGlzLmRlc2NyaXB0b3Iuc3R5bGUpO1xyXG5cclxuICAgIC8vIE5vcm1hbGl6ZSB0eXBlQ2xhc3NlcyB0byBvYmplY3RcclxuICAgIGNvbnN0IHR5cGVPYmogPVxyXG4gICAgICB0eXBlb2YgdHlwZUNsYXNzZXMgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyB0eXBlQ2xhc3Nlcy5zcGxpdCgnICcpLnJlZHVjZSgoYWNjLCBjbHMpID0+ICh7IC4uLmFjYywgW2Nsc106IHRydWUgfSksIHt9KVxyXG4gICAgICAgIDogdHlwZUNsYXNzZXM7XHJcblxyXG4gICAgcmV0dXJuIHsgLi4udHlwZU9iaiwgLi4uc3R5bGVDbGFzc2VzIH07XHJcbiAgfVxyXG5cclxuICByZW5kZXJQcmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmRlc2NyaXB0b3IuaWNvblBvc2l0aW9uID09PSBJY29uUG9zaXRpb24uUFJFICYmXHJcbiAgICAgICh0aGlzLmRlc2NyaXB0b3IuaWNvbiAhPSBudWxsIHx8IHRoaXMuZGVzY3JpcHRvci5pY29uUmVzb3VyY2UgIT0gbnVsbClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJQb3N0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5kZXNjcmlwdG9yLmljb25Qb3NpdGlvbiA9PT0gSWNvblBvc2l0aW9uLlBPU1QgJiZcclxuICAgICAgKHRoaXMuZGVzY3JpcHRvci5pY29uICE9IG51bGwgfHwgdGhpcy5kZXNjcmlwdG9yLmljb25SZXNvdXJjZSAhPSBudWxsKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldENvbG9yKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yPy5jb2xvciB8fCAndGV4dCc7XHJcbiAgfVxyXG5cclxuICByZW5kZXJQbGFjZWhvbGRlclByZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuUFJFIHx8XHJcbiAgICAgIHRoaXMuaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuQk9USFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlclBsYWNlaG9sZGVyUG9zdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuUE9TVCB8fFxyXG4gICAgICB0aGlzLmljb25QbGFjZWhvbGRlciA9PT0gQnV0dG9uSWNvblBsYWNlaG9sZGVyLkJPVEhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRKdXN0aWZ5Q29udGVudCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5pY29uUGxhY2Vob2xkZXIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pY29uUGxhY2Vob2xkZXIgPT09IEJ1dHRvbkljb25QbGFjZWhvbGRlci5CT1RIKSB7XHJcbiAgICAgIHJldHVybiAnY2VudGVyJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmljb25QbGFjZWhvbGRlciA9PT0gQnV0dG9uSWNvblBsYWNlaG9sZGVyLlBSRSkge1xyXG4gICAgICByZXR1cm4gJ2ZsZXgtc3RhcnQnO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuUE9TVCkge1xyXG4gICAgICByZXR1cm4gJ2ZsZXgtZW5kJztcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VwYXJhdG9yQ29sb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAncmdiKGZyb20gdmFyKC0tJyArIHRoaXMuZ2V0Q29sb3IoKSArICctY29sb3IpIHIgZyBiIC8gMC44KSc7XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoZGVzY3JpcHRvci50eXBlID09PSAnU0VQQVJBVE9SJykge1xyXG4gIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3JcIj5cclxuICAgIEBpZiAoZGVzY3JpcHRvci50aXRsZSkge1xyXG4gICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvci1sYWJlbFwiIFtzdHlsZS5jb2xvcl09XCJnZXRTZXBhcmF0b3JDb2xvcigpXCI+XHJcbiAgICAgICAge3sgZGVzY3JpcHRvci50aXRsZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICB9XHJcbiAgICA8aHIgY2xhc3M9XCJzZXBhcmF0b3ItbGluZVwiIFtzdHlsZS5ib3JkZXItdG9wLWNvbG9yXT1cImdldFNlcGFyYXRvckNvbG9yKClcIiAvPlxyXG4gIDwvZGl2PlxyXG59IEBlbHNlIHtcclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uV2l0aEJhZGdlXCI+PC9uZy1jb250YWluZXI+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uV2l0aEJhZGdlPlxyXG4gIEBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmJhZGdlKSB7XHJcbiAgICA8dWktYmFkZ2UgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvci5iYWRnZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdWktYmFkZ2U+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2J1dHRvblRlbXBsYXRlPlxyXG4gIEBpZiAoY29tcExpYiA9PT0gY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHBCdXR0b25cclxuICAgICAgcFJpcHBsZVxyXG4gICAgICBbc21hcnRUb29sdGlwXT1cImRlc2NyaXB0b3IudG9vbHRpcFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhIWRpc2FibGVkXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIG1haW5BY3Rpb25Nb2RlbClcIlxyXG4gICAgICAoZGJsY2xpY2spPVwib25BY3Rpb25Eb3VibGVDbGlja2VkKCRldmVudClcIlxyXG4gICAgICBbYXV0b2ZvY3VzXT1cImZhbHNlXCJcclxuICAgICAgW25nU3R5bGVdPVwiY2FsY1N0eWxlKGRlc2NyaXB0b3Iuc3R5bGUpXCJcclxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Q29tYmluZWRDbGFzc2VzKClcIlxyXG4gICAgICBbc3R5bGUuanVzdGlmeS1jb250ZW50XT1cImdldEp1c3RpZnlDb250ZW50KClcIlxyXG4gICAgICBjbGFzcz1cInt7IGdldGJ0bkNsYXNzKCkgfX0ge3sgYWRkZWRDc3NDbGFzcyB9fVwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJjb2RlID8/IG51bGxcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNPbmx5SWNvbigpOyB0aGVuIGJ1dHRvbkljb247IGVsc2UgdGV4dFwiPjwvZGl2PlxyXG4gICAgPC9idXR0b24+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1idXR0b25cclxuICAgICAgW3NtYXJ0VG9vbHRpcF09XCJkZXNjcmlwdG9yLnRvb2x0aXBcIlxyXG4gICAgICBbY29sb3JdPVwiZGVzY3JpcHRvci5jb2xvclwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhIWRpc2FibGVkXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIG1haW5BY3Rpb25Nb2RlbClcIlxyXG4gICAgICAoZGJsY2xpY2spPVwib25BY3Rpb25Eb3VibGVDbGlja2VkKCRldmVudClcIlxyXG4gICAgICBbbmdTdHlsZV09XCJjYWxjU3R5bGUoZGVzY3JpcHRvci5zdHlsZSlcIlxyXG4gICAgICBbbmdDbGFzc109XCJnZXRDb21iaW5lZENsYXNzZXMoKVwiXHJcbiAgICAgIFtzdHlsZS5qdXN0aWZ5LWNvbnRlbnRdPVwiZ2V0SnVzdGlmeUNvbnRlbnQoKVwiXHJcbiAgICAgIGNsYXNzPVwie3sgZ2V0YnRuQ2xhc3MoKSB9fSB7eyBhZGRlZENzc0NsYXNzIH19XCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cImNvZGUgPz8gbnVsbFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc09ubHlJY29uKCk7IHRoZW4gYnV0dG9uSWNvbjsgZWxzZSB0ZXh0XCI+PC9kaXY+XHJcbiAgICA8L2J1dHRvbj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RleHQ+XHJcbiAgQGlmIChyZW5kZXJQcmUoKSB8fCByZW5kZXJQbGFjZWhvbGRlclByZSgpKSB7XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uSWNvblwiIC8+XHJcbiAgfVxyXG4gIHt7IGRlc2NyaXB0b3IudGl0bGUgfX1cclxuICBAaWYgKHJlbmRlclBvc3QoKSB8fCByZW5kZXJQbGFjZWhvbGRlclBvc3QoKSkge1xyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkljb25cIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uSWNvbj5cclxuICBAaWYgKHJlbmRlclBsYWNlaG9sZGVyUHJlKCkgfHwgcmVuZGVyUGxhY2Vob2xkZXJQb3N0KCkpIHtcclxuICAgIDxzbWFydC1pY29uPjwvc21hcnQtaWNvbj5cclxuICB9IEBlbHNlIGlmIChkZXNjcmlwdG9yLmljb25SZXNvdXJjZSkge1xyXG4gICAgPHNtYXJ0LWljb25cclxuICAgICAgW2ltYWdlUmVzb3VyY2VdPVwiZGVzY3JpcHRvci5pY29uUmVzb3VyY2VcIlxyXG4gICAgICBbY29sb3JdPVwiZGVzY3JpcHRvci5pY29uQ29sb3IgfHwgZGVzY3JpcHRvci5jb2xvclwiXHJcbiAgICA+PC9zbWFydC1pY29uPlxyXG4gIH0gQGVsc2Uge1xyXG4gICAgPHNtYXJ0LWljb25cclxuICAgICAgW2ljb25dPVwiZGVzY3JpcHRvci5pY29uXCJcclxuICAgICAgW2NvbG9yXT1cImRlc2NyaXB0b3IuaWNvbkNvbG9yIHx8IGRlc2NyaXB0b3IuY29sb3JcIlxyXG4gICAgPjwvc21hcnQtaWNvbj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==