barsa-sap-ui 2.0.112 → 2.0.114

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.
@@ -1,5 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component, HostBinding } from '@angular/core';
2
2
  import { FindLayoutSettingFromLayout94, FormPropsBaseComponent, LayoutService } from 'barsa-novin-ray-core';
3
+ import { map } from 'rxjs';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/common";
5
6
  import * as i2 from "barsa-novin-ray-core";
@@ -12,7 +13,6 @@ export class BarsaFormSideContentComponent extends FormPropsBaseComponent {
12
13
  constructor() {
13
14
  super(...arguments);
14
15
  this._isSmallDevice = false;
15
- this.isOpenQuickAccess = false;
16
16
  this.afterViewInit = false;
17
17
  }
18
18
  ngOnInit() {
@@ -22,22 +22,32 @@ export class BarsaFormSideContentComponent extends FormPropsBaseComponent {
22
22
  this._background = this.parameters.BgColor || 'var(--sapBaseColor)';
23
23
  this.autoHeight = this.parameters.AutoHeight;
24
24
  this.smallDevice = this._isSmallDeviceSize(this.deviceSize);
25
- this.isOpenQuickAccess = Number(this.parameters.FirstDefaultMenuState) === 1;
25
+ const sidebarState = Number(this.parameters.FirstDefaultMenuState) === 1;
26
+ if (sidebarState) {
27
+ this.openSidebar();
28
+ }
29
+ this.isOpenQuickAccess$ = this._formPanelService.sidebarState$.pipe(map((c) => (c === 'open' ? true : false)));
26
30
  }
27
31
  ngAfterViewInit() {
28
32
  super.ngAfterViewInit();
29
33
  this.afterViewInit = true;
30
34
  }
35
+ openSidebar() {
36
+ this._formPanelService.changeSidebarState('open');
37
+ }
38
+ closeSidebar() {
39
+ this._formPanelService.changeSidebarState('close');
40
+ }
31
41
  _isSmallDeviceSize(deviceSize) {
32
42
  const isSmallDevice = deviceSize === 's' || deviceSize === 'm' ? true : false;
33
43
  return isSmallDevice;
34
44
  }
35
45
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaFormSideContentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
36
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaFormSideContentComponent, selector: "bsu-barsa-form-side-content", host: { properties: { "class.smallDevice": "this._isSmallDevice", "style.background": "this._background" } }, providers: [LayoutService], usesInheritance: true, ngImport: i0, template: "@if(isMobile) {\n<button\n fd-shellbar-side-nav\n fd-button\n fdType=\"transparent\"\n glyph=\"menu2\"\n style=\"width: 2.75rem\"\n (click)=\"$event.stopPropagation(); isOpenQuickAccess = true\"\n></button>\n\n<div\n class=\"sidemenu-h tw-fixed tw-bg-white tw-transition-all tw-z-[1001] tw-shadow-2xl tw-overflow-auto\"\n [ngClass]=\"{ 'tw-w-4/5': isMobile }\"\n [class.-tw-right-full]=\"isMobile\"\n [class.tw-w-96]=\"!isMobile\"\n [class.-tw-right-96]=\"!isMobile\"\n fillEmptySpace\n [class.!tw-right-0]=\"isOpenQuickAccess\"\n (click)=\"$event.stopPropagation()\"\n #sidebar\n>\n <button\n fd-shellbar-side-nav\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n (click)=\"$event.stopPropagation(); isOpenQuickAccess = false\"\n routeFormChange\n [bodyClick]=\"true\"\n (stateChanged)=\"afterViewInit && (isOpenQuickAccess = false)\"\n ></button>\n @if (sideContentLayout ) {\n <bsu-ly-layout-panel\n style=\"width: 100%\"\n [config]=\"sideContentLayout\"\n [hideTitle]=\"parameters?.HideSideContentTitle === true\"\n ></bsu-ly-layout-panel\n >}\n</div>\n} @if (sideContentLayout && mainContentLayout) {\n\n<fd-dynamic-side-content\n [class.rtl]=\"rtl\"\n fillEmptySpace\n [decrement]=\"'40px'\"\n [disable]=\"autoHeight\"\n [setMinHeight]=\"true\"\n [size]=\"isMobile ? 'sm' : smallDevice ? 'md' : 'xl'\"\n>\n <fd-dynamic-side-content-side>\n <bsu-ly-layout-panel\n fillEmptySpace\n [disable]=\"!parameters?.FixSideContentHeight\"\n [style.overflow-y]=\"parameters?.FixSideContentHeight === true ? 'auto' : null\"\n [config]=\"sideContentLayout\"\n [hideTitle]=\"parameters?.HideSideContentTitle === true\"\n >\n </bsu-ly-layout-panel>\n </fd-dynamic-side-content-side>\n <fd-dynamic-side-content-main [style.width]=\"isMobile ? null : parameters?.MainContentWidth\">\n <bsu-ly-layout-panel [config]=\"mainContentLayout\" [hideTitle]=\"parameters?.HideMainContentTitle === true\">\n </bsu-ly-layout-panel>\n </fd-dynamic-side-content-main>\n</fd-dynamic-side-content>\n} @else {\n<fd-message-strip type=\"error\" [dismissible]=\"false\"\n >side content and main content does not defined correctly.</fd-message-strip\n>\n}\n<ng-template #error>\n <fd-message-strip type=\"error\" [dismissible]=\"false\"\n >side content and main content does not defined correctly.</fd-message-strip\n >\n</ng-template>\n", styles: [":host{width:100%;height:100%;display:flex;position:relative;flex-direction:column}fd-dynamic-side-content-main{border:.0625rem solid var(--sapTile_SeparatorColor, #ccc)!important;background-color:var(--sapBaseColor)}fd-dynamic-side-content-side{border:.0625rem solid var(--sapTile_SeparatorColor, #ccc)!important;border-left:none;background-color:var(--sapBaseColor)}fd-dynamic-side-content.rtl fd-dynamic-side-content-side{border-left:none!important}:host ::ng-deep bnrc-field-ui{padding:0!important}:host ::ng-deep bsu-ly-vertical-layout bsu-ly-layout-panel:last-of-type .fd-panel__content{border-bottom:none!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight"], exportAs: ["fillEmptySpace"] }, { kind: "directive", type: i2.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "directive", type: i2.RouteFormChangeDirective, selector: "[routeFormChange]", inputs: ["handleBodyClick"], outputs: ["stateChanged"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4.DynamicSideContentComponent, selector: "fd-dynamic-side-content", inputs: ["position", "size", "id"] }, { kind: "component", type: i4.DynamicSideContentSideComponent, selector: "fd-dynamic-side-content-side", inputs: ["id"] }, { kind: "component", type: i4.DynamicSideContentMainComponent, selector: "fd-dynamic-side-content-main", inputs: ["id"] }, { kind: "component", type: i5.MessageStripComponent, selector: "fd-message-strip", inputs: ["class", "dismissible", "noIcon", "type", "id", "ariaLabelledBy", "ariaLabel", "width", "minWidth", "marginBottom", "indicationColor"], outputs: ["onDismiss"] }, { kind: "directive", type: i6.ShellbarSidenavDirective, selector: "[fdShellbarSidenav], [fd-shellbar-side-nav]" }, { kind: "component", type: i7.LyLayoutPanelComponent, selector: "bsu-ly-layout-panel", inputs: ["renderItems", "isRoot", "hideTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
46
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaFormSideContentComponent, selector: "bsu-barsa-form-side-content", host: { properties: { "class.smallDevice": "this._isSmallDevice", "style.background": "this._background" } }, providers: [LayoutService], usesInheritance: true, ngImport: i0, template: "@if(isMobile) {\n<button\n fd-shellbar-side-nav\n fd-button\n fdType=\"transparent\"\n glyph=\"menu2\"\n style=\"width: 2.75rem\"\n (click)=\"$event.stopPropagation(); openSidebar()\"\n></button>\n\n<div\n class=\"sidemenu-h tw-fixed tw-bg-white tw-transition-all tw-z-[1001] tw-shadow-2xl tw-overflow-auto\"\n [ngClass]=\"{ 'tw-w-4/5': isMobile }\"\n [class.-tw-right-full]=\"isMobile\"\n [class.tw-w-96]=\"!isMobile\"\n [class.-tw-right-96]=\"!isMobile\"\n fillEmptySpace\n [class.!tw-right-0]=\"isOpenQuickAccess$ | async\"\n (click)=\"$event.stopPropagation()\"\n #sidebar\n>\n <button\n fd-shellbar-side-nav\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n (click)=\"$event.stopPropagation(); closeSidebar()\"\n routeFormChange\n [bodyClick]=\"true\"\n (stateChanged)=\"afterViewInit && closeSidebar()\"\n ></button>\n @if (sideContentLayout ) {\n <bsu-ly-layout-panel\n style=\"width: 100%\"\n [config]=\"sideContentLayout\"\n [hideTitle]=\"parameters?.HideSideContentTitle === true\"\n class=\"xxx\"\n ></bsu-ly-layout-panel\n >}\n</div>\n} @if (sideContentLayout && mainContentLayout) {\n\n<fd-dynamic-side-content\n [class.rtl]=\"rtl\"\n fillEmptySpace\n [decrement]=\"'40px'\"\n [disable]=\"autoHeight\"\n [setMinHeight]=\"true\"\n [size]=\"isMobile ? 'sm' : smallDevice ? 'md' : 'xl'\"\n>\n <fd-dynamic-side-content-side>\n <bsu-ly-layout-panel\n fillEmptySpace\n [disable]=\"!parameters?.FixSideContentHeight\"\n [style.overflow-y]=\"parameters?.FixSideContentHeight === true ? 'auto' : null\"\n [config]=\"sideContentLayout\"\n [hideTitle]=\"parameters?.HideSideContentTitle === true\"\n >\n </bsu-ly-layout-panel>\n </fd-dynamic-side-content-side>\n <fd-dynamic-side-content-main [style.width]=\"isMobile ? null : parameters?.MainContentWidth\">\n <bsu-ly-layout-panel [config]=\"mainContentLayout\" [hideTitle]=\"parameters?.HideMainContentTitle === true\">\n </bsu-ly-layout-panel>\n </fd-dynamic-side-content-main>\n</fd-dynamic-side-content>\n} @else {\n<fd-message-strip type=\"error\" [dismissible]=\"false\"\n >side content and main content does not defined correctly.</fd-message-strip\n>\n}\n<ng-template #error>\n <fd-message-strip type=\"error\" [dismissible]=\"false\"\n >side content and main content does not defined correctly.</fd-message-strip\n >\n</ng-template>\n", styles: [":host{width:100%;height:100%;display:flex;position:relative;flex-direction:column}fd-dynamic-side-content-main{border:.0625rem solid var(--sapTile_SeparatorColor, #ccc)!important;background-color:var(--sapBaseColor)}fd-dynamic-side-content-side{border:.0625rem solid var(--sapTile_SeparatorColor, #ccc)!important;border-left:none;background-color:var(--sapBaseColor)}fd-dynamic-side-content.rtl fd-dynamic-side-content-side{border-left:none!important}:host ::ng-deep bnrc-field-ui{padding:0!important}:host ::ng-deep bsu-ly-vertical-layout bsu-ly-layout-panel:last-of-type .fd-panel__content{border-bottom:none!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight"], exportAs: ["fillEmptySpace"] }, { kind: "directive", type: i2.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "directive", type: i2.RouteFormChangeDirective, selector: "[routeFormChange]", inputs: ["handleBodyClick"], outputs: ["stateChanged"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4.DynamicSideContentComponent, selector: "fd-dynamic-side-content", inputs: ["position", "size", "id"] }, { kind: "component", type: i4.DynamicSideContentSideComponent, selector: "fd-dynamic-side-content-side", inputs: ["id"] }, { kind: "component", type: i4.DynamicSideContentMainComponent, selector: "fd-dynamic-side-content-main", inputs: ["id"] }, { kind: "component", type: i5.MessageStripComponent, selector: "fd-message-strip", inputs: ["class", "dismissible", "noIcon", "type", "id", "ariaLabelledBy", "ariaLabel", "width", "minWidth", "marginBottom", "indicationColor"], outputs: ["onDismiss"] }, { kind: "directive", type: i6.ShellbarSidenavDirective, selector: "[fdShellbarSidenav], [fd-shellbar-side-nav]" }, { kind: "component", type: i7.LyLayoutPanelComponent, selector: "bsu-ly-layout-panel", inputs: ["renderItems", "isRoot", "hideTitle"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37
47
  }
38
48
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaFormSideContentComponent, decorators: [{
39
49
  type: Component,
40
- args: [{ selector: 'bsu-barsa-form-side-content', changeDetection: ChangeDetectionStrategy.OnPush, providers: [LayoutService], template: "@if(isMobile) {\n<button\n fd-shellbar-side-nav\n fd-button\n fdType=\"transparent\"\n glyph=\"menu2\"\n style=\"width: 2.75rem\"\n (click)=\"$event.stopPropagation(); isOpenQuickAccess = true\"\n></button>\n\n<div\n class=\"sidemenu-h tw-fixed tw-bg-white tw-transition-all tw-z-[1001] tw-shadow-2xl tw-overflow-auto\"\n [ngClass]=\"{ 'tw-w-4/5': isMobile }\"\n [class.-tw-right-full]=\"isMobile\"\n [class.tw-w-96]=\"!isMobile\"\n [class.-tw-right-96]=\"!isMobile\"\n fillEmptySpace\n [class.!tw-right-0]=\"isOpenQuickAccess\"\n (click)=\"$event.stopPropagation()\"\n #sidebar\n>\n <button\n fd-shellbar-side-nav\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n (click)=\"$event.stopPropagation(); isOpenQuickAccess = false\"\n routeFormChange\n [bodyClick]=\"true\"\n (stateChanged)=\"afterViewInit && (isOpenQuickAccess = false)\"\n ></button>\n @if (sideContentLayout ) {\n <bsu-ly-layout-panel\n style=\"width: 100%\"\n [config]=\"sideContentLayout\"\n [hideTitle]=\"parameters?.HideSideContentTitle === true\"\n ></bsu-ly-layout-panel\n >}\n</div>\n} @if (sideContentLayout && mainContentLayout) {\n\n<fd-dynamic-side-content\n [class.rtl]=\"rtl\"\n fillEmptySpace\n [decrement]=\"'40px'\"\n [disable]=\"autoHeight\"\n [setMinHeight]=\"true\"\n [size]=\"isMobile ? 'sm' : smallDevice ? 'md' : 'xl'\"\n>\n <fd-dynamic-side-content-side>\n <bsu-ly-layout-panel\n fillEmptySpace\n [disable]=\"!parameters?.FixSideContentHeight\"\n [style.overflow-y]=\"parameters?.FixSideContentHeight === true ? 'auto' : null\"\n [config]=\"sideContentLayout\"\n [hideTitle]=\"parameters?.HideSideContentTitle === true\"\n >\n </bsu-ly-layout-panel>\n </fd-dynamic-side-content-side>\n <fd-dynamic-side-content-main [style.width]=\"isMobile ? null : parameters?.MainContentWidth\">\n <bsu-ly-layout-panel [config]=\"mainContentLayout\" [hideTitle]=\"parameters?.HideMainContentTitle === true\">\n </bsu-ly-layout-panel>\n </fd-dynamic-side-content-main>\n</fd-dynamic-side-content>\n} @else {\n<fd-message-strip type=\"error\" [dismissible]=\"false\"\n >side content and main content does not defined correctly.</fd-message-strip\n>\n}\n<ng-template #error>\n <fd-message-strip type=\"error\" [dismissible]=\"false\"\n >side content and main content does not defined correctly.</fd-message-strip\n >\n</ng-template>\n", styles: [":host{width:100%;height:100%;display:flex;position:relative;flex-direction:column}fd-dynamic-side-content-main{border:.0625rem solid var(--sapTile_SeparatorColor, #ccc)!important;background-color:var(--sapBaseColor)}fd-dynamic-side-content-side{border:.0625rem solid var(--sapTile_SeparatorColor, #ccc)!important;border-left:none;background-color:var(--sapBaseColor)}fd-dynamic-side-content.rtl fd-dynamic-side-content-side{border-left:none!important}:host ::ng-deep bnrc-field-ui{padding:0!important}:host ::ng-deep bsu-ly-vertical-layout bsu-ly-layout-panel:last-of-type .fd-panel__content{border-bottom:none!important}\n"] }]
50
+ args: [{ selector: 'bsu-barsa-form-side-content', changeDetection: ChangeDetectionStrategy.OnPush, providers: [LayoutService], template: "@if(isMobile) {\n<button\n fd-shellbar-side-nav\n fd-button\n fdType=\"transparent\"\n glyph=\"menu2\"\n style=\"width: 2.75rem\"\n (click)=\"$event.stopPropagation(); openSidebar()\"\n></button>\n\n<div\n class=\"sidemenu-h tw-fixed tw-bg-white tw-transition-all tw-z-[1001] tw-shadow-2xl tw-overflow-auto\"\n [ngClass]=\"{ 'tw-w-4/5': isMobile }\"\n [class.-tw-right-full]=\"isMobile\"\n [class.tw-w-96]=\"!isMobile\"\n [class.-tw-right-96]=\"!isMobile\"\n fillEmptySpace\n [class.!tw-right-0]=\"isOpenQuickAccess$ | async\"\n (click)=\"$event.stopPropagation()\"\n #sidebar\n>\n <button\n fd-shellbar-side-nav\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n (click)=\"$event.stopPropagation(); closeSidebar()\"\n routeFormChange\n [bodyClick]=\"true\"\n (stateChanged)=\"afterViewInit && closeSidebar()\"\n ></button>\n @if (sideContentLayout ) {\n <bsu-ly-layout-panel\n style=\"width: 100%\"\n [config]=\"sideContentLayout\"\n [hideTitle]=\"parameters?.HideSideContentTitle === true\"\n class=\"xxx\"\n ></bsu-ly-layout-panel\n >}\n</div>\n} @if (sideContentLayout && mainContentLayout) {\n\n<fd-dynamic-side-content\n [class.rtl]=\"rtl\"\n fillEmptySpace\n [decrement]=\"'40px'\"\n [disable]=\"autoHeight\"\n [setMinHeight]=\"true\"\n [size]=\"isMobile ? 'sm' : smallDevice ? 'md' : 'xl'\"\n>\n <fd-dynamic-side-content-side>\n <bsu-ly-layout-panel\n fillEmptySpace\n [disable]=\"!parameters?.FixSideContentHeight\"\n [style.overflow-y]=\"parameters?.FixSideContentHeight === true ? 'auto' : null\"\n [config]=\"sideContentLayout\"\n [hideTitle]=\"parameters?.HideSideContentTitle === true\"\n >\n </bsu-ly-layout-panel>\n </fd-dynamic-side-content-side>\n <fd-dynamic-side-content-main [style.width]=\"isMobile ? null : parameters?.MainContentWidth\">\n <bsu-ly-layout-panel [config]=\"mainContentLayout\" [hideTitle]=\"parameters?.HideMainContentTitle === true\">\n </bsu-ly-layout-panel>\n </fd-dynamic-side-content-main>\n</fd-dynamic-side-content>\n} @else {\n<fd-message-strip type=\"error\" [dismissible]=\"false\"\n >side content and main content does not defined correctly.</fd-message-strip\n>\n}\n<ng-template #error>\n <fd-message-strip type=\"error\" [dismissible]=\"false\"\n >side content and main content does not defined correctly.</fd-message-strip\n >\n</ng-template>\n", styles: [":host{width:100%;height:100%;display:flex;position:relative;flex-direction:column}fd-dynamic-side-content-main{border:.0625rem solid var(--sapTile_SeparatorColor, #ccc)!important;background-color:var(--sapBaseColor)}fd-dynamic-side-content-side{border:.0625rem solid var(--sapTile_SeparatorColor, #ccc)!important;border-left:none;background-color:var(--sapBaseColor)}fd-dynamic-side-content.rtl fd-dynamic-side-content-side{border-left:none!important}:host ::ng-deep bnrc-field-ui{padding:0!important}:host ::ng-deep bsu-ly-vertical-layout bsu-ly-layout-panel:last-of-type .fd-panel__content{border-bottom:none!important}\n"] }]
41
51
  }], propDecorators: { _isSmallDevice: [{
42
52
  type: HostBinding,
43
53
  args: ['class.smallDevice']
@@ -45,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
45
55
  type: HostBinding,
46
56
  args: ['style.background']
47
57
  }] } });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQvYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQvYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUlILDZCQUE2QixFQUM3QixzQkFBc0IsRUFDdEIsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7QUFTOUIsTUFBTSxPQUFPLDZCQUE4QixTQUFRLHNCQUFzQjtJQVB6RTs7UUFRc0MsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFNekQsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0tBa0J6QjtJQWpCRyxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLHFCQUFxQixDQUFDO1FBQ3BFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsZUFBZTtRQUNYLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBQ1Msa0JBQWtCLENBQUMsVUFBaUM7UUFDMUQsTUFBTSxhQUFhLEdBQUcsVUFBVSxLQUFLLEdBQUcsSUFBSSxVQUFVLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM5RSxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDOzhHQTFCUSw2QkFBNkI7a0dBQTdCLDZCQUE2QixvS0FGM0IsQ0FBQyxhQUFhLENBQUMsaURDZjlCLGlpRkEwRUE7OzJGRHpEYSw2QkFBNkI7a0JBUHpDLFNBQVM7K0JBQ0ksNkJBQTZCLG1CQUd0Qix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsYUFBYSxDQUFDOzhCQUdRLGNBQWM7c0JBQS9DLFdBQVc7dUJBQUMsbUJBQW1CO2dCQUNDLFdBQVc7c0JBQTNDLFdBQVc7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxyXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIExheW91dFNldHRpbmcsXHJcbiAgICBGaW5kTGF5b3V0U2V0dGluZ0Zyb21MYXlvdXQ5NCxcclxuICAgIEZvcm1Qcm9wc0Jhc2VDb21wb25lbnQsXHJcbiAgICBMYXlvdXRTZXJ2aWNlXHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JzdS1iYXJzYS1mb3JtLXNpZGUtY29udGVudCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgcHJvdmlkZXJzOiBbTGF5b3V0U2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhcnNhRm9ybVNpZGVDb250ZW50Q29tcG9uZW50IGV4dGVuZHMgRm9ybVByb3BzQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtYWxsRGV2aWNlJykgX2lzU21hbGxEZXZpY2UgPSBmYWxzZTtcclxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuYmFja2dyb3VuZCcpIF9iYWNrZ3JvdW5kOiBzdHJpbmc7XHJcbiAgICBwYXJhbWV0ZXJzOiBCYXJzYUZvcm1TaWRlQ29udGVudFNldHRpbmc7XHJcbiAgICBzaWRlQ29udGVudExheW91dDogTGF5b3V0U2V0dGluZyB8IG51bGw7XHJcbiAgICBtYWluQ29udGVudExheW91dDogTGF5b3V0U2V0dGluZyB8IG51bGw7XHJcbiAgICBhdXRvSGVpZ2h0OiBib29sZWFuO1xyXG4gICAgaXNPcGVuUXVpY2tBY2Nlc3MgPSBmYWxzZTtcclxuICAgIHNtYWxsRGV2aWNlOiBib29sZWFuO1xyXG4gICAgYWZ0ZXJWaWV3SW5pdCA9IGZhbHNlO1xyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnNpZGVDb250ZW50TGF5b3V0ID0gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQodGhpcy5sYXlvdXQ5NCwgdGhpcy5wYXJhbWV0ZXJzLlNpZGVDb250ZW50KTtcclxuICAgICAgICB0aGlzLm1haW5Db250ZW50TGF5b3V0ID0gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQodGhpcy5sYXlvdXQ5NCwgdGhpcy5wYXJhbWV0ZXJzLk1haW5Db250ZW50KTtcclxuICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kID0gdGhpcy5wYXJhbWV0ZXJzLkJnQ29sb3IgfHwgJ3ZhcigtLXNhcEJhc2VDb2xvciknO1xyXG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRoaXMucGFyYW1ldGVycy5BdXRvSGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuc21hbGxEZXZpY2UgPSB0aGlzLl9pc1NtYWxsRGV2aWNlU2l6ZSh0aGlzLmRldmljZVNpemUpO1xyXG4gICAgICAgIHRoaXMuaXNPcGVuUXVpY2tBY2Nlc3MgPSBOdW1iZXIodGhpcy5wYXJhbWV0ZXJzLkZpcnN0RGVmYXVsdE1lbnVTdGF0ZSkgPT09IDE7XHJcbiAgICB9XHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XHJcbiAgICAgICAgdGhpcy5hZnRlclZpZXdJbml0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfaXNTbWFsbERldmljZVNpemUoZGV2aWNlU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgaXNTbWFsbERldmljZSA9IGRldmljZVNpemUgPT09ICdzJyB8fCBkZXZpY2VTaXplID09PSAnbScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGlzU21hbGxEZXZpY2U7XHJcbiAgICB9XHJcbn1cclxuaW50ZXJmYWNlIEJhcnNhRm9ybVNpZGVDb250ZW50U2V0dGluZyBleHRlbmRzIE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgU2lkZUNvbnRlbnQ6IHN0cmluZztcclxuICAgIE1haW5Db250ZW50OiBzdHJpbmc7XHJcbiAgICBIaWRlU2lkZUNvbnRlbnRUaXRsZTogYm9vbGVhbjtcclxuICAgIEhpZGVNYWluQ29udGVudFRpdGxlOiBib29sZWFuO1xyXG4gICAgQmdDb2xvcjogc3RyaW5nO1xyXG4gICAgTWFpbkNvbnRlbnRXaWR0aDogc3RyaW5nO1xyXG4gICAgQXV0b0hlaWdodDogYm9vbGVhbjtcclxuICAgIEZpcnN0RGVmYXVsdE1lbnVTdGF0ZTogbnVtYmVyO1xyXG4gICAgRml4U2lkZUNvbnRlbnRIZWlnaHQ6IGJvb2xlYW47XHJcbn1cclxuIiwiQGlmKGlzTW9iaWxlKSB7XG48YnV0dG9uXG4gICAgZmQtc2hlbGxiYXItc2lkZS1uYXZcbiAgICBmZC1idXR0b25cbiAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgZ2x5cGg9XCJtZW51MlwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMi43NXJlbVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgaXNPcGVuUXVpY2tBY2Nlc3MgPSB0cnVlXCJcbj48L2J1dHRvbj5cblxuPGRpdlxuICAgIGNsYXNzPVwic2lkZW1lbnUtaCB0dy1maXhlZCB0dy1iZy13aGl0ZSB0dy10cmFuc2l0aW9uLWFsbCB0dy16LVsxMDAxXSB0dy1zaGFkb3ctMnhsIHR3LW92ZXJmbG93LWF1dG9cIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3R3LXctNC81JzogaXNNb2JpbGUgfVwiXG4gICAgW2NsYXNzLi10dy1yaWdodC1mdWxsXT1cImlzTW9iaWxlXCJcbiAgICBbY2xhc3MudHctdy05Nl09XCIhaXNNb2JpbGVcIlxuICAgIFtjbGFzcy4tdHctcmlnaHQtOTZdPVwiIWlzTW9iaWxlXCJcbiAgICBmaWxsRW1wdHlTcGFjZVxuICAgIFtjbGFzcy4hdHctcmlnaHQtMF09XCJpc09wZW5RdWlja0FjY2Vzc1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgI3NpZGViYXJcbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLXNoZWxsYmFyLXNpZGUtbmF2XG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIGdseXBoPVwiZGVjbGluZVwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGlzT3BlblF1aWNrQWNjZXNzID0gZmFsc2VcIlxuICAgICAgICByb3V0ZUZvcm1DaGFuZ2VcbiAgICAgICAgW2JvZHlDbGlja109XCJ0cnVlXCJcbiAgICAgICAgKHN0YXRlQ2hhbmdlZCk9XCJhZnRlclZpZXdJbml0ICYmIChpc09wZW5RdWlja0FjY2VzcyA9IGZhbHNlKVwiXG4gICAgPjwvYnV0dG9uPlxuICAgIEBpZiAoc2lkZUNvbnRlbnRMYXlvdXQgKSB7XG4gICAgPGJzdS1seS1sYXlvdXQtcGFuZWxcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXG4gICAgICAgIFtjb25maWddPVwic2lkZUNvbnRlbnRMYXlvdXRcIlxuICAgICAgICBbaGlkZVRpdGxlXT1cInBhcmFtZXRlcnM/LkhpZGVTaWRlQ29udGVudFRpdGxlID09PSB0cnVlXCJcbiAgICA+PC9ic3UtbHktbGF5b3V0LXBhbmVsXG4gICAgPn1cbjwvZGl2PlxufSBAaWYgKHNpZGVDb250ZW50TGF5b3V0ICYmIG1haW5Db250ZW50TGF5b3V0KSB7XG5cbjxmZC1keW5hbWljLXNpZGUtY29udGVudFxuICAgIFtjbGFzcy5ydGxdPVwicnRsXCJcbiAgICBmaWxsRW1wdHlTcGFjZVxuICAgIFtkZWNyZW1lbnRdPVwiJzQwcHgnXCJcbiAgICBbZGlzYWJsZV09XCJhdXRvSGVpZ2h0XCJcbiAgICBbc2V0TWluSGVpZ2h0XT1cInRydWVcIlxuICAgIFtzaXplXT1cImlzTW9iaWxlID8gJ3NtJyA6IHNtYWxsRGV2aWNlID8gJ21kJyA6ICd4bCdcIlxuPlxuICAgIDxmZC1keW5hbWljLXNpZGUtY29udGVudC1zaWRlPlxuICAgICAgICA8YnN1LWx5LWxheW91dC1wYW5lbFxuICAgICAgICAgICAgZmlsbEVtcHR5U3BhY2VcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cIiFwYXJhbWV0ZXJzPy5GaXhTaWRlQ29udGVudEhlaWdodFwiXG4gICAgICAgICAgICBbc3R5bGUub3ZlcmZsb3cteV09XCJwYXJhbWV0ZXJzPy5GaXhTaWRlQ29udGVudEhlaWdodCA9PT0gdHJ1ZSA/ICdhdXRvJyA6IG51bGxcIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJzaWRlQ29udGVudExheW91dFwiXG4gICAgICAgICAgICBbaGlkZVRpdGxlXT1cInBhcmFtZXRlcnM/LkhpZGVTaWRlQ29udGVudFRpdGxlID09PSB0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICA8L2JzdS1seS1sYXlvdXQtcGFuZWw+XG4gICAgPC9mZC1keW5hbWljLXNpZGUtY29udGVudC1zaWRlPlxuICAgIDxmZC1keW5hbWljLXNpZGUtY29udGVudC1tYWluIFtzdHlsZS53aWR0aF09XCJpc01vYmlsZSA/IG51bGwgOiBwYXJhbWV0ZXJzPy5NYWluQ29udGVudFdpZHRoXCI+XG4gICAgICAgIDxic3UtbHktbGF5b3V0LXBhbmVsIFtjb25maWddPVwibWFpbkNvbnRlbnRMYXlvdXRcIiBbaGlkZVRpdGxlXT1cInBhcmFtZXRlcnM/LkhpZGVNYWluQ29udGVudFRpdGxlID09PSB0cnVlXCI+XG4gICAgICAgIDwvYnN1LWx5LWxheW91dC1wYW5lbD5cbiAgICA8L2ZkLWR5bmFtaWMtc2lkZS1jb250ZW50LW1haW4+XG48L2ZkLWR5bmFtaWMtc2lkZS1jb250ZW50PlxufSBAZWxzZSB7XG48ZmQtbWVzc2FnZS1zdHJpcCB0eXBlPVwiZXJyb3JcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIlxuICAgID5zaWRlIGNvbnRlbnQgYW5kIG1haW4gY29udGVudCBkb2VzIG5vdCBkZWZpbmVkIGNvcnJlY3RseS48L2ZkLW1lc3NhZ2Utc3RyaXBcbj5cbn1cbjxuZy10ZW1wbGF0ZSAjZXJyb3I+XG4gICAgPGZkLW1lc3NhZ2Utc3RyaXAgdHlwZT1cImVycm9yXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCJcbiAgICAgICAgPnNpZGUgY29udGVudCBhbmQgbWFpbiBjb250ZW50IGRvZXMgbm90IGRlZmluZWQgY29ycmVjdGx5LjwvZmQtbWVzc2FnZS1zdHJpcFxuICAgID5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQvYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQvYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUlILDZCQUE2QixFQUM3QixzQkFBc0IsRUFDdEIsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVN2QyxNQUFNLE9BQU8sNkJBQThCLFNBQVEsc0JBQXNCO0lBUHpFOztRQVFzQyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQVF6RCxrQkFBYSxHQUFHLEtBQUssQ0FBQztLQTRCekI7SUEzQkcsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsNkJBQTZCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25HLElBQUksQ0FBQyxpQkFBaUIsR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQztRQUNwRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFDRCxlQUFlO1FBQ1gsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFDRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDUyxrQkFBa0IsQ0FBQyxVQUFpQztRQUMxRCxNQUFNLGFBQWEsR0FBRyxVQUFVLEtBQUssR0FBRyxJQUFJLFVBQVUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzlFLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7OEdBcENRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLG9LQUYzQixDQUFDLGFBQWEsQ0FBQyxpRENoQjlCLDhoRkEyRUE7OzJGRHpEYSw2QkFBNkI7a0JBUHpDLFNBQVM7K0JBQ0ksNkJBQTZCLG1CQUd0Qix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsYUFBYSxDQUFDOzhCQUdRLGNBQWM7c0JBQS9DLFdBQVc7dUJBQUMsbUJBQW1CO2dCQUNDLFdBQVc7c0JBQTNDLFdBQVc7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemUsXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBMYXlvdXRTZXR0aW5nLFxuICAgIEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0LFxuICAgIEZvcm1Qcm9wc0Jhc2VDb21wb25lbnQsXG4gICAgTGF5b3V0U2VydmljZVxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYXJzYS1mb3JtLXNpZGUtY29udGVudC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYmFyc2EtZm9ybS1zaWRlLWNvbnRlbnQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtMYXlvdXRTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBCYXJzYUZvcm1TaWRlQ29udGVudENvbXBvbmVudCBleHRlbmRzIEZvcm1Qcm9wc0Jhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21hbGxEZXZpY2UnKSBfaXNTbWFsbERldmljZSA9IGZhbHNlO1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuYmFja2dyb3VuZCcpIF9iYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgcGFyYW1ldGVyczogQmFyc2FGb3JtU2lkZUNvbnRlbnRTZXR0aW5nO1xuICAgIHNpZGVDb250ZW50TGF5b3V0OiBMYXlvdXRTZXR0aW5nIHwgbnVsbDtcbiAgICBtYWluQ29udGVudExheW91dDogTGF5b3V0U2V0dGluZyB8IG51bGw7XG4gICAgYXV0b0hlaWdodDogYm9vbGVhbjtcbiAgICBpc09wZW5RdWlja0FjY2VzcyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgc21hbGxEZXZpY2U6IGJvb2xlYW47XG4gICAgYWZ0ZXJWaWV3SW5pdCA9IGZhbHNlO1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnNpZGVDb250ZW50TGF5b3V0ID0gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQodGhpcy5sYXlvdXQ5NCwgdGhpcy5wYXJhbWV0ZXJzLlNpZGVDb250ZW50KTtcbiAgICAgICAgdGhpcy5tYWluQ29udGVudExheW91dCA9IEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0KHRoaXMubGF5b3V0OTQsIHRoaXMucGFyYW1ldGVycy5NYWluQ29udGVudCk7XG4gICAgICAgIHRoaXMuX2JhY2tncm91bmQgPSB0aGlzLnBhcmFtZXRlcnMuQmdDb2xvciB8fCAndmFyKC0tc2FwQmFzZUNvbG9yKSc7XG4gICAgICAgIHRoaXMuYXV0b0hlaWdodCA9IHRoaXMucGFyYW1ldGVycy5BdXRvSGVpZ2h0O1xuICAgICAgICB0aGlzLnNtYWxsRGV2aWNlID0gdGhpcy5faXNTbWFsbERldmljZVNpemUodGhpcy5kZXZpY2VTaXplKTtcbiAgICAgICAgY29uc3Qgc2lkZWJhclN0YXRlID0gTnVtYmVyKHRoaXMucGFyYW1ldGVycy5GaXJzdERlZmF1bHRNZW51U3RhdGUpID09PSAxO1xuICAgICAgICBpZiAoc2lkZWJhclN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5TaWRlYmFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc09wZW5RdWlja0FjY2VzcyQgPSB0aGlzLl9mb3JtUGFuZWxTZXJ2aWNlLnNpZGViYXJTdGF0ZSQucGlwZShtYXAoKGMpID0+IChjID09PSAnb3BlbicgPyB0cnVlIDogZmFsc2UpKSk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJWaWV3SW5pdCA9IHRydWU7XG4gICAgfVxuICAgIG9wZW5TaWRlYmFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtUGFuZWxTZXJ2aWNlLmNoYW5nZVNpZGViYXJTdGF0ZSgnb3BlbicpO1xuICAgIH1cbiAgICBjbG9zZVNpZGViYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Zvcm1QYW5lbFNlcnZpY2UuY2hhbmdlU2lkZWJhclN0YXRlKCdjbG9zZScpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2lzU21hbGxEZXZpY2VTaXplKGRldmljZVNpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpc1NtYWxsRGV2aWNlID0gZGV2aWNlU2l6ZSA9PT0gJ3MnIHx8IGRldmljZVNpemUgPT09ICdtJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGlzU21hbGxEZXZpY2U7XG4gICAgfVxufVxuaW50ZXJmYWNlIEJhcnNhRm9ybVNpZGVDb250ZW50U2V0dGluZyBleHRlbmRzIE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgIFNpZGVDb250ZW50OiBzdHJpbmc7XG4gICAgTWFpbkNvbnRlbnQ6IHN0cmluZztcbiAgICBIaWRlU2lkZUNvbnRlbnRUaXRsZTogYm9vbGVhbjtcbiAgICBIaWRlTWFpbkNvbnRlbnRUaXRsZTogYm9vbGVhbjtcbiAgICBCZ0NvbG9yOiBzdHJpbmc7XG4gICAgTWFpbkNvbnRlbnRXaWR0aDogc3RyaW5nO1xuICAgIEF1dG9IZWlnaHQ6IGJvb2xlYW47XG4gICAgRmlyc3REZWZhdWx0TWVudVN0YXRlOiBudW1iZXI7XG4gICAgRml4U2lkZUNvbnRlbnRIZWlnaHQ6IGJvb2xlYW47XG59XG4iLCJAaWYoaXNNb2JpbGUpIHtcbjxidXR0b25cbiAgICBmZC1zaGVsbGJhci1zaWRlLW5hdlxuICAgIGZkLWJ1dHRvblxuICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICBnbHlwaD1cIm1lbnUyXCJcbiAgICBzdHlsZT1cIndpZHRoOiAyLjc1cmVtXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuU2lkZWJhcigpXCJcbj48L2J1dHRvbj5cblxuPGRpdlxuICAgIGNsYXNzPVwic2lkZW1lbnUtaCB0dy1maXhlZCB0dy1iZy13aGl0ZSB0dy10cmFuc2l0aW9uLWFsbCB0dy16LVsxMDAxXSB0dy1zaGFkb3ctMnhsIHR3LW92ZXJmbG93LWF1dG9cIlxuICAgIFtuZ0NsYXNzXT1cInsgJ3R3LXctNC81JzogaXNNb2JpbGUgfVwiXG4gICAgW2NsYXNzLi10dy1yaWdodC1mdWxsXT1cImlzTW9iaWxlXCJcbiAgICBbY2xhc3MudHctdy05Nl09XCIhaXNNb2JpbGVcIlxuICAgIFtjbGFzcy4tdHctcmlnaHQtOTZdPVwiIWlzTW9iaWxlXCJcbiAgICBmaWxsRW1wdHlTcGFjZVxuICAgIFtjbGFzcy4hdHctcmlnaHQtMF09XCJpc09wZW5RdWlja0FjY2VzcyQgfCBhc3luY1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgI3NpZGViYXJcbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLXNoZWxsYmFyLXNpZGUtbmF2XG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIGdseXBoPVwiZGVjbGluZVwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGNsb3NlU2lkZWJhcigpXCJcbiAgICAgICAgcm91dGVGb3JtQ2hhbmdlXG4gICAgICAgIFtib2R5Q2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgIChzdGF0ZUNoYW5nZWQpPVwiYWZ0ZXJWaWV3SW5pdCAmJiBjbG9zZVNpZGViYXIoKVwiXG4gICAgPjwvYnV0dG9uPlxuICAgIEBpZiAoc2lkZUNvbnRlbnRMYXlvdXQgKSB7XG4gICAgPGJzdS1seS1sYXlvdXQtcGFuZWxcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXG4gICAgICAgIFtjb25maWddPVwic2lkZUNvbnRlbnRMYXlvdXRcIlxuICAgICAgICBbaGlkZVRpdGxlXT1cInBhcmFtZXRlcnM/LkhpZGVTaWRlQ29udGVudFRpdGxlID09PSB0cnVlXCJcbiAgICAgICAgY2xhc3M9XCJ4eHhcIlxuICAgID48L2JzdS1seS1sYXlvdXQtcGFuZWxcbiAgICA+fVxuPC9kaXY+XG59IEBpZiAoc2lkZUNvbnRlbnRMYXlvdXQgJiYgbWFpbkNvbnRlbnRMYXlvdXQpIHtcblxuPGZkLWR5bmFtaWMtc2lkZS1jb250ZW50XG4gICAgW2NsYXNzLnJ0bF09XCJydGxcIlxuICAgIGZpbGxFbXB0eVNwYWNlXG4gICAgW2RlY3JlbWVudF09XCInNDBweCdcIlxuICAgIFtkaXNhYmxlXT1cImF1dG9IZWlnaHRcIlxuICAgIFtzZXRNaW5IZWlnaHRdPVwidHJ1ZVwiXG4gICAgW3NpemVdPVwiaXNNb2JpbGUgPyAnc20nIDogc21hbGxEZXZpY2UgPyAnbWQnIDogJ3hsJ1wiXG4+XG4gICAgPGZkLWR5bmFtaWMtc2lkZS1jb250ZW50LXNpZGU+XG4gICAgICAgIDxic3UtbHktbGF5b3V0LXBhbmVsXG4gICAgICAgICAgICBmaWxsRW1wdHlTcGFjZVxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiIXBhcmFtZXRlcnM/LkZpeFNpZGVDb250ZW50SGVpZ2h0XCJcbiAgICAgICAgICAgIFtzdHlsZS5vdmVyZmxvdy15XT1cInBhcmFtZXRlcnM/LkZpeFNpZGVDb250ZW50SGVpZ2h0ID09PSB0cnVlID8gJ2F1dG8nIDogbnVsbFwiXG4gICAgICAgICAgICBbY29uZmlnXT1cInNpZGVDb250ZW50TGF5b3V0XCJcbiAgICAgICAgICAgIFtoaWRlVGl0bGVdPVwicGFyYW1ldGVycz8uSGlkZVNpZGVDb250ZW50VGl0bGUgPT09IHRydWVcIlxuICAgICAgICA+XG4gICAgICAgIDwvYnN1LWx5LWxheW91dC1wYW5lbD5cbiAgICA8L2ZkLWR5bmFtaWMtc2lkZS1jb250ZW50LXNpZGU+XG4gICAgPGZkLWR5bmFtaWMtc2lkZS1jb250ZW50LW1haW4gW3N0eWxlLndpZHRoXT1cImlzTW9iaWxlID8gbnVsbCA6IHBhcmFtZXRlcnM/Lk1haW5Db250ZW50V2lkdGhcIj5cbiAgICAgICAgPGJzdS1seS1sYXlvdXQtcGFuZWwgW2NvbmZpZ109XCJtYWluQ29udGVudExheW91dFwiIFtoaWRlVGl0bGVdPVwicGFyYW1ldGVycz8uSGlkZU1haW5Db250ZW50VGl0bGUgPT09IHRydWVcIj5cbiAgICAgICAgPC9ic3UtbHktbGF5b3V0LXBhbmVsPlxuICAgIDwvZmQtZHluYW1pYy1zaWRlLWNvbnRlbnQtbWFpbj5cbjwvZmQtZHluYW1pYy1zaWRlLWNvbnRlbnQ+XG59IEBlbHNlIHtcbjxmZC1tZXNzYWdlLXN0cmlwIHR5cGU9XCJlcnJvclwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiXG4gICAgPnNpZGUgY29udGVudCBhbmQgbWFpbiBjb250ZW50IGRvZXMgbm90IGRlZmluZWQgY29ycmVjdGx5LjwvZmQtbWVzc2FnZS1zdHJpcFxuPlxufVxuPG5nLXRlbXBsYXRlICNlcnJvcj5cbiAgICA8ZmQtbWVzc2FnZS1zdHJpcCB0eXBlPVwiZXJyb3JcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIlxuICAgICAgICA+c2lkZSBjb250ZW50IGFuZCBtYWluIGNvbnRlbnQgZG9lcyBub3QgZGVmaW5lZCBjb3JyZWN0bHkuPC9mZC1tZXNzYWdlLXN0cmlwXG4gICAgPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -44,6 +44,8 @@ export class BarsaTableRowComponent extends BaseViewItemPropsComponent {
44
44
  this.columnSummary.emit({
45
45
  moArr: this.mo.$Parent.$Children,
46
46
  column,
47
+ groupLevel: this.level,
48
+ groupName: this.mo.$Parent?.$Group,
47
49
  summaryFn: (val) => {
48
50
  elDom.className = val.toString().replace(/&lrm;|\u200E/gi, ' ');
49
51
  elDom.innerHTML = val;
@@ -61,11 +63,11 @@ export class BarsaTableRowComponent extends BaseViewItemPropsComponent {
61
63
  this._cdr.detectChanges();
62
64
  }
63
65
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTableRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
64
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaTableRowComponent, selector: "bsu-barsa-table-row", inputs: { showDetailsInRow: "showDetailsInRow", detailsComponent: "detailsComponent", detailsColumns: "detailsColumns", detailsText: "detailsText", previewColumn: "previewColumn", columnComponents: "columnComponents", dirtyColumns: "dirtyColumns", detailsCollapsed: "detailsCollapsed" }, outputs: { columnSummary: "columnSummary" }, providers: [FormPanelService], viewQueries: [{ propertyName: "detailsFormItems", first: true, predicate: ["detailsFormItems"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "@if ((!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n [class.row-error]=\"hasError\"\n [class.showdetails-on]=\"!detailsCollapsed\"\n [class.hasCartable]=\"!!cartableParams\"\n #trEl\n fd-table-row\n [activable]=\"false\"\n [hoverable]=\"true\"\n [main]=\"true\"\n [focusable]=\"true\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked\"\n [class.has-preview-column]=\"!!previewColumn\"\n [class.brule-message]=\"bruleActionMessage || workflowState?.error\"\n [class.workflow-pending]=\"workflowState?.state === 'Pending'\"\n [style.background-color]=\"isOdd && !isChecked ? 'var(--sapList_Hover_Background)' : null\"\n>\n @if (mo.$Group || mo.$Group === '') {\n <td\n [style.padding-right]=\"rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n [style.padding-left]=\"!rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n fd-table-cell\n style=\"font-weight: bold; font-size: 1rem\"\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n class=\"row-group\"\n [class.mobile-mode]=\"secondaryColumns?.length\"\n [attr.level]=\"level\"\n [class.root-group]=\"level === 0\"\n >\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [glyph]=\"expanded !== false ? 'navigation-down-arrow' : 'navigation-left-arrow'\"\n class=\"cell-expand\"\n (click)=\"onExpandClick()\"\n ></button>\n {{ mo.$Group === 'undefined' ? '' : mo.$Group }}\n </td>\n } @else {\n\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (isCheckList) {\n <td fd-table-cell [style.width]=\"checkboxComponent ? '60px' : null\">\n @if (workflowState?.state === 'Pending') {\n <div style=\"position: absolute; left: 0; right: 0; bottom: 0; top: 0\">\n <bsu-mask [top]=\"'20px'\" [size]=\"'s'\"></bsu-mask>\n </div>\n } @if (checkboxComponent?.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"checkboxComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"setting\"\n [parameters]=\"checkboxComponent.Parameters\"\n [editMode]=\"inlineEditMode\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [value]=\"isChecked\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n (events)=\"onRowCheck()\"\n ></bnrc-dynamic-item-component>\n } @else {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (ngModelChange)=\"onRowCheck()\"></fd-checkbox>\n }\n </td>\n } @if (!isCheckList && !showRowNumber) {\n <td\n fd-table-cell\n class=\"single-select\"\n (click)=\"!isCheckList && onRowCheck()\"\n style=\"padding: 0; text-align: center\"\n >\n @if (inlineEditMode && allowInlineEdit && (hasError || saving || saved)) { @if (hasError) {\n <fd-icon class=\"save-error\" glyph=\"error\"></fd-icon>\n } @if (saving) {\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\" title=\"record saving\"></fd-busy-indicator>\n } @if (saved) {\n <fd-icon class=\"save-success\" glyph=\"accept\"></fd-icon>\n } } @else { @if (mo.$State === 'New' && !isChecked) {\n <fd-icon glyph=\"favorite\"></fd-icon>\n } @if (inlineEditMode && allowInlineEdit && isChecked) {\n <fd-icon glyph=\"edit\"></fd-icon>\n } }\n </td>\n }\n <ng-container *ngTemplateOutlet=\"rowNumberTemplate\"></ng-container>\n @for (column of columns; track column.Name; let columnIndex = $index) {\n <td\n class=\"rep-column\"\n [attr.dbName]=\"column.Name\"\n #tdEl\n fd-table-cell\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"tdEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n [focusable]=\"false\"\n (click)=\"onColumnClick()\"\n (dblclick)=\"onRowClick()\"\n [hoverable]=\"inlineEditMode && allowInlineEdit\"\n [class.control-readonly]=\"column.IsReadonly\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </td>\n } @if (contextMenuItems.length && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-context-menu\" fd-table-cell>\n <bsu-ulv-context-menu\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [mo]=\"mo\"\n [index]=\"index\"\n (commandClick)=\"onUlvCommand()\"\n [deviceName]=\"deviceName\"\n [menuItems]=\"contextMenuItems\"\n [allColumns]=\"allColumns\"\n ></bsu-ulv-context-menu>\n </td>\n } @if (showDetailsInRow && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-details\" fd-table-cell [fitContent]=\"true\">\n @if ((detailsComponent?.Selector || detailsColumns?.length || cartableParams?.moId ) && !hideDetailsText) {\n <div class=\"tw-flex tw-justify-end tw-w-full\">\n <button\n fd-button\n [label]=\"(detailsCollapsed ? detailsText : 'Hide') | bbbTranslate\"\n [fdType]=\"'transparent'\"\n (click)=\"onRowDetails()\"\n ></button>\n </div>\n }\n </td>\n } @if (actionList?.length && !inlineEditMode) {\n <td class=\"col-view\" [class.rtl]=\"rtl\" fd-table-cell [fitContent]=\"true\">\n <bsu-barsa-row-inline-actionlist\n [actionList]=\"actionList\"\n (btnClick)=\"actionListClick.emit($event)\"\n ></bsu-barsa-row-inline-actionlist>\n </td>\n } }\n</tr>\n} @if (secondaryColumns?.length && !mo.$Group && (!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"secondary-row\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\" (click)=\"onRowCheck()\"></td>\n }\n <td fd-table-cell colspan=\"100%\" (click)=\"onRowCheck()\" class=\"secondary p-wrapper\">\n <div style=\"display: flex; flex-direction: column\">\n @for (column of secondaryColumns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n style=\"font-family: 'BARSAFONT Medium'\"\n >\n <label fd-form-label>{{ column.Caption }} :</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n }\n </div>\n </td>\n</tr>\n} @if (cartableParams?.moId) {\n<tr\n [class.detailCollapsed]=\"detailsCollapsed\"\n fd-table-row\n class=\"showdetails cartable\"\n [attr.aria-selected]=\"isChecked\"\n [class.has-preview-column]=\"!!previewColumn\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? 1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container>\n <bnrc-form\n #cartableFormRef\n class=\"cartable-template\"\n [inlineEditInReport]=\"true\"\n [params]=\"cartableParams\"\n (beforeTransition)=\"onCartableBeforeTansition()\"\n (afterTransition)=\"onCartableAfterTansition($event)\"\n (bruleAction)=\"onCartableBruleAction($event)\"\n (click)=\"OnCartableFormClick($event)\"\n (formClose)=\"onCartableFormClosed()\"\n ></bnrc-form>\n </ng-container>\n </td>\n</tr>\n} @if (!detailsCollapsed && (detailsComponent?.Selector|| detailsColumns?.length)) {\n<tr fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\" [class.has-preview-column]=\"!!previewColumn\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container *ngTemplateOutlet=\"detailsColumnsTemplate\"></ng-container>\n @if (detailsComponent && detailsComponent.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"detailsComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"detailsComponentSetting\"\n [parameters]=\"detailsComponent.Settings\"\n [editMode]=\"inlineEditMode\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n ></bnrc-dynamic-item-component>\n }\n </td>\n</tr>\n} @if(previewColumn){\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"preview-column\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n (click)=\"onRowCheck()\"\n >\n <div style=\"display: flex; flex-direction: column\">\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"previewColumn.Name\"\n style=\"color: var(--sapAccentColor6)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: previewColumn,\n mo: mo,\n index: columns.length,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n </div>\n </td>\n</tr>\n} @if(isLastChildGroup && groupSummary){\n<tr #trEl fd-table-row class=\"group-summary-row\" [class.no-edit-mode]=\"true\" [attr.aria-selected]=\"false\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\"></td>\n } @for (column of columns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <td fd-table-cell>\n <label #summaryRef>{{ reCalculateColumnSummary(summaryRef, column) }}</label>\n </td>\n }\n</tr>\n} @if (bruleActionMessage && inlineEditMode) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n @if (bruleActionMessage.MessageType === 2) {\n <fd-message-strip [type]=\"bruleActionMessage.MessageType === 2 ? 'error' : 'information'\" [dismissible]=\"false\">\n {{ bruleActionMessage.MessageExpression }}\n </fd-message-strip>\n }\n </td>\n</tr>\n} @if (workflowState?.state === 'Finish' && workflowState?.error) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <fd-message-strip type=\"error\" [dismissible]=\"true\" (onDismiss)=\"onResetWorkflowState()\">\n {{ workflowState.error?.Text || workflowState.error?.MessageExpression }}\n </fd-message-strip>\n </td>\n</tr>\n}\n<ng-template #detailsColumnsTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n detailsFormItems;\n context: {\n $implicit: detailsColumns,\n mo: mo,\n inlineEditMode: inlineEditMode,\n layout94: layout$\n }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #detailsFormItems let-detailsColumns let-mo=\"mo\" let-inlineEditMode=\"inlineEditMode\" let-layout$=\"layout$\">\n <div class=\"form-items\">\n @for (column of detailsColumns; track column; let columnIndex = $index) {\n <div fd-form-item>\n <label fd-form-label for=\"input-2\">{{ column.Caption }}</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </div>\n }\n </div>\n</ng-template>\n<ng-template\n #columnTemplate\n let-column\n let-mo=\"mo\"\n let-index=\"index\"\n let-inlineEditMode=\"inlineEditMode\"\n let-layout94=\"layout94\"\n>\n <bsu-barsa-table-column\n [mo]=\"mo\"\n [allColumns]=\"allColumns\"\n [column]=\"column\"\n [isdirty]=\"dirtyColumns && dirtyColumns[column.Name]\"\n [value]=\"column | columnValue: mo\"\n [icon]=\"column | columnIcon: mo\"\n [customComponent]=\"column.$CustomComponent\"\n [column]=\"column\"\n [disableEllapsis]=\"secondaryColumns?.length\"\n [editMode]=\"isChecked && inlineEditMode && allowInlineEdit\"\n [inlineEditMode]=\"inlineEditMode\"\n [isChecked]=\"isChecked\"\n [index]=\"index\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [layout94]=\"layout94\"\n (save)=\"onEditFormPanelSave(null)\"\n (cancel)=\"onEditFormPanelCancel(null)\"\n (tab)=\"onTabKeyDown($event, index)\"\n (changeToEditMode)=\"onColumnChangeToEditMode($event, index)\"\n >\n </bsu-barsa-table-column>\n</ng-template>\n<ng-template #statusIndicator>\n @if (rowIndicator) {\n <bsu-barsa-column-indicator [hideBorderBottom]=\"!detailsCollapsed\" [backColor]=\"rowIndicatorColor\">\n </bsu-barsa-column-indicator>\n }\n</ng-template>\n<ng-template #rowNumberTemplate>\n @if (showRowNumber) {\n <td fd-table-cell bsu-barsa-column-rownumber [rowNumber]=\"rowNumber\" (click)=\"!isCheckList && onRowCheck()\"></td>\n }\n</ng-template>\n<tr fd-table-row style=\"pointer-events: none\"></tr>\n", styles: [":host{display:contents;width:100%}:host bnrc-form.cartable-template ::ng-deep bsu-ly-layout-container-of-root{padding-bottom:1rem}:host.has-preview-column .secondary-row td{border-bottom:none}:host ::ng-deep .row-group.mobile-mode{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e4e4e4)!important}:host ::ng-deep .inlineEditMode bnrc-field-ui{padding:0;margin:0}:host ::ng-deep .inlineEditMode bsu-ui-simple-combo{margin:0!important}:host ::ng-deep .secondary.p-wrapper p{display:flex;align-items:center}bsu-layout-control:not(.hide-form-item){align-items:center;height:100%;min-width:auto;width:auto}tr.group-summary-row td{border:none;background-color:#dde5f0;border-right:none!important;font-weight:700}tr.group-summary-row td label{font-weight:700}tr.group-summary-row td label.NaN{display:none}td{vertical-align:middle}td.control-readonly{background-color:var(--sapList_HeaderBackground)}tr.brule-message td{border:0}.row-group{background-color:var(--sapBackgroundColor, \"#f7f7ff\")}.cell-expand{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;font-size:.75rem;color:#0854a0;color:var(--sapContent_IconColor, #0854a0);min-width:2rem;max-width:2rem}.save-error{color:var(--sapField_InvalidColor)}.save-success{color:var(--sapField_SuccessColor)}.flow{max-width:100%}.flow-item{display:flex}.flow-item fd-micro-process-flow-icon{width:1.375rem;height:1.375rem}.flow-item h5{padding-right:.3rem}.cartable-template{padding:.5rem 0}.workflow-pending{opacity:.5;pointer-events:none;position:relative}.detailCollapsed{height:0;display:none}tr td.rep-column:first-child{position:sticky;right:0}tr:not([aria-selected=true]).preview-column td{border-bottom:var(--sapList_BorderWidth) var(--fdTable_Cell_Horizontal_Border_Style, solid) var(--sapList_BorderColor)}tr[aria-selected=true].has-preview-column td,tr.showdetails-on.hasCartable td{border-bottom:none}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormComponent, selector: "bnrc-form", inputs: ["params", "customFormPanelUi", "formPanelCtrl", "UlvMainCtrlr", "formPanelCtrlId", "saveOnChange", "inlineEditInReport"], outputs: ["titleChanged", "moChanged", "formClose", "uiComponent", "formRendered", "bruleAction", "beforeTransition", "afterTransition"] }, { kind: "component", type: i3.DynamicItemComponent, selector: "bnrc-dynamic-item-component", inputs: ["mo", "allColumns", "moDataList", "columns", "column", "index", "last", "deviceName", "deviceSize", "rtl", "editMode", "setting", "parameters", "contextMenuItems", "canView", "showRowNumber", "rowNumber", "formSetting", "conditionalFormats", "disableOverflowContextMenu", "navigationArrow", "isCheckList", "fields", "isChecked", "layout94$", "inlineEditMode", "isNewInlineMo", "allowInlineEdit", "typeDefId", "rowIndicator", "rowIndicatorColor", "UlvMainCtrlr"] }, { kind: "directive", type: i3.FormCloseDirective, selector: "[formClose]", inputs: ["isMobile"] }, { kind: "component", type: i4.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i7.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i7.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i8.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i9.MessageStripComponent, selector: "fd-message-strip", inputs: ["class", "dismissible", "noIcon", "type", "id", "ariaLabelledBy", "ariaLabel", "width", "minWidth", "marginBottom", "indicationColor"], outputs: ["onDismiss"] }, { kind: "directive", type: i10.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i10.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "directive", type: i10.TableTextDirective, selector: "[fdTableText], [fd-table-text]", inputs: ["fdTableTextClass", "noWrap", "title", "maxWidth"] }, { kind: "component", type: i11.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i12.UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: ["onlyOverflow", "rightClickEnable", "deviceName", "menuItems", "allColumns", "index", "mo", "styleIndex", "conditionalFormats", "disableOverflowContextMenu", "footerMode", "appendTo"], outputs: ["commandClick"] }, { kind: "component", type: i13.BarsaTableColumnComponent, selector: "bsu-barsa-table-column", inputs: ["disableEllapsis"] }, { kind: "component", type: i14.BarsaColumnIndicatorComponent, selector: "bsu-barsa-column-indicator", inputs: ["backColor", "hideBorderBottom"] }, { kind: "component", type: i15.BarsaColumnRowNumberComponent, selector: "td[bsu-barsa-column-rownumber],bsu-barsa-column-rownumber", inputs: ["rowNumber"] }, { kind: "component", type: i16.BarsaRowInlineActionlistComponent, selector: "bsu-barsa-row-inline-actionlist", inputs: ["actionList", "mo", "index"], outputs: ["btnClick"] }, { kind: "directive", type: i17.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i3.ColumnIconPipe, name: "columnIcon" }, { kind: "pipe", type: i3.ColumnValuePipe, name: "columnValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
66
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaTableRowComponent, selector: "bsu-barsa-table-row", inputs: { showDetailsInRow: "showDetailsInRow", detailsComponent: "detailsComponent", detailsColumns: "detailsColumns", detailsText: "detailsText", previewColumn: "previewColumn", columnComponents: "columnComponents", dirtyColumns: "dirtyColumns", detailsCollapsed: "detailsCollapsed" }, outputs: { columnSummary: "columnSummary" }, providers: [FormPanelService], viewQueries: [{ propertyName: "detailsFormItems", first: true, predicate: ["detailsFormItems"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "@if ((!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n [class.row-error]=\"hasError\"\n [class.showdetails-on]=\"!detailsCollapsed\"\n [class.hasCartable]=\"!!cartableParams\"\n #trEl\n fd-table-row\n [activable]=\"false\"\n [hoverable]=\"true\"\n [main]=\"true\"\n [focusable]=\"true\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked\"\n [class.has-preview-column]=\"!!previewColumn\"\n [class.brule-message]=\"bruleActionMessage || workflowState?.error\"\n [class.workflow-pending]=\"workflowState?.state === 'Pending'\"\n [style.background-color]=\"isOdd && !isChecked ? 'var(--sapList_Hover_Background)' : null\"\n>\n @if (mo.$Group || mo.$Group === '') {\n <td\n [style.padding-right]=\"rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n [style.padding-left]=\"!rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n fd-table-cell\n style=\"font-weight: bold; font-size: 1rem\"\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n class=\"row-group\"\n [class.mobile-mode]=\"secondaryColumns?.length\"\n [attr.level]=\"level\"\n [class.root-group]=\"level === 0\"\n >\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [glyph]=\"expanded !== false ? 'navigation-down-arrow' : 'navigation-left-arrow'\"\n class=\"cell-expand\"\n (click)=\"onExpandClick()\"\n ></button>\n {{ mo.$Group === 'undefined' ? '' : mo.$Group }}\n </td>\n } @else {\n\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (isCheckList) {\n <td fd-table-cell [style.width]=\"checkboxComponent ? '60px' : null\">\n @if (workflowState?.state === 'Pending') {\n <div style=\"position: absolute; left: 0; right: 0; bottom: 0; top: 0\">\n <bsu-mask [top]=\"'20px'\" [size]=\"'s'\"></bsu-mask>\n </div>\n } @if (checkboxComponent?.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"checkboxComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"setting\"\n [parameters]=\"checkboxComponent.Parameters\"\n [editMode]=\"inlineEditMode\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [value]=\"isChecked\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n (events)=\"onRowCheck()\"\n ></bnrc-dynamic-item-component>\n } @else {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (ngModelChange)=\"onRowCheck()\"></fd-checkbox>\n }\n </td>\n } @if (!isCheckList && !showRowNumber) {\n <td\n fd-table-cell\n class=\"single-select\"\n (click)=\"!isCheckList && onRowCheck()\"\n style=\"padding: 0; text-align: center\"\n >\n @if (inlineEditMode && allowInlineEdit && (hasError || saving || saved)) { @if (hasError) {\n <fd-icon class=\"save-error\" glyph=\"error\"></fd-icon>\n } @if (saving) {\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\" title=\"record saving\"></fd-busy-indicator>\n } @if (saved) {\n <fd-icon class=\"save-success\" glyph=\"accept\"></fd-icon>\n } } @else { @if (mo.$State === 'New' && !isChecked) {\n <fd-icon glyph=\"favorite\"></fd-icon>\n } @if (inlineEditMode && allowInlineEdit && isChecked) {\n <fd-icon glyph=\"edit\"></fd-icon>\n } }\n </td>\n }\n <ng-container *ngTemplateOutlet=\"rowNumberTemplate\"></ng-container>\n @for (column of columns; track column.Name; let columnIndex = $index) {\n <td\n class=\"rep-column\"\n [attr.dbName]=\"column.Name\"\n #tdEl\n fd-table-cell\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"tdEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n [focusable]=\"false\"\n (click)=\"onColumnClick()\"\n (dblclick)=\"onRowClick()\"\n [hoverable]=\"inlineEditMode && allowInlineEdit\"\n [class.control-readonly]=\"column.IsReadonly\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </td>\n } @if (contextMenuItems.length && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-context-menu\" fd-table-cell>\n <bsu-ulv-context-menu\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [mo]=\"mo\"\n [index]=\"index\"\n (commandClick)=\"onUlvCommand()\"\n [deviceName]=\"deviceName\"\n [menuItems]=\"contextMenuItems\"\n [allColumns]=\"allColumns\"\n ></bsu-ulv-context-menu>\n </td>\n } @if (showDetailsInRow && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-details\" fd-table-cell [fitContent]=\"true\">\n @if ((detailsComponent?.Selector || detailsColumns?.length || cartableParams?.moId ) && !hideDetailsText) {\n <div class=\"tw-flex tw-justify-end tw-w-full\">\n <button\n fd-button\n [label]=\"(detailsCollapsed ? detailsText : 'Hide') | bbbTranslate\"\n [fdType]=\"'transparent'\"\n (click)=\"onRowDetails()\"\n ></button>\n </div>\n }\n </td>\n } @if (actionList?.length && !inlineEditMode) {\n <td class=\"col-view\" [class.rtl]=\"rtl\" fd-table-cell [fitContent]=\"true\">\n <bsu-barsa-row-inline-actionlist\n [actionList]=\"actionList\"\n (btnClick)=\"actionListClick.emit($event)\"\n ></bsu-barsa-row-inline-actionlist>\n </td>\n } }\n</tr>\n} @if (secondaryColumns?.length && !mo.$Group && (!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"secondary-row\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\" (click)=\"onRowCheck()\"></td>\n }\n <td fd-table-cell colspan=\"100%\" (click)=\"onRowCheck()\" class=\"secondary p-wrapper\">\n <div style=\"display: flex; flex-direction: column\">\n @for (column of secondaryColumns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n style=\"font-family: 'BARSAFONT Medium'\"\n >\n <label fd-form-label>{{ column.Caption }} :</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n }\n </div>\n </td>\n</tr>\n} @if (cartableParams?.moId) {\n<tr\n [class.detailCollapsed]=\"detailsCollapsed\"\n fd-table-row\n class=\"showdetails cartable\"\n [attr.aria-selected]=\"isChecked\"\n [class.has-preview-column]=\"!!previewColumn\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? 1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container>\n <bnrc-form\n #cartableFormRef\n class=\"cartable-template\"\n [inlineEditInReport]=\"true\"\n [params]=\"cartableParams\"\n (beforeTransition)=\"onCartableBeforeTansition()\"\n (afterTransition)=\"onCartableAfterTansition($event)\"\n (bruleAction)=\"onCartableBruleAction($event)\"\n (click)=\"OnCartableFormClick($event)\"\n (formClose)=\"onCartableFormClosed()\"\n ></bnrc-form>\n </ng-container>\n </td>\n</tr>\n} @if (!detailsCollapsed && (detailsComponent?.Selector|| detailsColumns?.length)) {\n<tr fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\" [class.has-preview-column]=\"!!previewColumn\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container *ngTemplateOutlet=\"detailsColumnsTemplate\"></ng-container>\n @if (detailsComponent && detailsComponent.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"detailsComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"detailsComponentSetting\"\n [parameters]=\"detailsComponent.Settings\"\n [editMode]=\"inlineEditMode\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n ></bnrc-dynamic-item-component>\n }\n </td>\n</tr>\n} @if(previewColumn){\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"preview-column\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n (click)=\"onRowCheck()\"\n >\n <div style=\"display: flex; flex-direction: column\">\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"previewColumn.Name\"\n style=\"color: var(--sapAccentColor6)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: previewColumn,\n mo: mo,\n index: columns.length,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n </div>\n </td>\n</tr>\n} @if(isLastChildGroup && groupSummary){\n<tr #trEl fd-table-row class=\"group-summary-row\" [class.no-edit-mode]=\"true\" [attr.aria-selected]=\"false\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\"></td>\n } @for (column of columns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <td fd-table-cell>\n <label #summaryRef>{{ reCalculateColumnSummary(summaryRef, column) }}</label>\n </td>\n } @if (contextMenuItems.length && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-context-menu\" fd-table-cell></td>\n } @if (showDetailsInRow && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-details\" fd-table-cell [fitContent]=\"true\"></td>\n } @if (actionList?.length && !inlineEditMode) {\n <td class=\"col-view\" fd-table-cell [fitContent]=\"true\"></td>\n }\n</tr>\n} @if (bruleActionMessage && inlineEditMode) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n @if (bruleActionMessage.MessageType === 2) {\n <fd-message-strip [type]=\"bruleActionMessage.MessageType === 2 ? 'error' : 'information'\" [dismissible]=\"false\">\n {{ bruleActionMessage.MessageExpression }}\n </fd-message-strip>\n }\n </td>\n</tr>\n} @if (workflowState?.state === 'Finish' && workflowState?.error) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <fd-message-strip type=\"error\" [dismissible]=\"true\" (onDismiss)=\"onResetWorkflowState()\">\n {{ workflowState.error?.Text || workflowState.error?.MessageExpression }}\n </fd-message-strip>\n </td>\n</tr>\n}\n<ng-template #detailsColumnsTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n detailsFormItems;\n context: {\n $implicit: detailsColumns,\n mo: mo,\n inlineEditMode: inlineEditMode,\n layout94: layout$\n }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #detailsFormItems let-detailsColumns let-mo=\"mo\" let-inlineEditMode=\"inlineEditMode\" let-layout$=\"layout$\">\n <div class=\"form-items\">\n @for (column of detailsColumns; track column; let columnIndex = $index) {\n <div fd-form-item>\n <label fd-form-label for=\"input-2\">{{ column.Caption }}</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </div>\n }\n </div>\n</ng-template>\n<ng-template\n #columnTemplate\n let-column\n let-mo=\"mo\"\n let-index=\"index\"\n let-inlineEditMode=\"inlineEditMode\"\n let-layout94=\"layout94\"\n>\n <bsu-barsa-table-column\n [mo]=\"mo\"\n [allColumns]=\"allColumns\"\n [column]=\"column\"\n [isdirty]=\"dirtyColumns && dirtyColumns[column.Name]\"\n [value]=\"column | columnValue: mo\"\n [icon]=\"column | columnIcon: mo\"\n [customComponent]=\"column.$CustomComponent\"\n [column]=\"column\"\n [disableEllapsis]=\"secondaryColumns?.length\"\n [editMode]=\"isChecked && inlineEditMode && allowInlineEdit\"\n [inlineEditMode]=\"inlineEditMode\"\n [isChecked]=\"isChecked\"\n [index]=\"index\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [layout94]=\"layout94\"\n (save)=\"onEditFormPanelSave(null)\"\n (cancel)=\"onEditFormPanelCancel(null)\"\n (tab)=\"onTabKeyDown($event, index)\"\n (changeToEditMode)=\"onColumnChangeToEditMode($event, index)\"\n >\n </bsu-barsa-table-column>\n</ng-template>\n<ng-template #statusIndicator>\n @if (rowIndicator) {\n <bsu-barsa-column-indicator [hideBorderBottom]=\"!detailsCollapsed\" [backColor]=\"rowIndicatorColor\">\n </bsu-barsa-column-indicator>\n }\n</ng-template>\n<ng-template #rowNumberTemplate>\n @if (showRowNumber) {\n <td fd-table-cell bsu-barsa-column-rownumber [rowNumber]=\"rowNumber\" (click)=\"!isCheckList && onRowCheck()\"></td>\n }\n</ng-template>\n<tr fd-table-row style=\"pointer-events: none\"></tr>\n", styles: [":host{display:contents;width:100%}:host bnrc-form.cartable-template ::ng-deep bsu-ly-layout-container-of-root{padding-bottom:1rem}:host.has-preview-column .secondary-row td{border-bottom:none}:host ::ng-deep .row-group.mobile-mode{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e4e4e4)!important}:host ::ng-deep .inlineEditMode bnrc-field-ui{padding:0;margin:0}:host ::ng-deep .inlineEditMode bsu-ui-simple-combo{margin:0!important}:host ::ng-deep .secondary.p-wrapper p{display:flex;align-items:center}bsu-layout-control:not(.hide-form-item){align-items:center;height:100%;min-width:auto;width:auto}tr.group-summary-row td{border:none;background-color:#dde5f0;border-right:none!important;font-weight:700}tr.group-summary-row td label{font-weight:700}tr.group-summary-row td label.NaN{display:none}td{vertical-align:middle}td.control-readonly{background-color:var(--sapList_HeaderBackground)}tr.brule-message td{border:0}.row-group{background-color:var(--sapBackgroundColor, \"#f7f7ff\")}.cell-expand{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;font-size:.75rem;color:#0854a0;color:var(--sapContent_IconColor, #0854a0);min-width:2rem;max-width:2rem}.save-error{color:var(--sapField_InvalidColor)}.save-success{color:var(--sapField_SuccessColor)}.flow{max-width:100%}.flow-item{display:flex}.flow-item fd-micro-process-flow-icon{width:1.375rem;height:1.375rem}.flow-item h5{padding-right:.3rem}.cartable-template{padding:.5rem 0}.workflow-pending{opacity:.5;pointer-events:none;position:relative}.detailCollapsed{height:0;display:none}tr td.rep-column:first-child{position:sticky;right:0}tr:not([aria-selected=true]).preview-column td{border-bottom:var(--sapList_BorderWidth) var(--fdTable_Cell_Horizontal_Border_Style, solid) var(--sapList_BorderColor)}tr[aria-selected=true].has-preview-column td,tr.showdetails-on.hasCartable td{border-bottom:none}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormComponent, selector: "bnrc-form", inputs: ["params", "customFormPanelUi", "formPanelCtrl", "UlvMainCtrlr", "formPanelCtrlId", "saveOnChange", "inlineEditInReport"], outputs: ["titleChanged", "moChanged", "formClose", "uiComponent", "formRendered", "bruleAction", "beforeTransition", "afterTransition"] }, { kind: "component", type: i3.DynamicItemComponent, selector: "bnrc-dynamic-item-component", inputs: ["mo", "allColumns", "moDataList", "columns", "column", "index", "last", "deviceName", "deviceSize", "rtl", "editMode", "setting", "parameters", "contextMenuItems", "canView", "showRowNumber", "rowNumber", "formSetting", "conditionalFormats", "disableOverflowContextMenu", "navigationArrow", "isCheckList", "fields", "isChecked", "layout94$", "inlineEditMode", "isNewInlineMo", "allowInlineEdit", "typeDefId", "rowIndicator", "rowIndicatorColor", "UlvMainCtrlr"] }, { kind: "directive", type: i3.FormCloseDirective, selector: "[formClose]", inputs: ["isMobile"] }, { kind: "component", type: i4.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i7.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i7.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i8.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i9.MessageStripComponent, selector: "fd-message-strip", inputs: ["class", "dismissible", "noIcon", "type", "id", "ariaLabelledBy", "ariaLabel", "width", "minWidth", "marginBottom", "indicationColor"], outputs: ["onDismiss"] }, { kind: "directive", type: i10.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i10.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "directive", type: i10.TableTextDirective, selector: "[fdTableText], [fd-table-text]", inputs: ["fdTableTextClass", "noWrap", "title", "maxWidth"] }, { kind: "component", type: i11.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i12.UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: ["onlyOverflow", "rightClickEnable", "deviceName", "menuItems", "allColumns", "index", "mo", "styleIndex", "conditionalFormats", "disableOverflowContextMenu", "footerMode", "appendTo"], outputs: ["commandClick"] }, { kind: "component", type: i13.BarsaTableColumnComponent, selector: "bsu-barsa-table-column", inputs: ["disableEllapsis"] }, { kind: "component", type: i14.BarsaColumnIndicatorComponent, selector: "bsu-barsa-column-indicator", inputs: ["backColor", "hideBorderBottom"] }, { kind: "component", type: i15.BarsaColumnRowNumberComponent, selector: "td[bsu-barsa-column-rownumber],bsu-barsa-column-rownumber", inputs: ["rowNumber"] }, { kind: "component", type: i16.BarsaRowInlineActionlistComponent, selector: "bsu-barsa-row-inline-actionlist", inputs: ["actionList", "mo", "index"], outputs: ["btnClick"] }, { kind: "directive", type: i17.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i3.ColumnIconPipe, name: "columnIcon" }, { kind: "pipe", type: i3.ColumnValuePipe, name: "columnValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
65
67
  }
66
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTableRowComponent, decorators: [{
67
69
  type: Component,
68
- args: [{ selector: 'bsu-barsa-table-row', providers: [FormPanelService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if ((!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n [class.row-error]=\"hasError\"\n [class.showdetails-on]=\"!detailsCollapsed\"\n [class.hasCartable]=\"!!cartableParams\"\n #trEl\n fd-table-row\n [activable]=\"false\"\n [hoverable]=\"true\"\n [main]=\"true\"\n [focusable]=\"true\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked\"\n [class.has-preview-column]=\"!!previewColumn\"\n [class.brule-message]=\"bruleActionMessage || workflowState?.error\"\n [class.workflow-pending]=\"workflowState?.state === 'Pending'\"\n [style.background-color]=\"isOdd && !isChecked ? 'var(--sapList_Hover_Background)' : null\"\n>\n @if (mo.$Group || mo.$Group === '') {\n <td\n [style.padding-right]=\"rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n [style.padding-left]=\"!rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n fd-table-cell\n style=\"font-weight: bold; font-size: 1rem\"\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n class=\"row-group\"\n [class.mobile-mode]=\"secondaryColumns?.length\"\n [attr.level]=\"level\"\n [class.root-group]=\"level === 0\"\n >\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [glyph]=\"expanded !== false ? 'navigation-down-arrow' : 'navigation-left-arrow'\"\n class=\"cell-expand\"\n (click)=\"onExpandClick()\"\n ></button>\n {{ mo.$Group === 'undefined' ? '' : mo.$Group }}\n </td>\n } @else {\n\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (isCheckList) {\n <td fd-table-cell [style.width]=\"checkboxComponent ? '60px' : null\">\n @if (workflowState?.state === 'Pending') {\n <div style=\"position: absolute; left: 0; right: 0; bottom: 0; top: 0\">\n <bsu-mask [top]=\"'20px'\" [size]=\"'s'\"></bsu-mask>\n </div>\n } @if (checkboxComponent?.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"checkboxComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"setting\"\n [parameters]=\"checkboxComponent.Parameters\"\n [editMode]=\"inlineEditMode\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [value]=\"isChecked\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n (events)=\"onRowCheck()\"\n ></bnrc-dynamic-item-component>\n } @else {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (ngModelChange)=\"onRowCheck()\"></fd-checkbox>\n }\n </td>\n } @if (!isCheckList && !showRowNumber) {\n <td\n fd-table-cell\n class=\"single-select\"\n (click)=\"!isCheckList && onRowCheck()\"\n style=\"padding: 0; text-align: center\"\n >\n @if (inlineEditMode && allowInlineEdit && (hasError || saving || saved)) { @if (hasError) {\n <fd-icon class=\"save-error\" glyph=\"error\"></fd-icon>\n } @if (saving) {\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\" title=\"record saving\"></fd-busy-indicator>\n } @if (saved) {\n <fd-icon class=\"save-success\" glyph=\"accept\"></fd-icon>\n } } @else { @if (mo.$State === 'New' && !isChecked) {\n <fd-icon glyph=\"favorite\"></fd-icon>\n } @if (inlineEditMode && allowInlineEdit && isChecked) {\n <fd-icon glyph=\"edit\"></fd-icon>\n } }\n </td>\n }\n <ng-container *ngTemplateOutlet=\"rowNumberTemplate\"></ng-container>\n @for (column of columns; track column.Name; let columnIndex = $index) {\n <td\n class=\"rep-column\"\n [attr.dbName]=\"column.Name\"\n #tdEl\n fd-table-cell\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"tdEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n [focusable]=\"false\"\n (click)=\"onColumnClick()\"\n (dblclick)=\"onRowClick()\"\n [hoverable]=\"inlineEditMode && allowInlineEdit\"\n [class.control-readonly]=\"column.IsReadonly\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </td>\n } @if (contextMenuItems.length && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-context-menu\" fd-table-cell>\n <bsu-ulv-context-menu\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [mo]=\"mo\"\n [index]=\"index\"\n (commandClick)=\"onUlvCommand()\"\n [deviceName]=\"deviceName\"\n [menuItems]=\"contextMenuItems\"\n [allColumns]=\"allColumns\"\n ></bsu-ulv-context-menu>\n </td>\n } @if (showDetailsInRow && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-details\" fd-table-cell [fitContent]=\"true\">\n @if ((detailsComponent?.Selector || detailsColumns?.length || cartableParams?.moId ) && !hideDetailsText) {\n <div class=\"tw-flex tw-justify-end tw-w-full\">\n <button\n fd-button\n [label]=\"(detailsCollapsed ? detailsText : 'Hide') | bbbTranslate\"\n [fdType]=\"'transparent'\"\n (click)=\"onRowDetails()\"\n ></button>\n </div>\n }\n </td>\n } @if (actionList?.length && !inlineEditMode) {\n <td class=\"col-view\" [class.rtl]=\"rtl\" fd-table-cell [fitContent]=\"true\">\n <bsu-barsa-row-inline-actionlist\n [actionList]=\"actionList\"\n (btnClick)=\"actionListClick.emit($event)\"\n ></bsu-barsa-row-inline-actionlist>\n </td>\n } }\n</tr>\n} @if (secondaryColumns?.length && !mo.$Group && (!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"secondary-row\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\" (click)=\"onRowCheck()\"></td>\n }\n <td fd-table-cell colspan=\"100%\" (click)=\"onRowCheck()\" class=\"secondary p-wrapper\">\n <div style=\"display: flex; flex-direction: column\">\n @for (column of secondaryColumns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n style=\"font-family: 'BARSAFONT Medium'\"\n >\n <label fd-form-label>{{ column.Caption }} :</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n }\n </div>\n </td>\n</tr>\n} @if (cartableParams?.moId) {\n<tr\n [class.detailCollapsed]=\"detailsCollapsed\"\n fd-table-row\n class=\"showdetails cartable\"\n [attr.aria-selected]=\"isChecked\"\n [class.has-preview-column]=\"!!previewColumn\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? 1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container>\n <bnrc-form\n #cartableFormRef\n class=\"cartable-template\"\n [inlineEditInReport]=\"true\"\n [params]=\"cartableParams\"\n (beforeTransition)=\"onCartableBeforeTansition()\"\n (afterTransition)=\"onCartableAfterTansition($event)\"\n (bruleAction)=\"onCartableBruleAction($event)\"\n (click)=\"OnCartableFormClick($event)\"\n (formClose)=\"onCartableFormClosed()\"\n ></bnrc-form>\n </ng-container>\n </td>\n</tr>\n} @if (!detailsCollapsed && (detailsComponent?.Selector|| detailsColumns?.length)) {\n<tr fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\" [class.has-preview-column]=\"!!previewColumn\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container *ngTemplateOutlet=\"detailsColumnsTemplate\"></ng-container>\n @if (detailsComponent && detailsComponent.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"detailsComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"detailsComponentSetting\"\n [parameters]=\"detailsComponent.Settings\"\n [editMode]=\"inlineEditMode\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n ></bnrc-dynamic-item-component>\n }\n </td>\n</tr>\n} @if(previewColumn){\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"preview-column\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n (click)=\"onRowCheck()\"\n >\n <div style=\"display: flex; flex-direction: column\">\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"previewColumn.Name\"\n style=\"color: var(--sapAccentColor6)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: previewColumn,\n mo: mo,\n index: columns.length,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n </div>\n </td>\n</tr>\n} @if(isLastChildGroup && groupSummary){\n<tr #trEl fd-table-row class=\"group-summary-row\" [class.no-edit-mode]=\"true\" [attr.aria-selected]=\"false\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\"></td>\n } @for (column of columns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <td fd-table-cell>\n <label #summaryRef>{{ reCalculateColumnSummary(summaryRef, column) }}</label>\n </td>\n }\n</tr>\n} @if (bruleActionMessage && inlineEditMode) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n @if (bruleActionMessage.MessageType === 2) {\n <fd-message-strip [type]=\"bruleActionMessage.MessageType === 2 ? 'error' : 'information'\" [dismissible]=\"false\">\n {{ bruleActionMessage.MessageExpression }}\n </fd-message-strip>\n }\n </td>\n</tr>\n} @if (workflowState?.state === 'Finish' && workflowState?.error) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <fd-message-strip type=\"error\" [dismissible]=\"true\" (onDismiss)=\"onResetWorkflowState()\">\n {{ workflowState.error?.Text || workflowState.error?.MessageExpression }}\n </fd-message-strip>\n </td>\n</tr>\n}\n<ng-template #detailsColumnsTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n detailsFormItems;\n context: {\n $implicit: detailsColumns,\n mo: mo,\n inlineEditMode: inlineEditMode,\n layout94: layout$\n }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #detailsFormItems let-detailsColumns let-mo=\"mo\" let-inlineEditMode=\"inlineEditMode\" let-layout$=\"layout$\">\n <div class=\"form-items\">\n @for (column of detailsColumns; track column; let columnIndex = $index) {\n <div fd-form-item>\n <label fd-form-label for=\"input-2\">{{ column.Caption }}</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </div>\n }\n </div>\n</ng-template>\n<ng-template\n #columnTemplate\n let-column\n let-mo=\"mo\"\n let-index=\"index\"\n let-inlineEditMode=\"inlineEditMode\"\n let-layout94=\"layout94\"\n>\n <bsu-barsa-table-column\n [mo]=\"mo\"\n [allColumns]=\"allColumns\"\n [column]=\"column\"\n [isdirty]=\"dirtyColumns && dirtyColumns[column.Name]\"\n [value]=\"column | columnValue: mo\"\n [icon]=\"column | columnIcon: mo\"\n [customComponent]=\"column.$CustomComponent\"\n [column]=\"column\"\n [disableEllapsis]=\"secondaryColumns?.length\"\n [editMode]=\"isChecked && inlineEditMode && allowInlineEdit\"\n [inlineEditMode]=\"inlineEditMode\"\n [isChecked]=\"isChecked\"\n [index]=\"index\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [layout94]=\"layout94\"\n (save)=\"onEditFormPanelSave(null)\"\n (cancel)=\"onEditFormPanelCancel(null)\"\n (tab)=\"onTabKeyDown($event, index)\"\n (changeToEditMode)=\"onColumnChangeToEditMode($event, index)\"\n >\n </bsu-barsa-table-column>\n</ng-template>\n<ng-template #statusIndicator>\n @if (rowIndicator) {\n <bsu-barsa-column-indicator [hideBorderBottom]=\"!detailsCollapsed\" [backColor]=\"rowIndicatorColor\">\n </bsu-barsa-column-indicator>\n }\n</ng-template>\n<ng-template #rowNumberTemplate>\n @if (showRowNumber) {\n <td fd-table-cell bsu-barsa-column-rownumber [rowNumber]=\"rowNumber\" (click)=\"!isCheckList && onRowCheck()\"></td>\n }\n</ng-template>\n<tr fd-table-row style=\"pointer-events: none\"></tr>\n", styles: [":host{display:contents;width:100%}:host bnrc-form.cartable-template ::ng-deep bsu-ly-layout-container-of-root{padding-bottom:1rem}:host.has-preview-column .secondary-row td{border-bottom:none}:host ::ng-deep .row-group.mobile-mode{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e4e4e4)!important}:host ::ng-deep .inlineEditMode bnrc-field-ui{padding:0;margin:0}:host ::ng-deep .inlineEditMode bsu-ui-simple-combo{margin:0!important}:host ::ng-deep .secondary.p-wrapper p{display:flex;align-items:center}bsu-layout-control:not(.hide-form-item){align-items:center;height:100%;min-width:auto;width:auto}tr.group-summary-row td{border:none;background-color:#dde5f0;border-right:none!important;font-weight:700}tr.group-summary-row td label{font-weight:700}tr.group-summary-row td label.NaN{display:none}td{vertical-align:middle}td.control-readonly{background-color:var(--sapList_HeaderBackground)}tr.brule-message td{border:0}.row-group{background-color:var(--sapBackgroundColor, \"#f7f7ff\")}.cell-expand{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;font-size:.75rem;color:#0854a0;color:var(--sapContent_IconColor, #0854a0);min-width:2rem;max-width:2rem}.save-error{color:var(--sapField_InvalidColor)}.save-success{color:var(--sapField_SuccessColor)}.flow{max-width:100%}.flow-item{display:flex}.flow-item fd-micro-process-flow-icon{width:1.375rem;height:1.375rem}.flow-item h5{padding-right:.3rem}.cartable-template{padding:.5rem 0}.workflow-pending{opacity:.5;pointer-events:none;position:relative}.detailCollapsed{height:0;display:none}tr td.rep-column:first-child{position:sticky;right:0}tr:not([aria-selected=true]).preview-column td{border-bottom:var(--sapList_BorderWidth) var(--fdTable_Cell_Horizontal_Border_Style, solid) var(--sapList_BorderColor)}tr[aria-selected=true].has-preview-column td,tr.showdetails-on.hasCartable td{border-bottom:none}\n"] }]
70
+ args: [{ selector: 'bsu-barsa-table-row', providers: [FormPanelService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if ((!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n [class.row-error]=\"hasError\"\n [class.showdetails-on]=\"!detailsCollapsed\"\n [class.hasCartable]=\"!!cartableParams\"\n #trEl\n fd-table-row\n [activable]=\"false\"\n [hoverable]=\"true\"\n [main]=\"true\"\n [focusable]=\"true\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked\"\n [class.has-preview-column]=\"!!previewColumn\"\n [class.brule-message]=\"bruleActionMessage || workflowState?.error\"\n [class.workflow-pending]=\"workflowState?.state === 'Pending'\"\n [style.background-color]=\"isOdd && !isChecked ? 'var(--sapList_Hover_Background)' : null\"\n>\n @if (mo.$Group || mo.$Group === '') {\n <td\n [style.padding-right]=\"rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n [style.padding-left]=\"!rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n fd-table-cell\n style=\"font-weight: bold; font-size: 1rem\"\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n class=\"row-group\"\n [class.mobile-mode]=\"secondaryColumns?.length\"\n [attr.level]=\"level\"\n [class.root-group]=\"level === 0\"\n >\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [glyph]=\"expanded !== false ? 'navigation-down-arrow' : 'navigation-left-arrow'\"\n class=\"cell-expand\"\n (click)=\"onExpandClick()\"\n ></button>\n {{ mo.$Group === 'undefined' ? '' : mo.$Group }}\n </td>\n } @else {\n\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (isCheckList) {\n <td fd-table-cell [style.width]=\"checkboxComponent ? '60px' : null\">\n @if (workflowState?.state === 'Pending') {\n <div style=\"position: absolute; left: 0; right: 0; bottom: 0; top: 0\">\n <bsu-mask [top]=\"'20px'\" [size]=\"'s'\"></bsu-mask>\n </div>\n } @if (checkboxComponent?.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"checkboxComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"setting\"\n [parameters]=\"checkboxComponent.Parameters\"\n [editMode]=\"inlineEditMode\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [value]=\"isChecked\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n (events)=\"onRowCheck()\"\n ></bnrc-dynamic-item-component>\n } @else {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (ngModelChange)=\"onRowCheck()\"></fd-checkbox>\n }\n </td>\n } @if (!isCheckList && !showRowNumber) {\n <td\n fd-table-cell\n class=\"single-select\"\n (click)=\"!isCheckList && onRowCheck()\"\n style=\"padding: 0; text-align: center\"\n >\n @if (inlineEditMode && allowInlineEdit && (hasError || saving || saved)) { @if (hasError) {\n <fd-icon class=\"save-error\" glyph=\"error\"></fd-icon>\n } @if (saving) {\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\" title=\"record saving\"></fd-busy-indicator>\n } @if (saved) {\n <fd-icon class=\"save-success\" glyph=\"accept\"></fd-icon>\n } } @else { @if (mo.$State === 'New' && !isChecked) {\n <fd-icon glyph=\"favorite\"></fd-icon>\n } @if (inlineEditMode && allowInlineEdit && isChecked) {\n <fd-icon glyph=\"edit\"></fd-icon>\n } }\n </td>\n }\n <ng-container *ngTemplateOutlet=\"rowNumberTemplate\"></ng-container>\n @for (column of columns; track column.Name; let columnIndex = $index) {\n <td\n class=\"rep-column\"\n [attr.dbName]=\"column.Name\"\n #tdEl\n fd-table-cell\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"tdEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n [focusable]=\"false\"\n (click)=\"onColumnClick()\"\n (dblclick)=\"onRowClick()\"\n [hoverable]=\"inlineEditMode && allowInlineEdit\"\n [class.control-readonly]=\"column.IsReadonly\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </td>\n } @if (contextMenuItems.length && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-context-menu\" fd-table-cell>\n <bsu-ulv-context-menu\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [mo]=\"mo\"\n [index]=\"index\"\n (commandClick)=\"onUlvCommand()\"\n [deviceName]=\"deviceName\"\n [menuItems]=\"contextMenuItems\"\n [allColumns]=\"allColumns\"\n ></bsu-ulv-context-menu>\n </td>\n } @if (showDetailsInRow && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-details\" fd-table-cell [fitContent]=\"true\">\n @if ((detailsComponent?.Selector || detailsColumns?.length || cartableParams?.moId ) && !hideDetailsText) {\n <div class=\"tw-flex tw-justify-end tw-w-full\">\n <button\n fd-button\n [label]=\"(detailsCollapsed ? detailsText : 'Hide') | bbbTranslate\"\n [fdType]=\"'transparent'\"\n (click)=\"onRowDetails()\"\n ></button>\n </div>\n }\n </td>\n } @if (actionList?.length && !inlineEditMode) {\n <td class=\"col-view\" [class.rtl]=\"rtl\" fd-table-cell [fitContent]=\"true\">\n <bsu-barsa-row-inline-actionlist\n [actionList]=\"actionList\"\n (btnClick)=\"actionListClick.emit($event)\"\n ></bsu-barsa-row-inline-actionlist>\n </td>\n } }\n</tr>\n} @if (secondaryColumns?.length && !mo.$Group && (!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"secondary-row\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\" (click)=\"onRowCheck()\"></td>\n }\n <td fd-table-cell colspan=\"100%\" (click)=\"onRowCheck()\" class=\"secondary p-wrapper\">\n <div style=\"display: flex; flex-direction: column\">\n @for (column of secondaryColumns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n style=\"font-family: 'BARSAFONT Medium'\"\n >\n <label fd-form-label>{{ column.Caption }} :</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n }\n </div>\n </td>\n</tr>\n} @if (cartableParams?.moId) {\n<tr\n [class.detailCollapsed]=\"detailsCollapsed\"\n fd-table-row\n class=\"showdetails cartable\"\n [attr.aria-selected]=\"isChecked\"\n [class.has-preview-column]=\"!!previewColumn\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? 1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container>\n <bnrc-form\n #cartableFormRef\n class=\"cartable-template\"\n [inlineEditInReport]=\"true\"\n [params]=\"cartableParams\"\n (beforeTransition)=\"onCartableBeforeTansition()\"\n (afterTransition)=\"onCartableAfterTansition($event)\"\n (bruleAction)=\"onCartableBruleAction($event)\"\n (click)=\"OnCartableFormClick($event)\"\n (formClose)=\"onCartableFormClosed()\"\n ></bnrc-form>\n </ng-container>\n </td>\n</tr>\n} @if (!detailsCollapsed && (detailsComponent?.Selector|| detailsColumns?.length)) {\n<tr fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\" [class.has-preview-column]=\"!!previewColumn\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container *ngTemplateOutlet=\"detailsColumnsTemplate\"></ng-container>\n @if (detailsComponent && detailsComponent.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"detailsComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"detailsComponentSetting\"\n [parameters]=\"detailsComponent.Settings\"\n [editMode]=\"inlineEditMode\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n ></bnrc-dynamic-item-component>\n }\n </td>\n</tr>\n} @if(previewColumn){\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"preview-column\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n (click)=\"onRowCheck()\"\n >\n <div style=\"display: flex; flex-direction: column\">\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"previewColumn.Name\"\n style=\"color: var(--sapAccentColor6)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: previewColumn,\n mo: mo,\n index: columns.length,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n </div>\n </td>\n</tr>\n} @if(isLastChildGroup && groupSummary){\n<tr #trEl fd-table-row class=\"group-summary-row\" [class.no-edit-mode]=\"true\" [attr.aria-selected]=\"false\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\"></td>\n } @for (column of columns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <td fd-table-cell>\n <label #summaryRef>{{ reCalculateColumnSummary(summaryRef, column) }}</label>\n </td>\n } @if (contextMenuItems.length && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-context-menu\" fd-table-cell></td>\n } @if (showDetailsInRow && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-details\" fd-table-cell [fitContent]=\"true\"></td>\n } @if (actionList?.length && !inlineEditMode) {\n <td class=\"col-view\" fd-table-cell [fitContent]=\"true\"></td>\n }\n</tr>\n} @if (bruleActionMessage && inlineEditMode) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n @if (bruleActionMessage.MessageType === 2) {\n <fd-message-strip [type]=\"bruleActionMessage.MessageType === 2 ? 'error' : 'information'\" [dismissible]=\"false\">\n {{ bruleActionMessage.MessageExpression }}\n </fd-message-strip>\n }\n </td>\n</tr>\n} @if (workflowState?.state === 'Finish' && workflowState?.error) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <fd-message-strip type=\"error\" [dismissible]=\"true\" (onDismiss)=\"onResetWorkflowState()\">\n {{ workflowState.error?.Text || workflowState.error?.MessageExpression }}\n </fd-message-strip>\n </td>\n</tr>\n}\n<ng-template #detailsColumnsTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n detailsFormItems;\n context: {\n $implicit: detailsColumns,\n mo: mo,\n inlineEditMode: inlineEditMode,\n layout94: layout$\n }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #detailsFormItems let-detailsColumns let-mo=\"mo\" let-inlineEditMode=\"inlineEditMode\" let-layout$=\"layout$\">\n <div class=\"form-items\">\n @for (column of detailsColumns; track column; let columnIndex = $index) {\n <div fd-form-item>\n <label fd-form-label for=\"input-2\">{{ column.Caption }}</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </div>\n }\n </div>\n</ng-template>\n<ng-template\n #columnTemplate\n let-column\n let-mo=\"mo\"\n let-index=\"index\"\n let-inlineEditMode=\"inlineEditMode\"\n let-layout94=\"layout94\"\n>\n <bsu-barsa-table-column\n [mo]=\"mo\"\n [allColumns]=\"allColumns\"\n [column]=\"column\"\n [isdirty]=\"dirtyColumns && dirtyColumns[column.Name]\"\n [value]=\"column | columnValue: mo\"\n [icon]=\"column | columnIcon: mo\"\n [customComponent]=\"column.$CustomComponent\"\n [column]=\"column\"\n [disableEllapsis]=\"secondaryColumns?.length\"\n [editMode]=\"isChecked && inlineEditMode && allowInlineEdit\"\n [inlineEditMode]=\"inlineEditMode\"\n [isChecked]=\"isChecked\"\n [index]=\"index\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [layout94]=\"layout94\"\n (save)=\"onEditFormPanelSave(null)\"\n (cancel)=\"onEditFormPanelCancel(null)\"\n (tab)=\"onTabKeyDown($event, index)\"\n (changeToEditMode)=\"onColumnChangeToEditMode($event, index)\"\n >\n </bsu-barsa-table-column>\n</ng-template>\n<ng-template #statusIndicator>\n @if (rowIndicator) {\n <bsu-barsa-column-indicator [hideBorderBottom]=\"!detailsCollapsed\" [backColor]=\"rowIndicatorColor\">\n </bsu-barsa-column-indicator>\n }\n</ng-template>\n<ng-template #rowNumberTemplate>\n @if (showRowNumber) {\n <td fd-table-cell bsu-barsa-column-rownumber [rowNumber]=\"rowNumber\" (click)=\"!isCheckList && onRowCheck()\"></td>\n }\n</ng-template>\n<tr fd-table-row style=\"pointer-events: none\"></tr>\n", styles: [":host{display:contents;width:100%}:host bnrc-form.cartable-template ::ng-deep bsu-ly-layout-container-of-root{padding-bottom:1rem}:host.has-preview-column .secondary-row td{border-bottom:none}:host ::ng-deep .row-group.mobile-mode{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e4e4e4)!important}:host ::ng-deep .inlineEditMode bnrc-field-ui{padding:0;margin:0}:host ::ng-deep .inlineEditMode bsu-ui-simple-combo{margin:0!important}:host ::ng-deep .secondary.p-wrapper p{display:flex;align-items:center}bsu-layout-control:not(.hide-form-item){align-items:center;height:100%;min-width:auto;width:auto}tr.group-summary-row td{border:none;background-color:#dde5f0;border-right:none!important;font-weight:700}tr.group-summary-row td label{font-weight:700}tr.group-summary-row td label.NaN{display:none}td{vertical-align:middle}td.control-readonly{background-color:var(--sapList_HeaderBackground)}tr.brule-message td{border:0}.row-group{background-color:var(--sapBackgroundColor, \"#f7f7ff\")}.cell-expand{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;font-size:.75rem;color:#0854a0;color:var(--sapContent_IconColor, #0854a0);min-width:2rem;max-width:2rem}.save-error{color:var(--sapField_InvalidColor)}.save-success{color:var(--sapField_SuccessColor)}.flow{max-width:100%}.flow-item{display:flex}.flow-item fd-micro-process-flow-icon{width:1.375rem;height:1.375rem}.flow-item h5{padding-right:.3rem}.cartable-template{padding:.5rem 0}.workflow-pending{opacity:.5;pointer-events:none;position:relative}.detailCollapsed{height:0;display:none}tr td.rep-column:first-child{position:sticky;right:0}tr:not([aria-selected=true]).preview-column td{border-bottom:var(--sapList_BorderWidth) var(--fdTable_Cell_Horizontal_Border_Style, solid) var(--sapList_BorderColor)}tr[aria-selected=true].has-preview-column td,tr.showdetails-on.hasCartable td{border-bottom:none}\n"] }]
69
71
  }], propDecorators: { showDetailsInRow: [{
70
72
  type: Input
71
73
  }], detailsComponent: [{
@@ -88,4 +90,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
88
90
  type: ViewChild,
89
91
  args: ['detailsFormItems', { static: true }]
90
92
  }] } });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtdGFibGUtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLXRhYmxlLXJvdy9iYXJzYS10YWJsZS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdGFibGUtcm93L2JhcnNhLXRhYmxlLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBR0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsMEJBQTBCLEVBQzFCLGdCQUFnQixFQUluQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlCLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSwwQkFBMEI7SUFQdEU7O1FBUWEscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBUXhCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFLaEUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQXFDbEM7SUFuQ0csUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3RGLElBQUksQ0FBQyx1QkFBdUIsR0FBRztZQUMzQixHQUFHLElBQUksQ0FBQyxPQUFPO1lBQ2YsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ3BDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDM0MsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxLQUFrQixFQUFFLE1BQU07UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDaEMsTUFBTTtZQUNOLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNmLEtBQUssQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDaEUsS0FBSyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDMUIsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxhQUFhO1FBQ1QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNELFlBQVk7UUFDUixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDOzhHQWxEUSxzQkFBc0I7a0dBQXRCLHNCQUFzQiwyWEFIcEIsQ0FBQyxnQkFBZ0IsQ0FBQyxxTEMxQmpDLDBvakJBbWRBOzsyRkR0YmEsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNJLHFCQUFxQixhQUdwQixDQUFDLGdCQUFnQixDQUFDLG1CQUNaLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQzBDLGdCQUFnQjtzQkFBaEUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIGluamVjdCxcbiAgICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBNb0ZvclJlcG9ydE1vZGVsLFxuICAgIEJhc2VWaWV3SXRlbVByb3BzQ29tcG9uZW50LFxuICAgIEZvcm1QYW5lbFNlcnZpY2UsXG4gICAgRWpyYXlPbGdvLFxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXG4gICAgQ29sdW1uU3VtbWFyeVR5cGVcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1iYXJzYS10YWJsZS1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYXJzYS10YWJsZS1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JhcnNhLXRhYmxlLXJvdy5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0Zvcm1QYW5lbFNlcnZpY2VdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEJhcnNhVGFibGVSb3dDb21wb25lbnQgZXh0ZW5kcyBCYXNlVmlld0l0ZW1Qcm9wc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgc2hvd0RldGFpbHNJblJvdyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGRldGFpbHNDb21wb25lbnQ/OiBFanJheU9sZ287XG4gICAgQElucHV0KCkgZGV0YWlsc0NvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTtcbiAgICBASW5wdXQoKSBkZXRhaWxzVGV4dDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByZXZpZXdDb2x1bW46IFJlcG9ydFZpZXdDb2x1bW47XG4gICAgQElucHV0KCkgY29sdW1uQ29tcG9uZW50czogTW9Gb3JSZXBvcnRNb2RlbCB8IG51bGw7XG4gICAgQElucHV0KCkgZGlydHlDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgICBASW5wdXQoKSBkZXRhaWxzQ29sbGFwc2VkOiBib29sZWFuO1xuICAgIEBPdXRwdXQoKSBjb2x1bW5TdW1tYXJ5ID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5TdW1tYXJ5VHlwZT4oKTtcbiAgICBAVmlld0NoaWxkKCdkZXRhaWxzRm9ybUl0ZW1zJywgeyBzdGF0aWM6IHRydWUgfSkgZGV0YWlsc0Zvcm1JdGVtczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGRldGFpbHNDb21wb25lbnRTZXR0aW5nOiBhbnk7XG4gICAgaXNPZGQ6IGJvb2xlYW47XG4gICAgX3JlbmRlcmVyMiA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIGVsOiBFbGVtZW50UmVmO1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmVsID0gdGhpcy5fZWw7XG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdDb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LCAnaGFzLXByZXZpZXctY29sdW1uJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93TiA9IE51bWJlcih0aGlzLnJvd051bWJlcik7XG4gICAgICAgIHRoaXMuaXNPZGQgPSBpc05hTihyb3dOKSB8fCAhdGhpcy5jb2xvcmluZ1JvdyA/IGZhbHNlIDogcm93TiAlIDIgPT09IDAgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIHRoaXMuZGV0YWlsc0NvbXBvbmVudFNldHRpbmcgPSB7XG4gICAgICAgICAgICAuLi50aGlzLnNldHRpbmcsXG4gICAgICAgICAgICAkZGV0YWlsc0NvbHVtbnM6IHRoaXMuZGV0YWlsc0NvbHVtbnMsXG4gICAgICAgICAgICAkZGV0YWlsc0Zvcm1JdGVtczogdGhpcy5kZXRhaWxzRm9ybUl0ZW1zXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGV0YWlsc1RleHQgfHw9ICdEZXRhaWxzJztcbiAgICB9XG4gICAgcmVDYWxjdWxhdGVDb2x1bW5TdW1tYXJ5KGVsRG9tOiBIVE1MRWxlbWVudCwgY29sdW1uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1uU3VtbWFyeS5lbWl0KHtcbiAgICAgICAgICAgIG1vQXJyOiB0aGlzLm1vLiRQYXJlbnQuJENoaWxkcmVuLFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgc3VtbWFyeUZuOiAodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxEb20uY2xhc3NOYW1lID0gdmFsLnRvU3RyaW5nKCkucmVwbGFjZSgvJmxybTt8XFx1MjAwRS9naSwgJyAnKTtcbiAgICAgICAgICAgICAgICBlbERvbS5pbm5lckhUTUwgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvbkNvbHVtbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0NoZWNrTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Sb3dDaGVjaygpO1xuICAgIH1cbiAgICBvblJvd0RldGFpbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGV0YWlsc0NvbGxhcHNlZCA9ICF0aGlzLmRldGFpbHNDb2xsYXBzZWQ7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxufVxuIiwiQGlmICgoIW1vLiRQYXJlbnQgfHwgcGFyZW50RXhwYW5kZWQpICYmIHZpc2liaWxpdHkgIT09IGZhbHNlKSB7XG48dHJcbiAgICBbY2xhc3Mucm93LWVycm9yXT1cImhhc0Vycm9yXCJcbiAgICBbY2xhc3Muc2hvd2RldGFpbHMtb25dPVwiIWRldGFpbHNDb2xsYXBzZWRcIlxuICAgIFtjbGFzcy5oYXNDYXJ0YWJsZV09XCIhIWNhcnRhYmxlUGFyYW1zXCJcbiAgICAjdHJFbFxuICAgIGZkLXRhYmxlLXJvd1xuICAgIFthY3RpdmFibGVdPVwiZmFsc2VcIlxuICAgIFtob3ZlcmFibGVdPVwidHJ1ZVwiXG4gICAgW21haW5dPVwidHJ1ZVwiXG4gICAgW2ZvY3VzYWJsZV09XCJ0cnVlXCJcbiAgICBbYXBwbHlDb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICBbc3R5bGVJbmRleF09XCJzdHlsZUluZGV4XCJcbiAgICBbaG9zdEVsXT1cInRyRWxcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNDaGVja2VkXCJcbiAgICBbY2xhc3MuaGFzLXByZXZpZXctY29sdW1uXT1cIiEhcHJldmlld0NvbHVtblwiXG4gICAgW2NsYXNzLmJydWxlLW1lc3NhZ2VdPVwiYnJ1bGVBY3Rpb25NZXNzYWdlIHx8IHdvcmtmbG93U3RhdGU/LmVycm9yXCJcbiAgICBbY2xhc3Mud29ya2Zsb3ctcGVuZGluZ109XCJ3b3JrZmxvd1N0YXRlPy5zdGF0ZSA9PT0gJ1BlbmRpbmcnXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpc09kZCAmJiAhaXNDaGVja2VkID8gJ3ZhcigtLXNhcExpc3RfSG92ZXJfQmFja2dyb3VuZCknIDogbnVsbFwiXG4+XG4gICAgQGlmIChtby4kR3JvdXAgfHwgbW8uJEdyb3VwID09PSAnJykge1xuICAgIDx0ZFxuICAgICAgICBbc3R5bGUucGFkZGluZy1yaWdodF09XCJydGwgPyAnY2FsYyggMXJlbSArICcgKyBsZXZlbCAqIDEyICsgJ3B4JyArICcgKScgOiAnaW5oZXJpdCdcIlxuICAgICAgICBbc3R5bGUucGFkZGluZy1sZWZ0XT1cIiFydGwgPyAnY2FsYyggMXJlbSArICcgKyBsZXZlbCAqIDEyICsgJ3B4JyArICcgKScgOiAnaW5oZXJpdCdcIlxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMXJlbVwiXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInJvdy1ncm91cFwiXG4gICAgICAgIFtjbGFzcy5tb2JpbGUtbW9kZV09XCJzZWNvbmRhcnlDb2x1bW5zPy5sZW5ndGhcIlxuICAgICAgICBbYXR0ci5sZXZlbF09XCJsZXZlbFwiXG4gICAgICAgIFtjbGFzcy5yb290LWdyb3VwXT1cImxldmVsID09PSAwXCJcbiAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtnbHlwaF09XCJleHBhbmRlZCAhPT0gZmFsc2UgPyAnbmF2aWdhdGlvbi1kb3duLWFycm93JyA6ICduYXZpZ2F0aW9uLWxlZnQtYXJyb3cnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2VsbC1leHBhbmRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kQ2xpY2soKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAge3sgbW8uJEdyb3VwID09PSAndW5kZWZpbmVkJyA/ICcnIDogbW8uJEdyb3VwIH19XG4gICAgPC90ZD5cbiAgICB9IEBlbHNlIHtcblxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNJbmRpY2F0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICBAaWYgKGlzQ2hlY2tMaXN0KSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgW3N0eWxlLndpZHRoXT1cImNoZWNrYm94Q29tcG9uZW50ID8gJzYwcHgnIDogbnVsbFwiPlxuICAgICAgICBAaWYgKHdvcmtmbG93U3RhdGU/LnN0YXRlID09PSAnUGVuZGluZycpIHtcbiAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgcmlnaHQ6IDA7IGJvdHRvbTogMDsgdG9wOiAwXCI+XG4gICAgICAgICAgICA8YnN1LW1hc2sgW3RvcF09XCInMjBweCdcIiBbc2l6ZV09XCIncydcIj48L2JzdS1tYXNrPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAaWYgKGNoZWNrYm94Q29tcG9uZW50Py5TZWxlY3Rvcikge1xuICAgICAgICA8Ym5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50XG4gICAgICAgICAgICBbY29tcG9uZW50XT1cImNoZWNrYm94Q29tcG9uZW50XCJcbiAgICAgICAgICAgIFttb109XCJtb1wiXG4gICAgICAgICAgICBbaXNDaGVja2VkXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgICAgICBbVWx2TWFpbkN0cmxyXT1cIlVsdk1haW5DdHJsclwiXG4gICAgICAgICAgICBbc2V0dGluZ109XCJzZXR0aW5nXCJcbiAgICAgICAgICAgIFtwYXJhbWV0ZXJzXT1cImNoZWNrYm94Q29tcG9uZW50LlBhcmFtZXRlcnNcIlxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cImlubGluZUVkaXRNb2RlXCJcbiAgICAgICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICBbYWxsQ29sdW1uc109XCJhbGxDb2x1bW5zXCJcbiAgICAgICAgICAgIFt0eXBlRGVmSWRdPVwidHlwZURlZklkXCJcbiAgICAgICAgICAgIChldmVudHMpPVwib25Sb3dDaGVjaygpXCJcbiAgICAgICAgPjwvYm5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGZkLWNoZWNrYm94IFtuYW1lXT1cIm1vLiRDYXB0aW9uXCIgW25nTW9kZWxdPVwiaXNDaGVja2VkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Sb3dDaGVjaygpXCI+PC9mZC1jaGVja2JveD5cbiAgICAgICAgfVxuICAgIDwvdGQ+XG4gICAgfSBAaWYgKCFpc0NoZWNrTGlzdCAmJiAhc2hvd1Jvd051bWJlcikge1xuICAgIDx0ZFxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIGNsYXNzPVwic2luZ2xlLXNlbGVjdFwiXG4gICAgICAgIChjbGljayk9XCIhaXNDaGVja0xpc3QgJiYgb25Sb3dDaGVjaygpXCJcbiAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXJcIlxuICAgID5cbiAgICAgICAgQGlmIChpbmxpbmVFZGl0TW9kZSAmJiBhbGxvd0lubGluZUVkaXQgJiYgKGhhc0Vycm9yIHx8IHNhdmluZyB8fCBzYXZlZCkpIHsgQGlmIChoYXNFcnJvcikge1xuICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cInNhdmUtZXJyb3JcIiBnbHlwaD1cImVycm9yXCI+PC9mZC1pY29uPlxuICAgICAgICB9IEBpZiAoc2F2aW5nKSB7XG4gICAgICAgIDxmZC1idXN5LWluZGljYXRvciBbbG9hZGluZ109XCJ0cnVlXCIgW3NpemVdPVwiJ3MnXCIgdGl0bGU9XCJyZWNvcmQgc2F2aW5nXCI+PC9mZC1idXN5LWluZGljYXRvcj5cbiAgICAgICAgfSBAaWYgKHNhdmVkKSB7XG4gICAgICAgIDxmZC1pY29uIGNsYXNzPVwic2F2ZS1zdWNjZXNzXCIgZ2x5cGg9XCJhY2NlcHRcIj48L2ZkLWljb24+XG4gICAgICAgIH0gfSBAZWxzZSB7IEBpZiAobW8uJFN0YXRlID09PSAnTmV3JyAmJiAhaXNDaGVja2VkKSB7XG4gICAgICAgIDxmZC1pY29uIGdseXBoPVwiZmF2b3JpdGVcIj48L2ZkLWljb24+XG4gICAgICAgIH0gQGlmIChpbmxpbmVFZGl0TW9kZSAmJiBhbGxvd0lubGluZUVkaXQgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgIDxmZC1pY29uIGdseXBoPVwiZWRpdFwiPjwvZmQtaWNvbj5cbiAgICAgICAgfSB9XG4gICAgPC90ZD5cbiAgICB9XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd051bWJlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbi5OYW1lOyBsZXQgY29sdW1uSW5kZXggPSAkaW5kZXgpIHtcbiAgICA8dGRcbiAgICAgICAgY2xhc3M9XCJyZXAtY29sdW1uXCJcbiAgICAgICAgW2F0dHIuZGJOYW1lXT1cImNvbHVtbi5OYW1lXCJcbiAgICAgICAgI3RkRWxcbiAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICBbYXBwbHlDb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgW2hvc3RFbF09XCJ0ZEVsXCJcbiAgICAgICAgW3N0eWxlSW5kZXhdPVwic3R5bGVJbmRleFwiXG4gICAgICAgIFtkYk5hbWVdPVwiY29sdW1uLk5hbWVcIlxuICAgICAgICBbZm9jdXNhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uQ2xpY2soKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJvblJvd0NsaWNrKClcIlxuICAgICAgICBbaG92ZXJhYmxlXT1cImlubGluZUVkaXRNb2RlICYmIGFsbG93SW5saW5lRWRpdFwiXG4gICAgICAgIFtjbGFzcy5jb250cm9sLXJlYWRvbmx5XT1cImNvbHVtbi5Jc1JlYWRvbmx5XCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgbW86IG1vLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZUVkaXRNb2RlOiBpbmxpbmVFZGl0TW9kZSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCQgfCBhc3luY1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L3RkPlxuICAgIH0gQGlmIChjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCAmJiAoIWlubGluZUVkaXRNb2RlIHx8ICFhbGxvd0lubGluZUVkaXQpKSB7XG4gICAgPHRkIGNsYXNzPVwiY29sLWNvbnRleHQtbWVudVwiIGZkLXRhYmxlLWNlbGw+XG4gICAgICAgIDxic3UtdWx2LWNvbnRleHQtbWVudVxuICAgICAgICAgICAgW2Rpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XT1cImRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XCJcbiAgICAgICAgICAgIFtjb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgICAgICAgICAgW21vXT1cIm1vXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAoY29tbWFuZENsaWNrKT1cIm9uVWx2Q29tbWFuZCgpXCJcbiAgICAgICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxuICAgICAgICAgICAgW21lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcbiAgICAgICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICA+PC9ic3UtdWx2LWNvbnRleHQtbWVudT5cbiAgICA8L3RkPlxuICAgIH0gQGlmIChzaG93RGV0YWlsc0luUm93ICYmICghaW5saW5lRWRpdE1vZGUgfHwgIWFsbG93SW5saW5lRWRpdCkpIHtcbiAgICA8dGQgY2xhc3M9XCJjb2wtZGV0YWlsc1wiIGZkLXRhYmxlLWNlbGwgW2ZpdENvbnRlbnRdPVwidHJ1ZVwiPlxuICAgICAgICBAaWYgKChkZXRhaWxzQ29tcG9uZW50Py5TZWxlY3RvciB8fCBkZXRhaWxzQ29sdW1ucz8ubGVuZ3RoIHx8IGNhcnRhYmxlUGFyYW1zPy5tb0lkICkgJiYgIWhpZGVEZXRhaWxzVGV4dCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1qdXN0aWZ5LWVuZCB0dy13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiKGRldGFpbHNDb2xsYXBzZWQgPyBkZXRhaWxzVGV4dCA6ICdIaWRlJykgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RGV0YWlscygpXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L3RkPlxuICAgIH0gQGlmIChhY3Rpb25MaXN0Py5sZW5ndGggJiYgIWlubGluZUVkaXRNb2RlKSB7XG4gICAgPHRkIGNsYXNzPVwiY29sLXZpZXdcIiBbY2xhc3MucnRsXT1cInJ0bFwiIGZkLXRhYmxlLWNlbGwgW2ZpdENvbnRlbnRdPVwidHJ1ZVwiPlxuICAgICAgICA8YnN1LWJhcnNhLXJvdy1pbmxpbmUtYWN0aW9ubGlzdFxuICAgICAgICAgICAgW2FjdGlvbkxpc3RdPVwiYWN0aW9uTGlzdFwiXG4gICAgICAgICAgICAoYnRuQ2xpY2spPVwiYWN0aW9uTGlzdENsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgID48L2JzdS1iYXJzYS1yb3ctaW5saW5lLWFjdGlvbmxpc3Q+XG4gICAgPC90ZD5cbiAgICB9IH1cbjwvdHI+XG59IEBpZiAoc2Vjb25kYXJ5Q29sdW1ucz8ubGVuZ3RoICYmICFtby4kR3JvdXAgJiYgKCFtby4kUGFyZW50IHx8IHBhcmVudEV4cGFuZGVkKSAmJiB2aXNpYmlsaXR5ICE9PSBmYWxzZSkge1xuPHRyXG4gICAgI3RyRWxcbiAgICBmZC10YWJsZS1yb3dcbiAgICBbc2Vjb25kYXJ5XT1cInRydWVcIlxuICAgIGNsYXNzPVwic2Vjb25kYXJ5LXJvd1wiXG4gICAgW2NsYXNzLm5vLWVkaXQtbW9kZV09XCIhaW5saW5lRWRpdE1vZGVcIlxuICAgIFthcHBseUNvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgIFtob3N0RWxdPVwidHJFbFwiXG4gICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc0NoZWNrZWQgJiYgIWlubGluZUVkaXRNb2RlID8gdHJ1ZSA6IGZhbHNlXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzSW5kaWNhdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgQGlmICghaXNDaGVja0xpc3QpIHtcbiAgICA8dGQgZmQtdGFibGUtY2VsbCBjbGFzcz1cInNpbmdsZS1zZWxlY3RcIiAoY2xpY2spPVwib25Sb3dDaGVjaygpXCI+PC90ZD5cbiAgICB9XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgY29sc3Bhbj1cIjEwMCVcIiAoY2xpY2spPVwib25Sb3dDaGVjaygpXCIgY2xhc3M9XCJzZWNvbmRhcnkgcC13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uXCI+XG4gICAgICAgICAgICBAZm9yIChjb2x1bW4gb2Ygc2Vjb25kYXJ5Q29sdW1uczsgdHJhY2sgX3RyYWNrQnlDb2x1bW4oY29sdW1uSW5kZXgsIGNvbHVtbik7IGxldCBjb2x1bW5JbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAjcEVsXG4gICAgICAgICAgICAgICAgZmQtdGFibGUtdGV4dFxuICAgICAgICAgICAgICAgIFthcHBseUNvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgICAgICAgICAgICAgIFtob3N0RWxdPVwicEVsXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVJbmRleF09XCJzdHlsZUluZGV4XCJcbiAgICAgICAgICAgICAgICBbZGJOYW1lXT1cImNvbHVtbi5OYW1lXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtZmFtaWx5OiAnQkFSU0FGT05UIE1lZGl1bSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmZC1mb3JtLWxhYmVsPnt7IGNvbHVtbi5DYXB0aW9uIH19IDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vOiBtbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lRWRpdE1vZGU6IGlubGluZUVkaXRNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dDk0OiBsYXlvdXQkIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvdGQ+XG48L3RyPlxufSBAaWYgKGNhcnRhYmxlUGFyYW1zPy5tb0lkKSB7XG48dHJcbiAgICBbY2xhc3MuZGV0YWlsQ29sbGFwc2VkXT1cImRldGFpbHNDb2xsYXBzZWRcIlxuICAgIGZkLXRhYmxlLXJvd1xuICAgIGNsYXNzPVwic2hvd2RldGFpbHMgY2FydGFibGVcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNDaGVja2VkXCJcbiAgICBbY2xhc3MuaGFzLXByZXZpZXctY29sdW1uXT1cIiEhcHJldmlld0NvbHVtblwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIDx0ZFxuICAgICAgICAoY2xpY2spPVwib25Sb3dDaGVjaygpXCJcbiAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICBbYXR0ci5jb2xzcGFuXT1cIlxuICAgICAgICAgICAgY29sdW1ucy5sZW5ndGggK1xuICAgICAgICAgICAgMSArXG4gICAgICAgICAgICAocm93SW5kaWNhdG9yID8gMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxibnJjLWZvcm1cbiAgICAgICAgICAgICAgICAjY2FydGFibGVGb3JtUmVmXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJ0YWJsZS10ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2lubGluZUVkaXRJblJlcG9ydF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcGFyYW1zXT1cImNhcnRhYmxlUGFyYW1zXCJcbiAgICAgICAgICAgICAgICAoYmVmb3JlVHJhbnNpdGlvbik9XCJvbkNhcnRhYmxlQmVmb3JlVGFuc2l0aW9uKClcIlxuICAgICAgICAgICAgICAgIChhZnRlclRyYW5zaXRpb24pPVwib25DYXJ0YWJsZUFmdGVyVGFuc2l0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChicnVsZUFjdGlvbik9XCJvbkNhcnRhYmxlQnJ1bGVBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIk9uQ2FydGFibGVGb3JtQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvcm1DbG9zZSk9XCJvbkNhcnRhYmxlRm9ybUNsb3NlZCgpXCJcbiAgICAgICAgICAgID48L2JucmMtZm9ybT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90ZD5cbjwvdHI+XG59IEBpZiAoIWRldGFpbHNDb2xsYXBzZWQgJiYgKGRldGFpbHNDb21wb25lbnQ/LlNlbGVjdG9yfHwgZGV0YWlsc0NvbHVtbnM/Lmxlbmd0aCkpIHtcbjx0ciBmZC10YWJsZS1yb3cgY2xhc3M9XCJzaG93ZGV0YWlsc1wiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNDaGVja2VkXCIgW2NsYXNzLmhhcy1wcmV2aWV3LWNvbHVtbl09XCIhIXByZXZpZXdDb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzSW5kaWNhdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgPHRkXG4gICAgICAgIChjbGljayk9XCJvblJvd0NoZWNrKClcIlxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRldGFpbHNDb2x1bW5zVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgQGlmIChkZXRhaWxzQ29tcG9uZW50ICYmIGRldGFpbHNDb21wb25lbnQuU2VsZWN0b3IpIHtcbiAgICAgICAgPGJucmMtZHluYW1pYy1pdGVtLWNvbXBvbmVudFxuICAgICAgICAgICAgW2NvbXBvbmVudF09XCJkZXRhaWxzQ29tcG9uZW50XCJcbiAgICAgICAgICAgIFttb109XCJtb1wiXG4gICAgICAgICAgICBbaXNDaGVja2VkXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgICAgICBbVWx2TWFpbkN0cmxyXT1cIlVsdk1haW5DdHJsclwiXG4gICAgICAgICAgICBbc2V0dGluZ109XCJkZXRhaWxzQ29tcG9uZW50U2V0dGluZ1wiXG4gICAgICAgICAgICBbcGFyYW1ldGVyc109XCJkZXRhaWxzQ29tcG9uZW50LlNldHRpbmdzXCJcbiAgICAgICAgICAgIFtlZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgICAgICAgICBbZm9ybVNldHRpbmddPVwiZm9ybVNldHRpbmdcIlxuICAgICAgICAgICAgW3J0bF09XCJydGxcIlxuICAgICAgICAgICAgW2RldmljZU5hbWVdPVwiZGV2aWNlTmFtZVwiXG4gICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICBbYWxsQ29sdW1uc109XCJhbGxDb2x1bW5zXCJcbiAgICAgICAgICAgIFt0eXBlRGVmSWRdPVwidHlwZURlZklkXCJcbiAgICAgICAgPjwvYm5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50PlxuICAgICAgICB9XG4gICAgPC90ZD5cbjwvdHI+XG59IEBpZihwcmV2aWV3Q29sdW1uKXtcbjx0clxuICAgICN0ckVsXG4gICAgZmQtdGFibGUtcm93XG4gICAgW3NlY29uZGFyeV09XCJ0cnVlXCJcbiAgICBjbGFzcz1cInByZXZpZXctY29sdW1uXCJcbiAgICBbY2xhc3Mubm8tZWRpdC1tb2RlXT1cIiFpbmxpbmVFZGl0TW9kZVwiXG4gICAgW2FwcGx5Q29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXG4gICAgW3N0eWxlSW5kZXhdPVwic3R5bGVJbmRleFwiXG4gICAgW2hvc3RFbF09XCJ0ckVsXCJcbiAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzQ2hlY2tlZCAmJiAhaW5saW5lRWRpdE1vZGUgPyB0cnVlIDogZmFsc2VcIlxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNJbmRpY2F0b3JcIj48L25nLWNvbnRhaW5lcj5cblxuICAgIDx0ZFxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwib25Sb3dDaGVjaygpXCJcbiAgICA+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uXCI+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICNwRWxcbiAgICAgICAgICAgICAgICBmZC10YWJsZS10ZXh0XG4gICAgICAgICAgICAgICAgW2FwcGx5Q29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXG4gICAgICAgICAgICAgICAgW2hvc3RFbF09XCJwRWxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgICAgICAgICAgICAgIFtkYk5hbWVdPVwicHJldmlld0NvbHVtbi5OYW1lXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiB2YXIoLS1zYXBBY2NlbnRDb2xvcjYpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHByZXZpZXdDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW86IG1vLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2x1bW5zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVFZGl0TW9kZTogaW5saW5lRWRpdE1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCQgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC90ZD5cbjwvdHI+XG59IEBpZihpc0xhc3RDaGlsZEdyb3VwICYmIGdyb3VwU3VtbWFyeSl7XG48dHIgI3RyRWwgZmQtdGFibGUtcm93IGNsYXNzPVwiZ3JvdXAtc3VtbWFyeS1yb3dcIiBbY2xhc3Mubm8tZWRpdC1tb2RlXT1cInRydWVcIiBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImZhbHNlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIEBpZiAoIWlzQ2hlY2tMaXN0KSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJzaW5nbGUtc2VsZWN0XCI+PC90ZD5cbiAgICB9IEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBfdHJhY2tCeUNvbHVtbihjb2x1bW5JbmRleCwgY29sdW1uKTsgbGV0IGNvbHVtbkluZGV4ID0gJGluZGV4KSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGw+XG4gICAgICAgIDxsYWJlbCAjc3VtbWFyeVJlZj57eyByZUNhbGN1bGF0ZUNvbHVtblN1bW1hcnkoc3VtbWFyeVJlZiwgY29sdW1uKSB9fTwvbGFiZWw+XG4gICAgPC90ZD5cbiAgICB9XG48L3RyPlxufSBAaWYgKGJydWxlQWN0aW9uTWVzc2FnZSAmJiBpbmxpbmVFZGl0TW9kZSkge1xuPHRyIGZkLXRhYmxlLXJvdz5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzSW5kaWNhdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgPHRkXG4gICAgICAgIGZkLXRhYmxlLWNlbGxcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJcbiAgICAgICAgICAgIGNvbHVtbnMubGVuZ3RoICtcbiAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgKHJvd0luZGljYXRvciA/IC0xIDogMCkgK1xuICAgICAgICAgICAgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKSArXG4gICAgICAgICAgICAoc2hvd1ZpZXdCdXR0b24gPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dEZXRhaWxzSW5Sb3cgJiYgIWlubGluZUVkaXRNb2RlID8gMSA6IDApXG4gICAgICAgIFwiXG4gICAgPlxuICAgICAgICBAaWYgKGJydWxlQWN0aW9uTWVzc2FnZS5NZXNzYWdlVHlwZSA9PT0gMikge1xuICAgICAgICA8ZmQtbWVzc2FnZS1zdHJpcCBbdHlwZV09XCJicnVsZUFjdGlvbk1lc3NhZ2UuTWVzc2FnZVR5cGUgPT09IDIgPyAnZXJyb3InIDogJ2luZm9ybWF0aW9uJ1wiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAge3sgYnJ1bGVBY3Rpb25NZXNzYWdlLk1lc3NhZ2VFeHByZXNzaW9uIH19XG4gICAgICAgIDwvZmQtbWVzc2FnZS1zdHJpcD5cbiAgICAgICAgfVxuICAgIDwvdGQ+XG48L3RyPlxufSBAaWYgKHdvcmtmbG93U3RhdGU/LnN0YXRlID09PSAnRmluaXNoJyAmJiB3b3JrZmxvd1N0YXRlPy5lcnJvcikge1xuPHRyIGZkLXRhYmxlLXJvdz5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzSW5kaWNhdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgPHRkXG4gICAgICAgIGZkLXRhYmxlLWNlbGxcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJcbiAgICAgICAgICAgIGNvbHVtbnMubGVuZ3RoICtcbiAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgKHJvd0luZGljYXRvciA/IC0xIDogMCkgK1xuICAgICAgICAgICAgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKSArXG4gICAgICAgICAgICAoc2hvd1ZpZXdCdXR0b24gPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dEZXRhaWxzSW5Sb3cgJiYgIWlubGluZUVkaXRNb2RlID8gMSA6IDApXG4gICAgICAgIFwiXG4gICAgPlxuICAgICAgICA8ZmQtbWVzc2FnZS1zdHJpcCB0eXBlPVwiZXJyb3JcIiBbZGlzbWlzc2libGVdPVwidHJ1ZVwiIChvbkRpc21pc3MpPVwib25SZXNldFdvcmtmbG93U3RhdGUoKVwiPlxuICAgICAgICAgICAge3sgd29ya2Zsb3dTdGF0ZS5lcnJvcj8uVGV4dCB8fCB3b3JrZmxvd1N0YXRlLmVycm9yPy5NZXNzYWdlRXhwcmVzc2lvbiB9fVxuICAgICAgICA8L2ZkLW1lc3NhZ2Utc3RyaXA+XG4gICAgPC90ZD5cbjwvdHI+XG59XG48bmctdGVtcGxhdGUgI2RldGFpbHNDb2x1bW5zVGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgZGV0YWlsc0Zvcm1JdGVtcztcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGRldGFpbHNDb2x1bW5zLFxuICAgICAgICAgICAgICAgIG1vOiBtbyxcbiAgICAgICAgICAgICAgICBpbmxpbmVFZGl0TW9kZTogaW5saW5lRWRpdE1vZGUsXG4gICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCRcbiAgICAgICAgICAgIH1cbiAgICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZXRhaWxzRm9ybUl0ZW1zIGxldC1kZXRhaWxzQ29sdW1ucyBsZXQtbW89XCJtb1wiIGxldC1pbmxpbmVFZGl0TW9kZT1cImlubGluZUVkaXRNb2RlXCIgbGV0LWxheW91dCQ9XCJsYXlvdXQkXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0taXRlbXNcIj5cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGRldGFpbHNDb2x1bW5zOyB0cmFjayBjb2x1bW47IGxldCBjb2x1bW5JbmRleCA9ICRpbmRleCkge1xuICAgICAgICA8ZGl2IGZkLWZvcm0taXRlbT5cbiAgICAgICAgICAgIDxsYWJlbCBmZC1mb3JtLWxhYmVsIGZvcj1cImlucHV0LTJcIj57eyBjb2x1bW4uQ2FwdGlvbiB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW86IG1vLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lRWRpdE1vZGU6IGlubGluZUVkaXRNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCQgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgICAjY29sdW1uVGVtcGxhdGVcbiAgICBsZXQtY29sdW1uXG4gICAgbGV0LW1vPVwibW9cIlxuICAgIGxldC1pbmRleD1cImluZGV4XCJcbiAgICBsZXQtaW5saW5lRWRpdE1vZGU9XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgbGV0LWxheW91dDk0PVwibGF5b3V0OTRcIlxuPlxuICAgIDxic3UtYmFyc2EtdGFibGUtY29sdW1uXG4gICAgICAgIFttb109XCJtb1wiXG4gICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtpc2RpcnR5XT1cImRpcnR5Q29sdW1ucyAmJiBkaXJ0eUNvbHVtbnNbY29sdW1uLk5hbWVdXCJcbiAgICAgICAgW3ZhbHVlXT1cImNvbHVtbiB8IGNvbHVtblZhbHVlOiBtb1wiXG4gICAgICAgIFtpY29uXT1cImNvbHVtbiB8IGNvbHVtbkljb246IG1vXCJcbiAgICAgICAgW2N1c3RvbUNvbXBvbmVudF09XCJjb2x1bW4uJEN1c3RvbUNvbXBvbmVudFwiXG4gICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgW2Rpc2FibGVFbGxhcHNpc109XCJzZWNvbmRhcnlDb2x1bW5zPy5sZW5ndGhcIlxuICAgICAgICBbZWRpdE1vZGVdPVwiaXNDaGVja2VkICYmIGlubGluZUVkaXRNb2RlICYmIGFsbG93SW5saW5lRWRpdFwiXG4gICAgICAgIFtpbmxpbmVFZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgICAgIFtpc0NoZWNrZWRdPVwiaXNDaGVja2VkXCJcbiAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgW2Zvcm1TZXR0aW5nXT1cImZvcm1TZXR0aW5nXCJcbiAgICAgICAgW3J0bF09XCJydGxcIlxuICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcbiAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXG4gICAgICAgIFtsYXlvdXQ5NF09XCJsYXlvdXQ5NFwiXG4gICAgICAgIChzYXZlKT1cIm9uRWRpdEZvcm1QYW5lbFNhdmUobnVsbClcIlxuICAgICAgICAoY2FuY2VsKT1cIm9uRWRpdEZvcm1QYW5lbENhbmNlbChudWxsKVwiXG4gICAgICAgICh0YWIpPVwib25UYWJLZXlEb3duKCRldmVudCwgaW5kZXgpXCJcbiAgICAgICAgKGNoYW5nZVRvRWRpdE1vZGUpPVwib25Db2x1bW5DaGFuZ2VUb0VkaXRNb2RlKCRldmVudCwgaW5kZXgpXCJcbiAgICA+XG4gICAgPC9ic3UtYmFyc2EtdGFibGUtY29sdW1uPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjc3RhdHVzSW5kaWNhdG9yPlxuICAgIEBpZiAocm93SW5kaWNhdG9yKSB7XG4gICAgPGJzdS1iYXJzYS1jb2x1bW4taW5kaWNhdG9yIFtoaWRlQm9yZGVyQm90dG9tXT1cIiFkZXRhaWxzQ29sbGFwc2VkXCIgW2JhY2tDb2xvcl09XCJyb3dJbmRpY2F0b3JDb2xvclwiPlxuICAgIDwvYnN1LWJhcnNhLWNvbHVtbi1pbmRpY2F0b3I+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcm93TnVtYmVyVGVtcGxhdGU+XG4gICAgQGlmIChzaG93Um93TnVtYmVyKSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgYnN1LWJhcnNhLWNvbHVtbi1yb3dudW1iZXIgW3Jvd051bWJlcl09XCJyb3dOdW1iZXJcIiAoY2xpY2spPVwiIWlzQ2hlY2tMaXN0ICYmIG9uUm93Q2hlY2soKVwiPjwvdGQ+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjx0ciBmZC10YWJsZS1yb3cgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZVwiPjwvdHI+XG4iXX0=
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtdGFibGUtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLXRhYmxlLXJvdy9iYXJzYS10YWJsZS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdGFibGUtcm93L2JhcnNhLXRhYmxlLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBR0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsMEJBQTBCLEVBQzFCLGdCQUFnQixFQUluQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlCLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSwwQkFBMEI7SUFQdEU7O1FBUWEscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBUXhCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFLaEUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQXVDbEM7SUFyQ0csUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3RGLElBQUksQ0FBQyx1QkFBdUIsR0FBRztZQUMzQixHQUFHLElBQUksQ0FBQyxPQUFPO1lBQ2YsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ3BDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDM0MsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxLQUFrQixFQUFFLE1BQU07UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDaEMsTUFBTTtZQUNOLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN0QixTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTTtZQUNsQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDZixLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2hFLEtBQUssQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBQzFCLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsYUFBYTtRQUNULElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQzs4R0FwRFEsc0JBQXNCO2tHQUF0QixzQkFBc0IsMlhBSHBCLENBQUMsZ0JBQWdCLENBQUMscUxDMUJqQywraGtCQXlkQTs7MkZENWJhLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDSSxxQkFBcUIsYUFHcEIsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFDWix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUMwQyxnQkFBZ0I7c0JBQWhFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBpbmplY3QsXG4gICAgRWxlbWVudFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgTW9Gb3JSZXBvcnRNb2RlbCxcbiAgICBCYXNlVmlld0l0ZW1Qcm9wc0NvbXBvbmVudCxcbiAgICBGb3JtUGFuZWxTZXJ2aWNlLFxuICAgIEVqcmF5T2xnbyxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIENvbHVtblN1bW1hcnlUeXBlXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtYmFyc2EtdGFibGUtcm93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyc2EtdGFibGUtcm93LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJzYS10YWJsZS1yb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtGb3JtUGFuZWxTZXJ2aWNlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBCYXJzYVRhYmxlUm93Q29tcG9uZW50IGV4dGVuZHMgQmFzZVZpZXdJdGVtUHJvcHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHNob3dEZXRhaWxzSW5Sb3cgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkZXRhaWxzQ29tcG9uZW50PzogRWpyYXlPbGdvO1xuICAgIEBJbnB1dCgpIGRldGFpbHNDb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107XG4gICAgQElucHV0KCkgZGV0YWlsc1RleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwcmV2aWV3Q29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uO1xuICAgIEBJbnB1dCgpIGNvbHVtbkNvbXBvbmVudHM6IE1vRm9yUmVwb3J0TW9kZWwgfCBudWxsO1xuICAgIEBJbnB1dCgpIGRpcnR5Q29sdW1uczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgQElucHV0KCkgZGV0YWlsc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgICBAT3V0cHV0KCkgY29sdW1uU3VtbWFyeSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uU3VtbWFyeVR5cGU+KCk7XG4gICAgQFZpZXdDaGlsZCgnZGV0YWlsc0Zvcm1JdGVtcycsIHsgc3RhdGljOiB0cnVlIH0pIGRldGFpbHNGb3JtSXRlbXM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBkZXRhaWxzQ29tcG9uZW50U2V0dGluZzogYW55O1xuICAgIGlzT2RkOiBib29sZWFuO1xuICAgIF9yZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBlbDogRWxlbWVudFJlZjtcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5lbCA9IHRoaXMuX2VsO1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3Q29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3ModGhpcy5fZWwubmF0aXZlRWxlbWVudCwgJ2hhcy1wcmV2aWV3LWNvbHVtbicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd04gPSBOdW1iZXIodGhpcy5yb3dOdW1iZXIpO1xuICAgICAgICB0aGlzLmlzT2RkID0gaXNOYU4ocm93TikgfHwgIXRoaXMuY29sb3JpbmdSb3cgPyBmYWxzZSA6IHJvd04gJSAyID09PSAwID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB0aGlzLmRldGFpbHNDb21wb25lbnRTZXR0aW5nID0ge1xuICAgICAgICAgICAgLi4udGhpcy5zZXR0aW5nLFxuICAgICAgICAgICAgJGRldGFpbHNDb2x1bW5zOiB0aGlzLmRldGFpbHNDb2x1bW5zLFxuICAgICAgICAgICAgJGRldGFpbHNGb3JtSXRlbXM6IHRoaXMuZGV0YWlsc0Zvcm1JdGVtc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRldGFpbHNUZXh0IHx8PSAnRGV0YWlscyc7XG4gICAgfVxuICAgIHJlQ2FsY3VsYXRlQ29sdW1uU3VtbWFyeShlbERvbTogSFRNTEVsZW1lbnQsIGNvbHVtbik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtblN1bW1hcnkuZW1pdCh7XG4gICAgICAgICAgICBtb0FycjogdGhpcy5tby4kUGFyZW50LiRDaGlsZHJlbixcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgIGdyb3VwTGV2ZWw6IHRoaXMubGV2ZWwsXG4gICAgICAgICAgICBncm91cE5hbWU6IHRoaXMubW8uJFBhcmVudD8uJEdyb3VwLFxuICAgICAgICAgICAgc3VtbWFyeUZuOiAodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxEb20uY2xhc3NOYW1lID0gdmFsLnRvU3RyaW5nKCkucmVwbGFjZSgvJmxybTt8XFx1MjAwRS9naSwgJyAnKTtcbiAgICAgICAgICAgICAgICBlbERvbS5pbm5lckhUTUwgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvbkNvbHVtbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0NoZWNrTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Sb3dDaGVjaygpO1xuICAgIH1cbiAgICBvblJvd0RldGFpbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGV0YWlsc0NvbGxhcHNlZCA9ICF0aGlzLmRldGFpbHNDb2xsYXBzZWQ7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxufVxuIiwiQGlmICgoIW1vLiRQYXJlbnQgfHwgcGFyZW50RXhwYW5kZWQpICYmIHZpc2liaWxpdHkgIT09IGZhbHNlKSB7XG48dHJcbiAgICBbY2xhc3Mucm93LWVycm9yXT1cImhhc0Vycm9yXCJcbiAgICBbY2xhc3Muc2hvd2RldGFpbHMtb25dPVwiIWRldGFpbHNDb2xsYXBzZWRcIlxuICAgIFtjbGFzcy5oYXNDYXJ0YWJsZV09XCIhIWNhcnRhYmxlUGFyYW1zXCJcbiAgICAjdHJFbFxuICAgIGZkLXRhYmxlLXJvd1xuICAgIFthY3RpdmFibGVdPVwiZmFsc2VcIlxuICAgIFtob3ZlcmFibGVdPVwidHJ1ZVwiXG4gICAgW21haW5dPVwidHJ1ZVwiXG4gICAgW2ZvY3VzYWJsZV09XCJ0cnVlXCJcbiAgICBbYXBwbHlDb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICBbc3R5bGVJbmRleF09XCJzdHlsZUluZGV4XCJcbiAgICBbaG9zdEVsXT1cInRyRWxcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNDaGVja2VkXCJcbiAgICBbY2xhc3MuaGFzLXByZXZpZXctY29sdW1uXT1cIiEhcHJldmlld0NvbHVtblwiXG4gICAgW2NsYXNzLmJydWxlLW1lc3NhZ2VdPVwiYnJ1bGVBY3Rpb25NZXNzYWdlIHx8IHdvcmtmbG93U3RhdGU/LmVycm9yXCJcbiAgICBbY2xhc3Mud29ya2Zsb3ctcGVuZGluZ109XCJ3b3JrZmxvd1N0YXRlPy5zdGF0ZSA9PT0gJ1BlbmRpbmcnXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpc09kZCAmJiAhaXNDaGVja2VkID8gJ3ZhcigtLXNhcExpc3RfSG92ZXJfQmFja2dyb3VuZCknIDogbnVsbFwiXG4+XG4gICAgQGlmIChtby4kR3JvdXAgfHwgbW8uJEdyb3VwID09PSAnJykge1xuICAgIDx0ZFxuICAgICAgICBbc3R5bGUucGFkZGluZy1yaWdodF09XCJydGwgPyAnY2FsYyggMXJlbSArICcgKyBsZXZlbCAqIDEyICsgJ3B4JyArICcgKScgOiAnaW5oZXJpdCdcIlxuICAgICAgICBbc3R5bGUucGFkZGluZy1sZWZ0XT1cIiFydGwgPyAnY2FsYyggMXJlbSArICcgKyBsZXZlbCAqIDEyICsgJ3B4JyArICcgKScgOiAnaW5oZXJpdCdcIlxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMXJlbVwiXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInJvdy1ncm91cFwiXG4gICAgICAgIFtjbGFzcy5tb2JpbGUtbW9kZV09XCJzZWNvbmRhcnlDb2x1bW5zPy5sZW5ndGhcIlxuICAgICAgICBbYXR0ci5sZXZlbF09XCJsZXZlbFwiXG4gICAgICAgIFtjbGFzcy5yb290LWdyb3VwXT1cImxldmVsID09PSAwXCJcbiAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtnbHlwaF09XCJleHBhbmRlZCAhPT0gZmFsc2UgPyAnbmF2aWdhdGlvbi1kb3duLWFycm93JyA6ICduYXZpZ2F0aW9uLWxlZnQtYXJyb3cnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2VsbC1leHBhbmRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kQ2xpY2soKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAge3sgbW8uJEdyb3VwID09PSAndW5kZWZpbmVkJyA/ICcnIDogbW8uJEdyb3VwIH19XG4gICAgPC90ZD5cbiAgICB9IEBlbHNlIHtcblxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNJbmRpY2F0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICBAaWYgKGlzQ2hlY2tMaXN0KSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgW3N0eWxlLndpZHRoXT1cImNoZWNrYm94Q29tcG9uZW50ID8gJzYwcHgnIDogbnVsbFwiPlxuICAgICAgICBAaWYgKHdvcmtmbG93U3RhdGU/LnN0YXRlID09PSAnUGVuZGluZycpIHtcbiAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgcmlnaHQ6IDA7IGJvdHRvbTogMDsgdG9wOiAwXCI+XG4gICAgICAgICAgICA8YnN1LW1hc2sgW3RvcF09XCInMjBweCdcIiBbc2l6ZV09XCIncydcIj48L2JzdS1tYXNrPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAaWYgKGNoZWNrYm94Q29tcG9uZW50Py5TZWxlY3Rvcikge1xuICAgICAgICA8Ym5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50XG4gICAgICAgICAgICBbY29tcG9uZW50XT1cImNoZWNrYm94Q29tcG9uZW50XCJcbiAgICAgICAgICAgIFttb109XCJtb1wiXG4gICAgICAgICAgICBbaXNDaGVja2VkXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgICAgICBbVWx2TWFpbkN0cmxyXT1cIlVsdk1haW5DdHJsclwiXG4gICAgICAgICAgICBbc2V0dGluZ109XCJzZXR0aW5nXCJcbiAgICAgICAgICAgIFtwYXJhbWV0ZXJzXT1cImNoZWNrYm94Q29tcG9uZW50LlBhcmFtZXRlcnNcIlxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cImlubGluZUVkaXRNb2RlXCJcbiAgICAgICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICBbYWxsQ29sdW1uc109XCJhbGxDb2x1bW5zXCJcbiAgICAgICAgICAgIFt0eXBlRGVmSWRdPVwidHlwZURlZklkXCJcbiAgICAgICAgICAgIChldmVudHMpPVwib25Sb3dDaGVjaygpXCJcbiAgICAgICAgPjwvYm5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGZkLWNoZWNrYm94IFtuYW1lXT1cIm1vLiRDYXB0aW9uXCIgW25nTW9kZWxdPVwiaXNDaGVja2VkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Sb3dDaGVjaygpXCI+PC9mZC1jaGVja2JveD5cbiAgICAgICAgfVxuICAgIDwvdGQ+XG4gICAgfSBAaWYgKCFpc0NoZWNrTGlzdCAmJiAhc2hvd1Jvd051bWJlcikge1xuICAgIDx0ZFxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIGNsYXNzPVwic2luZ2xlLXNlbGVjdFwiXG4gICAgICAgIChjbGljayk9XCIhaXNDaGVja0xpc3QgJiYgb25Sb3dDaGVjaygpXCJcbiAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXJcIlxuICAgID5cbiAgICAgICAgQGlmIChpbmxpbmVFZGl0TW9kZSAmJiBhbGxvd0lubGluZUVkaXQgJiYgKGhhc0Vycm9yIHx8IHNhdmluZyB8fCBzYXZlZCkpIHsgQGlmIChoYXNFcnJvcikge1xuICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cInNhdmUtZXJyb3JcIiBnbHlwaD1cImVycm9yXCI+PC9mZC1pY29uPlxuICAgICAgICB9IEBpZiAoc2F2aW5nKSB7XG4gICAgICAgIDxmZC1idXN5LWluZGljYXRvciBbbG9hZGluZ109XCJ0cnVlXCIgW3NpemVdPVwiJ3MnXCIgdGl0bGU9XCJyZWNvcmQgc2F2aW5nXCI+PC9mZC1idXN5LWluZGljYXRvcj5cbiAgICAgICAgfSBAaWYgKHNhdmVkKSB7XG4gICAgICAgIDxmZC1pY29uIGNsYXNzPVwic2F2ZS1zdWNjZXNzXCIgZ2x5cGg9XCJhY2NlcHRcIj48L2ZkLWljb24+XG4gICAgICAgIH0gfSBAZWxzZSB7IEBpZiAobW8uJFN0YXRlID09PSAnTmV3JyAmJiAhaXNDaGVja2VkKSB7XG4gICAgICAgIDxmZC1pY29uIGdseXBoPVwiZmF2b3JpdGVcIj48L2ZkLWljb24+XG4gICAgICAgIH0gQGlmIChpbmxpbmVFZGl0TW9kZSAmJiBhbGxvd0lubGluZUVkaXQgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgIDxmZC1pY29uIGdseXBoPVwiZWRpdFwiPjwvZmQtaWNvbj5cbiAgICAgICAgfSB9XG4gICAgPC90ZD5cbiAgICB9XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd051bWJlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbi5OYW1lOyBsZXQgY29sdW1uSW5kZXggPSAkaW5kZXgpIHtcbiAgICA8dGRcbiAgICAgICAgY2xhc3M9XCJyZXAtY29sdW1uXCJcbiAgICAgICAgW2F0dHIuZGJOYW1lXT1cImNvbHVtbi5OYW1lXCJcbiAgICAgICAgI3RkRWxcbiAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICBbYXBwbHlDb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgW2hvc3RFbF09XCJ0ZEVsXCJcbiAgICAgICAgW3N0eWxlSW5kZXhdPVwic3R5bGVJbmRleFwiXG4gICAgICAgIFtkYk5hbWVdPVwiY29sdW1uLk5hbWVcIlxuICAgICAgICBbZm9jdXNhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uQ2xpY2soKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJvblJvd0NsaWNrKClcIlxuICAgICAgICBbaG92ZXJhYmxlXT1cImlubGluZUVkaXRNb2RlICYmIGFsbG93SW5saW5lRWRpdFwiXG4gICAgICAgIFtjbGFzcy5jb250cm9sLXJlYWRvbmx5XT1cImNvbHVtbi5Jc1JlYWRvbmx5XCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgbW86IG1vLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZUVkaXRNb2RlOiBpbmxpbmVFZGl0TW9kZSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCQgfCBhc3luY1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L3RkPlxuICAgIH0gQGlmIChjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCAmJiAoIWlubGluZUVkaXRNb2RlIHx8ICFhbGxvd0lubGluZUVkaXQpKSB7XG4gICAgPHRkIGNsYXNzPVwiY29sLWNvbnRleHQtbWVudVwiIGZkLXRhYmxlLWNlbGw+XG4gICAgICAgIDxic3UtdWx2LWNvbnRleHQtbWVudVxuICAgICAgICAgICAgW2Rpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XT1cImRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XCJcbiAgICAgICAgICAgIFtjb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgICAgICAgICAgW21vXT1cIm1vXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAoY29tbWFuZENsaWNrKT1cIm9uVWx2Q29tbWFuZCgpXCJcbiAgICAgICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxuICAgICAgICAgICAgW21lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcbiAgICAgICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICA+PC9ic3UtdWx2LWNvbnRleHQtbWVudT5cbiAgICA8L3RkPlxuICAgIH0gQGlmIChzaG93RGV0YWlsc0luUm93ICYmICghaW5saW5lRWRpdE1vZGUgfHwgIWFsbG93SW5saW5lRWRpdCkpIHtcbiAgICA8dGQgY2xhc3M9XCJjb2wtZGV0YWlsc1wiIGZkLXRhYmxlLWNlbGwgW2ZpdENvbnRlbnRdPVwidHJ1ZVwiPlxuICAgICAgICBAaWYgKChkZXRhaWxzQ29tcG9uZW50Py5TZWxlY3RvciB8fCBkZXRhaWxzQ29sdW1ucz8ubGVuZ3RoIHx8IGNhcnRhYmxlUGFyYW1zPy5tb0lkICkgJiYgIWhpZGVEZXRhaWxzVGV4dCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1qdXN0aWZ5LWVuZCB0dy13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiKGRldGFpbHNDb2xsYXBzZWQgPyBkZXRhaWxzVGV4dCA6ICdIaWRlJykgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RGV0YWlscygpXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L3RkPlxuICAgIH0gQGlmIChhY3Rpb25MaXN0Py5sZW5ndGggJiYgIWlubGluZUVkaXRNb2RlKSB7XG4gICAgPHRkIGNsYXNzPVwiY29sLXZpZXdcIiBbY2xhc3MucnRsXT1cInJ0bFwiIGZkLXRhYmxlLWNlbGwgW2ZpdENvbnRlbnRdPVwidHJ1ZVwiPlxuICAgICAgICA8YnN1LWJhcnNhLXJvdy1pbmxpbmUtYWN0aW9ubGlzdFxuICAgICAgICAgICAgW2FjdGlvbkxpc3RdPVwiYWN0aW9uTGlzdFwiXG4gICAgICAgICAgICAoYnRuQ2xpY2spPVwiYWN0aW9uTGlzdENsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgID48L2JzdS1iYXJzYS1yb3ctaW5saW5lLWFjdGlvbmxpc3Q+XG4gICAgPC90ZD5cbiAgICB9IH1cbjwvdHI+XG59IEBpZiAoc2Vjb25kYXJ5Q29sdW1ucz8ubGVuZ3RoICYmICFtby4kR3JvdXAgJiYgKCFtby4kUGFyZW50IHx8IHBhcmVudEV4cGFuZGVkKSAmJiB2aXNpYmlsaXR5ICE9PSBmYWxzZSkge1xuPHRyXG4gICAgI3RyRWxcbiAgICBmZC10YWJsZS1yb3dcbiAgICBbc2Vjb25kYXJ5XT1cInRydWVcIlxuICAgIGNsYXNzPVwic2Vjb25kYXJ5LXJvd1wiXG4gICAgW2NsYXNzLm5vLWVkaXQtbW9kZV09XCIhaW5saW5lRWRpdE1vZGVcIlxuICAgIFthcHBseUNvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgIFtob3N0RWxdPVwidHJFbFwiXG4gICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc0NoZWNrZWQgJiYgIWlubGluZUVkaXRNb2RlID8gdHJ1ZSA6IGZhbHNlXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzSW5kaWNhdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgQGlmICghaXNDaGVja0xpc3QpIHtcbiAgICA8dGQgZmQtdGFibGUtY2VsbCBjbGFzcz1cInNpbmdsZS1zZWxlY3RcIiAoY2xpY2spPVwib25Sb3dDaGVjaygpXCI+PC90ZD5cbiAgICB9XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgY29sc3Bhbj1cIjEwMCVcIiAoY2xpY2spPVwib25Sb3dDaGVjaygpXCIgY2xhc3M9XCJzZWNvbmRhcnkgcC13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uXCI+XG4gICAgICAgICAgICBAZm9yIChjb2x1bW4gb2Ygc2Vjb25kYXJ5Q29sdW1uczsgdHJhY2sgX3RyYWNrQnlDb2x1bW4oY29sdW1uSW5kZXgsIGNvbHVtbik7IGxldCBjb2x1bW5JbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAjcEVsXG4gICAgICAgICAgICAgICAgZmQtdGFibGUtdGV4dFxuICAgICAgICAgICAgICAgIFthcHBseUNvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgICAgICAgICAgICAgIFtob3N0RWxdPVwicEVsXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVJbmRleF09XCJzdHlsZUluZGV4XCJcbiAgICAgICAgICAgICAgICBbZGJOYW1lXT1cImNvbHVtbi5OYW1lXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtZmFtaWx5OiAnQkFSU0FGT05UIE1lZGl1bSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmZC1mb3JtLWxhYmVsPnt7IGNvbHVtbi5DYXB0aW9uIH19IDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vOiBtbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lRWRpdE1vZGU6IGlubGluZUVkaXRNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dDk0OiBsYXlvdXQkIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvdGQ+XG48L3RyPlxufSBAaWYgKGNhcnRhYmxlUGFyYW1zPy5tb0lkKSB7XG48dHJcbiAgICBbY2xhc3MuZGV0YWlsQ29sbGFwc2VkXT1cImRldGFpbHNDb2xsYXBzZWRcIlxuICAgIGZkLXRhYmxlLXJvd1xuICAgIGNsYXNzPVwic2hvd2RldGFpbHMgY2FydGFibGVcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNDaGVja2VkXCJcbiAgICBbY2xhc3MuaGFzLXByZXZpZXctY29sdW1uXT1cIiEhcHJldmlld0NvbHVtblwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIDx0ZFxuICAgICAgICAoY2xpY2spPVwib25Sb3dDaGVjaygpXCJcbiAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICBbYXR0ci5jb2xzcGFuXT1cIlxuICAgICAgICAgICAgY29sdW1ucy5sZW5ndGggK1xuICAgICAgICAgICAgMSArXG4gICAgICAgICAgICAocm93SW5kaWNhdG9yID8gMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxibnJjLWZvcm1cbiAgICAgICAgICAgICAgICAjY2FydGFibGVGb3JtUmVmXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJ0YWJsZS10ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2lubGluZUVkaXRJblJlcG9ydF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcGFyYW1zXT1cImNhcnRhYmxlUGFyYW1zXCJcbiAgICAgICAgICAgICAgICAoYmVmb3JlVHJhbnNpdGlvbik9XCJvbkNhcnRhYmxlQmVmb3JlVGFuc2l0aW9uKClcIlxuICAgICAgICAgICAgICAgIChhZnRlclRyYW5zaXRpb24pPVwib25DYXJ0YWJsZUFmdGVyVGFuc2l0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChicnVsZUFjdGlvbik9XCJvbkNhcnRhYmxlQnJ1bGVBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIk9uQ2FydGFibGVGb3JtQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvcm1DbG9zZSk9XCJvbkNhcnRhYmxlRm9ybUNsb3NlZCgpXCJcbiAgICAgICAgICAgID48L2JucmMtZm9ybT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90ZD5cbjwvdHI+XG59IEBpZiAoIWRldGFpbHNDb2xsYXBzZWQgJiYgKGRldGFpbHNDb21wb25lbnQ/LlNlbGVjdG9yfHwgZGV0YWlsc0NvbHVtbnM/Lmxlbmd0aCkpIHtcbjx0ciBmZC10YWJsZS1yb3cgY2xhc3M9XCJzaG93ZGV0YWlsc1wiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNDaGVja2VkXCIgW2NsYXNzLmhhcy1wcmV2aWV3LWNvbHVtbl09XCIhIXByZXZpZXdDb2x1bW5cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzSW5kaWNhdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgPHRkXG4gICAgICAgIChjbGljayk9XCJvblJvd0NoZWNrKClcIlxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRldGFpbHNDb2x1bW5zVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgQGlmIChkZXRhaWxzQ29tcG9uZW50ICYmIGRldGFpbHNDb21wb25lbnQuU2VsZWN0b3IpIHtcbiAgICAgICAgPGJucmMtZHluYW1pYy1pdGVtLWNvbXBvbmVudFxuICAgICAgICAgICAgW2NvbXBvbmVudF09XCJkZXRhaWxzQ29tcG9uZW50XCJcbiAgICAgICAgICAgIFttb109XCJtb1wiXG4gICAgICAgICAgICBbaXNDaGVja2VkXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgICAgICBbVWx2TWFpbkN0cmxyXT1cIlVsdk1haW5DdHJsclwiXG4gICAgICAgICAgICBbc2V0dGluZ109XCJkZXRhaWxzQ29tcG9uZW50U2V0dGluZ1wiXG4gICAgICAgICAgICBbcGFyYW1ldGVyc109XCJkZXRhaWxzQ29tcG9uZW50LlNldHRpbmdzXCJcbiAgICAgICAgICAgIFtlZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgICAgICAgICBbZm9ybVNldHRpbmddPVwiZm9ybVNldHRpbmdcIlxuICAgICAgICAgICAgW3J0bF09XCJydGxcIlxuICAgICAgICAgICAgW2RldmljZU5hbWVdPVwiZGV2aWNlTmFtZVwiXG4gICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICBbYWxsQ29sdW1uc109XCJhbGxDb2x1bW5zXCJcbiAgICAgICAgICAgIFt0eXBlRGVmSWRdPVwidHlwZURlZklkXCJcbiAgICAgICAgPjwvYm5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50PlxuICAgICAgICB9XG4gICAgPC90ZD5cbjwvdHI+XG59IEBpZihwcmV2aWV3Q29sdW1uKXtcbjx0clxuICAgICN0ckVsXG4gICAgZmQtdGFibGUtcm93XG4gICAgW3NlY29uZGFyeV09XCJ0cnVlXCJcbiAgICBjbGFzcz1cInByZXZpZXctY29sdW1uXCJcbiAgICBbY2xhc3Mubm8tZWRpdC1tb2RlXT1cIiFpbmxpbmVFZGl0TW9kZVwiXG4gICAgW2FwcGx5Q29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXG4gICAgW3N0eWxlSW5kZXhdPVwic3R5bGVJbmRleFwiXG4gICAgW2hvc3RFbF09XCJ0ckVsXCJcbiAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzQ2hlY2tlZCAmJiAhaW5saW5lRWRpdE1vZGUgPyB0cnVlIDogZmFsc2VcIlxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNJbmRpY2F0b3JcIj48L25nLWNvbnRhaW5lcj5cblxuICAgIDx0ZFxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwib25Sb3dDaGVjaygpXCJcbiAgICA+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uXCI+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICNwRWxcbiAgICAgICAgICAgICAgICBmZC10YWJsZS10ZXh0XG4gICAgICAgICAgICAgICAgW2FwcGx5Q29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXG4gICAgICAgICAgICAgICAgW2hvc3RFbF09XCJwRWxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgICAgICAgICAgICAgIFtkYk5hbWVdPVwicHJldmlld0NvbHVtbi5OYW1lXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiB2YXIoLS1zYXBBY2NlbnRDb2xvcjYpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHByZXZpZXdDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW86IG1vLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2x1bW5zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVFZGl0TW9kZTogaW5saW5lRWRpdE1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCQgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC90ZD5cbjwvdHI+XG59IEBpZihpc0xhc3RDaGlsZEdyb3VwICYmIGdyb3VwU3VtbWFyeSl7XG48dHIgI3RyRWwgZmQtdGFibGUtcm93IGNsYXNzPVwiZ3JvdXAtc3VtbWFyeS1yb3dcIiBbY2xhc3Mubm8tZWRpdC1tb2RlXT1cInRydWVcIiBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImZhbHNlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIEBpZiAoIWlzQ2hlY2tMaXN0KSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJzaW5nbGUtc2VsZWN0XCI+PC90ZD5cbiAgICB9IEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBfdHJhY2tCeUNvbHVtbihjb2x1bW5JbmRleCwgY29sdW1uKTsgbGV0IGNvbHVtbkluZGV4ID0gJGluZGV4KSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGw+XG4gICAgICAgIDxsYWJlbCAjc3VtbWFyeVJlZj57eyByZUNhbGN1bGF0ZUNvbHVtblN1bW1hcnkoc3VtbWFyeVJlZiwgY29sdW1uKSB9fTwvbGFiZWw+XG4gICAgPC90ZD5cbiAgICB9IEBpZiAoY29udGV4dE1lbnVJdGVtcy5sZW5ndGggJiYgKCFpbmxpbmVFZGl0TW9kZSB8fCAhYWxsb3dJbmxpbmVFZGl0KSkge1xuICAgIDx0ZCBjbGFzcz1cImNvbC1jb250ZXh0LW1lbnVcIiBmZC10YWJsZS1jZWxsPjwvdGQ+XG4gICAgfSBAaWYgKHNob3dEZXRhaWxzSW5Sb3cgJiYgKCFpbmxpbmVFZGl0TW9kZSB8fCAhYWxsb3dJbmxpbmVFZGl0KSkge1xuICAgIDx0ZCBjbGFzcz1cImNvbC1kZXRhaWxzXCIgZmQtdGFibGUtY2VsbCBbZml0Q29udGVudF09XCJ0cnVlXCI+PC90ZD5cbiAgICB9IEBpZiAoYWN0aW9uTGlzdD8ubGVuZ3RoICYmICFpbmxpbmVFZGl0TW9kZSkge1xuICAgIDx0ZCBjbGFzcz1cImNvbC12aWV3XCIgZmQtdGFibGUtY2VsbCBbZml0Q29udGVudF09XCJ0cnVlXCI+PC90ZD5cbiAgICB9XG48L3RyPlxufSBAaWYgKGJydWxlQWN0aW9uTWVzc2FnZSAmJiBpbmxpbmVFZGl0TW9kZSkge1xuPHRyIGZkLXRhYmxlLXJvdz5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzSW5kaWNhdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgPHRkXG4gICAgICAgIGZkLXRhYmxlLWNlbGxcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJcbiAgICAgICAgICAgIGNvbHVtbnMubGVuZ3RoICtcbiAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgKHJvd0luZGljYXRvciA/IC0xIDogMCkgK1xuICAgICAgICAgICAgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKSArXG4gICAgICAgICAgICAoc2hvd1ZpZXdCdXR0b24gPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dEZXRhaWxzSW5Sb3cgJiYgIWlubGluZUVkaXRNb2RlID8gMSA6IDApXG4gICAgICAgIFwiXG4gICAgPlxuICAgICAgICBAaWYgKGJydWxlQWN0aW9uTWVzc2FnZS5NZXNzYWdlVHlwZSA9PT0gMikge1xuICAgICAgICA8ZmQtbWVzc2FnZS1zdHJpcCBbdHlwZV09XCJicnVsZUFjdGlvbk1lc3NhZ2UuTWVzc2FnZVR5cGUgPT09IDIgPyAnZXJyb3InIDogJ2luZm9ybWF0aW9uJ1wiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAge3sgYnJ1bGVBY3Rpb25NZXNzYWdlLk1lc3NhZ2VFeHByZXNzaW9uIH19XG4gICAgICAgIDwvZmQtbWVzc2FnZS1zdHJpcD5cbiAgICAgICAgfVxuICAgIDwvdGQ+XG48L3RyPlxufSBAaWYgKHdvcmtmbG93U3RhdGU/LnN0YXRlID09PSAnRmluaXNoJyAmJiB3b3JrZmxvd1N0YXRlPy5lcnJvcikge1xuPHRyIGZkLXRhYmxlLXJvdz5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzSW5kaWNhdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgPHRkXG4gICAgICAgIGZkLXRhYmxlLWNlbGxcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJcbiAgICAgICAgICAgIGNvbHVtbnMubGVuZ3RoICtcbiAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgKHJvd0luZGljYXRvciA/IC0xIDogMCkgK1xuICAgICAgICAgICAgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKSArXG4gICAgICAgICAgICAoc2hvd1ZpZXdCdXR0b24gPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dEZXRhaWxzSW5Sb3cgJiYgIWlubGluZUVkaXRNb2RlID8gMSA6IDApXG4gICAgICAgIFwiXG4gICAgPlxuICAgICAgICA8ZmQtbWVzc2FnZS1zdHJpcCB0eXBlPVwiZXJyb3JcIiBbZGlzbWlzc2libGVdPVwidHJ1ZVwiIChvbkRpc21pc3MpPVwib25SZXNldFdvcmtmbG93U3RhdGUoKVwiPlxuICAgICAgICAgICAge3sgd29ya2Zsb3dTdGF0ZS5lcnJvcj8uVGV4dCB8fCB3b3JrZmxvd1N0YXRlLmVycm9yPy5NZXNzYWdlRXhwcmVzc2lvbiB9fVxuICAgICAgICA8L2ZkLW1lc3NhZ2Utc3RyaXA+XG4gICAgPC90ZD5cbjwvdHI+XG59XG48bmctdGVtcGxhdGUgI2RldGFpbHNDb2x1bW5zVGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgZGV0YWlsc0Zvcm1JdGVtcztcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGRldGFpbHNDb2x1bW5zLFxuICAgICAgICAgICAgICAgIG1vOiBtbyxcbiAgICAgICAgICAgICAgICBpbmxpbmVFZGl0TW9kZTogaW5saW5lRWRpdE1vZGUsXG4gICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCRcbiAgICAgICAgICAgIH1cbiAgICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZXRhaWxzRm9ybUl0ZW1zIGxldC1kZXRhaWxzQ29sdW1ucyBsZXQtbW89XCJtb1wiIGxldC1pbmxpbmVFZGl0TW9kZT1cImlubGluZUVkaXRNb2RlXCIgbGV0LWxheW91dCQ9XCJsYXlvdXQkXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0taXRlbXNcIj5cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGRldGFpbHNDb2x1bW5zOyB0cmFjayBjb2x1bW47IGxldCBjb2x1bW5JbmRleCA9ICRpbmRleCkge1xuICAgICAgICA8ZGl2IGZkLWZvcm0taXRlbT5cbiAgICAgICAgICAgIDxsYWJlbCBmZC1mb3JtLWxhYmVsIGZvcj1cImlucHV0LTJcIj57eyBjb2x1bW4uQ2FwdGlvbiB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW86IG1vLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lRWRpdE1vZGU6IGlubGluZUVkaXRNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCQgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgICAjY29sdW1uVGVtcGxhdGVcbiAgICBsZXQtY29sdW1uXG4gICAgbGV0LW1vPVwibW9cIlxuICAgIGxldC1pbmRleD1cImluZGV4XCJcbiAgICBsZXQtaW5saW5lRWRpdE1vZGU9XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgbGV0LWxheW91dDk0PVwibGF5b3V0OTRcIlxuPlxuICAgIDxic3UtYmFyc2EtdGFibGUtY29sdW1uXG4gICAgICAgIFttb109XCJtb1wiXG4gICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtpc2RpcnR5XT1cImRpcnR5Q29sdW1ucyAmJiBkaXJ0eUNvbHVtbnNbY29sdW1uLk5hbWVdXCJcbiAgICAgICAgW3ZhbHVlXT1cImNvbHVtbiB8IGNvbHVtblZhbHVlOiBtb1wiXG4gICAgICAgIFtpY29uXT1cImNvbHVtbiB8IGNvbHVtbkljb246IG1vXCJcbiAgICAgICAgW2N1c3RvbUNvbXBvbmVudF09XCJjb2x1bW4uJEN1c3RvbUNvbXBvbmVudFwiXG4gICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgW2Rpc2FibGVFbGxhcHNpc109XCJzZWNvbmRhcnlDb2x1bW5zPy5sZW5ndGhcIlxuICAgICAgICBbZWRpdE1vZGVdPVwiaXNDaGVja2VkICYmIGlubGluZUVkaXRNb2RlICYmIGFsbG93SW5saW5lRWRpdFwiXG4gICAgICAgIFtpbmxpbmVFZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgICAgIFtpc0NoZWNrZWRdPVwiaXNDaGVja2VkXCJcbiAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgW2Zvcm1TZXR0aW5nXT1cImZvcm1TZXR0aW5nXCJcbiAgICAgICAgW3J0bF09XCJydGxcIlxuICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcbiAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXG4gICAgICAgIFtsYXlvdXQ5NF09XCJsYXlvdXQ5NFwiXG4gICAgICAgIChzYXZlKT1cIm9uRWRpdEZvcm1QYW5lbFNhdmUobnVsbClcIlxuICAgICAgICAoY2FuY2VsKT1cIm9uRWRpdEZvcm1QYW5lbENhbmNlbChudWxsKVwiXG4gICAgICAgICh0YWIpPVwib25UYWJLZXlEb3duKCRldmVudCwgaW5kZXgpXCJcbiAgICAgICAgKGNoYW5nZVRvRWRpdE1vZGUpPVwib25Db2x1bW5DaGFuZ2VUb0VkaXRNb2RlKCRldmVudCwgaW5kZXgpXCJcbiAgICA+XG4gICAgPC9ic3UtYmFyc2EtdGFibGUtY29sdW1uPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjc3RhdHVzSW5kaWNhdG9yPlxuICAgIEBpZiAocm93SW5kaWNhdG9yKSB7XG4gICAgPGJzdS1iYXJzYS1jb2x1bW4taW5kaWNhdG9yIFtoaWRlQm9yZGVyQm90dG9tXT1cIiFkZXRhaWxzQ29sbGFwc2VkXCIgW2JhY2tDb2xvcl09XCJyb3dJbmRpY2F0b3JDb2xvclwiPlxuICAgIDwvYnN1LWJhcnNhLWNvbHVtbi1pbmRpY2F0b3I+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcm93TnVtYmVyVGVtcGxhdGU+XG4gICAgQGlmIChzaG93Um93TnVtYmVyKSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgYnN1LWJhcnNhLWNvbHVtbi1yb3dudW1iZXIgW3Jvd051bWJlcl09XCJyb3dOdW1iZXJcIiAoY2xpY2spPVwiIWlzQ2hlY2tMaXN0ICYmIG9uUm93Q2hlY2soKVwiPjwvdGQ+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjx0ciBmZC10YWJsZS1yb3cgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZVwiPjwvdHI+XG4iXX0=