@sarasanalytics-com/design-system 0.0.185 → 0.0.187

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.
@@ -88,7 +88,7 @@ export class NgSelectComponent extends FieldType {
88
88
  this.filteredOptions = [...this.field.props?.options];
89
89
  }
90
90
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: NgSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
91
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: NgSelectComponent, isStandalone: true, selector: "sa-ng-select", providers: [IconService], usesInheritance: true, ngImport: i0, template: "<ng-select [items]=\"filteredOptions\" [multiple]=\"props?.multiple || false\" [bindLabel]=\"props?.bindLabel || 'label'\"\n [closeOnSelect]=\"props?.closeOnSelect ?? true\" [bindValue]=\"props?.bindValue || 'value'\"\n [placeholder]=\"props?.placeholder || 'Select'\" [searchable]=\"false\" [formControl]=\"formControl\"\n [clearable]=\"props?.isClearable\" [appearance]=\"props['appearance'] || 'outline'\" [loading]=\"props?.loading || false\" \n class=\"ng-select-custom\"\n [matTooltip]=\"(!props?.multiple && formControl?.value && ((formControl?.value[props?.bindLabel || 'label']?.length > 50) || (formControl?.value?.length > 50))) ? (formControl?.value[props?.bindLabel || 'label'] || formControl?.value) : ''\"\n matTooltipPosition=\"above\">\n\n @if(!!props?.showSearchBar){\n <ng-template ng-header-tmp>\n <div class=\"search-input-container mat-form-field-density-5\">\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\n <sa-icon icon=\"searchIcon\" class=\"searchIcons\" size=\"20\" matPrefix></sa-icon>\n <input matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input searchIcons\"\n (keyup)=\"onSearch($event)\" (keydown)=\"stopBackspacePropagation($event)\"\n [placeholder]=\"props?.searchPlaceholder || 'Search'\" [(ngModel)]=\"searchValue\" />\n <sa-icon icon=\"closeOutlined\" class=\"pointer searchIcons\" size=\"15\" matSuffix\n (click)=\"clearSearch($event)\"></sa-icon>\n </mat-form-field>\n </div>\n </ng-template>\n }\n <!-- Option template with a checkbox in front of each row -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\n <div class=\"option-row\" \n [matTooltip]=\"(item[props.bindLabel || 'label']?.length > 80) ? item[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"right\">\n @if(props?.multiple){\n <input type=\"checkbox\" [checked]=\"item$.selected\" tabindex=\"-1\" />\n }\n <span class=\"option-label\">{{ item[props.bindLabel || 'label'] }}</span>\n\n </div>\n </ng-template>\n\n <!-- Single select label template -->\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\n <span class=\"ng-value-label\">\n {{ item[props.bindLabel || 'label'] }}\n </span>\n </ng-template>\n\n <!-- Selected items chip template (optional) -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div class=\"chips ng-values-list\">\n\n <!-- If collapsed: show only first 2 + summary -->\n <ng-container *ngIf=\"!expandedSummary\">\n @for (s of items.slice(0, 2); track s[props.bindValue || 'value']) {\n <div class=\"ng-value\" \n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n\n @if (items.length > 2) {\n <div class=\"ng-value summary-chip pointer\" \n (click)=\"toggleSummary()\" \n matTooltip=\"Click to expand all selected items\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">+{{ items.length - 2 }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clearRemaining(items, clear)\"><sa-icon\n icon=\"closeOutlined\" size=\"11\"></sa-icon></span>\n </div>\n }\n </ng-container>\n\n <!-- If expanded: show all items -->\n <ng-container *ngIf=\"expandedSummary\">\n @for (s of items; track s[props.bindValue || 'value']) {\n <div class=\"ng-value\" \n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n <!-- Collapse button -->\n <div class=\"ng-value summary-chip pointer\" \n (click)=\"toggleSummary()\" \n matTooltip=\"Click to collapse\" \n matTooltipPosition=\"above\">\n <sa-icon class=\"ng-value-label\" size=\"18\" icon=\"leftChevronCircle\"></sa-icon>\n </div>\n </ng-container>\n\n </div>\n </ng-template>\n\n @if(props?.footer){\n <ng-template ng-footer-tmp>\n <div class=\"dropdown-footer\">{{props?.footer?.description}}</div>\n </ng-template>\n }\n\n <ng-template ng-notfound-tmp>\n <div class=\"no-results\">\n @if (searchValue?.length > 0) {\n {{ props?.searchNotFoundText || '\u274C No items match \"' + searchValue + '\"' }}\n } @else {\n {{ props?.notFoundText || '\u26A0\uFE0F No options available' }}\n }\n </div>\n </ng-template>\n\n <ng-template ng-loadingtext-tmp>\n <div class=\"loading\">\n <sa-icon icon=\"loader\" size=\"16\" class=\"loading-spinner\"></sa-icon>\n <span>Loading options...</span>\n </div>\n </ng-template>\n</ng-select>", styles: ["::ng-deep .ng-select-custom .search-input-container .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding:var(--small-2px, 2px) var(--small-12px, 12px)}.ng-select-custom .ng-values-list{display:flex;flex-wrap:wrap;gap:var(--small-8px, 8px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:none;display:flex;align-items:center;font-size:var(--small-6px, 6px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{border-radius:var(--small-4px, 4px);background:var(--grey-50, #F2F4F7);display:flex;padding:.188rem var(--small-8px, 8px) var(--small-2px, 2px) var(--small-8px, 8px);justify-content:center;align-items:center;gap:var(--small-4px, 4px)}.ng-select-custom .option-row{display:flex;width:18.75rem;height:2.5rem;padding:var(--small-12px, 12px);align-items:center;gap:var(--small-8px, 8px);flex-shrink:0}::ng-deep .ng-select-custom .mdc-form-field.mat-internal-form-field{display:flex;gap:var(--small-8px, 8px);align-items:center}::ng-deep .ng-select-custom .mdc-checkbox__ripple{display:none}::ng-deep .ng-select-custom .checkbox-style{display:flex;align-items:center}.ng-select-custom .ng-option input[type=checkbox],.ng-select input[type=checkbox]{accent-color:var(--primary-500);vertical-align:middle;width:var(--small-14px, 14px);height:var(--small-14px, 14px)}::ng-deep .ng-select-custom.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:var(--primary-50)}.option-label{color:var(--text-high-emphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .search-input-container .mat-mdc-form-field{width:-webkit-fill-available}::ng-deep .ng-select-custom .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select .ng-arrow-wrapper .ng-arrow{display:none}::ng-deep .ng-select .ng-arrow-wrapper{width:var(--small-12px, 12px);height:var(--small-12px, 12px);display:flex;align-items:center;justify-content:center}::ng-deep .ng-select .ng-arrow-wrapper:after{content:\"\";display:inline-block;width:var(--small-8px, 8px);height:var(--small-12px, 12px);background:url(/assets/upDownChevronOutlined.svg) no-repeat center;background-size:contain}::ng-deep .ng-select-custom.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:var(--primary-500);box-shadow:none}::ng-deep .ng-select-custom.ng-select .no-results{padding:.8rem}::ng-deep .ng-select-custom.ng-select .ng-select-container{padding:.23rem var(--small-12px) .2rem var(--small-12px);height:1.875rem;min-height:2.438rem;border:1px solid var(--grey-100, #EAECF0);align-items:center}::ng-deep .ng-select-custom.ng-select .option-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-value-label{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-family-roboto);font-size:.688rem;font-style:normal;font-weight:500;line-height:var(--small-16px, 16px);letter-spacing:.5px}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--primary-500)}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--small-4px, 4px);border-bottom-right-radius:var(--small-4px, 4px);border-bottom-left-radius:0}::ng-deep .ng-select-custom.ng-select.ng-select-single .ng-value-label{color:var(--text-highemphasis);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--grey-100)}.ng-select-custom .searchIcons{color:var(--color-text-neutral-300, #757575)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:flex}::ng-deep .ng-select-custom .loading{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);display:flex;align-items:center;justify-content:center;padding:12px;gap:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i3.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: i3.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "directive", type: i3.NgFooterTemplateDirective, selector: "[ng-footer-tmp]" }, { kind: "directive", type: i3.NgNotFoundTemplateDirective, selector: "[ng-notfound-tmp]" }, { kind: "directive", type: i3.NgLoadingTextTemplateDirective, selector: "[ng-loadingtext-tmp]" }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "imgWidth", "imgHeight", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatCheckboxModule }] }); }
91
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: NgSelectComponent, isStandalone: true, selector: "sa-ng-select", providers: [IconService], usesInheritance: true, ngImport: i0, template: "<ng-select [items]=\"filteredOptions\" [multiple]=\"props?.multiple || false\" [bindLabel]=\"props?.bindLabel || 'label'\"\n [closeOnSelect]=\"props?.closeOnSelect ?? true\" [bindValue]=\"props?.bindValue || 'value'\"\n [placeholder]=\"props?.placeholder || 'Select'\" [searchable]=\"false\" [formControl]=\"formControl\"\n [clearable]=\"props?.isClearable\" [appearance]=\"props['appearance'] || 'outline'\" [loading]=\"props?.loading || false\" \n class=\"ng-select-custom\">\n\n @if(!!props?.showSearchBar){\n <ng-template ng-header-tmp>\n <div class=\"search-input-container mat-form-field-density-5\">\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\n <sa-icon icon=\"searchIcon\" class=\"searchIcons\" size=\"20\" matPrefix></sa-icon>\n <input matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input searchIcons\"\n (keyup)=\"onSearch($event)\" (keydown)=\"stopBackspacePropagation($event)\"\n [placeholder]=\"props?.searchPlaceholder || 'Search'\" [(ngModel)]=\"searchValue\" />\n <sa-icon icon=\"closeOutlined\" class=\"pointer searchIcons\" size=\"15\" matSuffix\n (click)=\"clearSearch($event)\"></sa-icon>\n </mat-form-field>\n </div>\n </ng-template>\n }\n <!-- Option template with a checkbox in front of each row -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\n <div class=\"option-row\" \n [matTooltip]=\"(item[props.bindLabel || 'label']?.length > 40) ? item[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"right\">\n @if(props?.multiple){\n <input type=\"checkbox\" [checked]=\"item$.selected\" tabindex=\"-1\" />\n }\n <span class=\"option-label\">{{ item[props.bindLabel || 'label'] }}</span>\n\n </div>\n </ng-template>\n\n <!-- Single select label template -->\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\n <span class=\"ng-value-label\">\n {{ item[props.bindLabel || 'label'] }}\n </span>\n </ng-template>\n\n <!-- Selected items chip template (optional) -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div class=\"chips ng-values-list\">\n\n <!-- If collapsed: show only first 2 + summary -->\n <ng-container *ngIf=\"!expandedSummary\">\n @for (s of items.slice(0, 2); track s[props.bindValue || 'value']) {\n <div class=\"ng-value\" \n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n\n @if (items.length > 2) {\n <div class=\"ng-value summary-chip pointer\" \n (click)=\"toggleSummary()\" \n matTooltip=\"Click to expand all selected items\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">+{{ items.length - 2 }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clearRemaining(items, clear)\"><sa-icon\n icon=\"closeOutlined\" size=\"11\"></sa-icon></span>\n </div>\n }\n </ng-container>\n\n <!-- If expanded: show all items -->\n <ng-container *ngIf=\"expandedSummary\">\n @for (s of items; track s[props.bindValue || 'value']) {\n <div class=\"ng-value\" \n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n <!-- Collapse button -->\n <div class=\"ng-value summary-chip pointer\" \n (click)=\"toggleSummary()\" \n matTooltip=\"Click to collapse\" \n matTooltipPosition=\"above\">\n <sa-icon class=\"ng-value-label\" size=\"18\" icon=\"leftChevronCircle\"></sa-icon>\n </div>\n </ng-container>\n\n </div>\n </ng-template>\n\n @if(props?.footer){\n <ng-template ng-footer-tmp>\n <div class=\"dropdown-footer\">{{props?.footer?.description}}</div>\n </ng-template>\n }\n\n <ng-template ng-notfound-tmp>\n <div class=\"no-results\">\n @if (searchValue?.length > 0) {\n {{ props?.searchNotFoundText || '\u274C No items match \"' + searchValue + '\"' }}\n } @else {\n {{ props?.notFoundText || '\u26A0\uFE0F No options available' }}\n }\n </div>\n </ng-template>\n\n <ng-template ng-loadingtext-tmp>\n <div class=\"loading\">\n <sa-icon icon=\"loader\" size=\"16\" class=\"loading-spinner\"></sa-icon>\n <span>Loading options...</span>\n </div>\n </ng-template>\n</ng-select>", styles: ["::ng-deep .ng-select-custom .search-input-container .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding:var(--small-2px, 2px) var(--small-12px, 12px)}.ng-select-custom .ng-values-list{display:flex;flex-wrap:wrap;gap:var(--small-8px, 8px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:none;display:flex;align-items:center;font-size:var(--small-6px, 6px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{border-radius:var(--small-4px, 4px);background:var(--grey-50, #F2F4F7);display:flex;padding:.188rem var(--small-8px, 8px) var(--small-2px, 2px) var(--small-8px, 8px);justify-content:center;align-items:center;gap:var(--small-4px, 4px)}.ng-select-custom .option-row{display:flex;width:18.75rem;height:2.5rem;padding:var(--small-12px, 12px);align-items:center;gap:var(--small-8px, 8px);flex-shrink:0}::ng-deep .ng-select-custom .mdc-form-field.mat-internal-form-field{display:flex;gap:var(--small-8px, 8px);align-items:center}::ng-deep .ng-select-custom .mdc-checkbox__ripple{display:none}::ng-deep .ng-select-custom .checkbox-style{display:flex;align-items:center}.ng-select-custom .ng-option input[type=checkbox],.ng-select input[type=checkbox]{accent-color:var(--primary-500);vertical-align:middle;width:var(--small-14px, 14px);height:var(--small-14px, 14px)}::ng-deep .ng-select-custom.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:var(--primary-50)}.option-label{color:var(--text-high-emphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .search-input-container .mat-mdc-form-field{width:-webkit-fill-available}::ng-deep .ng-select-custom .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select .ng-arrow-wrapper .ng-arrow{display:none}::ng-deep .ng-select .ng-arrow-wrapper{width:var(--small-12px, 12px);height:var(--small-12px, 12px);display:flex;align-items:center;justify-content:center}::ng-deep .ng-select .ng-arrow-wrapper:after{content:\"\";display:inline-block;width:var(--small-8px, 8px);height:var(--small-12px, 12px);background:url(/assets/upDownChevronOutlined.svg) no-repeat center;background-size:contain}::ng-deep .ng-select-custom.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:var(--primary-500);box-shadow:none}::ng-deep .ng-select-custom.ng-select .no-results{padding:.8rem}::ng-deep .ng-select-custom.ng-select .ng-select-container{padding:.23rem var(--small-12px) .2rem var(--small-12px);height:1.875rem;min-height:2.438rem;border:1px solid var(--grey-100, #EAECF0);align-items:center}::ng-deep .ng-select-custom.ng-select .option-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-value-label{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-family-roboto);font-size:.688rem;font-style:normal;font-weight:500;line-height:var(--small-16px, 16px);letter-spacing:.5px}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--primary-500)}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--small-4px, 4px);border-bottom-right-radius:var(--small-4px, 4px);border-bottom-left-radius:0}::ng-deep .ng-select-custom.ng-select.ng-select-single .ng-value-label{color:var(--text-highemphasis);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--grey-100)}.ng-select-custom .searchIcons{color:var(--color-text-neutral-300, #757575)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:flex}::ng-deep .ng-select-custom .loading{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);display:flex;align-items:center;justify-content:center;padding:12px;gap:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i3.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: i3.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "directive", type: i3.NgFooterTemplateDirective, selector: "[ng-footer-tmp]" }, { kind: "directive", type: i3.NgNotFoundTemplateDirective, selector: "[ng-notfound-tmp]" }, { kind: "directive", type: i3.NgLoadingTextTemplateDirective, selector: "[ng-loadingtext-tmp]" }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "imgWidth", "imgHeight", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatCheckboxModule }] }); }
92
92
  }
93
93
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: NgSelectComponent, decorators: [{
94
94
  type: Component,
@@ -108,6 +108,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
108
108
  MatDatepickerModule,
109
109
  MatNativeDateModule,
110
110
  MatCheckboxModule,
111
- ], providers: [IconService], template: "<ng-select [items]=\"filteredOptions\" [multiple]=\"props?.multiple || false\" [bindLabel]=\"props?.bindLabel || 'label'\"\n [closeOnSelect]=\"props?.closeOnSelect ?? true\" [bindValue]=\"props?.bindValue || 'value'\"\n [placeholder]=\"props?.placeholder || 'Select'\" [searchable]=\"false\" [formControl]=\"formControl\"\n [clearable]=\"props?.isClearable\" [appearance]=\"props['appearance'] || 'outline'\" [loading]=\"props?.loading || false\" \n class=\"ng-select-custom\"\n [matTooltip]=\"(!props?.multiple && formControl?.value && ((formControl?.value[props?.bindLabel || 'label']?.length > 50) || (formControl?.value?.length > 50))) ? (formControl?.value[props?.bindLabel || 'label'] || formControl?.value) : ''\"\n matTooltipPosition=\"above\">\n\n @if(!!props?.showSearchBar){\n <ng-template ng-header-tmp>\n <div class=\"search-input-container mat-form-field-density-5\">\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\n <sa-icon icon=\"searchIcon\" class=\"searchIcons\" size=\"20\" matPrefix></sa-icon>\n <input matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input searchIcons\"\n (keyup)=\"onSearch($event)\" (keydown)=\"stopBackspacePropagation($event)\"\n [placeholder]=\"props?.searchPlaceholder || 'Search'\" [(ngModel)]=\"searchValue\" />\n <sa-icon icon=\"closeOutlined\" class=\"pointer searchIcons\" size=\"15\" matSuffix\n (click)=\"clearSearch($event)\"></sa-icon>\n </mat-form-field>\n </div>\n </ng-template>\n }\n <!-- Option template with a checkbox in front of each row -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\n <div class=\"option-row\" \n [matTooltip]=\"(item[props.bindLabel || 'label']?.length > 80) ? item[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"right\">\n @if(props?.multiple){\n <input type=\"checkbox\" [checked]=\"item$.selected\" tabindex=\"-1\" />\n }\n <span class=\"option-label\">{{ item[props.bindLabel || 'label'] }}</span>\n\n </div>\n </ng-template>\n\n <!-- Single select label template -->\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\n <span class=\"ng-value-label\">\n {{ item[props.bindLabel || 'label'] }}\n </span>\n </ng-template>\n\n <!-- Selected items chip template (optional) -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div class=\"chips ng-values-list\">\n\n <!-- If collapsed: show only first 2 + summary -->\n <ng-container *ngIf=\"!expandedSummary\">\n @for (s of items.slice(0, 2); track s[props.bindValue || 'value']) {\n <div class=\"ng-value\" \n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n\n @if (items.length > 2) {\n <div class=\"ng-value summary-chip pointer\" \n (click)=\"toggleSummary()\" \n matTooltip=\"Click to expand all selected items\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">+{{ items.length - 2 }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clearRemaining(items, clear)\"><sa-icon\n icon=\"closeOutlined\" size=\"11\"></sa-icon></span>\n </div>\n }\n </ng-container>\n\n <!-- If expanded: show all items -->\n <ng-container *ngIf=\"expandedSummary\">\n @for (s of items; track s[props.bindValue || 'value']) {\n <div class=\"ng-value\" \n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n <!-- Collapse button -->\n <div class=\"ng-value summary-chip pointer\" \n (click)=\"toggleSummary()\" \n matTooltip=\"Click to collapse\" \n matTooltipPosition=\"above\">\n <sa-icon class=\"ng-value-label\" size=\"18\" icon=\"leftChevronCircle\"></sa-icon>\n </div>\n </ng-container>\n\n </div>\n </ng-template>\n\n @if(props?.footer){\n <ng-template ng-footer-tmp>\n <div class=\"dropdown-footer\">{{props?.footer?.description}}</div>\n </ng-template>\n }\n\n <ng-template ng-notfound-tmp>\n <div class=\"no-results\">\n @if (searchValue?.length > 0) {\n {{ props?.searchNotFoundText || '\u274C No items match \"' + searchValue + '\"' }}\n } @else {\n {{ props?.notFoundText || '\u26A0\uFE0F No options available' }}\n }\n </div>\n </ng-template>\n\n <ng-template ng-loadingtext-tmp>\n <div class=\"loading\">\n <sa-icon icon=\"loader\" size=\"16\" class=\"loading-spinner\"></sa-icon>\n <span>Loading options...</span>\n </div>\n </ng-template>\n</ng-select>", styles: ["::ng-deep .ng-select-custom .search-input-container .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding:var(--small-2px, 2px) var(--small-12px, 12px)}.ng-select-custom .ng-values-list{display:flex;flex-wrap:wrap;gap:var(--small-8px, 8px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:none;display:flex;align-items:center;font-size:var(--small-6px, 6px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{border-radius:var(--small-4px, 4px);background:var(--grey-50, #F2F4F7);display:flex;padding:.188rem var(--small-8px, 8px) var(--small-2px, 2px) var(--small-8px, 8px);justify-content:center;align-items:center;gap:var(--small-4px, 4px)}.ng-select-custom .option-row{display:flex;width:18.75rem;height:2.5rem;padding:var(--small-12px, 12px);align-items:center;gap:var(--small-8px, 8px);flex-shrink:0}::ng-deep .ng-select-custom .mdc-form-field.mat-internal-form-field{display:flex;gap:var(--small-8px, 8px);align-items:center}::ng-deep .ng-select-custom .mdc-checkbox__ripple{display:none}::ng-deep .ng-select-custom .checkbox-style{display:flex;align-items:center}.ng-select-custom .ng-option input[type=checkbox],.ng-select input[type=checkbox]{accent-color:var(--primary-500);vertical-align:middle;width:var(--small-14px, 14px);height:var(--small-14px, 14px)}::ng-deep .ng-select-custom.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:var(--primary-50)}.option-label{color:var(--text-high-emphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .search-input-container .mat-mdc-form-field{width:-webkit-fill-available}::ng-deep .ng-select-custom .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select .ng-arrow-wrapper .ng-arrow{display:none}::ng-deep .ng-select .ng-arrow-wrapper{width:var(--small-12px, 12px);height:var(--small-12px, 12px);display:flex;align-items:center;justify-content:center}::ng-deep .ng-select .ng-arrow-wrapper:after{content:\"\";display:inline-block;width:var(--small-8px, 8px);height:var(--small-12px, 12px);background:url(/assets/upDownChevronOutlined.svg) no-repeat center;background-size:contain}::ng-deep .ng-select-custom.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:var(--primary-500);box-shadow:none}::ng-deep .ng-select-custom.ng-select .no-results{padding:.8rem}::ng-deep .ng-select-custom.ng-select .ng-select-container{padding:.23rem var(--small-12px) .2rem var(--small-12px);height:1.875rem;min-height:2.438rem;border:1px solid var(--grey-100, #EAECF0);align-items:center}::ng-deep .ng-select-custom.ng-select .option-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-value-label{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-family-roboto);font-size:.688rem;font-style:normal;font-weight:500;line-height:var(--small-16px, 16px);letter-spacing:.5px}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--primary-500)}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--small-4px, 4px);border-bottom-right-radius:var(--small-4px, 4px);border-bottom-left-radius:0}::ng-deep .ng-select-custom.ng-select.ng-select-single .ng-value-label{color:var(--text-highemphasis);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--grey-100)}.ng-select-custom .searchIcons{color:var(--color-text-neutral-300, #757575)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:flex}::ng-deep .ng-select-custom .loading{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);display:flex;align-items:center;justify-content:center;padding:12px;gap:8px}\n"] }]
111
+ ], providers: [IconService], template: "<ng-select [items]=\"filteredOptions\" [multiple]=\"props?.multiple || false\" [bindLabel]=\"props?.bindLabel || 'label'\"\n [closeOnSelect]=\"props?.closeOnSelect ?? true\" [bindValue]=\"props?.bindValue || 'value'\"\n [placeholder]=\"props?.placeholder || 'Select'\" [searchable]=\"false\" [formControl]=\"formControl\"\n [clearable]=\"props?.isClearable\" [appearance]=\"props['appearance'] || 'outline'\" [loading]=\"props?.loading || false\" \n class=\"ng-select-custom\">\n\n @if(!!props?.showSearchBar){\n <ng-template ng-header-tmp>\n <div class=\"search-input-container mat-form-field-density-5\">\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\n <sa-icon icon=\"searchIcon\" class=\"searchIcons\" size=\"20\" matPrefix></sa-icon>\n <input matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input searchIcons\"\n (keyup)=\"onSearch($event)\" (keydown)=\"stopBackspacePropagation($event)\"\n [placeholder]=\"props?.searchPlaceholder || 'Search'\" [(ngModel)]=\"searchValue\" />\n <sa-icon icon=\"closeOutlined\" class=\"pointer searchIcons\" size=\"15\" matSuffix\n (click)=\"clearSearch($event)\"></sa-icon>\n </mat-form-field>\n </div>\n </ng-template>\n }\n <!-- Option template with a checkbox in front of each row -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\n <div class=\"option-row\" \n [matTooltip]=\"(item[props.bindLabel || 'label']?.length > 40) ? item[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"right\">\n @if(props?.multiple){\n <input type=\"checkbox\" [checked]=\"item$.selected\" tabindex=\"-1\" />\n }\n <span class=\"option-label\">{{ item[props.bindLabel || 'label'] }}</span>\n\n </div>\n </ng-template>\n\n <!-- Single select label template -->\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\n <span class=\"ng-value-label\">\n {{ item[props.bindLabel || 'label'] }}\n </span>\n </ng-template>\n\n <!-- Selected items chip template (optional) -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div class=\"chips ng-values-list\">\n\n <!-- If collapsed: show only first 2 + summary -->\n <ng-container *ngIf=\"!expandedSummary\">\n @for (s of items.slice(0, 2); track s[props.bindValue || 'value']) {\n <div class=\"ng-value\" \n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n\n @if (items.length > 2) {\n <div class=\"ng-value summary-chip pointer\" \n (click)=\"toggleSummary()\" \n matTooltip=\"Click to expand all selected items\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">+{{ items.length - 2 }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clearRemaining(items, clear)\"><sa-icon\n icon=\"closeOutlined\" size=\"11\"></sa-icon></span>\n </div>\n }\n </ng-container>\n\n <!-- If expanded: show all items -->\n <ng-container *ngIf=\"expandedSummary\">\n @for (s of items; track s[props.bindValue || 'value']) {\n <div class=\"ng-value\" \n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \n matTooltipPosition=\"above\">\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\n size=\"11\"></sa-icon></span>\n </div>\n }\n <!-- Collapse button -->\n <div class=\"ng-value summary-chip pointer\" \n (click)=\"toggleSummary()\" \n matTooltip=\"Click to collapse\" \n matTooltipPosition=\"above\">\n <sa-icon class=\"ng-value-label\" size=\"18\" icon=\"leftChevronCircle\"></sa-icon>\n </div>\n </ng-container>\n\n </div>\n </ng-template>\n\n @if(props?.footer){\n <ng-template ng-footer-tmp>\n <div class=\"dropdown-footer\">{{props?.footer?.description}}</div>\n </ng-template>\n }\n\n <ng-template ng-notfound-tmp>\n <div class=\"no-results\">\n @if (searchValue?.length > 0) {\n {{ props?.searchNotFoundText || '\u274C No items match \"' + searchValue + '\"' }}\n } @else {\n {{ props?.notFoundText || '\u26A0\uFE0F No options available' }}\n }\n </div>\n </ng-template>\n\n <ng-template ng-loadingtext-tmp>\n <div class=\"loading\">\n <sa-icon icon=\"loader\" size=\"16\" class=\"loading-spinner\"></sa-icon>\n <span>Loading options...</span>\n </div>\n </ng-template>\n</ng-select>", styles: ["::ng-deep .ng-select-custom .search-input-container .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding:var(--small-2px, 2px) var(--small-12px, 12px)}.ng-select-custom .ng-values-list{display:flex;flex-wrap:wrap;gap:var(--small-8px, 8px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:none;display:flex;align-items:center;font-size:var(--small-6px, 6px)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{border-radius:var(--small-4px, 4px);background:var(--grey-50, #F2F4F7);display:flex;padding:.188rem var(--small-8px, 8px) var(--small-2px, 2px) var(--small-8px, 8px);justify-content:center;align-items:center;gap:var(--small-4px, 4px)}.ng-select-custom .option-row{display:flex;width:18.75rem;height:2.5rem;padding:var(--small-12px, 12px);align-items:center;gap:var(--small-8px, 8px);flex-shrink:0}::ng-deep .ng-select-custom .mdc-form-field.mat-internal-form-field{display:flex;gap:var(--small-8px, 8px);align-items:center}::ng-deep .ng-select-custom .mdc-checkbox__ripple{display:none}::ng-deep .ng-select-custom .checkbox-style{display:flex;align-items:center}.ng-select-custom .ng-option input[type=checkbox],.ng-select input[type=checkbox]{accent-color:var(--primary-500);vertical-align:middle;width:var(--small-14px, 14px);height:var(--small-14px, 14px)}::ng-deep .ng-select-custom.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:var(--primary-50)}.option-label{color:var(--text-high-emphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .search-input-container .mat-mdc-form-field{width:-webkit-fill-available}::ng-deep .ng-select-custom .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select .ng-arrow-wrapper .ng-arrow{display:none}::ng-deep .ng-select .ng-arrow-wrapper{width:var(--small-12px, 12px);height:var(--small-12px, 12px);display:flex;align-items:center;justify-content:center}::ng-deep .ng-select .ng-arrow-wrapper:after{content:\"\";display:inline-block;width:var(--small-8px, 8px);height:var(--small-12px, 12px);background:url(/assets/upDownChevronOutlined.svg) no-repeat center;background-size:contain}::ng-deep .ng-select-custom.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:var(--primary-500);box-shadow:none}::ng-deep .ng-select-custom.ng-select .no-results{padding:.8rem}::ng-deep .ng-select-custom.ng-select .ng-select-container{padding:.23rem var(--small-12px) .2rem var(--small-12px);height:1.875rem;min-height:2.438rem;border:1px solid var(--grey-100, #EAECF0);align-items:center}::ng-deep .ng-select-custom.ng-select .option-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-value-label{color:var(--text-mediumemphasis, #6D6979);font-family:var(--font-family-roboto);font-size:.688rem;font-style:normal;font-weight:500;line-height:var(--small-16px, 16px);letter-spacing:.5px}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:var(--primary-500)}::ng-deep .ng-select-custom.ng-select .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--small-4px, 4px);border-bottom-right-radius:var(--small-4px, 4px);border-bottom-left-radius:0}::ng-deep .ng-select-custom.ng-select.ng-select-single .ng-value-label{color:var(--text-highemphasis);font-family:var(--font-family-roboto);font-size:var(--small-14px);font-style:normal;font-weight:400;line-height:var(--medium-20px);letter-spacing:.25px}::ng-deep .ng-select-custom.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-low-emphasis, #9B98A3);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);font-style:normal;font-weight:400;line-height:var(--medium-20px, 20px);letter-spacing:.25px}::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch,::ng-deep .ng-select-custom .search-input-container .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--grey-100)}.ng-select-custom .searchIcons{color:var(--color-text-neutral-300, #757575)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:var(--primary-50)}::ng-deep .ng-select-custom.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:flex}::ng-deep .ng-select-custom .loading{color:var(--text-medium-emphasis, #6D6979);font-family:var(--font-family, Roboto);font-size:var(--small-14px, 14px);display:flex;align-items:center;justify-content:center;padding:12px;gap:8px}\n"] }]
112
112
  }] });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvZHJvcGRvd24vbmctc2VsZWN0L25nLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Ryb3Bkb3duL25nLXNlbGVjdC9uZy1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlD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QVcsc1BBQ1gsWUFBWSw4QkFDWixjQUFjLGtoREFDZCxhQUFhLDZOQUNiLGtCQUFrQiwyZUFDbEIsY0FBYywwV0FDZCxhQUFhLDhCQUNiLGVBQWUsOEJBQ2YsZ0JBQWdCLDRUQUNoQixxQkFBcUIsOEJBQ3JCLG1CQUFtQiw4QkFDbkIsbUJBQW1CLDhCQUNuQixpQkFBaUI7OzJGQU1SLGlCQUFpQjtrQkF4QjdCLFNBQVM7K0JBQ0UsY0FBYyxjQUNaLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3FCQUNsQixhQUNVLENBQUMsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEb0NoZWNrIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBOZ1NlbGVjdE1vZHVsZSB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaWNvbi9pY29uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYS1uZy1zZWxlY3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRm9ybWx5TW9kdWxlLFxuICAgIE5nU2VsZWN0TW9kdWxlLFxuICAgIEljb25Db21wb25lbnQsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbSWNvblNlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDogJy4vbmctc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL25nLXNlbGVjdC5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBOZ1NlbGVjdENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8YW55Pj4gaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgZmlsdGVyZWRPcHRpb25zOiBhbnlbXTtcbiAgc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9vcHRpb25zOiBhbnlbXTtcblxuICBvblNlYXJjaChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgYmluZExhYmVsID0gdGhpcy5wcm9wcy5iaW5kTGFiZWwgfHwgJ2xhYmVsJztcblxuICAgIGlmICghc2VhcmNoVmFsdWUpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gWy4uLih0aGlzLmZpZWxkLnByb3BzPy5vcHRpb25zIHx8IFtdKV07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSAodGhpcy5maWVsZC5wcm9wcz8ub3B0aW9ucyB8fCBbXSkuZmlsdGVyKG9wdCA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IG9wdD8uW2JpbmRMYWJlbF0gPz8gJyc7XG4gICAgICByZXR1cm4gU3RyaW5nKGxhYmVsKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLnByb3BzLm9wdGlvbnM7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4uKHRoaXMucHJvcHMub3B0aW9ucyB8fCBbXSldO1xuXG4gICAgLy8gSWYgYSBkZWZhdWx0IHZhbHVlIGlzIHByb3ZpZGVkIGluIHByb3BzIGFuZCB0aGUgZm9ybSBjb250cm9sIGhhcyBubyB2YWx1ZSB5ZXQsIHNldCBpdFxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB0aGlzLnByb3BzPy5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKCh0aGlzLmZvcm1Db250cm9sLnZhbHVlID09PSBudWxsIHx8IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09IHVuZGVmaW5lZCkgJiYgZGVmYXVsdFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGRlZmF1bHRWYWwpO1xuICAgIH1cbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zICE9PSB0aGlzLl9vcHRpb25zKSB7XG4gICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5wcm9wcy5vcHRpb25zO1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4uKHRoaXMuX29wdGlvbnMgfHwgW10pXTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJzsgLy8gQ2xlYXIgc2VhcmNoIHZhbHVlIHdoZW4gb3B0aW9ucyBjaGFuZ2VcbiAgICB9XG4gIH1cblxuXG5cbiAgLy8gKE9wdGlvbmFsKSBTZWxlY3QvRGVzZWxlY3QgYWxsIGhlbHBlcnNcbiAgYWxsU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM/LnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gdGhpcy5maWVsZC5wcm9wcz8ub3B0aW9ucy5sZW5ndGg7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoKSB7XG4gICAgY29uc3QgYmluZFZhbHVlID0gdGhpcy5wcm9wcy5iaW5kVmFsdWUgfHwgJ3ZhbHVlJztcbiAgICBpZiAodGhpcy5hbGxTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZXMgPSAodGhpcy5maWVsZC5wcm9wcz8ub3B0aW9ucyB8fCBbXSkubWFwKG8gPT4gb1tiaW5kVmFsdWVdKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclJlbWFpbmluZyhpdGVtczogYW55W10sIGNsZWFyOiAoaXRlbTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgLy8gcmVtb3ZlIG9ubHkgdGhlIGl0ZW1zIGFmdGVyIHRoZSBmaXJzdCB0d29cbiAgICBpdGVtcy5zbGljZSgyKS5mb3JFYWNoKGl0ZW0gPT4gY2xlYXIoaXRlbSkpO1xuICB9XG4gIGV4cGFuZGVkU3VtbWFyeSA9IGZhbHNlO1xuXG4gIHRvZ2dsZVN1bW1hcnkoKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZFN1bW1hcnkgPSAhdGhpcy5leHBhbmRlZFN1bW1hcnk7XG4gIH1cblxuICAvLyBUaGlzIG1ldGhvZCB3aWxsIHN0b3AgdGhlIGV2ZW50IGZyb20gYnViYmxpbmcgdXBcbiAgc3RvcEJhY2tzcGFjZVByb3BhZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZXZlbnQua2V5Q29kZSA9PT0gOCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWFyY2goZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gWy4uLnRoaXMuZmllbGQucHJvcHM/Lm9wdGlvbnNdO1xuICB9XG59XG4iLCI8bmctc2VsZWN0IFtpdGVtc109XCJmaWx0ZXJlZE9wdGlvbnNcIiBbbXVsdGlwbGVdPVwicHJvcHM/Lm11bHRpcGxlIHx8IGZhbHNlXCIgW2JpbmRMYWJlbF09XCJwcm9wcz8uYmluZExhYmVsIHx8ICdsYWJlbCdcIlxuICAgIFtjbG9zZU9uU2VsZWN0XT1cInByb3BzPy5jbG9zZU9uU2VsZWN0ID8/IHRydWVcIiBbYmluZFZhbHVlXT1cInByb3BzPy5iaW5kVmFsdWUgfHwgJ3ZhbHVlJ1wiXG4gICAgW3BsYWNlaG9sZGVyXT1cInByb3BzPy5wbGFjZWhvbGRlciB8fCAnU2VsZWN0J1wiIFtzZWFyY2hhYmxlXT1cImZhbHNlXCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICBbY2xlYXJhYmxlXT1cInByb3BzPy5pc0NsZWFyYWJsZVwiIFthcHBlYXJhbmNlXT1cInByb3BzWydhcHBlYXJhbmNlJ10gfHwgJ291dGxpbmUnXCIgW2xvYWRpbmddPVwicHJvcHM/LmxvYWRpbmcgfHwgZmFsc2VcIiBcbiAgICBjbGFzcz1cIm5nLXNlbGVjdC1jdXN0b21cIlxuICAgIFttYXRUb29sdGlwXT1cIighcHJvcHM/Lm11bHRpcGxlICYmIGZvcm1Db250cm9sPy52YWx1ZSAmJiAoKGZvcm1Db250cm9sPy52YWx1ZVtwcm9wcz8uYmluZExhYmVsIHx8ICdsYWJlbCddPy5sZW5ndGggPiA1MCkgfHwgKGZvcm1Db250cm9sPy52YWx1ZT8ubGVuZ3RoID4gNTApKSkgPyAoZm9ybUNvbnRyb2w/LnZhbHVlW3Byb3BzPy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ10gfHwgZm9ybUNvbnRyb2w/LnZhbHVlKSA6ICcnXCJcbiAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxuXG4gICAgQGlmKCEhcHJvcHM/LnNob3dTZWFyY2hCYXIpe1xuICAgIDxuZy10ZW1wbGF0ZSBuZy1oZWFkZXItdG1wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LWNvbnRhaW5lciBtYXQtZm9ybS1maWVsZC1kZW5zaXR5LTVcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJwcm9wc1snYXBwZWFyYW5jZSddIHx8ICdvdXRsaW5lJ1wiIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICA8c2EtaWNvbiBpY29uPVwic2VhcmNoSWNvblwiIGNsYXNzPVwic2VhcmNoSWNvbnNcIiBzaXplPVwiMjBcIiBtYXRQcmVmaXg+PC9zYS1pY29uPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJtZW51LXNlYXJjaC1iYXJcIiBjbGFzcz1cInNlYXJjaC1pbnB1dCBzZWFyY2hJY29uc1wiXG4gICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJvblNlYXJjaCgkZXZlbnQpXCIgKGtleWRvd24pPVwic3RvcEJhY2tzcGFjZVByb3BhZ2F0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJvcHM/LnNlYXJjaFBsYWNlaG9sZGVyIHx8ICdTZWFyY2gnXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIC8+XG4gICAgICAgICAgICAgICAgPHNhLWljb24gaWNvbj1cImNsb3NlT3V0bGluZWRcIiBjbGFzcz1cInBvaW50ZXIgc2VhcmNoSWNvbnNcIiBzaXplPVwiMTVcIiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCRldmVudClcIj48L3NhLWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIH1cbiAgICA8IS0tIE9wdGlvbiB0ZW1wbGF0ZSB3aXRoIGEgY2hlY2tib3ggaW4gZnJvbnQgb2YgZWFjaCByb3cgLS0+XG4gICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWl0ZW0kPVwiaXRlbSRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1yb3dcIiBcbiAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIoaXRlbVtwcm9wcy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ10/Lmxlbmd0aCA+IDgwKSA/IGl0ZW1bcHJvcHMuYmluZExhYmVsIHx8ICdsYWJlbCddIDogJydcIiBcbiAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxuICAgICAgICAgICAgQGlmKHByb3BzPy5tdWx0aXBsZSl7XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXRlbSQuc2VsZWN0ZWRcIiB0YWJpbmRleD1cIi0xXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uLWxhYmVsXCI+e3sgaXRlbVtwcm9wcy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ10gfX08L3NwYW4+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gU2luZ2xlIHNlbGVjdCBsYWJlbCB0ZW1wbGF0ZSAtLT5cbiAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1jbGVhcj1cImNsZWFyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmctdmFsdWUtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7IGl0ZW1bcHJvcHMuYmluZExhYmVsIHx8ICdsYWJlbCddIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBTZWxlY3RlZCBpdGVtcyBjaGlwIHRlbXBsYXRlIChvcHRpb25hbCkgLS0+XG4gICAgPG5nLXRlbXBsYXRlIG5nLW11bHRpLWxhYmVsLXRtcCBsZXQtaXRlbXM9XCJpdGVtc1wiIGxldC1jbGVhcj1cImNsZWFyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwcyBuZy12YWx1ZXMtbGlzdFwiPlxuXG4gICAgICAgICAgICA8IS0tIElmIGNvbGxhcHNlZDogc2hvdyBvbmx5IGZpcnN0IDIgKyBzdW1tYXJ5IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFleHBhbmRlZFN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChzIG9mIGl0ZW1zLnNsaWNlKDAsIDIpOyB0cmFjayBzW3Byb3BzLmJpbmRWYWx1ZSB8fCAndmFsdWUnXSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZVwiIFxuICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiKHNbcHJvcHMuYmluZExhYmVsIHx8ICdsYWJlbCddPy5sZW5ndGggPiAzMCkgPyBzW3Byb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnXSA6ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5nLXZhbHVlLWxhYmVsXCI+e3sgc1twcm9wcy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ10gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmctdmFsdWUtaWNvbiByaWdodFwiIChjbGljayk9XCJjbGVhcihzKVwiPjxzYS1pY29uIGljb249XCJjbG9zZU91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiMTFcIj48L3NhLWljb24+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpZiAoaXRlbXMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZSBzdW1tYXJ5LWNoaXAgcG9pbnRlclwiIFxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVN1bW1hcnkoKVwiIFxuICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNsaWNrIHRvIGV4cGFuZCBhbGwgc2VsZWN0ZWQgaXRlbXNcIiBcbiAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmctdmFsdWUtbGFiZWxcIj4re3sgaXRlbXMubGVuZ3RoIC0gMiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZy12YWx1ZS1pY29uIHJpZ2h0XCIgKGNsaWNrKT1cImNsZWFyUmVtYWluaW5nKGl0ZW1zLCBjbGVhcilcIj48c2EtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJjbG9zZU91dGxpbmVkXCIgc2l6ZT1cIjExXCI+PC9zYS1pY29uPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBJZiBleHBhbmRlZDogc2hvdyBhbGwgaXRlbXMgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXhwYW5kZWRTdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgQGZvciAocyBvZiBpdGVtczsgdHJhY2sgc1twcm9wcy5iaW5kVmFsdWUgfHwgJ3ZhbHVlJ10pIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmctdmFsdWVcIiBcbiAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIihzW3Byb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnXT8ubGVuZ3RoID4gMzApID8gc1twcm9wcy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ10gOiAnJ1wiIFxuICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZy12YWx1ZS1sYWJlbFwiPnt7IHNbcHJvcHMuYmluZExhYmVsIHx8ICdsYWJlbCddIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5nLXZhbHVlLWljb24gcmlnaHRcIiAoY2xpY2spPVwiY2xlYXIocylcIj48c2EtaWNvbiBpY29uPVwiY2xvc2VPdXRsaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjExXCI+PC9zYS1pY29uPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPCEtLSBDb2xsYXBzZSBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5nLXZhbHVlIHN1bW1hcnktY2hpcCBwb2ludGVyXCIgXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU3VtbWFyeSgpXCIgXG4gICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ2xpY2sgdG8gY29sbGFwc2VcIiBcbiAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzYS1pY29uIGNsYXNzPVwibmctdmFsdWUtbGFiZWxcIiBzaXplPVwiMThcIiBpY29uPVwibGVmdENoZXZyb25DaXJjbGVcIj48L3NhLWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgQGlmKHByb3BzPy5mb290ZXIpe1xuICAgIDxuZy10ZW1wbGF0ZSBuZy1mb290ZXItdG1wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZm9vdGVyXCI+e3twcm9wcz8uZm9vdGVyPy5kZXNjcmlwdGlvbn19PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICB9XG5cbiAgICA8bmctdGVtcGxhdGUgbmctbm90Zm91bmQtdG1wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm8tcmVzdWx0c1wiPlxuICAgICAgICAgICAgQGlmIChzZWFyY2hWYWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAge3sgcHJvcHM/LnNlYXJjaE5vdEZvdW5kVGV4dCB8fCAn4p2MIE5vIGl0ZW1zIG1hdGNoIFwiJyArIHNlYXJjaFZhbHVlICsgJ1wiJyB9fVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICB7eyBwcm9wcz8ubm90Rm91bmRUZXh0IHx8ICfimqDvuI8gTm8gb3B0aW9ucyBhdmFpbGFibGUnIH19XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgbmctbG9hZGluZ3RleHQtdG1wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZ1wiPlxuICAgICAgICAgICAgPHNhLWljb24gaWNvbj1cImxvYWRlclwiIHNpemU9XCIxNlwiIGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgPHNwYW4+TG9hZGluZyBvcHRpb25zLi4uPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy1zZWxlY3Q+Il19
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvZHJvcGRvd24vbmctc2VsZWN0L25nLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Ryb3Bkb3duL25nLXNlbGVjdC9uZy1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlD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QVcsc1BBQ1gsWUFBWSw4QkFDWixjQUFjLGtoREFDZCxhQUFhLDZOQUNiLGtCQUFrQiwyZUFDbEIsY0FBYywwV0FDZCxhQUFhLDhCQUNiLGVBQWUsOEJBQ2YsZ0JBQWdCLDRUQUNoQixxQkFBcUIsOEJBQ3JCLG1CQUFtQiw4QkFDbkIsbUJBQW1CLDhCQUNuQixpQkFBaUI7OzJGQU1SLGlCQUFpQjtrQkF4QjdCLFNBQVM7K0JBQ0UsY0FBYyxjQUNaLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3FCQUNsQixhQUNVLENBQUMsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEb0NoZWNrIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBOZ1NlbGVjdE1vZHVsZSB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaWNvbi9pY29uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYS1uZy1zZWxlY3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRm9ybWx5TW9kdWxlLFxuICAgIE5nU2VsZWN0TW9kdWxlLFxuICAgIEljb25Db21wb25lbnQsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbSWNvblNlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDogJy4vbmctc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL25nLXNlbGVjdC5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBOZ1NlbGVjdENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8YW55Pj4gaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgZmlsdGVyZWRPcHRpb25zOiBhbnlbXTtcbiAgc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9vcHRpb25zOiBhbnlbXTtcblxuICBvblNlYXJjaChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgYmluZExhYmVsID0gdGhpcy5wcm9wcy5iaW5kTGFiZWwgfHwgJ2xhYmVsJztcblxuICAgIGlmICghc2VhcmNoVmFsdWUpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gWy4uLih0aGlzLmZpZWxkLnByb3BzPy5vcHRpb25zIHx8IFtdKV07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSAodGhpcy5maWVsZC5wcm9wcz8ub3B0aW9ucyB8fCBbXSkuZmlsdGVyKG9wdCA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IG9wdD8uW2JpbmRMYWJlbF0gPz8gJyc7XG4gICAgICByZXR1cm4gU3RyaW5nKGxhYmVsKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLnByb3BzLm9wdGlvbnM7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4uKHRoaXMucHJvcHMub3B0aW9ucyB8fCBbXSldO1xuXG4gICAgLy8gSWYgYSBkZWZhdWx0IHZhbHVlIGlzIHByb3ZpZGVkIGluIHByb3BzIGFuZCB0aGUgZm9ybSBjb250cm9sIGhhcyBubyB2YWx1ZSB5ZXQsIHNldCBpdFxuICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB0aGlzLnByb3BzPy5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKCh0aGlzLmZvcm1Db250cm9sLnZhbHVlID09PSBudWxsIHx8IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09IHVuZGVmaW5lZCkgJiYgZGVmYXVsdFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGRlZmF1bHRWYWwpO1xuICAgIH1cbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zICE9PSB0aGlzLl9vcHRpb25zKSB7XG4gICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5wcm9wcy5vcHRpb25zO1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4uKHRoaXMuX29wdGlvbnMgfHwgW10pXTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJzsgLy8gQ2xlYXIgc2VhcmNoIHZhbHVlIHdoZW4gb3B0aW9ucyBjaGFuZ2VcbiAgICB9XG4gIH1cblxuXG5cbiAgLy8gKE9wdGlvbmFsKSBTZWxlY3QvRGVzZWxlY3QgYWxsIGhlbHBlcnNcbiAgYWxsU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM/LnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gdGhpcy5maWVsZC5wcm9wcz8ub3B0aW9ucy5sZW5ndGg7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoKSB7XG4gICAgY29uc3QgYmluZFZhbHVlID0gdGhpcy5wcm9wcy5iaW5kVmFsdWUgfHwgJ3ZhbHVlJztcbiAgICBpZiAodGhpcy5hbGxTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0ZWRWYWx1ZXMgPSAodGhpcy5maWVsZC5wcm9wcz8ub3B0aW9ucyB8fCBbXSkubWFwKG8gPT4gb1tiaW5kVmFsdWVdKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclJlbWFpbmluZyhpdGVtczogYW55W10sIGNsZWFyOiAoaXRlbTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgLy8gcmVtb3ZlIG9ubHkgdGhlIGl0ZW1zIGFmdGVyIHRoZSBmaXJzdCB0d29cbiAgICBpdGVtcy5zbGljZSgyKS5mb3JFYWNoKGl0ZW0gPT4gY2xlYXIoaXRlbSkpO1xuICB9XG4gIGV4cGFuZGVkU3VtbWFyeSA9IGZhbHNlO1xuXG4gIHRvZ2dsZVN1bW1hcnkoKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZFN1bW1hcnkgPSAhdGhpcy5leHBhbmRlZFN1bW1hcnk7XG4gIH1cblxuICAvLyBUaGlzIG1ldGhvZCB3aWxsIHN0b3AgdGhlIGV2ZW50IGZyb20gYnViYmxpbmcgdXBcbiAgc3RvcEJhY2tzcGFjZVByb3BhZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZXZlbnQua2V5Q29kZSA9PT0gOCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWFyY2goZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gWy4uLnRoaXMuZmllbGQucHJvcHM/Lm9wdGlvbnNdO1xuICB9XG59XG4iLCI8bmctc2VsZWN0IFtpdGVtc109XCJmaWx0ZXJlZE9wdGlvbnNcIiBbbXVsdGlwbGVdPVwicHJvcHM/Lm11bHRpcGxlIHx8IGZhbHNlXCIgW2JpbmRMYWJlbF09XCJwcm9wcz8uYmluZExhYmVsIHx8ICdsYWJlbCdcIlxuICAgIFtjbG9zZU9uU2VsZWN0XT1cInByb3BzPy5jbG9zZU9uU2VsZWN0ID8/IHRydWVcIiBbYmluZFZhbHVlXT1cInByb3BzPy5iaW5kVmFsdWUgfHwgJ3ZhbHVlJ1wiXG4gICAgW3BsYWNlaG9sZGVyXT1cInByb3BzPy5wbGFjZWhvbGRlciB8fCAnU2VsZWN0J1wiIFtzZWFyY2hhYmxlXT1cImZhbHNlXCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICBbY2xlYXJhYmxlXT1cInByb3BzPy5pc0NsZWFyYWJsZVwiIFthcHBlYXJhbmNlXT1cInByb3BzWydhcHBlYXJhbmNlJ10gfHwgJ291dGxpbmUnXCIgW2xvYWRpbmddPVwicHJvcHM/LmxvYWRpbmcgfHwgZmFsc2VcIiBcbiAgICBjbGFzcz1cIm5nLXNlbGVjdC1jdXN0b21cIj5cblxuICAgIEBpZighIXByb3BzPy5zaG93U2VhcmNoQmFyKXtcbiAgICA8bmctdGVtcGxhdGUgbmctaGVhZGVyLXRtcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jb250YWluZXIgbWF0LWZvcm0tZmllbGQtZGVuc2l0eS01XCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwicHJvcHNbJ2FwcGVhcmFuY2UnXSB8fCAnb3V0bGluZSdcIiBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgPHNhLWljb24gaWNvbj1cInNlYXJjaEljb25cIiBjbGFzcz1cInNlYXJjaEljb25zXCIgc2l6ZT1cIjIwXCIgbWF0UHJlZml4Pjwvc2EtaWNvbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibWVudS1zZWFyY2gtYmFyXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXQgc2VhcmNoSWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25TZWFyY2goJGV2ZW50KVwiIChrZXlkb3duKT1cInN0b3BCYWNrc3BhY2VQcm9wYWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BzPy5zZWFyY2hQbGFjZWhvbGRlciB8fCAnU2VhcmNoJ1wiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIiAvPlxuICAgICAgICAgICAgICAgIDxzYS1pY29uIGljb249XCJjbG9zZU91dGxpbmVkXCIgY2xhc3M9XCJwb2ludGVyIHNlYXJjaEljb25zXCIgc2l6ZT1cIjE1XCIgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlYXJjaCgkZXZlbnQpXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICB9XG4gICAgPCEtLSBPcHRpb24gdGVtcGxhdGUgd2l0aCBhIGNoZWNrYm94IGluIGZyb250IG9mIGVhY2ggcm93IC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pdGVtJD1cIml0ZW0kXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tcm93XCIgXG4gICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiKGl0ZW1bcHJvcHMuYmluZExhYmVsIHx8ICdsYWJlbCddPy5sZW5ndGggPiA0MCkgPyBpdGVtW3Byb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnXSA6ICcnXCIgXG4gICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIj5cbiAgICAgICAgICAgIEBpZihwcm9wcz8ubXVsdGlwbGUpe1xuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIml0ZW0kLnNlbGVjdGVkXCIgdGFiaW5kZXg9XCItMVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbi1sYWJlbFwiPnt7IGl0ZW1bcHJvcHMuYmluZExhYmVsIHx8ICdsYWJlbCddIH19PC9zcGFuPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIFNpbmdsZSBzZWxlY3QgbGFiZWwgdGVtcGxhdGUgLS0+XG4gICAgPG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtY2xlYXI9XCJjbGVhclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5nLXZhbHVlLWxhYmVsXCI+XG4gICAgICAgICAgICB7eyBpdGVtW3Byb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnXSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gU2VsZWN0ZWQgaXRlbXMgY2hpcCB0ZW1wbGF0ZSAob3B0aW9uYWwpIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBuZy1tdWx0aS1sYWJlbC10bXAgbGV0LWl0ZW1zPVwiaXRlbXNcIiBsZXQtY2xlYXI9XCJjbGVhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcHMgbmctdmFsdWVzLWxpc3RcIj5cblxuICAgICAgICAgICAgPCEtLSBJZiBjb2xsYXBzZWQ6IHNob3cgb25seSBmaXJzdCAyICsgc3VtbWFyeSAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZXhwYW5kZWRTdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgQGZvciAocyBvZiBpdGVtcy5zbGljZSgwLCAyKTsgdHJhY2sgc1twcm9wcy5iaW5kVmFsdWUgfHwgJ3ZhbHVlJ10pIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmctdmFsdWVcIiBcbiAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIihzW3Byb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnXT8ubGVuZ3RoID4gMzApID8gc1twcm9wcy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ10gOiAnJ1wiIFxuICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZy12YWx1ZS1sYWJlbFwiPnt7IHNbcHJvcHMuYmluZExhYmVsIHx8ICdsYWJlbCddIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5nLXZhbHVlLWljb24gcmlnaHRcIiAoY2xpY2spPVwiY2xlYXIocylcIj48c2EtaWNvbiBpY29uPVwiY2xvc2VPdXRsaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjExXCI+PC9zYS1pY29uPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW1zLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmctdmFsdWUgc3VtbWFyeS1jaGlwIHBvaW50ZXJcIiBcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTdW1tYXJ5KClcIiBcbiAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDbGljayB0byBleHBhbmQgYWxsIHNlbGVjdGVkIGl0ZW1zXCIgXG4gICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5nLXZhbHVlLWxhYmVsXCI+K3t7IGl0ZW1zLmxlbmd0aCAtIDIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmctdmFsdWUtaWNvbiByaWdodFwiIChjbGljayk9XCJjbGVhclJlbWFpbmluZyhpdGVtcywgY2xlYXIpXCI+PHNhLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiY2xvc2VPdXRsaW5lZFwiIHNpemU9XCIxMVwiPjwvc2EtaWNvbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gSWYgZXhwYW5kZWQ6IHNob3cgYWxsIGl0ZW1zIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4cGFuZGVkU3VtbWFyeVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHMgb2YgaXRlbXM7IHRyYWNrIHNbcHJvcHMuYmluZFZhbHVlIHx8ICd2YWx1ZSddKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5nLXZhbHVlXCIgXG4gICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIoc1twcm9wcy5iaW5kTGFiZWwgfHwgJ2xhYmVsJ10/Lmxlbmd0aCA+IDMwKSA/IHNbcHJvcHMuYmluZExhYmVsIHx8ICdsYWJlbCddIDogJydcIiBcbiAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmctdmFsdWUtbGFiZWxcIj57eyBzW3Byb3BzLmJpbmRMYWJlbCB8fCAnbGFiZWwnXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZy12YWx1ZS1pY29uIHJpZ2h0XCIgKGNsaWNrKT1cImNsZWFyKHMpXCI+PHNhLWljb24gaWNvbj1cImNsb3NlT3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCIxMVwiPjwvc2EtaWNvbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwhLS0gQ29sbGFwc2UgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZSBzdW1tYXJ5LWNoaXAgcG9pbnRlclwiIFxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVN1bW1hcnkoKVwiIFxuICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNsaWNrIHRvIGNvbGxhcHNlXCIgXG4gICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c2EtaWNvbiBjbGFzcz1cIm5nLXZhbHVlLWxhYmVsXCIgc2l6ZT1cIjE4XCIgaWNvbj1cImxlZnRDaGV2cm9uQ2lyY2xlXCI+PC9zYS1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIEBpZihwcm9wcz8uZm9vdGVyKXtcbiAgICA8bmctdGVtcGxhdGUgbmctZm9vdGVyLXRtcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWZvb3RlclwiPnt7cHJvcHM/LmZvb3Rlcj8uZGVzY3JpcHRpb259fTwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgfVxuXG4gICAgPG5nLXRlbXBsYXRlIG5nLW5vdGZvdW5kLXRtcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdHNcIj5cbiAgICAgICAgICAgIEBpZiAoc2VhcmNoVmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHt7IHByb3BzPy5zZWFyY2hOb3RGb3VuZFRleHQgfHwgJ+KdjCBObyBpdGVtcyBtYXRjaCBcIicgKyBzZWFyY2hWYWx1ZSArICdcIicgfX1cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAge3sgcHJvcHM/Lm5vdEZvdW5kVGV4dCB8fCAn4pqg77iPIE5vIG9wdGlvbnMgYXZhaWxhYmxlJyB9fVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlIG5nLWxvYWRpbmd0ZXh0LXRtcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxzYS1pY29uIGljb249XCJsb2FkZXJcIiBzaXplPVwiMTZcIiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvc2EtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPkxvYWRpbmcgb3B0aW9ucy4uLjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctc2VsZWN0PiJdfQ==